Asegurando el directorio tmp

Introducción al problema

Uno de los clientes que actualmente administro me planteo un problema de seguridad que tenían antes de ser administrados. A través de aplicaciones TOMCAT que tenían estos estaban siendo atacados a través de procesos en el TMP que sobrecargaban la CPU.

Nosotros tomamos varias medidas para solventar los problemas de esto. Una de ellas, que es la explicaré, fue la de evitar que se pudiera ejecutar comando a través de dicho directorio. Es decir aseguramos el directorio tmp.

Asegurando el directorio tmp

1) Generando un fichero de 1 GB

Lo primero que haremos será crear un fichero de 1 GB en el directorio raiz. Para ello comprobaremos que tenemos suficiente espacio para crear dicho fichero.

Para ello ejecutaremos el comando «dd»:

CentOS/RedHat

dd if=/dev/zero of=/dev/tmpDIR bs=1024 count=1000000

Con este comando nos crea un fichero localizado en «/dev/tmpDIR» del tamaño de 1 GB.

Debian/Ubuntu

dd if=/dev/zero of=/usr/tmpDSK bs=1024 count=1024000

Con este comando nos crea un fichero localizado en «/usr/tmpDSK» del tamaño de 1 GB.

** Nota: Probé usando el /dev en Ubuntu y parece ser que no se mantiene los cambios (al reiniciar el servidor se me quedaba trabado en el punto de montaje /tmp) por lo tanto usaremos dicha ruta.

2) Dándole formato al fichero EXT3 o EXT4

Recomendamos el sistema EXT4 para los sistemas nuevo debido a las múltiples ventajas que este sistema de ficheros permite. Para los que tengan un sistema operativo más antiguos tenemos EXT3.

CentOS/RedHat

  • Formateando en Ext3: mkfs.ext3 /dev/tmpDIR
  • Formateando en Ext4: mkfs.ext4 /dev/tmpDIR

Nos dirá que el archivo no es un dispositivo especial , que si aún así queremos continuar y le diremos que «y».

Debian/Ubuntu

No hace falta dar formato, ya que usaremos un sistema de ficheros llamado tmpfs.

3) Copiando el directorio tmp actual

Con este comando que vamos a lanzar copiaremos el directorio /tmp a /tmpBACK.

cp -Rpf /tmp /tmpBACK

4) Montando el nuevo directorio

En este apartado lo que haremos será montar el nuevo fichero sobre el directorio /tmp. Aplicando las medidas de seguridad para que no se ejecuten ficheros.

CentOS/RedHat

mount -o loop,noexec,nosuid,rw /dev/tmpDIR /tmp

Debian/Ubuntu

mount -t tmpfs -o loop,noexec,nosuid,rw /usr/tmpDSK /tmp

Aparte de ello hemos agregado la opción de nosuid para que los procesos, en el caso de ejecutarse, lo haga a través del usuario de la aplicación.

5) Modificamos los permisos del directorio

chmod 1777 /tmp

6) Copiamos lo que había en el directorio tmpBACK

cp -Rpf /tmpBACK/* /tmp/

7) Modificar el fichero fstab

A continuación procederemos a modificar el archivo «/etc/fstab». Este fichero se encarga de montar las particiones al iniciarse el sistema.

CentOS/RedHat

# Para quien formateare el archivo en ext3
/dev/tmpDIR              /tmp                    ext3    loop,nosuid,noexec,rw 0 0
# Para quien formateare el archivo en ext4
/dev/tmpDIR              /tmp                    ext4    loop,nosuid,noexec,rw 0 0

Debian/Ubuntu

/usr/tmpDSK /tmp tmpfs loop,nosuid,noexec,rw 0 0

8) Comprobando que todo este correcto

Lo último que nos queda es comprobar si funciona la configuración que hemos realizado. Para ello llevaremos un ejecutable al directorio /tmp y al ejecutarlo no debería dejar hacerlo si lo hemos hecho correctamente.

Asegurando el directorio /var/tmp

En algunos sistema existe también este directorio y lo que haremos será «securizarlo» aprovechando lo realizado anteriormente.

1) Movemos el directorio /var/tmp

mv /var/tmp /var/tmpbak

2) Creamos un enlace simbólico del /tmp

ln -s /tmp /var/tmp

3) Copiamos el contenido de /var/tmpback en /tmp

cp -pR /var/tmpbak/* /tmp

Conclusión

Con esto hemos conseguido que ningún atacante ejecute acciones a través del directorio /tmp. Las aplicaciones que suelen acudir a este directorio suelen ser php al subir fichero o el tomcat al iniciarse o ciertos daemon del sistema.

Deja un comentario

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