giovedì 20 settembre 2012

IAT Hooking, Rootkit in User Mode

Nello scorso articolo abbiamo parlato dell'SSDT Hooking, nonchè dello sviluppo di rootkits che agivano in kernel mode. Oggi invece voglio parlarvi dello sviluppo di un rootkit che agisce in user mode, cioè non sfruttando le api native e quindi operando semplicemente a ring 3 come un normalissimo programma.
Vorrei illustrarvi, più precisamente, come effettuare una IAT hooking manuale, semplicemente sfruttando il nostro debugger.

Come dovreste già sapere la RAM, come dice la parola stessa, è una memoria ad accesso casuale. Quando il loader di windows viene interpellato per caricare un programma provvisto della signature del PE, la prima cosa che fa è caricare l'immagine del programma in memoria, insieme a tutte le librerie dinamiche (dll) a cui questo si appoggia. Quindi il loader caricherà tutte le funzioni che servono al programma in memoria, ma queste avranno un indirizzo assolutamente casuale e quindi, se il programma fosse adibito a chiamare esclusivamente una funzione ad un indirizzo preciso, potrebbe non trovarla e magari incappare in un aria di memoria inutilizzata oppure utilizzata da qualche altro programma. Per questo il loader di windows al momento del caricamento delle dll va a compilare una tabella chiamata IAT (Import Address Table), e il programma ogni volta che dovrà effettuare una call andrà ad interpellare prima questa tabella.

Dopo questa storiella, dovreste aver già capito cos'è lo IAT hooking, ma ve lo dico esplicitamente: è la modifica della IAT al fine di redirectare una call verso un'altra funzione creata ad hoc da noi.

Io in questo articolo voglio mostrarvi come effettuare questa tecnica per modificare una MessageBox manualmente tramite OllyDBG non modificando la funzione stessa in alcun modo. Questo però non centra niente con il vero processo di creazione di un rootkit.
Spesso viene usata la dll injection per questo scopo, ma è un pò più complicato, anche se, assolutamente niente di impossibile.
Prima di iniziare, infine, vorrei dire che è LA tecnica più rilevata e banale per fare un rootkit, ma secondo me vale la pena sapere di che cosa si tratta.

Iniziamo con crearci il nostro programma vulnerabile in C:


-------------------------------------------------------------------------------
// IAT Hooking.c //
// Visit DuxHack.blogspot.com //

#include <stdio.h>
#include <conio.h>
#include <windows.h>

int main(void)
{
MessageBox(NULL,"MessageBox","IAT Hooking",MB_OK);
}
-------------------------------------------------------------------------------


Bene, adesso apriamolo con OllyDBG e mettiamo un BreackPoint sulla call alla MessageBox, come nell'immagine:


Adesso che ci siamo sopra, guardiamo in basso e vediamo che c'è un indirizzo che ci interessa:


Eccolo, è proprio quel "00401870" che ci interessa. Andiamo a questo indirizzo e possiamo vedere una cosa del genere:


In basso c'è l'indirizzo dove attualmente il loader di windows, ha mappato la call originale "MessageBoxA" della "User32.dll".
Adesso premete il tasto destro e trovate la voce "View" e selezionate appunto "Module User32" tenendo bene a mente l'indirizzo. Fate "Go to" e mettete l'indirzzo. 
Bene siete esattamente nella procedura della call. Adesso, non dovrete fare altro che trovare un code cave oppure crearvelo e metterci una bella call ad una chiamata che volete voi, preceduta ovviamente dai suoi parametri. Quindi modificare la Call all'interno della dll redirectandola alla vostra API. Avrete ottenuto il risultato voluto.

Nessun commento:

Posta un commento

Ti potrebbero anche interessare

Related Posts Plugin for WordPress, Blogger...