Devianze

44
[Devianze] come il malware sovverte le feature avanzate di windows luigi mori, fabrizio cassoni

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

Page 1: Devianze

[Devianze]

come il malware sovverte le feature avanzate di windows

luigi mori, fabrizio cassoni

Page 2: Devianze

le feature dimenticate

rimasugli

ripensamenti

retrocompatibilità

Page 3: Devianze
Page 4: Devianze

maggio 2006:

Trojan.LinkOptimizer

Win32.Agent.rs

Trojan.Dropper

Js.Agent

...

Page 5: Devianze
Page 6: Devianze

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)));}[...]

Page 7: Devianze

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()

Page 8: Devianze

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');

Page 9: Devianze

gromozongood guysObfuscated JavaScriptScript Debugger

Page 10: Devianze

javascript offuscato

redirezione a un secondo sito

profilazione del browser (IE, FF, Opera)

www.google.com WMF exploit

dropper

Page 11: Devianze

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

Page 12: Devianze

gromozongood guysObfuscated JavaScriptScript DebuggerEFS

Page 13: Devianze

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

Page 14: Devianze

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

Page 15: Devianze

gromozongood guysObfuscated JavaScriptScript DebuggerEFSScript (Xcopy /g)

Page 16: Devianze

s

ADSADS esistono per garantire compatibilit àtra NTFS e HFS

Alternate Data Streams per nascondere un rootkit

Page 17: Devianze

gromozongood guysObfuscated JavaScriptScript DebuggerEFSScript (Xcopy /g)

LADS, STREAMS ADS

Page 18: Devianze

se non puoi nasconderti...

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

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

Page 19: Devianze

gromozongood guysObfuscated JavaScriptScript DebuggerEFSScript (Xcopy /g)

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

Page 20: Devianze

gromozongood guysObfuscated JavaScriptScript DebuggerEFSScript (Xcopy /g)

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

Page 21: Devianze

Approfondimenti

approfondimento 1 # – Protezione & Anti-Dbg

approfondimento 2 # – UM Rootkits

Page 22: Devianze

Approfondimento 1#

Protezione & Anti-Dbg

Page 23: Devianze

Prima analisi eseguibili

• pochi IMPORTS → packer ?

• PEiD non lo riconosce → custom packer ???

Page 24: Devianze

Prima analisi eseguibili

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

flusso intricato, illeggibile

Page 25: Devianze

Protezione da RE

1 - normale 2 - split 3 - scramble

Page 26: Devianze

Protezione da RE

normale

scramble

Page 27: Devianze

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

Page 28: Devianze

Anti-Debug tricks 1#● Controllo presenza debugger

sul PEB● Codice usato da

IsDebuggerPresent()

Page 29: Devianze

Anti-Debug tricks 2#

Pseudocode:

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

fail else } {

success}

● Controllo anti-tracciamento● GetTickCount - millisecondi

dallo startup

Page 30: Devianze

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

Page 31: Devianze

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

Rutkowska e Tobias Klein

Pseudocode:

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

Page 32: Devianze

VMWare e IDTR● un IDTR per il VMM ed uno

per Host OS● modificato nel Total “

Context Switch”

Page 33: Devianze

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

Page 34: Devianze

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}

Page 35: Devianze

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

Page 36: Devianze

Approfondimento 2#

UM Rootkit

Page 37: Devianze

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

Page 38: Devianze

Struttura di chiamata API

la chiamata e' indiretta: call TargetFunctionAddr[ ]

Page 39: Devianze

Hooking - IAT hooking

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

Page 40: Devianze

Hooking - inline hooking

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

Page 41: Devianze

Hooking - inline hooking

normale hooked

Page 42: Devianze

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

Page 43: Devianze

Conclusioni

complessita' legacy, feature dimenticate–

Page 44: Devianze

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