Générateur de profil Apparmor pour les conteneurs Docker. Fondamentalement, un meilleur profil Apparmor, que en créer un à la main, car qui ferait jamais cela.
"La révision des demandes de traction du profil Apparmor est le fléau de mon existence"
Jess Frazelle
Table des matières
Installation
Binaires
Via aller
Usage
Fichier global
Fichier de configuration
Installation d'un profil
À quoi ressemble le profil généré?
Intégration avec Docker
Pour les instructions d'installation des binaires, veuillez visiter la page des versions.
$ Go Get github.com/genuinetools/bane
$ BANE -HBANE - Générateur de profil Apparmor personnalisé pour Docker ContainersUsage: Bane <rand> Flags: -d Activer Debug Logging (par défaut: false) -Profile-DIR Directory pour enregistrer les profils (par défaut: /etc/apparmor.d/continers) Commandes: Version Affiche les informations de version.
Sample.toml est une configuration d'échantillon apparmor pour nginx dans un conteneur.
Exemple de globe | Description |
---|---|
/dir/file | faire correspondre un fichier spécifique |
/dir/* | Faites correspondre tous les fichiers dans un répertoire (y compris les fichiers DOT) |
/dir/a* | Faites correspondre tout fichier dans un répertoire à partir d'un |
/dir/*.png | Faites correspondre tout fichier dans un répertoire se terminant par .png |
/dir/[^.]* | Faites correspondre tout fichier dans un répertoire sauf les fichiers DOT |
/dir/ | faire correspondre un répertoire |
/dir/*/ | Faites correspondre tout répertoire dans / dir / |
/dir/a*/ | Faites correspondre tout répertoire dans / dir / en commençant par un |
/dir/*a/ | Faites correspondre n'importe quel répertoire dans / dir / se terminant par un |
/dir/** | Faites correspondre tout fichier ou répertoire dans ou en dessous / dir / |
/dir/**/ | Faites correspondre tout répertoire dans ou en dessous / dir / |
/dir/**[^/] | Faites correspondre tout fichier dans ou en dessous / dir / |
/dir{,1,2}/** | Faites correspondre tout fichier ou répertoire dans ou en dessous / dir /, / dir1 / et / dir2 / |
Maintenant que nous avons notre fichier de configuration par le haut, installons-le. bane
installera automatiquement le profil dans un répertoire /etc/apparmor.d/containers/
et exécutera apparmor_parser
.
$ sudo bane sample.toml # Profil installé avec succès Vous pouvez maintenant exécuter le profil avec # `docker run --security-opt =" Apparmor: docker-nginx-échantillon "` # maintenant, exécutons nginx $ docker -d --Décurity -opt = "Apparmor: docker-nginx-échantillon" -p 80:80 nginx
L'utilisation de profils Apparmor personnalisés n'a jamais été aussi simple!
Essayons maintenant de faire des activités malveillantes avec l'échantillon de profil:
$ docker run --security-opt = "Apparmor: docker-nginx-échantillon" -p 80:80 --rm -it nginx bashroot @ 6da5a2a930b9: ~ # ping 8.8.8.8ping: manque de privilège pour brute socket.root@6da5a2a930b9 : / # topbash: / usr / bin / top: permission deniedroot @ 6da5a2a930b9: ~ # touch ~ / thingTouch: Can't touch 'thing': permission deniedroot @ 6da5a2a930b9: / # shbash: / bin / sh: permission niiedroot @ 6da5a2a930b9: / # dashbash: / bin / dash: permission niée
Exemple de sortie dmesg
lors de l'utilisation 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
Pour l' sample.toml
ci-dessus.toml, le profil généré est disponible sous forme d'échantillon docker-nginx.
C'était à l'origine une preuve de concept de ce qui, espérons-le, deviendra un profil de sécurité natif dans le moteur Docker. Pour plus d'informations à ce sujet, voir Docker / Docker # 17142.