È previsto il porting del meccanismo di isolamento della promessa su Linux

recentemente l'autore della libreria standard Cosmopolitan C e la piattaforma Redbean annunciata tramite a annunciato, l'implementazione del meccanismo di isolamento pledge() per Linux.

Era originariamente sviluppato dal progetto OpenBSD y ti permette di bannare selettivamente che le applicazioni accedono alle chiamate di sistema inutilizzate (per l'applicazione viene formata una sorta di whitelist di chiamate di sistema e altre chiamate sono vietate). A differenza dei meccanismi di controllo dell'accesso syscall disponibili su Linux, come seccomp, il meccanismo di pledge è progettato da zero per essere il più intuitivo possibile.

L'iniziativa fallita di isolare le applicazioni nell'ambiente di base OpenBSD utilizzando il meccanismo systrace ha dimostrato che l'isolamento a livello delle singole chiamate di sistema è troppo complicato e richiede tempo.

In alternativa è stato proposto il pegno, che consentito di creare regole di isolamento senza entrare nei dettagli e manipolare classi di accesso preparate.

Ad esempio, le classi offerte sono stdio (input/output), rpath (file di sola lettura), wpath (file di scrittura), cpath (crea file), tmppath (lavora con file temporanei), inet (rete di socket), unix (socket unix ), dns (risoluzione DNS), getpw (accesso in lettura al database utente), ioctl (chiamata ioctl), proc (controllo processo), exec (processi di avvio) e id (controllo autorizzazioni).

Le regole per lavorare con le chiamate di sistema sono specificati sotto forma di annotazioni che includono un elenco di classi di chiamate di sistema consentite e una matrice di percorsi di file a cui è consentito l'accesso. Dopo aver compilato ed eseguito l'applicazione modificata, il kernel assume il compito di monitorare la conformità con le regole specificate.

Separatamente è in fase di sviluppo l'implementazione del pledge per FreeBSD, che si distingue per la capacità di isolare le applicazioni senza apportare modifiche al loro codice, mentre in OpenBSD il pledge call è finalizzato alla stretta integrazione con l'ambiente di base e all'aggiunta di annotazioni al codice di ciascuno.

La promessa è come il frutto proibito che tutti bramiamo quando il capo dice che dovremmo usare cose come Linux. Perché importa? È perché il pledge() rende effettivamente comprensibile la sicurezza. Linux non ha mai avuto un livello di sicurezza che i comuni mortali possano capire.

Gli sviluppatori del porting di Linux hanno preso spunto da FreeBSD e invece di apportare modifiche al codice, hanno preparato un'utilità aggiuntiva da pledge.com che consente di applicare restrizioni senza modificare il codice dell'applicazione. Ad esempio, per eseguire l'utilità curl con accesso solo alle classi di chiamate di sistema stdio, rpath, inet e threadstdio, eseguire semplicemente "./pledge.com -p 'stdio rpath inet thread' curl http://example.com » .

L'utilità funziona su tutte le distribuzioni Linux da RHEL6 e non richiede l'accesso come root. Inoltre, basata sulla libreria cosmopolita, viene fornita un'API per la gestione delle restrizioni nel codice dei programmi in linguaggio C, che consente, tra l'altro, di creare enclavi per limitare selettivamente l'accesso in relazione a determinate funzioni dell'applicazione.

Ci sono stati alcuni sviluppatori in passato che hanno provato questo. Non farò nomi, perché la maggior parte di questi progetti non sono mai stati completati. Quando si tratta di SECOMP, i tutorial online spiegano solo come inserire nella whitelist le chiamate di sistema, quindi la maggior parte delle persone perde interesse prima di capire come filtrare gli argomenti. I progetti che sono andati avanti hanno avuto anche sviste come la possibilità di modificare i bit setuid/setgid/sticky. Pertanto, nessuna delle attuali alternative dovrebbe essere utilizzata. Penso che questo sforzo ci porti molto più vicini all'avere pledge() che mai.

L'implementazione non richiede modifiche al kernel: i vincoli di utilità vengono tradotti in regole SECCOP BPF ed elaborati utilizzando il meccanismo di isolamento delle chiamate di sistema nativo di Linux. Ad esempio, chiamando promise("stdio rpath", 0) verrà convertito in un filtro BPF

Infine, se sei interessato a saperne di più, puoi consultare i dettagli nel seguente link


Lascia un tuo commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati con *

*

*

  1. Responsabile dei dati: Miguel Ángel Gatón
  2. Scopo dei dati: controllo SPAM, gestione commenti.
  3. Legittimazione: il tuo consenso
  4. Comunicazione dei dati: I dati non saranno oggetto di comunicazione a terzi se non per obbligo di legge.
  5. Archiviazione dati: database ospitato da Occentus Networks (UE)
  6. Diritti: in qualsiasi momento puoi limitare, recuperare ed eliminare le tue informazioni.