ร stato annunciato che รจ stata proposta l'implementazione di un meccanismo di isolamento delle applicazioni per FreeBSD , che ricorda le chiamate di sistema foldde e unveil sviluppate dal progetto OpenBSD.
L'isolamento in plegde viene eseguito vietando l'accesso alle chiamate di sistema che non sono utilizzate dall'applicazione e rivelando aprendo selettivamente l'accesso solo a determinati percorsi di file con cui l'applicazione puรฒ lavorare. Per l'applicazione viene formata una sorta di white list di chiamate di sistema e percorsi di file e tutte le altre chiamate e percorsi sono vietati.
La differenza tra `pledge` e `unveil` , sviluppati per FreeBSD , si riduce alla fornitura di un livello aggiuntivo che consente di isolare le applicazioni con modifiche minime o nulle al loro codice. Ricordiamo che in OpenBSD, `pledge` e `unlock` mirano a una stretta integrazione con l'ambiente di base e vengono implementati aggiungendo annotazioni speciali al codice di ciascuna applicazione.
Per semplificare l'organizzazione della protezione, i filtri consentono di evitare dettagli a livello di singole chiamate di sistema e di manipolare classi di chiamate di sistema (input/output, lettura file, scrittura file, socket, ioctl, sysctl, avvio processi, ecc.) . Le funzioni di restrizione dell'accesso possono essere richiamate nel codice dell'applicazione quando vengono eseguite determinate azioni, ad esempio, l'accesso a socket e file puรฒ essere chiuso dopo aver aperto i file necessari e aver stabilito una connessione di rete.
L'autore della versione di folding e unfolding per FreeBSD si propone di offrire la possibilitร di isolare applicazioni arbitrarie. A tal fine, propone l'utility curtain, che consente di applicare alle applicazioni regole definite in un file separato. La configurazione proposta include un file con le impostazioni di base che definiscono le classi di chiamate di sistema e i percorsi di file tipici specifici di determinate applicazioni (ad esempio, quelle relative all'audio, alla rete, alla registrazione dei log, ecc.), nonchรฉ un file con le regole di accesso per applicazioni specifiche.
L'utilitร curtain puรฒ essere utilizzata per isolare la maggior parte delle utilitร , processi server, applicazioni grafiche e persino intere sessioni desktop che non sono state modificate. ร supportata la condivisione della cortina con i meccanismi di isolamento forniti dai sottosistemi Jail e Capsicum.
ร possibile anche l'isolamento annidato , in cui le applicazioni avviate ereditano le regole stabilite dall'applicazione principale, integrandole con restrizioni separate. Alcune operazioni del kernel (strumenti di debug, IPC POSIX/SysV, PTY) sono ulteriormente protette da un meccanismo di barriera che impedisce l'accesso agli oggetti del kernel creati da processi diversi dal processo corrente o principale.
Un processo puรฒ configurare il proprio isolamento chiamando curtainctl o utilizzando le funzioni pledge() e unveil() fornite dalla libreria libcurtain, analogamente a quanto avviene in OpenBSD. Il parametro sysctl 'security.curtain.log_level' viene fornito per tenere traccia dei blocchi durante l'esecuzione dell'applicazione.
L'accesso ai protocolli X11 e Wayland viene abilitato separatamente specificando le opzioni "-X"/"-Y" e "-W" all'avvio della tendina, ma il supporto per le applicazioni grafiche non รจ ancora sufficientemente stabilizzato e presenta una serie di problemi irrisolti ( i problemi compaiono principalmente quando si utilizza X11 e il supporto Wayland รจ molto migliore). Gli utenti possono aggiungere ulteriori restrizioni creando file di regole locali (~/.curtain.conf). Per esempio,
L'implementazione include il modulo del kernel mac_curtain per il controllo di accesso obbligatorio (MAC), una serie di patch per il kernel FreeBSD con l'implementazione dei driver e dei filtri necessari, la libreria libcurtain per usare plegde e le funzioni rivelate nelle applicazioni, l'utility curtain, mostra la configurazione file, una suite di test e patch per alcuni programmi nello spazio utente (ad esempio, per utilizzare $TMPDIR per unificare il lavoro con i file temporanei). Quando possibile, l'autore cerca di ridurre al minimo il numero di modifiche che richiedono l'applicazione di patch al kernel e alle applicazioni.
Infine, se siete interessati ad approfondire l'argomento , potete trovare maggiori dettagli al seguente link.