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

解析基盤技術を用いた効率的なソフトウェアテスト

Avatar for Ren Kimura Ren Kimura
August 10, 2016

 解析基盤技術を用いた効率的なソフトウェアテスト

seccamp16 tutor

Avatar for Ren Kimura

Ren Kimura

August 10, 2016
Tweet

More Decks by Ren Kimura

Other Decks in Programming

Transcript

  1. ソフトウェアテスト自動化手法 ❏ 静的解析 ( Static Analysis ) 対象プログラムを動作させずに解析、テストを行う ❏ Control-flow

    Recovery バイナリの命令列から basic blockとflowを復元する技術。 L. Xu et al, “Constructing Precise Control Flow Graphs from Binaries.” [Davis09] ❏ Flow, Data Modeling Detection 復元されたflowの特徴からバグ、脆弱性を検出する技術。既知の脆弱性のみ検出可能。 F. Yamaguchi et al, “Modeling and discovering vulnerabilities with code property graphs” [IEE14]
  2. ソフトウェアテスト自動化手法 ❏ 動的解析 ( Dynamic Analysis ) 対象プログラムに入力データを与え、実際に動作させながら解析、テストを行う ❏ Coverage-based

    Fuzzing コードカバレッジの高い入力データを生成、利用する Fuzzing。 AFLやsyzkallerなどがある。 Charlie Miller, “Fuzzing with Code Coverage By Example” [ToorCon07] ❏ Conclic testing, Under-constrained symbolic execution コードの分岐条件制約とした 充足可能性問題を解き実行経路を検出する。 この際、一部を実行して具体的な値を利用する事で計算量爆発に対処する。 Koushik Sen et al, “CUTE: A Concolic Unit Testing Engine for C” [ESEC13] D.A. Ramos et al, “Under-Constrained Symbolic Execution: Correctness...” [USENIX15]
  3. angrをドライバ解析に使用する事はできるか? “Apparently it doesn't like kernel modules, you need to

    write a custom loader” --Gaby Stanislas Lejay “ANGRY MODULE EXCAVATION” [ LSE16 ] angr meets kernel
  4. angr meets kernel • カーネルモジュールを読むためのローダーを書く必要がある ◦ 実際にやった人がいました -> Stanislas Lejay

    “ANGRY MODULE EXCAVATION” [ LSE16 ] • 長所 ◦ ローダーで読み込んでユーザー空間で動作するため高速 • 短所 ◦ エミュレーションしていないためセマンティクギャップが大きい ▪ 解決できないシンボル ▪ 実行時まで分からない値 … etc それなりに簡単な構造のドライバなら解析できる
  5. Valgrind meets kernel kValgrind(+ debugger)の開発(未踏’16 後藤PM, 木村PJ) • Valgrindというソフトウェアテストツールをカーネルモジュールに対応させる •

    QEMUによりゲストOSをエミュレーション ◦ TCGという中間表現にフックコードを挿入 • ゲスト内にエージェントを配置して VMIを行うことで情報取得 ◦ Qemu guest agentを改造してゲストカーネルモジュールの情報取得を行う QMPを追加 ◦ ゲストはvirtioを通してホストに情報を送信 デバイスドライバのUAF (Use After Free)検知まではできるようになりました https://www.ipa.go.jp/jinzai/mitou/2016/gaiyou_g-1.html
  6. AFL meets kernel Triforce AFL (ncc group ‘16) • AFL

    (American Fuzzy Lop) をLinuxカーネル上で動かせるようにした物 • ゲスト内でエージェントサーバーが動作して、ファジングを行う • QEMUに独自の命令を追加してファジング部分の指定などをゲストOSから行う ◦ アーキテクチャ非依存 ◦ プラットフォーム非依存 paperはまだ発表されていない