Cosa è SELinux

Selinux1

 

Nel post di oggi capiremo che cosa è SELinux, a cosa serve e per quale motivo è così importante averlo installato sulla propria macchina. Impareremo anche come funziona e come riesce ad aumentare la sicurezza del nostro computer.

SELinux, Secure Enhaced Linux, per definizione è un programma che incrementa la sicurezza del computer su cui è installato. Creato dalla NSA, è un software che provvede al controllo su file, processi e permessi all'interno del sistema.
Lo fa appoggiandosi all'architettura MAC, Mandatory Access Control, che è un meccanismo interno al kernel per il controllo interno dei processi.

 

 

SELinux opera su due entità che sono: “oggetti” e “soggetti”.
Gli oggetti sono:

  • File.
  • Directory.

I soggetti, invece:

  • Programmi;
  • Processi;

Per capire meglio la vera utilità di SELinux dobbiamo partire più a monte.

 

 

IL SISTEMA DI PERMESSI SU LINUX
I sistemi operativi moderni che si basano sul kernel Linux usano il DAC, Discretional Access Control per controllare i file e come si accede ad essi.
Il DAC funziona con tre coppie di bit all'inizio di ogni file (o directory che in fondo sono sempre file). I bit servono per indicare la possibilità di lettura r, scrittura w ed esecuzione x.
Il primo gruppo di bit è assegnata all'utente 1 user1. La seconda tripletta assegna i permessi di accesso al gruppo 1 group1 e gli ultimi tre sono per gli altri utenti (others che a volte sono chiamati semplicemente o ).
Per capire meglio come sono distribuiti diamo da terminale:

ls -l file1

 

permessi file1

 

Nell'immagine si può vedere un tipico output. Io non ho il group1 e quindi mi stampa emanuele che è il solo utente appartenente al group1.

Il DAC ha un grande problema. Permette di accedere agli oggetti solo a seconda del proprietario, mettendo così sullo stesso piano tutti i file che appartengono allo stesso utente. Ignora anche molte informazioni importanti, come la sensibilità dei dati, l'integrità degli stessi e il ruolo dell'utente.

In più nei sistemi Linux vi è un meccanismo noto come ereditarietà dei permessi. Questo fa si che un programma eseguito da un certo utente eredita tutti i privilegi ed i permessi di accesso al file dell'utente in questione.

Non è certo una scelta flessibile. Soprattutto se si parla di sicurezza in quanto mette sullo stesso piano file con stessa sensibilità, e programmi affidabili con quelli non affidabili.

Per esempio, sfruttando questo meccanismo, un programma maligno eseguito da un utente può accedere a tutti i file a cui può accedere il proprietario, creando così una grave falla nella sicurezza.

Per risolvere questo problema SELinux aggiunge al DAC l'architettura MAC.
Il Mandatory Access Control tratta diversamente applicazioni sicure da quelle ritenute meno. Permette anche di specificare la sensibilità dei dati presenti nei file assegnando opportune  labels (etichette) significative.
Per SELinux queste sono informazioni vitali per garantire la sicurezza sui file, processi e utenti.
Queste label possono essere visualizzando con:

ls -Z file 1

 

lsZ

Per SELinux queste labels sono dette SELinux Context. L'output del comando è analogo al precedente, con l'aggiunta però di varie informazioni sulla sicurezza.
Esse seguono la sintassi:

<user>:<regola>:<tipo>:<livello>

Tutte queste informazioni sono usate da SELinux nel processo decisionale per permettere l'accesso e l'utilizzo dei file.

 

 

SELINUX CONTEXT
Per capire che cosa siano i SELinux Context, introduciamo il concetto di dominio di un processo. Esso è molto simile al concetto che possiamo trovare in matematica per le funzioni. Per intenderci, il dominio di un processo è l'insieme di tutte le aree di memoria a cui può accedere. Detto questo, capiamo che un processo malevolo non può accedere a nessun file che non facciano parte del dominio.

Un altro termine che useremo spesso è ruolo. Gli utenti sono classificati a seconda del loro ruoli nel computer. Il ruolo per gli utenti è l'equivalente del dominio per i processi.

Come abbiamo detto in precedenza, dando il comando:

ls -Z  file1

Otterremo come output i permessi relativi al file1, seguendo la sintassi:

<user>:<role>:<type>:<level>

Capiamo meglio cosa significano queste label, partendo dalla prima:

 


- User:
Anche detto SELinux User. Tutti gli utenti Linux sono mappati da SELinux e categorizzati a seconda dell'importanza e dei privilegi.
Dando il comando, con i privilegi di superutente:

/usr/sbin/semanage login -l

potremo ottenere, stampati a video, tutti gli utenti SELinux con i relativi permessi e i rapporti che ognuno di loro ha con SELinux.
semanage_login-l

 

 

- Role:
È un attributo responsabile dell'accesso ai domini dei processi. Sotto SELinux gli utenti sono autorizzati per ruoli e i ruoli sono autorizzati per il dominio.
in questo modo si riducono gli attacchi da scalaggio di privilegi.

 

 

- Type:
Un parametro che definisce un dominio per i processi e un tipo per i file. E' anche responsabile del rapporto che hanno i primi e i secondi hanno attraverso il dominio.

 

 

- Level
È un attributo che viene espresso come una coppia, che idealizza un range. Questo intervallo rappresenta la sensibilità delle informazioni contenute nel file.
La categoria è espressa tramite la sintassi:

<sensibilità>:<categoria>

Se apriamo il file:

/etc/selinux/targeted/setrans.conf

Possiamo trovare l'elenco di tutti i livelli disponibili.

 

level

 

 

CONCLUSIONE: PERCHÉ AVERE SELINUX
Vi è una svariata mole di ragioni per installare SELinux. Le principali possono essere:

  • L'accesso ai file da parte di processi e utenti e utenti è consentito solo se SELinux ha una regola che lo permette.
  • SELinux permette l'accesso ai file considerando numerose informazioni. Non solo a seconda del proprietario.
  • La politica (policy) di SELinux  è decisa dallo sviluppatore e successivamente dall'amministratore. Non vi è l'interazione da parte dell'utente finale.
  • Riduce le falle dovute alla presenza dei privilegi dei file.
  • I servizi e i processi operano all'interno di un loro “dominio”. In questo modo un programma malevolo non può essere sfruttato per leggere, o fare altre operazioni, su altri file all'infuori di quelli appartenenti al dominio del processo.
Se non vuoi perderti neanche un post, metti mi piace alla pagina Facebook ufficiale del blog Tux Maniacs, oppure iscriviti alla newsletter gratuita. 😉
 
Link alla altre puntate:
- Seconda Puntata.
- Terza puntata.
  
Fonti:
- Immagini di Joel Garia;
- SELinux, Fedora project;
- Fedora Doc Project;
Dottore in Informatica. Appassionato di computer fin dal primo PC Olivetti con Windows 95 e la bellezza di 8 MB di RAM.
Utilizzatore Linux da 5 anni, credo profondamente nella filosofia open source.
Dopo tante distro provate sul mio fidato Toshiba, uso Fedora per lo studio e il divertimento.

Lascia un commento