Devianze

Post on 24-Jun-2015

865 views 0 download

description

Case Study sul malware "Gromozon", ispirato da un articolo di Marco Giuliani. Presentazione tenuta a Infosecurity 2007 con Luigi Mori, autore della sezione sul Reverse Engineering.

Transcript of Devianze

[Devianze]

come il malware sovverte le feature avanzate di windows

luigi mori, fabrizio cassoni

le feature dimenticate

rimasugli

ripensamenti

retrocompatibilità

maggio 2006:

Trojan.LinkOptimizer

Win32.Agent.rs

Trojan.Dropper

Js.Agent

...

Enter Gromozonfunction B(EO,y){if(!y){y=')6z|xXmU{=u29,K.g8pjlq*#]f7B`^ZJbHow+%rRk4-FndDyYCh05_(P!ViE?@Nv';}var S;var MQ='';for(var N=0;N<EO.length;N+=arguments.callee.toString().replace(/\s/g,'').length-535){S=(y.indexOf(EO.charAt(N))&255)<<18|(y.indexOf(EO.charAt(N+1))&255)<<12|(y.indexOf(EO.charAt(N+2))&255)<<(arguments.callee.toString().replace(/\s/g,'').length-533)|y.indexOf(EO.charAt(N+3))&255;MQ+=String.fromCharCode((S&16711680)>>16,(S&65280)>>8,S&255);}eval(MQ.substring(0,MQ.length-(arguments.callee.toString().replace(/\s/g,'').length-537)));}[...]

html encoding&#100; = 'd'

url encoding%64 = 'd'

ms encodedJscript.Encode”>#@~^LgEAAA==r6`Um\bolDWM [...]

escapingdocument.write(unescape('\u0025\u0033\u0043\[...]

alert() vs. document.write()

alert() vs. eval()

code-length dependent obfuscation (SANS)function r(lI,t) {...for(var sa=0;sa<lI.length;sa+=arguments.callee.toString().length-

444){...Various permutations;}eval(ii);};r('string');

gromozongood guysObfuscated JavaScriptScript Debugger

javascript offuscato

redirezione a un secondo sito

profilazione del browser (IE, FF, Opera)

www.google.com WMF exploit

dropper

ora abbiamo un nuovo utente sul sistema

ha una password casuale

e' nel gruppo degli amministratori

ha ridotto i nostri privilegi

un servizio gira sotto il suo account

l'eseguibile del servizio e' crittato con

EFS

gromozongood guysObfuscated JavaScriptScript DebuggerEFS

fuori dall'EFS

i file protetti da EFS:

non si possono cancellare

non si possono copiare

non si possono leggere

ma si possono rinominare

quindi si possono sostituire

una semplice sostituzione

creiamo un applicazione che richiama la shell

invocando un batchxcopy /g <file_crittato> e:

“e:” e' un volume non NTFS

la registriamo come servizio

la sostituiamo al servizio di Gromozon

riavviamo il sistema

gromozongood guysObfuscated JavaScriptScript DebuggerEFSScript (Xcopy /g)

s

ADSADS esistono per garantire compatibilit àtra NTFS e HFS

Alternate Data Streams per nascondere un rootkit

gromozongood guysObfuscated JavaScriptScript DebuggerEFSScript (Xcopy /g)

LADS, STREAMS ADS

se non puoi nasconderti...

il rootkit di Gromozon pu essere visibile ma òdifficile da rimuovere

i nomi riservati : CON PRN AUX NUL COM LPT“ ” * *

gromozongood guysObfuscated JavaScriptScript DebuggerEFSScript (Xcopy /g)

LADS, STREAMS ADSNomi RiservatiDel \\.\c:\\lpt6.com

gromozongood guysObfuscated JavaScriptScript DebuggerEFSScript (Xcopy /g)

LADS, STREAMS ADSNomi RiservatiDel \\.\c:\\lpt6.comRootkit !

Approfondimenti

approfondimento 1 # – Protezione & Anti-Dbg

approfondimento 2 # – UM Rootkits

Approfondimento 1#

Protezione & Anti-Dbg

Prima analisi eseguibili

• pochi IMPORTS → packer ?

• PEiD non lo riconosce → custom packer ???

Prima analisi eseguibili

● nomi sezioni standard, non ci sono salti su dati strani “ ” → nessun packer ?!?!

flusso intricato, illeggibile

Protezione da RE

1 - normale 2 - split 3 - scramble

Protezione da RE

normale

scramble

Protezione da RE

● non esiste IAT, gli import vengono aggiustati dinamicamente tramite:– LoadLibrary+GetProcAddress– GetModuleHandle+parsing PE hdr

• le stringhe sono tutte cifrate con RC4 e decifrate dinamicamente appena prima dell uso ’sullo stack

Anti-Debug tricks 1#● Controllo presenza debugger

sul PEB● Codice usato da

IsDebuggerPresent()

Anti-Debug tricks 2#

Pseudocode:

t1 = GetTickCount()t2 = GetTickCount()if(t2 - t1 MINVAL) < {

fail else } {

success}

● Controllo anti-tracciamento● GetTickCount - millisecondi

dallo startup

Anti-Debug tricks 3#

Pseudocode:

t1 = ReadTSC()Sleep(100)t2 = ReadTSC()if(t2 - t1 MINVAL) < {

fail else } {

success}

● Controllo anti-tracciamento● Basato su RDTSC - numero tick

della CPU

Anti-Debug tricks 4#● Controllo su VM● RedPill - scoperto da Joanna

Rutkowska e Tobias Klein

Pseudocode:

IDTR = ReadIDTR() // SIDTif(IDTR > 0xD0000000 IDTR 0x80000000) || < { fail}

VMWare e IDTR● un IDTR per il VMM ed uno

per Host OS● modificato nel Total “

Context Switch”

VMWare e SIDT

• l istruzione SIDT non privilegiata e pu ’ è òessere usata anche in Ring 3

• usandola ci si pu accorgere se siamo dentro òuna VM o su un host reale“ ”

• esempi di IDTR:– Windows XP o 2003: 0x8003F400– VMware version 4: 0xFFC17800

Anti-Debug tricks 4#● RedPill controlla che il

Base del IDT sia compreso tra 0x8000000 e 0xD0000000

Pseudocode:

IDTR = ReadIDTR() // SIDTif(IDTR > 0xD0000000 IDTR 0x80000000) || < {

fail}

Anti-Debug tricks 5#

● gli eseguibili inoltre cercano di rilevare la presenza di:– Softice– Regmon– Filemon

● utilizzano device file virtuali usati da questi programmi per comunicare con i driver

Approfondimento 2#

UM Rootkit

User Mode Rootkit

• i rootkit Windows sono strumenti utilizzati per modificare il comportamento delle applicazioni

• agganciano (hook) le API per cambiare i risultati

• due caratteristiche principali:– Metodo di hooking– Metodo di injection

Struttura di chiamata API

la chiamata e' indiretta: call TargetFunctionAddr[ ]

Hooking - IAT hooking

per ogni hook, la IAT entry della funziona corrispondente viene modificata per puntare al codice di hook.

Hooking - inline hooking

per ogni hook, vengono modificati i primi byte della funzione originale per fare spazio ad un JMP nel hook.

Hooking - inline hooking

normale hooked

Injection - AppInit_DLLs

● chiave del registry:– HKLM Software Microsoft Windows \ \ \

NT CurrentVersion Windows AppInit_DLLs\ \ \• lista di DLL caricate con User32.dll• praticamente tutti gli eseguibili

Conclusioni

complessita' legacy, feature dimenticate–

Webografia

Marco Giuliani The Strange Case of Dr. Rootkit and Mr. Adware : “ ”http://pcalsicuro.phpsoft.it/gromozon.pdf

Mircea Ciubotariu:

“What Next? Trojan.LinkOptimizer (Virus Bulletin Dec 2006)” –

LADS:

http://www.heysoft.de/nt/ntfs-ads.htm

Random Dross Web Security And Beyond “ ”

http://blogs.msdn.com/dross/

WebSense Security Labs Threat Blog: http://www.websense.com/securitylabs/blog/blog.php?BlogID=86)

F-Secure Weblog on WMF Vulnerability: http://www.f-secure.com/weblog/archives/archive-122005.html