Gerador de perfil do Appmor para contêineres do docker. Basicamente, um melhor perfil do Aparmor do que criar um à mão, porque quem já faria isso.
"Analisar solicitações de puxar perfil do Appmor é a desgraça da minha existência"
Jess Frazelle
Índice
Instalação
Binários
Via go
Uso
Globbing de arquivos
Arquivo de configuração
Instalando um perfil
Como é o perfil gerado?
Integração com Docker
Para instruções de instalação de binários, visite a página de lançamentos.
$ vá obter github.com/genuinetools/bane
$ BANE -HBANE -Gerador de perfil do Aparmor personalizado para Docker ContainersSusage: Bane <comandos> sinalizadores: -d Enable Debug Logging (padrão: false) -profile-dir Diretório para salvar os perfis (Padrão: /etc/apparmor.d/containers) Comandos: versão mostram as informações da versão.
Sample.toml é uma configuração de amostra do Appmor para Nginx em um contêiner.
Exemplo glob | Descrição |
---|---|
/dir/file | corresponder a um arquivo específico |
/dir/* | Combine todos os arquivos em um diretório (incluindo arquivos DOT) |
/dir/a* | corresponder a qualquer arquivo em um diretório começando com um |
/dir/*.png | Combine qualquer arquivo em um diretório que termine com .png |
/dir/[^.]* | Combine qualquer arquivo em um diretório, exceto arquivos de pontos |
/dir/ | corresponder a um diretório |
/dir/*/ | Combine qualquer diretório dentro /dir / |
/dir/a*/ | Combine qualquer diretório dentro / dir / começando com um |
/dir/*a/ | corresponder a qualquer diretório dentro / dir / terminando com um |
/dir/** | Combine qualquer arquivo ou diretório dentro ou abaixo /dir / |
/dir/**/ | Combine qualquer diretório dentro ou abaixo /dir / |
/dir/**[^/] | Combine qualquer arquivo dentro ou abaixo /dir / |
/dir{,1,2}/** | Combine qualquer arquivo ou diretório em ou abaixo /dir /, /dir1 /e /dir2 / |
Agora que temos nosso arquivo de configuração acima, vamos instalá -lo. bane
instalará automaticamente o perfil em um diretório /etc/apparmor.d/containers/
e executará apparmor_parser
.
$ sudo bane sample.toml# perfil instalado com sucesso Você agora pode executar o perfil com# `docker run--security-opt =" Appmor: Docker-nginx-sample "`# agora vamos executar nginx $ docker run --d -d-segurança -Opt = "Appmor: Docker-Nginx-Sample" -p 80:80 nginx
O uso de perfis personalizados do Aparmor nunca foi tão fácil!
Agora vamos tentar realizar atividades maliciosas com o perfil de amostra:
$ Docker Run-Segurança-Opt = "Appmor: Docker-Nginx-Sample" -p 80:80--RM -it Nginx Bashroot@6DA5A2A930B9: ~# ping 8.8.8.8ping: Falta privilégio para Socket.root@6da5A2A930B9 :/# topbash:/usr/bin/top: permissão Deniedroot@6DA5A2A930B9: ~# Touch ~/ThingTouch: Não é possível tocar na 'coisa': permissão Deniedroot@6DA5A2A930B9:/# shbash:/bin/sh: permissão Deniedroot@6DA5A2A930B9:/# DashiSh:/Bin/Dash Denied Denied:
Exemplo de saída dmesg
ao usar 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 a sample.toml
acima, o perfil gerado está disponível como Docker-Nginx-Sple.
Isso foi originalmente uma prova de conceito para o que, esperançosamente, se tornará um perfil de segurança nativo no mecanismo do Docker. Para mais informações sobre isso, consulte Docker/Docker#17142.