Upgrade to Pro — share decks privately, control downloads, hide ads and more …

マルウェア解析におけるセマンティックギャップ

 マルウェア解析におけるセマンティックギャップ

セキュリティ・キャンプ全国大会2014 発表資料 #seccamp #spcamp

Yuma Kurogome

August 13, 2014
Tweet

More Decks by Yuma Kurogome

Other Decks in Programming

Transcript

  1. チュータープレゼン:
    マルウェア解析における
    セマンティックギャップ
    2014/08/13
    セキュリティ・キャンプ全国大会2014
    @ntddk

    View Slide

  2. whoami
    ● @ntddk
    – #include
    ● 慶應義塾大学 SFC 村井研/武田研 B2
    – マルウェアの研究
    ● ゲヒルンという会社で働き始めました
    – スマートフォンアプリの脆弱性診断とか

    View Slide

  3. whoami
    ● #spcamp '11
    ソフトウェアセキュリティクラス 参加
    ● #seccamp '13
    セキュアなシステムをつくろうクラス
    システムソフトウェアゼミ チューター
    ● #seccamp '14
    ソフトウェアセキュリティクラス チューター

    View Slide

  4. whoami
    ● EpsilonDelta
    – メンバーを募集しているっぽいです
    – 明後日のCTFでみなさんの力を見せてください

    View Slide

  5. 話すこと
    ● セマンティックギャップについて紹介します
    – アセンブリ言語とプログラミング言語とのギャップ
    – 仮想マシンモニタとゲストOSとのギャップ
    – コンピュータと人間の認知とのギャップ

    View Slide

  6. セマンティックギャップとは
    ● Semantic Gap(語義の隔たり)
    ● ソースコードとアセンブラと機械語
    ● この違いがあるため、逆コンパイルは難しい

    View Slide

  7. アセンブリ言語とプログラミング言語とのギャッ

    View Slide

  8. 難読化されたマルウェア
    ● マルウェア開発者は解析に時間をかけさせたい
    – コンパイラによる最適化と反対のことをする
    00874389 /EB 05 JMP SHORT sample.00874390
    0087438B |43 INC EBX
    0087438C |41 INC ECX
    0087438D |42 INC EDX
    0087438E |EB 07 JMP SHORT sample.00874397
    00874390 \B8 07000000 MOV EAX,7
    00874395 ^ EB F4 JMP SHORT sample.0087438B
    00874397 C3 RET
    003B0000 B8 07000000 MOV EAX,7
    003B0005 43 INC EBX
    003B0006 41 INC ECX
    003B0007 42 INC EDX
    003B0008 C3 RET

    View Slide

  9. LLVM
    ● 最適化を頑張ってくれるコンパイラ基盤
    ● ソースコードを読み込んで独自の中間コードに
    変換(フロントエンド)
    ● 最適化した上で(ミドルエンド)
    ● コンパイルやJIT、任意の言語のソースコード
    に変換(バックエンド)

    View Slide

  10. LLVM
    ● 最適化を頑張ってくれるコンパイラ基盤
    ● 逆アセンブルコードを読み込んで独自の中間
    コードに変換
    ● 最適化することで難読化を除去できないか?
    ● アセンブリ言語とLLVMの中間コードとの
    ギャップが問題となってくる

    View Slide

  11. LLVM
    ● 逆アセンブルコードを中間コードに変換し、さ
    らにC++などのソースコードに変換することに
    よって、逆コンパイルを実現できないか?
    – C++をC++11に変換するC++11 MigratorやC++を
    JavaScriptに変換するEmscriptenなど参考例がある
    – ただし標準関数のみサポート
    ● プログラミング言語とLLVMの中間コードとの
    ギャップが問題となってくる

    View Slide

  12. LLVMの中間コード
    ● 変換してもこんなんばっか
    ● SSA形式なので無限にレジスタが増える
    llvm_cbe_bb12_2e_i:
    llvm_cbe_tmp__64 = ((unsigned int )(((unsigned int )llvm_cbe_j_2e_018_2e_i) +
    ((unsigned int )1u)));
    if ((llvm_cbe_tmp__64 == 64u)) {
    goto llvm_cbe_test_all_2e_exit;
    } else {
    llvm_cbe_j_2e_018_2e_i__PHI_TEMPORARY = llvm_cbe_tmp__64; /* for
    PHI node */
    goto llvm_cbe_bb7_2e_i;
    }

    View Slide

  13. ● みたいな試みがあります
    ● ぶっちゃけHex-Rays Decompilerのほうがよっ
    ぽどマシ

    View Slide

  14. 仮想マシンモニタとゲストOSとのギャップ

    View Slide

  15. VMI
    ● VM Introspectionという分野
    – 仮想マシンモニタからゲストOSのメモリやデバイ
    スを監視する手法
    – マルウェアを自動で解析するのにも使えそう
    – 最近はクラウドコンピューティングサービスにおい
    てマルウェアを検出するという方向性ばかり
    ● VMIにもセマンティックギャップの問題がある

    View Slide

  16. VMIのセマンティックギャップ
    ● VMの内側と外側で取得できる情報が異なる
    – 解析したいプロセスを特定できない
    – カーネル内のシンボル情報を読み取れない
    ● これを解決する研究がなされてきた

    View Slide

  17. マルウェアの高度化
    ● ルートキット
    – カーネルのデータ構造を改竄し、悪意のシステム
    コールへ実行をリダイレクトしたり、ファイルやメ
    モリを隠蔽したりする
    ● コードインジェクション
    – 他プロセスのメモリに自身をロードして実行状態を
    移す

    View Slide

  18. 既存研究
    TTAnalyze: A Tool for Analyzing Malware[EICAR06]
    – ゲストOSに挿入したmoduleから解析対象を識別す
    ることでセマンティックギャップを解決
    ゲストOSの
    ユーザーモード
    ゲストOSの
    カーネルモード
    仮想マシンモニタ
    ホストOS
    VM Introspectionが
    ゲストに影響を与える
    仮想マシンモニタが
    検出されてしまう

    View Slide

  19. 既存研究
    Ether: Malware Analysis via Hardware Virtualization
    Extensions[ACM08]
    – 事前にOSを解析することでセマンティックギャッ
    プを解決したが、ルートキットなどに対処できない
    ゲストOSの
    ユーザーモード
    ゲストOSの
    カーネルモード
    仮想マシンモニタ
    ホストOS
    VM Introspectionが
    ゲストに影響を与えない
    仮想マシンモニタが
    検出されない

    View Slide

  20. 解析対象の識別方法
    ● VMの外部からはプロセスの情報をそのまま取
    得できないので、
    – コンテキストスイッチによって変化するCR3レジス
    タの値を監視
    – 予めOSを解析してPIDやTIDが保存されている箇所
    を特定 
    – 予めOSが用いるデータ構造体のシグネチャを作成
    – etc...

    View Slide

  21. 既存手法の問題点
    ● そもそもPaaSでのマルウェア検出のみを目的
    としたVMIが多い
    ● ゲストOSを書き換えてしまうと、仮想マシン
    モニタがマルウェアに検出されてしまう
    ● セマンティックギャップを解消した上、さらに
    セマンティックス情報を追跡しなければ、コー
    ドインジェクションやルートキットに対処でき
    ない

    View Slide

  22. 提案手法
    ● オフレコ

    View Slide

  23. ● みたいな研究をしています

    View Slide

  24. コンピュータと人間の認知とのギャップ

    View Slide

  25. マルウェアを理解するには
    ● いくら自動でマルウェアを解析したところで、
    その動作を理解できなければ意味がない
    ● どうすればマルウェアを直感的に理解すること
    ができるか?
    ● 人間が理解できる内容とコンピュータが理解で
    きる内容のギャップ

    View Slide

  26. View Slide

  27. マルウェアの可視化
    ● 直感的にマルウェアの構造を把握する手段
    ● 命令ポインタのログをgraphvizに投げてみた
    – さっきのはWindowsのメモ帳

    View Slide

  28. View Slide

  29. マルウェアの可視化
    ● 何をもとに可視化するか
    – 命令ポインタ
    – API
    – ファイル
    – ネットワークアクセス

    View Slide

  30. マルウェアの可視化
    ● IDA ProのGraph Viewだって可視化
    – コードブロックと条件分岐

    View Slide

  31. マルウェアの可視化
    ● VERA
    http://1.bp.blogspot.com/-OHhtZ567BBs/Tzt9paOnhkI/AAAAAAAAK6Y/wA5CBLGUUnQ/s1600/NotePADUnpacked.png

    View Slide

  32. マルウェアの可視化
    ● どのようなコードがどのように可視化されるか
    覚えなければならない
    – 新しいセマンティックギャップが生まれてしまう
    ● 結局のところ解析者の負担は変わらない?
    ● 可視化によって得られるメリットは何か?

    View Slide

  33. マルウェアの可視化
    ● どのようなコードがどのように可視化されるか
    覚えなければならない
    – 新しいセマンティックギャップが生まれてしまう
    ● 結局のところ解析者の負担は変わらない?
    – 人間が理解しやすい可視化の方式とは
    ● 可視化によって得られるメリットは何か?
    – マルウェア亜種の分類など

    View Slide

  34. 情報セキュリティにおける可視化
    ● マルウェアに限った話ではない
    ● ネットワークの可視化
    – NICTER
    – DAEDALUS
    – NIRVANA改
    http://www.nict.go.jp/info/topics/2014/02/img/seccon2013-1.png

    View Slide

  35. ● みたいな試みがあります

    View Slide

  36. おわりに
    ● セマンティックギャップという視点から、マル
    ウェア解析における3つのトピックについて紹
    介しました
    ● マルウェア解析を主に扱っているのはソフト
    ウェアセキュリティクラスだが、クラスに縛ら
    れることはない

    View Slide