SlideShare ist ein Scribd-Unternehmen logo
1 von 58
Downloaden Sie, um offline zu lesen
Fourteenforty Research Institute, Inc.
株式会社株式会社株式会社株式会社 フォティーンフォティフォティーンフォティフォティーンフォティフォティーンフォティ技術研究所技術研究所技術研究所技術研究所
http://www.fourteenforty.jp
ハードウェアによる仮想化支援機能を
利用したハイパーバイザーIPS
シニアリサーチエンジニア
村上 純一
Fourteenforty Research Institute, Inc.
2
はじめに(1/2)
• 近年、ルートキット技術の利用によりマルウェアのステルス化
が進んでいる
• 従来のAVプロダクトによる検出が困難
• 3rd Partyによる「検出ツール」
– GMER
– Rootkit Revealer(Microsoft)
– Rootkit Buster(TrendMicro)
– McAfee Rootkit Detective
Fourteenforty Research Institute, Inc.
3
はじめに(1/2)
• 近年、ルートキット技術の利用によりマルウェアのステルス化
が進んでいる
• 従来のAVプロダクトによる検出が困難
• 3rd Partyによる「検出ツール」
– GMER
– Rootkit Revealer(Microsoft)
– Rootkit Buster(TrendMicro)
– McAfee Rootkit Detective
– Windbg ☺
Fourteenforty Research Institute, Inc.
4
はじめに(2/2)
• 仮想化技術を利用したIPSを開発
– OSより低い「リング-1」相当の権限で動作
• ルートキットの「検知」と「防止」を実現
– 不正なメモリパッチングを検知・防止
– (ゲスト)OSの活動をモニタリング
Fourteenforty Research Institute, Inc.
5
アウトライン
• 既存のルートキット技術
• 仮想化技術の概要
• Viton, ハイパーバイザーIPS
Fourteenforty Research Institute, Inc.
6666
int packet_analysis(GDDCONFIG *gddc,unsigned char *packet,unsigned long length)
{
struct ip *ip_header; /* IP header */
struct tcphdr *tcp_header; /* TCP header */
char *tcp_data; /* TCP data */
struct in_addr addr; /* IP address */
char sourceIP[16]; /* Source IP address */
char destIP[16]; /* Destination IP address */
unsigned short sourcePort; /* Source Port */
unsigned short destPort; /* Destination Port */
unsigned long len_data; /* Length of data part */
unsigned long iph_len; /* Length of IP header */
unsigned long tcph_len; /* Length of TCP header */
unsigned long sequence; /* Expected sequence */
int portindex; /* Indexnumber of port list */
int direction; /* Packet direction */
unsigned char logtype; /* Log type */
CONN_LIST *bcl,*ncl; /* Connection table list */
CONN_LIST *t; /* Temporary connection list */
static char datestr[512]; /* Buffer to store datetime */
time_t timeval;
struct tm *timep=NULL;
char *timesp=NULL;
char *c;
/* Get pointer of IP header and check length of IP */
if (length-SIZE_OF_ETHHDR < MINSIZE_IP+MINSIZE_TCP) return(0);
ip_header = (struct ip *)(packet+SIZE_OF_ETHHDR);
if (ip_header->ip_p!=IPPROTO_TCP
|| ip_header->ip_v!=4) return(0);
iph_len = ((unsigned long)(ip_header->ip_hl))*4;
if (iph_len<MINSIZE_IP) return(0);
if ((unsigned long)ntohs(ip_header->ip_len) < MINSIZE_IP+MINSIZE_TCP)
return(0);
if ((unsigned long)ntohs(ip_header->ip_len) > length-SIZE_OF_ETHHDR){
return(0);
}
/* Get pointer of TCP header and check length of TCP */
tcp_header = (struct tcphdr *)((char *)ip_header+iph_len);
tcph_len = ((unsigned long)(tcp_header->th_off))*4;
tcp_data = (char *)tcp_header+tcph_len;
if (tcph_len<MINSIZE_TCP) return(0);
/* Get other parameter in TCP/IP header */
if ((long)ntohs(ip_header->ip_len)-(long)iph_len-(long)tcph_len<0)
return(0);
len_data = (unsigned long)ntohs(ip_header->ip_len)
-iph_len-tcph_len;
sourcePort = ntohs(tcp_header->th_sport);
destPort = ntohs(tcp_header->th_dport);
memcpy(&addr,&(ip_header->ip_src),sizeof(struct in_addr));
strcpy(sourceIP,(char *)inet_ntoa(addr));
memcpy(&addr,&(ip_header->ip_dst),sizeof(struct in_addr));
strcpy(destIP,(char *)inet_ntoa(addr));
if (!strcmp(sourceIP,destIP)) return(0);
00001B70 FF 15 F0 11 00 01 E9 CC 03 00 00 E8 7C 1C 00 00 ......鯲...閖...
00001B80 33 F6 56 E8 B1 FC FF FF 85 C0 0F 84 B7 03 00 00 3雎....┨...
00001B90 56 6A 02 FF 35 6C 80 00 01 FF 35 D0 87 00 01 FF Vj..5l....5ミ....
00001BA0 15 CC 11 00 01 85 C0 75 1D 68 10 10 00 00 FF 35 .フ...u.h.....5
00001BB0 50 80 00 01 FF 35 44 80 00 01 FF 35 D0 87 00 01 P....5D....5ミ...
00001BC0 FF 15 04 12 00 01 FF 35 D0 87 00 01 FF 15 2C 12 .......5ミ.....,.
00001BD0 00 01 FF 35 D4 8B 00 01 FF 15 58 10 00 01 E9 64 ...5ヤ.....X...馘
00001BE0 03 00 00 83 FE 1A 77 47 0F 84 59 03 00 00 83 FE ......wG.Ш.....
00001BF0 11 0F 85 16 01 00 00 33 F6 39 35 E8 87 00 01 74 .......3.95閾..t
00001C00 22 8B 3D 28 12 00 01 56 FF D7 56 FF D7 68 00 10 ".=(...V.ラV.ラh..
00001C10 00 00 FF 35 50 80 00 01 FF 35 88 80 00 01 E9 7D ...5P....5..驀
00001C20 02 00 00 6A 01 E8 0F FC FF FF E9 1A 03 00 00 8B ...j...........急
00001C30 7D 14 B8 11 01 00 00 3B F0 0F 87 8B 00 00 00 3B .ク....;..㈲...;
00001C40 F0 0F 84 16 02 00 00 83 FE 1C 0F 85 BD 00 00 00 ..............
00001C50 33 F6 39 75 10 74 2F A1 EC 87 00 01 8B 0D F0 87 3.9u.t/。....
00001C60 00 01 3B C6 75 08 3B CE 0F 84 D9 02 00 00 8B 3D ..;ニu.;ホ.....=
00001C70 14 12 00 01 51 50 68 B1 00 00 00 FF 35 D4 87 00 ....QPhア....5ヤ..
00001C80 01 E9 56 01 00 00 8B 3D 14 12 00 01 68 F0 87 00 .餬....=....h.
00001C90 01 68 EC 87 00 01 68 B0 00 00 00 FF 35 D4 87 00 .h..hー....5ヤ..
00001CA0 01 FF D7 A1 EC 87 00 01 8B 0D F0 87 00 01 3B C1 ..ラ。......;チ
00001CB0 75 11 89 35 EC 87 00 01 89 35 F0 87 00 01 E9 84 u..5...5..驗
00001CC0 02 00 00 51 50 E9 07 01 00 00 8B CE B8 12 01 00 ...QP.....勤ク...
00001CD0 00 2B C8 0F 84 3C 02 00 00 83 E9 04 0F 84 29 02 .+ネ..<......).
00001CE0 00 00 49 0F 84 F9 01 00 00 81 E9 1C 01 00 00 0F ..I.........
00001CF0 84 E0 01 00 00 81 E9 E6 00 00 00 0F 84 3D 01 00 .........=..
00001D00 00 81 E9 E8 7C 00 00 0F 84 02 01 00 00 3B 35 5C .閖........;5¥
00001D10 88 00 01 0F 85 EE 00 00 00 8B 45 14 8B 48 0C 8B .......畿.稀.驚
00001D20 C1 8B D1 F7 D0 C1 EA 02 83 E0 01 83 E2 01 F6 C1 錦チ....
既存のルートキット技術
Chapter 1
Fourteenforty Research Institute, Inc.
7
ルートキット技術の分類
ステルスマルウェア
ユーザーの同意なしに、システム・OSの挙動を変更し、情報の隠ぺい
を行うソフトウェア(マルウェア)
※Joanna Rukowska、"Introducing Stealth Malware Taxnomy"
http://invisiblethings.org/papers/malware-taxonomy.pdf
ステルスマルウェアがパッチングを行うリソースの性質に基づいて
Type 0からType IIIの4種類に分類
Fourteenforty Research Institute, Inc.
8
Type 0 (≠ステルスマルウェア)
コード領域 データ領域
コード領域 データ領域
OS
プロセス
システムレジスタハードウェア
Type 0
Fourteenforty Research Institute, Inc.
9
Type 0 (≠ステルスマルウェア)
Fourteenforty Research Institute, Inc.
10
Type 0 (≠ステルスマルウェア)
exp1orer.exe
Fourteenforty Research Institute, Inc.
11
Type I
コード領域 データ領域
コード領域 データ領域
OS
プロセス
システムレジスタハードウェア
Type I
Fourteenforty Research Institute, Inc.
12
Type I - Windowsにおけるフッキングポイント(1/3)
IDTR
MSR[176h]
SDT
(ntoskrnl.exe)
SDT Shadow
(win32k.sys)
IDT
・
・
・
・
・
・
other
interrupt
handlers
KiSystemService
Nt* APIs
Nt* APIs
(User/GDI)
SSDT
SSDT
Fourteenforty Research Institute, Inc.
13
Type I - Windowsにおけるフッキングポイント(1/3)
IDTR
MSR[176h]
SDT
(ntoskrnl.exe)
SDT Shadow
(win32k.sys)
IDT
・
・
・
・
・
・
KiSystemService
Nt* APIs
Nt* APIs
(User/GDI)
SSDT
SSDT
other
interrupt
handlers
システムレジスタの値を改竄
Fourteenforty Research Institute, Inc.
14
Type I - Windowsにおけるフッキングポイント(2/3)
IDTR
MSR[176h]
SDT
(ntoskrnl.exe)
SDT Shadow
(win32k.sys)
IDT
・
・
・
・
・
・
KiSystemService
Nt* APIs
Nt* APIs
(User/GDI)
SSDT
SSDT
other
interrupt
handlers
静的な関数ポインタ、
アドレステーブルを改竄
Fourteenforty Research Institute, Inc.
15
Type I - Windowsにおけるフッキングポイント(3/3)
IDTR
MSR[176h]
SDT
(ntoskrnl.exe)
SDT Shadow
(win32k.sys)
IDT
・
・
・
・
・
・
KiSystemService
Nt* APIs
Nt* APIs
(User/GDI)
SSDT
SSDT
other
interrupt
handlers
関数のコード領域にjmp命令を挿入
Fourteenforty Research Institute, Inc.
16
Type Iとその対策
• 検出は容易
• 多くの検出ツール、対策が存在する
– 3rd partyの検出ツール
– PatchGuard (Vista x64 Edition)
Fourteenforty Research Institute, Inc.
17
Type II
コード領域 データ領域
コード領域 データ領域
OS
プロセス
システムレジスタハードウェア
Type II
Fourteenforty Research Institute, Inc.
18
Type II
• データ領域に含まれるデータを改ざん
• DKOM(Direct Kernel Object Manipulation)
Jamie Butler,Jamie Butler,Jamie Butler,Jamie Butler, http://www.blackhat.com/presentations/winhttp://www.blackhat.com/presentations/winhttp://www.blackhat.com/presentations/winhttp://www.blackhat.com/presentations/win----usausausausa----04/bh04/bh04/bh04/bh----
winwinwinwin----04040404----butler.pdfbutler.pdfbutler.pdfbutler.pdf
• KOH(Kernel Object Hooking)
GregGregGregGreg HoglundHoglundHoglundHoglund,,,, http://www.rootkit.com/newsread.php?newsid=501http://www.rootkit.com/newsread.php?newsid=501http://www.rootkit.com/newsread.php?newsid=501http://www.rootkit.com/newsread.php?newsid=501
Fourteenforty Research Institute, Inc.
19
データ領域
DKOM(Direct Kernel Object Manipulation)
• データ領域に含まれるプロセスリスト、プロセストークン等の
データを改竄
コード領域
プロセスリストを
取得する処理 Type IIOS
Fourteenforty Research Institute, Inc.
20
データ領域
DKOM(Direct Kernel Object Manipulation)
• データ領域に含まれるプロセスリスト、プロセストークン等の
データを改竄
コード領域
プロセスリストを
取得する処理 Type IIOS
Fourteenforty Research Institute, Inc.
21
DKOM(Direct Kernel Object Manipulation)
• 限定的な機能しか実装することができない
– 実現可能な機能は、対象のデータを取り扱う処理の実装に依存する
• プロセスエントリをプロセスリストから除外すると、
– スケジューリングされない(実行されない)?
– スレッドベースのスケジューリング
– スケジューラの実装に依存
Fourteenforty Research Institute, Inc.
22
KOH(Kernel Object Hooking)
• データ領域に含まれる関数ポインタを改竄
• カーネル内には、IDT、SDT、SSDT以外にも無数の関数ポイ
ンタが存在する
• KOHによるフッキングを検出するためには、カーネル空間に
存在する全ての関数ポインタを把握する必要がある
→ ルートキット開発側と検出側のイタチごっこ
Fourteenforty Research Institute, Inc.
23
Type III
コード領域 データ領域
コード領域 データ領域
OS
プロセス
システムレジスタハードウェア Type III
Type III
Fourteenforty Research Institute, Inc.
24
Type III(1/2)
• システム(OS)の外部で動作する
– 仮想化技術の悪用
– ファームウェアルートキットやSMMルートキット
• BluePill
– ハードウェアの仮想化支援機能を悪用し、悪意のハイパーバイザーを
インストール
– (ゲスト)OSのリソースは改ざんしない
– 最新のBPは、Intel VTおよびAMD-vの両方をサポート
Joanna Rutkowska,Joanna Rutkowska,Joanna Rutkowska,Joanna Rutkowska, AlexanderAlexanderAlexanderAlexander TereshkinTereshkinTereshkinTereshkin, http://, http://, http://, http://bluepillproject.orgbluepillproject.orgbluepillproject.orgbluepillproject.org
Fourteenforty Research Institute, Inc.
25
Type III(2/2)
• Vitriol
– Intel VTを悪用するType IIIルートキット
Dino Dai Zovi, Black Hat USA 2006Dino Dai Zovi, Black Hat USA 2006Dino Dai Zovi, Black Hat USA 2006Dino Dai Zovi, Black Hat USA 2006
• VMM Rootkit Framework
– Vitriol同様、Intel VTを悪用するType IIIルートキット
– コンセプトコードのため非常にプリミティブな実装
→VMMの動作、実装を学ぶために最適
Shawn Embleton,Shawn Embleton,Shawn Embleton,Shawn Embleton,
http://http://http://http://www.rootkit.com/newsread.php?newsidwww.rootkit.com/newsread.php?newsidwww.rootkit.com/newsread.php?newsidwww.rootkit.com/newsread.php?newsid=758=758=758=758
Fourteenforty Research Institute, Inc.
26
ケーススタディ: Storm Worm
• 2007年に出回り始めたP2Pボット
• スパムメールに自身の実行ファイルを添付して送信
• スパムメールのサブジェクトに実際に発生した事件を利用
– "230 dead as storm batters Europe"
– "Happy New Year 2008"
– etc.
• 一部の亜種は、AV製品から逃れるためにルートキット機能を
備えている
Fourteenforty Research Institute, Inc.
27
Storm Worm - "Happy New Year 2008"
実行ファイル実行すると、
1. システムファイルを生成、カーネルにロード
2. ドライバによる悪意の動作
• ルートキット機能
SSDT、IRPフッキングを利用したファイル、レジストリ、接続情報の隠
ぺい
• コードインジェクション機能
悪意のコード(本体部分)をユーザーモードプロセスに注入
3. P2P通信を開始
Fourteenforty Research Institute, Inc.
28
ルートキット機能
NtQueryDirectoryFile
• 以下の3つのNative APIをフック(SSDTフッキング)
– NtQueryDirectoryFile, NtEnumerateKey, NtEnumerateValueKey
• APIのSSDTにおけるインデックス番号は、NtBuildNumberによって異なる
• 2195(2k), 2600(XP) and 3790(2k3)の3つをサポート
IndexNumberTableOf
NtQueryDirectoryFile
SSDT
NtBuildNumber == 2600
NtBuildNumber == 2195
NtBuildNumber == 3790
Fourteenforty Research Institute, Inc.
29
コードインジェクション機能
kernel land
user land
services.exe
malcode
Executable
driver(packed)
driver
malcode
(packed)
1. CreateService()
2. StartService()
1. ZwQuerySystemInformation()
2. ZwOpenProcess()
3. ZwAllocateVirtualMemory()
4. (Copy the malcode)
5. (patch to thread object)
6. KeInitializeApc()
7. KeInsertQueueApc()
Fourteenforty Research Institute, Inc.
30303030
int packet_analysis(GDDCONFIG *gddc,unsigned char *packet,unsigned long length)
{
struct ip *ip_header; /* IP header */
struct tcphdr *tcp_header; /* TCP header */
char *tcp_data; /* TCP data */
struct in_addr addr; /* IP address */
char sourceIP[16]; /* Source IP address */
char destIP[16]; /* Destination IP address */
unsigned short sourcePort; /* Source Port */
unsigned short destPort; /* Destination Port */
unsigned long len_data; /* Length of data part */
unsigned long iph_len; /* Length of IP header */
unsigned long tcph_len; /* Length of TCP header */
unsigned long sequence; /* Expected sequence */
int portindex; /* Indexnumber of port list */
int direction; /* Packet direction */
unsigned char logtype; /* Log type */
CONN_LIST *bcl,*ncl; /* Connection table list */
CONN_LIST *t; /* Temporary connection list */
static char datestr[512]; /* Buffer to store datetime */
time_t timeval;
struct tm *timep=NULL;
char *timesp=NULL;
char *c;
/* Get pointer of IP header and check length of IP */
if (length-SIZE_OF_ETHHDR < MINSIZE_IP+MINSIZE_TCP) return(0);
ip_header = (struct ip *)(packet+SIZE_OF_ETHHDR);
if (ip_header->ip_p!=IPPROTO_TCP
|| ip_header->ip_v!=4) return(0);
iph_len = ((unsigned long)(ip_header->ip_hl))*4;
if (iph_len<MINSIZE_IP) return(0);
if ((unsigned long)ntohs(ip_header->ip_len) < MINSIZE_IP+MINSIZE_TCP)
return(0);
if ((unsigned long)ntohs(ip_header->ip_len) > length-SIZE_OF_ETHHDR){
return(0);
}
/* Get pointer of TCP header and check length of TCP */
tcp_header = (struct tcphdr *)((char *)ip_header+iph_len);
tcph_len = ((unsigned long)(tcp_header->th_off))*4;
tcp_data = (char *)tcp_header+tcph_len;
if (tcph_len<MINSIZE_TCP) return(0);
/* Get other parameter in TCP/IP header */
if ((long)ntohs(ip_header->ip_len)-(long)iph_len-(long)tcph_len<0)
return(0);
len_data = (unsigned long)ntohs(ip_header->ip_len)
-iph_len-tcph_len;
sourcePort = ntohs(tcp_header->th_sport);
destPort = ntohs(tcp_header->th_dport);
memcpy(&addr,&(ip_header->ip_src),sizeof(struct in_addr));
strcpy(sourceIP,(char *)inet_ntoa(addr));
memcpy(&addr,&(ip_header->ip_dst),sizeof(struct in_addr));
strcpy(destIP,(char *)inet_ntoa(addr));
if (!strcmp(sourceIP,destIP)) return(0);
00001B70 FF 15 F0 11 00 01 E9 CC 03 00 00 E8 7C 1C 00 00 ......鯲...閖...
00001B80 33 F6 56 E8 B1 FC FF FF 85 C0 0F 84 B7 03 00 00 3雎....┨...
00001B90 56 6A 02 FF 35 6C 80 00 01 FF 35 D0 87 00 01 FF Vj..5l....5ミ....
00001BA0 15 CC 11 00 01 85 C0 75 1D 68 10 10 00 00 FF 35 .フ...u.h.....5
00001BB0 50 80 00 01 FF 35 44 80 00 01 FF 35 D0 87 00 01 P....5D....5ミ...
00001BC0 FF 15 04 12 00 01 FF 35 D0 87 00 01 FF 15 2C 12 .......5ミ.....,.
00001BD0 00 01 FF 35 D4 8B 00 01 FF 15 58 10 00 01 E9 64 ...5ヤ.....X...馘
00001BE0 03 00 00 83 FE 1A 77 47 0F 84 59 03 00 00 83 FE ......wG.Ш.....
00001BF0 11 0F 85 16 01 00 00 33 F6 39 35 E8 87 00 01 74 .......3.95閾..t
00001C00 22 8B 3D 28 12 00 01 56 FF D7 56 FF D7 68 00 10 ".=(...V.ラV.ラh..
00001C10 00 00 FF 35 50 80 00 01 FF 35 88 80 00 01 E9 7D ...5P....5..驀
00001C20 02 00 00 6A 01 E8 0F FC FF FF E9 1A 03 00 00 8B ...j...........急
00001C30 7D 14 B8 11 01 00 00 3B F0 0F 87 8B 00 00 00 3B .ク....;..㈲...;
00001C40 F0 0F 84 16 02 00 00 83 FE 1C 0F 85 BD 00 00 00 ..............
00001C50 33 F6 39 75 10 74 2F A1 EC 87 00 01 8B 0D F0 87 3.9u.t/。....
00001C60 00 01 3B C6 75 08 3B CE 0F 84 D9 02 00 00 8B 3D ..;ニu.;ホ.....=
00001C70 14 12 00 01 51 50 68 B1 00 00 00 FF 35 D4 87 00 ....QPhア....5ヤ..
00001C80 01 E9 56 01 00 00 8B 3D 14 12 00 01 68 F0 87 00 .餬....=....h.
00001C90 01 68 EC 87 00 01 68 B0 00 00 00 FF 35 D4 87 00 .h..hー....5ヤ..
00001CA0 01 FF D7 A1 EC 87 00 01 8B 0D F0 87 00 01 3B C1 ..ラ。......;チ
00001CB0 75 11 89 35 EC 87 00 01 89 35 F0 87 00 01 E9 84 u..5...5..驗
00001CC0 02 00 00 51 50 E9 07 01 00 00 8B CE B8 12 01 00 ...QP.....勤ク...
00001CD0 00 2B C8 0F 84 3C 02 00 00 83 E9 04 0F 84 29 02 .+ネ..<......).
00001CE0 00 00 49 0F 84 F9 01 00 00 81 E9 1C 01 00 00 0F ..I.........
00001CF0 84 E0 01 00 00 81 E9 E6 00 00 00 0F 84 3D 01 00 .........=..
00001D00 00 81 E9 E8 7C 00 00 0F 84 02 01 00 00 3B 35 5C .閖........;5¥
00001D10 88 00 01 0F 85 EE 00 00 00 8B 45 14 8B 48 0C 8B .......畿.稀.驚
00001D20 C1 8B D1 F7 D0 C1 EA 02 83 E0 01 83 E2 01 F6 C1 錦チ....
仮想化技術の概要
Chapter 2
Fourteenforty Research Institute, Inc.
31
仮想化の必要があるリソース
• 仮想化技術を利用した場合、1つのVMM(仮想マシンモニタ)、
1つ以上のVM(仮想マシン)が動作する
→ 従来OSが占有していたリソースを抽象化する必要がある
– CPU
• システムレジスタ、制御レジスタ
• 例外
– メモリ
• VMM、各VMごとの独立したメモリ空間
– ハードウェア
• 割り込み、I/Oアドレス空間、DMAアクセス、etc.
Fourteenforty Research Institute, Inc.
32
従来の仮想メモリの仕組み
• 32bit環境では、
– 実際に搭載している物理メモリの容量に限らずOSからは
4GBの仮想メモリが見える
– OS・アプリケーションは、物理アドレス(PA)を意識せず4GBの仮想アドレ
ス(VA)にアクセスする
– プロセッサが、物理アドレスと仮想アドレスのマッピングを自動的に行う
VA
PA
Fourteenforty Research Institute, Inc.
33
仮想アドレスから物理アドレスへの変換
CR3
1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 1 0 0 0 1 1 0 0 0 0 1 1
PD PT Page
VA : 0x802398c3
11
PA : 0x00f928c3
Fourteenforty Research Institute, Inc.
34
仮想化技術を利用した場合のメモリ仮想化(1/2)
• 各VMが独立したアドレス空間を持つ
• 各VMから見える物理アドレスを更に抽象化する必要がある
– ゲスト仮想アドレス(Guest VA)、ゲスト物理アドレス(Guest PA)、
ホスト物理アドレス(Host PA)
Guest VA
Guest PA
Host PA
Fourteenforty Research Institute, Inc.
35
仮想化技術を利用した場合のメモリ仮想化(2/2)
PAVA
PT
Guest
VA
Guest PT PT in VMM
Guest
PA
Host PA
CR3
CR3
Fourteenforty Research Institute, Inc.
36
VMMによるアドレス変換
• 現在のプロセッサは、1段階のアドレス変換しかサポートしていない
• VMMは、Guest VA -> Guest PA -> Host PAの2段階のアドレス変換を
ソフトウェア的に行う必要がある
→ Shadow Pagaing
• プロセッサによる2段階アドレス変換のサポート
– Intel: EPT(Extended Page Table)
– AMD: NPT(Nested Page Table)
Fourteenforty Research Institute, Inc.
37
Shadow Paging
Guest
VA
Guest
PA
Guest
VMM
Host
PA
Guest
VA
Shadow Page Table
CR3
• ゲストOSのページフォルト例外をインターセプトし、VMMが適時Shadow
Page Table(SPT)を更新
Fourteenforty Research Institute, Inc.
38
Intel VT
• Intel VTはIntelによる仮想化技術の総称
– VT-x x86/64向けの仮想化サポート
– VT-d チップセットによるデバイスの仮想化サポート
– VT-i Itaniumプロセッサ向けの仮想化サポート
• 主な機能
– VMXモードのサポート
• VMX root-operations(ring0-3)
• VMX non-root-operations(ring0-3)
– VMCS(Virtual Machine Control Structure)
– VMX命令セットのサポート
VMXON、VMXOFF、VMXLAUNCH、VMRESUME、VMCALL、etc.
Fourteenforty Research Institute, Inc.
39
Intel VTの動作メカニズム
VMM
ゲスト
(Current) VMCS
Guest State Area
Host State Area
VM-execution control field
VM-entry control fields
VM-exit control fields
VM-exit information fields
GDTR IDTR ・・・
GDTR IDTR ・・・
Excpt
bitmap
IO
bitmap
・・・
Exit
Reason
VM-exit
VM-exit control
for MSR ・・・
Event Injection ・・・
Exit
Qualification ・・・
VM-entry
発生したイベントを処理
Fourteenforty Research Institute, Inc.
40
主なVM_EXITの発生理由
• 特定の命令の実行
– CPUID, INVD, INVLPG, RDTSC, RDPMC, HLT, etc.
– 全てのVMX命令
• I/O命令
– IN, OUT, etc.
• 例外(#DB、#BP、#PF、etc.)
• 特定のレジスタへのアクセス
– コントロールレジスタ
– デバッグレジスタ
– MSR(モデル固有レジスタ)
• etc
Fourteenforty Research Institute, Inc.
41414141
int packet_analysis(GDDCONFIG *gddc,unsigned char *packet,unsigned long length)
{
struct ip *ip_header; /* IP header */
struct tcphdr *tcp_header; /* TCP header */
char *tcp_data; /* TCP data */
struct in_addr addr; /* IP address */
char sourceIP[16]; /* Source IP address */
char destIP[16]; /* Destination IP address */
unsigned short sourcePort; /* Source Port */
unsigned short destPort; /* Destination Port */
unsigned long len_data; /* Length of data part */
unsigned long iph_len; /* Length of IP header */
unsigned long tcph_len; /* Length of TCP header */
unsigned long sequence; /* Expected sequence */
int portindex; /* Indexnumber of port list */
int direction; /* Packet direction */
unsigned char logtype; /* Log type */
CONN_LIST *bcl,*ncl; /* Connection table list */
CONN_LIST *t; /* Temporary connection list */
static char datestr[512]; /* Buffer to store datetime */
time_t timeval;
struct tm *timep=NULL;
char *timesp=NULL;
char *c;
/* Get pointer of IP header and check length of IP */
if (length-SIZE_OF_ETHHDR < MINSIZE_IP+MINSIZE_TCP) return(0);
ip_header = (struct ip *)(packet+SIZE_OF_ETHHDR);
if (ip_header->ip_p!=IPPROTO_TCP
|| ip_header->ip_v!=4) return(0);
iph_len = ((unsigned long)(ip_header->ip_hl))*4;
if (iph_len<MINSIZE_IP) return(0);
if ((unsigned long)ntohs(ip_header->ip_len) < MINSIZE_IP+MINSIZE_TCP)
return(0);
if ((unsigned long)ntohs(ip_header->ip_len) > length-SIZE_OF_ETHHDR){
return(0);
}
/* Get pointer of TCP header and check length of TCP */
tcp_header = (struct tcphdr *)((char *)ip_header+iph_len);
tcph_len = ((unsigned long)(tcp_header->th_off))*4;
tcp_data = (char *)tcp_header+tcph_len;
if (tcph_len<MINSIZE_TCP) return(0);
/* Get other parameter in TCP/IP header */
if ((long)ntohs(ip_header->ip_len)-(long)iph_len-(long)tcph_len<0)
return(0);
len_data = (unsigned long)ntohs(ip_header->ip_len)
-iph_len-tcph_len;
sourcePort = ntohs(tcp_header->th_sport);
destPort = ntohs(tcp_header->th_dport);
memcpy(&addr,&(ip_header->ip_src),sizeof(struct in_addr));
strcpy(sourceIP,(char *)inet_ntoa(addr));
memcpy(&addr,&(ip_header->ip_dst),sizeof(struct in_addr));
strcpy(destIP,(char *)inet_ntoa(addr));
if (!strcmp(sourceIP,destIP)) return(0);
00001B70 FF 15 F0 11 00 01 E9 CC 03 00 00 E8 7C 1C 00 00 ......鯲...閖...
00001B80 33 F6 56 E8 B1 FC FF FF 85 C0 0F 84 B7 03 00 00 3雎....┨...
00001B90 56 6A 02 FF 35 6C 80 00 01 FF 35 D0 87 00 01 FF Vj..5l....5ミ....
00001BA0 15 CC 11 00 01 85 C0 75 1D 68 10 10 00 00 FF 35 .フ...u.h.....5
00001BB0 50 80 00 01 FF 35 44 80 00 01 FF 35 D0 87 00 01 P....5D....5ミ...
00001BC0 FF 15 04 12 00 01 FF 35 D0 87 00 01 FF 15 2C 12 .......5ミ.....,.
00001BD0 00 01 FF 35 D4 8B 00 01 FF 15 58 10 00 01 E9 64 ...5ヤ.....X...馘
00001BE0 03 00 00 83 FE 1A 77 47 0F 84 59 03 00 00 83 FE ......wG.Ш.....
00001BF0 11 0F 85 16 01 00 00 33 F6 39 35 E8 87 00 01 74 .......3.95閾..t
00001C00 22 8B 3D 28 12 00 01 56 FF D7 56 FF D7 68 00 10 ".=(...V.ラV.ラh..
00001C10 00 00 FF 35 50 80 00 01 FF 35 88 80 00 01 E9 7D ...5P....5..驀
00001C20 02 00 00 6A 01 E8 0F FC FF FF E9 1A 03 00 00 8B ...j...........急
00001C30 7D 14 B8 11 01 00 00 3B F0 0F 87 8B 00 00 00 3B .ク....;..㈲...;
00001C40 F0 0F 84 16 02 00 00 83 FE 1C 0F 85 BD 00 00 00 ..............
00001C50 33 F6 39 75 10 74 2F A1 EC 87 00 01 8B 0D F0 87 3.9u.t/。....
00001C60 00 01 3B C6 75 08 3B CE 0F 84 D9 02 00 00 8B 3D ..;ニu.;ホ.....=
00001C70 14 12 00 01 51 50 68 B1 00 00 00 FF 35 D4 87 00 ....QPhア....5ヤ..
00001C80 01 E9 56 01 00 00 8B 3D 14 12 00 01 68 F0 87 00 .餬....=....h.
00001C90 01 68 EC 87 00 01 68 B0 00 00 00 FF 35 D4 87 00 .h..hー....5ヤ..
00001CA0 01 FF D7 A1 EC 87 00 01 8B 0D F0 87 00 01 3B C1 ..ラ。......;チ
00001CB0 75 11 89 35 EC 87 00 01 89 35 F0 87 00 01 E9 84 u..5...5..驗
00001CC0 02 00 00 51 50 E9 07 01 00 00 8B CE B8 12 01 00 ...QP.....勤ク...
00001CD0 00 2B C8 0F 84 3C 02 00 00 83 E9 04 0F 84 29 02 .+ネ..<......).
00001CE0 00 00 49 0F 84 F9 01 00 00 81 E9 1C 01 00 00 0F ..I.........
00001CF0 84 E0 01 00 00 81 E9 E6 00 00 00 0F 84 3D 01 00 .........=..
00001D00 00 81 E9 E8 7C 00 00 0F 84 02 01 00 00 3B 35 5C .閖........;5¥
00001D10 88 00 01 0F 85 EE 00 00 00 8B 45 14 8B 48 0C 8B .......畿.稀.驚
00001D20 C1 8B D1 F7 D0 C1 EA 02 83 E0 01 83 E2 01 F6 C1 錦チ....
Viton, ハイパーバイザーIPS
Chapter 3
Fourteenforty Research Institute, Inc.
42
Viton
• OSの外部で動作するIPS
• Proof of Concept、Windows XP SP2、SP3で動作確認
• 主な機能
指定したメモリ領域に対するメモリパッチングを禁止
システムレジスタの変更を禁止
ゲストOSの活動をモニタリング
実装には、 BitVisorBitVisorBitVisorBitVisor を利用
Fourteenforty Research Institute, Inc.
43
BitVisor
• セキュアVMプロジェクトによって開発されている国産VMMソフ
トウェア
• 特徴
– Intel VTを利用した軽量な実装
– Type I型のVMM(ハイパーバイザー型)
– VMMにおける32bit・64bitモード対応
– VMM、ゲストOSにおけるマルチコア・マルチプロセッサ対応
– WindowsXP/Vista、Linuxを修正無しに実行可能
– ゲストOSにおけるPAEのサポート
– リアルモードエミュレーションのサポート
– etc.
Fourteenforty Research Institute, Inc.
44
Bitvisorの動作メカニズム
GRUB Bitvisor
BIOS
Windows
VMX-modeに移行し、VMMを起動
リアルモードエミュレーションを行い、
BIOS実行直後に復帰する
NTLDR
Fourteenforty Research Institute, Inc.
45
Vitonが保護するリソース
• 命令
– ゲストOS上での全てのVMX命令を検出・防止
• レジスタ
– IDTRレジスタの監視
– 主要なMSRの監視、変更防止
– CR0.WPビットの監視、変更防止
• メモリ
– カーネルの全てコード領域
– IDT
– SDT
– SSDT
Fourteenforty Research Institute, Inc.
46
メモリ保護のメカニズム
Host
PA
Guest
VA
SPT
• 保護対象の仮想アドレスに対応するPTEのWRビットをクリア
– CR0.WPが1の場合、ring0の処理でもメモリの書き換えが不可能
Page number P
W
R
U
S
P
W
T
P
C
D
ADOS R
Fourteenforty Research Institute, Inc.
47
ゲストOSのメモリレイアウトの把握
0x00000000
0x80000000
0xffffffff
Guest
IDTR
IDT
ntoskrnl.exe
N pages
"MZ"
"PE¥0¥0"
.edata
.text
...
.edataセクションをパースすることで、
カーネルAPIのアドレスを解決可能
Fourteenforty Research Institute, Inc.
48
ゲストOSの活動のモニタリング
• Vitonを利用した場合、Viton以外からのメモリパッチングを防
止することができる
• VitonからゲストOSへのパッチングは可能
– ゲストOSの任意の処理をフックし、活動を監視
1. フックコード用メモリ領域の確保
2. フックコードのセットアップ
3. 対象処理のフック
Fourteenforty Research Institute, Inc.
49
フックコード用メモリ領域の確保(1/3)
ゲスト Viton
int3
push 0x1000
push 0x0
call ExAllocatePool
int 3
任意の処理
mov edi, edi
push ebp
...
元の処理を保存
メモリ確保用コード
Fourteenforty Research Institute, Inc.
50
フックコード用メモリ領域の確保(2/3)
ゲスト Viton
int3
push 0x1000
push 0x0
call ExAllocatePool
int 3
任意の処理
VM-exit 汎用レジスタの値を保存
EIPを1加算
VM-entry
VM-exit
ExAllocatePool APIの返り値
をeaxレジスタから取得
Fourteenforty Research Institute, Inc.
51
フックコード用メモリ領域の確保(3/3)
ゲスト Viton
任意の処理
mov edi, edi
push ebp
...
元の処理を復元
保存しておいたEIP・ESPを復元VM-entry
Fourteenforty Research Institute, Inc.
52
フックコードのセットアップ & 対象処理のフック
xor eax, eax
...
対象の処理
detours_buf
ゲスト Viton
jmp detours_buf
フックコード
上書きした元のコード
jmp caller_func
対象の関数が実行されると、
1. detours_bufにジャンプ
2. フックコードが実行される
3. "jmp detours_buf"で上書きした箇所
の元の処理が実行される
4. 呼び出し元の上書きした次の処理へ
ジャンプ
Fourteenforty Research Institute, Inc.
53
フックコードによる活動の監視
• 下記のAPIをフックすることでゲストOSのリソースを把握可能
– ZwCreateProcess/ZwTerminateProcess
– ZwLoadDriver/ZwUnloadDriver
• OS内の情報が改竄されたとしても、Vitonが正しい情報を把
握している
Fourteenforty Research Institute, Inc.
54
デモ
Fourteenforty Research Institute, Inc.
55
VMM
dbgsh (Bitvisor's debuging function)
ログバッファ
ゲスト
VMCALL
VM-exit
VM-entry
汎用レジスタ経由でログデータが送られる
Fourteenforty Research Institute, Inc.
56
Viton vs.
• Type I
「検知」および「防止」が可能
• Type II
DKOM:活動のモニタリングにより「検知」可能
KOH:汎用的な対策を行うにはブレークスルーが必要
• Type III
「検知」および「防止」が可能
Fourteenforty Research Institute, Inc.
57
まとめ
• 仮想化技術を利用することで効果的なセキュリティ対策を実
現することが可能
• 完全ではない
– 既存ソリューションを保護するための基盤
– 既存のソリューションとの併用
Fourteenforty Research Institute, Inc.
5858
Thank you!
Fourteenforty Research Institute, Inc.
http://www.fourteenforty.jp
シニアリサーチエンジニア
村上 純一
<murakami@fourteenforty.jp>

Weitere ähnliche Inhalte

Was ist angesagt?

Exploring the x64
Exploring the x64Exploring the x64
Exploring the x64FFRI, Inc.
 
Wiresharkで検出できないチャットプログラム
Wiresharkで検出できないチャットプログラムWiresharkで検出できないチャットプログラム
Wiresharkで検出できないチャットプログラムShinichi Hirauchi
 
システムコールフックを使用した攻撃検出
システムコールフックを使用した攻撃検出システムコールフックを使用した攻撃検出
システムコールフックを使用した攻撃検出FFRI, Inc.
 
SFC デザイン言語WS(電子工作)第6回「PCとの連携・音」
SFC デザイン言語WS(電子工作)第6回「PCとの連携・音」SFC デザイン言語WS(電子工作)第6回「PCとの連携・音」
SFC デザイン言語WS(電子工作)第6回「PCとの連携・音」Makoto Hirahara
 
4章 Linuxカーネル - 割り込み・例外 2
4章 Linuxカーネル - 割り込み・例外 24章 Linuxカーネル - 割り込み・例外 2
4章 Linuxカーネル - 割り込み・例外 2mao999
 
Lagopus match improvements
Lagopus match improvementsLagopus match improvements
Lagopus match improvementsMasaru Oki
 
katagaitai CTF勉強会 #5 Crypto
katagaitai CTF勉強会 #5 Cryptokatagaitai CTF勉強会 #5 Crypto
katagaitai CTF勉強会 #5 Cryptotrmr
 
std::pin の勘所
std::pin の勘所std::pin の勘所
std::pin の勘所Hiroaki Goto
 
katagaitaictf7_hw_ysk
katagaitaictf7_hw_yskkatagaitaictf7_hw_ysk
katagaitaictf7_hw_yskysk256
 
○○大学の本当にあった怖い話
○○大学の本当にあった怖い話○○大学の本当にあった怖い話
○○大学の本当にあった怖い話idkqh7 Nishino
 
Mr201305 tizen security_jpn
Mr201305 tizen security_jpnMr201305 tizen security_jpn
Mr201305 tizen security_jpnFFRI, Inc.
 
技術紹介: S2E: Selective Symbolic Execution Engine
技術紹介: S2E: Selective Symbolic Execution Engine技術紹介: S2E: Selective Symbolic Execution Engine
技術紹介: S2E: Selective Symbolic Execution EngineAsuka Nakajima
 
2章 Linuxカーネル - メモリ管理1
2章 Linuxカーネル - メモリ管理12章 Linuxカーネル - メモリ管理1
2章 Linuxカーネル - メモリ管理1mao999
 
Mr201304 open flow_security_jpn
Mr201304 open flow_security_jpnMr201304 open flow_security_jpn
Mr201304 open flow_security_jpnFFRI, Inc.
 
gumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作る
gumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作るgumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作る
gumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作るgumilab
 
あなたのAppleにもEFIモンスターはいませんか? by Pedro Vilaça - CODE BLUE 2015
あなたのAppleにもEFIモンスターはいませんか? by Pedro Vilaça - CODE BLUE 2015あなたのAppleにもEFIモンスターはいませんか? by Pedro Vilaça - CODE BLUE 2015
あなたのAppleにもEFIモンスターはいませんか? by Pedro Vilaça - CODE BLUE 2015CODE BLUE
 
20151228_マイナンバー対応、情報漏洩対策にアクセスコントロールとカラムベースのデータ暗号化ソリューション by 株式会社インサイトテクノロジー 森田俊哉
20151228_マイナンバー対応、情報漏洩対策にアクセスコントロールとカラムベースのデータ暗号化ソリューション by 株式会社インサイトテクノロジー 森田俊哉20151228_マイナンバー対応、情報漏洩対策にアクセスコントロールとカラムベースのデータ暗号化ソリューション by 株式会社インサイトテクノロジー 森田俊哉
20151228_マイナンバー対応、情報漏洩対策にアクセスコントロールとカラムベースのデータ暗号化ソリューション by 株式会社インサイトテクノロジー 森田俊哉Insight Technology, Inc.
 
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)ryos36
 
dofilewrite and vn_write
dofilewrite and vn_writedofilewrite and vn_write
dofilewrite and vn_writekusabanachi
 

Was ist angesagt? (20)

Exploring the x64
Exploring the x64Exploring the x64
Exploring the x64
 
Wiresharkで検出できないチャットプログラム
Wiresharkで検出できないチャットプログラムWiresharkで検出できないチャットプログラム
Wiresharkで検出できないチャットプログラム
 
システムコールフックを使用した攻撃検出
システムコールフックを使用した攻撃検出システムコールフックを使用した攻撃検出
システムコールフックを使用した攻撃検出
 
SFC デザイン言語WS(電子工作)第6回「PCとの連携・音」
SFC デザイン言語WS(電子工作)第6回「PCとの連携・音」SFC デザイン言語WS(電子工作)第6回「PCとの連携・音」
SFC デザイン言語WS(電子工作)第6回「PCとの連携・音」
 
4章 Linuxカーネル - 割り込み・例外 2
4章 Linuxカーネル - 割り込み・例外 24章 Linuxカーネル - 割り込み・例外 2
4章 Linuxカーネル - 割り込み・例外 2
 
Lagopus match improvements
Lagopus match improvementsLagopus match improvements
Lagopus match improvements
 
katagaitai CTF勉強会 #5 Crypto
katagaitai CTF勉強会 #5 Cryptokatagaitai CTF勉強会 #5 Crypto
katagaitai CTF勉強会 #5 Crypto
 
std::pin の勘所
std::pin の勘所std::pin の勘所
std::pin の勘所
 
FFR EXCALOC
FFR EXCALOCFFR EXCALOC
FFR EXCALOC
 
katagaitaictf7_hw_ysk
katagaitaictf7_hw_yskkatagaitaictf7_hw_ysk
katagaitaictf7_hw_ysk
 
○○大学の本当にあった怖い話
○○大学の本当にあった怖い話○○大学の本当にあった怖い話
○○大学の本当にあった怖い話
 
Mr201305 tizen security_jpn
Mr201305 tizen security_jpnMr201305 tizen security_jpn
Mr201305 tizen security_jpn
 
技術紹介: S2E: Selective Symbolic Execution Engine
技術紹介: S2E: Selective Symbolic Execution Engine技術紹介: S2E: Selective Symbolic Execution Engine
技術紹介: S2E: Selective Symbolic Execution Engine
 
2章 Linuxカーネル - メモリ管理1
2章 Linuxカーネル - メモリ管理12章 Linuxカーネル - メモリ管理1
2章 Linuxカーネル - メモリ管理1
 
Mr201304 open flow_security_jpn
Mr201304 open flow_security_jpnMr201304 open flow_security_jpn
Mr201304 open flow_security_jpn
 
gumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作る
gumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作るgumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作る
gumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作る
 
あなたのAppleにもEFIモンスターはいませんか? by Pedro Vilaça - CODE BLUE 2015
あなたのAppleにもEFIモンスターはいませんか? by Pedro Vilaça - CODE BLUE 2015あなたのAppleにもEFIモンスターはいませんか? by Pedro Vilaça - CODE BLUE 2015
あなたのAppleにもEFIモンスターはいませんか? by Pedro Vilaça - CODE BLUE 2015
 
20151228_マイナンバー対応、情報漏洩対策にアクセスコントロールとカラムベースのデータ暗号化ソリューション by 株式会社インサイトテクノロジー 森田俊哉
20151228_マイナンバー対応、情報漏洩対策にアクセスコントロールとカラムベースのデータ暗号化ソリューション by 株式会社インサイトテクノロジー 森田俊哉20151228_マイナンバー対応、情報漏洩対策にアクセスコントロールとカラムベースのデータ暗号化ソリューション by 株式会社インサイトテクノロジー 森田俊哉
20151228_マイナンバー対応、情報漏洩対策にアクセスコントロールとカラムベースのデータ暗号化ソリューション by 株式会社インサイトテクノロジー 森田俊哉
 
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
 
dofilewrite and vn_write
dofilewrite and vn_writedofilewrite and vn_write
dofilewrite and vn_write
 

Andere mochten auch

MR201407 An example of antivirus detection rates and similarity of undetected...
MR201407 An example of antivirus detection rates and similarity of undetected...MR201407 An example of antivirus detection rates and similarity of undetected...
MR201407 An example of antivirus detection rates and similarity of undetected...FFRI, Inc.
 
Interview Nelson Lourenço - CEO on FUTURAMB
Interview Nelson Lourenço - CEO on FUTURAMBInterview Nelson Lourenço - CEO on FUTURAMB
Interview Nelson Lourenço - CEO on FUTURAMBNelson Lourenço, Eng.º
 
Integrarea dimensiunii de gen în proiectele de infrastructură
Integrarea dimensiunii de gen în proiectele de infrastructurăIntegrarea dimensiunii de gen în proiectele de infrastructură
Integrarea dimensiunii de gen în proiectele de infrastructurăADR Nord
 
Ersağ İle Başarıya giden 10 yol
Ersağ İle Başarıya giden 10 yolErsağ İle Başarıya giden 10 yol
Ersağ İle Başarıya giden 10 yolyuem_61
 
Kampioenschappen 2015 definitief
Kampioenschappen 2015 definitiefKampioenschappen 2015 definitief
Kampioenschappen 2015 definitiefFabrice Carlier
 
3 los prof en contextos de inv e innov
3 los prof en contextos de inv e innov3 los prof en contextos de inv e innov
3 los prof en contextos de inv e innovkarina lopez
 
Los prof ante las innov currs
Los prof ante las innov currsLos prof ante las innov currs
Los prof ante las innov currskarina lopez
 
Renacimiento
RenacimientoRenacimiento
RenacimientoME PP
 
Mike Rawlings a potted history
Mike Rawlings a potted historyMike Rawlings a potted history
Mike Rawlings a potted historyMike Rawlings
 
"Подари улыбку"
"Подари улыбку""Подари улыбку"
"Подари улыбку"XENIAboroda
 
DynGlobal 800Watt Solar Panel
DynGlobal 800Watt Solar PanelDynGlobal 800Watt Solar Panel
DynGlobal 800Watt Solar PanelVern Wright
 
Nuevo documento de microsoft office word
Nuevo documento de microsoft office wordNuevo documento de microsoft office word
Nuevo documento de microsoft office wordCarlos Ligarda Samanez
 

Andere mochten auch (19)

MR201407 An example of antivirus detection rates and similarity of undetected...
MR201407 An example of antivirus detection rates and similarity of undetected...MR201407 An example of antivirus detection rates and similarity of undetected...
MR201407 An example of antivirus detection rates and similarity of undetected...
 
Interview Nelson Lourenço - CEO on FUTURAMB
Interview Nelson Lourenço - CEO on FUTURAMBInterview Nelson Lourenço - CEO on FUTURAMB
Interview Nelson Lourenço - CEO on FUTURAMB
 
Words and phrases
Words and phrases  Words and phrases
Words and phrases
 
Vacation
VacationVacation
Vacation
 
Integrarea dimensiunii de gen în proiectele de infrastructură
Integrarea dimensiunii de gen în proiectele de infrastructurăIntegrarea dimensiunii de gen în proiectele de infrastructură
Integrarea dimensiunii de gen în proiectele de infrastructură
 
Ersağ İle Başarıya giden 10 yol
Ersağ İle Başarıya giden 10 yolErsağ İle Başarıya giden 10 yol
Ersağ İle Başarıya giden 10 yol
 
School archive
School archiveSchool archive
School archive
 
Kampioenschappen 2015 definitief
Kampioenschappen 2015 definitiefKampioenschappen 2015 definitief
Kampioenschappen 2015 definitief
 
3 los prof en contextos de inv e innov
3 los prof en contextos de inv e innov3 los prof en contextos de inv e innov
3 los prof en contextos de inv e innov
 
Los prof ante las innov currs
Los prof ante las innov currsLos prof ante las innov currs
Los prof ante las innov currs
 
Renacimiento
RenacimientoRenacimiento
Renacimiento
 
Biggie's CV1
Biggie's CV1Biggie's CV1
Biggie's CV1
 
Mike Rawlings a potted history
Mike Rawlings a potted historyMike Rawlings a potted history
Mike Rawlings a potted history
 
"Подари улыбку"
"Подари улыбку""Подари улыбку"
"Подари улыбку"
 
Competencias
CompetenciasCompetencias
Competencias
 
Test
TestTest
Test
 
Porque os usuários curtem marcas no Facebook?
Porque os usuários curtem marcas no Facebook?Porque os usuários curtem marcas no Facebook?
Porque os usuários curtem marcas no Facebook?
 
DynGlobal 800Watt Solar Panel
DynGlobal 800Watt Solar PanelDynGlobal 800Watt Solar Panel
DynGlobal 800Watt Solar Panel
 
Nuevo documento de microsoft office word
Nuevo documento de microsoft office wordNuevo documento de microsoft office word
Nuevo documento de microsoft office word
 

Ähnlich wie ハードウェアによる仮想化支援機能を利用したハイパバイザーIPS

実践 WebRTC 〜最新事例と開発ノウハウの紹介〜
実践 WebRTC 〜最新事例と開発ノウハウの紹介〜実践 WebRTC 〜最新事例と開発ノウハウの紹介〜
実践 WebRTC 〜最新事例と開発ノウハウの紹介〜Yusuke Naka
 
AWS Security JAWS 経済的にハニーポットのログ分析をするためのベストプラクティス?
AWS Security JAWS 経済的にハニーポットのログ分析をするためのベストプラクティス?AWS Security JAWS 経済的にハニーポットのログ分析をするためのベストプラクティス?
AWS Security JAWS 経済的にハニーポットのログ分析をするためのベストプラクティス?Masamitsu Maehara
 
サーバ異常検知入門
サーバ異常検知入門サーバ異常検知入門
サーバ異常検知入門mangantempy
 
2014 1018 OSC-Fall Tokyo NETMF
2014 1018 OSC-Fall Tokyo NETMF2014 1018 OSC-Fall Tokyo NETMF
2014 1018 OSC-Fall Tokyo NETMFAtomu Hidaka
 
Wiresharkの解析プラグインを作る ssmjp 201409
Wiresharkの解析プラグインを作る ssmjp 201409Wiresharkの解析プラグインを作る ssmjp 201409
Wiresharkの解析プラグインを作る ssmjp 201409稔 小林
 
ハードウェア脳とソフトウェア脳
ハードウェア脳とソフトウェア脳ハードウェア脳とソフトウェア脳
ハードウェア脳とソフトウェア脳Shinichiro Niiyama
 
Twitterのデータを取得する準備
Twitterのデータを取得する準備Twitterのデータを取得する準備
Twitterのデータを取得する準備Takeshi Arabiki
 
Jubatus分類器の活用テクニック
Jubatus分類器の活用テクニックJubatus分類器の活用テクニック
Jubatus分類器の活用テクニックJubatusOfficial
 
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12Takanori Suzuki
 
自作LSIコミュニティの可能性
自作LSIコミュニティの可能性自作LSIコミュニティの可能性
自作LSIコミュニティの可能性Junichi Akita
 
Cortex-M0プロセッサから自作して Lチカをやってみた
Cortex-M0プロセッサから自作してLチカをやってみたCortex-M0プロセッサから自作してLチカをやってみた
Cortex-M0プロセッサから自作して LチカをやってみたJunichi Akita
 
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」de:code 2017
 
インメモリーで超高速処理を実現する場合のカギ
インメモリーで超高速処理を実現する場合のカギインメモリーで超高速処理を実現する場合のカギ
インメモリーで超高速処理を実現する場合のカギMasaki Yamakawa
 
スタート低レイヤー #0
スタート低レイヤー #0スタート低レイヤー #0
スタート低レイヤー #0Kiwamu Okabe
 
2012/03/31 Apacheスタートスクリプト読書会発表資料
2012/03/31 Apacheスタートスクリプト読書会発表資料2012/03/31 Apacheスタートスクリプト読書会発表資料
2012/03/31 Apacheスタートスクリプト読書会発表資料Yasutaka Hamada
 
IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~
IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~
IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~Hideki Takase
 
APASEC 2013 - ROP/JIT を使わずに DEP/ASLR を回避する手法を見てみた。
APASEC 2013 - ROP/JIT を使わずに DEP/ASLR を回避する手法を見てみた。APASEC 2013 - ROP/JIT を使わずに DEP/ASLR を回避する手法を見てみた。
APASEC 2013 - ROP/JIT を使わずに DEP/ASLR を回避する手法を見てみた。Satoshi Mimura
 
RTミドルウエアコンテスト2011応募作品「RTno」
RTミドルウエアコンテスト2011応募作品「RTno」RTミドルウエアコンテスト2011応募作品「RTno」
RTミドルウエアコンテスト2011応募作品「RTno」Yuki Suga
 

Ähnlich wie ハードウェアによる仮想化支援機能を利用したハイパバイザーIPS (20)

実践 WebRTC 〜最新事例と開発ノウハウの紹介〜
実践 WebRTC 〜最新事例と開発ノウハウの紹介〜実践 WebRTC 〜最新事例と開発ノウハウの紹介〜
実践 WebRTC 〜最新事例と開発ノウハウの紹介〜
 
AWS Security JAWS 経済的にハニーポットのログ分析をするためのベストプラクティス?
AWS Security JAWS 経済的にハニーポットのログ分析をするためのベストプラクティス?AWS Security JAWS 経済的にハニーポットのログ分析をするためのベストプラクティス?
AWS Security JAWS 経済的にハニーポットのログ分析をするためのベストプラクティス?
 
サーバ異常検知入門
サーバ異常検知入門サーバ異常検知入門
サーバ異常検知入門
 
2014 1018 OSC-Fall Tokyo NETMF
2014 1018 OSC-Fall Tokyo NETMF2014 1018 OSC-Fall Tokyo NETMF
2014 1018 OSC-Fall Tokyo NETMF
 
Wiresharkの解析プラグインを作る ssmjp 201409
Wiresharkの解析プラグインを作る ssmjp 201409Wiresharkの解析プラグインを作る ssmjp 201409
Wiresharkの解析プラグインを作る ssmjp 201409
 
Nfc lab8月定例会
Nfc lab8月定例会Nfc lab8月定例会
Nfc lab8月定例会
 
ハードウェア脳とソフトウェア脳
ハードウェア脳とソフトウェア脳ハードウェア脳とソフトウェア脳
ハードウェア脳とソフトウェア脳
 
Twitterのデータを取得する準備
Twitterのデータを取得する準備Twitterのデータを取得する準備
Twitterのデータを取得する準備
 
Jubatus分類器の活用テクニック
Jubatus分類器の活用テクニックJubatus分類器の活用テクニック
Jubatus分類器の活用テクニック
 
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
 
自作LSIコミュニティの可能性
自作LSIコミュニティの可能性自作LSIコミュニティの可能性
自作LSIコミュニティの可能性
 
Cortex-M0プロセッサから自作して Lチカをやってみた
Cortex-M0プロセッサから自作してLチカをやってみたCortex-M0プロセッサから自作してLチカをやってみた
Cortex-M0プロセッサから自作して Lチカをやってみた
 
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」
 
インメモリーで超高速処理を実現する場合のカギ
インメモリーで超高速処理を実現する場合のカギインメモリーで超高速処理を実現する場合のカギ
インメモリーで超高速処理を実現する場合のカギ
 
スタート低レイヤー #0
スタート低レイヤー #0スタート低レイヤー #0
スタート低レイヤー #0
 
Mt basic as-os_on_danbot
Mt basic as-os_on_danbotMt basic as-os_on_danbot
Mt basic as-os_on_danbot
 
2012/03/31 Apacheスタートスクリプト読書会発表資料
2012/03/31 Apacheスタートスクリプト読書会発表資料2012/03/31 Apacheスタートスクリプト読書会発表資料
2012/03/31 Apacheスタートスクリプト読書会発表資料
 
IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~
IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~
IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~
 
APASEC 2013 - ROP/JIT を使わずに DEP/ASLR を回避する手法を見てみた。
APASEC 2013 - ROP/JIT を使わずに DEP/ASLR を回避する手法を見てみた。APASEC 2013 - ROP/JIT を使わずに DEP/ASLR を回避する手法を見てみた。
APASEC 2013 - ROP/JIT を使わずに DEP/ASLR を回避する手法を見てみた。
 
RTミドルウエアコンテスト2011応募作品「RTno」
RTミドルウエアコンテスト2011応募作品「RTno」RTミドルウエアコンテスト2011応募作品「RTno」
RTミドルウエアコンテスト2011応募作品「RTno」
 

Mehr von FFRI, Inc.

Appearances are deceiving: Novel offensive techniques in Windows 10/11 on ARM
Appearances are deceiving: Novel offensive techniques in Windows 10/11 on ARMAppearances are deceiving: Novel offensive techniques in Windows 10/11 on ARM
Appearances are deceiving: Novel offensive techniques in Windows 10/11 on ARMFFRI, Inc.
 
Appearances are deceiving: Novel offensive techniques in Windows 10/11 on ARM
Appearances are deceiving: Novel offensive techniques in Windows 10/11 on ARMAppearances are deceiving: Novel offensive techniques in Windows 10/11 on ARM
Appearances are deceiving: Novel offensive techniques in Windows 10/11 on ARMFFRI, Inc.
 
TrustZone use case and trend (FFRI Monthly Research Mar 2017)
TrustZone use case and trend (FFRI Monthly Research Mar 2017) TrustZone use case and trend (FFRI Monthly Research Mar 2017)
TrustZone use case and trend (FFRI Monthly Research Mar 2017) FFRI, Inc.
 
Android Things Security Research in Developer Preview 2 (FFRI Monthly Researc...
Android Things Security Research in Developer Preview 2 (FFRI Monthly Researc...Android Things Security Research in Developer Preview 2 (FFRI Monthly Researc...
Android Things Security Research in Developer Preview 2 (FFRI Monthly Researc...FFRI, Inc.
 
An Overview of the Android Things Security (FFRI Monthly Research Jan 2017)
An Overview of the Android Things Security (FFRI Monthly Research Jan 2017) An Overview of the Android Things Security (FFRI Monthly Research Jan 2017)
An Overview of the Android Things Security (FFRI Monthly Research Jan 2017) FFRI, Inc.
 
Black Hat Europe 2016 Survey Report (FFRI Monthly Research Dec 2016)
Black Hat Europe 2016 Survey Report (FFRI Monthly Research Dec 2016) Black Hat Europe 2016 Survey Report (FFRI Monthly Research Dec 2016)
Black Hat Europe 2016 Survey Report (FFRI Monthly Research Dec 2016) FFRI, Inc.
 
An Example of use the Threat Modeling Tool (FFRI Monthly Research Nov 2016)
An Example of use the Threat Modeling Tool (FFRI Monthly Research Nov 2016)An Example of use the Threat Modeling Tool (FFRI Monthly Research Nov 2016)
An Example of use the Threat Modeling Tool (FFRI Monthly Research Nov 2016)FFRI, Inc.
 
STRIDE Variants and Security Requirements-based Threat Analysis (FFRI Monthly...
STRIDE Variants and Security Requirements-based Threat Analysis (FFRI Monthly...STRIDE Variants and Security Requirements-based Threat Analysis (FFRI Monthly...
STRIDE Variants and Security Requirements-based Threat Analysis (FFRI Monthly...FFRI, Inc.
 
Introduction of Threat Analysis Methods(FFRI Monthly Research 2016.9)
Introduction of Threat Analysis Methods(FFRI Monthly Research 2016.9)Introduction of Threat Analysis Methods(FFRI Monthly Research 2016.9)
Introduction of Threat Analysis Methods(FFRI Monthly Research 2016.9)FFRI, Inc.
 
Black Hat USA 2016 Survey Report (FFRI Monthly Research 2016.8)
Black Hat USA 2016  Survey Report (FFRI Monthly Research 2016.8)Black Hat USA 2016  Survey Report (FFRI Monthly Research 2016.8)
Black Hat USA 2016 Survey Report (FFRI Monthly Research 2016.8)FFRI, Inc.
 
About security assessment framework “CHIPSEC” (FFRI Monthly Research 2016.7)
About security assessment framework “CHIPSEC” (FFRI Monthly Research 2016.7) About security assessment framework “CHIPSEC” (FFRI Monthly Research 2016.7)
About security assessment framework “CHIPSEC” (FFRI Monthly Research 2016.7) FFRI, Inc.
 
Black Hat USA 2016 Pre-Survey (FFRI Monthly Research 2016.6)
Black Hat USA 2016 Pre-Survey (FFRI Monthly Research 2016.6)Black Hat USA 2016 Pre-Survey (FFRI Monthly Research 2016.6)
Black Hat USA 2016 Pre-Survey (FFRI Monthly Research 2016.6)FFRI, Inc.
 
Black Hat Asia 2016 Survey Report (FFRI Monthly Research 2016.4)
Black Hat Asia 2016 Survey Report (FFRI Monthly Research 2016.4)Black Hat Asia 2016 Survey Report (FFRI Monthly Research 2016.4)
Black Hat Asia 2016 Survey Report (FFRI Monthly Research 2016.4)FFRI, Inc.
 
ARMv8-M TrustZone: A New Security Feature for Embedded Systems (FFRI Monthly ...
ARMv8-M TrustZone: A New Security Feature for Embedded Systems (FFRI Monthly ...ARMv8-M TrustZone: A New Security Feature for Embedded Systems (FFRI Monthly ...
ARMv8-M TrustZone: A New Security Feature for Embedded Systems (FFRI Monthly ...FFRI, Inc.
 
CODE BLUE 2015 Report (FFRI Monthly Research 2015.11)
CODE BLUE 2015 Report (FFRI Monthly Research 2015.11)CODE BLUE 2015 Report (FFRI Monthly Research 2015.11)
CODE BLUE 2015 Report (FFRI Monthly Research 2015.11)FFRI, Inc.
 
Latest Security Reports of Automobile and Vulnerability Assessment by CVSS v3...
Latest Security Reports of Automobile and Vulnerability Assessment by CVSS v3...Latest Security Reports of Automobile and Vulnerability Assessment by CVSS v3...
Latest Security Reports of Automobile and Vulnerability Assessment by CVSS v3...FFRI, Inc.
 
Black Hat USA 2015 Survey Report (FFRI Monthly Research 201508)
Black Hat USA 2015 Survey Report (FFRI Monthly Research 201508)Black Hat USA 2015 Survey Report (FFRI Monthly Research 201508)
Black Hat USA 2015 Survey Report (FFRI Monthly Research 201508)FFRI, Inc.
 
A Survey of Threats in OS X and iOS(FFRI Monthly Research 201507)
A Survey of Threats in OS X and iOS(FFRI Monthly Research 201507)A Survey of Threats in OS X and iOS(FFRI Monthly Research 201507)
A Survey of Threats in OS X and iOS(FFRI Monthly Research 201507)FFRI, Inc.
 
Security of Windows 10 IoT Core(FFRI Monthly Research 201506)
Security of Windows 10 IoT Core(FFRI Monthly Research 201506)Security of Windows 10 IoT Core(FFRI Monthly Research 201506)
Security of Windows 10 IoT Core(FFRI Monthly Research 201506)FFRI, Inc.
 
Trend of Next-Gen In-Vehicle Network Standard and Current State of Security(F...
Trend of Next-Gen In-Vehicle Network Standard and Current State of Security(F...Trend of Next-Gen In-Vehicle Network Standard and Current State of Security(F...
Trend of Next-Gen In-Vehicle Network Standard and Current State of Security(F...FFRI, Inc.
 

Mehr von FFRI, Inc. (20)

Appearances are deceiving: Novel offensive techniques in Windows 10/11 on ARM
Appearances are deceiving: Novel offensive techniques in Windows 10/11 on ARMAppearances are deceiving: Novel offensive techniques in Windows 10/11 on ARM
Appearances are deceiving: Novel offensive techniques in Windows 10/11 on ARM
 
Appearances are deceiving: Novel offensive techniques in Windows 10/11 on ARM
Appearances are deceiving: Novel offensive techniques in Windows 10/11 on ARMAppearances are deceiving: Novel offensive techniques in Windows 10/11 on ARM
Appearances are deceiving: Novel offensive techniques in Windows 10/11 on ARM
 
TrustZone use case and trend (FFRI Monthly Research Mar 2017)
TrustZone use case and trend (FFRI Monthly Research Mar 2017) TrustZone use case and trend (FFRI Monthly Research Mar 2017)
TrustZone use case and trend (FFRI Monthly Research Mar 2017)
 
Android Things Security Research in Developer Preview 2 (FFRI Monthly Researc...
Android Things Security Research in Developer Preview 2 (FFRI Monthly Researc...Android Things Security Research in Developer Preview 2 (FFRI Monthly Researc...
Android Things Security Research in Developer Preview 2 (FFRI Monthly Researc...
 
An Overview of the Android Things Security (FFRI Monthly Research Jan 2017)
An Overview of the Android Things Security (FFRI Monthly Research Jan 2017) An Overview of the Android Things Security (FFRI Monthly Research Jan 2017)
An Overview of the Android Things Security (FFRI Monthly Research Jan 2017)
 
Black Hat Europe 2016 Survey Report (FFRI Monthly Research Dec 2016)
Black Hat Europe 2016 Survey Report (FFRI Monthly Research Dec 2016) Black Hat Europe 2016 Survey Report (FFRI Monthly Research Dec 2016)
Black Hat Europe 2016 Survey Report (FFRI Monthly Research Dec 2016)
 
An Example of use the Threat Modeling Tool (FFRI Monthly Research Nov 2016)
An Example of use the Threat Modeling Tool (FFRI Monthly Research Nov 2016)An Example of use the Threat Modeling Tool (FFRI Monthly Research Nov 2016)
An Example of use the Threat Modeling Tool (FFRI Monthly Research Nov 2016)
 
STRIDE Variants and Security Requirements-based Threat Analysis (FFRI Monthly...
STRIDE Variants and Security Requirements-based Threat Analysis (FFRI Monthly...STRIDE Variants and Security Requirements-based Threat Analysis (FFRI Monthly...
STRIDE Variants and Security Requirements-based Threat Analysis (FFRI Monthly...
 
Introduction of Threat Analysis Methods(FFRI Monthly Research 2016.9)
Introduction of Threat Analysis Methods(FFRI Monthly Research 2016.9)Introduction of Threat Analysis Methods(FFRI Monthly Research 2016.9)
Introduction of Threat Analysis Methods(FFRI Monthly Research 2016.9)
 
Black Hat USA 2016 Survey Report (FFRI Monthly Research 2016.8)
Black Hat USA 2016  Survey Report (FFRI Monthly Research 2016.8)Black Hat USA 2016  Survey Report (FFRI Monthly Research 2016.8)
Black Hat USA 2016 Survey Report (FFRI Monthly Research 2016.8)
 
About security assessment framework “CHIPSEC” (FFRI Monthly Research 2016.7)
About security assessment framework “CHIPSEC” (FFRI Monthly Research 2016.7) About security assessment framework “CHIPSEC” (FFRI Monthly Research 2016.7)
About security assessment framework “CHIPSEC” (FFRI Monthly Research 2016.7)
 
Black Hat USA 2016 Pre-Survey (FFRI Monthly Research 2016.6)
Black Hat USA 2016 Pre-Survey (FFRI Monthly Research 2016.6)Black Hat USA 2016 Pre-Survey (FFRI Monthly Research 2016.6)
Black Hat USA 2016 Pre-Survey (FFRI Monthly Research 2016.6)
 
Black Hat Asia 2016 Survey Report (FFRI Monthly Research 2016.4)
Black Hat Asia 2016 Survey Report (FFRI Monthly Research 2016.4)Black Hat Asia 2016 Survey Report (FFRI Monthly Research 2016.4)
Black Hat Asia 2016 Survey Report (FFRI Monthly Research 2016.4)
 
ARMv8-M TrustZone: A New Security Feature for Embedded Systems (FFRI Monthly ...
ARMv8-M TrustZone: A New Security Feature for Embedded Systems (FFRI Monthly ...ARMv8-M TrustZone: A New Security Feature for Embedded Systems (FFRI Monthly ...
ARMv8-M TrustZone: A New Security Feature for Embedded Systems (FFRI Monthly ...
 
CODE BLUE 2015 Report (FFRI Monthly Research 2015.11)
CODE BLUE 2015 Report (FFRI Monthly Research 2015.11)CODE BLUE 2015 Report (FFRI Monthly Research 2015.11)
CODE BLUE 2015 Report (FFRI Monthly Research 2015.11)
 
Latest Security Reports of Automobile and Vulnerability Assessment by CVSS v3...
Latest Security Reports of Automobile and Vulnerability Assessment by CVSS v3...Latest Security Reports of Automobile and Vulnerability Assessment by CVSS v3...
Latest Security Reports of Automobile and Vulnerability Assessment by CVSS v3...
 
Black Hat USA 2015 Survey Report (FFRI Monthly Research 201508)
Black Hat USA 2015 Survey Report (FFRI Monthly Research 201508)Black Hat USA 2015 Survey Report (FFRI Monthly Research 201508)
Black Hat USA 2015 Survey Report (FFRI Monthly Research 201508)
 
A Survey of Threats in OS X and iOS(FFRI Monthly Research 201507)
A Survey of Threats in OS X and iOS(FFRI Monthly Research 201507)A Survey of Threats in OS X and iOS(FFRI Monthly Research 201507)
A Survey of Threats in OS X and iOS(FFRI Monthly Research 201507)
 
Security of Windows 10 IoT Core(FFRI Monthly Research 201506)
Security of Windows 10 IoT Core(FFRI Monthly Research 201506)Security of Windows 10 IoT Core(FFRI Monthly Research 201506)
Security of Windows 10 IoT Core(FFRI Monthly Research 201506)
 
Trend of Next-Gen In-Vehicle Network Standard and Current State of Security(F...
Trend of Next-Gen In-Vehicle Network Standard and Current State of Security(F...Trend of Next-Gen In-Vehicle Network Standard and Current State of Security(F...
Trend of Next-Gen In-Vehicle Network Standard and Current State of Security(F...
 

ハードウェアによる仮想化支援機能を利用したハイパバイザーIPS

  • 1. Fourteenforty Research Institute, Inc. 株式会社株式会社株式会社株式会社 フォティーンフォティフォティーンフォティフォティーンフォティフォティーンフォティ技術研究所技術研究所技術研究所技術研究所 http://www.fourteenforty.jp ハードウェアによる仮想化支援機能を 利用したハイパーバイザーIPS シニアリサーチエンジニア 村上 純一
  • 2. Fourteenforty Research Institute, Inc. 2 はじめに(1/2) • 近年、ルートキット技術の利用によりマルウェアのステルス化 が進んでいる • 従来のAVプロダクトによる検出が困難 • 3rd Partyによる「検出ツール」 – GMER – Rootkit Revealer(Microsoft) – Rootkit Buster(TrendMicro) – McAfee Rootkit Detective
  • 3. Fourteenforty Research Institute, Inc. 3 はじめに(1/2) • 近年、ルートキット技術の利用によりマルウェアのステルス化 が進んでいる • 従来のAVプロダクトによる検出が困難 • 3rd Partyによる「検出ツール」 – GMER – Rootkit Revealer(Microsoft) – Rootkit Buster(TrendMicro) – McAfee Rootkit Detective – Windbg ☺
  • 4. Fourteenforty Research Institute, Inc. 4 はじめに(2/2) • 仮想化技術を利用したIPSを開発 – OSより低い「リング-1」相当の権限で動作 • ルートキットの「検知」と「防止」を実現 – 不正なメモリパッチングを検知・防止 – (ゲスト)OSの活動をモニタリング
  • 5. Fourteenforty Research Institute, Inc. 5 アウトライン • 既存のルートキット技術 • 仮想化技術の概要 • Viton, ハイパーバイザーIPS
  • 6. Fourteenforty Research Institute, Inc. 6666 int packet_analysis(GDDCONFIG *gddc,unsigned char *packet,unsigned long length) { struct ip *ip_header; /* IP header */ struct tcphdr *tcp_header; /* TCP header */ char *tcp_data; /* TCP data */ struct in_addr addr; /* IP address */ char sourceIP[16]; /* Source IP address */ char destIP[16]; /* Destination IP address */ unsigned short sourcePort; /* Source Port */ unsigned short destPort; /* Destination Port */ unsigned long len_data; /* Length of data part */ unsigned long iph_len; /* Length of IP header */ unsigned long tcph_len; /* Length of TCP header */ unsigned long sequence; /* Expected sequence */ int portindex; /* Indexnumber of port list */ int direction; /* Packet direction */ unsigned char logtype; /* Log type */ CONN_LIST *bcl,*ncl; /* Connection table list */ CONN_LIST *t; /* Temporary connection list */ static char datestr[512]; /* Buffer to store datetime */ time_t timeval; struct tm *timep=NULL; char *timesp=NULL; char *c; /* Get pointer of IP header and check length of IP */ if (length-SIZE_OF_ETHHDR < MINSIZE_IP+MINSIZE_TCP) return(0); ip_header = (struct ip *)(packet+SIZE_OF_ETHHDR); if (ip_header->ip_p!=IPPROTO_TCP || ip_header->ip_v!=4) return(0); iph_len = ((unsigned long)(ip_header->ip_hl))*4; if (iph_len<MINSIZE_IP) return(0); if ((unsigned long)ntohs(ip_header->ip_len) < MINSIZE_IP+MINSIZE_TCP) return(0); if ((unsigned long)ntohs(ip_header->ip_len) > length-SIZE_OF_ETHHDR){ return(0); } /* Get pointer of TCP header and check length of TCP */ tcp_header = (struct tcphdr *)((char *)ip_header+iph_len); tcph_len = ((unsigned long)(tcp_header->th_off))*4; tcp_data = (char *)tcp_header+tcph_len; if (tcph_len<MINSIZE_TCP) return(0); /* Get other parameter in TCP/IP header */ if ((long)ntohs(ip_header->ip_len)-(long)iph_len-(long)tcph_len<0) return(0); len_data = (unsigned long)ntohs(ip_header->ip_len) -iph_len-tcph_len; sourcePort = ntohs(tcp_header->th_sport); destPort = ntohs(tcp_header->th_dport); memcpy(&addr,&(ip_header->ip_src),sizeof(struct in_addr)); strcpy(sourceIP,(char *)inet_ntoa(addr)); memcpy(&addr,&(ip_header->ip_dst),sizeof(struct in_addr)); strcpy(destIP,(char *)inet_ntoa(addr)); if (!strcmp(sourceIP,destIP)) return(0); 00001B70 FF 15 F0 11 00 01 E9 CC 03 00 00 E8 7C 1C 00 00 ......鯲...閖... 00001B80 33 F6 56 E8 B1 FC FF FF 85 C0 0F 84 B7 03 00 00 3雎....┨... 00001B90 56 6A 02 FF 35 6C 80 00 01 FF 35 D0 87 00 01 FF Vj..5l....5ミ.... 00001BA0 15 CC 11 00 01 85 C0 75 1D 68 10 10 00 00 FF 35 .フ...u.h.....5 00001BB0 50 80 00 01 FF 35 44 80 00 01 FF 35 D0 87 00 01 P....5D....5ミ... 00001BC0 FF 15 04 12 00 01 FF 35 D0 87 00 01 FF 15 2C 12 .......5ミ.....,. 00001BD0 00 01 FF 35 D4 8B 00 01 FF 15 58 10 00 01 E9 64 ...5ヤ.....X...馘 00001BE0 03 00 00 83 FE 1A 77 47 0F 84 59 03 00 00 83 FE ......wG.Ш..... 00001BF0 11 0F 85 16 01 00 00 33 F6 39 35 E8 87 00 01 74 .......3.95閾..t 00001C00 22 8B 3D 28 12 00 01 56 FF D7 56 FF D7 68 00 10 ".=(...V.ラV.ラh.. 00001C10 00 00 FF 35 50 80 00 01 FF 35 88 80 00 01 E9 7D ...5P....5..驀 00001C20 02 00 00 6A 01 E8 0F FC FF FF E9 1A 03 00 00 8B ...j...........急 00001C30 7D 14 B8 11 01 00 00 3B F0 0F 87 8B 00 00 00 3B .ク....;..㈲...; 00001C40 F0 0F 84 16 02 00 00 83 FE 1C 0F 85 BD 00 00 00 .............. 00001C50 33 F6 39 75 10 74 2F A1 EC 87 00 01 8B 0D F0 87 3.9u.t/。.... 00001C60 00 01 3B C6 75 08 3B CE 0F 84 D9 02 00 00 8B 3D ..;ニu.;ホ.....= 00001C70 14 12 00 01 51 50 68 B1 00 00 00 FF 35 D4 87 00 ....QPhア....5ヤ.. 00001C80 01 E9 56 01 00 00 8B 3D 14 12 00 01 68 F0 87 00 .餬....=....h. 00001C90 01 68 EC 87 00 01 68 B0 00 00 00 FF 35 D4 87 00 .h..hー....5ヤ.. 00001CA0 01 FF D7 A1 EC 87 00 01 8B 0D F0 87 00 01 3B C1 ..ラ。......;チ 00001CB0 75 11 89 35 EC 87 00 01 89 35 F0 87 00 01 E9 84 u..5...5..驗 00001CC0 02 00 00 51 50 E9 07 01 00 00 8B CE B8 12 01 00 ...QP.....勤ク... 00001CD0 00 2B C8 0F 84 3C 02 00 00 83 E9 04 0F 84 29 02 .+ネ..<......). 00001CE0 00 00 49 0F 84 F9 01 00 00 81 E9 1C 01 00 00 0F ..I......... 00001CF0 84 E0 01 00 00 81 E9 E6 00 00 00 0F 84 3D 01 00 .........=.. 00001D00 00 81 E9 E8 7C 00 00 0F 84 02 01 00 00 3B 35 5C .閖........;5¥ 00001D10 88 00 01 0F 85 EE 00 00 00 8B 45 14 8B 48 0C 8B .......畿.稀.驚 00001D20 C1 8B D1 F7 D0 C1 EA 02 83 E0 01 83 E2 01 F6 C1 錦チ.... 既存のルートキット技術 Chapter 1
  • 7. Fourteenforty Research Institute, Inc. 7 ルートキット技術の分類 ステルスマルウェア ユーザーの同意なしに、システム・OSの挙動を変更し、情報の隠ぺい を行うソフトウェア(マルウェア) ※Joanna Rukowska、"Introducing Stealth Malware Taxnomy" http://invisiblethings.org/papers/malware-taxonomy.pdf ステルスマルウェアがパッチングを行うリソースの性質に基づいて Type 0からType IIIの4種類に分類
  • 8. Fourteenforty Research Institute, Inc. 8 Type 0 (≠ステルスマルウェア) コード領域 データ領域 コード領域 データ領域 OS プロセス システムレジスタハードウェア Type 0
  • 9. Fourteenforty Research Institute, Inc. 9 Type 0 (≠ステルスマルウェア)
  • 10. Fourteenforty Research Institute, Inc. 10 Type 0 (≠ステルスマルウェア) exp1orer.exe
  • 11. Fourteenforty Research Institute, Inc. 11 Type I コード領域 データ領域 コード領域 データ領域 OS プロセス システムレジスタハードウェア Type I
  • 12. Fourteenforty Research Institute, Inc. 12 Type I - Windowsにおけるフッキングポイント(1/3) IDTR MSR[176h] SDT (ntoskrnl.exe) SDT Shadow (win32k.sys) IDT ・ ・ ・ ・ ・ ・ other interrupt handlers KiSystemService Nt* APIs Nt* APIs (User/GDI) SSDT SSDT
  • 13. Fourteenforty Research Institute, Inc. 13 Type I - Windowsにおけるフッキングポイント(1/3) IDTR MSR[176h] SDT (ntoskrnl.exe) SDT Shadow (win32k.sys) IDT ・ ・ ・ ・ ・ ・ KiSystemService Nt* APIs Nt* APIs (User/GDI) SSDT SSDT other interrupt handlers システムレジスタの値を改竄
  • 14. Fourteenforty Research Institute, Inc. 14 Type I - Windowsにおけるフッキングポイント(2/3) IDTR MSR[176h] SDT (ntoskrnl.exe) SDT Shadow (win32k.sys) IDT ・ ・ ・ ・ ・ ・ KiSystemService Nt* APIs Nt* APIs (User/GDI) SSDT SSDT other interrupt handlers 静的な関数ポインタ、 アドレステーブルを改竄
  • 15. Fourteenforty Research Institute, Inc. 15 Type I - Windowsにおけるフッキングポイント(3/3) IDTR MSR[176h] SDT (ntoskrnl.exe) SDT Shadow (win32k.sys) IDT ・ ・ ・ ・ ・ ・ KiSystemService Nt* APIs Nt* APIs (User/GDI) SSDT SSDT other interrupt handlers 関数のコード領域にjmp命令を挿入
  • 16. Fourteenforty Research Institute, Inc. 16 Type Iとその対策 • 検出は容易 • 多くの検出ツール、対策が存在する – 3rd partyの検出ツール – PatchGuard (Vista x64 Edition)
  • 17. Fourteenforty Research Institute, Inc. 17 Type II コード領域 データ領域 コード領域 データ領域 OS プロセス システムレジスタハードウェア Type II
  • 18. Fourteenforty Research Institute, Inc. 18 Type II • データ領域に含まれるデータを改ざん • DKOM(Direct Kernel Object Manipulation) Jamie Butler,Jamie Butler,Jamie Butler,Jamie Butler, http://www.blackhat.com/presentations/winhttp://www.blackhat.com/presentations/winhttp://www.blackhat.com/presentations/winhttp://www.blackhat.com/presentations/win----usausausausa----04/bh04/bh04/bh04/bh---- winwinwinwin----04040404----butler.pdfbutler.pdfbutler.pdfbutler.pdf • KOH(Kernel Object Hooking) GregGregGregGreg HoglundHoglundHoglundHoglund,,,, http://www.rootkit.com/newsread.php?newsid=501http://www.rootkit.com/newsread.php?newsid=501http://www.rootkit.com/newsread.php?newsid=501http://www.rootkit.com/newsread.php?newsid=501
  • 19. Fourteenforty Research Institute, Inc. 19 データ領域 DKOM(Direct Kernel Object Manipulation) • データ領域に含まれるプロセスリスト、プロセストークン等の データを改竄 コード領域 プロセスリストを 取得する処理 Type IIOS
  • 20. Fourteenforty Research Institute, Inc. 20 データ領域 DKOM(Direct Kernel Object Manipulation) • データ領域に含まれるプロセスリスト、プロセストークン等の データを改竄 コード領域 プロセスリストを 取得する処理 Type IIOS
  • 21. Fourteenforty Research Institute, Inc. 21 DKOM(Direct Kernel Object Manipulation) • 限定的な機能しか実装することができない – 実現可能な機能は、対象のデータを取り扱う処理の実装に依存する • プロセスエントリをプロセスリストから除外すると、 – スケジューリングされない(実行されない)? – スレッドベースのスケジューリング – スケジューラの実装に依存
  • 22. Fourteenforty Research Institute, Inc. 22 KOH(Kernel Object Hooking) • データ領域に含まれる関数ポインタを改竄 • カーネル内には、IDT、SDT、SSDT以外にも無数の関数ポイ ンタが存在する • KOHによるフッキングを検出するためには、カーネル空間に 存在する全ての関数ポインタを把握する必要がある → ルートキット開発側と検出側のイタチごっこ
  • 23. Fourteenforty Research Institute, Inc. 23 Type III コード領域 データ領域 コード領域 データ領域 OS プロセス システムレジスタハードウェア Type III Type III
  • 24. Fourteenforty Research Institute, Inc. 24 Type III(1/2) • システム(OS)の外部で動作する – 仮想化技術の悪用 – ファームウェアルートキットやSMMルートキット • BluePill – ハードウェアの仮想化支援機能を悪用し、悪意のハイパーバイザーを インストール – (ゲスト)OSのリソースは改ざんしない – 最新のBPは、Intel VTおよびAMD-vの両方をサポート Joanna Rutkowska,Joanna Rutkowska,Joanna Rutkowska,Joanna Rutkowska, AlexanderAlexanderAlexanderAlexander TereshkinTereshkinTereshkinTereshkin, http://, http://, http://, http://bluepillproject.orgbluepillproject.orgbluepillproject.orgbluepillproject.org
  • 25. Fourteenforty Research Institute, Inc. 25 Type III(2/2) • Vitriol – Intel VTを悪用するType IIIルートキット Dino Dai Zovi, Black Hat USA 2006Dino Dai Zovi, Black Hat USA 2006Dino Dai Zovi, Black Hat USA 2006Dino Dai Zovi, Black Hat USA 2006 • VMM Rootkit Framework – Vitriol同様、Intel VTを悪用するType IIIルートキット – コンセプトコードのため非常にプリミティブな実装 →VMMの動作、実装を学ぶために最適 Shawn Embleton,Shawn Embleton,Shawn Embleton,Shawn Embleton, http://http://http://http://www.rootkit.com/newsread.php?newsidwww.rootkit.com/newsread.php?newsidwww.rootkit.com/newsread.php?newsidwww.rootkit.com/newsread.php?newsid=758=758=758=758
  • 26. Fourteenforty Research Institute, Inc. 26 ケーススタディ: Storm Worm • 2007年に出回り始めたP2Pボット • スパムメールに自身の実行ファイルを添付して送信 • スパムメールのサブジェクトに実際に発生した事件を利用 – "230 dead as storm batters Europe" – "Happy New Year 2008" – etc. • 一部の亜種は、AV製品から逃れるためにルートキット機能を 備えている
  • 27. Fourteenforty Research Institute, Inc. 27 Storm Worm - "Happy New Year 2008" 実行ファイル実行すると、 1. システムファイルを生成、カーネルにロード 2. ドライバによる悪意の動作 • ルートキット機能 SSDT、IRPフッキングを利用したファイル、レジストリ、接続情報の隠 ぺい • コードインジェクション機能 悪意のコード(本体部分)をユーザーモードプロセスに注入 3. P2P通信を開始
  • 28. Fourteenforty Research Institute, Inc. 28 ルートキット機能 NtQueryDirectoryFile • 以下の3つのNative APIをフック(SSDTフッキング) – NtQueryDirectoryFile, NtEnumerateKey, NtEnumerateValueKey • APIのSSDTにおけるインデックス番号は、NtBuildNumberによって異なる • 2195(2k), 2600(XP) and 3790(2k3)の3つをサポート IndexNumberTableOf NtQueryDirectoryFile SSDT NtBuildNumber == 2600 NtBuildNumber == 2195 NtBuildNumber == 3790
  • 29. Fourteenforty Research Institute, Inc. 29 コードインジェクション機能 kernel land user land services.exe malcode Executable driver(packed) driver malcode (packed) 1. CreateService() 2. StartService() 1. ZwQuerySystemInformation() 2. ZwOpenProcess() 3. ZwAllocateVirtualMemory() 4. (Copy the malcode) 5. (patch to thread object) 6. KeInitializeApc() 7. KeInsertQueueApc()
  • 30. Fourteenforty Research Institute, Inc. 30303030 int packet_analysis(GDDCONFIG *gddc,unsigned char *packet,unsigned long length) { struct ip *ip_header; /* IP header */ struct tcphdr *tcp_header; /* TCP header */ char *tcp_data; /* TCP data */ struct in_addr addr; /* IP address */ char sourceIP[16]; /* Source IP address */ char destIP[16]; /* Destination IP address */ unsigned short sourcePort; /* Source Port */ unsigned short destPort; /* Destination Port */ unsigned long len_data; /* Length of data part */ unsigned long iph_len; /* Length of IP header */ unsigned long tcph_len; /* Length of TCP header */ unsigned long sequence; /* Expected sequence */ int portindex; /* Indexnumber of port list */ int direction; /* Packet direction */ unsigned char logtype; /* Log type */ CONN_LIST *bcl,*ncl; /* Connection table list */ CONN_LIST *t; /* Temporary connection list */ static char datestr[512]; /* Buffer to store datetime */ time_t timeval; struct tm *timep=NULL; char *timesp=NULL; char *c; /* Get pointer of IP header and check length of IP */ if (length-SIZE_OF_ETHHDR < MINSIZE_IP+MINSIZE_TCP) return(0); ip_header = (struct ip *)(packet+SIZE_OF_ETHHDR); if (ip_header->ip_p!=IPPROTO_TCP || ip_header->ip_v!=4) return(0); iph_len = ((unsigned long)(ip_header->ip_hl))*4; if (iph_len<MINSIZE_IP) return(0); if ((unsigned long)ntohs(ip_header->ip_len) < MINSIZE_IP+MINSIZE_TCP) return(0); if ((unsigned long)ntohs(ip_header->ip_len) > length-SIZE_OF_ETHHDR){ return(0); } /* Get pointer of TCP header and check length of TCP */ tcp_header = (struct tcphdr *)((char *)ip_header+iph_len); tcph_len = ((unsigned long)(tcp_header->th_off))*4; tcp_data = (char *)tcp_header+tcph_len; if (tcph_len<MINSIZE_TCP) return(0); /* Get other parameter in TCP/IP header */ if ((long)ntohs(ip_header->ip_len)-(long)iph_len-(long)tcph_len<0) return(0); len_data = (unsigned long)ntohs(ip_header->ip_len) -iph_len-tcph_len; sourcePort = ntohs(tcp_header->th_sport); destPort = ntohs(tcp_header->th_dport); memcpy(&addr,&(ip_header->ip_src),sizeof(struct in_addr)); strcpy(sourceIP,(char *)inet_ntoa(addr)); memcpy(&addr,&(ip_header->ip_dst),sizeof(struct in_addr)); strcpy(destIP,(char *)inet_ntoa(addr)); if (!strcmp(sourceIP,destIP)) return(0); 00001B70 FF 15 F0 11 00 01 E9 CC 03 00 00 E8 7C 1C 00 00 ......鯲...閖... 00001B80 33 F6 56 E8 B1 FC FF FF 85 C0 0F 84 B7 03 00 00 3雎....┨... 00001B90 56 6A 02 FF 35 6C 80 00 01 FF 35 D0 87 00 01 FF Vj..5l....5ミ.... 00001BA0 15 CC 11 00 01 85 C0 75 1D 68 10 10 00 00 FF 35 .フ...u.h.....5 00001BB0 50 80 00 01 FF 35 44 80 00 01 FF 35 D0 87 00 01 P....5D....5ミ... 00001BC0 FF 15 04 12 00 01 FF 35 D0 87 00 01 FF 15 2C 12 .......5ミ.....,. 00001BD0 00 01 FF 35 D4 8B 00 01 FF 15 58 10 00 01 E9 64 ...5ヤ.....X...馘 00001BE0 03 00 00 83 FE 1A 77 47 0F 84 59 03 00 00 83 FE ......wG.Ш..... 00001BF0 11 0F 85 16 01 00 00 33 F6 39 35 E8 87 00 01 74 .......3.95閾..t 00001C00 22 8B 3D 28 12 00 01 56 FF D7 56 FF D7 68 00 10 ".=(...V.ラV.ラh.. 00001C10 00 00 FF 35 50 80 00 01 FF 35 88 80 00 01 E9 7D ...5P....5..驀 00001C20 02 00 00 6A 01 E8 0F FC FF FF E9 1A 03 00 00 8B ...j...........急 00001C30 7D 14 B8 11 01 00 00 3B F0 0F 87 8B 00 00 00 3B .ク....;..㈲...; 00001C40 F0 0F 84 16 02 00 00 83 FE 1C 0F 85 BD 00 00 00 .............. 00001C50 33 F6 39 75 10 74 2F A1 EC 87 00 01 8B 0D F0 87 3.9u.t/。.... 00001C60 00 01 3B C6 75 08 3B CE 0F 84 D9 02 00 00 8B 3D ..;ニu.;ホ.....= 00001C70 14 12 00 01 51 50 68 B1 00 00 00 FF 35 D4 87 00 ....QPhア....5ヤ.. 00001C80 01 E9 56 01 00 00 8B 3D 14 12 00 01 68 F0 87 00 .餬....=....h. 00001C90 01 68 EC 87 00 01 68 B0 00 00 00 FF 35 D4 87 00 .h..hー....5ヤ.. 00001CA0 01 FF D7 A1 EC 87 00 01 8B 0D F0 87 00 01 3B C1 ..ラ。......;チ 00001CB0 75 11 89 35 EC 87 00 01 89 35 F0 87 00 01 E9 84 u..5...5..驗 00001CC0 02 00 00 51 50 E9 07 01 00 00 8B CE B8 12 01 00 ...QP.....勤ク... 00001CD0 00 2B C8 0F 84 3C 02 00 00 83 E9 04 0F 84 29 02 .+ネ..<......). 00001CE0 00 00 49 0F 84 F9 01 00 00 81 E9 1C 01 00 00 0F ..I......... 00001CF0 84 E0 01 00 00 81 E9 E6 00 00 00 0F 84 3D 01 00 .........=.. 00001D00 00 81 E9 E8 7C 00 00 0F 84 02 01 00 00 3B 35 5C .閖........;5¥ 00001D10 88 00 01 0F 85 EE 00 00 00 8B 45 14 8B 48 0C 8B .......畿.稀.驚 00001D20 C1 8B D1 F7 D0 C1 EA 02 83 E0 01 83 E2 01 F6 C1 錦チ.... 仮想化技術の概要 Chapter 2
  • 31. Fourteenforty Research Institute, Inc. 31 仮想化の必要があるリソース • 仮想化技術を利用した場合、1つのVMM(仮想マシンモニタ)、 1つ以上のVM(仮想マシン)が動作する → 従来OSが占有していたリソースを抽象化する必要がある – CPU • システムレジスタ、制御レジスタ • 例外 – メモリ • VMM、各VMごとの独立したメモリ空間 – ハードウェア • 割り込み、I/Oアドレス空間、DMAアクセス、etc.
  • 32. Fourteenforty Research Institute, Inc. 32 従来の仮想メモリの仕組み • 32bit環境では、 – 実際に搭載している物理メモリの容量に限らずOSからは 4GBの仮想メモリが見える – OS・アプリケーションは、物理アドレス(PA)を意識せず4GBの仮想アドレ ス(VA)にアクセスする – プロセッサが、物理アドレスと仮想アドレスのマッピングを自動的に行う VA PA
  • 33. Fourteenforty Research Institute, Inc. 33 仮想アドレスから物理アドレスへの変換 CR3 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 1 0 0 0 1 1 0 0 0 0 1 1 PD PT Page VA : 0x802398c3 11 PA : 0x00f928c3
  • 34. Fourteenforty Research Institute, Inc. 34 仮想化技術を利用した場合のメモリ仮想化(1/2) • 各VMが独立したアドレス空間を持つ • 各VMから見える物理アドレスを更に抽象化する必要がある – ゲスト仮想アドレス(Guest VA)、ゲスト物理アドレス(Guest PA)、 ホスト物理アドレス(Host PA) Guest VA Guest PA Host PA
  • 35. Fourteenforty Research Institute, Inc. 35 仮想化技術を利用した場合のメモリ仮想化(2/2) PAVA PT Guest VA Guest PT PT in VMM Guest PA Host PA CR3 CR3
  • 36. Fourteenforty Research Institute, Inc. 36 VMMによるアドレス変換 • 現在のプロセッサは、1段階のアドレス変換しかサポートしていない • VMMは、Guest VA -> Guest PA -> Host PAの2段階のアドレス変換を ソフトウェア的に行う必要がある → Shadow Pagaing • プロセッサによる2段階アドレス変換のサポート – Intel: EPT(Extended Page Table) – AMD: NPT(Nested Page Table)
  • 37. Fourteenforty Research Institute, Inc. 37 Shadow Paging Guest VA Guest PA Guest VMM Host PA Guest VA Shadow Page Table CR3 • ゲストOSのページフォルト例外をインターセプトし、VMMが適時Shadow Page Table(SPT)を更新
  • 38. Fourteenforty Research Institute, Inc. 38 Intel VT • Intel VTはIntelによる仮想化技術の総称 – VT-x x86/64向けの仮想化サポート – VT-d チップセットによるデバイスの仮想化サポート – VT-i Itaniumプロセッサ向けの仮想化サポート • 主な機能 – VMXモードのサポート • VMX root-operations(ring0-3) • VMX non-root-operations(ring0-3) – VMCS(Virtual Machine Control Structure) – VMX命令セットのサポート VMXON、VMXOFF、VMXLAUNCH、VMRESUME、VMCALL、etc.
  • 39. Fourteenforty Research Institute, Inc. 39 Intel VTの動作メカニズム VMM ゲスト (Current) VMCS Guest State Area Host State Area VM-execution control field VM-entry control fields VM-exit control fields VM-exit information fields GDTR IDTR ・・・ GDTR IDTR ・・・ Excpt bitmap IO bitmap ・・・ Exit Reason VM-exit VM-exit control for MSR ・・・ Event Injection ・・・ Exit Qualification ・・・ VM-entry 発生したイベントを処理
  • 40. Fourteenforty Research Institute, Inc. 40 主なVM_EXITの発生理由 • 特定の命令の実行 – CPUID, INVD, INVLPG, RDTSC, RDPMC, HLT, etc. – 全てのVMX命令 • I/O命令 – IN, OUT, etc. • 例外(#DB、#BP、#PF、etc.) • 特定のレジスタへのアクセス – コントロールレジスタ – デバッグレジスタ – MSR(モデル固有レジスタ) • etc
  • 41. Fourteenforty Research Institute, Inc. 41414141 int packet_analysis(GDDCONFIG *gddc,unsigned char *packet,unsigned long length) { struct ip *ip_header; /* IP header */ struct tcphdr *tcp_header; /* TCP header */ char *tcp_data; /* TCP data */ struct in_addr addr; /* IP address */ char sourceIP[16]; /* Source IP address */ char destIP[16]; /* Destination IP address */ unsigned short sourcePort; /* Source Port */ unsigned short destPort; /* Destination Port */ unsigned long len_data; /* Length of data part */ unsigned long iph_len; /* Length of IP header */ unsigned long tcph_len; /* Length of TCP header */ unsigned long sequence; /* Expected sequence */ int portindex; /* Indexnumber of port list */ int direction; /* Packet direction */ unsigned char logtype; /* Log type */ CONN_LIST *bcl,*ncl; /* Connection table list */ CONN_LIST *t; /* Temporary connection list */ static char datestr[512]; /* Buffer to store datetime */ time_t timeval; struct tm *timep=NULL; char *timesp=NULL; char *c; /* Get pointer of IP header and check length of IP */ if (length-SIZE_OF_ETHHDR < MINSIZE_IP+MINSIZE_TCP) return(0); ip_header = (struct ip *)(packet+SIZE_OF_ETHHDR); if (ip_header->ip_p!=IPPROTO_TCP || ip_header->ip_v!=4) return(0); iph_len = ((unsigned long)(ip_header->ip_hl))*4; if (iph_len<MINSIZE_IP) return(0); if ((unsigned long)ntohs(ip_header->ip_len) < MINSIZE_IP+MINSIZE_TCP) return(0); if ((unsigned long)ntohs(ip_header->ip_len) > length-SIZE_OF_ETHHDR){ return(0); } /* Get pointer of TCP header and check length of TCP */ tcp_header = (struct tcphdr *)((char *)ip_header+iph_len); tcph_len = ((unsigned long)(tcp_header->th_off))*4; tcp_data = (char *)tcp_header+tcph_len; if (tcph_len<MINSIZE_TCP) return(0); /* Get other parameter in TCP/IP header */ if ((long)ntohs(ip_header->ip_len)-(long)iph_len-(long)tcph_len<0) return(0); len_data = (unsigned long)ntohs(ip_header->ip_len) -iph_len-tcph_len; sourcePort = ntohs(tcp_header->th_sport); destPort = ntohs(tcp_header->th_dport); memcpy(&addr,&(ip_header->ip_src),sizeof(struct in_addr)); strcpy(sourceIP,(char *)inet_ntoa(addr)); memcpy(&addr,&(ip_header->ip_dst),sizeof(struct in_addr)); strcpy(destIP,(char *)inet_ntoa(addr)); if (!strcmp(sourceIP,destIP)) return(0); 00001B70 FF 15 F0 11 00 01 E9 CC 03 00 00 E8 7C 1C 00 00 ......鯲...閖... 00001B80 33 F6 56 E8 B1 FC FF FF 85 C0 0F 84 B7 03 00 00 3雎....┨... 00001B90 56 6A 02 FF 35 6C 80 00 01 FF 35 D0 87 00 01 FF Vj..5l....5ミ.... 00001BA0 15 CC 11 00 01 85 C0 75 1D 68 10 10 00 00 FF 35 .フ...u.h.....5 00001BB0 50 80 00 01 FF 35 44 80 00 01 FF 35 D0 87 00 01 P....5D....5ミ... 00001BC0 FF 15 04 12 00 01 FF 35 D0 87 00 01 FF 15 2C 12 .......5ミ.....,. 00001BD0 00 01 FF 35 D4 8B 00 01 FF 15 58 10 00 01 E9 64 ...5ヤ.....X...馘 00001BE0 03 00 00 83 FE 1A 77 47 0F 84 59 03 00 00 83 FE ......wG.Ш..... 00001BF0 11 0F 85 16 01 00 00 33 F6 39 35 E8 87 00 01 74 .......3.95閾..t 00001C00 22 8B 3D 28 12 00 01 56 FF D7 56 FF D7 68 00 10 ".=(...V.ラV.ラh.. 00001C10 00 00 FF 35 50 80 00 01 FF 35 88 80 00 01 E9 7D ...5P....5..驀 00001C20 02 00 00 6A 01 E8 0F FC FF FF E9 1A 03 00 00 8B ...j...........急 00001C30 7D 14 B8 11 01 00 00 3B F0 0F 87 8B 00 00 00 3B .ク....;..㈲...; 00001C40 F0 0F 84 16 02 00 00 83 FE 1C 0F 85 BD 00 00 00 .............. 00001C50 33 F6 39 75 10 74 2F A1 EC 87 00 01 8B 0D F0 87 3.9u.t/。.... 00001C60 00 01 3B C6 75 08 3B CE 0F 84 D9 02 00 00 8B 3D ..;ニu.;ホ.....= 00001C70 14 12 00 01 51 50 68 B1 00 00 00 FF 35 D4 87 00 ....QPhア....5ヤ.. 00001C80 01 E9 56 01 00 00 8B 3D 14 12 00 01 68 F0 87 00 .餬....=....h. 00001C90 01 68 EC 87 00 01 68 B0 00 00 00 FF 35 D4 87 00 .h..hー....5ヤ.. 00001CA0 01 FF D7 A1 EC 87 00 01 8B 0D F0 87 00 01 3B C1 ..ラ。......;チ 00001CB0 75 11 89 35 EC 87 00 01 89 35 F0 87 00 01 E9 84 u..5...5..驗 00001CC0 02 00 00 51 50 E9 07 01 00 00 8B CE B8 12 01 00 ...QP.....勤ク... 00001CD0 00 2B C8 0F 84 3C 02 00 00 83 E9 04 0F 84 29 02 .+ネ..<......). 00001CE0 00 00 49 0F 84 F9 01 00 00 81 E9 1C 01 00 00 0F ..I......... 00001CF0 84 E0 01 00 00 81 E9 E6 00 00 00 0F 84 3D 01 00 .........=.. 00001D00 00 81 E9 E8 7C 00 00 0F 84 02 01 00 00 3B 35 5C .閖........;5¥ 00001D10 88 00 01 0F 85 EE 00 00 00 8B 45 14 8B 48 0C 8B .......畿.稀.驚 00001D20 C1 8B D1 F7 D0 C1 EA 02 83 E0 01 83 E2 01 F6 C1 錦チ.... Viton, ハイパーバイザーIPS Chapter 3
  • 42. Fourteenforty Research Institute, Inc. 42 Viton • OSの外部で動作するIPS • Proof of Concept、Windows XP SP2、SP3で動作確認 • 主な機能 指定したメモリ領域に対するメモリパッチングを禁止 システムレジスタの変更を禁止 ゲストOSの活動をモニタリング 実装には、 BitVisorBitVisorBitVisorBitVisor を利用
  • 43. Fourteenforty Research Institute, Inc. 43 BitVisor • セキュアVMプロジェクトによって開発されている国産VMMソフ トウェア • 特徴 – Intel VTを利用した軽量な実装 – Type I型のVMM(ハイパーバイザー型) – VMMにおける32bit・64bitモード対応 – VMM、ゲストOSにおけるマルチコア・マルチプロセッサ対応 – WindowsXP/Vista、Linuxを修正無しに実行可能 – ゲストOSにおけるPAEのサポート – リアルモードエミュレーションのサポート – etc.
  • 44. Fourteenforty Research Institute, Inc. 44 Bitvisorの動作メカニズム GRUB Bitvisor BIOS Windows VMX-modeに移行し、VMMを起動 リアルモードエミュレーションを行い、 BIOS実行直後に復帰する NTLDR
  • 45. Fourteenforty Research Institute, Inc. 45 Vitonが保護するリソース • 命令 – ゲストOS上での全てのVMX命令を検出・防止 • レジスタ – IDTRレジスタの監視 – 主要なMSRの監視、変更防止 – CR0.WPビットの監視、変更防止 • メモリ – カーネルの全てコード領域 – IDT – SDT – SSDT
  • 46. Fourteenforty Research Institute, Inc. 46 メモリ保護のメカニズム Host PA Guest VA SPT • 保護対象の仮想アドレスに対応するPTEのWRビットをクリア – CR0.WPが1の場合、ring0の処理でもメモリの書き換えが不可能 Page number P W R U S P W T P C D ADOS R
  • 47. Fourteenforty Research Institute, Inc. 47 ゲストOSのメモリレイアウトの把握 0x00000000 0x80000000 0xffffffff Guest IDTR IDT ntoskrnl.exe N pages "MZ" "PE¥0¥0" .edata .text ... .edataセクションをパースすることで、 カーネルAPIのアドレスを解決可能
  • 48. Fourteenforty Research Institute, Inc. 48 ゲストOSの活動のモニタリング • Vitonを利用した場合、Viton以外からのメモリパッチングを防 止することができる • VitonからゲストOSへのパッチングは可能 – ゲストOSの任意の処理をフックし、活動を監視 1. フックコード用メモリ領域の確保 2. フックコードのセットアップ 3. 対象処理のフック
  • 49. Fourteenforty Research Institute, Inc. 49 フックコード用メモリ領域の確保(1/3) ゲスト Viton int3 push 0x1000 push 0x0 call ExAllocatePool int 3 任意の処理 mov edi, edi push ebp ... 元の処理を保存 メモリ確保用コード
  • 50. Fourteenforty Research Institute, Inc. 50 フックコード用メモリ領域の確保(2/3) ゲスト Viton int3 push 0x1000 push 0x0 call ExAllocatePool int 3 任意の処理 VM-exit 汎用レジスタの値を保存 EIPを1加算 VM-entry VM-exit ExAllocatePool APIの返り値 をeaxレジスタから取得
  • 51. Fourteenforty Research Institute, Inc. 51 フックコード用メモリ領域の確保(3/3) ゲスト Viton 任意の処理 mov edi, edi push ebp ... 元の処理を復元 保存しておいたEIP・ESPを復元VM-entry
  • 52. Fourteenforty Research Institute, Inc. 52 フックコードのセットアップ & 対象処理のフック xor eax, eax ... 対象の処理 detours_buf ゲスト Viton jmp detours_buf フックコード 上書きした元のコード jmp caller_func 対象の関数が実行されると、 1. detours_bufにジャンプ 2. フックコードが実行される 3. "jmp detours_buf"で上書きした箇所 の元の処理が実行される 4. 呼び出し元の上書きした次の処理へ ジャンプ
  • 53. Fourteenforty Research Institute, Inc. 53 フックコードによる活動の監視 • 下記のAPIをフックすることでゲストOSのリソースを把握可能 – ZwCreateProcess/ZwTerminateProcess – ZwLoadDriver/ZwUnloadDriver • OS内の情報が改竄されたとしても、Vitonが正しい情報を把 握している
  • 55. Fourteenforty Research Institute, Inc. 55 VMM dbgsh (Bitvisor's debuging function) ログバッファ ゲスト VMCALL VM-exit VM-entry 汎用レジスタ経由でログデータが送られる
  • 56. Fourteenforty Research Institute, Inc. 56 Viton vs. • Type I 「検知」および「防止」が可能 • Type II DKOM:活動のモニタリングにより「検知」可能 KOH:汎用的な対策を行うにはブレークスルーが必要 • Type III 「検知」および「防止」が可能
  • 57. Fourteenforty Research Institute, Inc. 57 まとめ • 仮想化技術を利用することで効果的なセキュリティ対策を実 現することが可能 • 完全ではない – 既存ソリューションを保護するための基盤 – 既存のソリューションとの併用
  • 58. Fourteenforty Research Institute, Inc. 5858 Thank you! Fourteenforty Research Institute, Inc. http://www.fourteenforty.jp シニアリサーチエンジニア 村上 純一 <murakami@fourteenforty.jp>