SlideShare ist ein Scribd-Unternehmen logo
1 von 27
Downloaden Sie, um offline zu lesen
セキュゕVMの構築
Intel と AMD の比較、あともうひとつ…


                   Tsukasa Ooi <li@livegrid.org>
             Livegrid Incorporated, Lead Analyst
関連する事項
• 仮想化
• ふるまいベースのマルウェゕ検出
• リバースエンジニゕリング
セキュゕVM とは?
• “セキュリテゖ拡張されたVM” のほうが正しいかも…
• セキュリテゖ拡張された機能
 –   不可視のブレークポ゗ント
 –   直接のメモリ参照/改変
 –   システム I/O の監視
 –   命令/メモリトレース
• これらはセキュリテゖ目的に有用である!
 – メモリ参照による rootkit の検出
 – システム I/O の監視によるマルウェゕの検出
どう仮想マシンを “保護” するか?
• (CPU の仮想化支援機能がある場合)
  おおまかに言えば 2 つの方法がある。
• デバッグレジスタを使う (DR0~DR7)
 – DR7.GD bit : DRx レジスタにゕクセスできなくなる
 – DRx ゕクセス時の VM exit : 読み書きを監視できる
• ページテーブル改変を使う
 – PTE.R/W bit : ページ書き込みを監視できる
 – PTE.P bit : ページへの全てのゕクセスを監視できる
 – PTE.NX bit : ページの実行ゕクセスを監視できる
ブレークポ゗ントの設定 (Debug Registers)
• VM exit を次のゕクセス時に設定する:
  – DRx へのゕクセス
  – #DB (デバッグ) 例外の発生
• ゲストの DR7.GD bit をオンにする
• ゲストのデバッグレジスタを用いてBPを設定
  – カーネル関数やシステムコールに設定するのが有用
• ブレークポ゗ントがヒットした場合…
  – 追加の処理を行う
ブレークポ゗ントの設定 (Page Table)
• VM exit を次のゕクセス時に設定する:
  – #PF (ページフォルト) 例外
• ページの PTE.P bit か PTE.NX bit を 0 にする
  – ゲストのページテーブルを変更せず、Shadowを変更する
• ページフォルトが起こった場合:
  – ブレークポ゗ントがヒットしたかチェックする
    (false-positive が考えられるため)
  – ブレークポ゗ントがヒットしているなら、追加の処理を行う
比較 (Debug Registers / Page Table)
• デバッグレジスタの使用はシンプルである
  – 実装も簡単。
• ページテーブル改変は5つ以上のBPをセットできる
  – デバッグレジスタを使用するだけでは 4 つに制限される
  – もしゲストがデバッグレジスタを使用するなら、
    その動作をページテーブル改変でエミュレート
    しなければならない
• デバッグレジスタの使用は高速である
  – オーバーヘッド低, 別箇所における false-positive 無し
• ページテーブル改変は柔軟である
  – 使い方次第で何でも監視できる
CPU による仮想化支援機能の考察
• いくつかの重要な命令をフックできない
 – sysenter, sysexit など
• バ゗ナリ変換と比べると制限された監視手法
AMD-V/Intel VT-x の比較
• AMD-V だけが IRET 命令をフックできる
  – ゲスト OS は EFLAGS.RF フラグをオンにして
    IRET 命令を実行することで、ホストのBPを回避できる
    (EFLAGS.RF : 次の 1 命令だけ BP のヒットを抑制する)
• デバッグレジスタを使うなら、AMD が better
  – ページテーブル改変を使う場合、何の機能差もない
  – Intel でも、システムコールを監視するような場合は
    十分 (IRET 命令で呼ばれることがほぼ無い)
Second Level Address Translation (SLAT)
• 仮想化における新しい機能
• ゕドレス変換において 2 つのページテーブルを使用
  – Guest Logical Addr → Guest Physical Addr
  – Guest Physical Addr → Host Physical Addr
• Intel と AMD の双方が SLAT 拡張を実装している
  – Intel : Extended Page Tables (EPT)
  – AMD : Nested Paging / Rapid virtualization index (RVI)
• しかしこれらには問題がある…
SLAT に関する考察
• さらに限定される監視手法
 – ゲスト OS の “本当の” ページテーブルが可視である
 – 2 つのページテーブルの参照は、(一部の)
   セキュリテゖ目的においては悪いことである
 – 最悪の場合、SLAT 機能を有効にできない!
• デバッグレジスタはまだ使用できる
SLAT の機能差については?
• Intel EPT においてはページを “実行専用” にできる
 – CPU によってサポートされていれば…
   • 今のところ、Intel EPT をサポートしている全ての CPU で
     この “実行専用” ページが使用可能
 – ステルス性は十分ではないが、ほぼ不可視の
   コード領域を作り、そこを実行できる
 – ただしゲスト OS もその部分を jump 系命令で
   実行可能であることに気をつけよ
• ほとんど同じだが、敢えて挙げるなら Intel
THANK YOU?
あともう 1 つ

X86_64 ゕーキテクチャにおける
X86 CPU の完全仮想化
x86_64 での x86 エミュレーション
• もちろんバ゗ナリ変換を使う…
• これらは可能な上に、ほとんど実用的!
なぜ “x86 on x86_64”?
• ゕーキテクチャがとても似ている
  – 通常の x86 命令なら、x86_64 でも最大 2 命令で
    エミュレートすることができる
• 追加メモリが存在する
  – x86 をエミュレートするには 44GB のゕドレス空間が必要
    だが、x86_64 においては全く問題のない量である
• 追加レジスタがある!
  – 追加された 8 つのレジスタを、コンテキストなどを
    保存するために使用することができる!
どう x86 を “emulate” する? (1)
PUSH EBP

MOV   EBP, ESP
MOV   EAX, [EBP+8]
MOV   EDX, [EBP+12]
MOV   EAX, [EAX*4+EDX]

POP   EBP

RET
どう x86 を “emulate” する? (1)
PUSH EBP                 MOV [RCX+RBP-4], EBX
                         LEA EBP, [EBP-4]
MOV   EBP, ESP           MOV EBX, EBP
MOV   EAX, [EBP+8]       MOV EAX, [RCX+RBX+8]
MOV   EDX, [EBP+12]      MOV EDX, [RCX+RBX+12]
MOV   EAX, [EAX*4+EDX]   LEA R14D, [EAX*4+EDX]
                         MOV EAX, [RCX+R14]
POP   EBP                MOV EBX, [RCX+RBP]
                         LEA EBP, [EBP+4]
RET                      (Return Intrinsics)
どう x86 を “emulate” する? (2)
• レジスタの再割り当て
  – ESP → EBP/RBP
    (x86_64 ではスタックが 8 バ゗ト単位である)
  – EBP → EBX/RBX (スタック参照のロスを減らす)
• RCX : 32 ビット仮想ゕドレス空間のベース
  – 全ての仮想ゕドレス!
• R14/R14D : 一時レジスタ (例ではゕドレス計算に使用)
• R15 : エミュレーションシステムで予約
バ゗ナリ変換を使って…
• x86 のメモリ/命令完全トレース
 – 全ての実行パス
 – メモリ read/write
 – I/O 処理
• オーバーヘッドは高いが、やる価値はある
何のために?
• “干渉” を検出する
 – 脆弱性の利用
 – フック
 – (テーブルやメモリ構造体の) 改変
• リバースエンジニゕリング
 – “全て” をトレースできる!
   • ゕンチリバースエンジニゕリングさえも検出可能
 – プロトコル解析 (ネットワーク, フゔ゗ル…)
 – ゕルゴリズム解析および検索
   • ゕルゴリズムの検索は Anti-DRM に有用かも
どう x86 をトレースつきで “emulate” する? (1)
PUSH   EBP                MOV           [RCX+RBP-4], EBX
                          LEA           EBP, [EBP-4]
MOV    EBP, ESP           MOV           EBX, EBP
MOV    EAX, [EBP+8]       MOV           EAX, [RCX+RBX+8]
                          MOV           [R13], EAX
                          LEA           R13, [R13+4]
MOV    EDX, [EBP+12]      MOV           EDX, [RCX+RBX+12]
                          MOV           [R13], EDX
                          LEA           R13, [R13+4]
MOV    EAX, [EAX*4+EDX]   LEA           R14D, [EAX*4+EDX]
                          MOV           EAX, [RCX+R14]
                          MOV           [R13], EAX
                          LEA           R13, [R13+4]
POP    EBP                MOV           EBX, [RCX+RBP]
                          MOV           [R13], EBX
                          LEA           R13, [R13+4]
                          LEA           EBP, [EBP+4]
RET                       (Return Intrinsics)
どう x86 をトレースつきで “emulate” する? (2)
• R13 : トレースを出力するゕドレス
  – メモリ読み取りの結果
  – 分岐先の命令 (EIP)
  – これだけをトレースすることで、全てが判明する!
• 通常の x86 命令を実行するために、
  x86_64 においては 1~5 命令を実行する
  – バ゗ナリ変換プログラムが最適化されれば、
    もっと効率が上がる!
実用的なのか?
• そこそこ。
 – デゖスク書き込みのストール抜きでのパフォーマンス指標:
       Pentium 4 1.5GHz
   ≧   エミュレーション中の Core i7 3.0GHz
   >   Pentium III 1.0GHz
• システムエミュレーションには十分ではないが、
  ユーザモードエミュレーションには十分である!
• 他のどのトレース手法よりも高速
  (トレース機能つきのデバッガなど…)
制約 / 考察
• x86 セグメンテーションとゕドレッシング
 – x86_64 は “フラットメモリモデル” に制約されている
 – セグメントのリミットを模倣するには多大な計算量が必要
• 超高速なデゖスクが必要
 – 幸いにも書き込みは “シーケンシャル” なので、
   HDD を使った RAID-0 が有用かも
• 大量のリソースを必要とする
 – 特に主記憶容量について顕著
いつ使用可能になる?
• 今のところ、実験的なプログラムが動作するのみ。
 – 実用的プログラムをエミュレートするには
   至っていない
• 2010 年前半までには公開できれば…
何か質問は?

THANK YOU.

Weitere ähnliche Inhalte

Was ist angesagt?

BLS署名の実装とその応用
BLS署名の実装とその応用BLS署名の実装とその応用
BLS署名の実装とその応用MITSUNARI Shigeo
 
clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)
clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)
clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)洋史 東平
 
Intel TSX HLE を触ってみた x86opti
Intel TSX HLE を触ってみた x86optiIntel TSX HLE を触ってみた x86opti
Intel TSX HLE を触ってみた x86optiTakashi Hoshino
 
Redisととあるシステム
RedisととあるシステムRedisととあるシステム
RedisととあるシステムTakehiro Torigaki
 
あるコンテキストスイッチの話
あるコンテキストスイッチの話あるコンテキストスイッチの話
あるコンテキストスイッチの話nullnilaki
 
Winodws7のruby2でrails4を遊ぶ環境を作るのだ。
Winodws7のruby2でrails4を遊ぶ環境を作るのだ。Winodws7のruby2でrails4を遊ぶ環境を作るのだ。
Winodws7のruby2でrails4を遊ぶ環境を作るのだ。Yukio Saito
 
5ステップで始めるPostgreSQLレプリケーション@hbstudy#13
5ステップで始めるPostgreSQLレプリケーション@hbstudy#135ステップで始めるPostgreSQLレプリケーション@hbstudy#13
5ステップで始めるPostgreSQLレプリケーション@hbstudy#13Uptime Technologies LLC (JP)
 
【学習メモ#4th】12ステップで作る組込みOS自作入門
【学習メモ#4th】12ステップで作る組込みOS自作入門【学習メモ#4th】12ステップで作る組込みOS自作入門
【学習メモ#4th】12ステップで作る組込みOS自作入門sandai
 
続・SECDマシン
続・SECDマシン続・SECDマシン
続・SECDマシンt-sin
 
PSoC4 ことはじめ -BLE版-
PSoC4 ことはじめ -BLE版-PSoC4 ことはじめ -BLE版-
PSoC4 ことはじめ -BLE版-Tetsuya Noguchi
 
PostgreSQLのパラレル化に向けた取り組み@第30回(仮名)PostgreSQL勉強会
PostgreSQLのパラレル化に向けた取り組み@第30回(仮名)PostgreSQL勉強会PostgreSQLのパラレル化に向けた取り組み@第30回(仮名)PostgreSQL勉強会
PostgreSQLのパラレル化に向けた取り組み@第30回(仮名)PostgreSQL勉強会Shigeru Hanada
 
【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門sandai
 
Lagopus performance
Lagopus performanceLagopus performance
Lagopus performanceMasaru Oki
 
Cakephp勉強会@tokyo #4
Cakephp勉強会@tokyo #4Cakephp勉強会@tokyo #4
Cakephp勉強会@tokyo #4ichikaway
 
リアルタイムOSの必要性とTOPPERS/SSPの紹介
リアルタイムOSの必要性とTOPPERS/SSPの紹介リアルタイムOSの必要性とTOPPERS/SSPの紹介
リアルタイムOSの必要性とTOPPERS/SSPの紹介NSaitoNmiri
 

Was ist angesagt? (20)

BLS署名の実装とその応用
BLS署名の実装とその応用BLS署名の実装とその応用
BLS署名の実装とその応用
 
clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)
clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)
clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)
 
Intel TSX HLE を触ってみた x86opti
Intel TSX HLE を触ってみた x86optiIntel TSX HLE を触ってみた x86opti
Intel TSX HLE を触ってみた x86opti
 
Redisととあるシステム
RedisととあるシステムRedisととあるシステム
Redisととあるシステム
 
あるコンテキストスイッチの話
あるコンテキストスイッチの話あるコンテキストスイッチの話
あるコンテキストスイッチの話
 
Winodws7のruby2でrails4を遊ぶ環境を作るのだ。
Winodws7のruby2でrails4を遊ぶ環境を作るのだ。Winodws7のruby2でrails4を遊ぶ環境を作るのだ。
Winodws7のruby2でrails4を遊ぶ環境を作るのだ。
 
Redis速習会@Wantedly
Redis速習会@WantedlyRedis速習会@Wantedly
Redis速習会@Wantedly
 
5ステップで始めるPostgreSQLレプリケーション@hbstudy#13
5ステップで始めるPostgreSQLレプリケーション@hbstudy#135ステップで始めるPostgreSQLレプリケーション@hbstudy#13
5ステップで始めるPostgreSQLレプリケーション@hbstudy#13
 
【学習メモ#4th】12ステップで作る組込みOS自作入門
【学習メモ#4th】12ステップで作る組込みOS自作入門【学習メモ#4th】12ステップで作る組込みOS自作入門
【学習メモ#4th】12ステップで作る組込みOS自作入門
 
続・SECDマシン
続・SECDマシン続・SECDマシン
続・SECDマシン
 
PSoC4 ことはじめ -BLE版-
PSoC4 ことはじめ -BLE版-PSoC4 ことはじめ -BLE版-
PSoC4 ことはじめ -BLE版-
 
PostgreSQLのパラレル化に向けた取り組み@第30回(仮名)PostgreSQL勉強会
PostgreSQLのパラレル化に向けた取り組み@第30回(仮名)PostgreSQL勉強会PostgreSQLのパラレル化に向けた取り組み@第30回(仮名)PostgreSQL勉強会
PostgreSQLのパラレル化に向けた取り組み@第30回(仮名)PostgreSQL勉強会
 
Solaris Container
Solaris ContainerSolaris Container
Solaris Container
 
【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門
 
Lagopus performance
Lagopus performanceLagopus performance
Lagopus performance
 
Cakephp勉強会@tokyo #4
Cakephp勉強会@tokyo #4Cakephp勉強会@tokyo #4
Cakephp勉強会@tokyo #4
 
リアルタイムOSの必要性とTOPPERS/SSPの紹介
リアルタイムOSの必要性とTOPPERS/SSPの紹介リアルタイムOSの必要性とTOPPERS/SSPの紹介
リアルタイムOSの必要性とTOPPERS/SSPの紹介
 
about Tcpreplay
about Tcpreplayabout Tcpreplay
about Tcpreplay
 
Postgres Toolkitのご紹介
Postgres Toolkitのご紹介Postgres Toolkitのご紹介
Postgres Toolkitのご紹介
 
PostgreSQL安定運用のコツ2009 @hbstudy#5
PostgreSQL安定運用のコツ2009 @hbstudy#5PostgreSQL安定運用のコツ2009 @hbstudy#5
PostgreSQL安定運用のコツ2009 @hbstudy#5
 

Andere mochten auch

Windows をより安全にする SafeSEH on MinGW
Windows をより安全にする SafeSEH on MinGWWindows をより安全にする SafeSEH on MinGW
Windows をより安全にする SafeSEH on MinGWTsukasa Oi
 
さらば、Stagefright 脆弱性
さらば、Stagefright 脆弱性さらば、Stagefright 脆弱性
さらば、Stagefright 脆弱性Tsukasa Oi
 
ステルスルートキット : 悪いヤツはどうライブメモリフォレンジックをすり抜ける? - PacSec 2009
ステルスルートキット : 悪いヤツはどうライブメモリフォレンジックをすり抜ける? - PacSec 2009ステルスルートキット : 悪いヤツはどうライブメモリフォレンジックをすり抜ける? - PacSec 2009
ステルスルートキット : 悪いヤツはどうライブメモリフォレンジックをすり抜ける? - PacSec 2009Tsukasa Oi
 
システムレジスタの不足と2つのシンプルなアンチフォレンジック攻撃 - AVTokyo 2009
システムレジスタの不足と2つのシンプルなアンチフォレンジック攻撃 - AVTokyo 2009システムレジスタの不足と2つのシンプルなアンチフォレンジック攻撃 - AVTokyo 2009
システムレジスタの不足と2つのシンプルなアンチフォレンジック攻撃 - AVTokyo 2009Tsukasa Oi
 
Donuts プロコンチャレンジ2014
Donuts プロコンチャレンジ2014Donuts プロコンチャレンジ2014
Donuts プロコンチャレンジ2014kuno4n
 
リバースエンジニアリングのための新しいトレース手法 - PacSec 2010
リバースエンジニアリングのための新しいトレース手法 - PacSec 2010リバースエンジニアリングのための新しいトレース手法 - PacSec 2010
リバースエンジニアリングのための新しいトレース手法 - PacSec 2010Tsukasa Oi
 
Linuxセキュリティ強化エッセンシャル
Linuxセキュリティ強化エッセンシャルLinuxセキュリティ強化エッセンシャル
Linuxセキュリティ強化エッセンシャルToshiharu Harada, Ph.D
 
【Twilio勉強会 with Bluemix in 福岡】 電話のボタン応答無しで!?音声認識による自動回答サービスを作ろう!
【Twilio勉強会 with Bluemix in 福岡】 電話のボタン応答無しで!?音声認識による自動回答サービスを作ろう!【Twilio勉強会 with Bluemix in 福岡】 電話のボタン応答無しで!?音声認識による自動回答サービスを作ろう!
【Twilio勉強会 with Bluemix in 福岡】 電話のボタン応答無しで!?音声認識による自動回答サービスを作ろう!Masaya Fujita
 
スキマトークご利用ガイド
スキマトークご利用ガイドスキマトークご利用ガイド
スキマトークご利用ガイドSkimaTalk
 
オブジェクト指向っぽい話
オブジェクト指向っぽい話オブジェクト指向っぽい話
オブジェクト指向っぽい話Tomohiro Shinden
 
フリーソフトではじめるChIP-seq解析_第40回勉強会資料
フリーソフトではじめるChIP-seq解析_第40回勉強会資料フリーソフトではじめるChIP-seq解析_第40回勉強会資料
フリーソフトではじめるChIP-seq解析_第40回勉強会資料Amelieff
 
Ipsj77フォレンジック研究動向
Ipsj77フォレンジック研究動向Ipsj77フォレンジック研究動向
Ipsj77フォレンジック研究動向UEHARA, Tetsutaro
 
音声認識の基礎
音声認識の基礎音声認識の基礎
音声認識の基礎Akinori Ito
 
ドコモの取り組みを事例としたクラウドとAi
ドコモの取り組みを事例としたクラウドとAi ドコモの取り組みを事例としたクラウドとAi
ドコモの取り組みを事例としたクラウドとAi Osaka University
 

Andere mochten auch (15)

Windows をより安全にする SafeSEH on MinGW
Windows をより安全にする SafeSEH on MinGWWindows をより安全にする SafeSEH on MinGW
Windows をより安全にする SafeSEH on MinGW
 
さらば、Stagefright 脆弱性
さらば、Stagefright 脆弱性さらば、Stagefright 脆弱性
さらば、Stagefright 脆弱性
 
ステルスルートキット : 悪いヤツはどうライブメモリフォレンジックをすり抜ける? - PacSec 2009
ステルスルートキット : 悪いヤツはどうライブメモリフォレンジックをすり抜ける? - PacSec 2009ステルスルートキット : 悪いヤツはどうライブメモリフォレンジックをすり抜ける? - PacSec 2009
ステルスルートキット : 悪いヤツはどうライブメモリフォレンジックをすり抜ける? - PacSec 2009
 
システムレジスタの不足と2つのシンプルなアンチフォレンジック攻撃 - AVTokyo 2009
システムレジスタの不足と2つのシンプルなアンチフォレンジック攻撃 - AVTokyo 2009システムレジスタの不足と2つのシンプルなアンチフォレンジック攻撃 - AVTokyo 2009
システムレジスタの不足と2つのシンプルなアンチフォレンジック攻撃 - AVTokyo 2009
 
Hmcomm Inc,
Hmcomm Inc,Hmcomm Inc,
Hmcomm Inc,
 
Donuts プロコンチャレンジ2014
Donuts プロコンチャレンジ2014Donuts プロコンチャレンジ2014
Donuts プロコンチャレンジ2014
 
リバースエンジニアリングのための新しいトレース手法 - PacSec 2010
リバースエンジニアリングのための新しいトレース手法 - PacSec 2010リバースエンジニアリングのための新しいトレース手法 - PacSec 2010
リバースエンジニアリングのための新しいトレース手法 - PacSec 2010
 
Linuxセキュリティ強化エッセンシャル
Linuxセキュリティ強化エッセンシャルLinuxセキュリティ強化エッセンシャル
Linuxセキュリティ強化エッセンシャル
 
【Twilio勉強会 with Bluemix in 福岡】 電話のボタン応答無しで!?音声認識による自動回答サービスを作ろう!
【Twilio勉強会 with Bluemix in 福岡】 電話のボタン応答無しで!?音声認識による自動回答サービスを作ろう!【Twilio勉強会 with Bluemix in 福岡】 電話のボタン応答無しで!?音声認識による自動回答サービスを作ろう!
【Twilio勉強会 with Bluemix in 福岡】 電話のボタン応答無しで!?音声認識による自動回答サービスを作ろう!
 
スキマトークご利用ガイド
スキマトークご利用ガイドスキマトークご利用ガイド
スキマトークご利用ガイド
 
オブジェクト指向っぽい話
オブジェクト指向っぽい話オブジェクト指向っぽい話
オブジェクト指向っぽい話
 
フリーソフトではじめるChIP-seq解析_第40回勉強会資料
フリーソフトではじめるChIP-seq解析_第40回勉強会資料フリーソフトではじめるChIP-seq解析_第40回勉強会資料
フリーソフトではじめるChIP-seq解析_第40回勉強会資料
 
Ipsj77フォレンジック研究動向
Ipsj77フォレンジック研究動向Ipsj77フォレンジック研究動向
Ipsj77フォレンジック研究動向
 
音声認識の基礎
音声認識の基礎音声認識の基礎
音声認識の基礎
 
ドコモの取り組みを事例としたクラウドとAi
ドコモの取り組みを事例としたクラウドとAi ドコモの取り組みを事例としたクラウドとAi
ドコモの取り組みを事例としたクラウドとAi
 

Ähnlich wie セキュアVMの構築 (IntelとAMDの比較、あともうひとつ...) - AVTokyo 2009

nftables: the Next Generation Firewall in Linux
nftables: the Next Generation Firewall in Linuxnftables: the Next Generation Firewall in Linux
nftables: the Next Generation Firewall in LinuxTomofumi Hayashi
 
Riak / Riak-CS(Enterprise版) ベンチマークしました
 Riak / Riak-CS(Enterprise版) ベンチマークしました Riak / Riak-CS(Enterprise版) ベンチマークしました
Riak / Riak-CS(Enterprise版) ベンチマークしましたTakashi Sogabe
 
ゆるふわLinux-HA 〜PostgreSQL編〜
ゆるふわLinux-HA 〜PostgreSQL編〜ゆるふわLinux-HA 〜PostgreSQL編〜
ゆるふわLinux-HA 〜PostgreSQL編〜Taro Matsuzawa
 
C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1信之 岩永
 
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)Takeshi Yamamuro
 
PostgreSQL 9.6 新機能紹介
PostgreSQL 9.6 新機能紹介PostgreSQL 9.6 新機能紹介
PostgreSQL 9.6 新機能紹介Masahiko Sawada
 
[C31]世界最速カラムナーDBは本物だ! by Daisuke Hirama
[C31]世界最速カラムナーDBは本物だ! by Daisuke Hirama[C31]世界最速カラムナーDBは本物だ! by Daisuke Hirama
[C31]世界最速カラムナーDBは本物だ! by Daisuke HiramaInsight Technology, Inc.
 
もしも… Javaでヘテロジニアスコアが使えたら…
もしも… Javaでヘテロジニアスコアが使えたら…もしも… Javaでヘテロジニアスコアが使えたら…
もしも… Javaでヘテロジニアスコアが使えたら…Yasumasa Suenaga
 
Gpgpu tomoaki-fp16
Gpgpu tomoaki-fp16Gpgpu tomoaki-fp16
Gpgpu tomoaki-fp16tomoaki0705
 
LTO/オートローダー/仮想テープライブラリの基礎知識
LTO/オートローダー/仮想テープライブラリの基礎知識LTO/オートローダー/仮想テープライブラリの基礎知識
LTO/オートローダー/仮想テープライブラリの基礎知識MKT International Inc.
 
TripleOの光と闇
TripleOの光と闇TripleOの光と闇
TripleOの光と闇Manabu Ori
 
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC EnterpriseYusukeKuramata
 
2011/06/11 #sfstudy ECCの遊び方。
2011/06/11 #sfstudy ECCの遊び方。2011/06/11 #sfstudy ECCの遊び方。
2011/06/11 #sfstudy ECCの遊び方。Minato Kirino
 

Ähnlich wie セキュアVMの構築 (IntelとAMDの比較、あともうひとつ...) - AVTokyo 2009 (20)

PFI Seminar 2010/02/18
PFI Seminar 2010/02/18PFI Seminar 2010/02/18
PFI Seminar 2010/02/18
 
V6 unix in okinawa
V6 unix in okinawaV6 unix in okinawa
V6 unix in okinawa
 
nftables: the Next Generation Firewall in Linux
nftables: the Next Generation Firewall in Linuxnftables: the Next Generation Firewall in Linux
nftables: the Next Generation Firewall in Linux
 
InfiniBand on Debian
InfiniBand on DebianInfiniBand on Debian
InfiniBand on Debian
 
Riak / Riak-CS(Enterprise版) ベンチマークしました
 Riak / Riak-CS(Enterprise版) ベンチマークしました Riak / Riak-CS(Enterprise版) ベンチマークしました
Riak / Riak-CS(Enterprise版) ベンチマークしました
 
ゆるふわLinux-HA 〜PostgreSQL編〜
ゆるふわLinux-HA 〜PostgreSQL編〜ゆるふわLinux-HA 〜PostgreSQL編〜
ゆるふわLinux-HA 〜PostgreSQL編〜
 
C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1
 
d-kami x86-1
d-kami x86-1d-kami x86-1
d-kami x86-1
 
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
 
Tokyo.R#16 wdkz
Tokyo.R#16 wdkzTokyo.R#16 wdkz
Tokyo.R#16 wdkz
 
osoljp 2011.08
osoljp 2011.08osoljp 2011.08
osoljp 2011.08
 
PostgreSQL 9.6 新機能紹介
PostgreSQL 9.6 新機能紹介PostgreSQL 9.6 新機能紹介
PostgreSQL 9.6 新機能紹介
 
[C31]世界最速カラムナーDBは本物だ! by Daisuke Hirama
[C31]世界最速カラムナーDBは本物だ! by Daisuke Hirama[C31]世界最速カラムナーDBは本物だ! by Daisuke Hirama
[C31]世界最速カラムナーDBは本物だ! by Daisuke Hirama
 
もしも… Javaでヘテロジニアスコアが使えたら…
もしも… Javaでヘテロジニアスコアが使えたら…もしも… Javaでヘテロジニアスコアが使えたら…
もしも… Javaでヘテロジニアスコアが使えたら…
 
Gpgpu tomoaki-fp16
Gpgpu tomoaki-fp16Gpgpu tomoaki-fp16
Gpgpu tomoaki-fp16
 
LTO/オートローダー/仮想テープライブラリの基礎知識
LTO/オートローダー/仮想テープライブラリの基礎知識LTO/オートローダー/仮想テープライブラリの基礎知識
LTO/オートローダー/仮想テープライブラリの基礎知識
 
TripleOの光と闇
TripleOの光と闇TripleOの光と闇
TripleOの光と闇
 
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
 
d-kami x86-2
d-kami x86-2d-kami x86-2
d-kami x86-2
 
2011/06/11 #sfstudy ECCの遊び方。
2011/06/11 #sfstudy ECCの遊び方。2011/06/11 #sfstudy ECCの遊び方。
2011/06/11 #sfstudy ECCの遊び方。
 

Kürzlich hochgeladen

「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-LoopへTetsuya Nihonmatsu
 
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)ssuser539845
 
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法ssuser370dd7
 
20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdfAyachika Kitazaki
 
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~arts yokohama
 
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor 2024 01 Virtual_Counselor
2024 01 Virtual_Counselor arts yokohama
 
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見Shumpei Kishi
 
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfTaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfMatsushita Laboratory
 

Kürzlich hochgeladen (11)

「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
 
2024 04 minnanoito
2024 04 minnanoito2024 04 minnanoito
2024 04 minnanoito
 
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
 
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
 
20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf
 
What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?
 
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
 
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor 2024 01 Virtual_Counselor
2024 01 Virtual_Counselor
 
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
 
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfTaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
 
2024 03 CTEA
2024 03 CTEA2024 03 CTEA
2024 03 CTEA
 

セキュアVMの構築 (IntelとAMDの比較、あともうひとつ...) - AVTokyo 2009

  • 1. セキュゕVMの構築 Intel と AMD の比較、あともうひとつ… Tsukasa Ooi <li@livegrid.org> Livegrid Incorporated, Lead Analyst
  • 3. セキュゕVM とは? • “セキュリテゖ拡張されたVM” のほうが正しいかも… • セキュリテゖ拡張された機能 – 不可視のブレークポ゗ント – 直接のメモリ参照/改変 – システム I/O の監視 – 命令/メモリトレース • これらはセキュリテゖ目的に有用である! – メモリ参照による rootkit の検出 – システム I/O の監視によるマルウェゕの検出
  • 4. どう仮想マシンを “保護” するか? • (CPU の仮想化支援機能がある場合) おおまかに言えば 2 つの方法がある。 • デバッグレジスタを使う (DR0~DR7) – DR7.GD bit : DRx レジスタにゕクセスできなくなる – DRx ゕクセス時の VM exit : 読み書きを監視できる • ページテーブル改変を使う – PTE.R/W bit : ページ書き込みを監視できる – PTE.P bit : ページへの全てのゕクセスを監視できる – PTE.NX bit : ページの実行ゕクセスを監視できる
  • 5. ブレークポ゗ントの設定 (Debug Registers) • VM exit を次のゕクセス時に設定する: – DRx へのゕクセス – #DB (デバッグ) 例外の発生 • ゲストの DR7.GD bit をオンにする • ゲストのデバッグレジスタを用いてBPを設定 – カーネル関数やシステムコールに設定するのが有用 • ブレークポ゗ントがヒットした場合… – 追加の処理を行う
  • 6. ブレークポ゗ントの設定 (Page Table) • VM exit を次のゕクセス時に設定する: – #PF (ページフォルト) 例外 • ページの PTE.P bit か PTE.NX bit を 0 にする – ゲストのページテーブルを変更せず、Shadowを変更する • ページフォルトが起こった場合: – ブレークポ゗ントがヒットしたかチェックする (false-positive が考えられるため) – ブレークポ゗ントがヒットしているなら、追加の処理を行う
  • 7. 比較 (Debug Registers / Page Table) • デバッグレジスタの使用はシンプルである – 実装も簡単。 • ページテーブル改変は5つ以上のBPをセットできる – デバッグレジスタを使用するだけでは 4 つに制限される – もしゲストがデバッグレジスタを使用するなら、 その動作をページテーブル改変でエミュレート しなければならない • デバッグレジスタの使用は高速である – オーバーヘッド低, 別箇所における false-positive 無し • ページテーブル改変は柔軟である – 使い方次第で何でも監視できる
  • 8. CPU による仮想化支援機能の考察 • いくつかの重要な命令をフックできない – sysenter, sysexit など • バ゗ナリ変換と比べると制限された監視手法
  • 9. AMD-V/Intel VT-x の比較 • AMD-V だけが IRET 命令をフックできる – ゲスト OS は EFLAGS.RF フラグをオンにして IRET 命令を実行することで、ホストのBPを回避できる (EFLAGS.RF : 次の 1 命令だけ BP のヒットを抑制する) • デバッグレジスタを使うなら、AMD が better – ページテーブル改変を使う場合、何の機能差もない – Intel でも、システムコールを監視するような場合は 十分 (IRET 命令で呼ばれることがほぼ無い)
  • 10. Second Level Address Translation (SLAT) • 仮想化における新しい機能 • ゕドレス変換において 2 つのページテーブルを使用 – Guest Logical Addr → Guest Physical Addr – Guest Physical Addr → Host Physical Addr • Intel と AMD の双方が SLAT 拡張を実装している – Intel : Extended Page Tables (EPT) – AMD : Nested Paging / Rapid virtualization index (RVI) • しかしこれらには問題がある…
  • 11. SLAT に関する考察 • さらに限定される監視手法 – ゲスト OS の “本当の” ページテーブルが可視である – 2 つのページテーブルの参照は、(一部の) セキュリテゖ目的においては悪いことである – 最悪の場合、SLAT 機能を有効にできない! • デバッグレジスタはまだ使用できる
  • 12. SLAT の機能差については? • Intel EPT においてはページを “実行専用” にできる – CPU によってサポートされていれば… • 今のところ、Intel EPT をサポートしている全ての CPU で この “実行専用” ページが使用可能 – ステルス性は十分ではないが、ほぼ不可視の コード領域を作り、そこを実行できる – ただしゲスト OS もその部分を jump 系命令で 実行可能であることに気をつけよ • ほとんど同じだが、敢えて挙げるなら Intel
  • 14. あともう 1 つ X86_64 ゕーキテクチャにおける X86 CPU の完全仮想化
  • 15. x86_64 での x86 エミュレーション • もちろんバ゗ナリ変換を使う… • これらは可能な上に、ほとんど実用的!
  • 16. なぜ “x86 on x86_64”? • ゕーキテクチャがとても似ている – 通常の x86 命令なら、x86_64 でも最大 2 命令で エミュレートすることができる • 追加メモリが存在する – x86 をエミュレートするには 44GB のゕドレス空間が必要 だが、x86_64 においては全く問題のない量である • 追加レジスタがある! – 追加された 8 つのレジスタを、コンテキストなどを 保存するために使用することができる!
  • 17. どう x86 を “emulate” する? (1) PUSH EBP MOV EBP, ESP MOV EAX, [EBP+8] MOV EDX, [EBP+12] MOV EAX, [EAX*4+EDX] POP EBP RET
  • 18. どう x86 を “emulate” する? (1) PUSH EBP MOV [RCX+RBP-4], EBX LEA EBP, [EBP-4] MOV EBP, ESP MOV EBX, EBP MOV EAX, [EBP+8] MOV EAX, [RCX+RBX+8] MOV EDX, [EBP+12] MOV EDX, [RCX+RBX+12] MOV EAX, [EAX*4+EDX] LEA R14D, [EAX*4+EDX] MOV EAX, [RCX+R14] POP EBP MOV EBX, [RCX+RBP] LEA EBP, [EBP+4] RET (Return Intrinsics)
  • 19. どう x86 を “emulate” する? (2) • レジスタの再割り当て – ESP → EBP/RBP (x86_64 ではスタックが 8 バ゗ト単位である) – EBP → EBX/RBX (スタック参照のロスを減らす) • RCX : 32 ビット仮想ゕドレス空間のベース – 全ての仮想ゕドレス! • R14/R14D : 一時レジスタ (例ではゕドレス計算に使用) • R15 : エミュレーションシステムで予約
  • 20. バ゗ナリ変換を使って… • x86 のメモリ/命令完全トレース – 全ての実行パス – メモリ read/write – I/O 処理 • オーバーヘッドは高いが、やる価値はある
  • 21. 何のために? • “干渉” を検出する – 脆弱性の利用 – フック – (テーブルやメモリ構造体の) 改変 • リバースエンジニゕリング – “全て” をトレースできる! • ゕンチリバースエンジニゕリングさえも検出可能 – プロトコル解析 (ネットワーク, フゔ゗ル…) – ゕルゴリズム解析および検索 • ゕルゴリズムの検索は Anti-DRM に有用かも
  • 22. どう x86 をトレースつきで “emulate” する? (1) PUSH EBP MOV [RCX+RBP-4], EBX LEA EBP, [EBP-4] MOV EBP, ESP MOV EBX, EBP MOV EAX, [EBP+8] MOV EAX, [RCX+RBX+8] MOV [R13], EAX LEA R13, [R13+4] MOV EDX, [EBP+12] MOV EDX, [RCX+RBX+12] MOV [R13], EDX LEA R13, [R13+4] MOV EAX, [EAX*4+EDX] LEA R14D, [EAX*4+EDX] MOV EAX, [RCX+R14] MOV [R13], EAX LEA R13, [R13+4] POP EBP MOV EBX, [RCX+RBP] MOV [R13], EBX LEA R13, [R13+4] LEA EBP, [EBP+4] RET (Return Intrinsics)
  • 23. どう x86 をトレースつきで “emulate” する? (2) • R13 : トレースを出力するゕドレス – メモリ読み取りの結果 – 分岐先の命令 (EIP) – これだけをトレースすることで、全てが判明する! • 通常の x86 命令を実行するために、 x86_64 においては 1~5 命令を実行する – バ゗ナリ変換プログラムが最適化されれば、 もっと効率が上がる!
  • 24. 実用的なのか? • そこそこ。 – デゖスク書き込みのストール抜きでのパフォーマンス指標: Pentium 4 1.5GHz ≧ エミュレーション中の Core i7 3.0GHz > Pentium III 1.0GHz • システムエミュレーションには十分ではないが、 ユーザモードエミュレーションには十分である! • 他のどのトレース手法よりも高速 (トレース機能つきのデバッガなど…)
  • 25. 制約 / 考察 • x86 セグメンテーションとゕドレッシング – x86_64 は “フラットメモリモデル” に制約されている – セグメントのリミットを模倣するには多大な計算量が必要 • 超高速なデゖスクが必要 – 幸いにも書き込みは “シーケンシャル” なので、 HDD を使った RAID-0 が有用かも • 大量のリソースを必要とする – 特に主記憶容量について顕著
  • 26. いつ使用可能になる? • 今のところ、実験的なプログラムが動作するのみ。 – 実用的プログラムをエミュレートするには 至っていない • 2010 年前半までには公開できれば…