Rootkit

Transcript

Rootkit
Università degli Studi di Milano
Facoltà di Scienze Matematiche, Fisiche e Naturali
Anno Accademico 2011/2012
Rootkit
Alessandro Reina <[email protected]>
Aristide Fattori <[email protected]>
January 19, 2012
A. Fattori
Rootkit
January 19, 2012
1 / 36
Introduzione
Rootkit
I rootkit sono (insiemi di) strumenti utilizzati per nascondere
la presenza di attività maligne su in sistema compromesso, in
modo tale da prolungare il più possibile la possibilità di
accedervi dopo la compromissione
A. Fattori
Rootkit
January 19, 2012
3 / 36
Rootkit
I rootkit sono (insiemi di) strumenti utilizzati per nascondere
la presenza di attività maligne su in sistema compromesso, in
modo tale da prolungare il più possibile la possibilità di
accedervi dopo la compromissione
Cosa nascondere?
File
Connessioni di rete
Chiavi di registro
Processi
Servizi
...
A. Fattori
Rootkit
January 19, 2012
3 / 36
Rootkit
I rootkit sono (insiemi di) strumenti utilizzati per nascondere
la presenza di attività maligne su in sistema compromesso, in
modo tale da prolungare il più possibile la possibilità di
accedervi dopo la compromissione
Cosa nascondere?
File
Connessioni di rete
Chiavi di registro
Processi
Servizi
...
Mentre la maggior parte dei malware “comuni” sono per sistemi
Windows, esistono numerosi rootkit “into the wild” per sistemi
Linux. Perché?
A. Fattori
Rootkit
January 19, 2012
3 / 36
Dove agiscono?
App
App
App
Kernel & drivers
R3
Hypervisor
R0
BIOS/SMM
Chipset
CPU
A. Fattori
Rootkit
January 19, 2012
4 / 36
Dove agiscono?
App
App
App
Kernel & drivers
R3
Hypervisor
R0
BIOS/SMM
Chipset
CPU
A. Fattori
Rootkit
January 19, 2012
4 / 36
Dove agiscono?
App
App
App
Kernel & drivers
R3
Hypervisor
R0
BIOS/SMM
Chipset
CPU
A. Fattori
Rootkit
January 19, 2012
4 / 36
Dove agiscono?
App
App
App
Kernel & drivers
R-1
Hypervisor
BIOS/SMM
Chipset
CPU
A. Fattori
Rootkit
January 19, 2012
4 / 36
Dove agiscono?
App
App
App
Kernel & drivers
R-2
Hypervisor
BIOS/SMM
Chipset
CPU
A. Fattori
Rootkit
January 19, 2012
4 / 36
Dove agiscono?
App
App
App
Kernel & drivers
?
Hypervisor
BIOS/SMM
Chipset
CPU
A. Fattori
Rootkit
January 19, 2012
4 / 36
App
App
App
Kernel & drivers
Hypervisor
BIOS/SMM
Chipset
CPU
User-space
Rootkit in user-space
Installare una backdoor a user-space è banale, ma come
nasconderla?
Possibile?
necessari privilegi di amministratore?
non possono modificare la sorgente delle informazioni. . .
(kernel)
. . . modificano gli strumenti che le leggono.
A. Fattori
Rootkit
January 19, 2012
6 / 36
Rootkit in user-space
Linux - /proc fs
/proc filesystem
The /proc file system is a special file system in the linux kernel.
...
The files in the procfs are there to allow userland programs access
to certain information from the kernel.
joystick@arya:˜$ cat /proc/29737/cmdline
nc iron2.laser.dico.unimi.it 22222
joystick@arya:˜$ cat /proc/29737/status
Name: nc
State: S (sleeping)
...
Uid: 1000 1000 1000 1000
A. Fattori
Rootkit
January 19, 2012
7 / 36
Rootkit in user-space
Linux - tool di sistema
Tool
netstat, ps, ls, . . .
il rootkit deve impedire che questi tool rivelino la presenza di
connessioni/processi/file sospetti
Come fare?
A. Fattori
Rootkit
January 19, 2012
8 / 36
Rootkit in user-space
Linux - tool di sistema
Tool
netstat, ps, ls, . . .
il rootkit deve impedire che questi tool rivelino la presenza di
connessioni/processi/file sospetti
Come fare?
Modificare/sostituire i tool
Modificare le librerie
Hooking
A. Fattori
Rootkit
January 19, 2012
8 / 36
Rootkit in user-space
Binary Rootkit
Tipologia di rootkit estremamamente primitiva, solitamente
costituita da un archivio contenente binari modificati che, una
volta installati sul sistema compromesso, garantiscono accesso
remoto e hiding.
A. Fattori
Rootkit
January 19, 2012
9 / 36
Rootkit in user-space
Binary Rootkit
W00tkit, 2002
Step principali
Colleziona md5sum dei file che sostituisce
installa tool di sistema trojanati (tra cui md5sum)
installa backdoor
hardening del sistema
comunica l’esito all’attacker
log cleaning
backdoor aggiuntiva in demone ssh
Fonte: http: // www. ouah. org/ iRootkits. pdf
A. Fattori
Rootkit
January 19, 2012
9 / 36
Rootkit in user-space
Binary Rootkit
Problemi dei binary rootkit
La modifica dei componenti può essere rilevata
vulnerabile a analisi da kernel-mode
vulnerabile a analisi out-of-the-box
A. Fattori
Rootkit
January 19, 2012
9 / 36
Rootkit in user-space
User-space Hooking
Hooking: installazione di “punti di aggancio” all’interno di un
sistema o di un processo, in corrispondenza dei quali vengono
effettuate determinate azioni.
Come fare su linux?
A. Fattori
Rootkit
January 19, 2012
10 / 36
Rootkit in user-space
User-space Hooking
Come fare su linux?
joystick@arya:˜$ cat ptrace.c
int ptrace(int a, int b, int c, int d) {
return 0;
}
joystick@arya:˜$ gcc -shared ptrace.c -o ptrace.so
joystick@arya:˜$ LD PRELOAD=./ptrace.so strace -fi ./noptrace
...
Hello World!
...
A. Fattori
Rootkit
January 19, 2012
10 / 36
Rootkit in user-space
User-space Hooking
. . . e su windows?
A. Fattori
Rootkit
January 19, 2012
10 / 36
Rootkit in user-space
User-space Hooking
. . . e su windows?
Gli indirizzi delle funzioni di libreria sono caricati dal loader
nella IAT ⇒ modificando un entry della IAT si può fare
hooking.
Non esiste LD PRELOAD, ma . . .
DLL Injection
Aggiungere una libreria a quelle caricate di default
process manipulation (CreateRemoteThread)
SetWindowsHookEx
...
La DLL iniettata modifica l’entry della IAT che si vuole hookare in
modo che punti a una funzione definita nella DLL.
A. Fattori
Rootkit
January 19, 2012
10 / 36
Rootkit in user-space
User-space Hooking
. . . e su windows?
Gli indirizzi delle funzioni di libreria sono caricati dal loader
nella IAT ⇒ modificando un entry della IAT si può fare
hooking.
Non esiste LD PRELOAD, ma . . .
DLL Injection
Bloccato da ≥ Vista
Aggiungere una libreria a quelle caricate di default
process manipulation (CreateRemoteThread)
SetWindowsHookEx
...
La DLL iniettata modifica l’entry della IAT che si vuole hookare in
modo che punti a una funzione definita nella DLL.
A. Fattori
Rootkit
January 19, 2012
10 / 36
Rootkit in user-space
Esempio: hijacking libproc
Esempio di process listing
#include <proc/readproc.h>
#include <stdio.h>
int main(int argc, char ∗∗argv) {
PROCTAB∗ proc = openproc(PROC FILLMEM | PROC FILLSTAT \
| PROC FILLSTATUS);
proc t proc info;
memset(&proc info, 0, sizeof(proc info));
while (readproc(proc, &proc info) != NULL) {
printf(”%s\n”, proc info.cmd);
}
closeproc(proc);
}
Bypass
Possiamo ri-definire la readproc in modo che salti i processi
che si vogliono nascondere
Esempio live: ps preload.c
http://security.dico.unimi.it/sicurezza1112/todeploy.tar.gz
A. Fattori
Rootkit
January 19, 2012
11 / 36
App
App
App
Kernel & drivers
Hypervisor
BIOS/SMM
Chipset
CPU
Kernel-space
Kernel Space Hooking
Obiettivo
Dirottare il flusso di esecuzione modificando un code pointer
Esempi
Interrupt Descriptor Table (IDT)
Model Specific Register (MSR)
System Service Dispatch Table (SSDT)
A. Fattori
Rootkit
January 19, 2012
13 / 36
Root-kit
Hooking: IDT
Interrupt Descriptor Table
Dispatching di interruzioni ed eccezioni
App
App
App
User-space
Sw int./Excep.
Kernel-space
Handler
Interrupt
&handleri
IDT
A. Fattori
Rootkit
January 19, 2012
14 / 36
Root-kit
Hooking: IDT
Interrupt Descriptor Table
Dispatching di interruzioni ed eccezioni
Hijacking di 1+ handler (e.g., 0x2e → KiSystemService)
App
App
App
User-space
Sw int./Excep.
Kernel-space
Handler
Interrupt
&handlerm
IDT
A. Fattori
Rootkit
Malicious
handler
January 19, 2012
14 / 36
Root-kit
Hooking: IDT
Interrupt Descriptor Table
Dispatching di interruzioni ed eccezioni
Hijacking di 1+ handler (e.g., 0x2e → KiSystemService)
Problemi
Non è possibile fare filtering ⇒ interrupt numerosi
Le system call non possono essere intercettate se viene usata
sysenter/syscall
Detection semplice:
if (IDT[0x2e] != KiSystemService) then ...
A. Fattori
Rootkit
January 19, 2012
14 / 36
Root-kit
Hooking: SSDT (Windows)
System Service Descriptor Table
Dispatching system call
App
App
App
int/sysenter/syscall
User-space
Kernel-space
Handler
Syscall
gate
&handleri
SSDT
A. Fattori
Rootkit
January 19, 2012
15 / 36
Root-kit
Hooking: SSDT (Windows)
System Service Descriptor Table
Dispatching system call
Hijacking di 1+ descrittori (e.g., 0x74 → NtOpenFile)
App
App
App
int/sysenter/syscall
User-space
Kernel-space
Handler
Syscall
gate
&handlerm
SSDT
A. Fattori
Rootkit
Malicious
handler
January 19, 2012
15 / 36
Root-kit
Hooking: SSDT (Windows)
System Service Descriptor Table
Dispatching system call
Hijacking di 1+ descrittori (e.g., 0x74 → NtOpenFile)
Problemi
Detection comunque semplice:
if (SSDT[0x74] != NtOpenFile) then ...
A. Fattori
Rootkit
January 19, 2012
15 / 36
Root-kit
Syscall hooking on linux
Su linux simbolo della syscall table non è esportato ⇒ non
possiamo accederci direttamente da un modulo.
Come fare?
A. Fattori
Rootkit
January 19, 2012
16 / 36
Root-kit
Syscall hooking on linux
Su linux simbolo della syscall table non è esportato ⇒ non
possiamo accederci direttamente da un modulo.
Come fare?
Input:
Qualcuno deve usare la syscall table. Chi?
A. Fattori
Rootkit
January 19, 2012
16 / 36
Root-kit
Syscall hooking on linux
Su linux simbolo della syscall table non è esportato ⇒ non
possiamo accederci direttamente da un modulo.
Come fare?
Input:
Qualcuno deve usare la syscall table. Chi? Il syscall gate.
A. Fattori
Rootkit
January 19, 2012
16 / 36
Root-kit
Syscall hooking on linux
Su linux simbolo della syscall table non è esportato ⇒ non
possiamo accederci direttamente da un modulo.
Come fare?
Input:
Qualcuno deve usare la syscall table. Chi? Il syscall gate.
Chi lo invoca? Come viene invocata una syscall?
A. Fattori
Rootkit
January 19, 2012
16 / 36
Root-kit
Syscall hooking on linux
Su linux simbolo della syscall table non è esportato ⇒ non
possiamo accederci direttamente da un modulo.
Come fare?
Input:
Qualcuno deve usare la syscall table. Chi? Il syscall gate.
Chi lo invoca? Come viene invocata una syscall?
L’handler dell’interrupt 0x80.
A. Fattori
Rootkit
January 19, 2012
16 / 36
Root-kit
Syscall hooking on linux
Su linux simbolo della syscall table non è esportato ⇒ non
possiamo accederci direttamente da un modulo.
Come fare?
Input:
Qualcuno deve usare la syscall table. Chi? Il syscall gate.
Chi lo invoca? Come viene invocata una syscall?
L’handler dell’interrupt 0x80.
Dov’è salvato l’indirizzo dell’handler?
A. Fattori
Rootkit
January 19, 2012
16 / 36
Root-kit
Syscall hooking on linux
Su linux simbolo della syscall table non è esportato ⇒ non
possiamo accederci direttamente da un modulo.
Come fare?
Input:
Qualcuno deve usare la syscall table. Chi? Il syscall gate.
Chi lo invoca? Come viene invocata una syscall?
L’handler dell’interrupt 0x80.
Dov’è salvato l’indirizzo dell’handler? Nella IDT.
A. Fattori
Rootkit
January 19, 2012
16 / 36
Root-kit
Syscall hooking on linux
Su linux simbolo della syscall table non è esportato ⇒ non
possiamo accederci direttamente da un modulo.
Come fare?
Input:
Qualcuno deve usare la syscall table. Chi? Il syscall gate.
Chi lo invoca? Come viene invocata una syscall?
L’handler dell’interrupt 0x80.
Dov’è salvato l’indirizzo dell’handler? Nella IDT.
Quindi:
si ottiene l’indirizzo della IDT tramite la sidt
syscall handler = IDT[0x80]
si parsa il codice dell’handler finché non si trova l’indirizzo
della syscall table.
A. Fattori
Rootkit
January 19, 2012
16 / 36
Root-kit
Syscall hooking on linux
Su linux simbolo della syscall table non è esportato ⇒ non
possiamo accederci direttamente da un modulo.
root@sicurezza:˜#
insmod
syscall.ko
Come
fare?
root@sicurezza:˜# dmesg | tail -1
Input:
[ 1336.493513] system call: c1271920
Qualcuno
deve usare la syscall
Chi? Il syscall gate.
root@sicurezza:˜#
gdb -qtable.
./vmlinux
Chi logdb>
invoca?
Come
viene invocata una syscall?
x/60i
0xc1271920
L’handler
. . . dell’interrupt 0x80.
Dov’è 0xc1271965:
salvato l’indirizzo
Nella IDT.
calldell’handler?
*-0x3ed87d40(,%eax,4)
Quindi: . . .
gdb>
p/x -0x3ed87d40
si ottiene
l’indirizzo
della IDT tramite la sidt
$1
=
0xc12782c0
syscall handler = IDT[0x80]
si parsa il codice dell’handler finché non si trova l’indirizzo
della syscall table.
A. Fattori
Rootkit
January 19, 2012
16 / 36
Root-kit
Run-time patching
È possibile intercettare l’esecuzione in molti punti diversi
Più difficile da rilevare
...
NtOpenFile:
movl $0x74, %eax
movl $0x7ffe0300, %edx
nop
call *%edx
ret $0x18
...
A. Fattori
Rootkit
January 19, 2012
17 / 36
Root-kit
Run-time patching
È possibile intercettare l’esecuzione in molti punti diversi
Più difficile da rilevare
...
NtOpenFile:
movl $0x74, %eax
pushl MaliciousHandler
ret
call *%edx
ret $0x18
...
A. Fattori
MaliciousHandler:
...
movl $0x7ffe0300, %edx
nop
push addr
ret
Rootkit
January 19, 2012
17 / 36
Root-kit
Run-time patching
È possibile intercettare l’esecuzione in molti punti diversi
Più difficile da rilevare
...
NtOpenFile:
movl $0x74, %eax
pushl MaliciousHandler
ret
call *%edx
ret $0x18
...
A. Fattori
MaliciousHandler:
...
movl $0x7ffe0300, %edx
nop
push addr
ret
Rootkit
January 19, 2012
17 / 36
Root-kit
Run-time patching
È possibile intercettare l’esecuzione in molti punti diversi
Più difficile da rilevare
...
NtOpenFile:
movl $0x74, %eax
pushl MaliciousHandler
ret
call *%edx
ret $0x18
...
A. Fattori
MaliciousHandler:
...
movl $0x7ffe0300, %edx
nop
push addr
ret
Rootkit
January 19, 2012
17 / 36
Root-kit
Run-time patching
È possibile intercettare l’esecuzione in molti punti diversi
Più difficile da rilevare
...
NtOpenFile:
movl $0x74, %eax
pushl MaliciousHandler
ret
call *%edx
ret $0x18
...
A. Fattori
MaliciousHandler:
...
movl $0x7ffe0300, %edx
nop
push addr
ret
Rootkit
January 19, 2012
17 / 36
Root-kit
Run-time patching
È possibile intercettare l’esecuzione in molti punti diversi
Più difficile da rilevare
...
NtOpenFile:
movl $0x74, %eax
pushl MaliciousHandler
ret
call *%edx
ret $0x18
...
A. Fattori
MaliciousHandler:
...
movl $0x7ffe0300, %edx
nop
push addr
ret
Rootkit
January 19, 2012
17 / 36
Root-kit
Run-time patching
È possibile intercettare l’esecuzione in molti punti diversi
Più difficile da rilevare
...
NtOpenFile:
movl $0x74, %eax
pushl MaliciousHandler
ret
call *%edx
ret $0x18
...
A. Fattori
MaliciousHandler:
...
movl $0x7ffe0300, %edx
nop
push addr
ret
Rootkit
January 19, 2012
17 / 36
Root-kit
Run-time patching
È possibile intercettare l’esecuzione in molti punti diversi
Più difficile da rilevare
...
NtOpenFile:
movl $0x74, %eax
pushl MaliciousHandler
ret
call *%edx
ret $0x18
...
A. Fattori
MaliciousHandler:
...
movl $0x7ffe0300, %edx
nop
push addr
ret
Rootkit
January 19, 2012
17 / 36
Root-kit
Run-time patching
È possibile intercettare l’esecuzione in molti punti diversi
Più difficile da rilevare
...
NtOpenFile:
movl $0x74, %eax
pushl MaliciousHandler
ret
call *%edx
ret $0x18
...
A. Fattori
MaliciousHandler:
...
movl $0x7ffe0300, %edx
nop
push addr
ret
Rootkit
January 19, 2012
17 / 36
Root-kit
Run-time patching
È possibile intercettare l’esecuzione in molti punti diversi
Più difficile da rilevare
...
NtOpenFile:
movl $0x74, %eax
pushl MaliciousHandler
ret
call *%edx
ret $0x18
...
A. Fattori
MaliciousHandler:
...
movl $0x7ffe0300, %edx
nop
push addr
ret
Rootkit
January 19, 2012
17 / 36
Root-kit
Run-time patching
È possibile intercettare l’esecuzione in molti punti diversi
Più difficile da rilevare
...
NtOpenFile:
movl $0x74, %eax
pushl MaliciousHandler
ret
call *%edx
ret $0x18
...
A. Fattori
MaliciousHandler:
...
movl $0x7ffe0300, %edx
nop
push addr
ret
Rootkit
January 19, 2012
17 / 36
Root-kit
Direct Kernel Object Manipulation (DKOM)
Alterazione delle strutture kernel in memoria
Nessun hook o patch al codice
A. Fattori
Rootkit
January 19, 2012
18 / 36
Root-kit
Direct Kernel Object Manipulation (DKOM)
Alterazione delle strutture kernel in memoria
Nessun hook o patch al codice
A. Fattori
EPROCESS
EPROCESS
EPROCESS
csrss.exe
malware.exe
svchost.exe
Rootkit
January 19, 2012
18 / 36
Root-kit
Direct Kernel Object Manipulation (DKOM)
Alterazione delle strutture kernel in memoria
Nessun hook o patch al codice
EPROCESS
EPROCESS
EPROCESS
csrss.exe
malware.exe
svchost.exe
Il processo malware.exe non compare più tra quelli in
esecuzione
Scheduling è thread-based
A. Fattori
Rootkit
January 19, 2012
18 / 36
Root-kit
Direct Kernel Object Manipulation (DKOM)
Alterazione delle strutture kernel in memoria
Nessun hook o patch al codice
MODULE ENTRY
MODULE ENTRY
MODULE ENTRY
ntfs.sys
malware.sys
pci.sys
C:\WINDOWS> drivers.exe
ModuleName
Code
Data
Bss
Paged
Init
LinkDate
-----------------------------------------------------------------------------...
ntfs.sys
96000
7040
0 412544
14080 Wed Aug 04 08:15:06 2004
malware.sys
3903
0
0
0
0 Sat Mar 13 02:22:32 2010
pci.sys
16000
1664
0
34176
5632 Wed Aug 04 08:07:45 2004
...
A. Fattori
Rootkit
January 19, 2012
18 / 36
Root-kit
Direct Kernel Object Manipulation (DKOM)
Alterazione delle strutture kernel in memoria
Nessun hook o patch al codice
MODULE ENTRY
MODULE ENTRY
MODULE ENTRY
ntfs.sys
malware.sys
pci.sys
C:\WINDOWS> drivers.exe
ModuleName
Code
Data
Bss
Paged
Init
LinkDate
-----------------------------------------------------------------------------...
ntfs.sys
96000
7040
0 412544
14080 Wed Aug 04 08:15:06 2004
pci.sys
16000
1664
0
34176
5632 Wed Aug 04 08:07:45 2004
...
A. Fattori
Rootkit
January 19, 2012
18 / 36
DEMO
Modificare il file processlist.c in modo che il processo
hideme venga eliminato dalla lista dei processi.
Root-kit
Esempio: Mebroot (2007–2008)
Funzionamento
1
Infezione master boot record (MBR)
2
Dati memorizzati “raw ” sul disco (⇒ nessun file)
3
Hooking INT13 per patching run-time del kernel
4
Caricamento device driver
5
Run-time patch in disk.sys per nascondere il MBR
modificato
Fonte: F-Secure & Symantec
Fonte: http: // goo. gl/ 1Sk5q
A. Fattori
Rootkit
January 19, 2012
20 / 36
Root-kit
Esempio: Mebroot (2007–2008)
Funzionamento
1
Infezione master boot record (MBR)
2
Dati memorizzati “raw ” sul disco (⇒ nessun file)
3
Hooking INT13 per patching run-time del kernel
4
Caricamento device driver
5
Run-time patch in disk.sys per nascondere il MBR
modificato
Versioni successive ancora più evolute
This malware is very professionally written and produced.
Which of course means it’s not written for fun.
Fonte: F-Secure & Symantec
Fonte: http: // goo. gl/ 1Sk5q
A. Fattori
Rootkit
January 19, 2012
20 / 36
App
App
App
Kernel & drivers
Hypervisor
BIOS/SMM
Chipset
CPU
Going on the bare metal!
Malware di nuova generazione
App
App
App
Kernel & drivers
Hypervisor
BIOS/SMM
Chipset
CPU
A. Fattori
Rootkit
January 19, 2012
22 / 36
Malware di nuova generazione
Malware
detector
App
App
App
Kernel & drivers
Hypervisor
BIOS/SMM
Chipset
CPU
A. Fattori
Rootkit
January 19, 2012
22 / 36
Malware di nuova generazione
Malware
detector
App
App
App
Kernel & drivers
Hypervisor
BIOS/SMM
Chipset
CPU
A. Fattori
Rootkit
January 19, 2012
22 / 36
Malware di nuova generazione
Ago 2006
D. Dai Zovi
Vitriol
Mag 2006
S. King
SubVirt
A. Fattori
Set 2008
S. Embleton
SMM rootkit
Ago 2006
J. Rutkowska
Blue Pill
Rootkit
Mar 2009
J. Rutkowska
SMM memory attack
January 19, 2012
23 / 36
App
App
App
Kernel & drivers
Hypervisor
BIOS/SMM
Chipset
CPU
Rootkit basati su hypervisor
Hypervisor
App
App
App
Kernel
Hardware
A. Fattori
Rootkit
January 19, 2012
25 / 36
Hypervisor
App
App
App
Kernel
Hypervisor
Hardware
Un hypervisor, anche chiamato virtual machine monitor (VMM), è
un componente software che permette di condividere le risorse
fisiche di un sistema tra più sistemi operativi
A. Fattori
Rootkit
January 19, 2012
25 / 36
Hypervisor
App
App
App
App
Kernel
App
App
Kernel
Hypervisor
Hardware
Un hypervisor, anche chiamato virtual machine monitor (VMM), è
un componente software che permette di condividere le risorse
fisiche di un sistema tra più sistemi operativi
A. Fattori
Rootkit
January 19, 2012
25 / 36
Hypervisor
App
App
App
App
Kernel
App
App
Kernel
Hypervisor
Hardware
Le CPU dei moderni PC supportano delle estensioni (es. Intel
VT-x) che facilitano il compito dell’hypervisor
A. Fattori
Rootkit
January 19, 2012
25 / 36
Malware basati su hypervisor
App
App
App
Kernel
Hardware
A. Fattori
Rootkit
January 19, 2012
26 / 36
Malware basati su hypervisor
App
App
App
App
App
App
Kernel
Kernel
Hypervisor
Hardware
Hardware
La macchina fisica viene convertita “di nascosto” in una virtuale
A. Fattori
Rootkit
January 19, 2012
26 / 36
Malware basati su hypervisor
App
App
App
App
App
App
Kernel
Kernel
Hypervisor
Hardware
Hardware
La macchina fisica viene convertita “di nascosto” in una virtuale
Vantaggi dell’attaccante:
Pieno controllo del sistema
Invisibilità quasi totale
A. Fattori
Rootkit
January 19, 2012
26 / 36
Malware basato su hypervisor software (SubVirt)
Modalità di installazione:
L’installazione avviene durante lo spegnimento
Modifica della sequenza di avvio:
Boot
Sector
BIOS
MBR
Sistema
Operativo
Malware basato su Virtual PC o VMware
Fonte: SubVirt: Implementing malware with virtual machines (S. T. King, . . . )
A. Fattori
Rootkit
January 19, 2012
27 / 36
Malware basato su hypervisor software (SubVirt)
Modalità di installazione:
L’installazione avviene durante lo spegnimento
Modifica della sequenza di avvio:
BIOS
Malware
MBR
Boot
Sector
Sistema
Operativo
Malware basato su Virtual PC o VMware
Fonte: SubVirt: Implementing malware with virtual machines (S. T. King, . . . )
A. Fattori
Rootkit
January 19, 2012
27 / 36
Malware basato su hypervisor software (SubVirt)
Modalità di installazione:
L’installazione avviene durante lo spegnimento
Modifica della sequenza di avvio:
BIOS
Malware
MBR
Boot
Sector
Sistema
Operativo
Problemi
basato su hypervisor hosted (type 2)
modifica sistema guest per non penalizzare performance
red pill per vmware/virtualpc?
Fonte: SubVirt: Implementing malware with virtual machines (S. T. King, . . . )
A. Fattori
Rootkit
January 19, 2012
27 / 36
Supporto hardware per la virtualizzazione
App
R1
App
Kernel
R0
R3
Intel VT-X, AMD SVM
Hypervisor
A. Fattori
App
Rootkit
January 19, 2012
28 / 36
Supporto hardware per la virtualizzazione
R3
App
App
Kernel
R0
App
Kernel
Hypervisor
Root
mode
App
R1
App
R0
R3
Intel VT-X, AMD SVM
Hypervisor
A. Fattori
Rootkit
App
January 19, 2012
28 / 36
Supporto hardware per la virtualizzazione
R3
App
App
Kernel
R0
App
Kernel
Hypervisor
Root
mode
App
R1
App
R0
R3
Intel VT-X, AMD SVM
Hypervisor
App
Sistema operativo eseguito normalmente
Overhead minimo
Trasparenza & isolamento garantiti dall’hardware
Disponibile su tutti i PC (desktop & portatili)
A. Fattori
Rootkit
January 19, 2012
28 / 36
Supporto hardware per la virtualizzazione
R3
App
App
Kernel
R0
App
Kernel
Hypervisor
Root
mode
App
R1
App
R0
R3
Intel VT-X, AMD SVM
Hypervisor
Enter
ExitEnter
Hypervisor
A. Fattori
App
Kernel/App
Rootkit
January 19, 2012
28 / 36
Supporto hardware per la virtualizzazione
R3
App
App
Kernel
R0
App
Kernel
Hypervisor
Root
mode
App
R1
App
R0
R3
Intel VT-X, AMD SVM
Hypervisor
Enter
App
ExitEnter
Hypervisor
Kernel/App
L’hypervisor può configurare dinamicamente l’insieme
degli eventi che causano “exit”
A. Fattori
Rootkit
January 19, 2012
28 / 36
“Late launch” di un hypervisor
Kernel
Installazione di un hypervisor in un sistema in esecuzione
A. Fattori
Rootkit
January 19, 2012
29 / 36
“Late launch” di un hypervisor
Kernel
Hypervisor
Installazione di un hypervisor in un sistema in esecuzione
A. Fattori
Rootkit
January 19, 2012
29 / 36
“Late launch” di un hypervisor
Kernel
A. Fattori
Rootkit
January 19, 2012
29 / 36
“Late launch” di un hypervisor
Kernel
A. Fattori
Rootkit
January 19, 2012
29 / 36
“Late launch” di un hypervisor
Kernel
Hypervisor
Installazione di un hypervisor maligno in un sistema in esecuzione
A. Fattori
Rootkit
January 19, 2012
29 / 36
“Late launch” di un hypervisor
Kernel
Hypervisor
L’installazione dell’hypervisor è impercettibile dall’utente
Il malware ha pieno controllo del sistema
Una volta installato il malware è completamente trasparente
Tutti gli utenti con PC con supporto hardware per
virtualizzazione (abilitato da BIOS) sono vulnerabili!!!
A. Fattori
Rootkit
January 19, 2012
29 / 36
Il problema è reale
Blue pill (Windows Vista 64)
Vitriol (Mac OS X)
Blue pill/Vitriol vs. SubVirt:
∼6000LOC
Bastato su VMware
Infezione di in un sistema
in esecuzione
L’infezione richiede il
riavvio del sistema
Trasparente
Non trasparente
Fonte: Subverting Vista Kernel For Fun And Profit (J. Rutkowska)
Fonte: Hardware Virtualization Based rootkits (D. Dai Zovi)
A. Fattori
Rootkit
January 19, 2012
30 / 36
Limitazioni & Prevenzione
Limitazioni:
è necessario eseguire codice kernel per caricare l’hypervisor
Se un hypervisor è già caricato il nuovo non ha pieno controllo
del sistema
Il supporto hardware per la virtualizzazione deve essere
abilitato da BIOS
A. Fattori
Rootkit
January 19, 2012
31 / 36
Limitazioni & Prevenzione
Limitazioni:
è necessario eseguire codice kernel per caricare l’hypervisor
Se un hypervisor è già caricato il nuovo non ha pieno controllo
del sistema
Il supporto hardware per la virtualizzazione deve essere
abilitato da BIOS
Prevenzione:
Impedire l’esecuzione di codice kernel non fidato (driver)
Hypervisor “dummy”
Disabilitare il supporto hardware per la virtualizzazione da
BIOS
A. Fattori
Rootkit
January 19, 2012
31 / 36
Invisibile al 100%?
Il malware è invisibile al 100%, l’hypervisor non lo è
L’hypervisor può alterare leggermente lo stato della CPU
L’overhead è minimo, ma non nullo (alcune istruzioni sono più
costose da eseguire quando l’hypervisor è caricato)
for (i = 1 ... 1000) {
cpuid();
}
Fonte: Compatibility is Not Transparency: VMM Detection Myths and Realities (Tal
Garfinkel, . . . )
A. Fattori
Rootkit
January 19, 2012
32 / 36
Altri usi del “late launching”
A. Fattori
Rootkit
January 19, 2012
33 / 36
Altri usi del “late launching”
A. Fattori
Rootkit
January 19, 2012
33 / 36
Altri usi del “late launching”
A. Fattori
Rootkit
January 19, 2012
33 / 36
App
App
App
Kernel & drivers
Hypervisor
BIOS/SMM
Chipset
CPU
SMM malware
SMM malware
System Management Mode
modalità di esecuzione con alti privilegi
per power management, emulazione PS/2, . . .
memoria SMM può essere acceduta solo da modalità SMM
(no da kernel e nemmeno hypervisor)
SMI#
Protected
mode
SMM
rsm
A. Fattori
Rootkit
January 19, 2012
35 / 36
SMM malware
System Management Mode
modalità di esecuzione con alti privilegi
per power management, emulazione PS/2, . . .
memoria SMM può essere acceduta solo da modalità SMM
(no da kernel e nemmeno hypervisor)
SMM malware
accesso all’intera memoria di sistema
privilegi maggiori di un eventuale hypervisor
Fonte: SMM Rootkits: A New Breed of OS Independent Malware (S. Embleton, . . . )
A. Fattori
Rootkit
January 19, 2012
35 / 36
SMM malware
System Management Mode
modalità di esecuzione con alti privilegi
per power management, emulazione PS/2, . . .
memoria SMM può essere acceduta solo da modalità SMM
(no da kernel e nemmeno hypervisor)
Come?
1
Direttamente se la memoria SMM non è lockata dal BIOS
2
Tramite BUG
Fonte: SMM Cache Fun (Invisible Things Lab)
A. Fattori
Rootkit
January 19, 2012
35 / 36
Altre forme di malware
A. Fattori
Rootkit
January 19, 2012
36 / 36
Altre forme di malware
Firmware modificato per “sniffare” le pressioni dei tasti
Malware impossibile da identificare ed in grado di sopravvivere
al reboot
TPM completamente inefficace
Fonte: Reversing and exploiting an Apple firmware update (K. Chen)
A. Fattori
Rootkit
January 19, 2012
36 / 36