Che cos'è un rootkit?

21

Come follow-up a " Tripwire - Is It Security Theatre ", Sto cercando di avere un'idea migliore di cosa sia un rootkit. Per essere più chiaro:

  • Che cos'è un modulo del kernel?
  • Che cosa è ad alto livello il flusso per come viene caricato e perché / quale memoria ha un valore?
  • I kernel Linux ricevono patch o hanno altre difese che impediscono l'installazione dei rootkit da parte di qualcuno che ha già acquisito i permessi di root (almeno sui sistemi live da un utente remoto)?

Significato: quali input / output creano un valore che richiede l'accesso ring-0 alla terraferma?

Se non è chiaro, non sto cercando di fare il root di un sistema, o consigli su come farlo, ma sono interessato a come qualcuno che abbia familiarità con i rootkit possa definire il come e il perché della loro natura.

Se limitare l'argomento a Linux è utile, per me va bene.

    
posta blunders 04.01.2012 - 17:38
fonte

3 risposte

27

Un rootkit è un set di strumenti che si esegue su un computer di destinazione quando in qualche modo si ottiene l'accesso ad esso con i privilegi a livello di root. Il punto del rootkit è trasformare quell'accesso transiente in una porta sempre aperta. Un esempio di un rootkit sarebbe una modifica del sshd binario, in modo che accetti sempre " 8gh347vb45 " come password per root , indipendentemente da quale sia la password "normale" per root. Permette all'attaccante di tornare più tardi, senza dover ricominciare da capo l'exploit che ha usato per primo.

Il primo compito di un rootkit è nascondersi e resiste agli aggiornamenti. Se il rootkit modifica semplicemente sshd (che è un esempio), il prossimo aggiornamento del pacchetto openssh rimuoverà il rootkit. Un rootkit più resistente altererebbe anche il gestore dei pacchetti, in modo che quando openssh viene aggiornato, il nuovo sshd viene modificato automaticamente in modo che il punto di accesso aggiuntivo per l'attaccante sia tenuto aperto.

I rootkit più potenti modificano il kernel , che è la parte del software che gestisce effettivamente l'hardware. Tutti i processi (per tutti gli utenti, incluso root), quando accedono ai dati o alle risorse hardware (ad esempio, leggendo o scrivendo file), lo fanno chiedendo gentilmente il kernel. Un rootkit installato nel kernel può nascondere i file in modo abbastanza efficace e può reinstallare se stesso ad ogni aggiornamento del kernel, poiché tale aggiornamento sarebbe la sostituzione del file contenente il codice del kernel con un altro - cioè un'operazione che passa necessariamente attraverso il kernel.

Un modulo del kernel è un pezzo di codice che viene caricato dinamicamente nel kernel. In Linux, fino ad un certo punto della serie 1.3.x, c'era un singolo blocco di codice monolitico che veniva caricato in RAM dal bootloader in un colpo solo. I moduli sono blocchi di codice che possono essere aggiunti in un secondo momento al kernel live; il loro punto era inizialmente quello di consentire al kernel potenzialmente di gestire centinaia di tipi di hardware senza dover contenere il corrispondente codice del driver nella RAM in ogni momento. L'idea è che quando viene rilevato un nuovo pezzo di hardware sulla macchina, il codice corrispondente viene caricato e collegato al kernel, come se fosse stato lì fin dall'inizio.

L'utente root ha il potere di chiedere il caricamento di un modulo. Quindi questo è un modo per un codice con privilegi di root per ottenere del codice arbitrario inserito nel kernel stesso, e in esecuzione con i poteri concessi al kernel, cioè la padronanza su tutto l'hardware e i processi (il cosiddetto 'ring 0' in il mondo x86). Questo è esattamente ciò di cui ha bisogno un kernel rootkit.

Modifica: come per la terza domanda (puoi applicare patch alle rookits), la risposta generica è no (per costruzione, su un sistema Unix, root può fare tutto su una macchina), ma la risposta specifica può essere . Ad esempio, esistono framework di sicurezza che aggiungono vincoli a ciò che la maggior parte dei processi di root può fare (ad es. SELinux ), e può non consentire il caricamento del modulo del kernel. Ciò significa che l'accesso root temporaneo previsto da parte dell'utente malintenzionato non è un accesso root true , ma solo un "quasi-root". Un'altra possibile caratteristica è moduli firmati (il kernel rifiuterà i moduli che non sono stati firmati crittograficamente, quindi il rootkit dovrebbe individuare e utilizzare la chiave privata prima di installare il proprio modulo, cosa che potrebbe non essere possibile se tale chiave non è memorizzata sulla macchina stessa) (non sono sicuro che il supporto dei moduli firmati sia attualmente integrato nel kernel di Linux). Inoltre, i moduli devono essere collegati al codice del kernel, rendendoli piuttosto sensibili alle variazioni tra le versioni del kernel - quindi anche in assenza di contromisure effettive, è difficile per un rootkit attendibilmente reinfettare i kernel più recenti aggiornamenti.

    
risposta data 04.01.2012 - 17:56
fonte
4

Poche cose non valgono nulla quando si applica la risposta di Tom Leek ad altri sistemi operativi:

  1. Sebbene i moduli del kernel funzionino diversamente su BSD, OSX e Windows, il concetto pertinente rimane lo stesso.
  2. La maggior parte dei driver è contenuta nei moduli del kernel. Pertanto, a volte i moduli del kernel sono indiscriminatamente (e non correttamente) chiamati driver. Lo trovo particolarmente vero su Windows.
risposta data 04.01.2012 - 20:57
fonte
3

All'inizio il termine "rootkit" era relativo solo al dominio NIX (root non è una parola casuale), ma ora si riferisce a ogni pezzo di software che consente di ottenere privilegi di "root" in ogni sistema operativo. Questo software può essere nello spazio utente o nello spazio del kernel (quindi in quest'ultimo è necessario un modulo del kernel o un driver). Tipicamente i rootkit operano nello spazio del kernel perché è più facile nasconderli e cancellare le loro tracce. Ma potresti avere un'applicazione per lo spazio utente che sfrutta un overflow del buffer in un'applicazione privilegiata che ti dà i privilegi di root!

Ma è vero: quando usiamo il termine rootkit pensiamo al codice del kernel per ottenere privilegi elevati.

Le tue domande seguenti sono molto espansive per rispondere in questo contesto. Penso che puoi trovarli cercando su Google per ogni argomento. Quindi per il modulo del kernel devi distinguere Linux o Windows o Mac. I principi alla base sono +/- uguali, ma sai che il Diavolo è nei dettagli! : -)

    
risposta data 05.01.2012 - 08:12
fonte

Leggi altre domande sui tag