$30 off During Our Annual Pro Sale. View Details »

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

Ren Kimura
August 10, 2016

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

seccamp16 tutor

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はまだ発表されていない