Aísla y asegura aplicaciones con AppArmor
Escrito por Inigo Kintana el lunes 28 mayo 2007 a las 13:46 :: Link permanente :: rss
AppArmor protege proactivamente el sistema operativo y las aplicaciones de amenazas externas o internas. Las políticas de seguridad de AppArmor ("perfiles") definen a qué recursos del sistema y privilegios pueden acceder las aplicaciones.
AppArmor es un excelente software proporcionado por Novell en sus últimas distribuciones OpenSuse 10 y Suse Linux Enterprise 10. Constituye una alternativa a SELinux, estándar creado por la NSA.
AppArmor se establece como una capa intermedia entre una aplicación (web, cliente-servidor o script) y los recursos del sistema operativo que la aplicación demanda durante su ejecución (sockets, acceso a ficheros y librerías ...).Como paso previo, se debe generar un "perfil", es decir, "configurar" o "enseñar" a AppArmor qué operaciones están permitidas para esa aplicación en concreto. AppArmor permite asegurar la ejecución de cualquier programa que se ejecute en un PC o servidor con SO (sistema operativo) OpenSuse 10.2 o Suse Linux Enterprise 10, gracias al "perfil" o control de acceso a recursos que establece para los programas.
La seguridad no es un producto es un proceso. Así pues, AppArmor se basa también en la separación de tareas. Es decir, la persona que programa o modifica parte de una aplicación es una persona diferente a la persona que prueba la aplicación. A su vez, existe otra persona que genera un "perfil" para esta aplicación dentro de AppArmor. Por último, tanto la aplicación como el "perfil" de AppArmor tienen que ser trasladadas al entorno de producción.
Ejemplos de riesgos de seguridad de los que nos puede proteger AppArmor:
- Imaginemos una aplicación web pequeñita con unos 20-30 ficheros en PHP o ASP (Mono). Supongamos que un desarrollador descontento modifica el clásico fichero "consulta.php" o "consulta.asp" para que información sensible sea enviada a una cuenta de correo anónima "yo@yahoo.com" que sólo él conoce. Si previamente al cambio, se ha generado en AppArmor un "perfil" para la ejecución de esta aplicación dentro de AppArmor, el fichero modificado será interceptado por AppArmor.
- Supongamos un shell script que es ejecutado por los operadores del departamento de IT todos las noches a una hora determinada. Un operador descontento o malicioso podría modificar un script con no muy buenas intenciones. Si previamente al cambio, se ha generado un "perfil" para la ejecución de este script dentro de AppArmor, el shell script modificado será interceptado por AppArmor.
- AppArmor también nos ayudará a protegernos ante los ataques constantes que sufren las máquinas de las DMZ, a reducir el riesgo de vulnerabilidades desconocidas de los programas, ante la incorrecta utilización de los programas que se ejecutan en los PCs o servidores, ... De todas maneras, no debemos perder la perspectiva, ya que, la mayoría de las vulneraciones de la seguridad de una organización provienen desde el personal interno y no desde el "super-inteligentísimo" y "malo-malísimo" hacker que nos ataca desde Internet.
Veamos un ejemplo de cómo crear un "perfil" de AppArmor para un pequeño shell script:
0) Creamos un sencillo shell script llamado "minicopy.sh", que lo único que hace es crear o actualizar un fichero .tar.gz con los documentos temporales guardados en /tmp/docs.
#!/bin/bash
#Upgrade /var/tmp/minicopy.tar.gz from /tmp/docs
tar uvf /var/tmp/minicopy.tar.gz /tmp/docs
#chmod 666 /var/tmp/minicopy.tar.gz /* esta línea está comentada */
1) Desde el asistente YaST para AppArmor creamos un nuevo "perfil".

2) Con el botón "browse" se elige el script para el cual creamos el "perfil".

3) Ahora debemos ejecutar el shell script o aplicación en otra ventana mientras AppArmor registra a qué recursos accede el script o aplicación.

4) Ejecutamos el shell script "minicopy.sh".

5) Y pulsamos el botón "Scan system log for AppArmor events".

Pulsamos "next".
6) Ahora, para crear el "perfil", AppArmor nos solicitará confirmación de los accesos a los recursos que supuestamente se han producido durante la ejecución del script.

Lo lógico sería no ejecutar ninguna otra aplicación mientras se esta creando un "perfil" de AppArmor en el entorno de pruebas.Vamos validando todos los accesos a recursos que ha supuesto la ejecución del shell script "minicopy.sh".
Cuando se llega al último pulsar "Finish".
7) Pulsamos "yes" para salir del asistente para crear "perfil".

8) Volvemos a la pantalla del paso 1, pero seleccionamos "Edit profile" para editar el "perfil" recién creado.

9) Editamos el "perfil" del shell script "minicopy.sh".

10) Vemos los recursos del sistema Operativos a los que permite acceso el "perfil" y que hemos validado en el paso 6.

11) Nos cercioramos de que el "perfil" o política de aislamiento de Apparmor para el script "minicopy.sh" esté activada. Para ello seleccionamos "AppArmor Control Panel".

12) Nos aparecerá esta pantalla.

Pulsamos “Set Profile Modes”.
13) Comprobamos que el "perfil" para "minicopy.sh" está activado.

14) Ahora debemos ejecutar el shell script "minicopy.sh" y ver cómo se comporta.
remoto:~ # ./minicopy.sh
tar: Removing leading `/' from member names
/tmp/docs/
/tmp/docs/one.txt
/tmp/docs/three.txt
/tmp/docs/two.txt
Se genera el fichero "/var/tmp/minicopy.tar.gz" sin problemas.
15) En este punto modificamos el shell script "minicopy.sh". Descomentamos la última línea, la correspondiente al "chmod".
#!/bin/bash
#Upgrade /var/tmp/minicopy.tar.gz from /tmp/docs
tar uvf /var/tmp/minicopy.tar.gz /tmp/docs
chmod 666 /var/tmp/minicopy.tar.gz
Este cambio es inofensivo dado que "chmod" solo cambia los permisos de un fichero.
Pero, ¿qué pasaría si en vez de este cambio hicieramos un borrado desde el directorio raiz "rm -fr /" o enviasemos información sensible a alguien o ...?
16) Lo ejecutamos de nuevo.
remoto:~ # ./minicopy.sh
tar: Removing leading `/' from member names
/tmp/docs/
/tmp/docs/one.txt
/tmp/docs/three.txt
/tmp/docs/two.txt
./minicopy.sh: line 4: /bin/chmod: Operation not permitted
AppArmor ha detectado el cambio y no nos permite ejecutar el "chmod".
17) Miramos el log de auditoría del sistema y vemos como AppArmor ha ido aplicando el "perfil" en las ejecuciones del los pasos 14 y 15.
type=APPARMOR msg=audit(1173948483.869:43): PERMITTING r access to
/var/run/nscd/group (tar(17570) profile null-complain-profile active null-complain-profile)
type=APPARMOR msg=audit(1173948483.889:44): PERMITTING r access to
/tmp/docs/one.txt (tar(17570) profile null-complain-profile active null-complain-profile)
type=APPARMOR msg=audit(1173948483.889:45): PERMITTING r access to
/tmp/docs/three.txt (tar(17570) profile null-complain-profile active null-complain-profile)
type=APPARMOR msg=audit(1173948483.893:46): PERMITTING r access to
/tmp/docs/two.txt (tar(17570) profile null-complain-profile active null-complain-profile)
type=APPARMOR msg=audit(1173949231.528:47): REJECTING x access to /bin/chmod
(minicopy.sh(17694) profile /root/minicopy.sh active /root/minicopy.sh)
type=APPARMOR msg=audit(1173949231.528:48): REJECTING r access to /bin/chmod
(minicopy.sh(17694) profile /root/minicopy.sh active /root/minicopy.sh)
Si queremos crear un "perfil" para una aplicación web debemos seguir exactamente los mismos pasos salvo en el apartado 2. En este paso, la aplicación a monitorizar es el ejecutable httpd, ya que, si aplicación está programada en PHP, ésta se ejecutará vía mod_php y si lo está en ASP (mono), se ejecutará vía mod_mono. Recuerda que Apache debe de estar parado en los pasos 1 y 2. Tienes que levantarlo y ejecutar la aplicación a partir del paso 3. Si no lo haces así AppArmor no cargará bien el "perfil".
OpenSuse ofrece en su distribución un módulo de AppArmor para Apache y un "plug-in" para Tomcat. Aquí puedes descargarte el manual de AppArmor.
En Solid Rock IT podemos ayudarte a mejorar los procesos de seguridad informática en tu empresa, ya que concebimos la seguridad como un proceso global de la empresa que implica tanto a las personas como a la tecnologías.

Comentarios
1. Escrito por nanobu9 el jueves 19 junio 2008 a las 21:54
Añadir un comentario