12 KiB
Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!
Otras formas de apoyar a HackTricks:
- Si quieres ver a tu empresa anunciada en HackTricks o descargar HackTricks en PDF, consulta los PLANES DE SUSCRIPCIÓN!
- Obtén el merchandising oficial de PEASS & HackTricks
- Descubre La Familia PEASS, nuestra colección de NFTs exclusivos
- Únete al 💬 grupo de Discord o al grupo de telegram o sígueme en Twitter 🐦 @carlospolopm.
- Comparte tus trucos de hacking enviando PRs a los repositorios de github HackTricks y HackTricks Cloud.
Información Básica
AppArmor es una mejora del kernel para confinar programas a un conjunto limitado de recursos con perfiles por programa. Los perfiles pueden permitir capacidades como acceso a la red, acceso a sockets en bruto y el permiso para leer, escribir o ejecutar archivos en rutas coincidentes.
Es un Control de Acceso Obligatorio o MAC que vincula atributos de control de acceso a programas en lugar de a usuarios.
El confinamiento de AppArmor se proporciona a través de perfiles cargados en el kernel, típicamente al arrancar.
Los perfiles de AppArmor pueden estar en uno de dos modos:
- Enforcement: Los perfiles cargados en modo de enforcement resultarán en la aplicación de la política definida en el perfil así como en la notificación de intentos de violación de la política (ya sea a través de syslog o auditd).
- Complain: Los perfiles en modo de complain no aplicarán la política, sino que notificarán intentos de violación de la política.
AppArmor se diferencia de otros sistemas MAC en Linux: es basado en rutas, permite la mezcla de perfiles en modos de enforcement y complain, utiliza archivos de inclusión para facilitar el desarrollo y tiene una barrera de entrada mucho más baja que otros sistemas MAC populares.
Partes de AppArmor
- Módulo del kernel: Realiza el trabajo real
- Políticas: Define el comportamiento y el confinamiento
- Parser: Carga las políticas en el kernel
- Utilidades: Programas en modo usuario para interactuar con apparmor
Ruta de los perfiles
Los perfiles de apparmor suelen guardarse en /etc/apparmor.d/
Con sudo aa-status
podrás listar los binarios que están restringidos por algún perfil. Si cambias el carácter "/" por un punto en la ruta de cada binario listado, obtendrás el nombre del perfil de apparmor dentro de la carpeta mencionada.
Por ejemplo, un perfil de apparmor para /usr/bin/man estará ubicado en /etc/apparmor.d/usr.bin.man
Comandos
aa-status #check the current status
aa-enforce #set profile to enforce mode (from disable or complain)
aa-complain #set profile to complain mode (from diable or enforcement)
apparmor_parser #to load/reload an altered policy
aa-genprof #generate a new profile
aa-logprof #used to change the policy when the binary/program is changed
aa-mergeprof #used to merge the policies
Creación de un perfil
- Para indicar el ejecutable afectado, se permiten rutas absolutas y comodines (para la expansión de nombres de archivos) para especificar archivos.
- Para indicar el acceso que tendrá el binario sobre archivos, se pueden utilizar los siguientes controles de acceso:
- r (lectura)
- w (escritura)
- m (mapear en memoria como ejecutable)
- k (bloqueo de archivos)
- l (creación de enlaces duros)
- ix (para ejecutar otro programa con la nueva política heredada)
- Px (ejecutar bajo otro perfil, después de limpiar el entorno)
- Cx (ejecutar bajo un perfil hijo, después de limpiar el entorno)
- Ux (ejecutar sin restricciones, después de limpiar el entorno)
- Se pueden definir Variables en los perfiles y pueden ser manipuladas desde fuera del perfil. Por ejemplo: @{PROC} y @{HOME} (añadir #include <tunables/global> al archivo de perfil)
- Se admiten reglas de denegación para anular reglas de permiso.
aa-genprof
Para empezar a crear un perfil fácilmente, apparmor puede ayudarte. Es posible hacer que apparmor inspeccione las acciones realizadas por un binario y luego te permita decidir qué acciones quieres permitir o denegar.
Solo necesitas ejecutar:
sudo aa-genprof /path/to/binary
Luego, en una consola diferente, realiza todas las acciones que el binario normalmente llevaría a cabo:
/path/to/binary -a dosomething
Luego, en la primera consola presiona "s" y luego en las acciones grabadas indica si quieres ignorar, permitir o lo que sea. Cuando hayas terminado presiona "f" y el nuevo perfil se creará en /etc/apparmor.d/path.to.binary
{% hint style="info" %} Usando las teclas de flecha puedes seleccionar lo que deseas permitir/denegar/lo que sea {% endhint %}
aa-easyprof
También puedes crear una plantilla de un perfil de apparmor de un binario con:
sudo aa-easyprof /path/to/binary
# vim:syntax=apparmor
# AppArmor policy for binary
# ###AUTHOR###
# ###COPYRIGHT###
# ###COMMENT###
#include <tunables/global>
# No template variables specified
"/path/to/binary" {
#include <abstractions/base>
# No abstractions specified
# No policy groups specified
# No read paths specified
# No write paths specified
}
{% hint style="info" %}
Tenga en cuenta que por defecto en un perfil creado no se permite nada, por lo que todo está denegado. Necesitará agregar líneas como /etc/passwd r,
para permitir que el binario lea /etc/passwd
por ejemplo.
{% endhint %}
Luego puede forzar el nuevo perfil con
sudo apparmor_parser -a /etc/apparmor.d/path.to.binary
Modificación de un perfil desde registros
La siguiente herramienta leerá los registros y preguntará al usuario si desea permitir algunas de las acciones prohibidas detectadas:
sudo aa-logprof
{% hint style="info" %} Usando las teclas de flecha puedes seleccionar lo que deseas permitir/denegar/cualquier otra acción {% endhint %}
Administración de un Perfil
#Main profile management commands
apparmor_parser -a /etc/apparmor.d/profile.name #Load a new profile in enforce mode
apparmor_parser -C /etc/apparmor.d/profile.name #Load a new profile in complain mode
apparmor_parser -r /etc/apparmor.d/profile.name #Replace existing profile
apparmor_parser -R /etc/apparmor.d/profile.name #Remove profile
Registros
Ejemplo de registros AUDIT y DENIED del ejecutable service_bin
en /var/log/audit/audit.log:
type=AVC msg=audit(1610061880.392:286): apparmor="AUDIT" operation="getattr" profile="/bin/rcat" name="/dev/pts/1" pid=954 comm="service_bin" requested_mask="r" fsuid=1000 ouid=1000
type=AVC msg=audit(1610061880.392:287): apparmor="DENIED" operation="open" profile="/bin/rcat" name="/etc/hosts" pid=954 comm="service_bin" requested_mask="r" denied_mask="r" fsuid=1000 ouid=0
También puedes obtener esta información utilizando:
sudo aa-notify -s 1 -v
Profile: /bin/service_bin
Operation: open
Name: /etc/passwd
Denied: r
Logfile: /var/log/audit/audit.log
Profile: /bin/service_bin
Operation: open
Name: /etc/hosts
Denied: r
Logfile: /var/log/audit/audit.log
AppArmor denials: 2 (since Wed Jan 6 23:51:08 2021)
For more information, please see: https://wiki.ubuntu.com/DebuggingApparmor
Apparmor en Docker
Observe cómo el perfil docker-profile de docker se carga por defecto:
sudo aa-status
apparmor module is loaded.
50 profiles are loaded.
13 profiles are in enforce mode.
/sbin/dhclient
/usr/bin/lxc-start
/usr/lib/NetworkManager/nm-dhcp-client.action
/usr/lib/NetworkManager/nm-dhcp-helper
/usr/lib/chromium-browser/chromium-browser//browser_java
/usr/lib/chromium-browser/chromium-browser//browser_openjdk
/usr/lib/chromium-browser/chromium-browser//sanitized_helper
/usr/lib/connman/scripts/dhclient-script
docker-default
Por defecto, se genera el perfil Apparmor docker-default desde https://github.com/moby/moby/tree/master/profiles/apparmor
Resumen del perfil docker-default:
- Acceso a toda la red
- No se define ninguna capacidad (Sin embargo, algunas capacidades provendrán de incluir reglas base básicas, por ejemplo, #include <abstractions/base>)
- No está permitido escribir en ningún archivo de /proc
- Otros subdirectorios/archivos de /proc y /sys tienen denegado el acceso de lectura/escritura/bloqueo/enlace/ejecución
- No está permitido montar
- Ptrace solo se puede ejecutar en un proceso que esté confinado por el mismo perfil de apparmor
Una vez que ejecutes un contenedor docker, deberías ver la siguiente salida:
1 processes are in enforce mode.
docker-default (825)
Tenga en cuenta que apparmor bloqueará incluso los privilegios de capacidades otorgados al contenedor por defecto. Por ejemplo, será capaz de bloquear el permiso para escribir dentro de /proc incluso si se otorga la capacidad SYS_ADMIN porque por defecto el perfil de apparmor de docker niega este acceso:
docker run -it --cap-add SYS_ADMIN --security-opt seccomp=unconfined ubuntu /bin/bash
echo "" > /proc/stat
sh: 1: cannot create /proc/stat: Permission denied
Necesitas deshabilitar apparmor para eludir sus restricciones:
docker run -it --cap-add SYS_ADMIN --security-opt seccomp=unconfined --security-opt apparmor=unconfined ubuntu /bin/bash
Tenga en cuenta que, por defecto, AppArmor también prohibirá que el contenedor monte carpetas desde el interior, incluso con la capacidad de SYS_ADMIN.
Tenga en cuenta que puede añadir/eliminar capacidades al contenedor de docker (esto seguirá estando restringido por métodos de protección como AppArmor y Seccomp):
--cap-add=SYS_ADMIN
_ otorga _la capacidadSYS_ADMIN
--cap-add=ALL
_ otorga _todas las capacidades--cap-drop=ALL --cap-add=SYS_PTRACE
elimina todas las capacidades y solo otorgaSYS_PTRACE
{% hint style="info" %} Por lo general, cuando descubre que tiene una capacidad privilegiada disponible dentro de un contenedor de docker pero alguna parte del exploit no funciona, esto se deberá a que el apparmor de docker estará impidiéndolo. {% endhint %}
Escape de Docker con AppArmor
Puede averiguar qué perfil de apparmor está ejecutando un contenedor utilizando:
docker inspect 9d622d73a614 | grep lowpriv
"AppArmorProfile": "lowpriv",
"apparmor=lowpriv"
Entonces, puedes ejecutar la siguiente línea para encontrar el perfil exacto que se está utilizando:
find /etc/apparmor.d/ -name "*lowpriv*" -maxdepth 1 2>/dev/null
En el extraño caso de que puedas modificar el perfil de apparmor de docker y recargarlo, podrías eliminar las restricciones y "evitarlas".
Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!
Otras formas de apoyar a HackTricks:
- Si quieres ver a tu empresa anunciada en HackTricks o descargar HackTricks en PDF, consulta los PLANES DE SUSCRIPCIÓN!
- Consigue el merchandising oficial de PEASS & HackTricks
- Descubre La Familia PEASS, nuestra colección de NFTs exclusivos
- Únete al 💬 grupo de Discord o al grupo de telegram o sigue a Twitter 🐦 @carlospolopm.
- Comparte tus trucos de hacking enviando PRs a los repositorios de github de HackTricks y HackTricks Cloud.