Home > GNU/Linux, Sicurezza e GNU/Linux > Sicurezza e GNU/Linux (7): AppArmor, il framework di sicurezza di Ubuntu e Suse

Sicurezza e GNU/Linux (7): AppArmor, il framework di sicurezza di Ubuntu e Suse

Se avete seguito anche sommariamente le scorse puntate, avrete ormai capito che limitare i poteri di root è uno degli imperativi per rinforzare la sicurezza in un sistema di tipo Unix. Oggi vedremo con un esempio concreto come funziona AppArmor, un sistema di sicurezza presente di default in Ubuntu e Suse Linux.

Lo scopo di AppArmor è quello di limitare le azioni che i programmi possono compiere (sia che girino sotto root, sia che girino sotto altro utente). In termini tecnici, AppArmor è un sistema MAC che sta per Mandatory Access Control, ovvero controllo degli accessi vincolante, a differenza dei normali permessi che invece sono DAC (Controllo di Accesso Discrezionale) perché l’utente proprietario di un file può cambiare la policy di accesso di quel file.

AppArmor in sostanza evita che un programma, eventualmente caduto vittima di un attacco, possa compiere azioni indesiderate. AppArmor “gira” nel kernel (recentemente è stato incluso nel kernel Linux vanilla, quindi è presente in qualsiasi distribuzione), per cui può impedire quello che vogliamo per davvero prima che possa accadere.

Facciamo un esempio molto banale. Supponiamo di avere un programma che stampa a video il contenuto di un file ma non vogliamo che esso possa accedere alla cartella /etc, mai, neppure se eseguito come root. Noi un programma del genere lo abbiamo già preinstallato nella nostra GNU/Linux box ed è precisamente il comando cat. Facciamone quindi una copia per i nostri scopi:

sudo cp /bin/cat /usr/bin/mioprogramma

controlliamo che funzioni:

mioprogramma /etc/default/grub

vedremo che a video viene stampato il contenuto del file /etc/default/grub

Ora vogliamo impedire a mioprogramma di stampare cosa è presente in /etc. Come opereremmo normalmente? Dovremmo cambiare i permessi di /etc e dei file contenuti, facendo i modo che i file non siano leggibili, ad esempio, solo a chi non è membro di un certo gruppo e dovremmo fare in modo che mioprogramma venga eseguito con l’ID di quel gruppo (questo è possibile tramire il bit SGID, simile a SUID ma per i gruppi). Ma questo renderebbe complicato per altri programmi poter accedere a quei file, per cui dovremmo cambiare i loro permessi, ad esempio per ciascuno dovremmo settare un SGID corrispondente al gruppo “autorizzato”, ma anche questo (oltre ad essere complicato) non basterebbe perché se il programma è eseguito da root non c’è modo di bloccarlo.

Ecco che arriva in nostro aiuto AppArmor. Prima di tutto, dobbiamo creare un profilo, dicendo ad Apparmor che non vogliamo che mioprogramma possa accedere a /etc, ovvero dobbiamo negargli tutti i permessi (lettura, scrittura ed esecuzione).

sudo gedit /etc/apparmor.d/usr.bin.mioprogramma

dentro scriviamo:

#include <tunables/global>
/usr/bin/mioprogramma {
   #include <abstractions/base>
   deny /etc/ rwx,
}

ora diciamo ad Apparmor di caricare il profilo e confinare il programma:

sudo aa-enforce /usr/bin/miprogramma

controlliamo che in effetti sia caricato:

sudo aa-status

Alcuni programmi potrebbero essere segnalati in complain mode, il che significa che pure essendo presenti e caricati i profili, essi non sono attivi (ma possono essere resi attivi con aa-enforce), ma comunque AppArmor registrerà le eventuali violazioni della policy nel log di sistema, in modo che l’amministratore possa per lo meno accorgersi di eventuali problemi.

Adesso proviamo a vedere che succede con:

mioprogramma /etc/default/grub
mioprogramma: /etc/default/grub: Permesso negato

Non possiamo leggere in /etc… ma se proviamo come root?

sudo mioprogramma /etc/default/grub
mioprogramma: /etc/default/grub: Permesso negato

Nulla da fare. Neppure se eseguito da root il programma può leggere in /etc !

E’ semplice quindi capire che abbiamo in mano uno strumento potente, in grado di limitare ciò che ogni singolo programma può fare, su ogni singolo file o cartella, senza preoccuparci dei permessi e senza temere che l’esecuzione sotto root possa compromettere la sicurezza.

AppArmor è anche in grado di assegnare le capabilities e in generale di consentire o negare operazioni particolari a certi programmi e utenti.

AppArmor e Ubuntu

Prima di tutto, un paio di chicche:

  1. se installate il pacchetto apparmor-notify verrete avvisati con una notifica sul desktop di eventuali violazioni delle policy da parte di qualche programma;
  2. potete attivare la protezione di AppArmor su firefox con il comando:
    sudo aa-enforce /etc/apparmor.d/usr.bin.firefox (per disattivarla: sudo aa-disable /etc/apparmor.d/usr.bin.firefox). La cosa migliore però è mettere FF in complain mode, con il comando sudo aa-complain /etc/apparmor.d/usr.bin.firefox così verrete avvertiti di eventuali violazioni della policy (se avete installato aa-notify).

AppArmor non è attivo di default su tutti i programmi. I motivi sono principalmente due.

In primo luogo, non sempre è facile determinare cosa davvero può o non può fare un programma. Ad esempio, possiamo prevedere il comportamento di Firefox, ma che dire delle migliaia di suoi plugin? O, per fare un altro esempio, su Ubuntu 8.04 AppArmor impediva al server di stampa CUPS di salvare file fuori dalle sue directory, con il risultato che il plugin cups-pdf non funzionava correttamente in quanto doveva salvare il file PDF nella home dell’utente.

In secondo luogo, AppArmor per motivi intuibili degrada lievemente le prestazioni dei programmi poiché ogni operazione viene prima confrontata con il profilo associato all’eseguibile.

Per questo AppArmor è attivo su alcuni eseguibili particolarmente “pericolosi” come: CUPS (il server di stampa), OpenLDAP, MySQL, Bind, Clamav, il server e il client dhcp (il client è attivo di default su Ubuntu e serve all’auto-configurazione della rete), il lettore di file PDF Evince (ci sono moltissimi PDF infetti nella rete), il virtualizzatore qemu-kvm e la libreria libvirt. Inoltre AppArmor protegge la sessione ospite (guest). Ma ci sono anche tantissimi programmi  di cui vengono forniti i profili tramite il pacchetto apparmor-profiles e che eventualmente possono essere attivati da chi voglia rafforzare la sicurezza del sistema, ma conosce bene il funzionamento dei software che usa. Particolarmente utili i profili per Apache e Samba.

Facciamo un esempio. Vogliamo che Samba (cioè il programma che permette di condividere file in rete, anche con Windows) sia protetto da AppArmor ma contemporaneamente possa scrivere nelle cartelle che abbiamo condiviso in scrittura. Ecco come procedere:

Installiamo i profili aggiuntivi di AppArmor:

sudo apt-get install apparmor-profiles

Ora editiamo il profilo AppArmor del demone smbd

sudo gedit /etc/apparmor.d/usr.sbin.smbd

Dentro troviamo:

@{HOMEDIRS}/** lrwk,

che vuol dire che Samba ha pieno accesso a tutte le home directory degli utenti, dove normalmente si vuole condividere qualcosa. Ora, possiamo eliminare questa riga e sostituirla con una simile per ogni cartella condivisa, ad esempio:

/home/guido/cartella_condivisa_1/** lrwk, 
/home/guido/cartella_condivisa_2/** lrwk,

eccetera. I significati delle lettere sono: l=permette di usare collegamenti (link), r=lettura (Read), w=scrittura (Write), k=blocco (locKing) dei file.

Infine attiviamo AppArmor su Samba:

sudo aa-enforce /usr/sbin/smbd

Come vedete non è affatto comodo, ma si sa che sicurezza e comodità non vanno d’accordo.


  1. 21 maggio 2011 alle 19:43

    come al solito un articolo impeccabile e facile da seguire. grazie Guido!!!

  2. 21 maggio 2011 alle 19:50

    Guido, hai il dono della chiarezza e della semplicità.

  3. paciugOne
    21 maggio 2011 alle 21:58

    Guiodic, come ormai sai non avendo basi informatiche, faccio più fatica di altri a seguirti… vorrei sapere: attivando apparmor su firefox, quali azioni gli verranno inibite? e come mai non è già attivato di default?

    • 21 maggio 2011 alle 23:41

      ad esempio impedisce che Firefox installi dei plugin nelle directory di sistema. Questo non accade di norma perché Firefox non viene eseguito da root, ma magari qualche utente può farlo per sbaglio oppure una falla permette di diventare root ad un attaccante malintenzionato che poi cerca di installare in suo plugin malevolo.
      Si tratta di pure ipotesi, ma AppArmor serve proprio a questo, prevenire i rischi di falle di sicurezza sconosciute.
      Non è attivato di default per i motivi che ho detto in precedenza: ci sono plugin che per funzionare devono fare cose strane, tipo leggere e scrivere in certi posti che magari il profilo non autorizza. Siccome ci sono migliaia di plugin, è complicato testarli tutti per vedere se funzionano. Il profilo presente in Ubuntu, ad esempio, è testato per il plugin flash ma magari può dare problemi a quello di moonlight (è un esempio, tato per dire).

      • Regulus
        22 maggio 2011 alle 15:02

        Per es. non funziona il plugin DownloadHelper in firefox…😉

        • pierissimo
          30 maggio 2011 alle 2:20

          sicuramente perchè deve andare a leggere in /usr/bin/ffmpeg…
          Ma invece è possibile impostare AppArmor in modo tale da eseguire azioni al raggiungimento di un limite? Ad esempio voglio che una determinata applicazione non usi più di 1GB di ram, e che il sistema effettui una determinata azione(kill o stop ad esempio) se la condizione si verifica.
          Possibile?

  4. Yuri
    22 maggio 2011 alle 15:47

    I miei più sentiti complimenti per questa guida! era da tempo che volevo capirne di più su apparmor, ma non avevo ancora trovato prima di adesso un articolo che spiegasse in modo chiaro anche ai principianti.

    Grazie!!!

  5. 22 maggio 2011 alle 16:05

    Ho modificato la parte che riguardava Firefox, occorre dare al comando il path del profilo e non quello dell’eseguibile. E’ un caso particolare perché il vero eseguibile di Firefox cambia path ad ogni aggiornamento (su Ubuntu).

  6. iteand
    23 maggio 2011 alle 7:31

    decisamente fra i più chiari e scritti meglio (non del tuo blog, dove la chiarezza è sempre di casa, ma realmente in generale) articoli letti!

  7. shishimaru
    23 maggio 2011 alle 11:24

    Decisamente dovresti fare il professore universitario, togliendo di mezzo certe strane figure…😛

  8. 23 maggio 2011 alle 15:07

    complimenti…chiaro e semplice…

  9. aury88
    23 maggio 2011 alle 16:57

    grazie e complimenti guiodic anche da parte mia😉
    questo articolo mi sa me lo stampo🙂

  10. Danielsan
    23 maggio 2011 alle 18:08

    Belli questi articoli!
    Volevo chiederti se AppArmor può mettere un applicativo lanciato con Wine nelle condizioni di non “nuocere” all’interno della /home?

    • 23 maggio 2011 alle 20:23

      sì, ma poi che fai, gli impedisci di salvare i file dove ti serve?

      • Danielsan
        26 maggio 2011 alle 23:20

        In effetti…

  11. Scugnizzo
    24 maggio 2011 alle 8:39

    Intoniamo tutti insieme……Grazie Guido grazie..grazie Guido grazie……grazie Guido grazie graaaaaazieeeee.🙂

    Mi associo ai complimenti dei lettori che prima di me hanno commentato questo e gli altri articoli.
    Che Linux sarebbe senza guiodic?🙂

  12. paciugOne
    27 maggio 2011 alle 14:15

    La chiarezza è certamente un dono.
    Il tema della sicurezza suscita grande interesse e partecipazione.
    Uniamo queste due semplici constatazioni: hai mai pensato di usare le tue rare capacità espositive per fare una serie di articoli sul tema “hardening linux”?

  13. 1 giugno 2011 alle 13:48

    complimenti ottimo post😀

  14. Ettore
    14 aprile 2012 alle 12:47

    Ciao
    volevo sapere come aa-notify non c’è in oneric ?
    forse perchè intergrato in apparmor-notify??
    in eventuale come faccio in oneric ad abilitare al funzione FF in complain mode, senza aa-notify.
    nel ringraziarti
    E.V.

    • 14 aprile 2012 alle 21:47

      aa-notify non c’entra nulla con il resto, è solo un notificatore. Il pacchetto si chiama apparmor-notify.

  15. Ettore
    15 aprile 2012 alle 12:29

    Ciao, forse mi sono spiegato male per abiltare la protezione di di apparmor su firefox dici:

    potete attivare la protezione di AppArmor su firefox con il comando:
    sudo aa-enforce /etc/apparmor.d/usr.bin.firefox (per disattivarla: sudo aa-disable
    /etc/apparmor.d/usr.bin.firefox). La cosa migliore però è mettere FF in complain mode, con il comando sudo aa-complain /etc/apparmor.d/usr.bin.firefox così verrete avvertiti di eventuali violazioni della policy (se avete installato aa-notify).

    in oneric non c’è, ho installato apparmor-notify se do:
    sudo aa-complain /etc/apparmor.d/usr.bin.firefox
    venogo avvisato anche se non ho installato :
    aa-notify
    scusa per la mai testardaggine.
    Ciao

  16. 23 aprile 2013 alle 19:01

    As a Display on the site, you’ve got to be sharp and practice
    economy of language. Special day such as a token of thanks.

  17. 9 luglio 2013 alle 16:56

    The initial meal centered on a bottle does not require many years of training or
    copying what others have done in the way of
    aroma or flavor. Purchasing the wine goblets then make sure you will need is inexpensive wine glasses.

    Plus, only similar having access to Web online football games NFL football free.

  1. 6 dicembre 2011 alle 23:03

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger cliccano Mi Piace per questo: