AppArmor. Como Funciona y como Puedes Monitorizar su Estado en GNU/Linux

GNU/Linux AppArmor

Muy buenas lector. En esta entrada te hablaré de AppArmor, un mecanismo de seguridad impulsado por Novell en 2005, pero del que a día de hoy se benefician muchas distribuciones GNU/Linux, gracias a incorporarse en la rama principal del kernel Linux desde la versión 2.6.36.

Si sigues estás lineas, te explicará que es exactamente AppArmor y que función cumple en tu sistema, además de las principales diferencias con otras implementaciones como SELinux. Tambien verás como puedes monitorizar su estado, visualizar los diferentes perfiles con los que esta trabajando, los modos en que estan operando, o cambiar el modo en que quieres que se aplique un perfil determinado.

Tabla de contenidos:

  1. ¿Qué es AppArmor?
  2. ¿Como funciona AppArmor y en que se diferencia con SELinux?
  3. Como monitorizar el estado de AppArmor
  4. Como examinar los perfiles de AppArmor
  5. Como cambiar el modo en que se aplica un perfil

¿Qué es AppArmor?

AppArmor Logo

AppArmor es lo que se denomina un mecanismo de control de acceso, o MAC por sus siglas en inglés (mandatory access control), que actúa estableciendo una serie de restricciones a los recursos a los que pueden acceder las diferentes aplicaciones que controla. Al acotar las acciones que puede realizar un programa, AppArmor ayuda a prevenir la explotación de sus vulnerabilidades, protegiendo de forma proactiva el conjunto del sistema (o como minimo, acotando el impacto en caso de que este se vea comprometido).

Como te comentaba al principio, aunque AppArmor nacio como un desarrollo externo impulsado por Novell, y del que solo se empezaron beneficiando distribuciones como openSUSE o SUSE Linux Enterprise, a día de hoy es parte del kernel Linux, ya que Canonical lo propuso para su integración en la rama principal, en la versión 2.6.36.

Gracias a eso, hoy lo integran por defecto gran parte de las distribuciones, como Ubuntu, que se puede decir que lo integró practicamente desde sus inicios, al igual que todos sus derivados, o Debian, que en este caso se ha sumado más tarde, y lo lleva habilitado desde Debian 10. Otras distros como Fedora o RHEL, no vienen con él, pero porqué tradicionalmente han apostado siempre por SELinux, un sistema con un enfoque parecido, aunque bastante más complejo de administrar.

Aun asi, aun integrandolo por defecto, muchas distribuciones no aplican todos los perfiles de que dispone, por lo que la protección que brinda puede variar bastante en función de cada implementación.

Como Funciona AppArmor y en que se Diferencia de SELinux

AppArmor es un modulo del kernel, implementado como parte de Linux Security Modules, o LSM por sus siglas en inglés. De hecho, dentro de LSM, tanto AppArmor como SELinux son implementaciones distintas del modelo MAC (Mandatory Access Control).

Como pequeño parentesis, a nivel general, y tambien como parte de LSM, hay varios modelos de control de acceso complementarios, entre los que destacan DAC y MAC.

DAC es un modelo de control de acceso discrecional basado en usuarios y grupos con privilegios sobre determinados objetos. En el contexto de LSM, aquí es donde tendríamos el esquema de permisos del propio sistema de archivos, en el que un fiche

MAC, por su parte, es un modelo de control de acceso no discrecional, basado en políticas que determinan si una determinada operacion sobre un objeto del sistema esta permitida o no. En el contexto de LSM, MAC viene a complementar a DAC, al permitir un control de acceso mucho más completo y granular.

Tanto AppArmor como SELinux son distintas implementaciones de MAC, que se basan en una serie de reglas que delimitan las acciones que pueden realizar las distintas aplicaciones.

Para su funcionamiento, AppArmor cuenta con perfiles especificos por cada una de las aplicaciones que controla, que serían lo equivalente a las políticas de SELinux. Sin ambargo, los perfiles de AppArmor resultan significativamente más faciles de entender y de configurar, resultando en un sistema más amigable. SELinux, por su parte, es más complejo de administrar y también de auditar, pero cuenta con la ventaja de que permite controlar mas operaciones.

AppArmor no dispone de atributos como SELinux, y la forma que tiene de reconocer un programa es a través de su ruta. De este modo, cada perfil de AppArmor apunta a una ruta concreta, y detalla que acciones tiene permitidos el ejecutable que se encuentra detrás de esta ruta.

Los perfiles de AppArmor se cargan en el propio kernel durante el arranque, y pueden ejecutarse en dos modos principales: enforce y complain. Los perfiles cargados en modo enforce realizan una aplicación forzada de la politica que definen y reportan cualquier intento de violación a través de syslog o auditd. Por otro lado, los perfiles cargados en modo complain no hacen una aplicación forzada de la política, pero si que reportan cualquier intento de violación.

Cada implementación de AppArmor viene por defecto con un numero concreto de perfiles, pero la tendencia en las nuevas implementaciones cada vez se vayan incorporando más perfiles. Además, muchas aplicaciones, al instalarse, ya vienen configuradas para crear su propio perfil de AppArmor.

Para aplicaciones que aun no tengan un perfil especifico, tu mismo puedes crear tu propio perfil, aunque debes tener en cuenta que si el programa no esta preparado es posible que presente errores en su ejecución.

Además de la especificación manual de perfiles, AppArmor incluye un modo de aprendizaje, en el que las violaciones del perfil son registradas pero no prevenidas. Más tarde, este registro puede utilizarse para crear un perfil basado en el comportamiento típico del programa.​

Como Monitorizar el Estado de AppArmor

Primero de todo, para comprobar si AppArmor esta correctamente habilitado en tu sistema, puedes utilizar el siguiente comando, que basicamente te contestara con un Yes indicando que esta activo, o con un No, en caso de que no lo esté, o que no este disponible en tu sistema.

sudo aa-enabled

Si tu distribución integra AppArmor, lo más común es que el módulo de AppArmor con todos los perfiles se cargue en el kernel durante el arranque. Para saber si esta cargado, y ver el detalle de todos los perfiles, puedes utilizar este comando:

sudo aa-status

En este caso te debería aparecer un output indicando que el módulo está cargado, y el detalle de todos los perfiles, según el modo en que estan cargados. El número de perfiles puede variar en función de la distribución GNU/Linux y también de la version utilizada (las nuevas versiones tienden a incluir perfiles para mas aplicaciones). Aqui tienes un ejemplo resumido de algo parecido a lo que deberías ver:

apparmor module is loaded.
46 profiles are loaded.
44 profiles are in enforce mode.
    /snap/bin/evince
    /snap/bin/evince/previewer
    ...
2 profiles are in complain mode.
    /snap.code.code
    ...

La información que ofrece este comando es clave, ya que te da una idea general del grado de protección que pueda estar ofreciendo AppArmor. Como mas perfiles haya que estén cargados en modo enforce, más restrictivo será AppArmor a la hora de proteger el sistema. Los perfiles que se aplican en modo complain realmente no protegen como tal, unicamente reportan las violaciones en sus reglas (cosa que por otro lado si que puede ser util a efectos de auditabilidad).

Como Examinar los Perfiles de AppArmor

Los perfiles de AppArmor se localizan generalmente en la ruta etc/apparmor.d/, por lo que si quieres si quieres ver un listado de todos los perfiles existentes en tu sistema, puedes utilizar el comando que te dejo a continuaci´on. Ahi verás todos los perfiles, aunque probablemente muchos estarán dentro de subdirectosios como /local.

sudo ls /etc/apparmor.d

Si quieres examinar un perfil concreto, a modo de curiosidad, puedes hacerlo a través de la terminal con el comando que te pongo abajo, pero te recomiendo no editar nada manualmente en perfiles ya creados.

sudo cat /etc/apparmor.d/<nombre-perfil>

Con este ultimo comando verás el contenido del fichero que define todas las reglas que aplican para este perfil. A simple vista es dificil de entender, y tampoco es el objetivo del post porque ni yo lo entiendo. De todas maneras, esta bien saber que es aqui donde se definen las restricciones de un programa. Además, si tienes curiosidad, muchas de las líneas de estos ficheros estan comentadas, por lo que aun que no entiendas el código, puedes ver con palabras más simples que es lo que se pretende restringir con cada regla.

Como Cambiar el Modo en que se Aplica un Perfil

Como ya has leído, los perfiles en AppArmor se pueden aplicar en modo enforce o en modo complain. Aqui el listado variará en función de cada implementación. En muchos casos de dejan perfiles en modo complain porque no se sepa aun con certeza si quede provocar algun mal funcionamiento del programa.

Aún así, tu también puedes cambiar el modo en el que se carga un perfil, por lo que si quieres priorizar la seguridad, puedes provar de cambiar perfiles de modo complain a modo enforce, o viceversa, en caso de detectar problemas.

Para esto, primero tienes que disponer de un paquete denominado apparmor-utils, que puedes instalar con el siguiente comando:

sudo apt install apparmor-utils

Hecho esto, para establecer que un perfil que este cargado en modo complain, pase a estar cargado en modo enforce, puedes ejecutar el comando que te dejo a continuación.

sudo aa-enforce <ruta-perfil>

También puedes hacer lo contrario, como te indico a continuación, aunque esto solo tendría sentido para perfiles que tu mismo has cambiado y que te hayan acabado dando problemas. De los perfiles que ya estan cargados por defecto en modo enforce te recomiendo no tocar nada, ya que es poco probable que causen problemas.

sudo aa-complain <ruta-perfil>

Y esto es todo de momento. ¡Hasta la próxima!

Publicado por Oriol

Soy un chico de Barcelona. Estoy aquí para compartir mis Hobbies e intentar aportar mi granito de arena a todos aquellos usuarios interesados en el mundo de la informática, internet y las tecnologías de la información en general.

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

A %d blogueros les gusta esto: