Unix programmazione di sicurezza: ridurre al minimo i privilegi



procedure di sicurezza devono ridurre al minimo i privilegi, per ridurre il bug la possibilità di falle di sicurezza. Questo articolo discute come ridurre al minimo i moduli privilegiata, i privilegi ed i privilegi concessi al tempo effettivo per ridurre al minimo i privilegi.

L'articolo non parla solo alcuni della classe tradizionale UNIX privilegiato di meccanismi, anche discusso relativamente nuovi meccanismi, come il carcere di FreeBSD (), Linux Security Module (Linux Security Modules, LSM) quadro, e la Linux Security-Enhanced (SELinux).

3 marzo 2003, Internet Security Systems su Sendmail in una grave vulnerabilità avvertito. Tutte le e-mail tramite l'agente di trasferimento messaggi (agente di trasferimento di posta, MTA) di trasferire, Sendmail è il più popolare MTA, quindi questo avvertimento colpito molte organizzazioni in tutto il mondo. Il problema è, a seconda della configurazione di consueto, con attenzione impostare il "da", "a" o "campo" cc di messaggi di posta elettronica consente al mittente completa (root) il controllo di qualsiasi macchina che esegue uno Sendmail. Più seriamente, il firewall generale non protegge contro gli attacchi di questo tipo all'interno della macchina.

La causa diretta di tale lacuna perché, Sendmail ha una rilevazione falla di sicurezza, buffer overflow può verificarsi. Tuttavia, un ruolo importante nel fattore, Sendmail viene spesso installato come un unico "setuid root" del programma, eseguirlo sul sistema dispone di autorizzazioni di controllo completo. Questo, in difetto Sendmail nessuno di quelli che può consentire a un utente malintenzionato il controllo diretto di tutto il sistema.

Questo disegno è necessario? No, Wietse Venema Postfix è un comune può corrispondere è MTA. Come sendmail, Postfix farà un sacco di test di sicurezza, tuttavia, al fine di ridurre al minimo i privilegi, Postfix progettato come un insieme di moduli. I risultati, Postfix è generalmente considerato più sicuro del programma Sendmail. Questo articolo discute come ridurre al minimo i privilegi, è possibile applicare il pensiero stesso al programma.

Minimizzare la base del privilegio

L'applicazione pratica delle procedure ha lacune. Vogliamo davvero, ma davvero lo è. bisogni complessi, le pressioni di programma e delle modifiche del contesto è improbabile per essere pratico processo così perfetta. Anche coloro che hanno superato complessa e sofisticata tecnologia per provare formalmente la procedura corretta, non ci sarà difetti. Perché? Uno dei motivi è che la verifica deve essere effettuata una serie di ipotesi, e spesso queste ipotesi non sono del tutto corretto. In ogni caso, per varie ragioni, la maggior parte delle procedure non era stata una prova rigorosa. Inoltre, anche oggi non vi è difetto (improbabile), il mantenimento futuro del cambiamento o cambiamenti nell'ambiente sono suscettibili di introdurre difetti. Così, per affrontare i problemi pratici, abbiamo qualche modo di sviluppare procedure di sicurezza, nonostante i difetti del nostro programma.

Nonostante queste carenze, il programma di sicurezza è il modo più importante è ridurre al minimo il privilegio. Privilegio non solo permetterà a tutti può fare. sistemi UNIX in classe, con "" utente root, gli altri utenti o membri di un gruppo di privilegi è la più comuni tipi di privilegi. Alcuni sistemi consentono di concedere i privilegi di lettura o scrittura di file specifici. Ma comunque, per ridurre al minimo i privilegi:

Solo una parte del programma di necessità i privilegi concessi e privilegi

Solo una parte di esso è assolutamente necessario concedere privilegi specifici

I privilegi del tempo efficace o può essere efficacemente limitato al minimo il tempo assoluto

Il fatto è l'obiettivo, non assoluto. La base dell'organizzazione (ad esempio il sistema operativo o macchina virtuale), può rendere il completamento rigorosa di questi non è facile, o il completamento rigorosa di questi può essere molto complicato, che ha portato al completamento del tentativo di introdurre difetto più severe. Tuttavia, i più vicini a questi obiettivi, la possibilità di determinare una riduzione dei difetti di sicurezza. Anche se il difetto ha avuto problemi di sicurezza, che ha portato il problema della sicurezza potrebbe essere ancora più bassa. E se si può garantire che solo una piccola parte del programma ha privilegi specifici, è possibile utilizzare un sacco di tempo extra per garantire la parte che può sopportare attacchi. Questa idea non è nuova; Saltzer e Schroeder 1975 eccellente carta discusso i principi di sicurezza, in modo esplicito come un principio di privilegio minimo (vedi Risorse). Qualche pensiero è eterno, come ridurre al minimo il privilegio.

Le prossime tre sezioni saranno discutere di tali obiettivi, a sua volta, anche come raggiungere i propri sistemi di classe UNIX. Poi, discuteremo di FreeBSD e Linux, in alcuni meccanismi speciali disponibili, compresa la NSA Security-Enhanced Linux (SELinux) discussione.

Minimizzare i moduli privilegiato

Come detto prima, solo per essere parte privilegiata del programma si applicava solo privilegiato. Cioè, quando si progetta il programma, tenta di elaborare ripartiti in parti separate, per fare solo una piccola parte e indipendente delle esigenze di privilegi specifici.

Se le diverse parti deve essere eseguito, quindi utilizzare i processi UNIX-system (non thread). Thread condividono i loro privilegi di sicurezza, il thread in questione può interferire con il processo di tutti gli altri thread. zona privilegiata della preparazione, agli altri programmi come è attaccato: un giorno sarà! Assicurarsi che la parte privilegiata del sole cose da fare il meno possibile; funzionalità limitate significa meno suscettibili di essere utilizzati.

Un approccio comune è quello di creare una funzione estremamente limitato di privilegi particolari (come uno strumento di setuid o setgid) riga di comando. il comando passwd UNIX è un esempio: è un particolare privilegio di strumenti a linea di comando per modificare la password (setuid root), ma che può fare è cambiare la password. Quindi, possono richiedere una varietà di strumenti GUI per fare la variazione effettiva passwd. Se possibile, cerca di evitare completamente la creazione di programma setuid o setgid, è difficile far sì che sei veramente proteggere tutti gli input. Tuttavia, talvolta è necessario creare un setuid / setgid programmi, così quando necessario, per quanto possibile per elaborare il più piccolo e limitato.

Ci sono molti altri modi. Ad esempio, si può avere un privilegio speciale di un "piccolo server (server)" processo; che il server consente solo su specifica richiesta, ma solo confermato che il richiedente è autorizzato a rilasciare la richiesta. Un altro approccio comune è quello di iniziare a usare i privilegi di un programma, il programma poi derivate di rinunciare a tutti i privilegi del secondo processo, il processo facendo maggior parte del lavoro.

Fai attenzione a come questi moduli comunicano tra loro. In molti sistemi UNIX, il valore della riga di comando e l'ambiente può essere visto da altri utenti, quindi non è nel processo di trasmissione dei dati tra il segreto per un buon modo. Pipeline può essere competente, ma per evitare attentamente la situazione di stallo (due estremità possibile aggiornare una semplice domanda / protocollo di risposta può essere competente).

Ridurre i privilegi concessi

Per garantire che hai solo bisogno di concedere i privilegi di fare la procedura - si ferma qui. UNIX modo principale per ottenere i privilegi di cui essi eseguito da un utente o un gruppo. In genere, il processo di utilizzare la loro esecuzione come utenti e gruppi, tuttavia, "setuid" o "setgid" sarà che l'utente del programma o privilegi di gruppo.

Purtroppo, ci sono in qualche modo involontaria al programma "setuid root" privilegi sui sistemi UNIX-sviluppatori. Gli sviluppatori pensano di fare le cose per se stessi per diventare "facile" perché non andare in profondità conto delle procedure è necessario definito alcun privilegio particolare. Il problema è, poiché la maggior parte di questi programmi da effettuare classe di sistemi UNIX fare qualsiasi cosa, in modo che qualsiasi difetto può rapidamente trasformarsi in un disastro di sicurezza.

Non solo perché avete bisogno per completare un compito semplice per dare a tutti i privilegi possibili. La procedura dovrebbe essere somministrato solo i privilegi di cui hanno bisogno. Se potete, a setgid per eseguirli, di non usare setuid - privilegi setgid meno. Creazione di un utente specifico e di gruppo (non usare root), e usarli in base alle vostre esigenze. Per garantire che quelle di proprietà di root eseguibile solo da root a scrivere, in modo che gli altri non possono modificarli. I permessi dei file set molto rigide - se non assolutamente necessario, non lasciare che tutti possono leggere o scrivere file, e utilizzare tali utenti e gruppi specifici. In grado di spiegare tutti questi giochi può essere un esempio di "top ten" decine di prassi standard. Molte procedure sono "giochi setgid", per fare solo il programma di gioco può essere modificato "top ten" partiture, e decine di documenti memorizzati nel gruppo master sono giochi (e solo a questo gruppo può scrivere). Anche se l'attacco hacker ed entrò in un programma di gioco, tutto quello che poteva fare sarebbe modificare i punteggi dei documenti. In ogni caso, gli sviluppatori di giochi hanno ancora bisogno di scrivere i loro programmi di prevenzione dei file "maligno" punteggio.

chroot () chiamata di sistema è uno strumento utile - purtroppo ci sono alcuni difficile da usare. Quando il processo di visualizzazione del file system "root", questa chiamata di sistema verrà modificato il processo per vedere il contenuto. Se avete intenzione di usarlo - e può essere utile - per essere pronti a prendere del tempo per fare buon uso di esso. Deve essere preparato con cura "root nuovo", che è complicato perché l'applicazione esatta dipende dalla piattaforma e le caratteristiche di applicazione. Devi essere root, da chroot () chiamata, e si dovrebbe modificare rapidamente lo status di non-root (root utenti dall'ambiente chroot, quindi se si vuole che abbia effetto, è necessario sollevare il privilegio). E chroot non cambierà accesso alla rete. Questo può essere un utile sistema chiamate, tutte le volte bisogna prendere in considerazione, ma lo sforzo di fare ben preparati.

limitatezza delle risorse è uno strumento spesso dimenticato, che comprende sia il processo delle risorse di archiviazione, comprese le risorse. Queste restrizioni di attacchi denial servizio sono particolarmente utili:

Di archiviazione per, è possibile impostare per ogni utente o gruppo per ogni file system montato o la memorizzazione di file contingente numerico (limite). Nel sistema GNU / Linux, si veda contingente (1), quotactl (2) e quotaon (8 comprensione) per approfondita di questa funzione, tuttavia, dove anche se non sono in grado di utilizzare la maggior parte della classe dei sistemi UNIX includono il sistema delle quote. In GNU / Linux e molti altri sistemi, è possibile impostare "hard" limiti (non superare mai) e "Soft" limiti (che può essere in eccesso temporaneo).

Il processo è, è possibile impostare molti limiti, come ad esempio il numero di file aperti, il numero di processi, e così via. Questa capacità è in realtà parte dello standard (come una Single UNIX Specification (Single UNIX Specification)), tutti i sistemi UNIX di classe quasi onnipresente; a capire, vedere getrlimit (2), setrlimit (2) e getrusage ( 2), sysconf (3) e ulimit (1). Processo non può mai superare la "linea corrente", ma si può limitare fino a salire al "cap corrente". Purtroppo, vi è una anomalia problemi termine può farti confondere. "Riga corrente" è anche conosciuto come "soft" frontiere, limiti, conosciuto anche come "hard" confini. In questo modo, sarete in una situazione inusuale, il processo non potrà mai superare i limiti del processo di morbida (attuale) i limiti - e si può superare il limite soft contingente. Propongo di limitare il processo di utilizzo del termine "riga corrente" e "cap" (mai usare il termine "soft" e "duro"), così non ci sarebbe confuso.

Ridurre al minimo il tempo di privilegio

Ma solo quando richiesto di fornire privilegi - non danno un attimo.

Se possibile, utilizzare qualunque cosa il vostro bisogno immediato, i privilegi, e quindi dare loro in modo permanente. Una volta abbandonato definitivamente, quindi l'attaccante non può altrimenti far uso di tali privilegi. Ad esempio, la necessità di privilegi di root individuale a root, il procedimento può essere avviato (per esempio, attraverso un setuid root) e poi passare per l'utente meno privilegiati per l'esecuzione. Questo è il numero di server Internet (compreso il server Web Apache) i metodi utilizzati. Classe sistemi UNIX non consentono alcun programma per aprire 0 到 1024 porta TCP / IP, è necessario disporre di privilegi di root. Ma la maggior parte solo i server bisogno di aprire le porte di avvio di tempo, dopo che il privilegio è stato non ha più bisogno. Un modo è quello eseguito da root, il più presto possibile per aprire le porte privilegiate necessario, e quindi rimuovere in modo permanente i privilegi di root (compreso il processo appartiene ad alcun gruppo privilegiato). Andando a cercare di rimuovere tutti gli altri privilegi ereditati, per esempio, chiudere il più presto possibile disporre di privilegi specifici per aprire il file.

Se non è possibile rinunciare definitivamente i privilegi, allora si può eliminare, almeno temporanea dei privilegi più spesso possibile. Questo è meglio di rimuovere in modo permanente, i privilegi, perché se un utente malintenzionato in grado di controllare il programma, l'utente malintenzionato può riattivare il privilegio e utilizzarlo. Tuttavia, vale la pena fare.

Molti attacchi solo quando hanno il privilegio di ingannare la procedura di fare alcune cose al di fuori del programma e dei privilegi del programma sono attivati per avere successo (per esempio, creando una anomalia link simbolico e hard link). Se il programma di solito non consentire ai propri privilegi, allora l'attaccante vorrebbe approfittare di questo programma sarà più difficile.

Relativamente nuovo meccanismo

Finora, abbiamo discusso i principi effettivamente applica a quasi tutti i sistemi operativi, e, dato che il secolo 19, anni 70, quasi tutta la classe del meccanismo convenzionale for sistemi UNIX sono simili. Ciò non significa che esse sono inutili; semplice e la prova del tempo è proprio vantaggio. Tuttavia, alcuni di classe relativamente nuova di sistemi UNIX è aumentato a sostenere almeno il meccanismo di privilegio, vale la pena di conoscere. Anche se è facile trovare meccanismo collaudato nel tempo, ma sul relativamente nuovo meccanismo di informazioni non ancora noto. Allora, qui tratterò qualche meccanismo prezioso selezionati: jail FreeBSD (), Linux Security Module (LSM) quadro e il Security-Enhanced Linux (SELinux).

FreeBSD carcere ()

chroot () chiamata di sistema ha un sacco di problemi, come indicato sopra. Ad esempio, è difficile correggere l'uso, l'utente root può ancora imparare, ma non controlla l'accesso alla rete. sviluppatori di FreeBSD ha deciso di aggiungere una nuova chiamata di sistema per risolvere questi problemi, il nuovo sistema di chiamata chiamato carcere (). Questa chiamata è simile a chroot (), ma tenta di utilizzare più semplice ed efficiente da utilizzare. In un carcere, tutte le richieste (anche root) sono limitati carcere, carcere e nel processo possono comunicare solo con altri processi, e il sistema bloccato i tentativi utente root in carcere il percorso dal tipico. carcere verrà assegnato un indirizzo IP specifico, non può utilizzare qualsiasi altro indirizzo proprio indirizzo.

carcere () chiamata è unica per FreeBSD, che limita la sua utilità. Tuttavia, tutti gli OSS / FS ha un sacco di crossover tra l'impatto del kernel (impollinazione incrociata). Ad esempio, utilizzando il quadro di sicurezza di Linux è stato sviluppato per la versione Linux di un carcere. Inoltre, FreeBSD 5 è aggiunto un quadro flessibile MAC (da TrustedBSD progetto), comprese le funzioni di base di un modulo simile a SELinux. Tutti, in futuro, per vedere più di questa situazione, non essere sorpreso.

Linux Security Module (LSM)

Nel 2001 il Linux Kernel Summit su, Linus Torvalds ha un problema. Un certo numero di progetti di sicurezza diversi, tra cui il Security-Enhanced Linux (SELinux) di progetto, chiedendogli di aggiungere i loro metodi di sicurezza al kernel Linux. Il problema è che questi diversi metodi sono spesso incompatibili. Torvalds è alcun modo semplice per determinare quella che è la cosa migliore, per cui ha chiesto i progetti insieme per creare un quadro comune in materia di sicurezza di Linux. Così, l'amministratore può dare loro un metodo speciale installazione che vogliono la sicurezza. Dopo parecchie discussioni con Torvalds, Crispin Cowan ha istituito un gruppo per creare il quadro comune di sicurezza. Questo quadro si chiama Linux Security Module (LSM) disciplina, è ora parte del kernel Linux standard (come la versione 2.6 del kernel).

Concettualmente, il quadro LSM è particolarmente semplice. kernel di Linux è ancora facendo la sua ispezione di routine di sicurezza, ad esempio, se si scrive un file, è comunque necessario avere accesso in scrittura al suo.

Tuttavia, ogni qualvolta necessario se l'accesso al kernel Linux dovrebbe essere consentito di decidere se esso debba essere controllato - da un "libro" per chiedere un modulo di protezione a svolgere - per stabilire se il permesso di azione. Così, gli amministratori possono selezionare semplicemente che vuole utilizzare il modulo di sicurezza, e l'inserto come le altre modulo del kernel Linux. Da allora, il modulo di sicurezza determinerà ciò che è permesso.

quadro LSM progettato per essere così flessibile da poter ottenere diversi tipi di politiche di sicurezza. In effetti, un certo numero di progetti diversi insieme per garantire che la normativa sufficiente LSM competente del lavoro reale. Ad esempio, quando l'oggetto interno viene creato o eliminato quando il LSM in un numero di chiamate - non è perché queste operazioni possono essere sospesi, ma per il modulo di sicurezza può tenere traccia di dati importanti. Utilizzando una serie di diversi strumenti analitici per garantire che il quadro LSM non perdere nessuna anormalità importante della loro filiale di destinazione. I risultati mostrano che il progetto di quanto si creda più dura, e il suo successo è difficile vincere.

LSM è necessario comprendere le decisioni di progettazione di base fatto. In sostanza, il quadro LSM è stato progettato per quasi tutti i rami sono limitate eccezioni, non affidabile (autorevole). Filiale di fare un credibile abnorme decisione finale in assoluto: se l'eccezione è il ramo che la richiesta dovrebbe essere consentito, sarà consentita senza condizioni. Al contrario, non può che aumentare la credibilità del ramo anormale le altre restrizioni, non può concedere nuovi diritti. Teoricamente, se tutti i rami sono credibili LSM anormali, LSM quadro sarà più flessibile. Una chiamata in grado () ramo eccezione è attendibile - ma solo perché doveva sostenere la capacità regolari POSIX. Tuttavia, la lettera può fare tutti i rami anormale, è necessario per il kernel Linux, molti cambiamenti fondamentali, dice che il cambiamento non può essere accettato.

Molte persone temono che se la maggior parte del ramo anormale può credere, anche il più piccolo difetto diventa un disastro; e lasciare che il ramo eccezione è mezzo limitato che gli utenti non saranno sorpresi (In ogni caso, permessi originali UNIX still work) . quadro LSM modo che gli sviluppatori che desiderano limitare il metodo, e la maggior parte dei suoi sviluppatori fiduciosi di poter operare nel quadro.

LSM quadro per la comprensione di altre restrizioni è anche importante. LSM quadro è destinato a sostenere il controllo dell'accesso, la revisione e altre questioni di sicurezza non lo sono. LSM modulo stesso non registra tutte le richieste o le loro risultati, perché non potevano vedere tutti. Perché? Uno dei motivi è che il kernel non può chiedere il modulo LSM ha rifiutato la richiesta; Se volete audit questo rifiuto sarà un problema. Inoltre, a causa di motivi di prestazioni, alcune delle proposte per il ramo delle anomalie di rete e LSM campo di dati non viene utilizzato dal thread del kernel. Può controllare un numero di accesso alla rete, ma non abbastanza per sostenere il "flusso di etichetta di rete dati (in questo caso, diversi pacchetti di dati sono diverse etichette di sicurezza gestite dal sistema operativo). Queste restrizioni sono inadeguati, in contrasto con i principi di base delle idee generali; quadro LSM è stato esteso uno giorno la speranza di liberarsi di queste restrizioni.

Ciononostante, anche con queste restrizioni, il quadro LSM per limitare i privilegi di aggiungere è ancora molto utile. Torvalds quadro LSM con l'obiettivo fondamentale è realizzato: "Non mi piace la lotta tra i gruppi di protezione diversi. Spero che è indiretto, lasciami fuori da questa lotta, allora il mercato può lottare per decidere quale strategia e in modo da realizzare il massimo . "

Quindi, se si desidera limitare Linux concesso il privilegio del programma, è possibile creare completamente il modulo di previdenza. Se si utilizza un vero e proprio vincoli esterni che possono avere bisogno di farlo - per fortuna questo è possibile. Tuttavia, questo è molto importante, comunque, si devono ancora scrivere il codice del kernel. Se possibile, meglio non usare l'attuale modulo di sicurezza di Linux, ma provate a scrivere il tuo modulo personale di sicurezza. Alcuni modulo LSM disponibili, ma, Security-Enhanced Linux (SELinux) è il più maturo di un modulo di sicurezza di Linux, quindi cerchiamo di esaminare questo modulo.

Security-Enhanced Linux (SELinux) storia

Un po 'di storia contribuirà a aiutare a capire il Security-Enhanced Linux (SELinux) - ed essa stessa è una storia divertente. U. S. National Security Agency (National Security Agency, NSA) è stata a lungo relative alla sicurezza della maggior parte dei sistemi operativi, capacità limitata. Dopo tutto, uno di loro è di garantire che la U. S. Dipartimento della Difesa di usare il computer a fronte di attacchi senza fine per mantenere la sicurezza. NSA ha rilevato che la maggior parte dei meccanismi di sicurezza del sistema operativo, tra cui Windows e la maggior parte dei sistemi UNIX e Linux, ha soltanto raggiunto un "controllo selettivo di accesso (controllo di accesso discrezionale)" (DAC) meccanismo. sistema DAC è quello di eseguire il programma sotto l'identità dell'utente e la documentazione per determinare il proprietario del programma oggetto può fare. NSA che questo sia un problema serio, perché la stessa DAC vulnerabili o non autorizzato del programma è un fallimento di protezione. Invece, la NSA è stata a lungo sperato che il sistema operativo può anche sostenere il "controllo obbligatorio di accesso (controllo di accesso obbligatorio)" (MAC) meccanismo.

meccanismo di MAC consente all'amministratore di sistema può definire la politica di sicurezza del sistema, questa strategia è basata su factors altri, come ad esempio come il ruolo della dell'utente, la credibilità del programma e l'uso previsto, il programma utilizza il tipo di dati, ecc, per limitare il programma può Cosa fare le cose. Un piccolo esempio, con il MAC dopo che l'utente non può facilmente "segreto (Secret)" dati in "non riservate (non classificato)" dati. Mac, comunque, può effettivamente fare molto di più.

NSA è stato con il sistema operativo fornitori per molti anni, ma molti il principale fornitore di quota di mercato di integrazione per il MAC non è interessato a venire. Anche i provider che integra MAC è di solito anche essere utilizzato come "prodotti separati", piuttosto che prodotti convenzionali. In parte perché il vecchio Mac non è abbastanza flessibile.

Così tenta di sforzi di ricerca della NSA e rendere più flessibile e facilmente MAC essere inclusi nel sistema operativo. Essi utilizzano il sistema operativo Mach sviluppato prototipi delle loro idee, e successivamente ampliato il lavoro iniziato da "Fluke" del sistema operativo.

Tuttavia, è difficile convincere la gente che queste idee possono essere applicati a "sistema operativo real, perché tutti questi sono basati su piccoli" toy-class ", progetto di ricerca. Pochi al di fuori del prototipo può provare a vedere queste idee in una applicazione reale di come lavorare. NSA non può convincere un fornitore di titolo di aggiungere queste idee, e la NSA aveva alcun diritto di modificare il sistema operativo proprietario. Questo non è un problema nuovo, anni fa, DARPA ha cercato di costringere il suo sistema operativo proprietario, i ricercatori hanno utilizzato il sistema operativo Windows, ma molti hanno avuto problemi (vedi riferimenti sotto).

Così, la NSA sono imbattuto in un pensiero in retrospettiva sembra evidente: per utilizzare un giocattolo non è open-source del sistema operativo e realizzare le loro idee di sicurezza per dimostrare che (1) si può lavorare, (2) è specifico per il lavoro (attraverso per tutto il codice sorgente). Hanno scelto il mercato dominante, del kernel open source (Linux) e nel quale la realizzazione della loro idea che "Security-Enhanced Linux (SELinux). Non sorprende che utilizzano il sistema reale (Linux) per i ricercatori NSA può trattare con loro il giocattolo non possono affrontare. Per esempio, nella maggior parte dei the sistemi Linux-based, quasi tutti sono collegati dinamicamente, in modo che aveva di do qualche ricerca su come eseguire procedura di analisi approfondita (accesso loro su the "EntryPoint" e "execute" permissions la documentazione per more informazioni). Questo è un modo molto più successo, le persone che utilizzano SELinux prototipo prima di coloro che usano molto di più.

SELinux al lavoro

Così, a lavorare per SELinux? Metodo di SELinux in realtà molto comuni. Un importante nucleo di ogni oggetto, come ogni oggetto del file system, e ogni processo ha una correlazione alla loro "contesto di sicurezza (contesto di sicurezza)". contesto di sicurezza può essere basata sul livello di sicurezza militare (se non riservate, confidenziali e altamente confidenziali), in base ai ruoli utente, applicazione-based (così, un server Web può avere il proprio contesto di sicurezza), o su molti altri elementi. Quando si esegue un altro programma, il processo può cambiare il contesto di sicurezza. Anche, a seconda della procedura lo chiamano, un dato programma può essere eseguito in contesti di protezione diversi, anche se un utente inizia con tutte le procedure.

Poi l'amministratore di sistema può specificare che i privilegi concessi a creare un contesto di protezione con cui la "politica di sicurezza (politica di sicurezza)". Quando la chiamata di sistema si verifica quando, SELinux per verificare se tutti i privilegi richiesti sono stati concessi - e in caso contrario, ha rifiutato la richiesta.

Ad esempio, per creare un file, il contesto di protezione del processo in corso deve essere la directory padre del contesto di protezione del "Search (ricerca)" e "privilegio add_name, e deve (per creare) file nel contesto di protezione del" Create ( creare) privilegio ". Analogamente, il contesto di protezione di tale file con il sistema di file deve avere il privilegio di "correlati (associati)" (Così, per esempio, "altamente confidenziale" documenti non può scrivere una "sfiducia" in disco). Anche per i socket, interfacce di rete, host e la porta del controllo di accesso alla rete. Se la politica di sicurezza per coloro che sono tutte le autorizzazioni concesse, la richiesta sarà consentito da SELinux. In caso contrario, saranno vietate. Se lo si fa passo per passo tutte of questi controlli saranno più lenti, ma there sono programmi di ottimizzazione molti (based on anni di ricerche) to rende molto rapidamente.

L'esame è stato indipendente del sistema di classe nelle autorizzazioni al solito UNIX bit; nel sistema di SELinux, è necessario digitare entrambe le autorizzazioni UNIX standard, vi SELinux il permesso di fare qualcosa. Tuttavia, i controlli SELinux possono fare un sacco di permessi UNIX tradizionale per la classe è difficile da raggiungere.

Utilizzo di SELinux, è possibile creare facilmente un programma specifico può essere eseguito solo e soltanto nel contesto di un determinato server Web per scrivere file. Ancora più interessante è che se un attaccante ha segnato un server Web e diventare root, un utente malintenzionato non sarà dato il controllo del l'intero sistema - se c'è una buona politica di sicurezza, allora.

E 'stato difficile: Al fine di SELinux in modo efficace, è necessario avere una buona ragione dietro l'attuazione delle politiche di sicurezza SELinux. La maggior parte degli utenti avrà bisogno di una facile pratica di modificare la loro strategia iniziale. Alcuni anni fa ho cominciato a sperimentare la SELinux, che il tempo, la strategia iniziale non è ancora maturo, ci sono molti problemi. Per esempio, in quei giorni prima ho trovato la politica di campione precoce non consente l'aggiornamento del sistema orologio hardware (l'ultimo che ho inviato una patch per risolvere questo problema). Buona progetto iniziale di politica di sicurezza analoghi alla categoria di prodotto, NSA spera di fare con la comunità imprenditoriale, e cercare di farlo. Red Hat, un certo numero di sviluppatori Debian, Gentoo e gli altri si utilizza il quadro di base di SELinux, e la politica di sicurezza iniziale è stato creato, in modo che gli utenti possono immediatamente iniziare ad usarlo. Infatti, Red Hat prevede per tutti gli utenti nel loro funzionamento in entrambe le Fedora Core SELinux, e fornire strumenti semplici per rendere gli utenti non professionali possono selezionare alcune delle opzioni comuni a modify loro politica di sicurezza. C'è un LiveCD bootable Gentoo SELinux. Minimizzare questi gruppi renderà più facile processo di privilegio, senza un sacco di codice.

Qui siamo di nuovo alla posizione originale. SELinux può avvenire soltanto quando l'esecuzione del programma solo per permettere la trasmissione sicura, che controlla il processo di competenza (non una parte del processo). Pertanto, per sfruttare appieno il potenziale di SELinux, è necessario scomporre il processo di applicazione e le procedure per l'indipendenza, solo alcuni piccoli componenti privilegiata - proprio come come questa situazione sviluppata in assenza di procedure di sicurezza SELinux. Strumenti come SELinux vi permette di controllare meglio le autorizzazioni concesse, e creare così una difesa più forte, ma è ancora bisogno di dividere il programma in componenti più piccoli a quelli che consentono di controllo della riproduzione la massima efficacia.

Conclusione

Ridurre al minimo i problemi di sicurezza privilegio è la difesa più importante. Poiché il difetto è inevitabile, si vuole ridurre notevolmente la possibilità di difetti portare a problemi di sicurezza. Tuttavia, almeno un programma di sicurezza devono essere connessi con la sicurezza di alcune parti del codice, quindi non si possono ridurre al minimo solo la spesa di tutti gli altri privilegi. Anche quando si deve minimizzare alcuni di coloro che sono coinvolti nella sicurezza, dopo la parte o di coloro che devono essere corrette. A destra, è necessario evitare gli errori comuni.