Evoluzione del malware - Roberto Paleari
Evoluzione del malware - Roberto Paleari
Evoluzione del malware - Roberto Paleari
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
<strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong><br />
Lorenzo Martignoni <strong>Roberto</strong> <strong>Paleari</strong><br />
lorenzo.martignoni@uniud.it roberto@security.dico.unimi.it<br />
Università degli Studi di Udine Università degli Studi di Milano
Malware<br />
Sequenza di codice progettata per danneggiare<br />
intenzionalmente un sistema, i dati che contiene o<br />
comunque alterare il suo normale funzionamento,<br />
all’insaputa <strong>del</strong>l’utente<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 2
Malware & underground economy<br />
Vendita informazioni rubate<br />
Goods & services Percentage Range of prices<br />
Bank accounts 22% $10-$1000<br />
Credit cards 13% $0.40-$20<br />
Full identities 9% $1-$15<br />
Online auction site accounts 7% $1-$8<br />
Scams 7% $2.50-$50/week (hosting)<br />
Mailers 6% $1-$10<br />
Email addresses 5% $0.83/MB-$10/MB<br />
Email passwords 5% $4-$30<br />
Drop (request or offer) 5% 10%-20% of drop amount<br />
Proxies 5% $1.50-$30<br />
Fonte: Symantec<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 3
<strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong><br />
App App App<br />
Kernel & drivers<br />
BIOS/SMM<br />
Hypervisor<br />
CPU<br />
Chipset<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 4
<strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong><br />
App App App<br />
Kernel & drivers<br />
BIOS/SMM<br />
Hypervisor<br />
CPU<br />
Chipset<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 4
<strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong><br />
App App App<br />
Kernel & drivers<br />
BIOS/SMM<br />
Hypervisor<br />
CPU<br />
Chipset<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 4
<strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong><br />
App App App<br />
Kernel & drivers<br />
BIOS/SMM<br />
Hypervisor<br />
CPU<br />
Chipset<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 4
<strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong><br />
App App App<br />
Kernel & drivers<br />
BIOS/SMM<br />
Hypervisor<br />
CPU<br />
Chipset<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 4
<strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong><br />
App App App<br />
Kernel & drivers<br />
BIOS/SMM<br />
Hypervisor<br />
CPU<br />
Chipset<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 4
Situazione attuale<br />
Malware vs AV<br />
AV in posizione svantaggiata<br />
The amount of new <strong>malware</strong> has never been higher. Our labs<br />
are receiving an average of 25,000 <strong>malware</strong> samples every<br />
day, seven days a week.<br />
F-Secure, 2008<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 5
App App App<br />
BIOS/SMM<br />
Kernel & drivers<br />
Hypervisor<br />
CPU<br />
Chipset<br />
User-space <strong>malware</strong>
Malware tradizionale<br />
Codice assembly/C/macro<br />
Diffusione via file infection (es., virus) o via rete (es., worm)<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 7
Malware tradizionale<br />
Codice assembly/C/macro<br />
Diffusione via file infection (es., virus) o via rete (es., worm)<br />
1983<br />
Frederick Cohen<br />
“Computer virus”<br />
1981<br />
Elk Cloner<br />
1986<br />
Brain<br />
1987<br />
Jerusalem<br />
1988<br />
Morris worm<br />
1995<br />
Concept<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 7
Malware tradizionale<br />
Codice assembly/C/macro<br />
Diffusione via file infection (es., virus) o via rete (es., worm)<br />
Problemi<br />
Piuttosto semplici<br />
Il codice <strong>del</strong> <strong>malware</strong> non è protetto/offuscato in alcun modo<br />
Signature-based detection efficace<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 7
Contromisure<br />
Detection signature-based<br />
Come funziona?<br />
Database di signature<br />
Un’applicazione che contiene una signature nota viene<br />
considerate infetta<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 8
Contromisure<br />
Detection signature-based<br />
Come funziona?<br />
Database di signature<br />
Un’applicazione che contiene una signature nota viene<br />
considerate infetta<br />
Codice applicazione<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 8
Contromisure<br />
Detection signature-based<br />
Come funziona?<br />
Database di signature<br />
Un’applicazione che contiene una signature nota viene<br />
considerate infetta<br />
Signature<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 8
Contromisure<br />
Detection signature-based<br />
Come funziona?<br />
Database di signature<br />
Un’applicazione che contiene una signature nota viene<br />
considerate infetta<br />
+ +<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 8
Contromisure<br />
Detection signature-based<br />
Come funziona?<br />
Database di signature<br />
Un’applicazione che contiene una signature nota viene<br />
considerate infetta<br />
+ +<br />
+ +<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 8
Contromisure<br />
Detection signature-based<br />
Come funziona?<br />
Database di signature<br />
Un’applicazione che contiene una signature nota viene<br />
considerate infetta<br />
+ +<br />
+ +<br />
+ +<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 8
Tecniche di self-defense<br />
Packing<br />
Codice maligno nascosto da 1 + layer di compressione/cifratura<br />
Decompressione/decrifratura a run-time<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 9
Tecniche di self-defense<br />
Packing<br />
Codice maligno nascosto da 1 + layer di compressione/cifratura<br />
Decompressione/decrifratura a run-time<br />
Malicious<br />
code<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 9
Tecniche di self-defense<br />
Packing<br />
Codice maligno nascosto da 1 + layer di compressione/cifratura<br />
Decompressione/decrifratura a run-time<br />
Unpacking<br />
routine<br />
Malicious<br />
code<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 9
Tecniche di self-defense<br />
Packing<br />
Codice maligno nascosto da 1 + layer di compressione/cifratura<br />
Decompressione/decrifratura a run-time<br />
Unpacking<br />
routine<br />
Unpacking<br />
routine<br />
Malicious<br />
code<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 9
Tecniche di self-defense<br />
Packing<br />
Codice maligno nascosto da 1 + layer di compressione/cifratura<br />
Decompressione/decrifratura a run-time<br />
Problema<br />
Unpacking<br />
routine<br />
Unpacking<br />
routine<br />
∼ 80% <strong>del</strong> <strong>malware</strong> è “packed”<br />
200 famiglie di packer, 2000 varianti<br />
Backlog di ∼ 90 famiglie<br />
Malicious<br />
code<br />
Fonte: Symantec, 2008<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 9
Tecniche di self-defense<br />
Polimorfismo<br />
Mutazione #1 Mutazione #2 Mutazione #3<br />
Problema: la routine di packing può essere rilevata<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 10
Tecniche di self-defense<br />
Polimorfismo<br />
Mutazione #1 Mutazione #2 Mutazione #3<br />
Problema: la routine di packing può essere rilevata<br />
Idea: variare la routine di packing ad ogni infezione<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 10
Tecniche di self-defense<br />
Polimorfismo<br />
Mutazione #1 Mutazione #2 Mutazione #3<br />
Problema: la routine di packing può essere rilevata<br />
Idea: variare la routine di packing ad ogni infezione<br />
La semantica <strong>del</strong>la routine rimane sempre la stessa<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 10
Tecniche di self-defense<br />
Polimorfismo<br />
Mutazione #1 Mutazione #2 Mutazione #3<br />
Problema: la routine di packing può essere rilevata<br />
Idea: variare la routine di packing ad ogni infezione<br />
La semantica <strong>del</strong>la routine rimane sempre la stessa<br />
Contromisure<br />
Emulazione<br />
Algorithmic detection<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 10
Tecniche di self-defense<br />
Metamorfismo<br />
“Metamorphics are body-polymorphics” (Igor Muttik)<br />
Ad ogni infezione muta l’intero corpo <strong>del</strong> <strong>malware</strong><br />
Mutazione #1 Mutazione #2 Mutazione #3<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 11
Tecniche di self-defense<br />
Metamorfismo<br />
“Metamorphics are body-polymorphics” (Igor Muttik)<br />
Ad ogni infezione muta l’intero corpo <strong>del</strong> <strong>malware</strong><br />
Come funziona?<br />
1. Analizza il proprio codice<br />
2. Identifica dei blocchi<br />
3. Applica mutazioni<br />
Codice<br />
<strong>malware</strong><br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 11
Tecniche di self-defense<br />
Metamorfismo<br />
“Metamorphics are body-polymorphics” (Igor Muttik)<br />
Ad ogni infezione muta l’intero corpo <strong>del</strong> <strong>malware</strong><br />
Come funziona?<br />
1. Analizza il proprio codice<br />
2. Identifica dei blocchi<br />
3. Applica mutazioni<br />
blocco1<br />
blocco2<br />
blocco3<br />
blocco4<br />
blocco5<br />
blocco6<br />
blocco7<br />
blocco8<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 11
Tecniche di self-defense<br />
Metamorfismo<br />
“Metamorphics are body-polymorphics” (Igor Muttik)<br />
Ad ogni infezione muta l’intero corpo <strong>del</strong> <strong>malware</strong><br />
Come funziona?<br />
1. Analizza il proprio codice<br />
2. Identifica dei blocchi<br />
3. Applica mutazioni<br />
blocco1<br />
blocco2<br />
blocco3<br />
blocco4<br />
blocco5<br />
blocco6<br />
blocco7<br />
blocco8<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 11
Tecniche di self-defense<br />
Metamorfismo<br />
“Metamorphics are body-polymorphics” (Igor Muttik)<br />
Ad ogni infezione muta l’intero corpo <strong>del</strong> <strong>malware</strong><br />
Come funziona?<br />
1. Analizza il proprio codice<br />
2. Identifica dei blocchi<br />
3. Applica mutazioni<br />
blocco1<br />
blocco6<br />
blocco3<br />
blocco9<br />
blocco5<br />
blocco2<br />
blocco10<br />
blocco8<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 11
Tecniche di self-defense<br />
Metamorfismo<br />
“Metamorphics are body-polymorphics” (Igor Muttik)<br />
Ad ogni infezione muta l’intero corpo <strong>del</strong> <strong>malware</strong><br />
Problema<br />
Analizzatore di codice particolarmente complesso<br />
Sviluppare un motore metamorfico è molto difficile<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 11
Tecniche di self-defense<br />
Malware emulators<br />
mov %ax, $0xcafe;<br />
xor %ebx, %ebx;<br />
inc %ecx;<br />
int $0x2e;<br />
Programma originale<br />
1. Codice <strong>del</strong> <strong>malware</strong> trasformato in bytecode<br />
2. Bytecode interpretato a run-time da una VM<br />
3. Bytecode mutato ad ogni infezione<br />
inst37 %r6, $0xcafe;<br />
inst15 %r2, %r2;<br />
inst24 %r11;<br />
inst4 $0x2e;<br />
VM<br />
Programma offuscato<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 12
Tecniche di self-defense<br />
Malware emulators<br />
mov %ax, $0xcafe;<br />
xor %ebx, %ebx;<br />
inc %ecx;<br />
int $0x2e;<br />
Programma originale<br />
1. Codice <strong>del</strong> <strong>malware</strong> trasformato in bytecode<br />
2. Bytecode interpretato a run-time da una VM<br />
3. Bytecode mutato ad ogni infezione<br />
Sembra complicato?<br />
inst37 %r6, $0xcafe;<br />
inst15 %r2, %r2;<br />
inst24 %r11;<br />
inst4 $0x2e;<br />
VM<br />
Programma offuscato<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 12
Tecniche di self-defense<br />
Malware emulators<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 12
Tecniche di self-defense<br />
Contromisure<br />
Signature-based detection è troppo debole<br />
Verso tecniche più “semantiche”<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 13
Tecniche di self-defense<br />
Contromisure<br />
Signature-based detection è troppo debole<br />
Verso tecniche più “semantiche”<br />
Soluzioni<br />
Analisi dinamica<br />
Granularità a livello di system call<br />
Panda TruPrevent, AVG Identity Protection, NovaShield,<br />
ThreatFire, . . .<br />
Problemi<br />
Performance<br />
Falsi positivi<br />
Information leakage<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 13
Strumenti anti-<strong>malware</strong> di nuova generazione<br />
Analisi statica impraticabile o troppo onerosa<br />
Analisi dinamica in ambienti emulati<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 14
Strumenti anti-<strong>malware</strong> di nuova generazione<br />
Analisi statica impraticabile o troppo onerosa<br />
Analisi dinamica in ambienti emulati<br />
Esempi<br />
Anubis<br />
CWSandbox<br />
BitBlaze<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 14
Strumenti anti-<strong>malware</strong> di nuova generazione<br />
Analisi statica impraticabile o troppo onerosa<br />
Analisi dinamica in ambienti emulati<br />
Esempi<br />
Anubis<br />
CWSandbox<br />
BitBlaze<br />
Come funzionano?<br />
1. Esecuzione <strong>del</strong>l’applicazione sospetta in un emulatore<br />
2. Monitoring <strong>del</strong>l’esecuzione (VM introspection)<br />
3. Rilevamento di comportamenti maligni<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 14
Rilevamento VM<br />
Red-pill<br />
Programma in grado di rilevare se eseguito all’interno di un<br />
emulatore (o virtualizzatore)<br />
CPU EMU<br />
Fonte: A fistful of red-pills (R. <strong>Paleari</strong>, L. Martignoni, G. Fresi Roglia, D. Bruschi)<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 15
Rilevamento VM<br />
Red-pill<br />
Programma in grado di rilevare se eseguito all’interno di un<br />
emulatore (o virtualizzatore)<br />
void main() {<br />
redpill = ‘‘\x08\x7c\xe3\x04...’’;<br />
if (((void (*)())redpill)()) {<br />
// Eseguito su CPU fisica<br />
return CPU;<br />
} else {<br />
// Eseguito su CPU emulata<br />
return EMU;<br />
}<br />
}<br />
Fonte: A fistful of red-pills (R. <strong>Paleari</strong>, L. Martignoni, G. Fresi Roglia, D. Bruschi)<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 15
Rilevamento VM<br />
Red-pill<br />
Programma in grado di rilevare se eseguito all’interno di un<br />
emulatore (o virtualizzatore)<br />
Qualche numero. . .<br />
BOCHS State differences: R M E<br />
Pin<br />
Valgrind<br />
QEMU<br />
50 100 150 200 250 300 350 400 450 500 550<br />
Fonte: A fistful of red-pills (R. <strong>Paleari</strong>, L. Martignoni, G. Fresi Roglia, D. Bruschi)<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 15
App App App<br />
BIOS/SMM<br />
Kernel & drivers<br />
Hypervisor<br />
CPU<br />
Chipset<br />
Kernel-space <strong>malware</strong>
Root-kit<br />
Cosa sono?<br />
Strumenti utilizzati per nascondere la presenza di attività maligna<br />
nel sistema<br />
Cosa nascondere?<br />
File<br />
Chiavi di registro<br />
Servizi<br />
Connessioni di rete<br />
Processi<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 17<br />
. . .
Root-kit<br />
Cosa sono?<br />
Strumenti utilizzati per nascondere la presenza di attività maligna<br />
nel sistema<br />
Cosa nascondere?<br />
File<br />
Chiavi di registro<br />
Servizi<br />
App App App<br />
Kernel & drivers<br />
Connessioni di rete<br />
Processi<br />
. . .<br />
User-mode<br />
Kernel-mode<br />
User-space vs kernel-space<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 17
Root-kit<br />
Hooking<br />
Obiettivo<br />
Dirottare il flusso di esecuzione modificando un code pointer<br />
Esempi<br />
User-space: IAT<br />
Kernel-space: IDT, MSR, SSDT<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 18
Root-kit<br />
Hooking: IDT<br />
Interrupt Descriptor Table<br />
Dispatching di interruzioni ed eccezioni<br />
Interrupt<br />
App App App<br />
Sw int./Excep.<br />
&handleri<br />
IDT<br />
User-space<br />
Kernel-space<br />
Handler<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 19
Root-kit<br />
Hooking: IDT<br />
Interrupt Descriptor Table<br />
Dispatching di interruzioni ed eccezioni<br />
Hijacking di 1 + handler (e.g., 0x2e → KiSystemService)<br />
Interrupt<br />
App App App<br />
Sw int./Excep.<br />
&handlerm<br />
IDT<br />
User-space<br />
Kernel-space<br />
Handler<br />
Malicious<br />
handler<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 19
Root-kit<br />
Hooking: IDT<br />
Interrupt Descriptor Table<br />
Dispatching di interruzioni ed eccezioni<br />
Hijacking di 1 + handler (e.g., 0x2e → KiSystemService)<br />
Problemi<br />
Non è possibile fare filtering<br />
Le system call non possono essere intercettate se viene usata<br />
sysenter/syscall<br />
Detection semplice:<br />
if (IDT[0x2e] != KiSystemService) then ...<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 19
Root-kit<br />
Hooking: SSDT<br />
System Service Descriptor Table<br />
Dispatching system call<br />
App App App<br />
Syscall<br />
gate<br />
int/sysenter/syscall<br />
&handleri<br />
SSDT<br />
User-space<br />
Kernel-space<br />
Handler<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 20
Root-kit<br />
Hooking: SSDT<br />
System Service Descriptor Table<br />
Dispatching system call<br />
Hijacking di 1 + descrittori (e.g., 0x74 → NtOpenFile)<br />
App App App<br />
Syscall<br />
gate<br />
int/sysenter/syscall<br />
&handlerm<br />
SSDT<br />
User-space<br />
Kernel-space<br />
Handler<br />
Malicious<br />
handler<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 20
Root-kit<br />
Hooking: SSDT<br />
System Service Descriptor Table<br />
Dispatching system call<br />
Hijacking di 1 + descrittori (e.g., 0x74 → NtOpenFile)<br />
Problemi<br />
Detection comunque semplice:<br />
if (SSDT[0x74] != NtOpenFile) then ...<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 20
Root-kit<br />
Run-time patching<br />
È possibile intercettare l’esecuzione in molti punti diversi<br />
Più difficile da rilevare<br />
...<br />
NtOpenFile:<br />
movl $0x74, %eax<br />
movl $0x7ffe0300, %edx<br />
nop<br />
call *%edx<br />
ret $0x18<br />
...<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 21
Root-kit<br />
Run-time patching<br />
È possibile intercettare l’esecuzione in molti punti diversi<br />
Più difficile da rilevare<br />
...<br />
NtOpenFile:<br />
movl $0x74, %eax<br />
pushl MaliciousHandler<br />
ret<br />
call *%edx<br />
ret $0x18<br />
...<br />
MaliciousHandler:<br />
...<br />
movl $0x7ffe0300, %edx<br />
nop<br />
push addr<br />
ret<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 21
Root-kit<br />
Run-time patching<br />
È possibile intercettare l’esecuzione in molti punti diversi<br />
Più difficile da rilevare<br />
...<br />
NtOpenFile:<br />
movl $0x74, %eax<br />
pushl MaliciousHandler<br />
ret<br />
call *%edx<br />
ret $0x18<br />
...<br />
MaliciousHandler:<br />
...<br />
movl $0x7ffe0300, %edx<br />
nop<br />
push addr<br />
ret<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 21
Root-kit<br />
Run-time patching<br />
È possibile intercettare l’esecuzione in molti punti diversi<br />
Più difficile da rilevare<br />
...<br />
NtOpenFile:<br />
movl $0x74, %eax<br />
pushl MaliciousHandler<br />
ret<br />
call *%edx<br />
ret $0x18<br />
...<br />
MaliciousHandler:<br />
...<br />
movl $0x7ffe0300, %edx<br />
nop<br />
push addr<br />
ret<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 21
Root-kit<br />
Run-time patching<br />
È possibile intercettare l’esecuzione in molti punti diversi<br />
Più difficile da rilevare<br />
...<br />
NtOpenFile:<br />
movl $0x74, %eax<br />
pushl MaliciousHandler<br />
ret<br />
call *%edx<br />
ret $0x18<br />
...<br />
MaliciousHandler:<br />
...<br />
movl $0x7ffe0300, %edx<br />
nop<br />
push addr<br />
ret<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 21
Root-kit<br />
Run-time patching<br />
È possibile intercettare l’esecuzione in molti punti diversi<br />
Più difficile da rilevare<br />
...<br />
NtOpenFile:<br />
movl $0x74, %eax<br />
pushl MaliciousHandler<br />
ret<br />
call *%edx<br />
ret $0x18<br />
...<br />
MaliciousHandler:<br />
...<br />
movl $0x7ffe0300, %edx<br />
nop<br />
push addr<br />
ret<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 21
Root-kit<br />
Run-time patching<br />
È possibile intercettare l’esecuzione in molti punti diversi<br />
Più difficile da rilevare<br />
...<br />
NtOpenFile:<br />
movl $0x74, %eax<br />
pushl MaliciousHandler<br />
ret<br />
call *%edx<br />
ret $0x18<br />
...<br />
MaliciousHandler:<br />
...<br />
movl $0x7ffe0300, %edx<br />
nop<br />
push addr<br />
ret<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 21
Root-kit<br />
Run-time patching<br />
È possibile intercettare l’esecuzione in molti punti diversi<br />
Più difficile da rilevare<br />
...<br />
NtOpenFile:<br />
movl $0x74, %eax<br />
pushl MaliciousHandler<br />
ret<br />
call *%edx<br />
ret $0x18<br />
...<br />
MaliciousHandler:<br />
...<br />
movl $0x7ffe0300, %edx<br />
nop<br />
push addr<br />
ret<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 21
Root-kit<br />
Run-time patching<br />
È possibile intercettare l’esecuzione in molti punti diversi<br />
Più difficile da rilevare<br />
...<br />
NtOpenFile:<br />
movl $0x74, %eax<br />
pushl MaliciousHandler<br />
ret<br />
call *%edx<br />
ret $0x18<br />
...<br />
MaliciousHandler:<br />
...<br />
movl $0x7ffe0300, %edx<br />
nop<br />
push addr<br />
ret<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 21
Root-kit<br />
Run-time patching<br />
È possibile intercettare l’esecuzione in molti punti diversi<br />
Più difficile da rilevare<br />
...<br />
NtOpenFile:<br />
movl $0x74, %eax<br />
pushl MaliciousHandler<br />
ret<br />
call *%edx<br />
ret $0x18<br />
...<br />
MaliciousHandler:<br />
...<br />
movl $0x7ffe0300, %edx<br />
nop<br />
push addr<br />
ret<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 21
Root-kit<br />
Run-time patching<br />
È possibile intercettare l’esecuzione in molti punti diversi<br />
Più difficile da rilevare<br />
...<br />
NtOpenFile:<br />
movl $0x74, %eax<br />
pushl MaliciousHandler<br />
ret<br />
call *%edx<br />
ret $0x18<br />
...<br />
MaliciousHandler:<br />
...<br />
movl $0x7ffe0300, %edx<br />
nop<br />
push addr<br />
ret<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 21
Root-kit<br />
Direct Kernel Object Manipulation (DKOM)<br />
Alterazione <strong>del</strong>le strutture kernel in memoria<br />
Nessun hook o patch al codice<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 22
Root-kit<br />
Direct Kernel Object Manipulation (DKOM)<br />
Alterazione <strong>del</strong>le strutture kernel in memoria<br />
Nessun hook o patch al codice<br />
EPROCESS<br />
csrss.exe<br />
EPROCESS<br />
<strong>malware</strong>.exe<br />
EPROCESS<br />
svchost.exe<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 22
Root-kit<br />
Direct Kernel Object Manipulation (DKOM)<br />
Alterazione <strong>del</strong>le strutture kernel in memoria<br />
Nessun hook o patch al codice<br />
EPROCESS<br />
csrss.exe<br />
EPROCESS<br />
<strong>malware</strong>.exe<br />
EPROCESS<br />
svchost.exe<br />
Il processo <strong>malware</strong>.exe non compare più tra quelli in<br />
esecuzione<br />
Scheduling è thread-based<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 22
Root-kit<br />
Direct Kernel Object Manipulation (DKOM)<br />
Alterazione <strong>del</strong>le strutture kernel in memoria<br />
Nessun hook o patch al codice<br />
MODULE ENTRY<br />
ntfs.sys<br />
MODULE ENTRY<br />
<strong>malware</strong>.sys<br />
MODULE ENTRY<br />
pci.sys<br />
C:\WINDOWS> drivers.exe<br />
ModuleName Code Data Bss Paged Init LinkDate<br />
------------------------------------------------------------------------------<br />
...<br />
ntfs.sys 96000 7040 0 412544 14080 Wed Aug 04 08:15:06 2004<br />
<strong>malware</strong>.sys 3903 0 0 0 0 Sat Mar 13 02:22:32 2010<br />
pci.sys 16000 1664 0 34176 5632 Wed Aug 04 08:07:45 2004<br />
...<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 22
Root-kit<br />
Direct Kernel Object Manipulation (DKOM)<br />
Alterazione <strong>del</strong>le strutture kernel in memoria<br />
Nessun hook o patch al codice<br />
MODULE ENTRY<br />
ntfs.sys<br />
MODULE ENTRY<br />
<strong>malware</strong>.sys<br />
MODULE ENTRY<br />
pci.sys<br />
C:\WINDOWS> drivers.exe<br />
ModuleName Code Data Bss Paged Init LinkDate<br />
------------------------------------------------------------------------------<br />
...<br />
ntfs.sys 96000 7040 0 412544 14080 Wed Aug 04 08:15:06 2004<br />
pci.sys 16000 1664 0 34176 5632 Wed Aug 04 08:07:45 2004<br />
...<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 22
Root-kit<br />
Esempio: Mebroot (2007–2008)<br />
Funzionamento<br />
1. Infezione master boot record (MBR)<br />
2. Dati memorizzati “raw” sul disco (⇒ nessun file)<br />
3. Hooking INT13 per patching run-time <strong>del</strong> kernel<br />
4. Caricamento device driver<br />
5. Run-time patch in disk.sys per nascondere il MBR modificato<br />
Fonte: F-Secure & Symantec<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 23
Root-kit<br />
Esempio: Mebroot (2007–2008)<br />
Funzionamento<br />
1. Infezione master boot record (MBR)<br />
2. Dati memorizzati “raw” sul disco (⇒ nessun file)<br />
3. Hooking INT13 per patching run-time <strong>del</strong> kernel<br />
4. Caricamento device driver<br />
5. Run-time patch in disk.sys per nascondere il MBR modificato<br />
Versioni successive ancora più evolute<br />
This <strong>malware</strong> is very professionally written and produced.<br />
Which of course means it’s not written for fun.<br />
Fonte: F-Secure & Symantec<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 23
Root-kit<br />
Contromisure: Windows Vista<br />
Caratteristiche<br />
\Device\PhysicalMemory non accessibile da user-mode<br />
Firma dei driver<br />
PatchGuard<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 24
Root-kit<br />
Contromisure: Windows Vista<br />
Caratteristiche<br />
\Device\PhysicalMemory non accessibile da user-mode<br />
Firma dei driver<br />
PatchGuard<br />
Accesso a \Device\PhysicalMemory consente la modifica<br />
<strong>del</strong>la memoria kernel (senza necessità di driver)<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 24
Root-kit<br />
Contromisure: Windows Vista<br />
Caratteristiche<br />
\Device\PhysicalMemory non accessibile da user-mode<br />
Firma dei driver<br />
PatchGuard<br />
Accesso a \Device\PhysicalMemory consente la modifica<br />
<strong>del</strong>la memoria kernel (senza necessità di driver)<br />
Problemi<br />
Modifica <strong>del</strong>lo swap file<br />
Richiede accesso raw al disco (disabilitato da user-mode nelle<br />
versioni attuali di Vista)<br />
⇒ Funzionalità fornita da driver firmati (es., disk editor)<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 24
Root-kit<br />
Contromisure: Windows Vista<br />
Caratteristiche<br />
\Device\PhysicalMemory non accessibile da user-mode<br />
Firma dei driver<br />
PatchGuard<br />
Richiesta firma digitale di driver e componenti critici<br />
Nemmeno Administrator può caricare driver non firmati<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 24
Root-kit<br />
Contromisure: Windows Vista<br />
Caratteristiche<br />
\Device\PhysicalMemory non accessibile da user-mode<br />
Firma dei driver<br />
PatchGuard<br />
Richiesta firma digitale di driver e componenti critici<br />
Nemmeno Administrator può caricare driver non firmati<br />
Problemi<br />
Problemi “etici” (. . . ed economici!)<br />
Basta un reboot (es., Vbootkit)<br />
Vulnerabilità in driver firmati?<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 24
Root-kit<br />
Contromisure: Windows Vista<br />
Caratteristiche<br />
\Device\PhysicalMemory non accessibile da user-mode<br />
Firma dei driver<br />
PatchGuard<br />
Da Win XP e Win 2003 SP1 (x64)<br />
Verifica periodica di integrità<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 24
Root-kit<br />
Contromisure: Windows Vista<br />
Caratteristiche<br />
\Device\PhysicalMemory non accessibile da user-mode<br />
Firma dei driver<br />
PatchGuard<br />
Da Win XP e Win 2003 SP1 (x64)<br />
Verifica periodica di integrità<br />
Problemi<br />
Problemi di compatibilità<br />
3 versioni, poi exploitate<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 24
App App App<br />
Kernel & drivers<br />
BIOS/SMM<br />
Hypervisor<br />
CPU<br />
Chipset<br />
Malware di nuova generazione
Malware di nuova generazione<br />
App App App<br />
BIOS/SMM<br />
Kernel & drivers<br />
Hypervisor<br />
CPU<br />
Chipset<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 26
Malware di nuova generazione<br />
Malware<br />
detector<br />
App App App<br />
BIOS/SMM<br />
Kernel & drivers<br />
Hypervisor<br />
CPU<br />
Chipset<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 26
Malware di nuova generazione<br />
Malware<br />
detector<br />
App App App<br />
BIOS/SMM<br />
Kernel & drivers<br />
Hypervisor<br />
CPU<br />
Chipset<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 26
Malware di nuova generazione<br />
Mag 2006<br />
S. King<br />
SubVirt<br />
Ago 2006<br />
D. Dai Zovi<br />
Vitriol<br />
Ago 2006<br />
J. Rutkowska<br />
Blue Pill<br />
Set 2008<br />
S. Embleton<br />
SMM rootkit<br />
Mar 2009<br />
J. Rutkowska<br />
SMM memory attack<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 27
App App App<br />
BIOS/SMM<br />
Kernel & drivers<br />
Hypervisor<br />
CPU<br />
Chipset<br />
Malware basati su hypervisor
Hypervisor<br />
App App App<br />
Kernel<br />
Hardware<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 29
Hypervisor<br />
App App App<br />
Kernel<br />
Hypervisor<br />
Hardware<br />
Un hypervisor, anche chiamato virtual machine monitor (VMM), è<br />
un componente software che permette di condividere le risorse<br />
fisiche di un sistema tra più sistemi operativi<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 29
Hypervisor<br />
App App App<br />
Kernel<br />
Hypervisor<br />
Hardware<br />
App App App<br />
Kernel<br />
Un hypervisor, anche chiamato virtual machine monitor (VMM), è<br />
un componente software che permette di condividere le risorse<br />
fisiche di un sistema tra più sistemi operativi<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 29
Hypervisor<br />
App App App<br />
Kernel<br />
Hypervisor<br />
Hardware<br />
App App App<br />
Kernel<br />
Le CPU dei moderni PC supportano <strong>del</strong>le estensioni (es. Intel<br />
VT-x) che facilitano il compito <strong>del</strong>l’hypervisor<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 29
Malware basati su hypervisor<br />
App App App<br />
Kernel<br />
Hardware<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 30
Malware basati su hypervisor<br />
App App App<br />
Kernel<br />
Hardware<br />
App App App<br />
Kernel<br />
Hypervisor<br />
Hardware<br />
La macchina fisica viene convertita “di nascosto” in una virtuale<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 30
Malware basati su hypervisor<br />
App App App<br />
Kernel<br />
Hardware<br />
App App App<br />
Kernel<br />
Hypervisor<br />
Hardware<br />
La macchina fisica viene convertita “di nascosto” in una virtuale<br />
Vantaggi <strong>del</strong>l’attaccante:<br />
Pieno controllo <strong>del</strong> sistema<br />
Invisibilità (quasi) totale<br />
Possibilità di sviluppare nuove “applicazioni maligne”<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 30
Malware basato su hypervisor software (SubVirt)<br />
Modalità di installazione:<br />
L’installazione avviene durante lo spegnimento<br />
Modifica <strong>del</strong>la sequenza di avvio:<br />
BIOS MBR<br />
Boot<br />
Sector<br />
Sistema<br />
Operativo<br />
Malware basato su Virtual PC o VMware<br />
Fonte: SubVirt: Implementing <strong>malware</strong> with virtual machines (S. T. King, . . . )<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 31
Malware basato su hypervisor software (SubVirt)<br />
Modalità di installazione:<br />
L’installazione avviene durante lo spegnimento<br />
Modifica <strong>del</strong>la sequenza di avvio:<br />
BIOS Malware<br />
MBR<br />
Boot<br />
Sector<br />
Malware basato su Virtual PC o VMware<br />
Sistema<br />
Operativo<br />
Fonte: SubVirt: Implementing <strong>malware</strong> with virtual machines (S. T. King, . . . )<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 31
Supporto hardware per la virtualizzazione<br />
Intel VT-X, AMD SVM<br />
R3<br />
R1<br />
R0<br />
App App App<br />
Kernel<br />
Hypervisor<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 32
Supporto hardware per la virtualizzazione<br />
Intel VT-X, AMD SVM<br />
R3<br />
R1<br />
R0<br />
App App App<br />
Kernel<br />
Hypervisor<br />
R3<br />
R0<br />
Root<br />
mode<br />
App App App<br />
Kernel<br />
Hypervisor<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 32
Supporto hardware per la virtualizzazione<br />
Intel VT-X, AMD SVM<br />
R3<br />
R1<br />
R0<br />
App App App<br />
Kernel<br />
Hypervisor<br />
R3<br />
R0<br />
Root<br />
mode<br />
Sistema operativo eseguito normalmente<br />
Overhead minimo<br />
App App App<br />
Kernel<br />
Hypervisor<br />
Trasparenza & isolamento garantiti dall’hardware<br />
Disponibile su tutti i PC (desktop & portatili)<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 32
Supporto hardware per la virtualizzazione<br />
Intel VT-X, AMD SVM<br />
R3<br />
R1<br />
R0<br />
App App App<br />
Kernel<br />
Hypervisor<br />
Enter ExitEnter<br />
R3<br />
R0<br />
Root<br />
mode<br />
App App App<br />
Kernel<br />
Hypervisor<br />
Hypervisor Kernel/App<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 32
Supporto hardware per la virtualizzazione<br />
Intel VT-X, AMD SVM<br />
R3<br />
R1<br />
R0<br />
App App App<br />
Kernel<br />
Hypervisor<br />
Enter ExitEnter<br />
R3<br />
R0<br />
Root<br />
mode<br />
App App App<br />
Kernel<br />
Hypervisor<br />
Hypervisor Kernel/App<br />
L’hypervisor può configurare dinamicamente l’insieme<br />
degli eventi che causano “exit”<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 32
Supporto hardware per la virtualizzazione<br />
Intel VT-X, AMD SVM<br />
R3<br />
R1<br />
R0<br />
App App App<br />
Kernel<br />
Hypervisor<br />
R3<br />
R0<br />
Root<br />
mode<br />
App App App<br />
Kernel<br />
Hypervisor<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 32
“Late launch” di un hypervisor<br />
Kernel<br />
Installazione di un hypervisor in un sistema in esecuzione<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 33
“Late launch” di un hypervisor<br />
Kernel<br />
Hypervisor<br />
Installazione di un hypervisor in un sistema in esecuzione<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 33
“Late launch” di un hypervisor<br />
Kernel<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 33
“Late launch” di un hypervisor<br />
Kernel<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 33
“Late launch” di un hypervisor<br />
Kernel<br />
Hypervisor<br />
Installazione di un hypervisor maligno in un sistema in esecuzione<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 33
“Late launch” di un hypervisor<br />
Kernel<br />
Hypervisor<br />
L’installazione <strong>del</strong>l’hypervisor è impercettibile dall’utente<br />
Il <strong>malware</strong> ha pieno controllo <strong>del</strong> sistema<br />
Una volta installato il <strong>malware</strong> è completamente trasparente<br />
Tutti gli utenti con PC con supporto hardware per<br />
virtualizzazione (abilitato da BIOS) sono vulnerabili!!!<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 33
Keyboard sniffer<br />
“Exit” ad ogni operazione di I/O sulla porta <strong>del</strong>la tastiera<br />
Enter Exit (I/O)<br />
Hypervisor Kernel/App<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 34
Il problema è reale<br />
Blue pill (Windows Vista 64)<br />
Vitriol (Mac OS X)<br />
∼6000LOC<br />
Infezione di in un sistema<br />
in esecuzione<br />
Trasparente<br />
Blue pill/Vitriol vs. SubVirt:<br />
Bastato su VMware<br />
L’infezione richiede il<br />
riavvio <strong>del</strong> sistema<br />
Non trasparente<br />
Fonte: Subverting Vista Kernel For Fun And Profit (J. Rutkowska)<br />
Fonte: Hardware Virtualization Based rootkits (D. Dai Zovi)<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 35
Siete vulnerabili?<br />
$ cat /proc/cpuinfo<br />
processor : 0<br />
vendor_id : GenuineIntel<br />
cpu family : 6<br />
mo<strong>del</strong> : 26<br />
...<br />
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov<br />
pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe<br />
syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts<br />
rep_good pni monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr dca<br />
sse4_1 sse4_2 popcnt lahf_lm ida<br />
bogomips : 5070.65<br />
...<br />
$<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 36
Limitazioni & Prevenzione<br />
Limitazioni:<br />
È necessario eseguire codice kernel per caricare l’hypervisor<br />
Se un hypervisor è già caricato il nuovo non ha pieno controllo<br />
<strong>del</strong> sistema<br />
Il supporto hardware per la virtualizzazione deve essere abilitato<br />
da BIOS<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 37
Limitazioni & Prevenzione<br />
Limitazioni:<br />
È necessario eseguire codice kernel per caricare l’hypervisor<br />
Se un hypervisor è già caricato il nuovo non ha pieno controllo<br />
<strong>del</strong> sistema<br />
Il supporto hardware per la virtualizzazione deve essere abilitato<br />
da BIOS<br />
Prevenzione:<br />
Impedire l’esecuzione di codice kernel non fidato (driver)<br />
Hypervisor “dummy”<br />
Disabilitare il supporto hardware per la virtualizzazione da BIOS<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 37
Invisibile al 100%?<br />
Il <strong>malware</strong> è invisibile al 100%, l’hypervisor non lo è<br />
L’hypervisor può alterare leggermente lo stato <strong>del</strong>la CPU<br />
L’overhead è minimo, ma non nullo (alcune istruzioni sono più<br />
costose da eseguire quando l’hypervisor è caricato)<br />
for (i = 1 ... 1000) {<br />
cpuid();<br />
}<br />
Fonte: Compatibility is Not Transparency: VMM Detection Myths and Realities (Tal<br />
Garfinkel, . . . )<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 38
Altri usi <strong>del</strong> “late launching”<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 39
Altri usi <strong>del</strong> “late launching”<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 39
Altri usi <strong>del</strong> “late launching”<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 39
Altri usi <strong>del</strong> “late launching”<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 39
App App App<br />
BIOS/SMM<br />
Kernel & drivers<br />
Hypervisor<br />
CPU<br />
Chipset<br />
SMM <strong>malware</strong>
SMM <strong>malware</strong><br />
System Management Mode<br />
modalità di esecuzione con alti privilegi<br />
per power management, emulazione PS/2, . . .<br />
memoria SMM può essere acceduta solo da modalità SMM<br />
(no da kernel e nemmeno hypervisor)<br />
Protected<br />
mode<br />
SMI#<br />
rsm<br />
SMM<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 41
SMM <strong>malware</strong><br />
System Management Mode<br />
modalità di esecuzione con alti privilegi<br />
per power management, emulazione PS/2, . . .<br />
memoria SMM può essere acceduta solo da modalità SMM<br />
(no da kernel e nemmeno hypervisor)<br />
SMM <strong>malware</strong><br />
accesso all’intera memoria di sistema<br />
privilegi maggiori di un eventuale hypervisor<br />
Fonte: SMM Rootkits: A New Breed of OS Independent Malware (S. Embleton, . . . )<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 41
SMM <strong>malware</strong><br />
System Management Mode<br />
modalità di esecuzione con alti privilegi<br />
per power management, emulazione PS/2, . . .<br />
memoria SMM può essere acceduta solo da modalità SMM<br />
(no da kernel e nemmeno hypervisor)<br />
Come?<br />
Tecnica #1 – Bug architetturale Intel<br />
1. impostare memoria SMM come “cachable”<br />
2. scrittura memoria SMM<br />
(⇒ modifica <strong>del</strong>la cache, concessa dal controller)<br />
3. SMI#<br />
Fonte: SMM Cache Fun (Invisible Things Lab)<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 41
SMM <strong>malware</strong><br />
System Management Mode<br />
modalità di esecuzione con alti privilegi<br />
per power management, emulazione PS/2, . . .<br />
memoria SMM può essere acceduta solo da modalità SMM<br />
(no da kernel e nemmeno hypervisor)<br />
Come?<br />
Tecnica #2 – Bug architetturale Intel<br />
mov 0x407d(%rip),%rax<br />
callq *0x18(%rax)<br />
Fuori da memoria SMM!<br />
Fonte: SMM Cache Fun (Invisible Things Lab)<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 41
Altre forme di <strong>malware</strong><br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 42
Altre forme di <strong>malware</strong><br />
Firmware modificato per “sniffare” le pressioni dei tasti<br />
Malware impossibile da identificare ed in grado di sopravvivere<br />
al reboot<br />
TPM completamente inefficace<br />
Fonte: Reversing and exploiting an Apple firmware update (K. Chen)<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 42
App<br />
?<br />
App App<br />
Kernel & drivers<br />
Hypervisor<br />
BIOS/SMM<br />
CPU<br />
Chipset<br />
CPU <strong>malware</strong>
<strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong><br />
Domande?<br />
Lorenzo Martignoni <strong>Roberto</strong> <strong>Paleari</strong><br />
lorenzo.martignoni@uniud.it roberto@security.dico.unimi.it<br />
Università degli Studi di Udine Università degli Studi di Milano<br />
17 marzo 2010 <strong>Evoluzione</strong> <strong>del</strong> <strong>malware</strong> 44