Extralab
ʎɐqǝ lǝ uǝ opɐlɔǝʇ un oɹdɯoɔ ǝnb zǝʌ ɐɯıʇlú ɐl
Protección contra exploits
Un exploit es un programa que te ponen en un
directorio con acceso libre y permisos de ejecución, como el /tmp, y
convierte en root al ususario que lo ejecuta. Y así pueden usar tu
máquina para lo que les salga de las bolas, como enviar spam usando tu
servidor de email o realizar ataques DoS o llenarte el disco de warez.
Una solución es convertir el directorio /tmp en noexec, de manera que no se pueda ejecutar nada en él. Este es el proceso:
Como root hacemos estos pasos:
cd /dev
dd if=/dev/zero of=tmpMnt bs=1024 count=100000
/sbin/mke2fs /dev/tmpMnt (Contestamos 'y' a la pregunta que nos hace)
cp -R /tmp/ /tmp_backup
mount -o loop,rw,nosuid,noexec /dev/tmpMnt /tmp
chmod 0777 /tmp
cp -R /tmp_backup/* /tmp/
rm -rf /tmp_backup
Ahora se modifica el archivo /etc/fstab para hacer que
el /dev/tmpMnt se monte al reiniciar el server. Se trata
de añadir esta linea:
/dev/tmpMnt /tmp ext2 loop,rw,nosuid,noexec 0 0
Se supone que los espacios de esta linea son tabuladores,
aunque con espacios normales a mi me ha funcionado.
Reiniciamos los servicios como por ejemplo postgresql, mysql,
el clamantivirus,etc... para que se vuelvan a crear los sockets
y locks en /tmp si es ahi donde los creaban.
Para probarlo creamos un script shell en /tmp e intentamos
ejecutarlo. Por ejemplo, creamos un archivo con estas dos líneas:
#!/bin/sh
echo prueba
lo guardamos como /tmp/test.sh, le hacemos un chmod 0755 e
intentamos ejecutarlo. Si nos sale esto:
[root@server tmp]# ./test.sh
bash: ./test.sh: bad interpreter: Permission denied
es que lo hemos hecho bien.
En cuanto a /var/tmp pues la borramos y la enlazamos a /tmp
rm -rf /var/tmp/
ln -s /tmp/ /var/
Y a lo mejor habría que hacer lo mismo con /dev/shm
Y una chapucilla, pero que es muy efectiva:
Se trata de anular el acceso a wget, linx, compiladores, etc.
Nos hacemos un bash script con estos comandos:
chmod 000 /usr/bin/wget
chmod 000 /usr/bin/lynx
chmod 000 /usr/bin/*cc*
chmod 000 /usr/sbin/*cc*
Y le damos permisos de ejecución, y creamos otro que sirva para dejar la cosa como estaba:
chmod 755 /usr/bin/wget
chmod 755 /usr/bin/lynx
chmod 755 /usr/bin/*cc*
chmod 755 /usr/sbin/*cc*
Tambien le damos permisos de ejecucion, asi cuando queramos bajar algo, compilar,etc. ejecutamos el segundo. Y no debemos olvidar volver a ejecutar el primero antes de salir.
Información sacada de algunos mensajes de jaume, bandido, ideasmultiples, emilio y algunos mas, incluso yo mismo, de los foros de ev1servers.
Una solución es convertir el directorio /tmp en noexec, de manera que no se pueda ejecutar nada en él. Este es el proceso:
Como root hacemos estos pasos:
cd /dev
dd if=/dev/zero of=tmpMnt bs=1024 count=100000
/sbin/mke2fs /dev/tmpMnt (Contestamos 'y' a la pregunta que nos hace)
cp -R /tmp/ /tmp_backup
mount -o loop,rw,nosuid,noexec /dev/tmpMnt /tmp
chmod 0777 /tmp
cp -R /tmp_backup/* /tmp/
rm -rf /tmp_backup
Ahora se modifica el archivo /etc/fstab para hacer que
el /dev/tmpMnt se monte al reiniciar el server. Se trata
de añadir esta linea:
/dev/tmpMnt /tmp ext2 loop,rw,nosuid,noexec 0 0
Se supone que los espacios de esta linea son tabuladores,
aunque con espacios normales a mi me ha funcionado.
Reiniciamos los servicios como por ejemplo postgresql, mysql,
el clamantivirus,etc... para que se vuelvan a crear los sockets
y locks en /tmp si es ahi donde los creaban.
Para probarlo creamos un script shell en /tmp e intentamos
ejecutarlo. Por ejemplo, creamos un archivo con estas dos líneas:
#!/bin/sh
echo prueba
lo guardamos como /tmp/test.sh, le hacemos un chmod 0755 e
intentamos ejecutarlo. Si nos sale esto:
[root@server tmp]# ./test.sh
bash: ./test.sh: bad interpreter: Permission denied
es que lo hemos hecho bien.
En cuanto a /var/tmp pues la borramos y la enlazamos a /tmp
rm -rf /var/tmp/
ln -s /tmp/ /var/
Y a lo mejor habría que hacer lo mismo con /dev/shm
Y una chapucilla, pero que es muy efectiva:
Se trata de anular el acceso a wget, linx, compiladores, etc.
Nos hacemos un bash script con estos comandos:
chmod 000 /usr/bin/wget
chmod 000 /usr/bin/lynx
chmod 000 /usr/bin/*cc*
chmod 000 /usr/sbin/*cc*
Y le damos permisos de ejecución, y creamos otro que sirva para dejar la cosa como estaba:
chmod 755 /usr/bin/wget
chmod 755 /usr/bin/lynx
chmod 755 /usr/bin/*cc*
chmod 755 /usr/sbin/*cc*
Tambien le damos permisos de ejecucion, asi cuando queramos bajar algo, compilar,etc. ejecutamos el segundo. Y no debemos olvidar volver a ejecutar el primero antes de salir.
Información sacada de algunos mensajes de jaume, bandido, ideasmultiples, emilio y algunos mas, incluso yo mismo, de los foros de ev1servers.
No hay comentarios, puedes escribir el primero.
¡Gracias por dejar su opinión! Por favor, procure que sus comentarios sean apropiados al tema tratado en la entrada; que sean respetuosos con la gramática y la ortografía, o serán eliminados. Y si han de contener insultos procure que sean elegantes y conforme a la legalidad vigente para evitar que sean modificados.
La moderación está desactivada
para los usuarios anónimos