Si bien el kernel de Linux proporciona un buen aislamiento de los usuarios y un sólido control de permisos de archivos, un MAC como AppArmor proporciona permisos y protección más detallados contra muchas amenazas desconocidas. Si se encuentra una vulnerabilidad de seguridad en el kernel de Linux u otro demonio del sistema, un sistema AppArmor bien configurado puede evitar el acceso a rutas críticas que podrían ser vulnerables al problema.
AppArmor puede funcionar de manera efectiva en dos modos: hacer cumplir y quejarse. Hacer cumplir es el estado de producción predeterminado de AppArmor, mientras que quejarse es útil para desarrollar un conjunto de reglas basado en patrones de operación reales y para registrar violaciones. Se configura a través de archivos de texto sin formato en un formato relativamente amigable y tiene una curva de aprendizaje más corta que la mayoría de los otros sistemas de control de acceso obligatorios.
Instalación
Para instalar AppArmor en Debian, ejecute (como root):
apto instalar apparmor apparmor-utils auditdPuede omitir auditado si no necesita herramientas de generación de perfiles.
Si desea instalar perfiles iniciales y adicionales, ejecute:
apto instalar apparmor-profiles apparmor-profiles-extraDado que AppArmor es un módulo del kernel de Linux, debe habilitarlo con los siguientes comandos:
mkdir -p / etc / default / grub.DCree el archivo / etc / default / grub.d / apariencia.cfg con el siguiente contenido:
GRUB_CMDLINE_LINUX_DEFAULT = "$ GRUB_CMDLINE_LINUX_DEFAULT apparmor = 1 security = apparmor"Guarde y salga, luego ejecute:
update-grubEntonces reinicia.
Existe un debate si esto debería hacerse automáticamente. Es posible que desee consultar el final de este informe de error para ver si esto ha cambiado desde el momento de escribir este artículo.
Una vez que reinicie, puede verificar si AppArmor está habilitado ejecutando:
estado-aaEste comando enumerará los perfiles de AppArmor cargados y enumerará su estado actual de cumplimiento (aplicado, quejas, etc.)
Si tu corres:
ps auxZ | grep -v '^ ilimitado'Verá una lista de programas que están limitados por un perfil de AppArmor. Un programa confinado es aquel que se ve afectado y limitado (ya sea de forma pasiva, en modo de queja o de forma activa en modo forzado) por AppArmor.
Cambio de modos / Desactivación de AppArmor
Si desea deshabilitar AppArmor porque un programa no funciona, es posible que desee considerar colocar el perfil en modo de queja en lugar del modo forzado. Para hacer esto, ejecute (como root o vía sudo):
aa-quejarse / ruta / a / programaPor ejemplo, si ping no funciona correctamente, use:
aa-quejarse / usr / bin / pingUna vez que un perfil está en modo de queja, puede examinar el registro a través de / var / log / syslog o con journalctl -xe en sistemas systemd (Debian 8.x, Jessie y superior).
Una vez que haya editado el perfil para eliminar o ajustar la restricción, puede activar el modo de aplicación nuevamente para el binario con:
aa-imponer / ruta / a / programaEn el ejemplo anterior, reemplace / ruta / a / programa con la ruta completa al binario afectado por el perfil en cuestión.
Si tiene un problema con un programa y está en modo de queja, los registros proporcionarán información específica sobre qué acción se denegó. El campo de operación explicará lo que el programa intentó hacer, el campo de perfil el perfil específico afectado, el nombre especificará el objetivo de la acción (i.mi. qué archivo se detuvo de una operación de lectura o escritura), y las máscaras solicitadas y denegadas indican si la operación, tanto solicitada por el programa como denegada según el perfil, fue de lectura o lectura-escritura.
Puede deshabilitar un perfil por completo ejecutando:
aa-deshabilitar / ruta / a / programaO puede deshabilitar AppArmor por completo editando el archivo: / etc / default / grub.d / apariencia.cfg para contener:
GRUB_CMDLINE_LINUX_DEFAULT = ”$ GRUB_CMDLINE_LINUX_DEFAULT apparmor = 0”Luego corriendo:
update-grubY reiniciando su sistema.
Trabajar con perfiles de AppArmor
Los perfiles de AppArmor residen en / etc / apparmor.directorio d /. Si instala el paquete de paquetes apparmor-profiles y apparmor-profiles-extra, encontrará perfiles en / usr / share / doc / apparmor-profiles y / usr / share / doc / apparmor-profiles / extra. Para activarlos, copie los archivos en / etc / apparmor.d luego edítelos para asegurarse de que contienen los valores que desea, guárdelos y luego ejecute:
servicio apparmor recargaSi desea recargar solo un perfil, ejecute:
apparmor_parser -r / etc / apparmor.d / perfilDonde "perfil" es el nombre del perfil en cuestión.
No se recomienda simplemente copiar los perfiles y los perfiles adicionales en / etc / apparmor.d directorio sin editarlos manualmente. Algunos perfiles pueden ser antiguos y, sin duda, algunos no contendrán los valores que desea. Si los copia todos, al menos configúrelos para que se quejen para que pueda monitorear las violaciones sin interrumpir los programas en producción:
cd / etc / apparmor.Dpor f en *.*; hacer aa-quejarse / etc / apparmor.d / $ f; hecho
Puede usar el comando aa-enforce individualmente para habilitar los perfiles que desea mantener, ajustar los que causan problemas y hacerlos cumplir, o eliminar los que no necesita ejecutando aa-disable o eliminando el archivo de perfil de / etc / apparmor.D.
Creación de un perfil de AppArmor
Antes de crear un perfil personalizado, querrá buscar en / etc / apparmor.d y / usr / share / doc / apparmor-profiles directorios para un perfil existente que cubre el binario en cuestión. Para buscar estos, ejecute:
buscar / usr / share / doc / apparmor-profiles | grep "programa" -iReemplazar programa con el programa que desea proteger con AppArmor. Si encuentra uno, cópielo en / etc / apparmor.dy luego edite el archivo en su editor de texto favorito.
Cada perfil consta de tres secciones principales: incluye, capacidades y rutas. Puede encontrar una referencia útil en la documentación de SuSE.
Incluye
Incluye proporciona una sintaxis que puede utilizar dentro del archivo. Usan la sintaxis C / C ++ #include <> y generalmente hacen referencia a abstracciones que se encuentran en / etc / apparmor.directorio d / abstractions.
Capacidades
La sección de capacidades, que normalmente se encuentra después de las inclusiones, enumera las capacidades específicas que el programa puede realizar. Por ejemplo, puede dejar que un programa realice una operación setuid con:
capacidad setuidLa capacidad net_bind_service permite que un programa se vincule a un puerto de red. Si no concede esto, un demonio de servidor como Apache no puede abrir el puerto 80 y escuchar. Sin embargo, omitir esta capacidad puede proporcionar una excelente seguridad para los procesos en los que no confía en la red.
Rutas
Puede enumerar las rutas que el programa puede leer (y posiblemente escribir). Por ejemplo, si desea permitir que el programa acceda al archivo / etc / passwd, agregue:
/ etc / passwd rEn el perfil. Tenga en cuenta la "r": esto significa solo lectura. Si cambia esto a "w", se permitirá la escritura en esta ruta o archivo.
Incluso si permite una ruta en AppArmor, todavía está sujeta a las restricciones del sistema de archivos de Linux (i.mi. configurado con chmod, chgrp y chown). Sin embargo, AppArmor seguirá proporcionando una capa adicional de protección en caso de que esos mecanismos se vean comprometidos.
Conclusión
La clave para una implementación exitosa de AppArmor es establecer perfiles para quejarse y luego hacer cumplir. Un examen cuidadoso de los registros le brindará las rutas y capacidades mínimas necesarias para una operación exitosa del programa. Al asignar estos y no más, aumentará drásticamente la seguridad de su sistema.