大和セキュリティ!! Virtual rootkit !!

!
大和セキュリティ!!
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を検出し削除又はブロックする事が出来る
ハイパーバイザーベースのシステム。
ご清聴有り難うございます