
El artículo anterior fue sobre SELinux. Mi impresión de este sistema de seguridad es doble. Por un lado, nunca hay demasiada seguridad en TI, y SELinux contiene todo lo que necesita para proteger el sistema operativo y las aplicaciones del acceso no autorizado. Por otro lado, parece demasiado engorroso e innecesariamente complejo, lo que hace que su uso no sea práctico. Más de una o dos veces en los manuales de usuario para instalar software comercial, he visto recomendaciones para ejecutar setenforce 0 antes de comenzar la instalación.
Una solución que tiene la mitad de la funcionalidad de SELinux, pero que es mucho más fácil de configurar y operar, puede ser una protección más confiable, aunque solo sea porque no da miedo ahondar en todos estos dominios, políticas y roles. Esto es exactamente lo que ofrece AppArmor.
Al igual que SELinux, AppArmor es una implementación de control de acceso obligatorio (MAC) basada en la arquitectura de módulos de seguridad de Linux (LSM). El modelo de seguridad de Apparmor consiste en vincular los atributos de control de acceso no a los usuarios, sino a los programas. AppArmor proporciona aislamiento con perfiles que se cargan en el kernel, generalmente en el arranque.
AppArmor se diferencia de otras implementaciones de MAC de Linux en su enfoque basado en rutas, y también permite la combinación de perfiles de alerta y cumplimiento. Además, AppArmor utiliza archivos adjuntos para facilitar el desarrollo y tiene una barrera de entrada mucho menos profunda que el propio SELinux.
DAC y MAC
La arquitectura de control de acceso discrecional (DAC) restringe el acceso a los recursos críticos en función de los atributos de los sujetos o del grupo al que pertenecen. Estos atributos determinan los derechos de acceso a los recursos del sistema de archivos. Cada administrador es consciente de la importancia de los privilegios de lectura (lectura), grabación (escritura) y ejecución (eXecute).
Estos atributos se aplican a tres categorías de usuarios: usuario (propietario), grupo (grupo), otros (otro). La categoría de propietario se refiere a un solo usuario de SO, mientras que un grupo puede contener muchos usuarios de SO. La categoría de descanso incluye a aquellos usuarios que no pertenecen a los dos primeros.
El modelo DAC le otorga al propietario del recurso el derecho a determinar el tipo de acceso para las categorías de usuarios especificadas. Esta diferenciación de acceso es adecuada para proteger contra acciones no intencionales del usuario y le permite responder a las siguientes preguntas:
- ¿Qué recursos de FS están disponibles para un usuario de SO determinado para leer, escribir y ejecutar?
- ¿Qué recursos de FS están disponibles para este grupo para leer, escribir y ejecutar?
- ¿Qué recursos de FS están disponibles para otros usuarios para leer, escribir y ejecutar?
- ¿Qué usuario tiene suficientes derechos para ejecutar este proceso?

Figura: 1 Sistemas de seguridad DAC y MAC.
El sistema de seguridad de control de acceso obligatorio (MAC) asume un control centralizado sobre las reglas de la política de acceso, en el que los usuarios normales no tienen la capacidad de realizar cambios en ellas. El diseñador de políticas determina qué programas o procesos pueden realizar determinadas acciones en los recursos del sistema. MAC se centra más en los programas que en los usuarios y resuelve el problema de delimitar el acceso del proceso a los recursos del SO.
En esencia, el diseño de MAC intenta copiar la delimitación de los privilegios de acceso a la documentación en el mundo físico. Si un determinado empleado tiene derecho a leer documentos marcados como "ultrasecreto", también tiene acceso a documentos internos y confidenciales estándar. Sin embargo, lo contrario no es cierto. Lo mismo es cierto en el contexto de los privilegios de acceso de los procesos del sistema operativo en la arquitectura MAC. Entonces, si un programa puede leer el archivo / etc / sudoers, entonces también tiene acceso a / etc / hosts, pero lo contrario tampoco es cierto.
Instalación y configuración de AppArmor
Los elementos básicos de AppArmor están preinstalados en Ubuntu Server, al igual que las herramientas de administración y un conjunto de perfiles de aplicación, deben instalarse por separado.
[admin@server ~]$ sudo aptitude install apparmor-utils apparmor-profiles
Comprobación del estado antes de configurar.
[admin@server ~]$ sudo apparmor_status
apparmor module is loaded.
31 profiles are loaded.
31 profiles are in enforce mode.
/snap/snapd/10492/usr/lib/snapd/snap-confine
/snap/snapd/10492/usr/lib/snapd/snap-confine//mount-namespace-capture-helper
/usr/bin/man
/usr/lib/NetworkManager/nm-dhcp-client.action
/usr/lib/NetworkManager/nm-dhcp-helper
/usr/lib/connman/scripts/dhclient-script
/usr/lib/snapd/snap-confine
/usr/lib/snapd/snap-confine//mount-namespace-capture-helper
/usr/sbin/tcpdump
...
0 profiles are in complain mode.
0 processes have profiles defined.
0 processes are in enforce mode.
0 processes are in complain mode.
0 processes are unconfined but have a profile defined.
Las últimas líneas indican los modos de hacer cumplir y quejarse. ¿Cuáles son estos regímenes en resumen?
- En el modo Enforce , el kernel aplica las reglas escritas en el archivo de perfil. No se permiten infracciones y la entrada correspondiente va a los logs.
- En el modo de queja , AppArmor solo registra violaciones sin bloquear las acciones en sí.
El contenido del paquete apparmor-profiles se encuentra en la carpeta
/usr/share/apparmor/extra-profiles/
, hay más de cien perfiles listos para usar allí.
[admin@server ~]$ ll /usr/share/apparmor/extra-profiles/ |head total 484 -rw-r--r-- 1 root system 1724 May 19 2020 README drwxr-xr-x 3 root system 4096 Dec 8 10:14 abstractions/ -rw-r--r-- 1 root system 1319 May 19 2020 bin.netstat -rw-r--r-- 1 root system 1815 May 19 2020 etc.cron.daily.logrotate -rw-r--r-- 1 root system 948 May 19 2020 etc.cron.daily.slocate.cron -rw-r--r-- 1 root system 722 May 19 2020 etc.cron.daily.tmpwatch -rw-r--r-- 1 root system 2623 May 19 2020 sbin.dhclient [admin@server ~]$ ll /usr/share/apparmor/extra-profiles/ |wc -l 118
Antes de que el perfil se active, debe transferirlo de la carpeta
/usr/share/apparmor/extra-profiles/
a
/etc/apparmor.d/
. Ahora se puede estudiar y, si se desea, cambiar. Tomemos algo más simple, por ejemplo
/etc/apparmor.d/bin.ping
.
...
#include <tunables/global>
profile ping /{usr/,}bin/{,iputils-}ping flags=(complain) {
#include <abstractions/base>
#include <abstractions/consoles>
#include <abstractions/nameservice>
capability net_raw,
capability setuid,
network inet raw,
network inet6 raw,
/{,usr/}bin/{,iputils-}ping mixr,
/etc/modules.conf r,
# Site-specific additions and overrides. See local/README for details.
#include <local/bin.ping>
}
Todo está bastante claro, excepto las banderas mixr. Descripción de los significados de las banderas a continuación:
- r - leer;
- w - registro
- a - escritura incremental hasta el final del archivo, del anexo en inglés;
- k - bloquear archivos;
- l - crear enlaces simbólicos a archivos ejecutables;
- m - carga de archivos ejecutables en la memoria;
- cx - transición al perfil de nivel inferior durante la ejecución;
- Cx: transición al perfil de nivel inferior cuando se ejecuta con variables de entorno de limpieza;
- ix - herencia de ejecución;
- px: requiere la definición de un perfil de seguridad discreto para el recurso;
- Px: se requiere la definición de un perfil de seguridad discreto para el recurso, se borran las variables de entorno;
- ux: no verifique el lanzamiento de nuevos procesos;
- Ux: no verifique el lanzamiento de nuevos procesos y limpie las variables de entorno;
También puede especificar
Capabilities
los kernels de Linux que el proceso puede utilizar. Su lista completa está en la página correspondiente del manual.
Para cambiar del modo de aprendizaje al modo forzado, debe ejecutar el comando
aa-enforce <prog_name>, - aa-complain <prog_name>
. Si ahora, después de habilitar el modo forzado, ping intenta hacer algo, algo no intencionado por AppArmor lo bloqueará.
[admin@server ~]$ sudo aa-enforce ping
Setting /usr/bin/ping to enforce mode.
[admin@server ~]$ sudo cp /usr/bin/man /usr/bin/ping
[admin@server ~]$ /usr/bin/ping ping
/usr/bin/ping: can't open the manpath configuration file /etc/manpath.config
Si necesita crear un nuevo perfil, no es difícil. Primero debe crear una plantilla con el comando
aa-autodep
y luego completarla ejecutando
aa-genprof
. Un ejemplo de un diálogo interactivo aa-genprof gratuito en el enlace .
Materiales usados
- PRIMER DE SEGURIDAD LINUX: MARCOS SELINUX Y SMACK
- AppArmor
- AppArmor, documentación en ruso

