! 大和セキュリティ!! Virtual rootkit !! 黒林檎(r00tapple) 自己紹介? 最近、仮想rootkitよりハイブリッドrootkitの方が興味 あります。(?) 発表資料ver原稿ベース http://www.slideshare.net/murashimamasahiro/virtualrootkit virtual rootkitの脅威 ! ! 仮想化技術ってだいぶ昔からあります。 ! 最近はどこでも仮想化技術を取り入れています。 要するに今回はそこらへんの脅威のお話です。 ! ! ! 最初に..。 仮想化技術が普及している今、仮想化技術に対す る脅威を認識していなければ行けない(感じがする) 欠点として仮想化によるオーバーヘッド、ハード ウェアの制約(仮想化支援機構必須)など.. 利点としてVMMはOSがいかなる状況にあっても 保護を継続してくれるという利点がある。 ! ! セキュアか? ハイパーバイザーを悪用したマルウェア(BluePill) など脅威はあったが仮想化のセキュリティへの 応用は既に成されておりセキュアであると言え る。 しかし、VMM自体への攻撃を懸念しなければな らない。 [例..] VT escape attack hypervisor rootkit など 懸念すべき攻撃とは? VM escape attack? ! CPUID Flood attack ? ! CPUID Brute-Force attack ? ! VMへの脆弱性への攻撃? What’s VM escape attack ? ゲストからホストへのエスケープを可能にする。 ゲスト仮想マシン内のローカルの攻撃者は、制 限された仮想環境をエスケープし、ハードウェ アに直接アクセスする。 非特権ドメイン(domU)を管理することができ る特権ドメイン(dom0)の権限を持つホストシス テム上で任意のコードを実行することができる 攻撃 What’s CPUID Flood attack? SYN Floodと考え方は一緒でDoS攻撃の手法の 一つで接続を大量に試みる攻撃 ! /while(1)的なもん .section .text .global main main : movl $0x8000000A , %eax cpuid jmp main ! VM自体の脆弱性(1) VMの脆弱性(2) ! ..上記はVMのバージョン情報抽出してるだけってい うね(汗) [本題] Hypervisorってな∼に? [ペアメタル ハイパーバイザー] [説明]{ 世間一般に言われて いるハイパーバイザー はこちら。 } Hypervisorってな∼に?(2) [ホスト型 ハイパーバイザー] [説明]{ hypervisorは.. ウェブプロキシ をイメージすると 良いです。 } ring -1とは何か? 右図を見てもkernel modeの ring 0が最高権限とされてい ます。 ring -1とは”Intel || AMD”が ハードウェア仮想サポートに よって作成した概念をまと めた要な物です。 HyperJacking ! Hyperjackingとは? UNIXのvfork()システムコール命令のように2 つの異なるスレッドを実行しているオペレー ションシステムを実行します。 HyperJackingへの道のり [1]対象に悪意あるkernelドライバをインストール ! [2]低レベル仮想化支援命令にアクセス。 ! [3]悪意あるhypervisor用メモリー空間を作成 ! [4]新しいVMのための記憶空間を作成 ! [5]新しいVMへ動作中0Sを移動 ! [6]新しいVMからのコマンドをすべてトラップに掛け悪質なhypervisorを定着させる 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); } っていうか(笑) 物理メモリーを共有するのでHypervisorって オペレーティングシステムのメモリに対して フルアクセス権を持っている事になるので それらを任意に変更することができるんじゃね? ! ※(勿論対策案出てますよ結構前から!) ‘命令’||’用語’説明 [動作モード] -vmx root モード -vmx-non-root モード [VMCS] -仮想マシン用の情報領域 -動作条件 -レジスタ情報 [vmx命令] -vmxon/vmxoff //vmx操作の有効化・無効化 -vmread/vmwrite //VMCS領域の書き込みと読み込み -vmclear //vmcs用メモリ領域の初期化 -vmcall //ゲストOSからVMMへ推移 Hypervisor rootkit ! Hypervisor rootkit 結論から言うとhypervisor rootkitって技術的に難 しい。 ←32bit用/64bit用の設定 .hで定義する必要 があります。 成功度自体も..(ry しかし脅威に違いは無い Open SSLのウェブサイト改ざん被害の際にも Hypervisorを狙われた訳ですから、脅威に違い は無い。 ! 攻撃者からしても…、’ring0 < ring -1’権限が 高いので出来るなら奪いたい。 ! 攻撃者 vs その他etc !! Microsoftがwindows serverに仮想化実装を施そう という話が出た時にはMicrosoftはハードウェアレ ベルで許可されていないハイパーバイザーの検出 をする事にAMD・Intelと話合うなど脅威として の認識は昔からされていた。 ベンダーの対策ソフトも結構出てますので興味が あれば後で出す物を検索してみてください。 MBR rootkitについて [MBR(マスターブートレコード)] MBR(マスターブートレコード)はOSを見つける為にBIOSに指示する ハードドライブの一部であり、コンピューター起動時に 初期ブート・シーケンスを実行しBIOSから引き継ぐ重要な物です。 (ハードディスクの先頭セクタにあるブートレコード) rootkitにはこのプロセスを感染させる事でその存在を隠し システムを引き継ぐために送信されたデータを変更する事で ハードウェアとOSの間で自分自身をInjectionする事がある。 ※これはbootkitとも呼ばれていてる事もあります。 Hypervisorについて [hypervisor(ハイパーバイザー)] MBRを紹介した例として.. hypervisor rootkitにもMBR rootkitに似ている物があります。 それはbootプロセス間に悪意あるハイパーバイザーを作成するために ブートローダーを修正するrootkitも存在するから。 そしてOSを破壊しユーザーへの表示と再起動なしで実行中仮想マシン へ移行出来る。 これらはCPUに組み込まれた仮想化支援機能を使用する事により可能 です。 Hypervisor入門 ! [3つの主な関数命令] ! vmx-init() – VT-x機能を検出及び初期化 ! vmx-fork() – ゲストOSとホストハイパーバイザー ..を実行中システムにfork ! on_vm_exit() – VM終了イベント処理など.. ! ! ! vmx_init() [vmx_init()] CPUIDとMSR(モデル固有レジスタ) VMXのCR4を有効 VMCSC(仮想マシンコントロールストア)で物理メモ リページ割り当て VMX動作の許可---vmx_on命令を持ったプロセッ サー vmx_fork() コード及びスタック(ハイパーバイザー用データ) を割り当て 現在実行中のオペレーションシステムをVMへ移 行 実行中OSの状態をVMに設定 設定した実行コントロールがvm終了を最小化する 様に例外やI/Oアクセスなどを無視 VM実行においてOSの実行を継続する。 on_vm_exit() VM終了イベントの処理 CPUID、CR0-CR4アクセス、RDMSR/ WRMSR のような手順については、期待される動作をエミュレート CPUID命令のコマンドを使用しバックドアを実装などに 使われる。 その他一般的なrootkit機能を提供する。 vmx_on()命令 VTが対応しているか確認 vmcs_alloc()/vmcs_free()関数 vmcsメモリを初期かしvmcsリビジョンを設定 hyperjack()関数 vmcs != NULLでないなhyperjack()を実行 検出(1) [方法としては..] デバッグレジスタを使いハイパーバイザーにブレークポ イントを設置する事が出来ます。 ! カーネルメモリを変更しカーネル内の関数フック。 ! プロセッサーがvmx non-rootモードで動作してるか調べ る ! vm-を作成するためにvmxを使用し vm-exitイベントが発生し起きた遅れを検出。 検出(2) 再起動して再ロードする事でバックドアや変更を探すために フォレンジックする事で、メモリにInjectionされハードドライブ 上のファイル構造を変更しないHypervisor rootkitで無ければ 検出は可能。 ! 勿論メモりにInjectionされハードドライブ上のファイル構造を 変更しないHypervisor rootkitの場合は再起動する事で 再起動後の存続は不可能。 既存検知ソフトウェア(1) [Slabbed-or-not] 特定ハイパーバイザー下で実行されているか検出する物。 検出される物としては.. ■Xen(PVM or HVMモード ハイパーバイザーのバージョン ■Vmware(ハイパーバイザーの種類 仮想化されたハードウ アモデルの検出) ※ハードウェアモデル(hyper-v / KVM / bhyve..など) 既存検知ソフトウェア(2) ※ハードウェアモデル(hyper-v / KVM / bhyve..など) ! [Hooksafe] ハイパーバイザーの物理メモリーを使用し仮想環境内の rootkitを検出し削除又はブロックする事が出来る ハイパーバイザーベースのシステム。 ご清聴有り難うございます
© Copyright 2024