Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
仮想化技術によるマルウェア対策と
     その問題点

 2012/07/09 @横浜国立大学

    産業技術総合研究所
   セキュアシステム研究部門
       須崎有康
自己紹介
• 所属:独立行政法人 産業技術総合研究所
  – 2001年に通産省傘下の15研究所等を統
    合してできた環境・エネルギー、ライフサ
    イエンス、情報通信・エレクトロニクス、ナ
    ノテクノロジー・材料・製造、標準・計測、
    地質という多様な6分野の研究を行う公
    的研究機関。本部を東京及びつくばに置
    き、つくばセンターを除く全国8ヶ所に地
    域センターを配置。総職員数は約3,000
•   情報セキュリティ研究センター (2005-2012) (研究顧問 松本勉教授)
•   セキュアシステム研究部門(2012- )
• CD/DVD LinuxのKNOPPIX日本語版
コンテンツ
• マルウェア解析に仮想マシンを使う理由
 – Anti-Debugger
• 仮想化技術の詳細
• マルウェア解析に必要な技術
    ウ  解析に必要な技術
 – InstrumentとIntrospection
• 具体例:Virt-ICE
• 問題点と現在の動向
• まとめ
マルウェア解析に仮想マシンを使う理由
• 最近のマルウェアはdebuggerによる解析を検出
  して、それを回避する技術を含んでいる(Anti-
  Debugger)
 – [Xu,NDSS08]によると93.9%のマルウェアはAnti-
   Debuggerの機能がある。
 – 多くはこの講義で紹介済みと予想。。。
• Debugger単独では検出し難いマルウェア技術
 – ステルス化が進むRootKit
 – Hidden Process
 – Memory Dual mapping
ステルス化が進むRootKit
• システム(OS)の外部で動作する
  – ファームウェア/BIOSルートキットやSMM(System Management
    Mode)ルートキット
                                                      ハイバネーションな
                 SMI (System Management Interrupt)     どの割り込み
      Protect                     SMM                    ハイバネーションj時の
       Mode                       Mode                   メモリ退避できるように
                                                         全メモリアクセスできる
                rsm Instrction                 SMRAM

                                        SMM handler
                                                       SMM Modeのみアクセス
                                                       できるメモリ。Handlerは
                                           Context       BIOSによってロード


• 仮想化の悪用BluePill [BlackHat 2006, Joanna Rutkowska]
  – ハードウェアの仮想化支援機能を悪用し、悪意のハイパーバイ
    ザー(仮想マシンモニタ)をインストール。通常のOSからは検出
    できない
Hidden Process (Windows)
• DKOM(direct kernel object manipulation)
  – プロセスは双方向のリンクリストで管理。リンクリ
    ストのリンクを故意に書き換えることで特定のプ
    ロセスエントリをリストから切り離して隠ぺい
  – プロセスはスレッドのコンテナ(入れもの)でしか
    なく処理自体はスレッドによって実行される。


     Process   Process   Process   Process
        A         B         C         D
Hidden Process (Linux)
• 多くのカーネル情報は/procファイルシステム
  から取得される。
              ps, top, freeコマンドなどのシステム
              情報は/proc FSを通して取得、表示

       /proc ファイルシステム
 ユーザ空間 カーネルのシステム情報を通知する特別なファイルシステム


             カーネル空間で偽の情報を出すような攻撃を
 カーネル空間      されるとmalware processを隠すことができる
                     malware
           Process             Process   Process
                     Process
              A                   C         D
                        B
Memory Dual mapping
• Matt “skape” Miller, Using dual-mappings to evade automated
  unpackers, 2008 より。
• 2つの仮想メモリページを1つ物理メモリページに割り当てる
   – Executable mapping            DEP, Debugger
                                   の監視対象は
      • コードが実行される。Debugger         コ ドのみ
                                   コードのみ
                                                   Virtual
                                                   Vi t l      Physical
        はここのみ監視
   – Editable mapping
      • Packerとして働き、コードを改                 Code
        変(Self-modification)する            Executable

• DEP(Data Execution Prevention)
  を回避して、コード改変
                                           Data
                                                             データとして実
                                           Editable          行コードを書き
                                                             換え
Anti-Debuggerへの対処法
• 高機能Debugger
  – Anti-Debuggerとのイタチごっご
     • 参考書籍:アナライジング・マルウェア、オライリー・ジャパン

• ICE (In-Circuit Emulator)
  – ハ ドウ アを使ったデバッグ
    ハードウェアを使ったデバッグ。
    ハードウェア情報は全て取れるが、
    解析に知識が必要。高価
• 仮想化(仮想マシン)技術
  – ICEより安価
  – 仮想マシンにも沢山の技術があり、
    Anti-Debuuger作成には考慮が必要
コンテンツ
• マルウェア解析に仮想マシンを使う理由
 – Anti-Debugger
• 仮想化技術の詳細
• マルウェア解析に必要な技術
    ウ  解析に必要な技術
 – InstrumentとIntrospection
• 具体例:Virt-ICE
• 問題点と現在の動向
• まとめ
仮想マシンソフトウェア(ハイバーバイザー or
  仮想マシンモニタ)はいくつあるか
• 挙げてみると
  –   VMware
  –   Xen
  –   VirtualPC
  –   KVM
  –   Parallels
           ll l
  –   VirtualBox
  –    QEMU
  –    Hyper-V
  –   BitVisor
  –   LilyVM
  –   Bochs, Plex86, coLinux, sHype, zVM, UserModeLinux, Solaris
      containers (zones), FreeBSD jail, Linux VServer, Virtuozzo, Cygwin,
      OpenVZ, SoftwarePod, pearPC, Wine, Tango-VP, Quick Transitive,
      FAT-Binary, SimOS, Simics, IBM LPAR,           ……
仮想マシンの歴史                                                         KVM
                                                                               Xen
                                                            仮想化支援              (Full-
                                                           (Intel VT, AMD-V)
                                                                               Virtualization)

                                                               Robin,Irvineによる仮想化の
                                        IA32                   IA32命令要件 USENIX Sec2000
                         x86                                VMware         Xen
                                                            Workstation (Para-Virtualization)
                                                            (Dynamic Translation)
                               ‘78 16bit       ‘85 32bit

              Popek,Goldbergによる
メインフレーム
              仮想化の命令要件
仮想化支援
              1974
           IBM     IBM                DEC                             IBM
          CP/67   370/VM            VAX/VMM                          z/VM



  1960            1970           1980              1990             2000
仮想化技術の歴史
• Mainframe
   • 1967 IBM CP-67 First Hypervisor

• IA32 Architecture
   • 1999 VMware workstation [by Mendel Ronsenblum @Stanford]
       – Binary Translation on IA32
   • 2002&2003 Denali[OSDI’02] Xen[SOSP’03]
               Denali[OSDI 02], Xen[SOSP 03]
       – Para-virtualizaiton
   • 2005&2006 Hardware Assist
       – Intel-VT/ AMD-SVM
       – 2006 KVM
            • [Qumranet(Isreal)->RedHat]
   • 2006 Amazon EC2 uses Xen
仮想化のメリット
• ハイパーバイザー(or 仮想マシンモニタ, Virtual
  Machine Monitor) は一台の物理マシン上で複
  数のOSを実行可能にする
• 仮想マシン(VM)は扱いやすい
 – VMが全く同じマシン環境を提供するのでOSイメー
   ジを手軽にコピー可能
 – ライブマイグレーション(移動)
   • ロードバランスはハードウェアメンテナンスに活用
 – スナップショットとロールバック
 – VMの操作がソフトウェアで行え、Debugに使える
IA32での仮想化の問題点
• 仮想化できない命令
 – Sensitiveで且つNon-privileged の命令
   • 状態を保存し、以降の命令実効に影響を与える。
   • 例外で捕捉できない。
• TLBの仮想化 (今回ここはメインではないのでスキップ)
 – TLB flashを制御できない。
 – TLBはハードウェア制御であり、且つ、アドレス空
   間にIDタグが付けられない。
   • SPARCでは仮想化可能。
• IOの仮想化    (今回ここはメインではないのでスキップ)
Sensitive&Non-privileged命令の仮想化問題

• Sensitiveな命令
  – CPUの真の姿が見えてしまう命令
    • GDT, LDT, IDTの読出し
  – 以後の実行に影響を与える命令
    • POPF, PUSHF
• Privilegedな命令ならトラップで捕捉すること
  ができるが、 IA32ではSensitiveで且つNon-
  privileged命令がある。
Sensitive&Non-privileged命令問題の解決手法
• ソフトウェアによる解決
 1. 命令をソフトでエミュレート。汎用だが遅い。
  • QEMU
 2. 動的に命令を置き換える
  • Binary Translation (VMware)
         y             (      )
 3. 問題となる命令を使うソフト(カーネル)を書き換える
  • Para-Virtualization (Xen), カーネルをring 1実行。
• ハードウェアの補助による解決
 4. 仮想化モード対応CPUを使う
  • Intel VT, AMD-V (2005年以降)
  • Sensitive且つNon-Privileged命令が実行されるとモードが
    切り替わり、処理をVMMが行なう。
エミュレーション
• 基本的には1命令づつソフトウェアで処理。異
  なる命令セットでも構わない。
 – 代表的な仮想マシンはQEMU (Main developer: Fabrice
  Bellard)
   • 中間コードを介した動的コンパイルを行うことにより、
     IA32、PowerPC、SPARCなどエミュレート可能
   • アクセラレータ技術(KQEMU)により、多くの命令を
     Native 実行することで高速化することもできる。
• 問題は遅いこと
Binary Translation
• 初期のVMware workstationで使われた。
   • 異なる特権レベルとセグメントを利用したフォールトハンド
     ラ経由の命令変換。想化で問題になる特権命令やセンシ
     ティブ命令を置き換える変換は再利用される。効率が良
     い実装。
     – 米国特許:6,397,242, Virtualization system including a virtual machine monitor
       for a computer with a segmented architecture, (Date of Patent: May 28, 2002,
       Filed: Oct 26, 1998)
Para-Virtualization (準仮想化)
• IA32の4レベルのリングプロテクションを活用。
 • Ring 0-2は特権、ring3は非特権
Para-Virtualization (準仮想化)
• ゲストOSのカーネル内で仮想化で問題となる部分を変更し、
  Ring1で実行するようにする。ハイパーバイザーはring0で実行

                  Normal OS                           Para-Virtualized
       ring3                               ring3
               App1              App2              App1               App2
               Process
               P                 Process
                                 P                 Process
                                                   P                  Process
                                                                      P




                                                        System Call
       ring2                               ring2
                   System Call




       ring1                               ring1         Guest OS
 3                                                    para-virtualized
 2                                                        Kernel




                                                        Hyper
                                                         Call
 1
 0     ring0      Guest OS                 ring0                 HyperVisor
                   Kernel
                                                                  (VMM)
ハードウェアの補助による解決
• Intel VT/AMD-SVM (2005,2006)で導入された機能
• Sensitive且つNon-Privileged命令が実行されるとモードが切
  り替わり、処理をハイパーバイザー(仮想マシンモニタ)が行
  なう
               ドで イ         イザ を動作させ、VMX non
• VMX rootモードでハイパーバイザーを動作させ、VMX non-
        root
  rootモードでゲストOSを動作させる。
• ゲストOSは何も変更せず、仮想化される。
          3           VM exit     3
          2                       2
          1                       1
          0                       0
                      VM entry


       VMX non-root              VMX root
ハードウェアの補助による解決
• KVM, Xen, Vmwareなどで活用されている
               Guest OS                                 Hypervisor(VMM)
    ring3                                     ring3
            App1                App2
            Process             Process


    ring2         Sys
                    stem Call                 ring2



    ring1                                     ring1



    ring0      Guest OS                       ring0         Hypervisor
                Kernel                    Hyper Call         (VMM)



   VMX non-root                                  VMX root
コンテンツ
• マルウェア解析に仮想マシンを使う理由
 – Anti-Debugger
• 仮想化技術の詳細
• マルウェア解析に必要な技術
    ウ  解析に必要な技術
 – InstrumentとIntrospection
• 具体例:Virt-ICE
• 問題点と現在の動向
• まとめ
Guest OS解析で必要となる技術
• Instrument (VMの操作)
  1.   Virtual/Physical mappingを理解したメモリ操作
  2.   Break Point (hardware/Software breakpoint)
  3.   STEP実行
  4.   レジスタ操作
  5.   VM Snapshot/Rollback
       1,2,3は仮想マシン実装法で問題を引き起こす
• Introspection (Guest OS解析)
  – Semantic gap 問題
  – メモリの内容解析 (Memory Forensic)
仮想マシンにおけるInstrumentの問題点
1. Virtual/Physical mappingを理解したメモリ操作
  – Page Table管理はOSのポリシーに依存するので、
    VM Introspectionとの連携が必要
2. Break Point (hardware/Software breakpoint)
  – IA32ではhardware BPの設定は4個まで。 Anti-
    Debuggerで検出可能。
  – Software BPのためにInt03(0xCC)を使うとAnti-
    Debuggerで検出されてしまう。
  – 命令にBreakPointがあることを隠す必要あり。
     • CPUエミュレーションの中に埋め込む
仮想マシンにおけるInstrumentの問題点
3. STEP実行
 – ハードウェアのTrap Flagを使った実行では隠した命
   令までSTEP実行されてしまう。 Anti-Debuggerで検
   出可能。
 – 各命令がSTEP実行されることを隠す必要あり。
   • CPUエミュレーションの中に埋め込む
仮想化技術とVM操作性
                 Memory       Break Point   STEP        Manipulate   VM
                 Manipulation               execution   Register     Snapshot
                                                                     Rollback
Emulator              ○
(QEMU)                             ○            ○           ○            ○
                 Inspectionと連携

Binary
Translator            ○            ?            ?           ○            ○
                 Inspectionと連携
(VMware)
Para-
Virtualization        ○            ×            ×           ○            ○
                 Inspectionと連携
(Xen)
Hardware
Assist
(KVM, Xen,            ○            ×            ×           ○            ○
VMware with      Inspectionと連携
Intel VT, AMD
SVM)
Semantic Gap問題
• Virtual Machineはハードウェアの仮想化のみ
  であり、ハードウェアの変更情報以外は取れ
  ない
• OSのポリシ で決める情報は取れない
  OSのポリシーで決める情報は取れない
 – Virtual Memory/Physical Memory Mapping
 – PID
 – Scheduling
 – Swap out/in
Semantic Gapの解決
• メモリ内の解析が必要
• Memory Forensicの技術を使う
 – Signature Scanning (locate objects)
    • VMでは生のメモリをアクセス出来るのみであり メモリ
      VMでは生のメモリをアクセス出来るのみであり、メモリ
      中のObjectデータ構造を見つける必要がある
 – Object Traversal
    • Objectデータ構造の理解
コンテンツ
• マルウェア解析に仮想マシンを使う理由
 – Anti-Debugger
• 仮想化技術の詳細
• マルウェア解析に必要な技術
    ウ  解析に必要な技術
 – InstrumentとIntrospection
• 具体例:Virt-ICE
• 問題点と現在の動向
• まとめ
Virt-ICE
• BlackHat2010で発表したマルウェア解析ツール
 – QEMUベース。2つのモジュールを組み込む
   • Instrument(VMの操作)としてのKobuta
   • Introspection (Guest OS解析)としてのEagleEye
             VM (QEMU)

         GuestOS (Windows)




           Virt-ICE Module
                                      Virt-ICE
    Introspection   Instrumentation
                                       Client
      (EagleEye)        (Kobuta)
Instrument(VMの操作)としてのKobuta
 • QEMUでのCPU操作の問題点
  – 高速化ために単純なインタプリタでなくJIT(Just-In-
    Time)による命令変換。
  – TCG(Tiny Code Generator)により中間表現 IR
    (Intermediate Representative)に置き換えてから
                  Representative)に置き換えてから、
    ホストCPU命令に変換。
 • KobutaのInstrumentはTCG IRレベルで行う。
  – CPUアーキテクチャ依存部分は例外として扱われ
    るので、それに対応したHookを書ける。
KobutaによるSYSENTERのHook
/* targeti386/op_helper.c */
void helper_sysenter(void)
{ ....
if (kobuta_ins_sysenter) { /* SYSENTER hook has been registered? */
    /* Then is it necessary to synchronize CPU context? */
    if (kobuta_ins_sysenter_cpusync == KOBUTA CPUSYNC ENABLE)
       (kobuta ins sysenter cpusync      KOBUTA_CPUSYNC_ENABLE)
        kobuta_syn_cpucontext(); /* Synchronize CPU context on demand*/
    kobuta_sysenter(); /*Finally, execute all registered handlers for SYSENTER*/
} ...
}
Kobuta Framework
• 有用な箇所にHookをかける
 –   Begin/end of instruction/block
 –   Jump/call
 –   Interrupt begin/end
 –   Sysenter/Sysexit/Syscall/Sysret
 –   Input/Output
 –   Update control registers (CR0, CR2, CR3, CR4)
 –   RDMSR, WRMSR (read/write to Model Specific Register)
 –   Memory access (read/write)
高速化
• QEMUは基本的にエミュレータなので遅い
• これを高速化するKQEMUが開発されている
 – 多くの命令を直接実行するモジュール
              0.12.0でサポ トされなくなった
 – KQEMUはQEMU 0 12 0でサポートされなくなった
   がKobutaが使う 0.12.04にforward-port
• 残念ながらKQEMUとKobutaとは共存できない
 – 動的にKobutaと切り替える機能を開発
   • Kobutaを使っていなければKQEMUを有効にする
Introspection (Guest OS解析)としてのEagleEye
• 必要な機能
  – Signature Scanning (locate objects)
  – Object Traversal
• 必要なオブジェクト(情報)
  –   Kernel modules
  –   Processes/threads
  –   System handles
  –   Registries
  –   DLLs
  –   Network connections/ports

• 問題点:Windowsではこれらの詳細情報が公開
  されていない
ReactOSの活用
• WindowsXP/2003 バイナリレベルおける互換性
  確保を目指して開発が進められているフリーソ
  フトウェア
 – http://www.reactos.org
• データ構造を表すHeader情報を活用する
サンプルReactOSコード
typedef struct _EPROCESS { … // removed some fields for brevity
#if (NTDDI_VERSION < NTDDI_WS03)
   FAST_MUTEX WorkingSetLock;
#endif
   ULONG WorkingSetPage;
#if (NTDDI_VERSION >= NTDDI_LONGHORN)
   EX_PUSH_LOCK AddressCreationLock;
   PETHREAD RotateInProgress;
#else
   KGUARDED_MUTEX AddressCreationLock;
   KSPIN_LOCK HyperSpaceLock;
#endif
… } EPROCESS, *PEPROCESS;



• この情報からEPROCESSの構造体を推定
EagleEyeのAPI
/* <eagleye/windows.h> */
/* get process image filename, given its EPROCESS address */
int windows_task_imagename(ee_t h, unsigned long eprocess, char *name,
unsigned int count);

/* get process id, given its EPROCESS address */
int windows task pid(ee t h unsigned long eprocess unsigned long *pid);
    windows_task_pid(ee_t h,              eprocess,               pid);

/* get parent process id, given its EPROCESS address */
int windows_task_ppid(ee_t h, unsigned long eprocess, unsigned long
*ppid);

/* get process cmdline, given its EPROCESS address */
int windows_task_cmdline(ee_t h, unsigned long eprocess, char *cmdline,
unsigned int count);
Virt-ICEのデバッグ機能
• Virt-ICE Clientからデバッグコマンド送って解析

                                   Set execution breakpoint: db s <address>

                                   Singlestep: db s

         VM (QEMU)                 Run until RET: db R

     GuestOS (Windows)             Pause guest VM: db C

                                   Resume guest VM: db r




       Virt-ICE Module
                                            Virt-ICE
Introspection    Instrumentation
                                             Client
  (EagleEye)         (Kobuta)
コンテンツ
• マルウェア解析に仮想マシンを使う理由
 – Anti-Debugger
• 仮想化技術の詳細
• マルウェア解析に必要な技術
    ウ  解析に必要な技術
 – InstrumentとIntrospection
• 具体例:Virt-ICE
• 問題点と現在の動向
• まとめ
マルウェア解析に仮想マシンを使う問題点

• 仮想マシン検出技術を行うマルウェア
 – 外部時計を使った実行時間計測
  • Anti-Debuggerと同じ
 – 仮想マシンでも完全に仮想化している訳ではない
仮想マシンの検出技術
• CPUアーキテクチャが固定
 – 仮想マシン自体がVirtualと付けたデバイスも多い
    VMware
    # dmesg | grep -i virtual
       VMware vmxnet virtual NIC driver
          Vendor: VMware M d l Vi t l di k R 1 0
          V d VM            Model: Virtual disk Rev: 1.0
          hda: VMware Virtual IDE CDROM Drive, ATAPI CD/DVD-ROM
      drive
    QEMU
    # dmesg | grep -i virtual
      CPU: AMD QEMU Virtual CPU version 0.9.1 stepping 03 Virtal PC
    VirtualPC
    # dmesg | grep -i virtual
      hda: Virtual HD, ATA DISK drive
      hdc: Virtual CD, ATAPI CD/DVD-ROM drive
仮想マシンの検出技術
• ゲストOSとホストOSでのDrag&Dropするための
  BackDoor I/O port (VMware)
• Interrupt Descriptor Table(IDT) の差異検出
  (RedPillが利用)
• Local Descriptor Table(LDT) の差異検出
                        (    )
  (Confickerが利用)

• それぞれ対応が考えられているが、Anti-
  Degubberと同じでイタチごっこ
エミュレータ以外の実装[今後の課題]
• Intel VT/AMD SVM を使った仮想マシン(KVM,
  Xenなど)での実装
 – 問題は「Breakpointが制限されていること」と「
   STEP実行」だった。
 – Stealth Breakpoints[ACSAC05]の活用
   • 仮想記憶のページフォルトを利用したブレークポイント
     。数に制限はないが遅い。
 – Unlimited watachpoints [2012]
   • ハードウェア拡張した無制限のdata watchpointの提案
VM Instrumentの動向 1/2
• RAW Memoryからのデータ推測
 – DIMSUM [NDSS’12] Dongyan Xu, Purdue University
    • 構造体に入るデータの制約(ポインタが入る場合は4Bバイト
      で上位アドレスは同じものが入るなど)を利用して、Page
            無 も      持 デ タを  リ  取得
      Tableが無くてもプロセスの持つデータをメモリから取得
 – SigGraph[NDSS’11] Zhiqiang Lin, Purdue University
    • プロセスのデータ構造(ポインタのツリー構造)を使い,メモリ
      ダンプからプロセス情報を類推する.メモリフォレンジックの
      一つ.Volatilityより賢いらしい.ライバルはLiveDM[RAID09,
      J. Rhe]
 – Laika [OSDI’08] Anthony Cozzie, UIUC
    • 教師なしBayesian学習によるデータ構造推定
VM Introspectionの動向 2/2
 • GuestOS解析ルーチンを作る労力の低減

      最初のVMI実装。for IDS。            SBCFI                         VMST
      vmcore ダンプファイルを分             カスタマイズされたカーネル                 ユーザ&カーネルコード
      析するcrash utilityを活用。         ソースからの生成                      から自動生成
      [Garfinkel et al, NDSS’03]   [Petroni t l
                                   [P t i et al, CCS’07]         [Fu & Lin, IEEE SSP’12]




The Semantic Gap問題提起               VMWatcher               Virtuoso
[Chen et al, HotOS’01]             手作業の                    実行トレースされたコードから
                                   Instrospecionコード        半自動生成
                                   [Jiang et al, CCS’07]   [Dolan‐Gavitt et al., IEEE
                                                           SSP’11]
VMを使った解析の動向
• In-Kernel Dynamic binary translation (DBT), Peter Feiner (U.
  Toronto) [ASPLOS’12]
   – DynamoRIOをLinuxカーネル内に入れてドライバなどのコントロールフロ
     ー解析を可能にした。
• PinOS, P.P. Bungale(Intel)[Vee’07]
       ,         g (       )[      ]
   – Xenの中にコントロールフロー解析ツールPinを入れてシステム全体の解
     析を可能にした。
• Fiasco.OC microkernel, Aaron Pohle (Dresden工科大学)[Vee‘08]
   – Valgrindをmicrokernel内に入れて、 Object間のCapabilityテストを可能に
     した。
• ステルスデバッガ、川古谷(NTT PF研)[MWS’08]
   – QEMUにデバッガを入れてマルウェア解析を可能にした。
まとめ
• Anti-Debuggerを回避するための仮想化技術
 – 仮想化技術とDebuggerで要求される技術の両立
   の仕方
   • 4つの仮想化(Emulation, Binary Translation, Para-
     Virtualization,
     Virtualization Hardware Assist)
   • VM Instrument (Break Point, STEP 実行)と VM
     Introspection (Signature Scanning とObject Traversal)
• 具体例としてVirt-ICEを紹介
参考文献・ツール
• Nguyen Anh Quynh,Kuniyasu Suzaki, VirtICE: next generation debugger for
  malware analysis, BlackHat 2010
    – Paper: http://media.blackhat.com/bh-us-10/whitepapers/Anh/BlackHat-USA-2010-Anh-Virt-ICE-wp.pdf
    – Slide: https://media.blackhat.com/bh-us-10/presentations/Anh/BlackHat-USA-2010-Anh-Virt-ICE-slides.pdf
• 新井,岩村,古川谷,青木,星澤, アナライジング・マルウェア、オライリー・ジ
  ャパン
• VM Instropection ツール
   – insight-vmi [EuroSec 2011] https://code.google.com/p/insight-vmi/
   – TimeScope [SECURECOMM11]
     http://www4.ncsu.edu/~dsriniv/timescope/timescope.html
   – Ether[CCS2008] http://ether.gtisc.gatech.edu/

More Related Content

仮想化技術によるマルウェア対策とその問題点

  • 1. 仮想化技術によるマルウェア対策と その問題点 2012/07/09 @横浜国立大学 産業技術総合研究所 セキュアシステム研究部門 須崎有康
  • 2. 自己紹介 • 所属:独立行政法人 産業技術総合研究所 – 2001年に通産省傘下の15研究所等を統 合してできた環境・エネルギー、ライフサ イエンス、情報通信・エレクトロニクス、ナ ノテクノロジー・材料・製造、標準・計測、 地質という多様な6分野の研究を行う公 的研究機関。本部を東京及びつくばに置 き、つくばセンターを除く全国8ヶ所に地 域センターを配置。総職員数は約3,000 • 情報セキュリティ研究センター (2005-2012) (研究顧問 松本勉教授) • セキュアシステム研究部門(2012- ) • CD/DVD LinuxのKNOPPIX日本語版
  • 3. コンテンツ • マルウェア解析に仮想マシンを使う理由 – Anti-Debugger • 仮想化技術の詳細 • マルウェア解析に必要な技術 ウ 解析に必要な技術 – InstrumentとIntrospection • 具体例:Virt-ICE • 問題点と現在の動向 • まとめ
  • 4. マルウェア解析に仮想マシンを使う理由 • 最近のマルウェアはdebuggerによる解析を検出 して、それを回避する技術を含んでいる(Anti- Debugger) – [Xu,NDSS08]によると93.9%のマルウェアはAnti- Debuggerの機能がある。 – 多くはこの講義で紹介済みと予想。。。 • Debugger単独では検出し難いマルウェア技術 – ステルス化が進むRootKit – Hidden Process – Memory Dual mapping
  • 5. ステルス化が進むRootKit • システム(OS)の外部で動作する – ファームウェア/BIOSルートキットやSMM(System Management Mode)ルートキット ハイバネーションな SMI (System Management Interrupt) どの割り込み Protect SMM ハイバネーションj時の Mode Mode メモリ退避できるように 全メモリアクセスできる rsm Instrction SMRAM SMM handler SMM Modeのみアクセス できるメモリ。Handlerは Context BIOSによってロード • 仮想化の悪用BluePill [BlackHat 2006, Joanna Rutkowska] – ハードウェアの仮想化支援機能を悪用し、悪意のハイパーバイ ザー(仮想マシンモニタ)をインストール。通常のOSからは検出 できない
  • 6. Hidden Process (Windows) • DKOM(direct kernel object manipulation) – プロセスは双方向のリンクリストで管理。リンクリ ストのリンクを故意に書き換えることで特定のプ ロセスエントリをリストから切り離して隠ぺい – プロセスはスレッドのコンテナ(入れもの)でしか なく処理自体はスレッドによって実行される。 Process Process Process Process A B C D
  • 7. Hidden Process (Linux) • 多くのカーネル情報は/procファイルシステム から取得される。 ps, top, freeコマンドなどのシステム 情報は/proc FSを通して取得、表示 /proc ファイルシステム ユーザ空間 カーネルのシステム情報を通知する特別なファイルシステム カーネル空間で偽の情報を出すような攻撃を カーネル空間 されるとmalware processを隠すことができる malware Process Process Process Process A C D B
  • 8. Memory Dual mapping • Matt “skape” Miller, Using dual-mappings to evade automated unpackers, 2008 より。 • 2つの仮想メモリページを1つ物理メモリページに割り当てる – Executable mapping DEP, Debugger の監視対象は • コードが実行される。Debugger コ ドのみ コードのみ Virtual Vi t l Physical はここのみ監視 – Editable mapping • Packerとして働き、コードを改 Code 変(Self-modification)する Executable • DEP(Data Execution Prevention) を回避して、コード改変 Data データとして実 Editable 行コードを書き 換え
  • 9. Anti-Debuggerへの対処法 • 高機能Debugger – Anti-Debuggerとのイタチごっご • 参考書籍:アナライジング・マルウェア、オライリー・ジャパン • ICE (In-Circuit Emulator) – ハ ドウ アを使ったデバッグ ハードウェアを使ったデバッグ。 ハードウェア情報は全て取れるが、 解析に知識が必要。高価 • 仮想化(仮想マシン)技術 – ICEより安価 – 仮想マシンにも沢山の技術があり、 Anti-Debuuger作成には考慮が必要
  • 10. コンテンツ • マルウェア解析に仮想マシンを使う理由 – Anti-Debugger • 仮想化技術の詳細 • マルウェア解析に必要な技術 ウ 解析に必要な技術 – InstrumentとIntrospection • 具体例:Virt-ICE • 問題点と現在の動向 • まとめ
  • 11. 仮想マシンソフトウェア(ハイバーバイザー or 仮想マシンモニタ)はいくつあるか • 挙げてみると – VMware – Xen – VirtualPC – KVM – Parallels ll l – VirtualBox – QEMU – Hyper-V – BitVisor – LilyVM – Bochs, Plex86, coLinux, sHype, zVM, UserModeLinux, Solaris containers (zones), FreeBSD jail, Linux VServer, Virtuozzo, Cygwin, OpenVZ, SoftwarePod, pearPC, Wine, Tango-VP, Quick Transitive, FAT-Binary, SimOS, Simics, IBM LPAR, ……
  • 12. 仮想マシンの歴史 KVM Xen 仮想化支援 (Full- (Intel VT, AMD-V) Virtualization) Robin,Irvineによる仮想化の IA32 IA32命令要件 USENIX Sec2000 x86 VMware Xen Workstation (Para-Virtualization) (Dynamic Translation) ‘78 16bit ‘85 32bit Popek,Goldbergによる メインフレーム 仮想化の命令要件 仮想化支援 1974 IBM IBM DEC IBM CP/67 370/VM VAX/VMM z/VM 1960 1970 1980 1990 2000
  • 13. 仮想化技術の歴史 • Mainframe • 1967 IBM CP-67 First Hypervisor • IA32 Architecture • 1999 VMware workstation [by Mendel Ronsenblum @Stanford] – Binary Translation on IA32 • 2002&2003 Denali[OSDI’02] Xen[SOSP’03] Denali[OSDI 02], Xen[SOSP 03] – Para-virtualizaiton • 2005&2006 Hardware Assist – Intel-VT/ AMD-SVM – 2006 KVM • [Qumranet(Isreal)->RedHat] • 2006 Amazon EC2 uses Xen
  • 14. 仮想化のメリット • ハイパーバイザー(or 仮想マシンモニタ, Virtual Machine Monitor) は一台の物理マシン上で複 数のOSを実行可能にする • 仮想マシン(VM)は扱いやすい – VMが全く同じマシン環境を提供するのでOSイメー ジを手軽にコピー可能 – ライブマイグレーション(移動) • ロードバランスはハードウェアメンテナンスに活用 – スナップショットとロールバック – VMの操作がソフトウェアで行え、Debugに使える
  • 15. IA32での仮想化の問題点 • 仮想化できない命令 – Sensitiveで且つNon-privileged の命令 • 状態を保存し、以降の命令実効に影響を与える。 • 例外で捕捉できない。 • TLBの仮想化 (今回ここはメインではないのでスキップ) – TLB flashを制御できない。 – TLBはハードウェア制御であり、且つ、アドレス空 間にIDタグが付けられない。 • SPARCでは仮想化可能。 • IOの仮想化 (今回ここはメインではないのでスキップ)
  • 16. Sensitive&Non-privileged命令の仮想化問題 • Sensitiveな命令 – CPUの真の姿が見えてしまう命令 • GDT, LDT, IDTの読出し – 以後の実行に影響を与える命令 • POPF, PUSHF • Privilegedな命令ならトラップで捕捉すること ができるが、 IA32ではSensitiveで且つNon- privileged命令がある。
  • 17. Sensitive&Non-privileged命令問題の解決手法 • ソフトウェアによる解決 1. 命令をソフトでエミュレート。汎用だが遅い。 • QEMU 2. 動的に命令を置き換える • Binary Translation (VMware) y ( ) 3. 問題となる命令を使うソフト(カーネル)を書き換える • Para-Virtualization (Xen), カーネルをring 1実行。 • ハードウェアの補助による解決 4. 仮想化モード対応CPUを使う • Intel VT, AMD-V (2005年以降) • Sensitive且つNon-Privileged命令が実行されるとモードが 切り替わり、処理をVMMが行なう。
  • 18. エミュレーション • 基本的には1命令づつソフトウェアで処理。異 なる命令セットでも構わない。 – 代表的な仮想マシンはQEMU (Main developer: Fabrice Bellard) • 中間コードを介した動的コンパイルを行うことにより、 IA32、PowerPC、SPARCなどエミュレート可能 • アクセラレータ技術(KQEMU)により、多くの命令を Native 実行することで高速化することもできる。 • 問題は遅いこと
  • 19. Binary Translation • 初期のVMware workstationで使われた。 • 異なる特権レベルとセグメントを利用したフォールトハンド ラ経由の命令変換。想化で問題になる特権命令やセンシ ティブ命令を置き換える変換は再利用される。効率が良 い実装。 – 米国特許:6,397,242, Virtualization system including a virtual machine monitor for a computer with a segmented architecture, (Date of Patent: May 28, 2002, Filed: Oct 26, 1998)
  • 21. Para-Virtualization (準仮想化) • ゲストOSのカーネル内で仮想化で問題となる部分を変更し、 Ring1で実行するようにする。ハイパーバイザーはring0で実行 Normal OS Para-Virtualized ring3 ring3 App1 App2 App1 App2 Process P Process P Process P Process P System Call ring2 ring2 System Call ring1 ring1 Guest OS 3 para-virtualized 2 Kernel Hyper Call 1 0 ring0 Guest OS ring0 HyperVisor Kernel (VMM)
  • 22. ハードウェアの補助による解決 • Intel VT/AMD-SVM (2005,2006)で導入された機能 • Sensitive且つNon-Privileged命令が実行されるとモードが切 り替わり、処理をハイパーバイザー(仮想マシンモニタ)が行 なう ドで イ イザ を動作させ、VMX non • VMX rootモードでハイパーバイザーを動作させ、VMX non- root rootモードでゲストOSを動作させる。 • ゲストOSは何も変更せず、仮想化される。 3 VM exit 3 2 2 1 1 0 0 VM entry VMX non-root VMX root
  • 23. ハードウェアの補助による解決 • KVM, Xen, Vmwareなどで活用されている Guest OS Hypervisor(VMM) ring3 ring3 App1 App2 Process Process ring2 Sys stem Call ring2 ring1 ring1 ring0 Guest OS ring0 Hypervisor Kernel Hyper Call (VMM) VMX non-root VMX root
  • 24. コンテンツ • マルウェア解析に仮想マシンを使う理由 – Anti-Debugger • 仮想化技術の詳細 • マルウェア解析に必要な技術 ウ 解析に必要な技術 – InstrumentとIntrospection • 具体例:Virt-ICE • 問題点と現在の動向 • まとめ
  • 25. Guest OS解析で必要となる技術 • Instrument (VMの操作) 1. Virtual/Physical mappingを理解したメモリ操作 2. Break Point (hardware/Software breakpoint) 3. STEP実行 4. レジスタ操作 5. VM Snapshot/Rollback 1,2,3は仮想マシン実装法で問題を引き起こす • Introspection (Guest OS解析) – Semantic gap 問題 – メモリの内容解析 (Memory Forensic)
  • 26. 仮想マシンにおけるInstrumentの問題点 1. Virtual/Physical mappingを理解したメモリ操作 – Page Table管理はOSのポリシーに依存するので、 VM Introspectionとの連携が必要 2. Break Point (hardware/Software breakpoint) – IA32ではhardware BPの設定は4個まで。 Anti- Debuggerで検出可能。 – Software BPのためにInt03(0xCC)を使うとAnti- Debuggerで検出されてしまう。 – 命令にBreakPointがあることを隠す必要あり。 • CPUエミュレーションの中に埋め込む
  • 27. 仮想マシンにおけるInstrumentの問題点 3. STEP実行 – ハードウェアのTrap Flagを使った実行では隠した命 令までSTEP実行されてしまう。 Anti-Debuggerで検 出可能。 – 各命令がSTEP実行されることを隠す必要あり。 • CPUエミュレーションの中に埋め込む
  • 28. 仮想化技術とVM操作性 Memory Break Point STEP Manipulate VM Manipulation execution Register Snapshot Rollback Emulator ○ (QEMU) ○ ○ ○ ○ Inspectionと連携 Binary Translator ○ ? ? ○ ○ Inspectionと連携 (VMware) Para- Virtualization ○ × × ○ ○ Inspectionと連携 (Xen) Hardware Assist (KVM, Xen, ○ × × ○ ○ VMware with Inspectionと連携 Intel VT, AMD SVM)
  • 29. Semantic Gap問題 • Virtual Machineはハードウェアの仮想化のみ であり、ハードウェアの変更情報以外は取れ ない • OSのポリシ で決める情報は取れない OSのポリシーで決める情報は取れない – Virtual Memory/Physical Memory Mapping – PID – Scheduling – Swap out/in
  • 30. Semantic Gapの解決 • メモリ内の解析が必要 • Memory Forensicの技術を使う – Signature Scanning (locate objects) • VMでは生のメモリをアクセス出来るのみであり メモリ VMでは生のメモリをアクセス出来るのみであり、メモリ 中のObjectデータ構造を見つける必要がある – Object Traversal • Objectデータ構造の理解
  • 31. コンテンツ • マルウェア解析に仮想マシンを使う理由 – Anti-Debugger • 仮想化技術の詳細 • マルウェア解析に必要な技術 ウ 解析に必要な技術 – InstrumentとIntrospection • 具体例:Virt-ICE • 問題点と現在の動向 • まとめ
  • 32. Virt-ICE • BlackHat2010で発表したマルウェア解析ツール – QEMUベース。2つのモジュールを組み込む • Instrument(VMの操作)としてのKobuta • Introspection (Guest OS解析)としてのEagleEye VM (QEMU) GuestOS (Windows) Virt-ICE Module Virt-ICE Introspection Instrumentation Client (EagleEye) (Kobuta)
  • 33. Instrument(VMの操作)としてのKobuta • QEMUでのCPU操作の問題点 – 高速化ために単純なインタプリタでなくJIT(Just-In- Time)による命令変換。 – TCG(Tiny Code Generator)により中間表現 IR (Intermediate Representative)に置き換えてから Representative)に置き換えてから、 ホストCPU命令に変換。 • KobutaのInstrumentはTCG IRレベルで行う。 – CPUアーキテクチャ依存部分は例外として扱われ るので、それに対応したHookを書ける。
  • 34. KobutaによるSYSENTERのHook /* targeti386/op_helper.c */ void helper_sysenter(void) { .... if (kobuta_ins_sysenter) { /* SYSENTER hook has been registered? */ /* Then is it necessary to synchronize CPU context? */ if (kobuta_ins_sysenter_cpusync == KOBUTA CPUSYNC ENABLE) (kobuta ins sysenter cpusync KOBUTA_CPUSYNC_ENABLE) kobuta_syn_cpucontext(); /* Synchronize CPU context on demand*/ kobuta_sysenter(); /*Finally, execute all registered handlers for SYSENTER*/ } ... }
  • 35. Kobuta Framework • 有用な箇所にHookをかける – Begin/end of instruction/block – Jump/call – Interrupt begin/end – Sysenter/Sysexit/Syscall/Sysret – Input/Output – Update control registers (CR0, CR2, CR3, CR4) – RDMSR, WRMSR (read/write to Model Specific Register) – Memory access (read/write)
  • 36. 高速化 • QEMUは基本的にエミュレータなので遅い • これを高速化するKQEMUが開発されている – 多くの命令を直接実行するモジュール 0.12.0でサポ トされなくなった – KQEMUはQEMU 0 12 0でサポートされなくなった がKobutaが使う 0.12.04にforward-port • 残念ながらKQEMUとKobutaとは共存できない – 動的にKobutaと切り替える機能を開発 • Kobutaを使っていなければKQEMUを有効にする
  • 37. Introspection (Guest OS解析)としてのEagleEye • 必要な機能 – Signature Scanning (locate objects) – Object Traversal • 必要なオブジェクト(情報) – Kernel modules – Processes/threads – System handles – Registries – DLLs – Network connections/ports • 問題点:Windowsではこれらの詳細情報が公開 されていない
  • 38. ReactOSの活用 • WindowsXP/2003 バイナリレベルおける互換性 確保を目指して開発が進められているフリーソ フトウェア – http://www.reactos.org • データ構造を表すHeader情報を活用する
  • 39. サンプルReactOSコード typedef struct _EPROCESS { … // removed some fields for brevity #if (NTDDI_VERSION < NTDDI_WS03) FAST_MUTEX WorkingSetLock; #endif ULONG WorkingSetPage; #if (NTDDI_VERSION >= NTDDI_LONGHORN) EX_PUSH_LOCK AddressCreationLock; PETHREAD RotateInProgress; #else KGUARDED_MUTEX AddressCreationLock; KSPIN_LOCK HyperSpaceLock; #endif … } EPROCESS, *PEPROCESS; • この情報からEPROCESSの構造体を推定
  • 40. EagleEyeのAPI /* <eagleye/windows.h> */ /* get process image filename, given its EPROCESS address */ int windows_task_imagename(ee_t h, unsigned long eprocess, char *name, unsigned int count); /* get process id, given its EPROCESS address */ int windows task pid(ee t h unsigned long eprocess unsigned long *pid); windows_task_pid(ee_t h, eprocess, pid); /* get parent process id, given its EPROCESS address */ int windows_task_ppid(ee_t h, unsigned long eprocess, unsigned long *ppid); /* get process cmdline, given its EPROCESS address */ int windows_task_cmdline(ee_t h, unsigned long eprocess, char *cmdline, unsigned int count);
  • 41. Virt-ICEのデバッグ機能 • Virt-ICE Clientからデバッグコマンド送って解析 Set execution breakpoint: db s <address> Singlestep: db s VM (QEMU) Run until RET: db R GuestOS (Windows) Pause guest VM: db C Resume guest VM: db r Virt-ICE Module Virt-ICE Introspection Instrumentation Client (EagleEye) (Kobuta)
  • 42. コンテンツ • マルウェア解析に仮想マシンを使う理由 – Anti-Debugger • 仮想化技術の詳細 • マルウェア解析に必要な技術 ウ 解析に必要な技術 – InstrumentとIntrospection • 具体例:Virt-ICE • 問題点と現在の動向 • まとめ
  • 43. マルウェア解析に仮想マシンを使う問題点 • 仮想マシン検出技術を行うマルウェア – 外部時計を使った実行時間計測 • Anti-Debuggerと同じ – 仮想マシンでも完全に仮想化している訳ではない
  • 44. 仮想マシンの検出技術 • CPUアーキテクチャが固定 – 仮想マシン自体がVirtualと付けたデバイスも多い VMware # dmesg | grep -i virtual VMware vmxnet virtual NIC driver Vendor: VMware M d l Vi t l di k R 1 0 V d VM Model: Virtual disk Rev: 1.0 hda: VMware Virtual IDE CDROM Drive, ATAPI CD/DVD-ROM drive QEMU # dmesg | grep -i virtual CPU: AMD QEMU Virtual CPU version 0.9.1 stepping 03 Virtal PC VirtualPC # dmesg | grep -i virtual hda: Virtual HD, ATA DISK drive hdc: Virtual CD, ATAPI CD/DVD-ROM drive
  • 45. 仮想マシンの検出技術 • ゲストOSとホストOSでのDrag&Dropするための BackDoor I/O port (VMware) • Interrupt Descriptor Table(IDT) の差異検出 (RedPillが利用) • Local Descriptor Table(LDT) の差異検出 ( ) (Confickerが利用) • それぞれ対応が考えられているが、Anti- Degubberと同じでイタチごっこ
  • 46. エミュレータ以外の実装[今後の課題] • Intel VT/AMD SVM を使った仮想マシン(KVM, Xenなど)での実装 – 問題は「Breakpointが制限されていること」と「 STEP実行」だった。 – Stealth Breakpoints[ACSAC05]の活用 • 仮想記憶のページフォルトを利用したブレークポイント 。数に制限はないが遅い。 – Unlimited watachpoints [2012] • ハードウェア拡張した無制限のdata watchpointの提案
  • 47. VM Instrumentの動向 1/2 • RAW Memoryからのデータ推測 – DIMSUM [NDSS’12] Dongyan Xu, Purdue University • 構造体に入るデータの制約(ポインタが入る場合は4Bバイト で上位アドレスは同じものが入るなど)を利用して、Page 無 も 持 デ タを リ 取得 Tableが無くてもプロセスの持つデータをメモリから取得 – SigGraph[NDSS’11] Zhiqiang Lin, Purdue University • プロセスのデータ構造(ポインタのツリー構造)を使い,メモリ ダンプからプロセス情報を類推する.メモリフォレンジックの 一つ.Volatilityより賢いらしい.ライバルはLiveDM[RAID09, J. Rhe] – Laika [OSDI’08] Anthony Cozzie, UIUC • 教師なしBayesian学習によるデータ構造推定
  • 48. VM Introspectionの動向 2/2 • GuestOS解析ルーチンを作る労力の低減 最初のVMI実装。for IDS。 SBCFI VMST vmcore ダンプファイルを分 カスタマイズされたカーネル ユーザ&カーネルコード 析するcrash utilityを活用。 ソースからの生成 から自動生成 [Garfinkel et al, NDSS’03] [Petroni t l [P t i et al, CCS’07] [Fu & Lin, IEEE SSP’12] The Semantic Gap問題提起 VMWatcher Virtuoso [Chen et al, HotOS’01] 手作業の 実行トレースされたコードから Instrospecionコード 半自動生成 [Jiang et al, CCS’07] [Dolan‐Gavitt et al., IEEE SSP’11]
  • 49. VMを使った解析の動向 • In-Kernel Dynamic binary translation (DBT), Peter Feiner (U. Toronto) [ASPLOS’12] – DynamoRIOをLinuxカーネル内に入れてドライバなどのコントロールフロ ー解析を可能にした。 • PinOS, P.P. Bungale(Intel)[Vee’07] , g ( )[ ] – Xenの中にコントロールフロー解析ツールPinを入れてシステム全体の解 析を可能にした。 • Fiasco.OC microkernel, Aaron Pohle (Dresden工科大学)[Vee‘08] – Valgrindをmicrokernel内に入れて、 Object間のCapabilityテストを可能に した。 • ステルスデバッガ、川古谷(NTT PF研)[MWS’08] – QEMUにデバッガを入れてマルウェア解析を可能にした。
  • 50. まとめ • Anti-Debuggerを回避するための仮想化技術 – 仮想化技術とDebuggerで要求される技術の両立 の仕方 • 4つの仮想化(Emulation, Binary Translation, Para- Virtualization, Virtualization Hardware Assist) • VM Instrument (Break Point, STEP 実行)と VM Introspection (Signature Scanning とObject Traversal) • 具体例としてVirt-ICEを紹介
  • 51. 参考文献・ツール • Nguyen Anh Quynh,Kuniyasu Suzaki, VirtICE: next generation debugger for malware analysis, BlackHat 2010 – Paper: http://media.blackhat.com/bh-us-10/whitepapers/Anh/BlackHat-USA-2010-Anh-Virt-ICE-wp.pdf – Slide: https://media.blackhat.com/bh-us-10/presentations/Anh/BlackHat-USA-2010-Anh-Virt-ICE-slides.pdf • 新井,岩村,古川谷,青木,星澤, アナライジング・マルウェア、オライリー・ジ ャパン • VM Instropection ツール – insight-vmi [EuroSec 2011] https://code.google.com/p/insight-vmi/ – TimeScope [SECURECOMM11] http://www4.ncsu.edu/~dsriniv/timescope/timescope.html – Ether[CCS2008] http://ether.gtisc.gatech.edu/