/etc/apparmor.d/
i contenen una llista de regles de control d'accés sobre els recursos que cada programa pot utilitzar. Els perfils són compilats i carregats al nucli per l'ordre apparmor_parser
. Cada perfil es pot carregar en mode forçat («enforcing») o reclamat («complaining»). El primer fa complir la política i informa dels intents de violació, mentre que el segon no fa complir la política, però tot i així registra les crides del sistema que s'haurien denegat.
apt install apparmor apparmor-profiles apparmor-utils
amb privilegis d'administrador.
aa-status
ho confirmarà ràpidament:
#
aa-status
apparmor module is loaded. 32 profiles are loaded. 15 profiles are in enforce mode. /usr/bin/man [...] 17 profiles are in complain mode. /usr/sbin/dnsmasq [...] 1 processes have profiles defined. 1 processes are in enforce mode. /usr/sbin/libvirtd (468) libvirtd 0 processes are in complain mode. 0 processes are unconfined but have a profile defined.
aa-enforce
i aa-complain
donant com a paràmetre el camí de l'executable o el camí al fitxer de política. A més, un perfil es pot desactivar completament amb aa-disable
o posat en mode d'auditoria (per també registrar les crides al sistema acceptades) amb aa-audit
.
#
aa-enforce /usr/bin/pidgin
Setting /usr/bin/pidgin to enforce mode.
#
aa-complain /usr/sbin/dnsmasq
Setting /usr/sbin/dnsmasq to complain mode.
aa-unconfined
per llistar els programes que no tenen cap perfil associat i que exposen un sòcol de xarxa obert. Amb l'opció --paranoid
obtindreu tots els processos no confinats que tenen almenys una connexió activa de xarxa.
#
aa-unconfined
451 /usr/bin/containerd not confined 467 /usr/sbin/sshd (sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups) not confined 892 /usr/sbin/exim4 not confined
/sbin/dhclient
(there already is a profile shipped by apparmor-profiles, so you can compare your results to the official one). For this we will use aa-genprof dhclient
. It will invite you to use the application in another window and when done to come back to aa-genprof
to scan for AppArmor events in the system logs and convert those logs into access rules. For each logged event, it will make one or more rule suggestions that you can either approve or further edit in multiple ways:
#
aa-genprof dhclient
Writing updated profile for /usr/sbin/dhclient. Setting /usr/sbin/dhclient to complain mode. Before you begin, you may wish to check if a profile already exists for the application you wish to confine. See the following wiki page for more information: https://gitlab.com/apparmor/apparmor/wikis/Profiles Profiling: /usr/sbin/dhclient Please start the application to be profiled in another window and exercise its functionality now. Once completed, select the "Scan" option below in order to scan the system logs for AppArmor events. For each AppArmor event, you will be given the opportunity to choose whether the access should be allowed or denied. [(S)can system log for AppArmor events] / (F)inish
S
Reading log entries from /var/log/syslog. Profile: /usr/sbin/dhclient Execute: /usr/sbin/dhclient-script Severity: unknown (I)nherit / (C)hild / (P)rofile / (N)amed / (U)nconfined / (X) ix On / (D)eny / Abo(r)t / (F)inishP
Should AppArmor sanitise the environment when switching profiles? Sanitising environment is more secure, but some applications depend on the presence of LD_PRELOAD or LD_LIBRARY_PATH. [(Y)es] / (N)oY
Writing updated profile for /usr/sbin/dhclient-script. Complain-mode changes: Profile: /usr/sbin/dhclient Capability: net_raw Severity: 8 [1 - capability net_raw,] (A)llow / [(D)eny] / (I)gnore / Audi(t) / Abo(r)t / (F)inishA
Adding capability net_raw, to profile. Profile: /usr/sbin/dhclient Capability: net_bind_service Severity: 8 [1 - #include <abstractions/nis>] 2 - capability net_bind_service, (A)llow / [(D)eny] / (I)gnore / Audi(t) / Abo(r)t / (F)inishA
Adding #include <abstractions/nis> to profile. Profile: /usr/sbin/dhclient Path: /etc/ssl/openssl.cnf New Mode: owner r Severity: 2 [1 - #include <abstractions/lightdm>] 2 - #include <abstractions/openssl> 3 - #include <abstractions/ssl_keys> 4 - owner /etc/ssl/openssl.cnf r, (A)llow / [(D)eny] / (I)gnore / (G)lob / Glob with (E)xtension / (N)ew / Audi(t) / (O)wner permissions off / Abo(r)t / (F)inish2
Profile: /usr/sbin/dhclient Path: /etc/ssl/openssl.cnf New Mode: owner r Severity: 2 1 - #include <abstractions/lightdm> [2 - #include <abstractions/openssl>] 3 - #include <abstractions/ssl_keys> 4 - owner /etc/ssl/openssl.cnf r, [(A)llow] / (D)eny / (I)gnore / (G)lob / Glob with (E)xtension / (N)ew / Abo(r)t / (F)inish / (M)oreA
[...] Profile: /usr/sbin/dhclient-script Path: /usr/bin/dash New Mode: owner r Severity: unknown 1 - #include <abstractions/gvfs-open> [2 - #include <abstractions/lightdm>] 3 - #include <abstractions/ubuntu-browsers.d/plugins-common> 4 - #include <abstractions/xdg-open> 5 - owner /usr/bin/dash r, (A)llow / [(D)eny] / (I)gnore / (G)lob / Glob with (E)xtension / (N)ew / Audi(t) / (O)wner permissions off / Abo(r)t / (F)inishA
Adding #include <abstractions/lightdm> to profile. Deleted 2 previous matching profile entries. = Changed Local Profiles = The following local profiles were changed. Would you like to save them? [1 - /usr/sbin/dhclient] 2 - /usr/sbin/dhclient-script (S)ave Changes / Save Selec(t)ed Profile / [(V)iew Changes] / View Changes b/w (C)lean profiles / Abo(r)tS
Writing updated profile for /usr/sbin/dhclient. Writing updated profile for /usr/sbin/dhclient-script. Profiling: /usr/sbin/dhclient Please start the application to be profiled in another window and exercise its functionality now. Once completed, select the "Scan" option below in order to scan the system logs for AppArmor events. For each AppArmor event, you will be given the opportunity to choose whether the access should be allowed or denied. [(S)can system log for AppArmor events] / (F)inishF
Setting /usr/sbin/dhclient to enforce mode. Setting /usr/sbin/dhclient-script to enforce mode. Reloaded AppArmor profiles in enforce mode. Please consider contributing your new profile! See the following wiki page for more information: https://gitlab.com/apparmor/apparmor/wikis/Profiles Finished generating profile for /usr/sbin/dhclient.
El primer esdeveniment detectat és l'execució d'un altre programa. En aquest cas, hi ha diverses opcions: podeu executar el programa amb el perfil del procés pare (l'opció «inherit» o “heretar”), podeu executar-lo amb el seu propi perfil dedicat (opcions «Profile» i “Named”, que difereixen només per la possibilitat d'utilitzar un nom de perfil arbitrari), podeu executar-lo amb un “sub-perfil” del procés pare (opció «Child» o “fill”), podeu executar-lo sense cap perfil (l'opció «Unconfined» o “desconfinada”) o podeu decidir no executar-lo en absolut (l'opció “Deny”).
Tingueu en compte que quan opteu per executar-lo sota un perfil dedicat que encara no existeix, l'eina us crearà el perfil que falta i farà suggeriments de regles per a aquest perfil en la mateixa execució.
| |
A nivell del nucli, els poders especials de l'usuari administrador estan dividits en «capabilities» o “capacitats”. Quan una crida de sistema requereix d'una capacitat específica, AppArmor verificarà si el perfil permet al programa fer ús d'aquesta capacitat.
| |
Aquí el programa cerca permisos de lectura per /etc/ssl/openssl.cnf . aa-genprof ha detectat que aquest permís també va ser concedit per múltiples “abstraccions” i les ofereix com a opcions alternatives. Una abstracció proporciona un conjunt de regles d'accés reutilitzables que agrupen diversos recursos que s'utilitzen habitualment junts. En aquest cas específic, el fitxer s'accedeix generalment a través de les funcions relacionades amb el servei de noms de la biblioteca C i s'escriu "2" per seleccionar primer l'opció “#include<abstractions/openssl>” i després “A” per permetre-ho.
| |
Tingueu en compte que aquesta sol·licitud d'accés no forma part del perfil dhclient sinó del nou perfil que s'ha creat quan s'ha permès que /usr/sbin/dhclient-script s'executi amb el seu propi perfil.
Després d'haver passat per tots els esdeveniments registrats, el programa ofereix salvar tots els perfils que es s'han creat durant l'execució. En aquest cas, tenim dos perfils que es desen alhora amb «Save» (però també els podeu desar individualment) abans de sortir del programa amb «Finish».
|
aa-genprof
és de fet només un “embolcall” intel·ligent al voltant de aa-logprof
: crea un perfil buit, el carrega en mode de “reclamació” i després executa aa-logprof
que és una eina per actualitzar un perfil basat en les violacions de perfil que s'han registrat. Així que es pot tornar a executar aquesta eina més endavant per millorar el perfil que s'acaba de crear.
/etc/apparmor.d/usr.sbin.dhclient
close to the profile shipped by apparmor-profiles in /usr/share/apparmor/extra-profiles/sbin.dhclient
.
/etc/apparmor.d/usr.sbin.dhclient-script
might be similar to /usr/share/apparmor/extra-profiles/sbin.dhclient
, shipped in apparmor-profiles too.