3.5. Due metodi di definizione di un profilo

Con la sintassi per i profili Novell AppArmor specificata nella Sezione 3.1, "Componenti e sintassi di un profilo" (↑Guida all'amministrazione di Novell AppArmor 2.0), è possibile creare un profilo senza l'utilizzo di alcuno strumento. Tuttavia, questa procedura richiede un notevole impegno. Per evitare queste complicazioni, è possibile utilizzare gli strumenti Novell AppArmor che automatizzano la creazione e l'ottimizzazione dei profili.

Sono disponibili due tipi di approcci per la creazione dei profili Novell AppArmor, insieme a strumenti che supportano entrambi questi approcci.

Strumento di definizione dei profili indipendente

Metodo adatto per la definizione dei profili delle piccole applicazioni che dispongono di un tempo di esecuzione finito come ad esempio le applicazioni client utente, quali i client di posta. Per ulteriori informazioni, vedere la Sezione 3.5.1, "Strumento di definizione dei profili indipendente" (↑Guida all'amministrazione di Novell AppArmor 2.0).

Definizione dei profili di sistema

Metodo adatto per definizione di profili di numerosi programmi contemporaneamente e per la definizione dei profili di applicazioni che possono venire eseguite per giorni, settimane oppure continuamente mediante riavvii, come ad esempio applicazioni di server di rete, quali server Web e di posta. Per ulteriori informazioni, fare riferimento a Sezione 3.5.2, "Definizione dei profili di sistema" (↑Guida all'amministrazione di Novell AppArmor 2.0).

Lo sviluppo automatico dei profili può essere gestito più facilmente con gli strumenti Novell AppArmor:

  1. Individuare il metodo di definizione dei profili più adatto alle proprie esigenze.

  2. Eseguire un'analisi statica. Eseguire genprof o autodep, a seconda del metodo di definizione profili selezionato.

  3. Abilita apprendimento dinamico. Attivare la modalità learning per tutti i programmi con profili.

3.5.1. Strumento di definizione dei profili indipendente

Le operazioni di generazione e miglioramento di profili indipendenti sono gestite dal programma genprof. Questo metodo è molto semplice, genprof si occupa di tutto. Tuttavia è limitato perché richiede l'esecuzione di genprof per l'intera durata del test del programma (non è possibile riavviare il computer quando è in corso lo sviluppo del profilo).

Per utilizzare genprof per il metodo di definizione profili indipendente, vedere la Sezione 3.5.3.4, "genprof" (↑Guida all'amministrazione di Novell AppArmor 2.0).

3.5.2. Definizione dei profili di sistema

Questo metodo viene chiamato definizione profili di sistema perché aggiorna contemporaneamente tutti i profili presenti sul sistema anzichè solo uno oppure i pochi contrassegnati da genprof o dal sistema di definizione profili indipendente.

Con la definizione dei profili di sistema, la creazione e l'ottimizzazione dei profili è meno automatizzata ma più flessibile. Questo metodo è indicato per la definizione dei profili di applicazioni a lunga esecuzione il cui comportamento continua dopo il riavvio oppure per la definizione di numerosi profili di programmi contemporaneamente.

Per creare un profilo Novell AppArmor per un gruppo di applicazioni, eseguire le operazioni riportate di seguito.

  1. Creazione di profili per i singoli programmi che costituiscono l'applicazione.  Benché questo rappresenti un metodo basato sul sistema, Novell AppArmor controlla solo i programmi con profili e i relativi figli. Pertanto, per fare in modo che Novell AppArmor consideri un programma, è necessario che autodep crei almeno un profilo approssimativo per esso. Per creare questo profilo approssimativo, vedere la Sezione 3.5.3.1, "autodep" (↑Guida all'amministrazione di Novell AppArmor 2.0).

  2. Per i profili pertinenti attivare la modalità learning o complain.  Per attivare la modalità learning o complain per tutti i programmi con profili, immettere complain /etc/apparmor.d/* in una finestra terminale mentre si è collegati come utente root.

    In modalità learning le richieste di accesso non vengono bloccate nemmeno se richiesto dal profilo. Ciò consente di eseguire numerosi test (come illustrato in Passo 3 (↑Guida all'amministrazione di Novell AppArmor 2.0)) e di apprendere le esigenze di accesso del programma per garantirne il corretto funzionamento. Queste informazioni consentono di stabilire il livello di sicurezza per il profilo.

    Per informazioni dettagliate sull'utilizzo delle modalità learning e complain, vedere la Sezione 3.5.3.2, "Modalità Complain o Learning" (↑Guida all'amministrazione di Novell AppArmor 2.0).

  3. Uso dell'applicazione.  Eseguire l'applicazione e acquisire familiarità con le funzioni. È possibile esercitarsi a piacere, tuttavia è necessario che il programma acceda a ogni file che ne rappresenta le esigenze di accesso. L'esecuzione non è controllata da genprof, pertanto questa operazione può durare giorni o settimane e richiedere diversi riavvii del computer.

  4. Analisi del registro.  Durante la definizione di profili di sistema eseguire logprof direttamente anzichè tramite genprof (come per la definizione dei profili indipendente). La struttura generica di logprof è:

    logprof [ -d /path/to/profiles ] [ -f /path/to/logfile ]

    Per ulteriori informazioni sull'utilizzo di logprof, vedere laSezione 3.5.3.5, "logprof" (↑Guida all'amministrazione di Novell AppArmor 2.0).

  5. Ripetere i passaggi 3 e 4.  Ciò consente di generare ottimi profili. Un approccio iterativo permette di catturare gruppi di dati più piccoli che è possibile elaborare e ricaricare nel motore delle norme. Le iterazioni successive generano un minor numero di messaggi e vengono eseguite più velocemente.

  6. Modifica di profili.  Può essere opportuno rivedere i profili generati. È possibile aprire e modificare i profili disponibili in /etc/apparmor.d/ mediante vim. Per assistenza sull'utilizzo di tutte le potenzialità di vim, vedere la Sezione 3.5.3.8, "apparmor.vim" (↑Guida all'amministrazione di Novell AppArmor 2.0).

  7. Ripristino della modalità "enforce".  In questo caso il sistema torna ad applicare le regole dei profili oltre che a registrare le informazioni. È possibile eseguire questa operazione manualmente mediante la rimozione del testo flags=(complain) dai profili, oppure automaticamente mediante l'utilizzo del comando enforce, che si comporta come il comando complain ma attiva per i profili la modalità enforce.

    Per garantire che tutti i profili siano in modalità enforce, e non complain, immettere enforce /etc/apparmor.d/*.

  8. Ripetizione dell'analisi di tutti i profili.  Per fare in modo che Novell AppArmor analizzi di nuovo tutti i profili e modifichi la modalità enforce nel kernel, immettere /etc/init.d/apparmor restart.

3.5.3. Riepilogo degli strumenti di definizione profili

Tutti gli strumenti di definizione profili di Novell AppArmor sono inclusi nel pacchetto RPM apparmor-utils e la maggior parte di essi è archiviata in /usr/sbin. Nelle sezioni seguenti vengono illustrati tutti questi strumenti.

3.5.3.1. autodep

Consente di creare un profilo approssimativo per il programma o l'applicazione in corso di autodep. È possibile generare profili approssimativi per i file eseguibili in formato binario e per gli script interpretati. Il profilo finale viene chiamato "approssimativo" perché può non contenere tutte le voci di profilo necessarie al programma per poter essere limitato da Novell AppArmor. Il profilo approssimativo autodep minimo include almeno una direttiva include di base, la quale contiene le voci di profilo essenziali per quasi tutti i programmi. Per alcuni tipi di programmi, autodep genera un profilo più grande. Il profilo viene generato chiamando ripetutamente ldd(1) nei file eseguibili visualizzati nella riga di comando.

Per generare un profilo approssimativo, utilizzare il programma autodep. L'argomento del programma può essere rappresentato da un semplice nome di programma, che autodep individua tramite la ricerca della variabile del percorso della shell, oppure da un percorso completo. Lo stesso programma può essere di qualsiasi tipo (ELF binario, script shell, script Perl ecc...). autodep genera un file approssimativo da ottimizzare mediante la definizione dinamica dei profili seguente.

Il profilo approssimativo finale viene salvato nella directory /etc/apparmor.d utilizzando la convezione di denominazione dei profili di Novell AppArmor la quale inserisce il nome del profilo dopo il percorso assoluto del programma, sostituendo i caratteri barra (/) presenti nel percorso con i caratteri punto (.). Generalmente per autodep è necessario immettere le informazioni riportate di seguito in una finestra terminale mentre si è collegati come utente root:

autodep [ -d /path/to/profiles ] [programma1 programma2...]

Se non si specifica il nome del programma o i nomi dei programmi, verrà chiesto di immetterli. /path/to/profiles ignora il percorso predefinito /etc/apparmor.d.

Per iniziare a definire un profilo, è necessario creare i profili per ciascun servizio eseguibile principale appartenente all'applicazione (tutto ciò che è possibile avviare purché non sia figlio di un altro programma che contiene già un profilo). L'individuazione di tutti questi programmi dipende dall'applicazione corrente. Di seguito vengono illustrate numerose strategie per l'individuazione di questi programmi.

Directory

Se tutti i programmi di cui si desidera creare i profili sono inclusi in una directory che non ne contiene altri, è sufficiente il comando autodep /path/to/your/programs/* per creare profili nominali per tali programmi.

comando ps

È possibile eseguire l'applicazione e utilizzare il comando ps standard di Linux per individuare tutti i processi in esecuzione. È quindi necessario individuare manualmente i percorsi di questi programmi ed eseguire autodep per ciascuno di essi. Se i programmi sono inclusi nel percorso, autodep li trova automaticamente. Se invece non sono inclusi nel percorso, può essere opportuno utilizzare il comando locate standard di Linux per individuarli. Se il comando locate non funziona (non viene installato per impostazione predefinita in SUSE Linux), utilizzare find . -name '*foo*' -print.

3.5.3.2. Modalità Complain o Learning

Lo strumento modalità complain o learning consente di rilevare le violazioni alle regole dei profili Novell AppArmor, come ad esempio l'accesso di un programma con profilo a file non consentiti dal profilo. Le violazioni sono consentite ma vengono anche registrate. Per ottimizzare il profilo, attivare la modalità complain, eseguire una serie di test nel programma in modo generare eventi di registro che definiscano le esigenze di accesso del programma, quindi rielaborare il registro con gli strumenti Novell AppArmor per trasformare gli eventi di registro in profili migliorati.

L'attivazione manuale della modalità complain dalla riga di comando comporta l'aggiunta di un flag all'inizio del profilo in modo che /bin/foo diventi /bin/foo flags=(complain). Per utilizzare la modalità complain, aprire una finestra terminale e immettere una delle righe seguenti come utente root.

  • Se il programma di esempio (programma1) è incluso nel percorso, utilizzare:

    complain [programma1 programma2 ...]
  • Se invece il programma non è incluso nel percorso, specificare l'intero percorso come illustrato di seguito:

    complain /sbin/programma1 
  • Se i profili non sono inclusi in /etc/apparmor.d, immettere i dati seguenti per ignorare il percorso predefinito:

    complain /path/to/profiles/ programma1 
  • Specificare il profilo per il programma1 come illustrato di seguito.

    complain /etc/apparmor.d/sbin.programma1

Ciascuno dei comandi illustrati attiva la modalità complain per i profili e/o i programmi elencati. Il comando può visualizzare programmi o profili. Se il nome del programma non include l'intero percorso, la modalità cerca $PATH nel programma. Ad esempio complain /usr/sbin/* trova i profili associati a tutti i programmi inclusi in /usr/sbin e ne attiva la modalità complain, mentre complain /etc/apparmor.d/* imposta tutti i profili inclusi /etc/apparmor.d sulla modalità complain.

3.5.3.3. Modalità Enforce

Lo strumento modalità enforce consente di rilevare le violazioni alle regole dei profili Novell AppArmor, come ad esempio l'accesso di un programma con profilo a file non consentiti dal profilo. Le violazioni vengono registrate e non consentite. Per impostazione predefinita viene attivata la modalità enforce. Attivare la modalità complain quando si desidera che i profili Novell AppArmor controllino l'accesso del programma di cui è stato definito il profilo. Enforce si alterna alla modalità complain.

L'attivazione manuale della modalità enforce dalla riga di comando comporta l'aggiunta di un flag all'inizio del profilo in modo che /bin/foo diventi /bin/foo flags=(enforce). Per utilizzare la modalità enforce, aprire una finestra terminale e immettere una delle righe seguenti come utente root.

  • Se il programma di esempio (programma1) è incluso nel percorso, utilizzare:

    enforce [programma1 programma2 ...]
  • Se invece il programma non è incluso nel percorso, specificare l'intero percorso come illustrato di seguito:

    enforce /sbin/programma1 
  • Se i profili non sono inclusi in /etc/apparmor.d, immettere i dati seguenti per ignorare il percorso predefinito:

    enforce /path/to/profiles/ programma1 
  • Specificare il profilo per il programma1 come illustrato di seguito.

    enforce /etc/apparmor.d/sbin.programma1

Ciascuno dei comandi illustrati attiva la modalità enforce per i profili e/o i programmi elencati.

Se non si specificano i nomi dei programmi o dei profili, verrà chiesto di immetterli. /path/to/profiles ignora il percorso predefinito /etc/apparmor.d.

L'argomento può essere rappresentato da un elenco di programmi o di profili. Se il nome del programma non include l'intero percorso, la modalità cerca $PATH nel programma. Ad esempio enforce /usr/sbin/* trova i profili associati a tutti i programmi inclusi in /usr/sbin e ne attiva la modalità enforce, mentre enforce /etc/subdomain.d/* imposta tutti i profili inclusi in /etc/apparmor.d sulla modalità enforce.

3.5.3.4. genprof

genprof (o Genera profilo) è l'utility di generazione dei profili di Novell AppArmor. Esegue autodep sul programma specificato creando un profilo approssimativo (se il profilo non esiste già), lo imposta sulla modalità complain, lo ricarica in Novell AppArmor, contrassegna il syslog, quindi chiede all'utente di eseguire il programma e apprenderne le funzionalità. La sintassi è la seguente:

genprof [ -d /path/to/profiles ]  programma

Per creare un profilo per il programma httpd2-prefork del server Web Apache, eseguire le operazioni riportate di seguito in una shell radice.

  1. Immettere rcapache2 stop.

  2. Quindi, immettere genprof httpd2-prefork.

    genprof eseguirà le operazioni riportate di seguito.

    • Risolve il percorso completo di httpd2-prefork in base alle variabili del percorso della shell. È anche possibile specificare un percorso completo. In SUSE Linux il percorso completo è /usr/sbin/httpd2-prefork.

    • Verifica se esiste un profilo per httpd2-prefork. Se il profilo esiste, lo aggiorna. Se non esiste, ne crea uno con il programma autodep illustrato nella Sezione 3.5.3, "Riepilogo degli strumenti di definizione profili" (↑Guida all'amministrazione di Novell AppArmor 2.0).

      [Note]Nota

      Esiste una convenzione per i nomi che collega il percorso completo di un programma al nome file del proprio profilo in modo che i vari strumenti di definizione dei profili di Novell AppArmor possano gestirli in maniera coerente. La convenzione consiste nel sostituire la barra (/) con il punto (.) di modo che il profilo di /usr/sbin/httpd2-prefork venga archiviato in /etc/apparmor.d/usr.sbin.httpd2-prefork.

    • Impostare il profilo di questo programma sulla modalità learning o complain in modo che le violazioni al profilo vengano registrate ma consentite. Di seguito è illustrato un esempio di evento di registrazione:

      Oct  9 15:40:31 AppArmor: PERMITTING r access to /etc/apache2/httpd.conf (httpd2-prefork(6068) profile /usr/sbin/httpd2-prefork active /usr/sbin/httpd2-prefork)
    • Contrassegna syslog con un marker iniziale di eventi di registrazione da tenere in considerazione. Esempio:

       Sett 13 17:48:52 h2o root: GenProf: e2ff78636296f16d0b5301209a04430d
  3. Quando viene richiesto dallo strumento, eseguire l'applicazione di cui si desidera creare il profilo in un'altra finestra terminale, quindi eseguire il maggior numero possibile di funzioni dell'applicazione per consentire alla modalità learning di registrare i file e le directory a cui il programma richiede di accedere per un corretto funzionamento. Ad esempio, immettere rcapache2 start in una nuova finestra terminale.

  4. Tra le opzioni riportate di seguito scegliere quella che è possibile utilizzare dopo l'esecuzione delle funzionalità del programma.

    • S esegue logprof nel registro del sistema dal punto in cui è stato contrassegnato all'avvio di genprof, quindi ricarica il profilo.

      Se gli eventi del sistema sono inclusi nel registro, Novell AppArmor analizza i file di registro della modalità learning. Verranno visualizzate delle domande a cui è necessario rispondere e che guidano genprof durante il processo di creazione del profilo di sicurezza.

    • F esce dallo strumento e torna al menu principale.

  5. Risposta a due tipi di domande:

    Ciascuna di queste categorie genera una serie di domande alle quali è necessario rispondere per poter aggiungere la risorsa o il programma al profilo. Le due figure illustrate di seguito rappresentano un esempio di ciascuna categoria. Nei paragrafi seguenti verranno illustrate le possibili risposte a queste domande.

    Esempio 3.1. Eccezione della modalità learning: Controllo degli accessi a risorse specifiche

    Lettura delle voci di registro da /var/log/messages.
    Aggiornamento di profili apparmor in /etc/apparmor.d.
    
    Profilo: /usr/sbin/xinetd
    Execute: /usr/sbin/vsftpd
    
    [(I)nherit] / (P)rofile / (U)nconfined / (D)eny / Abo(r)t / (F)inish)
    

    La gestione degli accessi in esecuzione è complessa. È necessario stabilire quale dei tre tipi di autorizzazioni di esecuzione consentire al programma:

    inherit (ix)

    Il figlio eredita il profilo del padre eseguendo gli stessi controlli di accesso del padre. Questa modalità è utile quando un programma limitato deve chiamarne un altro senza ottenere le autorizzazioni del profilo di destinazione né perdere quelle del profilo corrente. Viene spesso utilizzata quando il programma figlio è costituito da un'applicazione helper, quale il client /usr/bin/mail che utilizza un programma quale un pager o il browser Mozilla che usa il programma Acrobat per visualizzare i file PDF.

    profile (px)

    Il figlio viene eseguito con il proprio profilo, il quale deve essere caricato nel kernel. Se il profilo non è presente, i tentativi di esecuzione del figlio falliscono con l'autorizzazione negata. Questa modalità è utile quando il programma padre chiama un servizio globale, ad esempio ricerche DNS, o invia posta mediante il servizio MTA del sistema.

    unconfined (ux)

    Il figlio viene eseguito non limitato senza alcun profilo Novell AppArmor applicato alla risorsa eseguita.

    Esempio 3.2. Eccezione della modalità learning: Definizione di autorizzazioni di esecuzione per una voce

    Aggiunta di /bin/ps ix al profilo.
    
    Profilo:  /usr/sbin/xinetd
    Path:     /etc/hosts.allow
    New Mode: r
    
     [1 - /etc/hosts.allow]
    
    [(A)llow] / (D)eny / (N)ew / (G)lob / Glob w/(E)xt / Abo(r)t / (F)inish
    

    Nel menu in alto viene appena illustrato Novell AppArmor che indica le voci dei percorsi di directory aperte dall'applicazione di cui è in corso la definizione del profilo. Può anche essere necessario definire le autorizzazioni di esecuzione per le voci.

    Novell AppArmor fornisce uno o più nomi di percorso o include. Fare clic sul numero dell'opzione, selezionare una o più opzioni seguenti, quindi passare all'operazione successiva.

    [Note]Nota

    Non tutte le opzioni sono sempre disponibili nel menu Novell AppArmor.

    #include

    Questa sezione di profilo Novell AppArmor fa riferimento a un file include che ottiene le autorizzazioni di accesso per i programmi. L'utilizzo di un'istruzione Include consente al programma di accedere ai percorsi o ai file di directory richiesti da altri programmi. Le istruzioni Include consentono inoltre di ridurre le dimensioni di un profilo. Si consiglia di selezionare i file include quando suggerito.

    Versione Glob

    Accessibile quando si fa clic su Glob come illustrato nel passaggio successivo. Per informazioni sulla sintassi di glob, vedere la Sezione 3.6, "Nomi di percorsi e glob" (↑Guida all'amministrazione di Novell AppArmor 2.0).

    Nome effettivo del percorso

    Rappresenta il percorso reale a cui il programma deve accedere per una corretta esecuzione.

  6. Dopo aver selezionato il nome del percorso o il file include, è necessario elaborarlo come voce nel profilo di Novell AppArmor facendo clic su Consenti o Nega. Se non si è soddisfatti del tipo di visualizzazione della voce del percorso di directory, è possibile selezionare Glob o Modifica.

    Per l'elaborazione delle voci della modalità learning e la creazione dei profili sono disponibili le opzioni riportate di seguito.

    Premere Invio

    Consente l'accesso al percorso di directory selezionato.

    Consenti

    Consente l'accesso al percorso di directory selezionato. Novell AppArmor indica l'accesso alle autorizzazioni per il file. Per ulteriori informazioni, vedere la Sezione 3.7, "Modalità di accesso autorizzazioni file" (↑Guida all'amministrazione di Novell AppArmor 2.0).

    Nega

    Impedisce al programma di accedere alle voci del percorso di directory specificate. Novell AppArmor passa quindi all'evento successivo.

    Nuovo

    Chiede di immettere la propria regola per l'evento. Supporta qualsiasi tipo di espressione regolare. Se l'espressione immessa non soddisfa l'evento che ha visualizzato per primo la domanda, verrà chiesto di confermare l'espressione oppure di reimmetterla.

    Glob

    Selezionare questa opzione per modificare il percorso della directory (mediante l'utilizzo dei caratteri jolly) in modo da includere tutti i file nella directory di voci specificata. Fare doppio clic su questa voce per consentire l'accesso a tutti i file e le sottodirectory nei livelli sottostanti a quella visualizzati.

    Per ulteriori informazioni sulla sintassi di glob, vedere la Sezione 3.6, "Nomi di percorsi e glob" (↑Guida all'amministrazione di Novell AppArmor 2.0).

    Glob w/Ext

    Consente di modificare il percorso di directory originale conservando l'estensione del nome del file. Ad esempio /etc/apache2/file.ext diventa /etc/apache2/*.ext, ovvero viene inserito il carattere jolly (asterisco) al posto del nome del file. Ciò consente al programma di accedere a tutti i file nella directory consigliata che terminano con l'estensione .ext. Fare doppio clic su questa voce per consentire l'accesso a tutti i file (che presentano l'estensione specificata) e le sottodirectory nei livelli sottostanti a quella visualizzata.

    Modifica

    Consente di modificare la riga selezionata. La nuova riga modificata viene visualizzata in fondo all'elenco.

    Interrompi

    Interrompe logprof, eliminando tutte le modifiche apportate alle regole specificate e lasciando tutti i profili invariati.

    Fine

    Chiude logprof, salvando tutte le modifiche apportate alle regole specificate e modificando tutti i profili.

  7. Per visualizzare e modificare il profilo con vim, immettere vim /etc/apparmor.d/nome profilo in una finestra terminale. Per abilitare la colorazione della sintassi quando si modifica un profilo Novell AppArmor in vim, utilizzare i comandi :syntax on, quindi :set syntax=apparmor. Per ulteriori informazioni su vim e la colorazione della sintassi, vedere la Sezione 3.5.3.8, "apparmor.vim" (↑Guida all'amministrazione di Novell AppArmor 2.0).

3.5.3.5. logprof

logprof è uno strumento interattivo utilizzato per la revisione dei risultati della modalità learning o complain nelle voci syslog nonché per generare nuove voci nei profili di sicurezza di Novell AppArmor.

Una volta avviato, logprof inizia ad analizzare i file di registro generati in modalità learning o complain, quindi, se individua nuovi eventi di sicurezza non inclusi nel gruppo di profili esistenti, suggerisce di modificare il profilo. La modalità learning o complain tiene traccia del comportamento del programma, quindi registra i risultati in syslog. logprof utilizza queste informazioni per analizzare il comportamento del programma.

Se un programma limitato effettua il forking ed esegue un altro programma, logprof rileva queste operazioni e chiede all'utente la modalità di esecuzione che desidera attivare all'avvio del programma figlio. Per l'avvio del programma figlio sono disponibili le opzioni riportate di seguito. ix, px e ux. Se per il processo figlio esiste un profilo separato, l'impostazione predefinita è px. Se invece non esiste alcun profilo, l'impostazione predefinita è ix. Nei processi figli con profili separati viene eseguito autodep. I processi vengono quindi caricati in Novell AppArmor se in esecuzione.

Se logprof esiste, i processi vengono aggiornati con le modifiche apportate. Se il modulo AppArmor è in esecuzione, vengono caricati i profili aggiornati. Se eventuali processi che hanno generato gli eventi di sicurezza sono ancora in esecuzione nel profilo in modalità complain con valore nullo, tali processi vengono impostati per essere eseguiti nei profili appropriati.

Per eseguire logprof, immettere logprof in una finestra terminale mentre si è collegati come utente root. Per logprof è anche possibile utilizzare le opzioni riportate di seguito.

logprof -d /path/to/profile/directory/

Specifica il percorso completo per i profili non inclusi nella directory standard /etc/apparmor.d/.

logprof -f /path/to/logfile/

Specifica il percorso completo per il file di registro non contenuto nella directory predefinita /var/log/messages.

logprof -m "string marker in logfile"

Contrassegna il punto da cui logprof deve iniziare a esaminare gli eventi nel registro di sistema. Tutti gli eventi nel registro di sistema precedenti al contrassegno specificato verranno ignorati. Se il marker contiene degli spazi, racchiuderlo tra virgolette per consentirne il corretto funzionamento. Esempio: logprof -m e2ff78636296f16d0b5301209a04430d.

logprof analizza il registro e chiede se si desidera elaborare tutti gli eventi registrati. Ogni domanda presenta un elenco numerato di regole Novell AppArmor che è possibile aggiungere mediante la pressione del numero della voce nell'elenco.

Per impostazione predefinita, logprof cerca i profili in /etc/apparmor.d/ e analizza il registro in /var/log/messages. Pertanto, in molti casi, l'esecuzione di logprof come root è sufficiente per la creazione del profilo.

Tuttavia, a volte può essere necessario effettuare la ricerca nei file di registro, ad esempio se il periodo di esercitazione del programma supera la finestra di rotazione del registro (quando il file di registro viene archiviato e ne viene avviato uno nuovo). In questo caso, è possibile immettere zcat -f `ls -1tr /var/log/messages*` | logprof -f -.

3.5.3.6. logprof Esempio 1

Di seguito è riportato un esempio di come logprof indirizzi httpd2-prefork ad accedere al file /etc/group Nell'esempio [] indica un'opzione predefinita.

Nell'esempio, l'accesso a /etc/group fa parte di httpd2-prefork che accede ai servizi di nomi. La risposta appropriata è 1, poiché estrae una serie predefinita di regole Novell AppArmor. Se si seleziona 1 in #include, il pacchetto dei servizi dei nomi risolve tutte le domande future relative alle ricerche DNS e, inoltre, rende il pacchetto meno fragile perché tutte le modifiche alla configurazione DNS e al pacchetto associato dei profili dei servizi dei nomi potranno essere apportate solo una volta evitando di dover modificare molti profili.

Profile:  /usr/sbin/httpd2-prefork
Path:     /etc/group
New Mode: r

[1 - #include <abstractions/nameservice>]
 2 - /etc/group
[(A)llow] / (D)eny / (N)ew / (G)lob / Glob w/(E)xt / Abo(r)t / (F)inish

Selezionare una delle risposte riportate di seguito.

Premere Invio

Consente l'accesso al percorso di directory selezionato.

Consenti

Consente l'accesso al percorso di directory selezionato. Novell AppArmor indica l'accesso alle autorizzazioni per il file. Per ulteriori informazioni su questo argomento, vedere la Sezione 3.7, "Modalità di accesso autorizzazioni file" (↑Guida all'amministrazione di Novell AppArmor 2.0).

Nega

Impedisce al programma di accedere alle voci del percorso di directory specificate. Novell AppArmor passa quindi all'evento successivo.

Nuovo

Chiede di immettere la propria regola per l'evento. Supporta qualsiasi tipo di espressione regolare. Se l'espressione immessa non soddisfa l'evento che ha visualizzato per primo la domanda, verrà chiesto di confermare l'espressione oppure di reimmetterla.

Glob

Selezionare questa opzione per modificare il percorso della directory (mediante l'utilizzo dei caratteri jolly) in modo da includere tutti i file nella directory di voci specificata. Fare doppio clic su questa voce per consentire l'accesso a tutti i file e le sottodirectory nei livelli sottostanti a quella visualizzati.

Per informazioni sulla sintassi di glob, vedere la Sezione 3.6, "Nomi di percorsi e glob" (↑Guida all'amministrazione di Novell AppArmor 2.0).

Glob w/Ext

Consente di modificare il percorso di directory originale conservando l'estensione del nome del file. Ad esempio /etc/apache2/file.ext diventa /etc/apache2/*.ext, ovvero viene inserito il carattere jolly (asterisco) al posto del nome del file. Ciò consente al programma di accedere a tutti i file nella directory consigliata che terminano con l'estensione .ext. Fare doppio clic su questa voce per consentire l'accesso a tutti i file (che presentano l'estensione specificata) e le sottodirectory nei livelli sottostanti a quella visualizzata.

Modifica

Consente di modificare la riga selezionata. La nuova riga modificata viene visualizzata in fondo all'elenco.

Interrompi

Interrompe logprof, eliminando tutte le modifiche apportate alle regole specificate e lasciando tutti i profili invariati.

Fine

Chiude logprof, salvando tutte le modifiche apportate alle regole specificate e modificando tutti i profili.

3.5.3.7. logprof Esempio 2

In un esempio di definizione di profilo vsftpd, viene visualizzata la domanda seguente:

Profile:  /usr/sbin/vsftpd
Path:     /y2k.jpg
New Mode: r

[1 - /y2k.jpg]

(A)llow / [(D)eny] / (N)ew / (G)lob / Glob w/(E)xt / Abo(r)t / (F)inish

Questa domanda include molti elementi interessanti. Si noti innanzitutto che vsftpd chiede una voce di percorso all'inizio della struttura, anche se per impostazione predefinita in SUSE Linux vsftpd serve i file FTP di /srv/ftp. Questo perché httpd2-prefork utilizza chroot e la porzione di codice all'interno di chroot jail. Novell AppArmor controlla se il file accede ai termini dell'ambiente anziché al percorso globale assoluto.

Il secondo elemento interessante consiste nel fatto che può essere opportuno consentire l'accesso FTP in lettura a tutti i file JPEG inclusi nella directory. A questo scopo, è possibile utilizzare Glob w/Ext e il percorso consigliato /*.jpg. Questa operazione invalida tutte le precedenti regole di concessione di accesso a singoli file .jpg e previene tutte le domande future relative all'accesso ai file .jpg.

Infine, può essere opportuno consentire un accesso più generico ai file FTP. Se si seleziona Glob nell'ultima voce, logprof sostituisce il percorso consigliato /y2k.jpg con /*. Oppure, può essere opportuno consentire un accesso più ampio nell'intera struttura di directory. In questo caso, è possibile utilizzare l'opzione di percorso Nuovo e immettere /**.jpg (per consentire l'accesso a tutti i file .jpg nell'intera struttura di directory) o /** (per consentire l'accesso a tutti i file nella struttura di directory).

Sono state illustrate le impostazioni per gli accessi in lettura. Gli accessi in scrittura sono simili. In questo caso, si consiglia tuttavia maggiore cautela nell'utilizzo delle espressioni regolari.

La gestione degli accessi in esecuzione è complessa. È necessario stabilire quale dei tre tipi di autorizzazioni di esecuzione consentire:

inherit (ix)

Il figlio eredita il profilo del padre eseguendo gli stessi controlli di accesso del padre. Questa modalità è utile quando un programma limitato deve chiamarne un altro senza ottenere le autorizzazioni del profilo di destinazione né perdere quelle del profilo corrente. Viene spesso utilizzata quando il programma figlio è costituito da un'applicazione helper, quale il client /usr/bin/mail che utilizza un programma quale un pager o il browser Mozilla che usa il programma Acrobat per visualizzare i file PDF.

profile (px)

Il figlio viene eseguito con il proprio profilo, il quale deve essere caricato nel kernel. Se il profilo non è presente, i tentativi di esecuzione del figlio falliscono con l'autorizzazione negata. Questa modalità è utile quando il programma padre chiama un servizio globale, ad esempio ricerche DNS, o invia posta mediante il servizio MTA del sistema.

unconfined (ux)

Il figlio viene eseguito non limitato senza alcun profilo Novell AppArmor applicato alla risorsa eseguita.

Nell'esempio seguente viene definito il profilo per il client di posta /usr/bin/mail. logprof ha rilevato che /usr/bin/mail esegue /usr/bin/less come applicazione helper nei messaggi lunghi di posta di "page". Di conseguenza, viene visualizzata la domanda seguente:

/usr/bin/nail -> /usr/bin/less
(I)nherit / (P)rofile / (U)nconstrained / (D)eny
[Tip]Suggerimento

L'effettivo file eseguibile di /usr/bin/mail diventa /usr/bin/nail, che non è un errore tipografico.

Il programma /usr/bin/less sembra che supporti il semplice scorrimento del testo (lungo molto più di una schermata) e in effetti /usr/bin/mail lo utilizza per questo scopo. Tuttavia less è un programma molto efficiente che utilizza molte altre applicazioni helper, quali tar e rpm.

[Tip]Suggerimento

Eseguire less in un file RPM o tar ball per fare in modo che visualizzi il contenuto di questi contenitori.

Per non eseguire rpm automaticamente durante la lettura dei messaggi di posta (che potrebbe provocare attacchi virus stile Microsoft* Outlook dal momento che rpm installa e modifica i programmi di sistema), utilizzare Eredita. Ciò comporta l'esecuzione di less da questo contesto nel profilo per /usr/bin/mail. Ne consegue che:

  • È necessario aggiungere tutti gli accessi di base ai file per /usr/bin/less al profilo di /usr/bin/mail.

  • È possibile evitare di aggiungere le applicazioni helper, quali tar e rpm, al profilo /usr/bin/mail di modo che quando /usr/bin/mail esegue /usr/bin/mail/less in questo contesto, il programma less risulti meno pericoloso di quanto sarebbe senza protezione Novell AppArmor.

In altri casi, può invece essere opportuno utilizzare l'opzione Profilo. Ciò ha due effetti su logprof:

  • Nel profilo viene scritta la regola px, la quale forza la transizione al profilo proprio del figlio.

  • logprof costruisce un profilo per il figlio e inizia a generarlo, allo stesso modo di come ha generato il profilo padre, ovvero attribuendo gli eventi del processo figlio al profilo del figlio e visualizzando all'utente logprof le stesse domande.

Infine, può essere opportuno consentire un accesso molto ampio al processo figlio, specificando Non limitato. Nel processo padre verrà scritto ux di modo che il figlio venga eseguito senza alcun profilo Novell AppArmor applicato. Tuttavia, questo tipo di esecuzione non è protetta e deve essere utilizzata solo quando assolutamente necessario.

3.5.3.8. apparmor.vim

File di colorazione sella sintassi per l'editor di testo vim che evidenzia varie funzioni di un profilo Novell AppArmor con i colori. Con vim e la modalità sintassi Novell AppArmor per vim, le connessioni semantiche dei profili risultano evidenziate con dei colori e quindi facilmente individuabili. Per utilizzare vim in modo da visualizzare e modificare il profilo, digitare vim in una finestra terminale.

Per abilitare la colorazione della sintassi quando si modifica un profilo Novell AppArmor in vim, utilizzare i comandi :syntax on, quindi :set syntax=apparmor. In alternativa, è possibile inserire le righe seguenti nel file ~/.vimrc:

syntax on
set modeline
set modelines=5

Quando si abilita questa funzione, vim colora automaticamente le righe del profilo:

Blu

Righe #include che raccolgono altre regole Novell AppArmor e commenti che iniziano con #.

Bianco

Normali righe di accesso in lettura.

Marrone

Istruzioni di funzionalità e flag complain.

Giallo

Righe che consentono l'accesso in scrittura.

Verde

Righe che autorizzino all'esecuzione (ix o px).

Rosso

Righe che consentono un accesso non limitato (ux).

Sfondo rosso

Errori di sintassi che non caricano correttamente nei moduli Novell AppArmor.

[Note]Nota

L'utilizzo di queste righe nel file .vimrc rappresenta un rischio per la sicurezza perché vim è costretto a fidarsi della modalità sintassi nei file in corso di modifica. Potrebbe consentire a un aggressore di inviare un file pericoloso che si apre con vim.

Per ulteriore assistenza sull'evidenziazione della sintassi in vim, utilizzare le pagine man apparmor.vim e vim e la sintassi :help nell'editor di vim. La sintassi di Novell AppArmor è archiviata in /usr/share/vim/current/syntax/apparmor.vim.

3.5.3.9. Unconfined

Il comando unconfined esamina le porte aperte della rete sul computer in uso, le confronta con il gruppo di profili caricati e visualizza i servizi della rete che non dispongono di profili Novell AppArmor. Richiede l'autorizzazione root non limitata da un profilo Novell AppArmor.

È necessario eseguire unconfined come root in modo che recuperi il collegamento eseguibile del processo dal file system proc. Questo programma è soggetto alle seguenti condizioni :

  • Un eseguibile non collegato viene eseguito impropriamente

  • Un eseguibile avviato prima del caricamento di un profilo Novell AppArmor non viene visualizzato nell'output, nonostante sia eseguito senza limitazioni

  • Un processo che si arresta tra netstat(8) e altri controlli viene gestito impropriamente

[Note]Nota

Questo programma visualizza solo i processi che utilizzano TCP e UDP. In pratica, questo programma non può essere utilizzato con fornisce e viene fornito solo come supporto per la definizione dei profili di tutti i processi accessibili in rete nell'azienda.

Per ulteriori informazioni sulla struttura e la sicurezza di Novell AppArmor, vedere i documenti seguenti:

SubDomain: Parsimonious Server Security di Crispin Cowan, Steve Beattie, Greg Kroah-Hartman, Calton Pu, Perry Wagle e Virgil Gligor

Illustra il progetto iniziale e l'implementazione di Novell AppArmor. Pubblicato negli atti di USENIX LISA Conference, dicembre 2000, New Orleans, LA.

Questo documento non aggiornato illustra la sintassi e le funzioni che differiscono dal prodotto Novell AppArmor corrente. Leggere questo documento per conoscenza, non utilizzarlo come documentazione tecnica.

Defcon Capture the Flag: Defending Vulnerable Code from Intense Attack di Crispin Cowan, Seth Arnold, Steve Beattie, Chris Wright e John Viega

Un'ottima guida all'utilizzo strategico e tattico di Novell AppArmor per la soluzione di gravi problemi di sicurezza in breve tempo. Pubblicato negli atti di DARPA Information Survivability Conference and Expo (DISCEX III), aprile 2003, Washington, DC.