6. Hidden Process (Windows)
• DKOM(direct kernel object manipulation)
– プロセスは双方向のリンクリストで管理。リンクリ
ストのリンクを故意に書き換えることで特定のプ
ロセスエントリをリストから切り離して隠ぺい
– プロセスはスレッドのコンテナ(入れもの)でしか
なく処理自体はスレッドによって実行される。
Process Process Process Process
A B C D
7. Hidden Process (Linux)
• 多くのカーネル情報は/procファイルシステム
から取得される。
ps, top, freeコマンドなどのシステム
情報は/proc FSを通して取得、表示
/proc ファイルシステム
ユーザ空間 カーネルのシステム情報を通知する特別なファイルシステム
カーネル空間で偽の情報を出すような攻撃を
カーネル空間 されるとmalware processを隠すことができる
malware
Process Process Process
Process
A C D
B
8. Memory Dual mapping
• Matt “skape” Miller, Using dual-mappings to evade automated
unpackers, 2008 より。
• 2つの仮想メモリページを1つ物理メモリページに割り当てる
– Executable mapping DEP, Debugger
の監視対象は
• コードが実行される。Debugger コ ドのみ
コードのみ
Virtual
Vi t l Physical
はここのみ監視
– Editable mapping
• Packerとして働き、コードを改 Code
変(Self-modification)する Executable
• DEP(Data Execution Prevention)
を回避して、コード改変
Data
データとして実
Editable 行コードを書き
換え
19. Binary Translation
• 初期のVMware workstationで使われた。
• 異なる特権レベルとセグメントを利用したフォールトハンド
ラ経由の命令変換。想化で問題になる特権命令やセンシ
ティブ命令を置き換える変換は再利用される。効率が良
い実装。
– 米国特許:6,397,242, Virtualization system including a virtual machine monitor
for a computer with a segmented architecture, (Date of Patent: May 28, 2002,
Filed: Oct 26, 1998)
21. Para-Virtualization (準仮想化)
• ゲストOSのカーネル内で仮想化で問題となる部分を変更し、
Ring1で実行するようにする。ハイパーバイザーはring0で実行
Normal OS Para-Virtualized
ring3 ring3
App1 App2 App1 App2
Process
P Process
P Process
P Process
P
System Call
ring2 ring2
System Call
ring1 ring1 Guest OS
3 para-virtualized
2 Kernel
Hyper
Call
1
0 ring0 Guest OS ring0 HyperVisor
Kernel
(VMM)
34. KobutaによるSYSENTERのHook
/* targeti386/op_helper.c */
void helper_sysenter(void)
{ ....
if (kobuta_ins_sysenter) { /* SYSENTER hook has been registered? */
/* Then is it necessary to synchronize CPU context? */
if (kobuta_ins_sysenter_cpusync == KOBUTA CPUSYNC ENABLE)
(kobuta ins sysenter cpusync KOBUTA_CPUSYNC_ENABLE)
kobuta_syn_cpucontext(); /* Synchronize CPU context on demand*/
kobuta_sysenter(); /*Finally, execute all registered handlers for SYSENTER*/
} ...
}
35. Kobuta Framework
• 有用な箇所にHookをかける
– Begin/end of instruction/block
– Jump/call
– Interrupt begin/end
– Sysenter/Sysexit/Syscall/Sysret
– Input/Output
– Update control registers (CR0, CR2, CR3, CR4)
– RDMSR, WRMSR (read/write to Model Specific Register)
– Memory access (read/write)
40. EagleEyeのAPI
/* <eagleye/windows.h> */
/* get process image filename, given its EPROCESS address */
int windows_task_imagename(ee_t h, unsigned long eprocess, char *name,
unsigned int count);
/* get process id, given its EPROCESS address */
int windows task pid(ee t h unsigned long eprocess unsigned long *pid);
windows_task_pid(ee_t h, eprocess, pid);
/* get parent process id, given its EPROCESS address */
int windows_task_ppid(ee_t h, unsigned long eprocess, unsigned long
*ppid);
/* get process cmdline, given its EPROCESS address */
int windows_task_cmdline(ee_t h, unsigned long eprocess, char *cmdline,
unsigned int count);
41. Virt-ICEのデバッグ機能
• Virt-ICE Clientからデバッグコマンド送って解析
Set execution breakpoint: db s <address>
Singlestep: db s
VM (QEMU) Run until RET: db R
GuestOS (Windows) Pause guest VM: db C
Resume guest VM: db r
Virt-ICE Module
Virt-ICE
Introspection Instrumentation
Client
(EagleEye) (Kobuta)
44. 仮想マシンの検出技術
• CPUアーキテクチャが固定
– 仮想マシン自体がVirtualと付けたデバイスも多い
VMware
# dmesg | grep -i virtual
VMware vmxnet virtual NIC driver
Vendor: VMware M d l Vi t l di k R 1 0
V d VM Model: Virtual disk Rev: 1.0
hda: VMware Virtual IDE CDROM Drive, ATAPI CD/DVD-ROM
drive
QEMU
# dmesg | grep -i virtual
CPU: AMD QEMU Virtual CPU version 0.9.1 stepping 03 Virtal PC
VirtualPC
# dmesg | grep -i virtual
hda: Virtual HD, ATA DISK drive
hdc: Virtual CD, ATAPI CD/DVD-ROM drive