017 020 ApparmorLM22.Crop

4
herramientas instaladas localmente. Una única vulnerabilidad en el UID root del programa es todo lo que hace falta para que el atacante tome las riendas. Tradicionalmente, los administradores y los webmasters no tenían más alternativa que mantener sus sistemas actualizados y eliminar cualquier lastre, es decir, instalar sólo aquel software que realmente les era necesario. Pero nada de esto puede prote- ger al sistema contra exploits del día 0, es decir, ataques cuyo objetivo son agujeros de seguridad previamente desconocidos. Cómo Funciona AppArmor está diseñado para ayudar a los administradores a montar una trampa. El sistema monitoriza la forma en que los procesos acceden a los ficheros, distin- guiendo entre accesos de lectura y escri- tura, así como el uso del privilegio de root. Dependiendo del kernel, Linux puede dis- tinguir entre 29 capacidades (véase man 7 capabilities). Por ejemplo, CAP_KILL se refiere a la capacidad del root para termi- nar un proceso y CAP_RAW le permite crear paquetes de red arbitrarios. El comando ping necesita disponer de esta capacidad, por ejemplo. La idea de controlar el acceso y las acciones basándose en el programa en vez de en el propietario y/o usuario no es nada nuevo. En los sistemas Free BSD y Linux, Systrace de Niels Provo implementa este L a visión de Novell sobre AppArmor es la de un sistema de protección efectivo para Linux fácilmente con- figurable. De acuerdo con el fabricante, AppArmor compite con SELinux, que ha sido parte de la distribución Suse desde hace un tiempo, aunque careciendo de las políticas necesarias para su ejecución. SELinux es comparativamente más difícil de configurar, pero implementa adecuada- mente MACs (Mandatory Access Control), AppArmor, sin embargo, se centra en res- tringir el alcance de las aplicaciones indivi- duales. La Tarea Es un hecho desafortunado que muchos programas sufran errores, sobre todo cuando afectan a las aplicaciones web, particularmente sensibles a este problema. La mayoría del software no está progra- mado por especialistas en seguridad, aun- que pueda ser públicamente accesible desde la web, lo que hace que sea un blanco fácil para los atacantes. Si uno de ellos encuentra un error de programación en la aplicación, puede explotarlo y ganar de este modo acceso al sistema. Incluso si el atacante sólo compromete una cuenta de usuario estándar, esto sería peligroso para la víctima. La cuenta le pro- porciona al hacker acceso directo a las AppArmor • PORTADA Bloqueo de Intrusos con AppArmor ARMADO Y PROTEGIDO AppArmor comenzó su carrera como un producto comercial de Immunix, aunque era conocido como Subdomain. Novell adquirió Immunix a mediados de 2005, renombrando Subdomain a AppArmor y licenciando el código bajo la licencia GPL a principios de 2006. Immunix era una vieja conocida de los vendedores de soluciones de seguridad debido especialmente al compilador Stackguard, una modificación de GCC que protege a las aplicaciones de las distintas versiones del ataque “buffer overflow”. Immunix también estaba bas- tante implicada en el desarrollo de la inter- faz LSM (Linux Security Module) para el kernel 2.6. Además de AppArmor, varios sistemas de seguridad, como LIDS (Linux Intrusion Detection System) y el productor competidor SELinux, utilizan la interfaz LSM para inyectar controles donde se necesiten en el kernel. Gracias a LSM no se requiere el uso de parches, lo que no impide que la arquitectura LSM sea un tema de debate en algunos proyectos. Immunix WWW.LINUX-MAGAZINE.ES 17 Número 22 Cuando un atacante consigue infectar el sistema de una víctima hereda sus privilegios. AppArmor bloquea el ataque reduciendo los privilegios potenciales de la víctima al mínimo. POR RALF SPENNBERG ARMADO Y PROTEGIDO Cuando un atacante consigue infectar el sistema de una víctima hereda sus privilegios. AppArmor bloquea el ataque reduciendo los privilegios potenciales de la víctima al mínimo. POR RALF SPENNBERG Bloqueo de Intrusos con AppArmor

Transcript of 017 020 ApparmorLM22.Crop

  • herramientas instaladas localmente. Unanica vulnerabilidad en el UID root delprograma es todo lo que hace falta paraque el atacante tome las riendas.

    Tradicionalmente, los administradores ylos webmasters no tenan ms alternativaque mantener sus sistemas actualizados yeliminar cualquier lastre, es decir, instalarslo aquel software que realmente les eranecesario. Pero nada de esto puede prote-ger al sistema contra exploits del da 0, esdecir, ataques cuyo objetivo son agujerosde seguridad previamente desconocidos.

    Cmo FuncionaAppArmor est diseado para ayudar a losadministradores a montar una trampa. El

    sistema monitoriza la forma en que losprocesos acceden a los ficheros, distin-guiendo entre accesos de lectura y escri-tura, as como el uso del privilegio de root.Dependiendo del kernel, Linux puede dis-tinguir entre 29 capacidades (vase man 7capabilities). Por ejemplo, CAP_KILL serefiere a la capacidad del root para termi-nar un proceso y CAP_RAW le permitecrear paquetes de red arbitrarios. Elcomando ping necesita disponer de estacapacidad, por ejemplo.

    La idea de controlar el acceso y lasacciones basndose en el programa en vezde en el propietario y/o usuario no es nadanuevo. En los sistemas Free BSD y Linux,Systrace de Niels Provo implementa este

    La visin de Novell sobre AppArmores la de un sistema de proteccinefectivo para Linux fcilmente con-

    figurable. De acuerdo con el fabricante,AppArmor compite con SELinux, que hasido parte de la distribucin Suse desdehace un tiempo, aunque careciendo de laspolticas necesarias para su ejecucin.SELinux es comparativamente ms difcilde configurar, pero implementa adecuada-mente MACs (Mandatory Access Control),AppArmor, sin embargo, se centra en res-tringir el alcance de las aplicaciones indivi-duales.

    La TareaEs un hecho desafortunado que muchosprogramas sufran errores, sobre todocuando afectan a las aplicaciones web,particularmente sensibles a este problema.La mayora del software no est progra-mado por especialistas en seguridad, aun-que pueda ser pblicamente accesibledesde la web, lo que hace que sea unblanco fcil para los atacantes. Si uno deellos encuentra un error de programacinen la aplicacin, puede explotarlo y ganarde este modo acceso al sistema.

    Incluso si el atacante slo comprometeuna cuenta de usuario estndar, esto serapeligroso para la vctima. La cuenta le pro-porciona al hacker acceso directo a las

    AppArmor PORTADA

    Bloqueo de Intrusos con AppArmor

    ARMADO Y PROTEGIDO

    AppArmor comenz su carrera como unproducto comercial de Immunix, aunqueera conocido como Subdomain. Novelladquiri Immunix a mediados de 2005,renombrando Subdomain a AppArmor ylicenciando el cdigo bajo la licencia GPL aprincipios de 2006. Immunix era una viejaconocida de los vendedores de solucionesde seguridad debido especialmente alcompilador Stackguard, una modificacinde GCC que protege a las aplicaciones delas distintas versiones del ataque buffer

    overflow. Immunix tambin estaba bas-tante implicada en el desarrollo de la inter-faz LSM (Linux Security Module) para elkernel 2.6. Adems de AppArmor, variossistemas de seguridad, como LIDS (LinuxIntrusion Detection System) y el productorcompetidor SELinux, utilizan la interfazLSM para inyectar controles donde senecesiten en el kernel. Gracias a LSM no serequiere el uso de parches, lo que noimpide que la arquitectura LSM sea untema de debate en algunos proyectos.

    Immunix

    W W W . L I N U X - M A G A Z I N E . E S 17Nmero 22

    Cuando un atacante consigue infectar el sistema de una vctima hereda sus privilegios. AppArmor

    bloquea el ataque reduciendo los privilegios potenciales de la vctima al mnimo.

    POR RALF SPENNBERG

    ARMADO Y PROTEGIDOCuando un atacante consigue infectar el sistema de una vctima hereda sus privilegios. AppArmor

    bloquea el ataque reduciendo los privilegios potenciales de la vctima al mnimo.

    POR RALF SPENNBERG

    Bloqueo de Intrusos con AppArmor

    017-020_ApparmorLM22_OK 17/11/06 11:51 am Pgina 17

  • principio, por ejemplo. Pero mientrasSystrace monitoriza las llamadas al sistema(tal y como indica su nombre), AppArmorutiliza el LSM Hooks (vase el cuadroImmunix).

    Instalacin de AppArmor enLinuxNovell incluye AppArmor con las ditribu-ciones comerciales Suse Linux 10.0 y SLES9 SP3 (Suse Linux Enterprise Server 9, Ser-vice Pack 3). Open Suse 10.1 es la varianteGPL. Se puede instalar AppArmor en OpenSuse 10.0, aunque se requiere un parchedel kernel que consume tiempo. Deacuerdo con las listas de distribucin [2],se espera que Ubuntu y Fedora lo soportenen el futuro. El GUI requiere Yast 2 altiempo de escribir este artculo.

    Novell posee diversos paquetes disponi-bles en Novell Forge [3]. Los RPMs para laversin alpha de Open Suse 10.1 funciona-rn en Open Suse 10.0. Se requiere tam-bin un kernel con soporte para AppAr-mor. La mejor solucin es utilizar unpaquete original del repositorio del kernel[4], por ejemplo, Linux 2.6.15, en combi-nacin con los parches del kernel aa_2.0-2.6.15.patch y aa_namespace_sem-2.6.15.patch. Cuando se ejecuta make old-config para la configuracin, normalmentese presiona la tecla [Enter] para aceptar losvalores por defecto cuando se soliciten.Los pasos individuales se muestran en elListado 1.

    En parches posteriores, Novell renom-brar la estructura del kernel en SecurityFS a /sys/kernel/security/apparmor. Secu-rity FS ha sido parte del kernel estndardesde la versin Linux 2.6.14.

    Comenzar a TiempoEl componente del espacio de usuario deAppArmor ejecuta el servicio del sistema yasigna la poltica. El script init ha mante-nido el nombre del antiguo subdominio:/etc/init.d/subdomain start carga y habilitael mdulo del kernel AppArmor. Para per-mitir al mdulo la monitorizacin de unaaplicacin, tiene que estar activo antes deque se ejecute la aplicacin que se quieraproteger. Esta es la razn por la que debeejecutarse en el momento del arranque delsistema. La aplicacin tambin necesita unfichero de perfil en /etc/subdomain.d (lasprximas distribuciones usarn /etc/appar-mor.d).

    Novell proporciona perfiles para la granmayora de comandos crticos, incluyendo

    servidores como Apache (en modo Pre-fork) y OpenSSH, para las herramientas S-Bit como ping y man, clientes de red comoFirefox y Real Player, visores como AcrobatReader e incluso para los servicios de pro-tocolos Klogd y Syslogd.

    Perfiles NuevosSi se necesitan crear perfiles nuevos paralas aplicaciones puede ser de ayuda el asis-tente de perfiles basado en Yast, para locual, lo primero que necesita saber es aqu programa se le va a crear el perfil. Acontinuacin, el usuario lanza el programay lo ejecuta como siempre.

    Es importante utilizar todas las funcio-nes de la aplicacin en esta fase. Hay queasegurarse de que no se sufrir un ataquedurante el aprendizaje. PosteriormenteAppArmor permitir todas las caractersti-cas que la aplicacin utilice en estemomento. Durante esta fase AppArmoraprende las funciones legtimas de la apli-cacin.

    Tras cerrarla, el siguiente paso ser ana-lizar los eventos registrados por el asistentede perfiles. El asistente sugiere una accinpara cada caso. Si el programa monitori-zado llama a otro programa, el asistente deperfiles proporcionar las siguientes opcio-nes: Inherit significa que las mismas res-tricciones se aplican a la nueva aplicacin,por ejemplo a kdialog. Profile significa queel programa tendr su propio perfil. ConUnconfined AppArmor no monitorizar alnuevo proceso y Deny impedir que se eje-cute la aplicacin.

    Para facilitar el proceso de crear y man-tener los perfiles, AppArmor utiliza la tc-nica de inclusin de ficheros. Los ficherosestn implementados como libreras abs-tractas y contienen reglas para las opera-ciones estndar. Por ejemplo, #include permite acceso a losficheros de configuracin y funciones deKDE. Otros perfiles permiten a los usuariosejecutar Bash o la resolucin de nombres.

    Despus de completar con xito el asis-tente, ser conveniente reejecutar la aplica-cin y probarla para ver cmo se comportabajo la tutela de AppArmor. Si se advierteque algunas funciones no funcionan comose esperaba, habr que volver a ejecutar elasistente. En este caso, el asistente lee elperfil existente y lo actualiza con los cam-bios.

    El Listado 2 proporciona un perfil tpicode AppArmor para Kpdf. Despus de loscomentarios Vim (Suse proporciona un

    mdulo de coloreado de la sintaxis paraVim), el perfil empieza con la ruta a Kpdf;esto especifica qu programa va a gober-nar la poltica.

    flags=(complain) conmuta el perfil enmodo de queja, tambin conocido comomodo de aprendizaje. En este modo,AppArmor avisar de las infracciones con-tra la poltica pero sin impedir que loseventos se produzcan. Si se conmuta aflags=(enforce) restringir las capacidadesde Kpdf.

    Las lneas de la 4 a la 10 hacen referenciaa diversos ficheros que se van a incluir ylas lneas 12 a la 18 listan las rutas a lasque el visor de PDF tiene permitido elacceso. Una r tras la ruta y los nombres delos ficheros se refiere a un acceso de lec-tura, mientras que rw permite tanto losaccesos de lectura como la escritura.

    Servidores WebAppArmor es particularmente til en losservidores web. Al contrario que los siste-mas LIDS, GR Security, RSBAC o SELinux(Mandatory Access Systems), AppArmorpuede monitorizar los hosts virtualescon diferentes perfiles en un servidorweb. El servidor web Apache puedemodificar los perfiles dependiendo deldirectorio actual. Novell se refiere a estocomo funcin change_hat.

    Pero sin algo de ayuda por parte deApache, AppArmor no sera capaz deaveriguar el estado del servidor web.Novell proporciona el mdulomod_change_hat que se encarga de ello(en un futuro el nombre se cambiar por

    PORTADA AppArmor

    18 Nmero 22 W W W . L I N U X - M A G A Z I N E . E S

    Listado 1: Pasos para lainstalacin

    01 tar xjvf linux-2.6.15.tar.bz202 cd linux-2.6.1503 patch

    -p1

  • Se necesita un subperfil que le proporcionea Squidfire el acceso. Al mismo tiempo,este perfil restringir este acceso slo a losficheros de registro de Squid. Esta precau-cin impedir que los usuarios de Squid-fire puedan utilizar esta herramienta paraevaluar otros ficheros de registros distintosde los de Squid.

    De nuevo, el asistente de perfiles de Yastgestionar la configuracin del subperfil.Cuando se ejecute el asistente, hay queseleccionar a Apache como la aplicacin.Esto le indica a AppArmor que permitatodas las acciones para este proceso y queregistre estas acciones para un anlisis pos-terior. Despus de trabajar con la aplica-cin con el navegador web durante unosminutos, hay que hacer clic en el botnScan system log for AppArmor events en elasistente de perfiles (Figura 2) para com-pletar la fase de entrenamiento. Si se estentrenando a una aplicacin compatiblecon change-hat, el asistente de perfilessugerir que se cree un subperfil nuevo(hat).

    Lmites EstrictosHay que tener cuidado a la hora de respon-der a las preguntas que realiza el asistente,particularmente si la aplicacin principalrealiza llamadas a programas externos. Eslgico dejar que estas aplicaciones heredenel perfil de la aplicacin que las invoca.

    Cuando se aaden imgenes y ficherosCSS, el perfil por defecto de Apache es unaeleccin delicada. Tras realizar una seriede preguntas, el asistente de perfiles conti-

    na creando un subperfil enusr.sbin.httpd2-prefork (el Listado 3 mues-tra una parte).

    Por defecto, se utiliza la URI para distin-guir entre los diferentes subperfiles deApache dentro del perfil (vase la Lnea 2del Listado 3). Este ejemplo permite a laaplicacin web /squid/index.php utilizarBash y leer varios ficheros del sistema. ElListado 3 tambin utiliza el componenteSquidfire (Lineas 11 a 15) y por ltimo ellistado evala los ficheros de registro deaccesos de Squid y Apache (Lneas 18 y20).

    En una inspeccin ms detallada, el sub-perfil realmente enfatiza cmo son de peli-grosas algunas de las acciones de las apli-caciones. La aplicacin utiliza obviamentelos ficheros con nombres predecibles en eldirectorio /tmp (Lnea 16) y realiza llama-das a comandos externos de la shell (vasela referencia a Bash en la Lnea 6. Tambinse puede encontrar el comando tail en laLnea 17).

    Distincin de DirectoriosEl mdulo mod_change_hat permite orga-nizar los subperfiles de varios hosts virtua-

    mod_apparmor). AppArmor permite alos programas cambiar su contexto deseguridad, aunque sea el servidor webApache el nico programa que tieneimplementada esta caracterstica en elmomento de esribir este artculo. Un per-fil principal de una aplicacin puedetener un nmero arbitrario de subperfi-les (denominados hat). La jerarqua estrestringida a una capa: los subperfiles nopueden contener otros subperfiles.

    Cambio de SombrerosYast tiene una interfaz grfica para lagestin de los subperfiles. La herra-mienta de la lnea de comandos es mspotente, pero la configuracin con Yastes ms simple. Las siguientes seccionesutilizan la aplicacin web Squidfire(Figuras 1 y 6) para describir la varianteYast. Squidfire es un script PHP que haceque los ficheros de registro de Squidsean accesibles y se pueda buscar enellos. El perfil de AppArmor proporcio-nado para esta tarea, usr.bin.httpd2-pre-fork, deniega a Apache, y con ello aSquidfire, el acceso a todos los ficherosde registro, como confirma el siguientemensaje /var/log/audit/audit.log:

    type=APPARMOR msg=auditU(1143872666.069:205): UREJECTING r access to U/var/log/squid (httpd2-preforkU(14820) profile /usr/sbinU/httpd2-prefork active UDEFAULT_URI)

    W W W . L I N U X - M A G A Z I N E . E S

    Figura 1: Squidfire analizando los intentos de acceso registrados por Squid. Para restringir los

    accesos a los ficheros de registro a esta aplicacin web, Apache se ejecuta con

    mod_change_hat para habilitar el soporte de AppArmor. De esta forma, el sistema de seguri-

    dad conoce qu aplicacin web est actualmente activa.

    01 # vim:syntax=subdomain02 # Last Modified: Sun Jan 22

    10:16:55 200603 /opt/kde3/bin/kpdf

    flags=(complain) {04 #include

    05 #include 06 #include 07 #include 08 #include 09 #include

    10 #include

    1112 / r,13 /etc r,14 /etc/X11/.kstylerc.lock rw,15

    /etc/X11/.qt_plugins_3.3rc.lock rw,

    16 /etc/X11/.qtrc.lock rw,17 /etc/exports r,18 /etc/rpc r,19 [...]

    Listado 2: Perfil Kpdf

    AppArmor PORTADA

    19Nmero 22

    017-020_ApparmorLM22_OK 17/11/06 11:51 am Pgina 19

  • les a travs de las directivas Location yDirectory. Los administradores puedenindicarle al mdulo la solucin que prefie-ren utilizando las directivas ImmDefaul-tHatName y ImmHatNamedirectives.

    El prefijo Imm es una reminiscencia delas races de AppArmor, Immunix. En rea-lidad, el mdulo ha sido renombrado amod_apparmor en versiones posteriores,siendo ahora las palabras reservadasAAHatName y AADefaultHatName.

    ImmDefaultHatName (o AADefaultHat-Name) selecciona un perfil por defectopara cada servidor virtual. Adems, lossubperfiles pueden ser asignados a zonasindividuales utilizando las directivas Direc-tory o Location.

    Las siguientes lneas en la configuracinde Apache asignaran un hat a la aplica-cin web Squidfire:

    ImmHatName squidfire

    Habr que llamar al subperfil ^squidfireen vez de a ^squidfire/index.php (Lnea 2en el Listado 3).

    AppArmor proporciona a los adminis-tradores de sistemas una nueva solucinen el campo de la seguridad de servidores,especialmente en entornos compartidosde hosting donde mltiples clientes com-parten un mismo servidor web.

    La asignacin de un hat estricto acada host virtual y la restriccin delacceso del hat a los ficheros pertene-cientes a un nico cliente, mitigarn elpeligro de los agujeros de seguridad en las

    aplicaciones web delos clientes sin poneren peligro al resto delos clientes. Es decir,sera una buena ideacomprobar manual-mente las polticaspara esto o crearlasmanualmente desdecero, en vez de confiaren el modo dequeja, algo que nodebe ser muy compli-cado para la mayorade los administrado-res.

    ConclusionesAppArmor encierra a las aplicaciones crticasen una caja de arena, restringiendo el accesoa ficheros especficos y limitando al sistemaa ejecutar comandos especficos.

    Si resulta que la aplicacin contienealguna vulnerabilidad que permita a un ata-cante acceder a la shell o le permita ejecutarcomandos con las credenciales de la vc-tima, entonces AppArmor entra en accin.No se le permite a la aplicacin salirse de lacrcel. Aunque la proteccin prctica pro-porcionada por una herramienta comoAppArmor no elimina la vulnerabilidad, elatacante no podr explotar el agujero deseguridad para hacerse con el control del sis-tema.

    Este principio protege a una mquina con-tra los exploits que aun no se han detectado,lo que lo hac especialmente til para pro-gramas que sean accesibles desde la red oprogramas que tengan que procesar datosdesde fuentes de poca confianza (emails,

    imgenes, vdeo clips, documentos de ofi-mtica).

    Las aplicaciones compatibles conchange-hat pueden incluso gestionar suestado en tiempo de ejecucin, aplicandodiferentes subperfiles segn dicte la situa-cin. Esto aade la posibilidad de definirperfiles para aplicaciones web especficas enlos servidores web, aplicando reglas especfi-cas basndose en la URI, en los hosts virtua-les o en la ruta de los directorios.

    AppArmor ofrece una solucin prcticaen el campo de la seguridad de las aplicacio-nes Linux. La alternativa ofrecida porAppArmor es una opcin eficiente para losusuarios que no quieran enredarse con lacomplejidad adicional de sistemas de seguri-dad tales como SELinux. Para saber mssobre los mritos relativos a AppArmor ySELinux, vase la comparacin AppArmorvs. SELinux de este mismo nmero deLinux Magazzine. n

    Figura 2: Para obtener los eventos de AppArmor hay que hacer clic

    en Scan system log y el asistente sugerir un perfil.

    01 [...]02 ^/squid/index.php {03 #include 04 #include

    0506 /bin/bash ixr,07 /dev/tty rw,08 /etc/ld.so.cache r,09 /lib/ld-2.3.90.so ixr,10 /lib/lib*so* r,11

    /srv/www/htdocs/squid/cache.inc.php r,

    12/srv/www/htdocs/squid/config.inc.

    php r,13

    /srv/www/htdocs/squid/default_config.inc.php r,

    14 /srv/www/htdocs/squid/index.phpr,

    15/srv/www/htdocs/squid/parse_squid_row.inc.php r,

    16 /tmp/access.log_1.3.0.incr,17 /usr/bin/tail ixr,18 /var/log/apache2/access_log w,19 /var/log/squid r,20 /var/log/squid/access.log r,21 }

    Listado 3: Subperfil de Apache[1] AppArmor: http://www.opensuse.org/

    AppArmor

    [2] Lista de correo de AppArmor: http://forge.novell.com/mailman/listinfo/apparmor-general

    [3] AppArmor RPMs en Novell Forge:http://forge.novell.com/modules/xfmod/project/?apparmor

    [4] Repositorio del Kernel: http://www.kernel.org

    [5] Parches para el kernel de AppArmorde la imagen de Enero: http://forgeftp.novell.com/apparmor/Development%20-%20January%20Snapshot/

    [6] Squidfire: http://squidfire.sourceforge.net

    [7] Systrace: http://www.systrace.org

    RECURSOS

    PORTADA AppArmor

    20 Nmero 22 W W W . L I N U X - M A G A Z I N E . E S

    017-020_ApparmorLM22_OK 17/11/06 11:51 am Pgina 20