Ricerca nel sito web

Implementazione del controllo degli accessi obbligatorio con SELinux o AppArmor in Linux


Linux dispone del supporto integrato per due tipi di sistemi MAC (Mandatory Access Control): SELinux e AppArmor. Entrambi i sistemi aggiungono un ulteriore livello di controllo degli accessi al Discretionary Access Control (DAC) predefinito fornito con Linux. In questo articolo approfondiremo l’implementazione di entrambi i sistemi, offrendo esempi pratici e i rispettivi risultati.

Comprendere SELinux e AppArmor

SELinux, abbreviazione di Security-Enhanced Linux, è un modulo di sicurezza del kernel Linux che fornisce un meccanismo per supportare le politiche di sicurezza del controllo degli accessi. È un sistema MAC altamente flessibile che assegna etichette a ogni oggetto nel sistema (file, directory, porte, ecc.) e utilizza policy per definire le interazioni tra questi oggetti. SELinux viene generalmente utilizzato in situazioni in cui sono richieste policy di sicurezza robuste e complesse.

D'altra parte, AppArmor (Application Armor) è un altro sistema MAC basato sul percorso e in qualche modo più semplice da configurare e gestire rispetto a SELinux. Confina i programmi in base a una serie di regole che specificano a quali file e funzionalità un programma può accedere. AppArmor è una buona scelta quando la facilità d'uso e la semplicità sono considerazioni chiave.

Implementazione di SELinux

Controlla lo stato di SELinux - Innanzitutto, assicurati che SELinux sia abilitato sul tuo sistema eseguendo sestatus. L'output rivelerà lo stato di SELinux e la modalità di applicazione corrente.

$ sestatus
SELinux status:         enabled
Current mode:           enforcing

Se SELinux è disabilitato, dovrai abilitarlo e impostare la modalità su "enforcing". Puoi farlo modificando il file /etc/selinux/config.

Comprendere i contesti di SELinux - In SELinux, ogni file, utente, processo e risorsa ha un contesto che viene utilizzato per prendere decisioni sull'accesso. Utilizzare ls -Z per elencare i file insieme ai loro contesti SELinux.

$ ls -Z /var/www/html/index.html
-rw-r--r--. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/index.html

Nell'output sopra, system_u:object_r:httpd_sys_content_t:s0 è il contesto SELinux del file.

Modifica del contesto dei file - Supponiamo di voler servire i file da una nuova directory /var/www/new_dir. Per impostazione predefinita, SELinux impedirà al server HTTP di accedere a questi file. Puoi consentire l'accesso applicando il contesto corretto alla directory utilizzando il comando chcon.

$ chcon -R -t httpd_sys_content_t /var/www/new_dir

Verifica le modifiche con ls -Z.

$ ls -Z /var/www/new_dir
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/new_dir

Implementazione di AppArmor

Controlla lo stato di AppArmor: assicurati che AppArmor sia installato e in esecuzione con sudo systemctl status apparmor. L'output dovrebbe mostrare che AppArmor è attivo (in esecuzione).

$ sudo systemctl status apparmor
● apparmor.service - Load AppArmor profiles
   Loaded: loaded (/lib/systemd/system/apparmor.service; enabled; vendor preset: enabled)
   Active: active (exited) since Mon 2023-06-27 12:34:56 UTC; 1h 10min ago

Se AppArmor non è in esecuzione, avvialo con sudo systemctl start apparmor.

Profili AppArmor − AppArmor controlla l'accesso al programma tramite i profili situati in /etc/apparmor.d/. Elenca i profili utilizzando sudo aa-status.

$ sudo aa-status
apparmor module is loaded.
14 profiles are loaded.
14 profiles are in enforce mode.

Creazione e applicazione di un profilo: supponiamo di voler creare un profilo per il programma /usr/sbin/nginx. Per prima cosa, metti AppArmor in modalità "lamentela" per questo programma utilizzando aa-complain.

$ sudo aa-complain /usr/sbin/nginx

Successivamente, utilizza aa-genprof per generare un profilo mentre il programma è in esecuzione.

$ sudo aa-genprof /usr/sbin/nginx

Infine, metti il programma in modalità 'enforce' utilizzando aa-enforce.

$ sudo aa-enforce /usr/sbin/nginx

Ora Nginx è in esecuzione con il profilo AppArmor specificato e qualsiasi violazione verrà prevenuta e registrata.

Oltre l'implementazione di base di SELinux

La sezione precedente ha delineato i passaggi fondamentali per iniziare con SELinux, ma SELinux può fornire controlli di accesso e funzionalità di sicurezza più granulari.

Booleani - I booleani in SELinux abilitano o disabilitano l'accesso a particolari funzionalità. Supponiamo, ad esempio, di voler consentire al server HTTP Apache di stabilire connessioni di rete verso qualsiasi destinazione. Questo può essere fatto impostando il valore booleano httpd_can_network_connect.

$ setsebool -P httpd_can_network_connect on

Per visualizzare lo stato corrente di questo valore booleano, utilizzare getsebool.

$ getsebool httpd_can_network_connect
httpd_can_network_connect --> on

Ruoli e livelli utente - In SELinux, gli utenti sono associati a ruoli e i ruoli sono associati a domini. È possibile definire a quali risorse può accedere un utente assegnandogli un ruolo particolare. Inoltre, SELinux supporta la sicurezza multilivello. Ciò significa che è possibile specificare livelli di sicurezza sia per gli utenti che per le risorse, creando una policy che consenta solo agli utenti con un certo livello di accedere alle risorse allo stesso livello.

Implementazione avanzata di AppArmor

Proprio come SELinux, AppArmor offre anche funzionalità aggiuntive oltre alla sua funzionalità di base −

Sottoprofili e profili secondari − AppArmor consente la creazione di sottoprofili e profili secondari per un controllo ancora maggiore sulle autorizzazioni dell'applicazione. Ad esempio, se disponi di un profilo principale per un server Web, potresti creare un profilo secondario per gli script CGI eseguiti da quel server, limitando le autorizzazioni di tali script.

Controllo dell'accesso alla rete: AppArmor può controllare a quali risorse di rete può accedere un'applicazione. Ad esempio, potresti creare un profilo che consenta a un programma di aprire connessioni di rete solo verso determinati indirizzi IP o porte.

impilamento dei profili: AppArmor supporta l'impilamento dei profili, il che significa che è possibile applicare più profili a una singola attività. Ciò consente di combinare le regole di diversi profili, fornendo un livello più elevato di personalizzazione e granularità nelle policy di controllo degli accessi.

Sia SELinux che AppArmor sono potenti strumenti per implementare il controllo degli accessi obbligatori in Linux. La chiave per un loro utilizzo efficace sta nella comprensione delle vostre esigenze specifiche e del livello di complessità che siete disposti a gestire nelle vostre policy di controllo degli accessi. Studiando le varie caratteristiche e capacità di ciascuno strumento, puoi scegliere quello che meglio si adatta alla tua situazione e fornisce il massimo grado di protezione per il tuo sistema.

Conclusione

Sebbene sia SELinux che AppArmor forniscano robusti meccanismi di controllo degli accessi, la scelta tra i due dipenderà dalle tue esigenze specifiche. Se hai bisogno di un controllo altamente flessibile e capillare su ogni aspetto del tuo sistema, SELinux è la scelta migliore. Tuttavia, se preferisci un approccio alla sicurezza più semplice e intuitivo, AppArmor sarà più adatto. Ricorda, proteggere il tuo sistema non è un'azione una tantum, ma un processo continuo di monitoraggio, aggiornamento e applicazione delle policy di controllo degli accessi.

Articoli correlati: