Archivio per la categoria 'Linux Security'

Di evadere da una shell di sudo

18 agosto 2009

Ho in mente di scrivere questo per un po ', ma aveva un messaggio che passa su uno dei SecurityFocus mailing list che mi ha motivato per farlo fare. Il post chiese: "Come fai a limitare sudo in modo un utente non può cancellare l'intero disco rigido?". La risposta breve è, è estremamente difficile.

Sudo è uno strumento di protezione utilizzato all'interno del mondo UNIX e Linux. Permette all'amministratore di limitare l'accesso ai comandi di alto livello. Si differenzia dal comando su in su che dà immediatamente la radice di accesso a livello utente. Sudo permette all'amministratore di mettere a punto i comandi root può effettivamente accedere. Inoltre, sudo crea un audit trail di tutti i comandi eseguiti.

Il problema con sudo è che non ha visibilità quando uno strumento permette una shell di comando per essere deposto le uova. Ciò significa che un utente può comportarsi male sul sistema durante la generazione di un audit trail, che fa sembrare che hanno fatto nulla di male.

Provate voi stessi

Io vado a piedi attraverso l'esempio, perché si può sperimentare esattamente quello che voglio dire. Avrete bisogno di un sistema Linux per questo. Se non ne avete uno a portata di mano, Backtrack dovrebbe funzionare bene. Il sistema di test che sto utilizzando è basato su Fedora , ma sono abbastanza simili.

Passo # 1: Aggiungere se stessi al gruppo di utenti

Usare un editor di testo per modificare il file / etc / gruppo. Cercate il gruppo "users" e aggiungere il vostro nome account. In questo esempio ho aggiunto il nome dell'account "cbrenton".

utenti: x: 100: cbrenton

Passo # 2: Creare una voce sudousers

Poi abbiamo bisogno di modificare il file / etc / sudoers file per definire ciò che il gruppo di utenti è consentito di fare. Abbiamo bisogno di usare visudo per questo, che è un editor di testo basato sulla editor vi . Se hai dimestichezza con vi, digitare il comando "visudo" e aggiungere questa linea alla fine del file:

% Utenti ALL = / usr / bin / less

Se non sapete vi, ti darò i comandi esatti. Ricordo tutto è case sensitive:

visudo

G

o <- minuscolo lettera O

% Utenti ALL = / usr / bin / less

<esc> <Esc>

: Wq

Fase 3: Attività sudo Monitor

Aprire una seconda finestra di terminale e usare "su -" per assumere i privilegi di root. Digitare il comando:

tail-f / var / log / secure

Questo ci permetterà di monitorare tutte le attività sudo.

Fase 4: eseguire un comando sudo

Nel primo tipo finestra di terminale il comando:

sudo less / etc / hosts

Vi verrà richiesta la password (la password, la password non root). Una volta che si digita la password si dovrebbe vedere il contenuto del file / etc / hosts. Nella finestra del secondo terminale si dovrebbe ora avere una voce di registro simile alla seguente:

18 ago 16:07:58 fubar sudo: cbrenton: TTY = pts / 4; PWD = / home / cbrenton; utente root =; COMANDO = / usr / bin / less / etc / hosts

Così possiamo vedere data / ora, che ha eseguito il comando, che erano sul terminale, quale directory sono stati dentro, quello che le autorizzazioni a livello usavano, e che cosa hanno eseguito il comando tra le opzioni della riga di comando (in questo caso una specifica di file) . Fin qui, tutto bene.

Passo 5: Bust a conchiglia

Nella finestra del terminale prima (esegue il comando meno) digitare:

! <Invio>

Ora dovrebbe essere guardando al prompt dei comandi di root. Per verificare che si è in radice, infatti, digitare il comando:

whoami

Si noti che digitando il comando "whoami" non ha generato una voce di registro di protezione. In altre parole, una volta generato una shell di comando con il comando di meno, possiamo fare tutto quello che vogliamo e sudo non lo registro.

Fase 6: verifica supplementare

Nella finestra del terminale prima in cui "meno" è nel tipo di fondo, nel comando:

top

Questo stampa statistiche sul sistema in esecuzione.

Nella finestra del terminale seconda nota il terminale in uso. Nella voce di sopra log esempio il terminale è "TTY = pts / 4" ma la tua potrebbe essere diverso. Prendere nota del terminale. Ora, nel presente comunicato corrisponde seconda finestra:

<CTRL>-C

per uccidere il comando tail. Ora eseguite il comando:

ps ax | grep 'pts / 4'

Sostituendo la "pts / 4" con qualsiasi nome del terminale si è preso nota. Si dovrebbe ricevere un output simile al seguente:

17330 pts / 4 Ss 0:00 bash

18392 pts / 4 S 0:00 less / etc / hosts

18410 pts / 4 S 0:00 / bin / bash

18432 pts / 4 S + 0:00 cima

Questo ci dice che abbiamo due gusci in esecuzione su tale terminale. Il primo sta guardando il file host, mentre il secondo è in esecuzione il comando top. Modo che il sistema fa realmente vedere che stiamo giocando intorno all'interno del guscio secondo, è solo che sudo non può accedere.

Alcuni altri comandi di livello radice si può provare che non danno nulla:

iptables-L

ifconfig

lsof-i

Quando si è convinti di avere pieno accesso root, tornare indietro e controllare il registro per verificare che sudo non ha registrato nulla:

tail / var / log / secure

Quando hai finito con la shell nella finestra del terminale prima, digitare:

uscita

q

Che cosa abbiamo imparato?

Abbiamo imparato che non possiamo consentire agli utenti di avere pieno accesso al sistema sudo ed effettivamente mantenere un audit trail di quello che fanno. L'accesso deve essere limitato agli strumenti che non supportano invocare una shell. Se siamo sicuri, è una semplice questione di controllare le pagine man. Prova questo:

uomo meno

/

conchiglia

L '"uomo di meno" comando porta in primo piano il manuale per l'utilizzo del comando "meno". Premendo il tasto backslash porta in primo piano la funzione di ricerca. Quando si digita la parola "guscio" e premere il tasto Invio, salta l'uomo alla prima istanza della stringa "shell" e mette in evidenza ogni istanza. Si noti l'uomo sezione salito a descrive come meno può invocare una shell. Ora sappiamo che non possiamo consentire l'accesso al comando sudo "meno". Una soluzione migliore potrebbe essere il "gatto", comando che non supporta invocare una shell.

Un'altra possibilità è quella di utilizzare semplicemente uno strumento diverso. Per esempio l'op strumento è stato specificamente progettato per affrontare alcune delle carenze di sicurezza in sudo, compresa la capacità di controllare l'accesso alla shell.

Executive Summary

Sudo è uno strumento di grande sicurezza se lo usate con saggezza. Uno degli errori più comuni commessi con sudo lo sta usando per consentire l'accesso agli strumenti di livello di tutte le radici. Sudo in grado di generare una traccia di controllo efficace, ma solo se è limitata a strumenti che non hanno capacità di shell.