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.