SlideShare uma empresa Scribd logo
1 de 44
Baixar para ler offline
[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 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)));}[...]
html encoding
&#100; = 'd'

url encoding
%64 = 'd'

ms encoded
Jscript.Encode”>#@~^LgEAAA==r6`UmbolDWM [...]

escaping
document.write(unescape('u0025u0033u0043[...]



               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');
good guys gromozon
Script Debugger   Obfuscated JavaScript
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
good guys gromozon
Script Debugger   Obfuscated JavaScript
                   EFS
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 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
good guys gromozon
Script Debugger Obfuscated JavaScript
Script (Xcopy /g) EFS
ADS
ADS esistono per
garantire compatibilità
tra NTFS e HFS

                          s




Alternate Data Streams
per nascondere un rootkit
good guys gromozon
 Script Debugger Obfuscated JavaScript
 Script (Xcopy /g) EFS
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*
good guys gromozon
   Script Debugger     Obfuscated JavaScript
   Script (Xcopy /g)    EFS
  LADS, STREAMS         ADS
Del .c:lpt6.com    Nomi Riservati
good guys gromozon
   Script Debugger     Obfuscated JavaScript
   Script (Xcopy /g)    EFS
  LADS, STREAMS         ADS
Del .c:lpt6.com    Nomi Riservati
                        Rootkit !
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
                         ●   Controllo anti-tracciamento
                         ●   GetTickCount - millisecondi
Pseudocode:                  dallo startup
t1 = GetTickCount()
t2 = GetTickCount()
if(t2 - t1 < MINVAL) {
         fail
} else {
         success
}
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
}
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
}
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() // SIDT
if(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:
    –   HKLMSoftwareMicrosoftWindows
        NTCurrentVersionWindowsAppInit_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

Mais conteúdo relacionado

Semelhante a Devianze

Dominare il codice legacy
Dominare il codice legacyDominare il codice legacy
Dominare il codice legacyTommaso Torti
 
Sicurezza Php (giugno 2010) Stefano Bianchini presso Ce.Se.N.A.
Sicurezza Php (giugno 2010) Stefano Bianchini presso Ce.Se.N.A.Sicurezza Php (giugno 2010) Stefano Bianchini presso Ce.Se.N.A.
Sicurezza Php (giugno 2010) Stefano Bianchini presso Ce.Se.N.A.Stefano Bianchini
 
MITM Attack with Patching Binaries on the Fly by Adding Shellcodes
MITM Attack with Patching Binaries on the Fly by Adding ShellcodesMITM Attack with Patching Binaries on the Fly by Adding Shellcodes
MITM Attack with Patching Binaries on the Fly by Adding ShellcodesGianluca Gabrielli
 
Smau padova 2013 gianfranco tonello
Smau padova 2013 gianfranco tonelloSmau padova 2013 gianfranco tonello
Smau padova 2013 gianfranco tonelloSMAU
 
Netbeans e Xdebug per debugging e profiling di applicazioni PHP
Netbeans e Xdebug per debugging e profiling di applicazioni PHPNetbeans e Xdebug per debugging e profiling di applicazioni PHP
Netbeans e Xdebug per debugging e profiling di applicazioni PHPGiorgio Cefaro
 
MongoDB User Group Padova - Overviews iniziale su MongoDB
MongoDB User Group Padova - Overviews iniziale su MongoDBMongoDB User Group Padova - Overviews iniziale su MongoDB
MongoDB User Group Padova - Overviews iniziale su MongoDBStefano Dindo
 
Virtually Pwned: Hacking VMware [ITA - SMAU10]
Virtually Pwned: Hacking VMware [ITA - SMAU10]Virtually Pwned: Hacking VMware [ITA - SMAU10]
Virtually Pwned: Hacking VMware [ITA - SMAU10]Claudio Criscione
 
SMAU 2008: "Vulnerabilità in Tomcat: l'evoluzione della specie"
SMAU 2008: "Vulnerabilità in Tomcat: l'evoluzione della specie"SMAU 2008: "Vulnerabilità in Tomcat: l'evoluzione della specie"
SMAU 2008: "Vulnerabilità in Tomcat: l'evoluzione della specie"guest2c6b3
 
Botnet e nuove forme di malware
Botnet e nuove forme di malwareBotnet e nuove forme di malware
Botnet e nuove forme di malwareGianni Amato
 
festival ICT 2013: Sicurezza delle applicazioni web
festival ICT 2013: Sicurezza delle applicazioni webfestival ICT 2013: Sicurezza delle applicazioni web
festival ICT 2013: Sicurezza delle applicazioni webfestival ICT 2016
 
Checkmate to crypto malware. Scacco matto ai crypto malware
Checkmate to crypto malware. Scacco matto ai crypto malwareCheckmate to crypto malware. Scacco matto ai crypto malware
Checkmate to crypto malware. Scacco matto ai crypto malwareGianfranco Tonello
 
Scacco matto ai crytpo malware (milano)
Scacco matto ai crytpo malware (milano)Scacco matto ai crytpo malware (milano)
Scacco matto ai crytpo malware (milano)Gianfranco Tonello
 
Javaday 2006: Java 5
Javaday 2006: Java 5Javaday 2006: Java 5
Javaday 2006: Java 5Matteo Baccan
 
Snort React per Webfiltering : "Soluzioni per le Leggi-Lista"
Snort React per Webfiltering : "Soluzioni per le Leggi-Lista"Snort React per Webfiltering : "Soluzioni per le Leggi-Lista"
Snort React per Webfiltering : "Soluzioni per le Leggi-Lista"Camelug Fava
 

Semelhante a Devianze (20)

Vulnerabilità exploit
Vulnerabilità exploitVulnerabilità exploit
Vulnerabilità exploit
 
Dominare il codice legacy
Dominare il codice legacyDominare il codice legacy
Dominare il codice legacy
 
XPages Tips & Tricks, #dd13
XPages Tips & Tricks, #dd13XPages Tips & Tricks, #dd13
XPages Tips & Tricks, #dd13
 
Sicurezza Php (giugno 2010) Stefano Bianchini presso Ce.Se.N.A.
Sicurezza Php (giugno 2010) Stefano Bianchini presso Ce.Se.N.A.Sicurezza Php (giugno 2010) Stefano Bianchini presso Ce.Se.N.A.
Sicurezza Php (giugno 2010) Stefano Bianchini presso Ce.Se.N.A.
 
MITM Attack with Patching Binaries on the Fly by Adding Shellcodes
MITM Attack with Patching Binaries on the Fly by Adding ShellcodesMITM Attack with Patching Binaries on the Fly by Adding Shellcodes
MITM Attack with Patching Binaries on the Fly by Adding Shellcodes
 
Smau padova 2013 gianfranco tonello
Smau padova 2013 gianfranco tonelloSmau padova 2013 gianfranco tonello
Smau padova 2013 gianfranco tonello
 
Netbeans e Xdebug per debugging e profiling di applicazioni PHP
Netbeans e Xdebug per debugging e profiling di applicazioni PHPNetbeans e Xdebug per debugging e profiling di applicazioni PHP
Netbeans e Xdebug per debugging e profiling di applicazioni PHP
 
MongoDB User Group Padova - Overviews iniziale su MongoDB
MongoDB User Group Padova - Overviews iniziale su MongoDBMongoDB User Group Padova - Overviews iniziale su MongoDB
MongoDB User Group Padova - Overviews iniziale su MongoDB
 
Virtually Pwned: Hacking VMware [ITA - SMAU10]
Virtually Pwned: Hacking VMware [ITA - SMAU10]Virtually Pwned: Hacking VMware [ITA - SMAU10]
Virtually Pwned: Hacking VMware [ITA - SMAU10]
 
TuxIsAlive
TuxIsAliveTuxIsAlive
TuxIsAlive
 
SMAU 2008: "Vulnerabilità in Tomcat: l'evoluzione della specie"
SMAU 2008: "Vulnerabilità in Tomcat: l'evoluzione della specie"SMAU 2008: "Vulnerabilità in Tomcat: l'evoluzione della specie"
SMAU 2008: "Vulnerabilità in Tomcat: l'evoluzione della specie"
 
Openmoko
OpenmokoOpenmoko
Openmoko
 
Botnet e nuove forme di malware
Botnet e nuove forme di malwareBotnet e nuove forme di malware
Botnet e nuove forme di malware
 
Logging
LoggingLogging
Logging
 
festival ICT 2013: Sicurezza delle applicazioni web
festival ICT 2013: Sicurezza delle applicazioni webfestival ICT 2013: Sicurezza delle applicazioni web
festival ICT 2013: Sicurezza delle applicazioni web
 
Checkmate to crypto malware. Scacco matto ai crypto malware
Checkmate to crypto malware. Scacco matto ai crypto malwareCheckmate to crypto malware. Scacco matto ai crypto malware
Checkmate to crypto malware. Scacco matto ai crypto malware
 
Scacco matto ai crytpo malware (milano)
Scacco matto ai crytpo malware (milano)Scacco matto ai crytpo malware (milano)
Scacco matto ai crytpo malware (milano)
 
Javaday 2006: Java 5
Javaday 2006: Java 5Javaday 2006: Java 5
Javaday 2006: Java 5
 
Snort React per Webfiltering : "Soluzioni per le Leggi-Lista"
Snort React per Webfiltering : "Soluzioni per le Leggi-Lista"Snort React per Webfiltering : "Soluzioni per le Leggi-Lista"
Snort React per Webfiltering : "Soluzioni per le Leggi-Lista"
 
#dd12 Applicazioni a tre voci (Android e Domino)
#dd12 Applicazioni a tre voci (Android e Domino)#dd12 Applicazioni a tre voci (Android e Domino)
#dd12 Applicazioni a tre voci (Android e Domino)
 

Devianze

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