kobe virtualrootkit

38
大和セキュリティ !! Virtual rootkit !! 黒林檎 (r00tapple)

Upload: -

Post on 25-May-2015

689 views

Category:

Engineering


2 download

TRANSCRIPT

Page 1: Kobe virtualrootkit

!

大和セキュリティ!! Virtual rootkit !!黒林檎(r00tapple)

Page 2: Kobe virtualrootkit

自己紹介?

最近、仮想rootkitよりハイブリッドrootkitの方が興味あります。(?)

発表資料ver原稿ベースhttp://www.slideshare.net/murashimamasahiro/virtual-rootkit

Page 3: Kobe virtualrootkit

virtual rootkitの脅威!

!

仮想化技術ってだいぶ昔からあります。 !

最近はどこでも仮想化技術を取り入れています。

要するに今回はそこらへんの脅威のお話です。 !

!

!

Page 4: Kobe virtualrootkit

最初に..。仮想化技術が普及している今、仮想化技術に対する脅威を認識していなければ行けない(感じがする)欠点として仮想化によるオーバーヘッド、ハードウェアの制約(仮想化支援機構必須)など.. 利点としてVMMはOSがいかなる状況にあっても保護を継続してくれるという利点がある。 !

!

Page 5: Kobe virtualrootkit

セキュアか?ハイパーバイザーを悪用したマルウェア(BluePill)など脅威はあったが仮想化のセキュリティへの応用は既に成されておりセキュアであると言える。しかし、VMM自体への攻撃を懸念しなければならない。 [例..] VT escape attack hypervisor rootkit など

Page 6: Kobe virtualrootkit

懸念すべき攻撃とは?VM escape attack? !

CPUID Flood attack ? !

CPUID Brute-Force attack ? !

VMへの脆弱性への攻撃?

Page 7: Kobe virtualrootkit

What’s VM escape attack ?ゲストからホストへのエスケープを可能にする。

ゲスト仮想マシン内のローカルの攻撃者は、制限された仮想環境をエスケープし、ハードウェアに直接アクセスする。 非特権ドメイン(domU)を管理することができる特権ドメイン(dom0)の権限を持つホストシステム上で任意のコードを実行することができる攻撃

Page 8: Kobe virtualrootkit

What’s CPUID Flood attack?SYN Floodと考え方は一緒でDoS攻撃の手法の一つで接続を大量に試みる攻撃 !

/while(1)的なもん .section .text .global main main : movl $0x8000000A , %eax cpuid jmp main !

Page 9: Kobe virtualrootkit

VM自体の脆弱性(1)

Page 10: Kobe virtualrootkit

VMの脆弱性(2)

!

..上記はVMのバージョン情報抽出してるだけっていうね(汗)

Page 11: Kobe virtualrootkit

[本題]

Page 12: Kobe virtualrootkit

Hypervisorってな~に?[ペアメタル ハイパーバイザー]

[説明]{ 世間一般に言われているハイパーバイザーはこちら。 }

Page 13: Kobe virtualrootkit

Hypervisorってな~に?(2)

[説明]{ hypervisorは.. ウェブプロキシ をイメージすると 良いです。 }

[ホスト型 ハイパーバイザー]

Page 14: Kobe virtualrootkit

ring -1とは何か?右図を見てもkernel modeの ring 0が最高権限とされています。 ring -1とは”Intel || AMD”がハードウェア仮想サポートによって作成した概念をまとめた要な物です。

Page 15: Kobe virtualrootkit

HyperJacking !

Page 16: Kobe virtualrootkit

Hyperjackingとは?UNIXのvfork()システムコール命令のように2つの異なるスレッドを実行しているオペレーションシステムを実行します。

Page 17: Kobe virtualrootkit

HyperJackingへの道のり[1]対象に悪意あるkernelドライバをインストール ![2]低レベル仮想化支援命令にアクセス。 ![3]悪意あるhypervisor用メモリー空間を作成 ![4]新しいVMのための記憶空間を作成 ![5]新しいVMへ動作中0Sを移動 ![6]新しいVMからのコマンドをすべてトラップに掛け悪質なhypervisorを定着させる

Page 18: Kobe virtualrootkit

Hyperjackingソース抜粋現在のオペレーションシステムからの値を使用して、 VMCS中のホスト状態フィールドの初期化を要求する部分。static void _hyperjack_init_vmcs_host_fields() { uint32_t selector; uint32_t base; uint32_t msr_lo, msr_hi; uint32_t host_rsp, host_rip; //メモリセグメント、ベースレジスタ、コントロールレジスタ x86_get_es(selector); __vmwrite(HOST_ES_SELECTOR, selector); x86_get_cs(selector); __vmwrite(HOST_CS_SELECTOR, selector); ..... //vm-exitハンドル…”on_vm_exit()”

host_rsp = 0xdeadbeef; __vmwrite(HOST_RSP, host_rsp); host_rip - 0xdeadbeef; __vmwrite(HOST_RIP, host_rip); }

Page 19: Kobe virtualrootkit

っていうか(笑)物理メモリーを共有するのでHypervisorって オペレーティングシステムのメモリに対して フルアクセス権を持っている事になるので それらを任意に変更することができるんじゃね?

!

※(勿論対策案出てますよ結構前から!)

Page 20: Kobe virtualrootkit

‘命令’||’用語’説明[動作モード]

-vmx root モード -vmx-non-root モード [VMCS] -仮想マシン用の情報領域 -動作条件 -レジスタ情報 [vmx命令]

-vmxon/vmxoff //vmx操作の有効化・無効化 -vmread/vmwrite //VMCS領域の書き込みと読み込み -vmclear   //vmcs用メモリ領域の初期化 -vmcall //ゲストOSからVMMへ推移

Page 21: Kobe virtualrootkit

Hypervisor rootkit !

Page 22: Kobe virtualrootkit

Hypervisor rootkit結論から言うとhypervisor rootkitって技術的に難しい。

←32bit用/64bit用の設定 .hで定義する必要 があります。成功度自体も..(ry

Page 23: Kobe virtualrootkit

しかし脅威に違いは無いOpen SSLのウェブサイト改ざん被害の際にもHypervisorを狙われた訳ですから、脅威に違いは無い。 !

攻撃者からしても…、’ring0 < ring -1’権限が高いので出来るなら奪いたい。 !

Page 24: Kobe virtualrootkit

攻撃者 vs その他etc !!Microsoftがwindows serverに仮想化実装を施そうという話が出た時にはMicrosoftはハードウェアレベルで許可されていないハイパーバイザーの検出をする事にAMD・Intelと話合うなど脅威としての認識は昔からされていた。ベンダーの対策ソフトも結構出てますので興味があれば後で出す物を検索してみてください。

Page 25: Kobe virtualrootkit

MBR rootkitについて[MBR(マスターブートレコード)]

MBR(マスターブートレコード)はOSを見つける為にBIOSに指示する ハードドライブの一部であり、コンピューター起動時に 初期ブート・シーケンスを実行しBIOSから引き継ぐ重要な物です。 (ハードディスクの先頭セクタにあるブートレコード)

rootkitにはこのプロセスを感染させる事でその存在を隠し システムを引き継ぐために送信されたデータを変更する事で ハードウェアとOSの間で自分自身をInjectionする事がある。 ※これはbootkitとも呼ばれていてる事もあります。

Page 26: Kobe virtualrootkit

Hypervisorについて[hypervisor(ハイパーバイザー)]

MBRを紹介した例として..

hypervisor rootkitにもMBR rootkitに似ている物があります。 それはbootプロセス間に悪意あるハイパーバイザーを作成するために ブートローダーを修正するrootkitも存在するから。 そしてOSを破壊しユーザーへの表示と再起動なしで実行中仮想マシン へ移行出来る。 これらはCPUに組み込まれた仮想化支援機能を使用する事により可能 です。

Page 27: Kobe virtualrootkit

Hypervisor入門![3つの主な関数命令] !vmx-init() – VT-x機能を検出及び初期化

!vmx-fork() – ゲストOSとホストハイパーバイザー

..を実行中システムにfork

!on_vm_exit() – VM終了イベント処理など..

!!!

Page 28: Kobe virtualrootkit

vmx_init()[vmx_init()] CPUIDとMSR(モデル固有レジスタ)

VMXのCR4を有効 VMCSC(仮想マシンコントロールストア)で物理メモリページ割り当て VMX動作の許可---vmx_on命令を持ったプロセッサー

Page 29: Kobe virtualrootkit

vmx_fork()コード及びスタック(ハイパーバイザー用データ)を割り当て 現在実行中のオペレーションシステムをVMへ移行 実行中OSの状態をVMに設定 設定した実行コントロールがvm終了を最小化する様に例外やI/Oアクセスなどを無視 VM実行においてOSの実行を継続する。

Page 30: Kobe virtualrootkit

on_vm_exit()VM終了イベントの処理 CPUID、CR0-CR4アクセス、RDMSR/ WRMSR

のような手順については、期待される動作をエミュレート

CPUID命令のコマンドを使用しバックドアを実装などに 使われる。 その他一般的なrootkit機能を提供する。

Page 31: Kobe virtualrootkit

vmx_on()命令

VTが対応しているか確認

Page 32: Kobe virtualrootkit

vmcs_alloc()/vmcs_free()関数vmcsメモリを初期かしvmcsリビジョンを設定

Page 33: Kobe virtualrootkit

hyperjack()関数vmcs != NULLでないなhyperjack()を実行

Page 34: Kobe virtualrootkit

検出(1)[方法としては..] デバッグレジスタを使いハイパーバイザーにブレークポイントを設置する事が出来ます。 !カーネルメモリを変更しカーネル内の関数フック。 !プロセッサーがvmx non-rootモードで動作してるか調べる !vm-を作成するためにvmxを使用し vm-exitイベントが発生し起きた遅れを検出。

Page 35: Kobe virtualrootkit

検出(2)再起動して再ロードする事でバックドアや変更を探すために フォレンジックする事で、メモリにInjectionされハードドライブ 上のファイル構造を変更しないHypervisor rootkitで無ければ 検出は可能。 !勿論メモりにInjectionされハードドライブ上のファイル構造を 変更しないHypervisor rootkitの場合は再起動する事で 再起動後の存続は不可能。

Page 36: Kobe virtualrootkit

既存検知ソフトウェア(1)

[Slabbed-or-not] 特定ハイパーバイザー下で実行されているか検出する物。 検出される物としては..

■Xen(PVM or HVMモード ハイパーバイザーのバージョン)

■Vmware(ハイパーバイザーの種類 仮想化されたハードウェアモデルの検出)

※ハードウェアモデル(hyper-v / KVM / bhyve..など)

Page 37: Kobe virtualrootkit

既存検知ソフトウェア(2)※ハードウェアモデル(hyper-v / KVM / bhyve..など)

![Hooksafe] ハイパーバイザーの物理メモリーを使用し仮想環境内の rootkitを検出し削除又はブロックする事が出来る ハイパーバイザーベースのシステム。

Page 38: Kobe virtualrootkit

ご清聴有り難うございます