Indice dei contenuti dell'articolo:
Panoramica
Security-Enhanced Linux (SELinux) è un’architettura di sicurezza per sistemi Linux® che consente agli amministratori di avere un maggiore controllo su chi può accedere al sistema. È stato originariamente sviluppato dalla National Security Agency (NSA) degli Stati Uniti come una serie di patch per il kernel Linux utilizzando Linux Security Modules (LSM).
SELinux, un acronimo che sta per Security-Enhanced Linux, rappresenta una collezione avanzata di patch di sicurezza sviluppate per il kernel del sistema operativo Linux. Il suo scopo principale è fornire controlli di accesso rafforzati e specifici per una varietà di servizi e applicazioni che operano all’interno del sistema.
La genesi di SELinux risiede nei progetti inizialmente condotti dalla National Security Agency degli Stati Uniti. Dopo il suo rilascio, SELinux è rapidamente emerso come un elemento essenziale e affidabile nel panorama della sicurezza informatica open source. Il principale contributo di SELinux alla sicurezza di un sistema Linux è l’implementazione di un sistema di limitazione dei privilegi. Questo sistema limita l’impatto che una determinata applicazione può avere sul funzionamento generale del sistema, minimizzando quindi i danni complessivi che una potenziale breccia di sicurezza potrebbe causare.
Prima di addentrarsi nel funzionamento specifico di SELinux, è necessario comprendere il concetto di “correttezza” nel contesto dell’informatica. La correttezza è un termine che descrive quanto accuratamente un programma informatico produce risultati attesi in base alle specifiche del sistema. Per illustrare questo concetto, si può pensare ad un’applicazione progettata per aprire file immagine: se tale applicazione riesce ad aprire correttamente il file immagine come progettato, si può affermare che ha un alto grado di correttezza. Questo concetto può essere esteso a qualsiasi programma, applicazione o funzione che opera all’interno di un sistema informatico.
In un sistema che non implementa SELinux, la sicurezza complessiva dipende dalla correttezza del kernel e da quella di qualsiasi applicazione che gode di privilegi. Questo significa che se ci sono errori o guasti nelle applicazioni privilegiate o nelle loro configurazioni, l’intero sistema potrebbe essere messo a rischio. Questo è il motivo per cui non è consigliato utilizzare un kernel Linux privo di moduli di sicurezza, soprattutto quando il dispositivo è connesso a Internet.
Al contrario, i sistemi che implementano SELinux affidano la loro sicurezza non solo alla correttezza del kernel, ma anche alla correttezza della configurazione della politica di sicurezza. Questo permette a un sistema con SELinux di limitare l’effetto di una eventuale applicazione compromessa, proteggendo l’integrità dell’intero sistema e permettendo alle altre applicazioni di continuare a funzionare normalmente. In sostanza, SELinux implementa una politica di sicurezza compartimentata, che impedisce la propagazione di un’applicazione compromessa o di altre potenziali vulnerabilità di sicurezza.
SELinux è stato introdotto alla comunità open source nel 2000 ed è stato integrato direttamente nel kernel Linux nel 2003, sottolineando la sua importanza nel garantire la sicurezza di un sistema Linux.
Come funziona SELinux?
SELinux, o Security-Enhanced Linux, è un potente strumento di sicurezza che opera sul principio dell’assegnazione di etichette di sicurezza, chiamate anche “contesti”, a diversi elementi all’interno del sistema operativo. Queste etichette vengono attribuite a funzioni, processi, utenti, file, porte di rete e persino hardware.
Ogni etichetta assegnata comprende una stringa di testo che rappresenta un nome utente, un ruolo e un dominio. Di solito, la parte del nome di dominio svolge il ruolo più critico, poiché è utilizzata per determinare i controlli di accesso specifici. Analogamente, i file, le porte di rete e l’hardware hanno un contesto assegnato all’interno di SELinux, e a ciascuno viene dato un nome, un ruolo e un tipo.
Questo processo di assegnazione di etichette di sicurezza ai file viene chiamato “etichettatura” ed è determinato dal file delle politiche utilizzato. Il file delle politiche è costituito da tre file distinti: un file di mappatura, un file di regole e un file di interfaccia. Questi tre file devono essere compilati in un unico file delle politiche mediante l’utilizzo del set di strumenti di SELinux. Questo file delle politiche compilato viene quindi caricato nel kernel del sistema, rendendo la politica attiva.
La creazione del file delle politiche può essere eseguita manualmente o utilizzando un tool di gestione di SELinux. Una volta che il file delle politiche è stato caricato nel kernel del sistema, si può avere la certezza che il sistema è adeguatamente protetto.
La maggior parte dei moderni sistemi operativi Linux, come RHEL, CentOS, AlmaLinux o Rocky Linux hanno SELinux preconfigurato. Questo significa che, nella maggior parte dei casi, gli utenti non si rendono nemmeno conto che SELinux sta lavorando silenziosamente in background per proteggere il loro sistema. In breve, la natura affidabile e non invasiva di SELinux lo rende un componente fondamentale di qualsiasi moderno sistema Linux.
Il ruolo fondamentale di SELinux è la definizione dei controlli di accesso per applicazioni, processi e file all’interno del sistema. A tal fine, SELinux utilizza le politiche di sicurezza, un insieme di regole che guidano l’accesso ai vari elementi del sistema. Queste politiche indicano cosa è permesso o negato ad SELinux.
Quando un’applicazione o un processo, definito come “soggetto”, richiede l’accesso a un “oggetto” (ad esempio, un file), SELinux controlla le autorizzazioni attraverso una struttura chiamata cache del vettore di accesso (AVC – Access Vector Cache). Questa cache mantiene le autorizzazioni per i soggetti e gli oggetti per velocizzare le decisioni di controllo di accesso.
Come configurare SELinux
Ci sono diversi modi in cui puoi configurare SELinux per proteggere il tuo sistema. I più comuni sono i criteri mirati o la sicurezza multilivello (MLS).
La politica mirata è l’opzione predefinita e copre una gamma di processi, attività e servizi. L’MLS può essere molto complicato ed è in genere utilizzato solo dalle organizzazioni governative.
Puoi dire a cosa dovrebbe essere in esecuzione il tuo sistema guardando il file /etc/sysconfig/selinux. Il file avrà una sezione che mostra se SELinux è in modalità permissiva, in modalità di applicazione o disabilitata e quale criterio dovrebbe essere caricato.
Labeling SELinux e Type Enforcing
L’imposizione del tipo e l’etichettatura sono i concetti più importanti per SELinux.
SELinux funziona come un sistema di etichettatura, il che significa che tutti i file, processi e porte in un sistema hanno un’etichetta SELinux ad essi associata. Le Label sono un modo logico di raggruppare le cose. Il kernel gestisce le Label durante l’avvio.
Le Label sono nel formato utente:ruolo:tipo:livello (il livello è facoltativo). Utente, ruolo e livello sono usati nelle implementazioni più avanzate di SELinux, come con MLS. Il tipo di etichetta è il più importante per la politica mirata.
SELinux utilizza l’imposizione del tipo per imporre una politica definita sul sistema. L’imposizione del tipo è la parte di una politica SELinux che definisce se un processo in esecuzione con un certo tipo può accedere a un file etichettato con un certo tipo.
Abilitazione di SELinux
Se SELinux è stato disabilitato nel tuo ambiente, puoi abilitare SElinux modificando /etc/selinux/config e impostando SELINUX=permissive. Dal momento che SELinux non era attualmente abilitato, non si desidera impostarlo immediatamente su enforcing perché è probabile che il sistema abbia elementi etichettati in modo errato che possono impedire l’avvio del sistema.
È possibile forzare il sistema a rietichettare automaticamente il filesystem creando un file vuoto denominato .autorelabel nella directory principale e quindi riavviando. Se il sistema ha troppi errori, è necessario riavviare in modalità permissiva affinché l’avvio abbia esito positivo. Dopo che tutto è stato rietichettato, imposta SELinux su enforcing con /etc/selinux/config e riavvia, oppure esegui setenforce 1.
Se un amministratore di sistema ha meno dimestichezza con la riga di comando, sono disponibili strumenti grafici che possono essere utilizzati per gestire SELinux.
SELinux fornisce un ulteriore livello di sicurezza per il tuo sistema integrato nelle distribuzioni Linux . Dovrebbe rimanere acceso in modo da poter proteggere il tuo sistema in caso di compromissione.
Controllo dell’accesso discrezionale (DAC) e controllo dell’accesso obbligatorio (MAC)
I sistemi Linux e UNIX tradizionali hanno ampiamente sfruttato il modello di Controllo dell’Accesso Discrezionale (DAC). Questo modello di controllo di accesso, che ha radici nel concetto di proprietà dei file, concede ad un utente proprietario di un file o a un processo la facoltà di determinare chi può accedere ai suoi dati e in che modo. In un sistema DAC, gli utenti possono specificare regole per l’accesso ai loro file, con le regole che possono consentire l’accesso a un altro utente specifico, a un gruppo di utenti o a qualsiasi altro utente del sistema.
L’utente root in un sistema Linux con DAC ha poteri illimitati, con un controllo completo su tutti i file e i processi. Essendo l’amministratore di sistema, l’utente root può accedere, modificare o eliminare i file di qualsiasi altro utente, garantendo una potenziale capacità di alterare tutto il sistema.
SELinux, d’altra parte, implementa un modello di Controllo dell’Accesso Obbligatorio (MAC). A differenza del DAC, dove gli utenti detengono il potere decisionale sulle politiche di accesso, nel MAC, le politiche di accesso sono stabilite a livello amministrativo e non possono essere modificate da utenti non privilegiati. Anche se un utente cambia le impostazioni DAC sulla sua directory home, ad esempio, una politica MAC come quella imposta da SELinux può ancora impedire l’accesso da parte di un altro utente o processo. In questo modo, SELinux mantiene un alto grado di sicurezza indipendentemente dalle azioni dell’utente.
SELinux offre una granularità molto più dettagliata nel controllo dell’accesso rispetto ai tradizionali sistemi DAC. Le politiche di SELinux possono essere estremamente specifiche, consentendo agli amministratori di restringere o consentire l’accesso a specifici file, directory, porte di rete, e altro ancora, per singoli utenti o processi. Questa capacità di apportare modifiche precise è fondamentale per garantire la sicurezza dell’intero sistema.
Come gestire gli errori di SELinux
Quando ti imbatti in un errore in SELinux, esso indica generalmente che qualcosa nel tuo sistema non funziona come dovrebbe e necessita di essere risolto. Esistono quattro problemi comuni che potrebbero essere la causa di un errore in SELinux.
- Le etichette sono errate: SELinux utilizza un sistema di etichettatura, o “labelling”, per gestire i controlli di accesso. Se le etichette non sono corrette, potrebbero verificarsi errori. Ad esempio, un file potrebbe non essere accessibile da un’applicazione a causa di un’etichetta errata. In questo caso, puoi utilizzare gli strumenti specifici di SELinux, come “restorecon” o “chcon”, per correggere le etichette.
- Una politica necessita di essere aggiustata: Le politiche di SELinux sono una serie di regole che determinano come i processi possono interagire con le varie parti del sistema. Se hai apportato una modifica al sistema che non è stata ancora incorporata nelle politiche di SELinux, potrebbe verificarsi un errore. In questo caso, è possibile risolvere l’errore aggiornando le politiche. Puoi farlo utilizzando i booleani di SELinux, che permettono di abilitare o disabilitare determinate funzionalità, o creando un modulo di politiche personalizzato con lo strumento “audit2allow”.
- C’è un bug nella politica: Nonostante il lavoro accurato dei team di sviluppo, le politiche di SELinux possono presentare occasionalmente dei bug. Un bug in una politica potrebbe causare un comportamento inatteso e generare errori. In questo caso, potrebbe essere necessario segnalare il bug alla comunità di sviluppatori di SELinux per farsi aiutare a risolvere il problema.
- Il sistema è stato compromesso: Nonostante l’efficacia di SELinux nella protezione dei sistemi, esiste sempre la possibilità che un sistema venga violato. Se sospetti che il tuo sistema sia stato compromesso, è importante agire immediatamente. Il primo passo dovrebbe essere disconnettere il sistema dalla rete per prevenire ulteriori danni. Successivamente, dovresti condurre un’indagine forense per determinare come è avvenuta la violazione e quali misure dovrebbero essere adottate per prevenire incidenti futuri. Ricorda, SELinux è uno strumento di difesa potente, ma la sicurezza informatica richiede un approccio multistrato.
Cosa sono i booleani?
I booleani sono una componente fondamentale di SELinux e rappresentano una caratteristica chiave che consente una personalizzazione flessibile delle politiche di sicurezza del sistema. Essi sono essenzialmente dei controlli di attivazione e disattivazione, o “on/off”, che consentono di regolare le funzionalità specifiche di SELinux.
Questi booleani permettono agli amministratori di sistema di modificare il comportamento di SELinux senza la necessità di scrivere o modificare manualmente le politiche di sicurezza, rendendo quindi l’amministrazione del sistema più agevole e meno soggetta a errori. Questo è particolarmente utile in ambienti complessi o di larga scala, dove la gestione dettagliata delle politiche potrebbe essere eccessivamente onerosa.
Esistono centinaia di booleani disponibili in SELinux, ognuno dei quali controlla un aspetto specifico delle politiche di sicurezza. Ad esempio, esiste un booleano che controlla se gli script Apache possono connettersi alla rete, un altro che controlla se i server DHCP possono scrivere nei file di configurazione, e così via. Molti di questi booleani sono predefiniti per riflettere le migliori pratiche di sicurezza.
Per visualizzare i booleani attualmente impostati nel tuo sistema, puoi utilizzare il comando “getsebool -a”. Questo comando restituirà un elenco di tutti i booleani di SELinux e le loro attuali impostazioni (attivato o disattivato).
È possibile modificare l’impostazione di un booleano utilizzando il comando “setsebool”, seguito dal nome del booleano e dallo stato desiderato. Queste modifiche possono essere temporanee (vale a dire, valide solo fino al prossimo riavvio) o persistenti. La persistenza delle modifiche può essere particolarmente importante per le impostazioni di sicurezza critiche che devono essere mantenute costanti nel tempo.
I booleani di SELinux insomma offrono un modo potente e flessibile per personalizzare le impostazioni di sicurezza del tuo sistema Linux, permettendo di bilanciare le esigenze di sicurezza con quelle operative del tuo ambiente.
Disabilitare SELinux
SELinux è un importante strumento di sicurezza nel mondo Linux, progettato per offrire un controllo preciso sulle attività dei processi nel sistema. Tuttavia, ci sono situazioni in cui un amministratore potrebbe considerare l’opzione di disabilitarlo. Queste situazioni includono casi in cui SELinux interferisce con applicazioni specifiche, complica l’amministrazione del sistema o se l’ambiente di sistema è sufficientemente isolato e protetto da altre misure di sicurezza. Va ricordato, però, che disabilitare SELinux può esporre il sistema a rischi di sicurezza.
Per disabilitare SELinux in sistemi operativi derivati da Red Hat come CentOS, AlmaLinux, RockyLinux, e Oracle Linux, è necessario modificare il file /etc/selinux/config. Troverai una riga che dice “SELINUX=enforcing”. Modifica questa riga in “SELINUX=disabled”. Dopo aver salvato ed uscito dal file, dovrai riavviare il sistema per applicare le modifiche.
Per sistemi operativi basati su Debian o Ubuntu, SELinux non è generalmente installato o abilitato di default, ma se è stato installato e necessita di essere disabilitato, è possibile farlo modificando il file /etc/selinux/config come descritto sopra, se presente. Se non esiste tale file, SELinux potrebbe essere stato abilitato tramite il bootloader GRUB, in tal caso, sarà necessario rimuovere “selinux=1” e “security=selinux” dal file di configurazione di GRUB.
Pro:
- Maggiore semplicità: SELinux può essere complicato da gestire e da configurare correttamente. Disabilitandolo, si eliminano queste complessità.
- Compatibilità: Alcune applicazioni possono non funzionare correttamente con SELinux, quindi disabilitarlo può risolvere questi problemi.
Contro:
- Sicurezza ridotta: SELinux offre un livello di sicurezza molto elevato, quindi disabilitarlo può rendere il sistema più vulnerabile a varie forme di attacchi.
- Non conformità: Se si lavora in un ambiente che richiede la conformità con determinate normative di sicurezza, la disabilitazione di SELinux potrebbe portare a una non conformità.
La disabilitazione di SELinux dovrebbe essere l’ultima risorsa dopo aver tentato di risolvere i problemi esistenti attraverso la regolazione delle politiche e l’utilizzo dei booleani. Prima di disabilitare SELinux, è importante comprendere le possibili implicazioni per la sicurezza del tuo sistema.
Conclusione
SELinux, abbreviazione di Security-Enhanced Linux, è un potente meccanismo di sicurezza che ha apportato notevoli miglioramenti alla sicurezza del sistema Linux, rendendolo un punto fermo nell’ambiente della sicurezza informatica open source. Implementato originariamente dalla National Security Agency, SELinux impone rigidi controlli di accesso per una vasta gamma di servizi e applicazioni, limitando efficacemente i privilegi e mitigando potenziali danni al sistema.
Attraverso l’uso di politiche di sicurezza, contesti e booleani, SELinux fornisce un controllo granulare sull’accesso alle risorse del sistema. Nonostante la sua complessità e la curva di apprendimento iniziale, l’uso di SELinux può fornire un livello di sicurezza superiore per i sistemi Linux. È importante sottolineare che, sebbene esistano casi in cui potrebbe essere tentata la disabilitazione di SELinux, ciò dovrebbe essere considerato come ultima risorsa, poiché riduce significativamente la sicurezza del sistema.
In conclusione, SELinux è uno strumento essenziale per qualsiasi amministratore di sistema che si preoccupa della sicurezza. Nonostante la sua complessità, con una corretta comprensione e amministrazione, SELinux può fornire un efficace livello aggiuntivo di difesa per i sistemi Linux, aumentando significativamente la robustezza generale della sicurezza del sistema. Alla luce dell’attuale paesaggio delle minacce informatiche, gli strumenti come SELinux si rivelano sempre più vitali per proteggere le nostre infrastrutture informatiche.