2.2. Inspección de los puertos abiertos para inmunizar programas

Un método automático de localizar los daemon de servidor de red para los que hay que crear perfiles es utilizar la herramienta unconfined. También se puede ver simplemente un informe con esta información en la interfaz gráfica de usuario de YaST (consulte Sección 4.3.1.1, “Informe de auditoría de aplicaciones” (↑Guía de administración de Novell AppArmor 2.0) para obtener más información).

La herramienta unconfined utiliza el comando netstat -nlp para inspeccionar los puertos abiertos desde el interior del equipo y detectar los programas asociados con estos puertos y, a continuación, inspeccionar el conjunto de perfiles de Novell AppArmor que se haya cargado. La herramienta unconfined informará a continuación de estos programas y del perfil de Novell AppArmor asociado con cada uno de ellos, o indicará que no hay “nada” si el programa no está limitado.

[Note]Nota

Si crea un perfil nuevo, deberá reiniciar el programa para el que ha creado el perfil a fin de que unconfined detecte e informe del estado del nuevo programa con perfil.

A continuación se muestra un ejemplo de salida de unconfined:

2325 /sbin/portmap not confined 
37021 /usr/sbin/sshd2 confined
   by '/usr/sbin/sshd3 (enforce)' 
4040 /usr/sbin/ntpd confined by '/usr/sbin/ntpd (enforce)' 
4373 /usr/lib/postfix/master confined by '/usr/lib/postfix/master (enforce)' 
4505 /usr/sbin/httpd2-prefork confined by '/usr/sbin/httpd2-prefork (enforce)'
5274 /sbin/dhcpcd not confined 
5592 /usr/bin/ssh not confined 
7146 /usr/sbin/cupsd confined by '/usr/sbin/cupsd (complain)'
  
1

La primera sección es un número. Se trata del número ID de proceso (PID) del programa de escucha.

2

La segunda sección es una cadena que representa la vía completa del programa de escucha.

3

La última sección indica el perfil que limita el programa, si existe alguno.

[Note]Nota

Unconfined requiere privilegios de usuario Root y no se debe ejecutar desde un shell que se encuentre limitado por un perfil de AppArmor.

La herramienta unconfined no distingue entre una interfaz de red y otra, así que informa de todos los procesos sin limitación, incluso de los que puedan estar a la escucha de una interfaz LAN interna.

La búsqueda de aplicaciones cliente de redes de usuarios depende de las preferencias del usuario. La herramienta unconfined detecta e informa de los puertos de red abiertos por las aplicaciones cliente, pero sólo cuando esas aplicaciones cliente se están ejecutando en el momento del análisis. Esto es un problema, ya que los servicios de red tienden a ejecutarse en todo momento, mientras que las aplicaciones cliente de red sólo suelen ejecutarse cuando el usuario se interesa por ellas.

Aplicar perfiles de Novell AppArmor a aplicaciones cliente de redes de usuario también depende de las preferencias del usuario, y Novell AppArmor está más diseñado para servidores que para estaciones de trabajo. Por lo tanto, dejaremos la creación de perfiles para las aplicaciones de este tipo como un ejercicio para el usuario.

Para limitar de forma agresiva aplicaciones de escritorio, el comando unconfined admite la opción "paranoid", que informa de todos los procesos en ejecución y de los perfiles de AppArmor correspondientes que podrían estar asociados, o no, a cada proceso. El usuario de unconfined podrá entonces decidir si estos programas necesitan un perfil de AppArmor.

Si cuenta con perfiles nuevos o modificados, puede enviarlos a la lista de correo apparmor-general@forge.novell.com junto con un ejemplo de uso del comportamiento de la aplicación que haya utilizado. El equipo de AppArmor revisará y podrá enviar el trabajo a openSUSE. No podemos garantizar que se incluyan todos los perfiles, pero haremos lo que esté en nuestras manos para incluirlos, de tal forma que los usuarios finales puedan contribuir a los perfiles de seguridad que se incluyen con openSUSE.

2.2.1. Inmunización de tareas de cron

Para localizar los programas que ejecuta el daemon cron, tendrá que inspeccionar la configuración de cron local. Desafortunadamente, la configuración de cron es muy compleja, así que hay que inspeccionar muchos archivos. Las tareas periódicas de cron se ejecutan desde estos archivos:

/etc/crontab 
/etc/cron.d/* 
/etc/cron.daily/* 
/etc/cron.hourly/*
/etc/cron.monthly/* 
/etc/cron.weekly/*

Las tareas del Root de cron se pueden editar con el comando crontab -e, y es posible mostrar una lista de las tareas del Root de cron con crontab -l. Para efectuar estas acciones debe ser el usuario Root.

Tras localizar estos programas, puede utilizar el programa Asistente para añadir perfiles para crear perfiles para ellos. Consulte la Sección 3.3.1, “Adición de perfiles mediante el asistente” (↑Guía de administración de Novell AppArmor 2.0).

2.2.2. Inmunización de aplicaciones Web

Para buscar aplicaciones Web, se debe investigar la configuración del servidor Web. El servidor Web Apache tiene muchas opciones de configuración, y las aplicaciones Web se pueden almacenar en muchos directorios distintos, según la configuración local. SUSE Linux almacena por defecto las aplicaciones Web en /srv/www/cgi-bin/߬. En la medida en que sea posible, cada aplicación Web debería tener un perfil de Novell AppArmor.

Tras localizar estos programas, puede utilizar el Asistente para añadir perfiles de AppArmor para crear perfiles para ellos. Consulte la Sección 3.3.1, “Adición de perfiles mediante el asistente” (↑Guía de administración de Novell AppArmor 2.0).

2.2.2.1. Programas CGI y limitación de subprocesos en las aplicaciones Web

Puesto que los programas CGI los ejecuta el servidor Web Apache, se debe modificar el propio perfil de Apache, usr.sbin.httpd2-prefork (para Apache2 en SUSE Linux), para añadir permisos de ejecución para cada uno de estos programas. Por ejemplo, al añadir la línea /srv/www/cgi-bin/mi_contador_visitas.pl rpx se garantizan permisos a Apache para que ejecute el guión Perl mi_contador_visitas.pl y se requiere que haya un perfil dedicado para mi_contador_visitas.pl. Si mi_contador_impactos.pl no tiene un perfil asociado, la regla deberá decir /srv/www/cgi-bin/mi_contador_impactos.pl rix para provocar que mi_contador_impactos.pl herede el perfil usr.sbin.httpd2-prefork.

Algunos usuarios pueden encontrar incómodo tener que especificar permisos de ejecución para cada guión CGI que pueda invocar Apache. En su lugar, el administrador puede otorgar acceso controlado a colecciones de guiones CGI. Por ejemplo, si se añade la línea /srv/www/cgi-bin/*.{pl,py,pyc} rix, se permitirá que Apache ejecute todos los archivos de /srv/www/cgi-bin/ que terminen en .pl (guiones de Perl) y en .py o .pyc (guiones de Python). Del mismo modo, la sección ix de la regla provoca que los guiones de Python hereden el perfil de Apache, lo que resulta adecuado si no se desea escribir perfiles individuales para cada guión de Python.

[Note]Nota

Si desea disponer de la funcionalidad del módulo de confinamiento de subprocesos (mod-apparmor) cuando las aplicaciones Web manejen módulos de Apache (mod_perl y mod_php), utilice las funciones de ChangeHat al añadir un perfil en YaST o en la línea de comandos. Para aprovechar la limitación de subprocesos, consulte la Sección 5.1, “Apache ChangeHat” (↑Guía de administración de Novell AppArmor 2.0).

A la hora de crear perfiles para aplicaciones Web que utilicen mod_perl y mod_php se requiere una manipulación ligeramente distinta. En este caso, el “programa” es un guión que interpreta directamente el módulo del proceso de Apache, por lo que no se produce la opción exec. En su lugar, la versión de Novell AppArmor de Apache llama al comando change_hat() que da nombre a un subperfil (un “hat”) que se corresponde con el nombre del URI solicitado.

[Note]Nota

El nombre que se presenta para que lo ejecute el guión puede no ser el URI, según la forma en que se haya configurado dónde debe buscar Apache los guiones de módulos. Si ha configurado Apache para que coloque los guiones en un sitio distinto, estos nombres distintos aparecerán en syslog cuando Novell AppArmor se queje de violaciones de acceso. Consulte el Capítulo 4, Gestión de aplicaciones con perfiles (↑Guía de administración de Novell AppArmor 2.0).

Para los guiones mod_perl y mod_php, es el nombre del guión de Perl o de la página PHP solicitados. Por ejemplo, si se añade este subperfil, se permite que la página localtime.php se ejecute y acceda a la hora local del sistema:

/usr/sbin/httpd2-prefork^/cgi-bin 
localtime.php { 
/etc/localtime                        r, 
/srv/www/cgi-bin/localtime.php        r, 
/usr/lib/locale/**                    r, 
}

Si no se ha definido ningún subperfil, la versión de Novell AppArmor de Apache aplica el hat DEFAULT_URI. Este subperfil es básicamente suficiente para mostrar una página Web HTML. El hat DEFAULT_URI que incluye Novell AppArmor por defecto es el siguiente:

/usr/sbin/suexec2 ixr, 
/var/log/apache2/** rwl,
/home/*/public_html/**             r, 
/srv/www/htdocs/**                 r, 
/srv/www/icons/*.{gif,jpg,png}     r, 
/usr/share/apache2/**              r,
    

Si desea tener un único perfil de Novell AppArmor para todas las páginas Web y los guiones CGI proporcionados por Apache, un buen enfoque consiste en editar el subperfil DEFAULT_URI.

2.2.3. Inmunización de agentes de red

Para localizar daemons de servidor de red para los que se deban crear perfiles, habrá que inspeccionar los puertos abiertos en el equipo, tener en cuenta los programas que responden a esos puertos y crear perfiles para tantos programas de este tipo como sea posible. Si crea perfiles para todos los programas con puertos de red abiertos, los atacantes no podrán acceder al sistema de archivos del equipo sin tener que pasar por una directiva de perfil de Novell AppArmor.

Explore manualmente el servidor en busca de puertos de red abiertos desde el exterior del equipo mediante un escáner, como nmap, o desde el interior del equipo con netstat. Inspeccione a continuación el equipo para determinar qué programas responden a los puertos abiertos descubiertos.