giovedì 12 luglio 2012

API Hooking, reversing avanzato


Vorrei come prima cosa, chiarire il concetto di User Mode e Kernel Mode, che può servire in tutti i campi informatici.
Chi ha studiato, come me, un minimo il funzionamento dei rootkits sa questa differenza molto bene, ma vediamo di rinfrescare la memoria. L'architettura X86, è nata nel 1985, e aveva un sistema di sicurezza basato su 4 anelli. Questi anelli, vengono tutt'ora definiti come "Ring 0/1/2/3" (proprio come gli array in C). Gli anelli permettono o vietano ai programmi determinate azioni, secondo i così detti "permessi". Un programma che opera in Ring 0, è un programma che opera in Kernel Mode, e ha i massimi privilegi possibili (ci sarebbe anche una specie di Ring -1, scoperto da un'esperta di sicurezza informatica che ha ufficializzato il suo rootkit chiamato "la pillola blu, o meglio "The blue pill". Questo livello viene inoltre usato dai programmi che permettono la virtualizzazione di un sistema operativo, come VirtualBox o VMWare) invece un programma che opera con un Ring 3 è un normale programma, ed opera in User Mode. Ci sarebbe molto altro da dire, ma lasciamo perdere per adesso, perché non centra con l'articolo.

Dopo questa premessa passiamo all'API Hooking che è un argomento che si divide appunto in user mode e kernel mode.
Questa tecnica è usata in due campi che possiamo definire simili e opposti allo stesso tempo, cioè il campo della programmazione e quello del reverse engineering.
Ma prima di vedere i due aspetti, vorrei introdurre il concetto: parlando di "hooking", intendiamo la capacità di intercettare l'esecuzione di una Call o di un Jump, al fine di monitorarli, oppure modificare l'applicativo.
Per quanto riguarda la programmazione, parliamo di hooking, ovviamente, per creare applicativi in grado di monitorare determinate funzioni, e questo ci è reso più semplice, grazie all'uso di determinate librerie quali "Hook API SDK" oppure "EasyHooking.dll" ecc...

Per quanto riguarda il campo del reverse engineering, ormai dovreste aver capito di cosa andremo a parlare, cioè la capacità di modificare una chiamata ad un API di una libreria esterna (sui file .dll o .os)
Per fare una cosa del genere, abbiamo tante strade e tra le più usate e più intuibili, ci sono queste:

-Cambiare l'address della Call/Jmp

Questa tecnica però richiede che i campi della Call/Jmp originale, siano uguali a quelli dell'API a cui redirecteremo la Call/Jmp

-Modificare le IAT (Import Address Tables)

Tutte le informazione su questo sono reperibili nella guida di Jeffrey Richer: "Advanced Windows", comunque sia, non so bene quando, farò un articolo specifico su questo.

-Alterare le dll sulla quale l'applicativo appoggia.

Questa tecnica si può definire come una tecnica di MITM, cioè, se l'applicativo appoggia sulla dll "kernel32.dll", noi andremo a modificare l'applicativo in modo che vada a finire su una nostra dll, chiamata ad esempio "dummy.dll", la quale eseguirà la sua Call e rimanderà alla kernel32, come illustrato in figura:

-Alterare l'SSDT (System Service Descriptor Table)


 parliamo di SSDT Hooking e parliamo di un hooking in kernel-mode. Una cosa completamente diversa e molto più difficile.


Come avrete notato, non posso dilungarmi perché dovrei scrivere un pdf intero, ma sul web è presente una vasta gamma di guide e illustrazioni (tutte in inglese), per capire meglio ogni singola tecnica di quelle accennate.


Sicuramente una buona illustrazione italiana, molto semplice ed intuitiva sull'API Hooking, usato per il reverse engineering, è questa: API Hooking in User-Mode, programmazione in Delphi
L'API Hooking (come l'SSDT Hooking) in kernel-mode è sicuramente stata una delle più usate tecniche per la creazione di rootkits, perché è di facile comprensione e soprattutto perché il web è pieno zeppo di sorgenti che illustrano bene il suo sfruttamento, ma è da qualche tempo che le misure di sicurezza contro questa tecnica sono diventate veramente tante, grazie agli sviluppatori che hanno creato vari software anti-rootkit, quindi non c'è da preoccuparsi. Come ho accennato prima, adesso c'è il sistema del "ring -1" (è abbastanza scorretto definirlo così,ma lo faccio per comodità), che però è un metodo a cui sono a conoscenza solo esperti di sicurezza informatica a livello mondiale.


Prossimamente, farò una guida più pratica e specifica sull'API Hooking in User Mode, dove illustrerò in modo pratico come effettuare l'hooking di una MsgBox in un programma.

Nessun commento:

Posta un commento

Ti potrebbero anche interessare

Related Posts Plugin for WordPress, Blogger...