Dall’inizio del nuovo anno una nuova tipologia di rootkit è stata scoperta in the wild. l’MBR Rootkit, il rootkit che infetta il Master Boot Record per nascondersi all’interno di Windows, ha fatto molto parlare di sé e ha fatto sorgere molte discussioni sul futuro dei nuovi malware, a causa del suo nuovo approccio mai utilizzato prima se non per alcuni proof of concepts.

Dopo tre mesi, il team che sta alle spalle di questa infezione ha cambiato codice del malware piu volte, tentanto di nascondere ogni volta in maniera migliore la propria creatura.

Inizialmente è stato introdotto un driver per sovrascrivere il MBR, invece di utilizzare le API del Win32 subsystem. In questo modo, è stato tentato di evadere alcuni semplici controlli HIPS che avrebbero individuato un tentativo di accesso in lettura/scrittura a basso livello.

Ora che le società ed alcuni singoli sviluppatori hanno rilasciato dei tool di rimozione per questa infezione, il team ha tentato di cambiare nuovamente le carte in tavola.

Come spiegato in un articolo precedente, l’MBR rootkit modifica le routine IRP_MJ_READ e IRP_MJ_WRITE del driver disk.sys così da poter offuscare la lettura del contenuto del MBR, mostrando invece una versione pulita del Master Boot Record salvata prima dell’infezione.

Ora il gioco è diventato piu sporco. Il rootkit ora modifica in memoria il driver CLASSPNP.sys, poi modifica piu routine IRP_MJ_* del driver disk.sys e fa lo stesso con il driver cdrom.sys.

Per capire meglio il perche di questo comportamento, scendiamo un po piu in dettaglio.

Le routine IRP_MJ_READ/WRITE del driver Disk.sys puntano – in una macchina non infetta – ad una funzione chiamata ClassReadWrite, che è una funzione fornita dal driver CLASSPNP.sys.

Ora, se il rootkit modifica le routine IRP_MJ_READ/WRITE per nascondere il codice nel Master Boot Record, tutto quello che uno sviluppatore deve fare è ritrovare il puntatore all’indirizzo della funzione CLASSPNP!ClassReadWrite e, di conseguenza, leggere il contenuto del MBR senza alterazioni da parte del rootkit.

Ora però sorge il problema: ClassReadWrite non è una funzione esportata dal driver CLASSPNP.sys, e ci sono alcuni modi per poter ritrovare l’indirizzo di questa funzione.

Il primo modo sarebbe quello di effetuare un’analisi del codice della funzione chiamata ClassInitialize. Questa funzione è esportata dal driver CLASSPNP.sys e contiene l’indirizzo originale della funzione ClassReadWrite.

Ecco la prima contromossa usata dal rootkit: il malware modifica la funzione ClassInitialize, in modo tale che non è piu possibile individuare l’indirizzo originale in memoria della funzione ClassReadWrite.

Un altro modo sarebbe quello di analizzare il driver cdrom.sys. Le routine di dispatch IRP_MJ_READ/WRITE del driver cdrom.sys puntano alla stessa funzione ClassReadWrite. Questo significa che dal driver cdrom.sys sarebbe possibile recuperare l’indirizzo originale della funzione ClassReadWrite.

Seconda contromossa usata dal rootkit: ora, oltre al driver disk.sys, modifica anche cdrom.sys.

Inoltre, il terzo cambio è l’aggiunta di altri hook (inutili dal punto di vista del codice) ad alcune funzioni IRP_MJ_*, hook sembrerebbe aggiunti semplicemente per rendere le cose piu difficili alle società di sicurezza.

Ora le routine di dispatch che il rootkit modifica sono anche:

IRP_MJ_CREATE
IRP_MJ_CLOSE
IRP_MJ_FLUSH_BUFFERS
IRP_MJ_DEVICE_CONTROL
IRP_MJ_INTERNAL_DEVICE_CONTROL
IRP_MJ_SHUTDOWN
IRP_MJ_POWER
IRP_MJ_SYSTEM_CONTROL
IRP_MJ_PNP

La realtà, al momento, è che le società di sicurezza sono indietro rispetto a questa infezione e il team che sta sviluppando il rootkit sta facendo il proprio gioco, vincendo pure. Gran parte dei programmi sviluppati per individuare e rimuovere questa infezione sono stati bypassati da queste ultime release del malware. In aggiunta, il team dietro l’MBR rootkit sembra molto attivo.

La buona notizia, però, è che Prevx CSI riesce ad individuare e rimuovere l’MBR rootkit. Da Gennaio, quando abbiamo aggiunto le routine per l’individuazione e la rimozione di questo rootkit nel nostro engine anti-rootkit, non è stato mai necessario aggiornare o modificare il codice per individuare le nuove varianti della componente rootkit dell’infezione.

Prevx Blog