Devianze

1,033 views

Published on

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.

Published in: Technology
10 Comments
0 Likes
Statistics
Notes
  • Sessione di Reverse Engineering e Analisi, a cura di Luigi Mori.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Gromozon installa diversi oggetti nel sistema infetto e può nasconderli con gli Alternate Data Stream. Che però possono essere ispezionati con le utility LADS e Stream.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • In questo modo, il servizio installato da Gromozon viene decrittato e può essere analizzato e rimosso.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • La tabella del punteggio dei Buoni (noi) versus Cattivi (gli autori del malware). Sì, è una citazione da una puntata di 'Dr. House'!
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Alcuni dei metodi di offuscamento implementati nel codice e i metodi per riportarlo in chiaro.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Be the first to like this

No Downloads
Views
Total views
1,033
On SlideShare
0
From Embeds
0
Number of Embeds
25
Actions
Shares
0
Downloads
6
Comments
10
Likes
0
Embeds 0
No embeds

No notes for slide

Devianze

  1. 1. [Devianze] come il malware sovverte le feature avanzate di windows luigi mori, fabrizio cassoni
  2. 2. le feature dimenticate rimasugli ripensamenti retrocompatibilità
  3. 3. maggio 2006: Trojan.LinkOptimizer Win32.Agent.rs Trojan.Dropper Js.Agent ...
  4. 4. Enter Gromozon function 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().repl ace(/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.fromCharCo de((S&16711680)>>16,(S&65280)>>8,S&255);}eval(MQ.su bstring(0,MQ.length- (arguments.callee.toString().replace(/s/g,'').leng th-537)));}[...]
  5. 5. html encoding d = 'd' url encoding %64 = 'd' ms encoded Jscript.Encode”>#@~^LgEAAA==r6`UmbolDWM [...] escaping document.write(unescape('u0025u0033u0043[...] alert() vs. document.write() alert() vs. eval()
  6. 6. 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');
  7. 7. good guys gromozon Script Debugger Obfuscated JavaScript
  8. 8. javascript offuscato redirezione a un secondo sito profilazione del browser (IE, FF, Opera) www.google.com WMF exploit dropper
  9. 9. 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
  10. 10. good guys gromozon Script Debugger Obfuscated JavaScript EFS
  11. 11. 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
  12. 12. una semplice sostituzione creiamo un applicazione che richiama la shell invocando un batch xcopy /g <file_crittato> e: “e:” e' un volume non NTFS la registriamo come servizio la sostituiamo al servizio di Gromozon riavviamo il sistema
  13. 13. good guys gromozon Script Debugger Obfuscated JavaScript Script (Xcopy /g) EFS
  14. 14. ADS ADS esistono per garantire compatibilità tra NTFS e HFS s Alternate Data Streams per nascondere un rootkit
  15. 15. good guys gromozon Script Debugger Obfuscated JavaScript Script (Xcopy /g) EFS LADS, STREAMS ADS
  16. 16. se non puoi nasconderti... il rootkit di Gromozon può essere visibile ma difficile da rimuovere i nomi “riservati”: CON PRN AUX NUL COM* LPT*
  17. 17. good guys gromozon Script Debugger Obfuscated JavaScript Script (Xcopy /g) EFS LADS, STREAMS ADS Del .c:lpt6.com Nomi Riservati
  18. 18. good guys gromozon Script Debugger Obfuscated JavaScript Script (Xcopy /g) EFS LADS, STREAMS ADS Del .c:lpt6.com Nomi Riservati Rootkit !
  19. 19. Approfondimenti approfondimento #1 – Protezione & Anti-Dbg approfondimento #2 – UM Rootkits
  20. 20. Approfondimento #1 Protezione & Anti-Dbg
  21. 21. Prima analisi eseguibili • pochi IMPORTS → packer ? • PEiD non lo riconosce → custom packer ???
  22. 22. Prima analisi eseguibili ● nomi sezioni standard, non ci sono salti su dati “strani” → nessun packer ?!?! flusso intricato, illeggibile
  23. 23. Protezione da RE 1 - normale 2 - split 3 - scramble
  24. 24. Protezione da RE normale scramble
  25. 25. 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
  26. 26. Anti-Debug tricks #1 ● Controllo presenza debugger sul PEB ● Codice usato da IsDebuggerPresent()
  27. 27. Anti-Debug tricks #2 ● Controllo anti-tracciamento ● GetTickCount - millisecondi Pseudocode: dallo startup t1 = GetTickCount() t2 = GetTickCount() if(t2 - t1 < MINVAL) { fail } else { success }
  28. 28. Anti-Debug tricks #3 ● Controllo anti-tracciamento ● Basato su RDTSC - numero tick Pseudocode: della CPU t1 = ReadTSC() Sleep(100) t2 = ReadTSC() if(t2 - t1 < MINVAL) { fail } else { success }
  29. 29. Anti-Debug tricks #4 ● Controllo su VM ● RedPill - scoperto da Joanna Rutkowska e Tobias Klein Pseudocode: IDTR = ReadIDTR() // SIDT if(IDTR > 0xD0000000 || IDTR < 0x80000000) { fail }
  30. 30. VMWare e IDTR ● un IDTR per il VMM ed uno per Host OS ● modificato nel “Total Context Switch”
  31. 31. 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
  32. 32. Anti-Debug tricks #4 ● RedPill controlla che il Base del IDT sia compreso tra 0x8000000 e 0xD0000000 Pseudocode: IDTR = ReadIDTR() // SIDT if(IDTR > 0xD0000000 || IDTR < 0x80000000) { fail }
  33. 33. 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
  34. 34. Approfondimento #2 UM Rootkit
  35. 35. 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
  36. 36. Struttura di chiamata API la chiamata e' indiretta: call [TargetFunctionAddr]
  37. 37. Hooking - IAT hooking per ogni hook, la IAT entry della funziona corrispondente viene modificata per puntare al codice di hook.
  38. 38. Hooking - inline hooking per ogni hook, vengono modificati i primi byte della funzione originale per fare spazio ad un JMP nel hook.
  39. 39. Hooking - inline hooking normale hooked
  40. 40. Injection - AppInit_DLLs ● chiave del registry: – HKLMSoftwareMicrosoftWindows NTCurrentVersionWindowsAppInit_DLLs • lista di DLL caricate con User32.dll • praticamente tutti gli eseguibili
  41. 41. Conclusioni complessita' – legacy, feature dimenticate
  42. 42. 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

×