Seguridad en la partici贸n /tmp y /dev/shm en Linux

Para mantener el servidor libre de rookits (programas o conjuntos de programas que se esconden para tomar el control del sistema) es una buena idea aumentar el nivel de seguridad. Un administrador de sistemas en el caso de servidores Linux, puede crear una partici贸n independiente para el directorio /tmp y montar (usar el comando聽mount聽para agregar m谩s dispositivos en un sistema de archivos) esto con los par谩metros聽noexec聽y聽nosuid. Para realizar este procedimiento no es necesario reiniciar el sistema operativo o crear reparticiones de la unidad del disco duro.

1)聽En primer lugar se debe proteger el directorio /tmp:

Se crear谩 un archivo de 2GB para la partici贸n /tmp parition y se elegir谩 el sistema de archivos ext3 para tmp:
# dd if=/dev/zero of=/dev/tmpFS bs=1024 count=2000000
# /sbin/mkfs.ext3 /dev/tmpFS

Crear una copiar de seguridad de su actual unidad /tmp:
# cp -Rpf /tmp /tmp_backup

Montar una nueva partici贸n tmp y cambiar los permisos:
# mount -o loop,noexec,nosuid,rw /dev/tmpFS /tmp
# chmod 1777 /tmp

Copiar la informaci贸n respaldada al nuevo tmp:
cp -Rpf /tmp_backup/* /tmp/

Si usted ejecuta el commando ‘mount’ usted deber铆a obtener algo similar a esto:
/dev/tmpFS on /tmp type ext3 (rw,noexec,nosuid,loop=/dev/loop0)

Editamos con un editor de texto (como vim, pico) /etc/fstab y agregamos est谩 l铆nea:
/dev/tmpFS /tmp ext3 loop,nosuid,noexec,rw 0 0

Actualizamos el archivo fstab para la nueva entrada con:
# mount -o remount /tmp

Ahora usted puede intentar ejecutar un script sobre la partici贸n /tmp, si usted obtiene un mensaje de 鈥減ermiso denegado鈥, implica que est谩 totalmente segura.

2) 聽Seguridad en /var/tmp:

Esto debe hacerse debido a que algunas aplicaciones usan la carpeta temporal /var/tmp, y cualquiera puede acceder a ella, por tal caso necesita ser protegida.

Renombrar esto y crear un enlace simb贸lico a 聽/tmp:
# mv /var/tmp /var/tmp1
# ln -s /tmp /var/tmp

Copiamos los antiguos archives nuevamente:
# cp /var/tmpantiguo/* /tmp/

Nota: Usted debe reiniciar todos los servicios relacionados que puedan estar utilizando la partici贸n montada /tmp.

3) 聽Seguridad en /dev/shm:

Para terminar de realizar todas las tareas de forma correcta, usted debe proteger /dev/shm para detener que rookots se ejecuten aqu铆.

Editando su /etc/fstab:
# nano /etc/fstab

Se debe cambiar:
鈥渘one /dev/shm tmpfs defaults,rw 0 0鈥a
鈥渘one /dev/shm tmpfs defaults,nosuid,noexec,rw 0 0鈥

Y posteriormente Remontar la unidad /dev/shm:
# mount -o remount /dev/shm

Recomendaciones generales

  • Siempre actualizar el kernel cuando sale un bug de seguridad.
  • Estar apuntado a la lista de seguridad de Debian/RH/MDK y hacer updates en cuanto salen avisos.
  • Estar apuntado a otras listas de seguridad, y si sale un bug en ellas y aun no ha llegado el aviso de Debian/RH/MDK, comprobar si tenemos el bug y si hace falta cortar el servicio.
  • Tener un kernel, si es posible, est谩tico, es decir: las opciones que necesito las tengo integradas como Y (nunca como modulos), y en la segunda opcion del make menuconfig (las de los modulos), quito el soporte de modulos: como no se pueden cargar modulos, no me pueden cargar los modulos de los rootkits. En determinados casos no se podr谩 dejar sin soporte de m贸dulos (si necesitamos vmware, lmsensors, bluetooth …), pero en un servidor que no tenga nada de esto, es pr谩cticamente obligatorio.
  • Cambiar diferentes opciones de PHP:
  • Activar el聽safe_mode = on聽de php.ini para PHP4. Eso hace que cuando se ejecuta un script que es de usuario:grupo, ese script s贸lo puede acceder a ficheros de usuario:grupo. Es decir, no podria hacer un cat del /etc/passwd aunque tenga permiso de lectura para todos. El safemode tampoco permite ejecutar comandos (para que no te hagan via fallos de apache ids, uname -a, y dem谩s). A veces no es posible activar el safemode, depende de si tenemos alguna aplicaci贸n que sea incompatible con 茅l o no (por ejemplo, algunos webmails no funcionan si activas safe_mode) (http://es2.php.net/features.safe-mode).
  • Desactivar聽Register_globals聽(a Off) si las aplicaciones PHP que usemos est谩n bien realizadas (es decir, deben acceder a las variables de los formularios mediante $_POST[‘VARIABLE’]). Conviene que leas el manual de PHP relativo a register_globals para saber qu茅 hace antes de tocar nada (http://es.php.net/register_globals).Al respecto del safe_mode y register_globals, minskog nos comenta lo siguiente:“Solo un apunte, si necesitas safe_mode off o globas_register a on para alguna aplicacion en concreto, y sabes que esa aplicacion est谩 bien hecha y que el acceso a ese directorio lo controlas t煤, por ejemplo gallery o vhcs , hay una directiva que te permite sobreescribir la conf de php (evidentemente por seguridad no funciona en .htaccess). Ser铆a php_admin_flag:

    php_admin_flag safe_mode off
    php_admin_flag register_global on

    Esto te permite dejar el server con safe_mode y register_globals a nivel de server, y desactivarlos donde necesites/quieras. Reitero que NO funciona en .htaccess por seguridad, tiene que ir en la conf de apache.”

  • Desactivar el聽Error Reporting聽de forma que no aparezcan por pantalla errores de PHP/Base de datos (no dando pistas de nombres de tablas, bases de datos, etc.). Para ello, cambiar las opciones聽display_errors, y/o聽error_reporting聽de php.ini. (http://es.php.net/error_reporting).
  • Mi servidor de correo es qmail (sin fallos de seguridad desde 1997 y aun esperando que alguien lo reviente por un premio de 100.000 $). Es infinitamente m谩s seguro que un sendmail. Otra gran opci贸n es postfix, o no correr ning煤n servidor de correo si no es necesario.
  • Si no necesitamos ning煤n servidor de correo abierto al exterior, reconfigurar el que usemos para que s贸lo escuche en 127.0.0.1.
  • Si no vamos a utilizar remotamente mysql, a帽adir la opci贸n del聽skip-networking聽en el /etc/my.cnf. Con esto conectaremos v铆a socket local y se dejar谩n de aceptar conexiones en el puerto 3306.
  • Si no es necesario, desinstalar portmap y servicios asociados (rpc, statd, nfs-kernel-server, etc.).
  • Los directorios /tmp y /var/tmp montados aparte como particiones con opciones nosuid, noexec y nodev. Estas opciones evitan que los usuarios puedan ejecutar scripts o binarios en esas particiones.
  • Binarios de compilaci贸n y descarga con permisos restringidos (gcc, make, wget, lynx…).
  • Instalar alg煤n software de control de binarios como tripwire, aide y alg煤n chequeador de rootkits como chkrootkit y rkhunter.(Nota, una vez instalado, basta con a帽adir estas 2 l铆neas al /etc/crontab:
     00 4 * * * root rkhunter --update > /dev/null 2>&
    1 30 4 * * * root rkhunter -c --nocolors --cronjob --report-mode --createlogfile --skip-keypress --quiet 

    )

  • Los logs de los analizadores (tripwire, rkhunter, etc.), no dejarlos nunca en el sistema, enviarlos por email a una m谩quina externa (para evitar que los “juackers” los falseen y nos enga帽en).
  • Cambiar SSH de puerto, por ejemplo al 26 (editando el /etc/services y luego el /etc/init.d/inetd.conf o xinetd).
  • Finalmente, un buen firewall (por ejemplo, shorewall) debe cerrar el acceso a todos los puertos que no debieran estar permitidos por debajo de 1024. Pese a disponer del firewall, quitar todos los servicios y desinstalar todos los paquetes no necesarios.

Particiones del sistema

Unos consejos a la hora de crear particiones:

Para prop贸sito general, con un disco de 20 gigas o m谩s, recomiendo las siguientes particiones:

  • / -> por ejemplo de 2 a 4 gigas ser铆a suficiente para el sistema.
  • /tmp -> entre medio giga y un giga sobrado.
  • /var -> partici贸n de 2 a 4 gigas montada como nodev,nosuid,noexec.
  • /var/log -> partici贸n de 2 gigas montada con nodev,nosuid,noexec.
  • /home -> partici贸n gorda para albergar /home y as铆 separar los datos del sistema (as铆 / puede ser m谩s peque帽a, y en /home puedes poner quotas).

Yo no pondr铆a /etc aparte.

Adem谩s as铆 si te es necesario tambi茅n puedes montar /home con noexec y dem谩s si no vas a ejecutar binarios desde ellas …

Estos valores son orientativos, los puedes aumentar segun el disco que tengas, pero realmente, se supone que /home tendr谩 los datos de mucho volumen (as铆 que ser谩 una de las particiones m谩s gordas), y /var tendr谩 al final las bases de datos (as铆 que tambi茅n necesitar谩s algo de espacio, pero no s茅 cu谩nto, depende de lo que tengas), y tambien puedes poner los ficheros de mysql en /home/bbdd, por ej. Luego /var/log est谩 aparte para asegurar que un crecimiento de los logs no tira abajo el sistema.

Y con todas esas particiones, / no necesita ser muy grande porque los datos est谩n en otros sitios y una debian estandar no pasa de medio giga. Yo le pongo 5 para tener espacio para compilar kernels y cosas de esas, pero sobra mucho…

Permisos sobre binarios de compilaci贸n y descargas

Por 煤ltimo, recomiendo lo siguiente:

 chmod 0700 /usr/bin/make
chmod 0700 /usr/bin/gcc*
chmod 0700 /usr/bin/as86
chmod 0700 /usr/bin/lynx
chmod 0700 /usr/bin/wget
chmod 0700 /usr/bin/curl
chmod 0700 /usr/bin/nc 

As铆 te aseguras de que s贸lo root puede compilar. Como s贸lo root puede compilar, si entran como www-data no podr谩n compilar los rootkits a partir del codigo fuente, y tampoco ejecutarlos por el noexec. Adem谩s, no podr谩n descargar los rootkits y exploits porque no tendr谩n disponible wget ni lynx.

Antes de cambiar estos permisos recordad que los usuarios dejar谩n de poder utilizar estos binarios, con lo que si tenemos alg煤n script que corra como usuario o alg煤n user que los utilice, tenemos que tenerlo en cuenta.

Cambiar SSH de puerto: del 22 al 26:

Les muestro los cambios realizados en mi sistema:

 # grep ssh-new /etc/services
ssh-new 26/tcp # SSH Remote Login Protocol
ssh-new 26/udp # SSH Remote Login Protocol
 # grep ssh-new /etc/inetd.conf
ssh-new stream tcp nowait root /usr/sbin/tcpd /usr/sbin/sshd -i

(hay que acordarse de abrirlo tambi茅n en el firewall).

En otras distribuciones necesitas modificar xinetd.

Share

This entry was posted in b1nary0, firewall, hardening, linux, seguridad. Bookmark the permalink.

Deja una respuesta

Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *

Este sitio usa Akismet para reducir el spam. Aprende c贸mo se procesan los datos de tus comentarios.