IMPORTANT: Per accedir als fitxer de subversion: http://acacha.org/svn (sense password). Poc a poc s'aniran migrant els enllaços. Encara però funciona el subversion de la farga però no se sap fins quan... (usuari: prova i la paraula de pas 123456)

Alert.png Aquesta wiki forma part dels materials d'un curs
Curs: SeguretatXarxesInformàtiques
Fitxers: No hi ha fitxers
Repositori SVN: https://anonymous@svn.projectes.lafarga.cat/svn/iceupc/SeguretatXarxesInformàtiques
Usuari: anonymous
Paraula de pas: sense paraula de pas
Autors: Sergi Tur Badenas

AppArmor és una implementació d'un modul de seguretat de Linux basat control d'accés per noms.

AppArmor confina/limita l'accés de programes individuals a un conjunt de fitxers i capacitats POSIX.

Es planteja com una alternativa a SELinux.

Instal·lació

Està inclòs per defecte als kernels de Linux des de la Gutsy (7.10).

$ dpkg -l | grep apparmor
ii  apparmor                                   2.3+1289-0ubuntu14                   User-space parser utility for AppArmor
ii  apparmor-utils                             2.3+1289-0ubuntu14                   Utilities for controlling AppArmor
ii  libapparmor-perl                           2.3+1289-0ubuntu14                   AppArmor library Perl bindings
ii  libapparmor1                               2.3+1289-0ubuntu14                   changehat AppArmor library

apparmor-utils

$ dpkg -L apparmor-utils | grep bin
/usr/sbin
/usr/sbin/genprof
/usr/sbin/logprof
/usr/sbin/autodep
/usr/sbin/audit
/usr/sbin/complain
/usr/sbin/enforce
/usr/sbin/unconfined
/usr/sbin/apparmor_status
/usr/sbin/aa-status
/usr/sbin/aa-audit
/usr/sbin/aa-autodep
/usr/sbin/aa-complain
/usr/sbin/aa-enforce
/usr/sbin/aa-genprof
/usr/sbin/aa-logprof
/usr/sbin/aa-unconfined

Perfils

Els perfils es troben a la carpeta:

$ /etc/apparmor.d

Per exemple, en una Jaunty Jackalope podem trobar:

$ ls
abstractions  disable  force-complain  gdm-guest-session  sbin.dhclient3  tunables  usr.sbin.cupsd  usr.sbin.tcpdump

Exemple de norma d'un perfil

Per exemple la línia:

/etc/apache2/conf.d/apache2-manual.conf      r

Indica que l'aplicació a la que s'aplica aquest perfil només té accés de lectura al fitxer /etc/apache2/conf.d/apache2-manual.conf

Crear un perfil

Podem utilitzar la comanda genprof, proporcionada pel paquet apparmor-utils:

$ which genprof
/usr/sbin/genprof
$ dpkg -S /usr/sbin/genprof
apparmor-utils: /usr/sbin/genprof

Per exemple si volem crear un perfil per a Firefox:

$ which firefox
/usr/bin/firefox
 
$ sudo genprof /usr/bin/firefox
Setting /usr/lib/firefox-3.0.10/firefox.sh to complain mode.

Please start the application to be profiled in 
another window and exercise its functionality now.

Once completed, select the "Scan" button 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.

Profiling: /usr/lib/firefox-3.0.10/firefox.sh

[(S)can system log for SubDomain events] / (F)inish

L'aplicació queda a la espera... Ara cal executar una nova instància de firefox (no es pot utilitzar una instància existent). Feu-ho en una nova terminal:

$ firefox

Utilitzeu Firefox de forma normal durant una estona. Un cop acabeu, torneu a la finestra on heu executat genprof i premeu la tecla S:

[(S)can system log for SubDomain events] / (F)inish
Reading log entries from /var/log/messages.
Updating AppArmor profiles in /etc/apparmor.d. 


Profile:  /usr/lib/firefox-3.0.10/firefox.sh
Execute:  /usr/bin/basename
Severity: unknown 


(I)nherit / (P)rofile / (C)hild / (N)ame / (U)nconfined / (X)ix / (D)eny / Abo(r)t / (F)inish
Use of uninitialized value $ans in hash element at /usr/share/perl5/Immunix/SubDomain.pm line 6511.
Use of uninitialized value $ans in pattern match (m//) at /usr/share/perl5/Immunix/SubDomain.pm line 6511.

Profile:  /usr/lib/firefox-3.0.10/firefox.sh
Execute:  /usr/bin/basename
Severity: unknown
(I)nherit / (P)rofile / (C)hild / (N)ame / (U)nconfined / (X)ix / (D)eny / Abo(r)t / (F)inish

Per cada acció podeu decidir quina opció duu a terme (per exemple denegar amb la tecla D). Genprof us anirà ensenyant una a una les accions i fitxers als quals ha accedit Firefox.

Si denegueu les accions (tecla D) us sortirà un missatge:

= Changed Local Profiles =

The following local profiles were changed.  Would you like to save them? 

 [1 - /usr/lib/firefox-3.0.10/firefox.sh]

(S)ave Changes / [(V)iew Changes] / Abo(r)t

Ara premeu S per salvar el perfil:

Writing updated profile for /usr/lib/firefox-3.0.10/firefox.sh.

Profiling: /usr/lib/firefox-3.0.10/firefox.sh

[(S)can system log for SubDomain events] / (F)inish

I premeu F (finish). Consulteu el nou perfil creat:

$ cat /etc/apparmor.d/usr.lib.firefox-3.0.10.firefox.sh 
# Last Modified: Sun May 24 21:41:59 2009
#include <tunables/global>

/usr/lib/firefox-3.0.10/firefox.sh {
  #include <abstractions/base>


  deny /usr/bin/basename r,
  deny /usr/lib/firefox-3.0.10/firefox x,

  /bin/dash rix, 
  /usr/bin/basename ix,

}

Si executeu Firefox:

$ firefox
Killed
/usr/bin/firefox: 39: readlink: Permission denied
Killed
/usr/bin/firefox: 39: dirname: Permission denied
Killed
exec: 142: /usr/lib/firefox-3.0.10/: Permission denied

Per [#Desactivar un perfil|desactivar les restriccions]:

$ sudo ln -s /etc/apparmor.d/usr.lib.firefox-3.0.10.firefox.sh /etc/apparmor.d/disable/
$ sudo apparmor_parser -R < /etc/apparmor.d/usr.lib.firefox-3.0.10.firefox.sh 
Removal succeeded for "/usr/lib/firefox-3.0.10/firefox.sh".

Recursos:

Activar un perfil

$ sudo rm /etc/apparmor.d/disable/profile.name
$ sudo apparmor_parser -r < /etc/apparmor.d/profile.name

Exemple:

$ sudo rm /etc/apparmor.d/disable/bin.ping
$ sudo apparmor_parser -r < /etc/apparmor.d/bin.ping

Fitxers de log

Carpeta:

/var/log/apparmor/

Està buida per defecte?

Comanda ps

La opció Z de la comanda ps mostra una columna amb informació de seguretat. Del manual (man ps):

...
Z               Add a column of security data. Identical to -M. (for SE Linux)
...
$ ping localhost >/dev/null &
[2] 26042
$ sudo ps aZ | grep ping
unconfined                      25907 pts/7    S      0:00 ping localhost
unconfined                      26042 pts/7    S      0:00 ping localhost
unconfined                      26044 pts/7    S+     0:00 grep ping

Exemples

Desactivar AppArmor en tot el sistema

$ sudo invoke-rc.d apparmor stop
$ sudo update-rc.d -f apparmor remove

Tornar a activar

$ sudo invoke-rc.d apparmor start
$ sudo update-rc.d apparmor start 37 S .

Tornar a carregar AppArmor i aplicar tots els perfils

$ sudo invoke-rc.d apparmor reload

Tornar a carregar només un pèrfil

$ sudo apparmor_parser -r < /etc/apparmor.d/profile.name

Text en cursiva

Posar el perfil en complain mode

Serveix per depurar un perfil. No denega res a l'aplicació controlada, només registra els esdeveniments:

$ sudo aa-complain /path/to/bin

Per exemple:

$ sudo aa-complain /usr/bin/firefox

Posar un perfil en enforce mode

$ sudo aa-enforce /path/to/bin

Desactivar un perfil

$ sudo ln -s /etc/apparmor.d/profile.name /etc/apparmor.d/disable/
$ sudo apparmor_parser -R < /etc/apparmor.d/profile.name

Exemple:

$ sudo ln -s /etc/apparmor.d/usr.lib.firefox-3.0.10.firefox.sh /etc/apparmor.d/disable/
$ sudo apparmor_parser -R < /etc/apparmor.d/usr.lib.firefox-3.0.10.firefox.sh 
Removal succeeded for "/usr/lib/firefox-3.0.10/firefox.sh".

Consultar l'estat

$ sudo apparmor_status
apparmor module is loaded.
8 profiles are loaded.
8 profiles are in enforce mode.
   /usr/lib/connman/scripts/dhclient-script
   /usr/share/gdm/guest-session/Xsession
   /usr/sbin/tcpdump
   /usr/lib/cups/backend/cups-pdf
   /sbin/dhclient3
   /usr/sbin/cupsd
   /sbin/dhclient-script
   /usr/lib/NetworkManager/nm-dhcp-client.action
0 profiles are in complain mode.
2 processes have profiles defined.
2 processes are in enforce mode :
   /sbin/dhclient3 (3138) 
   /usr/sbin/cupsd (2870) 
0 processes are in complain mode.
0 processes are unconfined but have a profile defined.

Enllaços externs