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?