大義のために:趣味と実益のためのvmware rpcインターフェースの活用 by...

48
1 趣味と実益のためのVMware RPCインターフェースの活用

Upload: code-blue

Post on 22-Jan-2018

146 views

Category:

Software


6 download

TRANSCRIPT

Page 1: 大義のために:趣味と実益のためのVMware RPCインターフェースの活用 by アブドゥル・アジズ・ハリリ, ジャシエル・スペルマン, ブライアン・ゴーレンク

1

趣味と実益のためのVMware RPCインターフェースの活用

Page 2: 大義のために:趣味と実益のためのVMware RPCインターフェースの活用 by アブドゥル・アジズ・ハリリ, ジャシエル・スペルマン, ブライアン・ゴーレンク

2

アジェンダ• 自己紹介• VMwareの一般的なアーキテクチャ (Simplified)• ホスト<->ゲスト 間の通信

– バックドアインターフェース• VM RPCインターフェース

– 機能– Recording Guest -> Host RPC requests

• RPCインターフェースクエリツールの開発– C++– Python

• C拡張• CTypes

• VMwareのUse-After-Free攻撃– 解放されたオブジェクト– 攻撃の原点– デモ

• 結論

Page 3: 大義のために:趣味と実益のためのVMware RPCインターフェースの活用 by アブドゥル・アジズ・ハリリ, ジャシエル・スペルマン, ブライアン・ゴーレンク

3

自己紹介

Page 4: 大義のために:趣味と実益のためのVMware RPCインターフェースの活用 by アブドゥル・アジズ・ハリリ, ジャシエル・スペルマン, ブライアン・ゴーレンク

4

Abdul-Aziz Hariri• コンピューターサイエンスの学士 – Balamand大学• 現在はZDIのSenior Security Researcher

– 根本原因分析 / 脆弱性分析 / 攻撃ツール作成– ZDI ケースリード– Pwn2Own 準備 / 申し込みの審査

• 過去の経歴– Bits Arabia, Insight-Tech , Morgan Stanley

• 過去の研究:– Pwn4Fun 2014 renderer攻撃ツールの作成– Microsoft バウンティへの投稿– Exploit低減技術の特許– Adobe Reader の分析

• Twitter: @abdhariri

Page 5: 大義のために:趣味と実益のためのVMware RPCインターフェースの活用 by アブドゥル・アジズ・ハリリ, ジャシエル・スペルマン, ブライアン・ゴーレンク

5

Jasiel Spelman• コンピューターサイエンスの学士 – テキサス大学オースティン校• 現在はZDIのSenior Security Researcher

– 根本原因分析 / 脆弱性研究 / 攻撃ツール作成– ZDI リサーチリード– Pwn2Own 監督官

• 過去の経歴– TippingPoint の電子ワクチンチーム

• 過去の研究:– Pwn4Fun 2014 sandbox escape 攻撃ツールの作成– ゼロデイ攻撃保護技術の特許– Windows カーネル情報の漏洩– Adobe Flash RE & RCE 脆弱性

• Twitter: @WanderingGlitch

Page 6: 大義のために:趣味と実益のためのVMware RPCインターフェースの活用 by アブドゥル・アジズ・ハリリ, ジャシエル・スペルマン, ブライアン・ゴーレンク

6

Brian Gorenc• コンピューターエンジニアリングの学士 – テキサスA&M大学• ソフトウェアエンジニアリングの修士 – Southern Methodist 大学• トレンドマイクロにおける脆弱性研究所のディレクター

– the Zero Day Initiativeのリード– Pwn2Ownの主催者– (物あるいは賞金)の支払い決定者

• 過去の経歴– Lockheed Martinの主任開発者

• 過去の研究:– Microsoft バウンティへの投稿– Exploit 低減技術の特許– 多くの製品に対するバグの指摘

• Twitter: @MaliciousInput

Page 7: 大義のために:趣味と実益のためのVMware RPCインターフェースの活用 by アブドゥル・アジズ・ハリリ, ジャシエル・スペルマン, ブライアン・ゴーレンク

7

VMwareの一般的なアーキテクチャ

Page 8: 大義のために:趣味と実益のためのVMware RPCインターフェースの活用 by アブドゥル・アジズ・ハリリ, ジャシエル・スペルマン, ブライアン・ゴーレンク

8

VMwareの一般的なアーキテクチャ (非常に単純化*)

ハイパーバイザー

ゲスト

vmware-vmx

CPU

vmware-vmx

CPU

vmware tools libs

ゲスト

I/O I/O

マネジメントレイヤー

* very

何が起こっている?

Page 9: 大義のために:趣味と実益のためのVMware RPCインターフェースの活用 by アブドゥル・アジズ・ハリリ, ジャシエル・スペルマン, ブライアン・ゴーレンク

9

良い質問• 調査していく内に、良い着眼点と分かる• VMware Toolsのインストールの有無に関わらない

Page 10: 大義のために:趣味と実益のためのVMware RPCインターフェースの活用 by アブドゥル・アジズ・ハリリ, ジャシエル・スペルマン, ブライアン・ゴーレンク

10

ホスト<->ゲスト 間の通信

Page 11: 大義のために:趣味と実益のためのVMware RPCインターフェースの活用 by アブドゥル・アジズ・ハリリ, ジャシエル・スペルマン, ブライアン・ゴーレンク

11

ホスト<->ゲスト 間の通信• 通信は特定のI/Oポートへのアクセスによって行われる• VMware は『Backdoor』と呼ばれるインターフェースを備えている

– IN/OUT命令のハイジャック– 複数コマンドのサポート– 二つのプロトコルのサポート:RPCIとTCLO– ホスト情報の抽出が可能– ゲスト→ホスト RPCリクエストが送信可能

• バックドアインターフェースはデフォルトで利用可能

Page 12: 大義のために:趣味と実益のためのVMware RPCインターフェースの活用 by アブドゥル・アジズ・ハリリ, ジャシエル・スペルマン, ブライアン・ゴーレンク

12

ホスト<->ゲスト 間の通信 -Backdoor• 複数のコマンド/機能のサポート– コマンドは Github上のOpn-

vm-toolsで入手可能– backdoor_def.h がそれらのコマンドを定義

• ゲストは思っている以上に多くのコマンドを実行可能…

Page 13: 大義のために:趣味と実益のためのVMware RPCインターフェースの活用 by アブドゥル・アジズ・ハリリ, ジャシエル・スペルマン, ブライアン・ゴーレンク

13

ホスト<->ゲスト 間の通信 - Backdoor• バックドア機能の実行はシンプル:

mov eax, 564D5868h /* magic number */mov ebx, command-specific-parametermov cx, command-number /* 1001e = RPC */mov dx, 5658h /* VMware I/O port */in eax, dx

Page 14: 大義のために:趣味と実益のためのVMware RPCインターフェースの活用 by アブドゥル・アジズ・ハリリ, ジャシエル・スペルマン, ブライアン・ゴーレンク

14

ホスト<->ゲスト 間の通信 - Backdoor

ハイパーバイザー(ホスト)

ゲスト(vm)

バックドアチャネル

TCLO

RPCI低-帯域

高-帯域

バックドアチャネル

その他

Page 15: 大義のために:趣味と実益のためのVMware RPCインターフェースの活用 by アブドゥル・アジズ・ハリリ, ジャシエル・スペルマン, ブライアン・ゴーレンク

15

ホスト<->ゲスト 間の通信 - RPCI• 複数コマンドのサポート– Rpctool.exe はいくつかのコマンドのクエリに利用可能。

– Rpctool.exe はオープンソースでありopen-vm-toolsから入手可能

– それらのRPCコマンドはvmware-vmx.exe にあり、 open-vm-tools のソースコードに散見される。

Page 16: 大義のために:趣味と実益のためのVMware RPCインターフェースの活用 by アブドゥル・アジズ・ハリリ, ジャシエル・スペルマン, ブライアン・ゴーレンク

16

ホスト<->ゲスト 間の通信 - RPCI

Page 17: 大義のために:趣味と実益のためのVMware RPCインターフェースの活用 by アブドゥル・アジズ・ハリリ, ジャシエル・スペルマン, ブライアン・ゴーレンク

17

ホスト<->ゲスト 間の通信 – まとめ• バックドアインターフェースがホスト/ゲスト間通信に使われる• in/out命令のハイジャック• RPCI がゲストからホストへの通信に使われる• TCLO がホストからゲストへの通信に使われる• RPCI コマンドが vmware-vmx{.exe}にある• open-vm-tools は宝の山!

Page 18: 大義のために:趣味と実益のためのVMware RPCインターフェースの活用 by アブドゥル・アジズ・ハリリ, ジャシエル・スペルマン, ブライアン・ゴーレンク

18

VM RPC インターフェース

Page 19: 大義のために:趣味と実益のためのVMware RPCインターフェースの活用 by アブドゥル・アジズ・ハリリ, ジャシエル・スペルマン, ブライアン・ゴーレンク

19

GuestRPC• RPC リクエストは”backdoor”チャネルを通して送信される• 具体的には、BDOOR_CMD_MESSAGE (0x1E)となる

• ゲストメッセージはguest_msg_def.hに定義される• GuestRPC は複数のメッセージタイプをサポートしている:

Page 20: 大義のために:趣味と実益のためのVMware RPCインターフェースの活用 by アブドゥル・アジズ・ハリリ, ジャシエル・スペルマン, ブライアン・ゴーレンク

20

GuestRPC• 単純なGuestRPCメッセージの例:

mov eax, 0x564D5868mov ecx, 0x001e //MESSAGE_TYPE_OPEN

mov edx, 0x5658mov ebx, 0xC9435052in eax, dx

mov eax, 0x564D5868mov ecx, 0x1001e //MESSAGE_TYPE_SENDSIZE

mov edx, 0x5658mov ebx, SIZEin eax, dx

mov eax, 0x564D5868mov ecx, 0x6001e //MESSAGE_TYPE_CLOSE

mov edx, 0x5658mov ebx, SIZEin eax, dx

Page 21: 大義のために:趣味と実益のためのVMware RPCインターフェースの活用 by アブドゥル・アジズ・ハリリ, ジャシエル・スペルマン, ブライアン・ゴーレンク

21

GuestRPC• GuestRPC リクエストは vmware-vmx{.exe}内で解析される• GuestRPC メッセージ/機能もまた vmware-vmx{.exe}内部で実装されている

• GuestRPC_Funcs を調べると次のような内容を見つけることができる:

Page 22: 大義のために:趣味と実益のためのVMware RPCインターフェースの活用 by アブドゥル・アジズ・ハリリ, ジャシエル・スペルマン, ブライアン・ゴーレンク

22

GuestRPC – ExecRPCRequest• RPCリクエストを引数として参照する• 渡されたRPC関数が正しいかのチェック• 関数の実行に十分な権限があるかのチェック• 実行

Page 23: 大義のために:趣味と実益のためのVMware RPCインターフェースの活用 by アブドゥル・アジズ・ハリリ, ジャシエル・スペルマン, ブライアン・ゴーレンク

23

GuestRPC – RPC リクエストの盗聴• RPC リクエストは確かにここで解析されているので実際に関数をフックし、送られたリクエストを盗聴可能

• このためにはpykdを利用 J– ExecRPCRequest 関数にブレイクポイントを設定– リクエストへのポインタはr8 レジスタにセットされる– リクエスト長はr9 レジスタにセットされる

• 次のように見えるようになる

Page 24: 大義のために:趣味と実益のためのVMware RPCインターフェースの活用 by アブドゥル・アジズ・ハリリ, ジャシエル・スペルマン, ブライアン・ゴーレンク

24

GuestRPC – RPC リクエストの盗聴- デモ• デモ

Page 25: 大義のために:趣味と実益のためのVMware RPCインターフェースの活用 by アブドゥル・アジズ・ハリリ, ジャシエル・スペルマン, ブライアン・ゴーレンク

25

RPC インターフェースクエリツールの開発

Page 26: 大義のために:趣味と実益のためのVMware RPCインターフェースの活用 by アブドゥル・アジズ・ハリリ, ジャシエル・スペルマン, ブライアン・ゴーレンク

26

ツール開発• VMware と RPC の課題の一つは次のようなツールの開発である:

– ケース分析– 攻撃手法の開発– ファジング

• C++でツールを開発するために open-vm-tools を利用することができるが、いくつかの課題がある:– ASMに実装する必要のある関数が存在する– ASMがない場合、 vmtools.dllからエクスポートしなければならない

• 結構大変

Page 27: 大義のために:趣味と実益のためのVMware RPCインターフェースの活用 by アブドゥル・アジズ・ハリリ, ジャシエル・スペルマン, ブライアン・ゴーレンク

27

Tools Dev - C++, テイク 1• 辞書に含めるためにopen-vm-tools を追加

Page 28: 大義のために:趣味と実益のためのVMware RPCインターフェースの活用 by アブドゥル・アジズ・ハリリ, ジャシエル・スペルマン, ブライアン・ゴーレンク

28

Tools Dev - C++, テイク 2• アセンブリ、いくつかの関数はツールに完全に実装されてはいないので、vmtools.dllから抽出するためにASM内の関数を実装する必要がある

Page 29: 大義のために:趣味と実益のためのVMware RPCインターフェースの活用 by アブドゥル・アジズ・ハリリ, ジャシエル・スペルマン, ブライアン・ゴーレンク

29

Tools Dev - C++, テイク 2, 続き• ASM内のバックドアチャネルを通してRPCリクエストを送信するための関数を実装するため、単純化すべき

Page 30: 大義のために:趣味と実益のためのVMware RPCインターフェースの活用 by アブドゥル・アジズ・ハリリ, ジャシエル・スペルマン, ブライアン・ゴーレンク

30

ツール開発• すべてにおいて十分とはいえない• 高速なツール開発のための何かが必要だ• Python? そうだ、Pythonを使ってRPCリクエストを送信するシンプルなやり方を実装しよう:– C 拡張– Ctypes

• あいにく、 Josh (@kernelsmith) (私たちの DevOps マネージャー) はRubyで同じようなことを実装したがっているけど。

Page 31: 大義のために:趣味と実益のためのVMware RPCインターフェースの活用 by アブドゥル・アジズ・ハリリ, ジャシエル・スペルマン, ブライアン・ゴーレンク

31

ツール開発 – Python, C 拡張• C 拡張は素晴らしい• Windows上の初期化関数をエクスポートする共有ライブラリ

(.pyd)• 共有ライブラリはPythonからインポート可能

Page 32: 大義のために:趣味と実益のためのVMware RPCインターフェースの活用 by アブドゥル・アジズ・ハリリ, ジャシエル・スペルマン, ブライアン・ゴーレンク

32

ツール開発 – Python, C 拡張

Page 33: 大義のために:趣味と実益のためのVMware RPCインターフェースの活用 by アブドゥル・アジズ・ハリリ, ジャシエル・スペルマン, ブライアン・ゴーレンク

33

ツール開発 – Python, CTypes• Ctypes はC互換のデータタイプを提供• 共有ライブラリもしくはDLL上の関数呼び出しを許可

Page 34: 大義のために:趣味と実益のためのVMware RPCインターフェースの活用 by アブドゥル・アジズ・ハリリ, ジャシエル・スペルマン, ブライアン・ゴーレンク

34

RPCインターフェースのファジング

Page 35: 大義のために:趣味と実益のためのVMware RPCインターフェースの活用 by アブドゥル・アジズ・ハリリ, ジャシエル・スペルマン, ブライアン・ゴーレンク

35

RPC インターフェースのファジング• RPC インターフェースのファジングはゲストOSとホストOS両方に対し

てのツールが必要• 対処すべき課題が存在:

– ホストのクラッシュ検出(この場合、多くは vmware-vmx のデバッグ)– テストケースの生成 (ゲストOS上で可能であるがゲストは軽量にしておきたい)– ホストOSからのゲストOSのVM管理

Page 36: 大義のために:趣味と実益のためのVMware RPCインターフェースの活用 by アブドゥル・アジズ・ハリリ, ジャシエル・スペルマン, ブライアン・ゴーレンク

36

RPC インターフェースのファジング

HostVMWare

WorkStation

フレームワーク

vmrunを通じたマネジメント

アタッチ

エージェント

モニタリング

テストケースの送信ミューテータ

start vmx

Page 37: 大義のために:趣味と実益のためのVMware RPCインターフェースの活用 by アブドゥル・アジズ・ハリリ, ジャシエル・スペルマン, ブライアン・ゴーレンク

37

RPCインターフェースのファジング - メモリ内• RPCリクエストは確かに解析されたので、実際にメモリ内のファジングが可能:– ExecRPCRequest(ホストOS上)のフック– 解析される前にRPCリクエストの変更– クラッシュを待つ

• 追加のツールの必要性:– クラッシュ検出 (ホストOSから)– 変更の記録(ホストOSから)

Page 38: 大義のために:趣味と実益のためのVMware RPCインターフェースの活用 by アブドゥル・アジズ・ハリリ, ジャシエル・スペルマン, ブライアン・ゴーレンク

38

RPCインターフェースのファジング - メモリ内

デモ

Page 39: 大義のために:趣味と実益のためのVMware RPCインターフェースの活用 by アブドゥル・アジズ・ハリリ, ジャシエル・スペルマン, ブライアン・ゴーレンク

39

VMware ドラッグ&ドロップのUse-After-Free

Page 40: 大義のために:趣味と実益のためのVMware RPCインターフェースの活用 by アブドゥル・アジズ・ハリリ, ジャシエル・スペルマン, ブライアン・ゴーレンク

40

VMware ドラッグ&ドロップの Use-After-Free – 根本原因• 解放は複数回DnDバージョンが変更された場合に引き起こされる• 再利用はランダムのDnD関数が上記の解放の後に呼ばれた場合に起きる• PoC は単純なものである:

Page 41: 大義のために:趣味と実益のためのVMware RPCインターフェースの活用 by アブドゥル・アジズ・ハリリ, ジャシエル・スペルマン, ブライアン・ゴーレンク

41

VMware ドラッグ&ドロップのUse-After-Free – 根本原因• 成功裏にトリガーされた場合、このようにクラッシュして終わる:

• さらに確認するために、!heap –p –a @RCX が解放の起きた場所に発見される:

Page 42: 大義のために:趣味と実益のためのVMware RPCインターフェースの活用 by アブドゥル・アジズ・ハリリ, ジャシエル・スペルマン, ブライアン・ゴーレンク

42

VMwareドラッグ&ドロップのUse-After-Free – 根本原因• 次に、解放されたオブジェクトのサイズを得る必要がある• そのため、解放が起きて実行される前に正しくブレイクし、!heap ‒p ‒a

を解放するアドレスの前で実行する必要がある。

Page 43: 大義のために:趣味と実益のためのVMware RPCインターフェースの活用 by アブドゥル・アジズ・ハリリ, ジャシエル・スペルマン, ブライアン・ゴーレンク

43

VMware ドラッグ&ドロップのUse-After-Free – 脆弱性を攻撃• まずはじめに、再利用前に解放されたオブジェクトの操作を行う方法を発見する必要がある

• これはバックドアチャネルを通して任意のGuestRPCリクエストを送ることによって行われる

• 例えばtools.capability.guest_temp_directory RPC 関数を利用

Page 44: 大義のために:趣味と実益のためのVMware RPCインターフェースの活用 by アブドゥル・アジズ・ハリリ, ジャシエル・スペルマン, ブライアン・ゴーレンク

44

VMware ドラッグ&ドロップのUse-After-Free – 脆弱性を攻撃• 次の問題は、ROPチェーンをpopすべきか、Heap sprayすべきか?• 答えは、 unity.window.contents.start RPC 関数にあった

Page 45: 大義のために:趣味と実益のためのVMware RPCインターフェースの活用 by アブドゥル・アジズ・ハリリ, ジャシエル・スペルマン, ブライアン・ゴーレンク

45

VMware ドラッグ&ドロップのUse-After-Free – 脆弱性を攻撃• 現時点で実行プランはどのようなもの?

– RSPからRDIをセットするROP チェーンにあわせて unity.window.contents.start リクエストを送信– 解放をトリガ。– 他のもので解放されたオブジェクトを上書き。解放されたオブジェクトは vmware_vmx

+0xb870f8のアドレスを含む。– RCEを得るためにROPチェーン含むリクエストを使って再使用をトリガ。

• vmware-vmx上のRWX regionがあるのでどのROPチェーンが実行すべきかを知ることが可能 ;)

Page 46: 大義のために:趣味と実益のためのVMware RPCインターフェースの活用 by アブドゥル・アジズ・ハリリ, ジャシエル・スペルマン, ブライアン・ゴーレンク

46

VMware ドラッグ&ドロップのUse-After-Free

Page 47: 大義のために:趣味と実益のためのVMware RPCインターフェースの活用 by アブドゥル・アジズ・ハリリ, ジャシエル・スペルマン, ブライアン・ゴーレンク

47

結論

Page 48: 大義のために:趣味と実益のためのVMware RPCインターフェースの活用 by アブドゥル・アジズ・ハリリ, ジャシエル・スペルマン, ブライアン・ゴーレンク

49