#format wiki #LANGUAGE it <
> <> <> ##= Punti Chiave e Best Practice = ## * '''Astrazioni''': Utilizzare le astrazioni (`#include `) per semplificare i profili e riutilizzare set di regole comuni. = Introduzione = Questa guida fornisce una panoramica completa su '''!AppArmor''', spiegando cos'è e come funziona per migliorare la sicurezza del sistema. Illustra come verificare lo stato di '''!AppArmor''', installare gli strumenti di utilità necessari, e gestire i profili di sicurezza delle applicazioni: ciò include come cambiare le modalità dei profili (enforce/complain), creare nuovi profili utilizzando strumenti come `aa-genprof` e `aa-easyprof`, aggiornare quelli esistenti con `aa-logprof`, e interpretare i log per la risoluzione dei problemi. L'obiettivo è consentire agli utenti di confinare efficacemente le singole applicazioni, indipendentemente dall'utente che lo esegue, riducendo la superficie di attacco e limitandone le capacità, i potenziali danni in caso di compromissione. Se un'applicazione protetta da AppArmor viene compromessa, il profilo di AppArmor può impedire all'exploit di accedere o danneggiare altre parti del sistema. {{{#!wiki note Su Ubuntu, '''!AppArmor''' è installato e abilitato per impostazione predefinita, con profili attivi per diverse applicazioni critiche del sistema. }}} {{{#!wiki important '''!AppArmor''' è uno strumento potente per migliorare la sicurezza del sistema Ubuntu. Sebbene richieda un po' di apprendimento per la gestione avanzata dei profili, i suoi strumenti di utilità e la configurazione predefinita offrono già un buon livello di protezione. Investire tempo nella configurazione di profili per le applicazioni, specialmente quelle esposte alla rete o che gestiscono dati sensibili, può ridurre significativamente il rischio di compromissione. }}} = Installazione = È altamente improbabile che si debba installare manualmente '''!AppArmor''' su una versione di '''Ubuntu 22.04 LTS''' e successive, a meno che non si stia usando una build estremamente minimale o personalizzata, o che si abbia disinstallato esplicitamente i pacchetti. La procedura descritta è quella standard per installare questi componenti se mancano. Ecco i passaggi da seguire nel caso (molto raro) in cui non lo fosse o fosse stato rimosso: 0. [[AmministrazioneSistema/InstallareProgrammi/Apt#Aggiornamento_del_sistema|Aggiornare l'elenco dei pacchetti]]. È sempre una buona pratica aggiornare l'elenco dei pacchetti prima di installare nuovo software. 0. Installare i pacchetti di '''!AppArmor''', i suoi componenti principali e strumenti di utilità sono disponibili nei [[Repository#repository_ufficiali|repository ufficiali]] di '''Ubuntu'''. Digitare nel [[AmministrazioneSistema/Terminale|terminale]] il seguente comando:{{{ sudo apt install apparmor apparmor-utils apparmor-profiles apparmor-profiles-extra }}} Analizziamo questi pacchetti: ||<:-2> '''Pacchetto'''|| || [[apt://apparmor|apparmor]] || Pacchetto principale che fornisce il demone di AppArmor, le librerie e l'integrazione con il sistema. || || [[apt://apparmor-utils|apparmor-utils]] || Contiene gli strumenti da riga di comando per gestire AppArmor, come aa-status, aa-complain, aa-enforce, aa-genprof, aa-logprof, ecc. || || [[apt://apparmor-profiles|apparmor-profiles]] || Fornisce un set di profili di sicurezza predefiniti per molte applicazioni comuni. || || [[apt://apparmor-profiles-extra|apparmor-profiles-extra]] || Contiene profili aggiuntivi, spesso per applicazioni meno comuni o più specifiche. || == Verificare lo stato del servizio AppArmor == Dopo l'installazione, il [[AmministrazioneSistema/Systemd|servizio]] '''!AppArmor''' dovrebbe avviarsi automaticamente. Per verificarlo, digitare nel [[AmministrazioneSistema/Terminale|terminale]] il seguente comando:{{{ sudo systemctl status apparmor.service }}} {{{#!wiki note Lo stato `exited` è normale per `apparmor.service` perché il suo compito principale è caricare i profili nel kernel all'avvio e poi uscire; il kernel stesso poi gestisce l'enforcement. }}} Se per qualche motivo non fosse attivo, avviarlo e abilitarlo all'avvio, digitando nel [[AmministrazioneSistema/Terminale|terminale]] i seguenti comandi:{{{ sudo systemctl start apparmor.service sudo systemctl enable apparmor.service }}} == Verificare il funzionamento di AppArmor == Utilizzare il comando `aa-status` per vedere se '''!AppArmor''' è operativo e quali, quanti profili sono caricati, quanti sono in modalità enforce (applicazione), in modalità complain (segnalazione), e quali processi sono confinati. Digitare nel [[AmministrazioneSistema/Terminale|terminale]] il seguente comando:{{{ sudo aa-status }}} si dovrebbe vedere un output simile a questo (il numero di profili può variare):{{{ apparmor module is loaded. XX profiles are loaded. YY profiles are in enforce mode. ... (elenco dei profili in enforce mode) ... ZZ profiles are in complain mode. ... (elenco dei profili in complain mode) ... N processes have profiles defined. M processes are in enforce mode. O processes are in complain mode. P processes are unconfined but have a profile defined. }}} == Verificare il modulo LSM se è attivo nel kernel == Digitare nel [[AmministrazioneSistema/Terminale|terminale]] il seguente comando:{{{ cat /sys/kernel/security/lsm }}} dovrebbe apparire `apparmor` nella lista. == Comandi di Base == {{{#!wiki note Utilizzare `aa-genprof` e `aa-logprof`, questi strumenti semplificano notevolmente la creazione e la manutenzione dei profili. }}} == Verificare lo Stato di AppArmor == Come già visto, digitare nel [[AmministrazioneSistema/Terminale|terminale]] il comando:{{{ sudo aa-status }}} = Profili = Un profilo '''!AppArmor''' è un file di testo che definisce le risorse a cui un'applicazione può accedere (file, rete, capacità, ecc.) e le azioni che può compiere. I profili sono specifici per eseguibile. {{{#!wiki important Concedere solo i permessi strettamente necessari al funzionamento dell'applicazione. }}} == Dove si Trovano i Profili == I profili di AppArmor sono memorizzati in `/etc/apparmor.d/`.<
>I file disabilitati tramite `aa-disable` sono spesso gestiti tramite symlink o modifiche nel file di cache, ma `aa-disable` è il modo corretto per gestirli. == Modalità dei Profili == Un solo profilo '''!AppArmor''' può operare in diverse modalità: * '''Enforce (Applicazione)''': La modalità predefinita. '''!AppArmor''' blocca attivamente le azioni che violano le regole del profilo e registra i tentativi di violazione. * '''Complain (Segnalazione o Audit)''': '''!AppArmor''' non blocca le azioni che violano le regole, ma le registra. Questa modalità è utile per sviluppare e testare nuovi profili senza interrompere la funzionalità dell'applicazione. * '''Disabled (Disabilitato o Unloaded)''': Il profilo non è caricato nel kernel e non offre alcuna protezione per l'applicazione associata. === Cambiare la Modalità di un Profilo === {{{#!wiki important Prima di modifiche importanti, fare un backup dei profili in `/etc/apparmor.d/`. }}} * Mettere un profilo in modalità complain, digitare nel [[AmministrazioneSistema/Termnale|terminale]] il seguente comando:{{{ sudo aa-complain nome_profilo }}} come per esempio:{{{ sudo aa-complain /etc/apparmor.d/usr.sbin.cupsd }}} * Mettere un profilo in modalità enforce, digitare nel [[AmministrazioneSistema/Terminale|terminale]] il seguente comando:{{{ sudo aa-enforce nome_profilo }}} come per esempio:{{{ sudo aa-enforce /etc/apparmor.d/usr.sbin.cupsd }}} {{{#!wiki note Sostituire `nome_profilo` con il percorso completo del file del profilo (es. `/etc/apparmor.d/usr.bin.firefox`) o solo il nome del profilo come riportato da `[[#Verificare_lo_stato_di_AppArmor|aa-status]]`. }}} == Disabilitare un Profilo == Per rimuove il profilo dal kernel, disattivare la protezione per quella specifica applicazione. Digitare nel [[AmministrazioneSistema/Terminale|terminale]] il comando:{{{ sudo aa-disable nome_profilo }}} come per esempio:{{{ sudo aa-disable /etc/apparmor.d/usr.sbin.cupsd }}} Per riabilitarlo, usa aa-enforce o aa-complain. == Ricaricare tutti i Profili == Se è stato modificato manualmente un profilo o aggiunto nuovi profili, ricaricare il servizio AppArmor, digitando nel [[AmministrazioneSistema/Terminale|terminale]] il seguente comando:{{{ sudo systemctl reload apparmor.service }}} Oppure, per ricaricare un singolo profilo modificato:{{{ sudo apparmor_parser -r /etc/apparmor.d/nome_profilo }}} per esempio:{{{ sudo apparmor_parser -r /etc/apparmor.d/usr.bin.firefox }}} = Gestione dei Profili = == Creare un Nuovo Profilo (Semplificato) == {{{#!wiki important Evitare profili troppo generici. Più un profilo è specifico, maggiore è la sicurezza. }}} {{{#!wiki important Quando si crea o modifica significativamente un profilo, utilizzare la modalità ''complain'' per evitare di bloccare l'applicazione durante i test. }}} Lo strumento `aa-easyprof` crea un template di profilo base per un'applicazione. Digitare nel [[AmministrazioneSistema/Terminale|terminale]] il comandoi:{{{ sudo aa-easyprof /percorso/completo/eseguibile }}} come per esempio:{{{ sudo aa-easyprof /usr/local/bin/mioprogramma }}} creerà un file di profilo in `/etc/apparmor.d/` (es. `usr.local.bin.mioprogramma`) che si dovrebbe poi modificare e affinare. Dopo la creazione, mettirlo in modalità complain e utilizzare `aa-logprof` per affinarlo. {{{#!wiki note Dopo aver creato o modificato un profilo, testare a fondo l'applicazione per assicurarsi che tutte le funzionalità legittime siano permesse. }}} == Generare un Profilo (Interattivo) == `aa-genprof` è uno strumento interattivo che aiuta a creare un profilo analizzando il comportamento di un'applicazione. 0. Avviare `aa-genprof` per l'eseguibile desiderato, digitando nel [[AmministrazioneSistema/Terminale|terminale]] il seguente comando:{{{ sudo aa-genprof /percorso/completo/eseguibile }}} come per esempio:{{{ sudo aa-genprof /usr/bin/mycustomapp }}} 0. In un'altra [[AmministrazioneSistema/Terminale|riga di comando]], eseguire l'applicazione e utilizzare tutte le sue funzionalità da includere nel profilo. 0. Tornare al terminale di aa-genprof e premi S (Scan) per analizzare i log di sistema alla ricerca di eventi relativi all'applicazione. 0. `aa-genprof` chiederà di approvare (Allow), negare (Deny), ignorare (Ignore) o gestire diversamente ogni azione rilevata. 0. Quando è finito di testare e rispondere alle domande, premere sulla tastiera '''`F (Finish)`''' per salvare il profilo. Il profilo generato sarà inizialmente in modalità complain. È consigliabile testare ulteriormente e poi passarlo in modalità enforce. == Aggiornare un Profilo Esistente == `aa-logprof` analizza i log di sistema (principalmente messaggi di audit da profili in complain mode o violazioni da profili in enforce mode) e permette di aggiornare i profili esistenti. 0. Assicurarsi che il profilo da aggiornare sia in modalità complain o che l'applicazione stia generando violazioni registrate. 0. Eseguire, digitando nel [[AmministrazioneSistema/Terminale|terminale]] il seguente comando:{{{ sudo aa-logprof }}} 0. Similmente a `aa-genprof`, `aa-logprof` presenterà gli eventi registrati e chiederà come gestirli (Allow, Deny, Glob, ecc.) per aggiornare il profilo. == Modifica Manuale dei Profili == {{{#!wiki note Modificare i file di profilo direttamente con un [[Ufficio/EditorDiTesto|editor di testo]] (es. nano, vim).<
>La sintassi dei profili è potente ma può essere complessa. Consulta la documentazione ufficiale (man apparmor.d) per i dettagli. }}} === Struttura base di un profilo === {{{ #include /percorso/completo/eseguibile { #include # Regole specifiche capability net_bind_service, network tcp, /bin/ping mixr, /home/*/documenti r, /var/log/mioprogramma.log w, # Nega esplicitamente qualcosa deny /etc/shadow r, } }}} * `#include`: Importa file di astrazione o configurazioni globali. Le astrazioni (in /etc/apparmor.d/abstractions/) raggruppano regole comuni. * '''`/percorso/completo/eseguibile`''': Il path dell'eseguibile che questo profilo confina. * `capability`: Permessi a livello di kernel. * network: Permessi di rete. * r (read), w (write), x (execute), m (memory map executable), l (link), k (lock). * mixr: Permette l'esecuzione di un altro programma sotto il profilo del programma figlio, se esiste, altrimenti eredita il profilo corrente. Dopo aver modificato un profilo, ricaricarlo:{{{ sudo apparmor_parser -r /etc/apparmor.d/nome_del_profilo_modificato }}} Oppure ricaricare tutto '''!AppArmor''':{{{ sudo systemctl reload apparmor.service }}} = Risoluzione problemi = == Riavvio (Opzionale ma consigliato) == Anche se il [[AmministrazioneSistema/Systemd|servizio]] '''!AppArmor''' carica i profili, un riavvio del sistema può garantire che tutti i componenti, incluso il modulo del kernel, siano correttamente inizializzati e che le applicazioni lanciate all'avvio siano immediatamente confinate dai profili disponibili. Digitare nel [[AmministrazioneSistema/Terminale|terminale]] il seguente comando:{{{ sudo reboot }}} Dopo il riavvio, verificare nuovamente con il comando:{{{ sudo aa-status }}} == Visualizzazione dei Log == Quando un'applicazione non funziona come previsto, una delle prime cose da fare è controllare se '''!AppArmor''' sta bloccando qualcosa. Mettere temporaneamente il profilo dell'applicazione in modalità ''complain'' e verificare i log, digitare nel [[AmministrazioneSistema/Terminale|terminale]] il comando:{{{ sudo aa-complain /etc/apparmor.d/profilo_problematico }}} esegui l'applicazione e riproduci il problema. {{{ sudo aa-logprof }}} per vedere se ci sono nuove voci da aggiungere al profilo I messaggi di '''!AppArmor''' (violazioni, audit) sono generalmente inviati al log del kernel e/o al demone di audit. * Visualizzare i log del kernel (dmesg), digitare nel [[AmministrazioneSistema/Terminale|terminale]]:{{{ sudo dmesg | grep -i apparmor }}} * Visualizzare i log tramite journalctl, digitare nel [[AmministrazioneSistema/Terminale|terminale]]: * '''Messaggi del kernel''':{{{ sudo journalctl -k | grep -i apparmor }}} * '''Messaggi di audit più generali''':{{{ sudo journalctl | grep -i audit }}} * '''Tutti i messaggi correlati''':{{{ sudo journalctl | grep -i apparmor }}} * '''Log di Auditd''': Se `auditd` è installato e configurato, i log potrebbero trovarsi in `/var/log/audit/audit.log`. ---- CategoryHomepage CategoryNuoviDocumenti