# Mandatory access control

Nella sicurezza informatica, il termine mandatory access control (MAC, in italiano: "controllo d'accesso vincolato") indica un tipo di controllo d'accesso alle risorse del sistema nel quale il sistema operativo vincola la capacità di un soggetto (es. utente) di eseguire diverse operazioni su un oggetto o un obiettivo del sistema stesso.

## Descrizione

Un soggetto è un ente attivo, come può essere, ad esempio, un processo o un thread, mentre gli oggetti possono essere i file, le cartelle, le porte TCP/UDP, segmenti di memoria condivisa e altro.
Il controllo di accesso si basa sulla specifica a priori di una serie di attributi di sicurezza rispettivamente per soggetti e oggetti: quando un soggetto tenta l'accesso a un oggetto, il kernel del sistema operativo avvia una regola di autorizzazione che esamina gli attributi di sicurezza di soggetti e oggetti e decide se l'accesso può aver luogo oppure deve essere negato.
Anche un sistema di gestione della base di dati (DBMS), può applicare il MAC come meccanismo di controllo degli accessi. In questo caso gli oggetti sono rappresentati dalle tabelle, dalle viste, dalle procedure etc.
Per storia e tradizione, il MAC è strettamente correlato con i sistemi che operano in modalità di Sicurezza multilivello (MLS).

## Retroscena storico e implicazioni con la sicurezza multilivello

In passato, MAC era fortemente associato con la sicurezza multilivello (multilevel security – MLS) in modo da proteggere le informazioni classificate americane. La Trusted Computer System Evaluation Criteria (TCSEC) fornì la definizione originaria del MAC come “una forma di restrizione dell'accesso agli oggetti basata sulla sensibilità delle informazioni contenute in essi e l’autorizzazione formale ai soggetti per accedere alle formazioni di tale sensibilità”.
Il termine "mandatory ("obbligatorio") ha acquisito un significato speciale nel MAC, derivante dal suo utilizzo nei sistemi militari. In questo contesto, MAC implica un grado di robustezza estremamente elevato, tale da assicurare che i meccanismi di controllo possano resistere a ogni tipo di sovversione, in modo da permetter loro di imporre controlli d’accesso che sono affidati su ordine di un governo come “l’Executive Order 12958” per le informazioni classificate americane. L’imposizione dovrebbe essere più imperativa che per applicazioni commerciali. Questo preclude l’applicazione di meccanismi efficienti; solo meccanismi che possono provvedere assolutamente o quasi al compito sono accettabili nel MAC. Questo è un grado di sicurezza così elevato da apparire irrealistico a coloro che non sono familiari con strategie che richiedono certezza assoluta, e molto difficile anche per coloro che lo sono.

## Robustezza del controllo
### Gerarchia dei privilegi nei sistemi MAC

In alcuni sistemi, l’utente ha l’autorità di decidere se garantire l’accesso ad ogni altro utente. Per permettere questo, tutti gli utenti hanno autorizzazioni su tutti i dati. Questo non è necessariamente vero in un sistema multilivello. Se esistono individui o processi a cui può essere negato l’accesso ad alcuni dati del sistema, allora il sistema deve imporre il MAC. Dal momento che ci possono essere diversi livelli di classificazione dei dati e utenti autorizzati, questo implica una quantificazione su scala per robustezza. Per promuovere la consistenza ed eliminare soggettività in termini di robustezza, un’estesa analisi scientifica e una valutazione degli argomenti ha prodotto una fondamentale standardizzazione di riferimento che quantifica le capacità di robustezza di sicurezza dei sistemi e li associa ai gradi di affidabilità garantiti per vari ambienti di sicurezza. I risultati sono stati documentati nel CSC-STD-004-85. Due componenti relativamente indipendenti di robustezza sono stati definiti: Assurance Level e Functionally. Entrambi sono stati specificati con livelli di precisione che garantiscono confidenze significative in certificazioni basate su questi criteri.

### Valutazione della sicurezza dei sistemi MAC

I Common Criteria sono basati su questi concetti e il loro intento è quello di preservare il livello di garanzia, inteso come livello EAL e i funzionamenti specificati come "Protection Profile". Di questi due componenti essenziali di obiettiva robustezza dei segni di riferimento, solo i livelli EAL sono preservati fedelmente. Nel caso del TCSEC il livello C2 è abbastanza fedelmente preservato nel Common Criteria, come il Controlled Access Protection Profile (CAPP). La sicurezza multilivello nel Protection Profile è più generale rispetto al livello B2 di TCSEC. I Common Criteria sono a conoscenza del MLS, ma manca una dettagliata implementazione dei requisiti degli Orange Book dei loro predecessori, concentrandosi maggiormente sugli obiettivi. Questo dà ai certificatori maggior flessibilità soggettiva nelle decisioni se le caratteristiche tecniche del prodotto raggiungono adeguatamente l’obiettivo, potenzialmente l’erosione della consistenza della valutazione dei prodotti e rendendo più facile ottenere la certificazione per prodotti meno affidabili. Per queste ragioni, i dettagli tecnici dei Protection Profile sono critici nel determinare l’adeguatezza di un prodotto. Una tale architettura previene l’accesso di utenti o processi, autenticati per una determinata classificazione o livello di fiducia, dall'accesso a informazioni, processi, o dispositivi situati a un livello differente. Questo fornisce un meccanismo di contenimento per utenti e processi, che entrambi lo sappiano oppure no.

## Implementazioni

Alcune implementazioni di MAC, come il progetto Blanker di Unisys, erano certificate in modo sufficientemente robusto da separare le informazioni Top Secret da quelle Non Classificate. La loro tecnologia non è stata aggiornata ed è diventata obsoleta. Oggi non ci sono implementazioni certificate da TCSEC a quel livello di robustezza. Esistono comunque prodotti meno robusti:
* RSBAC di Amon Ott fornisce un framework per i kernel Linux che ammette la presenza di diversi modelli decisionali sulla sicurezza. Uno dei modelli implementato è il controllo obbligatorio d’accesso. Un obiettivo generale del progetto RSBAC era quello di provare a raggiungere il livello B1 dell'“Orange Book” (TCSEC). Il modello di MAC usato nel RSBAC è quasi lo stesso usato nei sistemi Unix V/MLS, versione 1.2.1 (sviluppato nel 1989 dal National Computer Security Center degli Stati Uniti d’America con una classificazione B1/TCSEC). RSBAC richiede una serie di aggiustamenti al magazzino, che sono mantenuti abbastanza bene dal proprietario del prodotto.
* Un progetto di ricerca della National Security Agency chiamato SELinux ha aggiunto un'architettura di tipo MAC al Linux Kernel, che è stata poi implementata nella versione principale di Linux nell’agosto del 2003. Utilizza caratteristiche del nucleo Linux 2.6 chiamate LSM (Linux Security Modules interface). Red Hat Enterprise Linux versione 4 viene fornito con un kernel abilitato per SELinux. Sebbene SELinux sia in grado di limitare tutti i processi del sistema, il criterio di destinazione predefinito in RHEL limita i programmi più vulnerabili dal dominio non confinato in cui vengono eseguiti tutti gli altri programmi. RHEL 5 spedisce altri2 tipi di politiche binarie: strict, che tenta di implementare il minimo privilegio, e MLS, che si basa su strict e aggiunge etichette MLS. RHEL 5 contiene ulteriori miglioramenti MLS e ha ricevuto 2 certificazioni LSPP/RBACPP/CAPP/EAL4 nel Giugno del 2007.
* TOMOYO Linux è un'implementazione leggera di Mac per Linux e Embedded Linux, sviluppata da NTT Data Corporation. È stata implementata nella versione principale di Linux Kernel 2.6.30 nel Giugno del 2009. A differenza degli approcci basati sulle etichette usati da SELinux, TOMOYO Linux esegue un Controllo d’Accesso Obbligatorio basato sul percorso del nome, separando domini della sicurezza in accordo con il processo di invocazione della storia, che descrive il sistema contemporaneo. Le politiche sono descritte in base al percorso. Una sicurezza dominante è semplicemente definita da un processo chiamato catena, e rappresentato da una stringa. Ci sono 4 modalità: disabilitato, apprendimento, permissivo, forzante. Gli amministratori possono assegnare diverse modalità a diversi domini. TOMOYO Linux introduce la modalità di “apprendimento”, nella quale gli accessi avvenuti nel nucleo sono automaticamente analizzati e memorizzati per generare politiche MAC: questa modalità potrebbe quindi essere il primo passo verso una politica di scrittura, rendendola più facile da personalizzare in seguito.
* SUSE Linux e Ubuntu 7.10 hanno aggiunto una implementazione MAC chiamata AppArmor. AppArmor utilizza una funzione del kernel Linux 2.6 chiamata LSM (Linux Security Modules interfaces). LSM fornisce un'API del kernel che permette ai moduli del codice del kernel di gestire ACL (DAC ACL, liste di controllo d’accesso). AppArmor non è in grado di limitare tutti i programmi ed è opzionale nei kernel Linux dalla versione 2.6.36.
* Linux e molte altre distribuzioni Unix hanno MAC per CPU, dischi, e memoria; mentre il software del sistema operativo non può gestire bene i privilegi, Linux è diventato famoso durante il 1990 essendo più sicuro e molto più stabile rispetto alle alternative non-Unix. I distributori Linux disabilitano MAC per essere i migliori DAC per alcuni dispositivi – anche se questo è vero per qualsiasi elettronica di consumo oggi.
* grsecurity è una versione per il kernel Linux che fornisce un’implementazione MAC (precisamente, è una implementazione RBAC). grsecurity non è implementato attraverso LSM API.
* Microsoft a partire da Windows Vista e Server 2008, Windows incorpora un controllo obbligatorio dell’integrità (Mandatory Integrity Control – MIC), che aggiunge livelli d’integrità (Integrity Level – IL) ai processi in esecuzione in una sessione logica. MIC restringe i permessi di accesso alle applicazioni che sono eseguite nello stesso account utente e che potrebbero essere meno affidabili. I cinque livelli di integrità sono: basso, medio, alto, sistema e programma di installazione affidabile. I processi iniziati da un utente regolare guadagnano un livello di integrità medio; processi elevati hanno un alto livello di integrità. Mentre i processi ereditano il livello di integrità dal processo da cui sono stati creati, il livello d’integrità può essere personalizzato in base al pre-processo: per esempio IE7 e gli eseguibili scaricati vengono eseguiti con un livello d’integrità basso. Windows controlla l’accesso agli oggetti attraverso il livello d’integrità, e inoltre definisce il limite per i messaggi di windows attraverso l’isolamento del privilegio dell’interfaccia utente (User Inteface Privilege Isolation). Oggetti con nome, inclusi file, chiavi di registri o altri processi e threads, hanno una voce nell’ACL che governa l’accesso ad essi che definisce il livello d’integrità minimo del processo che può utilizzare l’oggetto. MIC impone che un processo possa scrivere o cancellare un oggetto solo quando il suo livello d’integrità è uguale o superiore al livello d’integrità dell’oggetto. Inoltre, per impedire l’accesso ai dati sensibili in memoria, i processi non possono aprire processi con un livello d’integrità più alto per l’accesso in lettura.
* FreeBSD supporta il controllo di accesso obbligatorio (Mandatory Access Control – MAC), implementato come una parte del progetto TrustedBSD. È stato introdotto nel FreeBSD 5.0. Dal FreeBSD 7.2, il supporto MAC è disponibile di default. La struttura è estensibile; vari modelli MAC implementano politiche come Biba e sicurezze multilivello.
* Trusted Solaris di Sun usa un meccanismo di controllo sull’accesso obbligatorio e imposto dal sistema (MAC), dove vengono utilizzati nulla osta e etichette per applicare una politica di sicurezza. Tuttavia, si noti che la capacità di gestire le etichette non implica la forza del kernel di operare in modalità di sicurezza multilivello. L’accesso alle etichette e ai meccanismi di controllo non è adeguatamente protetto dalla corruzione di domini protetti gestiti dal kernel. Le applicazioni eseguite da un utente sono combinate con le etichette di sicurezza della sessione in cui l’utente lavora. L’accesso a informazioni, programmi e dispositivi è scarsamente controllato.
* La struttura MAC OS X MAC di Apple è un’implementazione della struttura TrustedBSD MAC. Un’interfaccia sandboxing di alto livello limitata è fornita dalla funzione della linea di comando sandbox_int. Consultare la pagina sandbox_int del manuale per documentazione.
* Oracle Label Security è un’implementazione del controllo di accesso obbligatorio (MAC) nel DBMS Oracle.
* SE-PostgreSQL è un work in progress dal 27-01-2008, che fornisce l’integrazione nel SE-Linux. Il suo obiettivo è l’integrazione della versione 8.4, insieme alle restrizioni a livello di riga.
* Trusted RUBIX è un controllo di accesso obbligatorio (MAC) che impone il DBMS che si integra completamente con SE-Linux per limitare l’accesso a tutti gli oggetti del database.
* Il sistema operativo Astra Linux sviluppato per l’esercito russo ha il proprio controllo di accesso obbligatorio (MAC).
* Smack (Simplified Mandatory Access Control Kernel) è un modulo di sicurezza del kernel Linux che protegge i dati e processa l’interazione manipolazioni dannose usando una serie di regole di controllo d’accesso obbligatorie e personalizzate, con la semplicità come obiettivo principale di progettazione. È stato ufficialmente unito dalla versione rilasciata di Linux 2.6.25.