Introduzione all`analisi dei malware

Transcript

Introduzione all`analisi dei malware
Introduzione all'analisi dei malware
Relatore: Quarta Davide
Introduzione
Appassionati
Ricercatori
Sviluppo di
contromisure
effettive
Amministratori
- Risk management
- incident response
- HIPS
- fingerprints
Strumenti e Tecniche
Creazione di un
ambiente sicuro
Quanto è sicuro?
-VM Drivers
-Red Pill (SIDT)
-CPUID
-Registry Keys
-Guest/Host communication
-Bug in Network Drivers
-Bug in VM components
Strumenti e Tecniche
Malware Analysis
Static Analysis
Black Box
Dynamic Analysis
White Box
Static Analysis
Analizzare il file senza
eseguirlo
Lunga
Complessa
Esaustiva
-IDA Pro (http://www.hex-rays.com/idapro/), un ottimo disassembler
commerciale, al momento è possibile anche scaricare la versione 4.3
free.
-CFF Explorer (http://www.ntcore.com/exsuite.php), un ottimo PE
editor, utilizza anche una lista di signatures per poter riconoscere con
quale compilatore un file pe sia stato compilato, o se sia stato
utilizzato un protettore/packer comune.
-Malzilla (http://malzilla.sourceforge.net) utile per visualizzare
codice/script di exploit contenuti nelle pagine web, è molto utile per
analizzare pagine che utilizzano javascript offuscati.
-PEid (http://www.peid.has.it)
-md5sum, sha1sum
Dynamic Analysis
Black Box
effettuata senza
dover comprendere i
“meccanismi interni”
del malware
Analisi durante
l'esecuzione
White Box
Più complessa, richiede
maggiori conoscenze
rispetto alla precedente,
consente di ottenere
informazioni
più approfondite
Black Box
-Sysanalyzer (http://labs.idefense.com/software/malcode.php)
-Process Explorer
(http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx)
-Process Monitor
(http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx)
-TCPView
(http://technet.microsoft.com/en-us/sysinternals/bb897437.aspx)
-Wireshark (http://www.wireshark.org/)
-oSpy (http://code.google.com/p/ospy/)
White Box
-Windbg
(http://www.microsoft.com/whdc/DevTools/Debugging/default.mspx)
-Ollydbg (http://www.ollydbg.de/)
-IDA Pro (http://www.hex-rays.com/idapro/)
-Rasta Ring 0 debugger (http://rr0d.droids-corp.org/)
-Syser Debugger (http://www.sysersoft.com/)
-PaiMei (http://pedram.openrce.org/code/paimei/)
Introduzione al linguaggio assembly
01110111010001
01010010110101
11010111011010
x86 32bit
Istruzioni
Opcodes
Introduzione al linguaggio assembly
General purpose registers:
EAX: accumulatore
●EBX: puntatore a dati
●ECX: contatore
●EDX: puntatore I/O
●ESI: puntatore di origine per le operazioni sulle stringhe
●EDI: puntatore di destinazione per le operazioni sulle stringhe
●ESP: stack pointer
●EBP: puntatore a dati nello stack
●
EIP: instruction pointer
è un registro particolare e contiene l'inidirizzo della prossima
istruzione da eseguire.
●
Flags:
Status Flags (CF, ZF, SF...), DF...
Introduzione al linguaggio assembly
Istruzioni
MOV EAX, EBX
●MOV EAX, [EBX]
●
JMP $1234
●
CMP EAX, EBX
●
JNZ/JNE, JZ/JE, JGE...
●
Introduzione al linguaggio assembly
Stack
Struttura LIFO
●ESP punta a questa area di memoria
●Manipolato tramite push e pop
●
CALL inserisce nello stack l'indirizzo della
istruzione successiva
●RET utilizza l'indirizzo presente nello stack
per ritornare alla istruzione successiva alla
chiamata della sottoprocedura.
●
Da linguaggio di alto livello all'assembly
int somma(int a, int b){
return (a+b);
}
int main(void){
int i,j;
for (i=0, j=0;i<5;i++){
j = somma(i,j);
printf("hello, %d\n",j);
}
return 0;
}
Da linguaggio di alto livello all'assembly
Listato 1
Il formato PE
Formato dei file eseguibili di windows
●
A noi interessano:
● PE Header
● Entry point
● Image Base
●
Section Table
● IMAGE_DATA_DIRECTORY
● IMAGE_DIRECTORY_ENTRY_IMPORT (Import Table)
● Le sezioni possono contenere dati o codice
La Import Address Table
IAT:
●Tabella di “puntatori a funzioni esterne”
utilizzate dalla applicazione
●Locazione delle dll dinamica,
la struttura viene popolata a runtime dal PE loader
Quando viene chiamata una di queste procedure esterne
viene utilizzato il puntatore corrispondente all'interno
della IAT.
●
PE Packers
Rendono
maggiormente
complessa
l'analisi
e il riconoscimento da parte di antivirus
●Il contenuto originale viene compresso/cifrato
●All'interno dell'eseguibile saranno presenti i dati e lo stub
●
L'entry point punta allo stub che solitamente:
● salva il contenuto dei registri
● ripristina i dati in chiaro
● ripristina la IAT originale
● ripristina il contenuto dei registri
● passa il controllo al entry point originale
●
Lo stub utilizza una propria IAT, per questo deve essere
ripristinata la IAT originale dopo l'esecuzione.
●L'analisi statica è difficoltosa, è necessario rimuovere il
layer dello stub e ripristinare i dati in chiaro.
●
Unpacking
Se viene eseguito può essere unpackato
● I dati devono essere presenti in chiaro in memoria
per essere eseguiti
● Conoscendo il momento esatto in cui i dati sono
presenti in memoria possiamo ripristinare i dati
in chiaro
●
È necessario quindi:
● arrivare all'Entry Point originale (OEP)
● Dumpare il processo
● Modificare il PE header per ripristinare l'Entry Point
● Ripristinare una IAT valida
(ci sono tool appositi ImpRec, Revirgin...)
●
Questo approccio è riduttivo per packer complessi
e implementazioni di VM.
●
UPX Unpacking
Si nota immediatamente che il PE è compresso:
● Ci sono poche import
● I dati presenti nella directory resource del PE
sono inconsistenti
● All'entry point del PE notiamo lo stub di UPX.
●
UPX Unpacking
Arrivati all'OEP
ricostruiamo la IAT:
Antidebug
IsDebuggerPresent
●RDTSC, QueryPerformanceCounter, GetTickCount
●PEB->IsDebugged
●NtGlobalFlags
●HeapFlags
●...
●
Una reference utile sull'argomento è
“Windows Anti-Debug Reference” (Nicolas Falliere)
http://www.securityfocus.com/infocus/1893
●
Domande?