Generador de perfil de Apparmor para contenedores Docker. Básicamente, un mejor perfil de APARMOR, que crear uno a mano, porque quién haría eso.
"Revisar las solicitudes de extracción de perfil de Apparmor es la ruina de mi existencia"
Jess Frazelle
Tabla de contenido
Instalación
Binarios
Via Go
Uso
Archivo Globbing
Archivo de configuración
Instalación de un perfil
¿Cómo se ve el perfil generado?
Integración con Docker
Para las instrucciones de instalación de los binarios, visite la página de lanzamientos.
$ ir a buscar github.com/genuinetools/bane
$ Bane -hbane -Generador de perfil de Apparmor personalizado para Docker ContainersUsage: Bane <Command> Flags: -d Enable Registro de depuración (predeterminado: Falso) -Profile -Dir Directorio para guardar los perfiles (predeterminado: /etc/apparmor.d/Containers) Comandos: la versión muestra la información de la versión.
Sample.toml es una configuración de muestra de APARMOR para Nginx en un contenedor.
Ejemplo del mundo | Descripción |
---|---|
/dir/file | hacer coincidir un archivo específico |
/dir/* | Haga coincidir cualquier archivo en un directorio (incluidos los archivos DOT) |
/dir/a* | coincidir con cualquier archivo en un directorio que comience con un |
/dir/*.png | Haga coincidir cualquier archivo en un directorio que finalice con .png |
/dir/[^.]* | Haga coincidir cualquier archivo en un directorio excepto archivos DOT |
/dir/ | coincidir con un directorio |
/dir/*/ | coincidir con cualquier directorio dentro /dir / |
/dir/a*/ | Haga coincidir cualquier directorio dentro / dir / comenzando con un |
/dir/*a/ | coincidir con cualquier directorio dentro / dir / finalizar con un |
/dir/** | Haga coincidir cualquier archivo o directorio en o abajo /dir / |
/dir/**/ | Haga coincidir cualquier directorio en o debajo /dir / |
/dir/**[^/] | Haga coincidir cualquier archivo en o abajo /dir / |
/dir{,1,2}/** | Haga coincidir cualquier archivo o directorio en o abajo /dir /, /dir1 /y /dir2 / |
Ahora que tenemos nuestro archivo de configuración desde arriba, instalemos. bane
instalará automáticamente el perfil en un directorio /etc/apparmor.d/containers/
y ejecutará apparmor_parser
.
$ sudo bane sample.toml# perfil instalado correctamente ahora puede ejecutar el perfil con# `docker run --security-opt =" apararmor: docker-nginx-sample "`# Ahora vamos a ejecutar nginx $ docker run -d --security -opt = "apararmor: docker-nginx-sample" -p 80:80 nginx
¡El uso de perfiles de Apparmor personalizados nunca ha sido más fácil!
Ahora intentemos hacer actividades maliciosas con el perfil de muestra:
$ Docker Run --security-opt = "Apparmor: Docker-Nginx-Sample" -P 80:80--RM -IT Nginx Bashroot@6da5a2a930b9: ~# ping 8.8.8.8ping: falta de privilegio para enchufe.root@6da5a2a930b9 :/# topbash:/usr/bin/top: permiso Deniedroot@6da5a2a930b9: ~# touch ~/ThingTouch: No puedo tocar 'cosa': permiso Deniedroot@6DA5A2A930B9:/# shbash:/bin/sh: permiso Deniedroot@6DA5A2A930B9:/# DashBash:/bin/Dash: Permiso Onedened Onedened Onedened
Muestra la salida dmesg
cuando se usa LogOnWritePaths
:
[ 1964.142128] type=1400 audit(1444369315.090:38): apparmor="STATUS" operation="profile_replace" profile="unconfined" name="docker-nginx" pid=3945 comm="apparmor_parser" [ 1966.620327] type=1400 audit(1444369317.570:39): apparmor="AUDIT" operation="open" profile="docker-nginx" name="/1" pid=3985 comm="nginx" requested_mask="c" fsuid=0 ouid=0 [ 1966.624381] type=1400 audit(1444369317.574:40): apparmor="AUDIT" operation="mkdir" profile="docker-nginx" name="/var/cache/nginx/client_temp/" pid=3985 comm="nginx" requested_mask="c" fsuid=0 ouid=0 [ 1966.624446] type=1400 audit(1444369317.574:41): apparmor="AUDIT" operation="chown" profile="docker-nginx" name="/var/cache/nginx/client_temp/" pid=3985 comm="nginx" requested_mask="w" fsuid=0 ouid=0 [ 1966.624463] type=1400 audit(1444369317.574:42): apparmor="AUDIT" operation="mkdir" profile="docker-nginx" name="/var/cache/nginx/proxy_temp/" pid=3985 comm="nginx" requested_mask="c" fsuid=0 ouid=0 [ 1966.624494] type=1400 audit(1444369317.574:43): apparmor="AUDIT" operation="chown" profile="docker-nginx" name="/var/cache/nginx/proxy_temp/" pid=3985 comm="nginx" requested_mask="w" fsuid=0 ouid=0 [ 1966.624507] type=1400 audit(1444369317.574:44): apparmor="AUDIT" operation="mkdir" profile="docker-nginx" name="/var/cache/nginx/fastcgi_temp/" pid=3985 comm="nginx" requested_mask="c" fsuid=0 ouid=0 [ 1966.624534] type=1400 audit(1444369317.574:45): apparmor="AUDIT" operation="chown" profile="docker-nginx" name="/var/cache/nginx/fastcgi_temp/" pid=3985 comm="nginx" requested_mask="w" fsuid=0 ouid=0 [ 1966.624546] type=1400 audit(1444369317.574:46): apparmor="AUDIT" operation="mkdir" profile="docker-nginx" name="/var/cache/nginx/uwsgi_temp/" pid=3985 comm="nginx" requested_mask="c" fsuid=0 ouid=0 [ 1966.624582] type=1400 audit(1444369317.574:47): apparmor="AUDIT" operation="chown" profile="docker-nginx" name="/var/cache/nginx/uwsgi_temp/" pid=3985 comm="nginx" requested_mask="w" fsuid=0 ouid=0
Para la sample.toml
anterior.toml, el perfil generado está disponible como Docker-Nginx-Sample.
Originalmente fue una prueba de concepto para lo que con suerte se convertirá en un perfil de seguridad nativo en el motor Docker. Para obtener más información sobre esto, consulte Docker/Docker#17142.