09.06.2013 Views

Evoluzione del malware - Roberto Paleari

Evoluzione del malware - Roberto Paleari

Evoluzione del malware - Roberto Paleari

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!