Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

[CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes

1,641 views

Published on

Trueseeingとは筆者たちが開発した、Androidアプリケーションを対象とした脆弱性自動診断ツールである。
TrueseeingにはDalvikバイトコードに対して逆コンパイラを介在させずに直接データフロー解析を行う特徴がある。この特徴によりTrueseeingは基本的な難読化ツールの影響を受けず、DEF CON 23でLinkedIn社により発表されたQARKやMobSFを含む既存の脆弱性自動診断ツールとは一線を画するものとしている。またTrueseeingは脆弱性を発見するだけでなく、一部の脆弱性に対しては直接バイナリパッチを当てて改修できる。現在Trueseeingが検出できる脆弱性はOWASP Mobile Top 10(2015)のほとんどをカバーする。2017年7月のDEF CON 25 Demo Labsにおいて発表し、難読化されたAndroidアプリケーションに対する解析力のデモンストレーションを大々的に行なった。コードは https://github.com/monolithworks/trueseeing で公開している(GPL-3)。

吉村 孝広 - Takahiro Yoshimura -
株式会社モノリスワークスCTO。2012年に経済産業省主催のCTF、「CTFチャレンジジャパン2012」へ有志とともにチームEnemy10として参戦し、関東予選優勝・決勝3位入賞。2013年にはチームSutegoma2の一員としてDEF CON 21 CTFへ参戦し、6位入賞。2017年7月、Androidアプリ自動診断ツール(Trueseeing)をDEF CON 25 Demo Labsで発表した。趣味はバイナリやデバイスの解析。GSDが好き。
吉村 賢哉

吉村 賢哉 - Ken-ya Yoshimura -
ウェブサイト制作から組み込み開発に至るまでさまざまなコンテンツ開発を経て現在に至る。
これまでに培ってきた幅広い知見や技術を背景に国内外の企業へ技術供与を積極的に行なっており、直近では大手IoT関連のサービス立ち上げに協力するなどしている。2017年7月、Androidアプリ自動診断ツール(Trueseeing)をDEF CON 25 Demo Labsで発表した。趣味はrecon、自転車/バイク/車。目新しい技術を用いたプロダクトが好き。GSDも好き。

Published in: Software
  • Be the first to comment

[CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes

  1. 1. TRUESEEING: EFFECTIVE DATAFLOW ANALYSIS OVER DALVIK OPCODES Takahiro / Ken-ya Yoshimura (@alterakey / @ad3liae)
  2. 2. WHO WE ARE ➤ 吉村 孝広 (@alterakey) ➤ 株式会社モノリスワークスCTO ➤ Keybase: 
 https://keybase.io/alterakey ➤ 吉村 賢哉(@ad3liae) ➤ 株式会社モノリスワークスCEO ➤ Keybase:
 https://keybase.io/ad3liae
 ➤ 株式会社モノリスワークスとは?
 http://monolithworks.co.jp/
 ➤ 講演: DEF CON 25 Demo Labs
  3. 3. WHAT WE DO ➤ alterakey ➤ Security Researcher ➤ iOS/Android ➤ Network pentesting ➤ ad3liae ➤ Security Researcher ➤ iOS/Android
  4. 4. FINDING VULNERABILITIES ➤ 静的解析 ➤ 対象のバイナリを解析して挙動を推定 ➤ データフローの解析が重要 ➤ 動的解析 ➤ 対象を実際に動作させて挙動を観測
  5. 5. PROBLEMS ➤ 難読化 ➤ 手法として定着 ➤ 逆コンパイラを阻害 ➤ 動的解析は…? ➤ 許可がない場合も多々 :(

  6. 6. RELATED WORKS ➤ 複数の逆コンパイラを併用
 (QARK et al.) ➤ 速度の問題: さらに低下 ➤ 信頼性の問題
 ➤ 実のところ、単なる併用では答にならな いと感じている…
  7. 7. WHY IS DECOMPILING HARD? ➤ 逆コンパイラの動作には何が必要なのか… ➤ 正確な逆アセンブル結果 ➤ ある種の共通コードパターン
 (e.g. function prologue/epilogue) ➤ 難読化ツールはこれらを妨害
  8. 8. GO DIRECT ➤ Trueseeing ➤ 機能 ➤ データフロー解析 ➤ 定数や型のゆるい推論 ➤ マニフェスト分析 ➤ 逆コンパイラを使用しない ➤ 速度向上 ➤ 頑健性向上 ➤ D8にも対応 ➤ PyPIからすぐに使える!
  9. 9. DISASSEMBLING ➤ ツールチェイン ➤ apktool ➤ SQLite3 DB
  10. 10. MARKING UP ➤ 解釈 ➤ 通常指令 (op) ➤ メタ指令 ➤ .class / .method ➤ .implements / .super etc. ➤ アノテーション類 ➤ マーク ➤ メソッド ➤ クラス
  11. 11. GO FASTER ➤ コードベースをマップする ➤ 定数 ➤ 関数呼び出し ➤ sput (static put) ➤ iput (instance put) ➤ 名前類 (メソッド, クラス) ➤ クラス群の関係性 ➤ 今ごろなぜSQL?
 — 複雑なクエリを効率良く実行 ➤ DBに「考えさせる」設計
  12. 12. DATAFLOW TRACING (1) ➤ Lenient Backtracking ➤ 「関心点」から引数まで ➤ 関心点が何らかの定数に帰着させられ ないか追跡
 (関心点を「解く」) ➤ 関心点の例 ➤ API呼び出しの引数 etc. ➤ レジスタの参照/書込を対応 ➤ move*, const*
  13. 13. DATAFLOW TRACING (2) ➤ Call tracing ➤ 引数から呼び出し元へ ➤ Call stackの上位へ波及 ➤ p*の特殊な取扱い ➤ 正しくない場合もある ➤ R8がp*を積極的に再利用する例 ➤ WIP, 近日対処
  14. 14. DATAFLOW TRACING (3) ➤ Static trace ➤ sget/sputを対応 ➤ sputを解く
  15. 15. DATAFLOW TRACING (4) ➤ Instansic trace ➤ iget/iputを対応 ➤ インスタンス同一性無視
 (WIP) ➤ iputを解く
  16. 16. PATCH AND TIDY ➤ コードベースの部分更新 ➤ 逆アセンブル ➤ コードベース/DBのパッチ ➤ 再アセンブル
  17. 17. BINARY PATCHING ➤ Removing (in smali) ➤ insnの削除 ➤ DBのパッチ
  18. 18. AS AN EXPLOITATION TOOL ➤ デバッグ有効化 ➤ フルバックアップ有効化 ➤ 署名の置き換え ➤ TLS un-pinning (WIP)
  19. 19. REPORTING ➤ 脆弱性をスコア付けして評価 ➤ HTML形式: 読みやすく詳細なレポート ➤ Text形式: CI-friendlyなレポート
  20. 20. SCORING VULNERABILITIES ➤ CVSS 3.0 Temporal ➤ プロファイルによる評価調整 ➤ 脆弱性クラスごとの重要性
  21. 21. REPORTING IN HTML ➤ 詳細かつ明解なレポート ➤ Summary ➤ Description ➤ Solution ➤ Risk Factor ➤ CVSS score ➤ Instances ➤ 人間向け
  22. 22. REPORTING IN TEXT ➤ gcc-like ➤ CI系など向け ➤ Continuous security
 (継続的セキュリティ)
  23. 23. CAPABILITY ➤ OWASP Mobile Top 10 (2016)の
 ほぼ全域をカバー ➤ M1: Improper Platform Usage ➤ M2: Insecure Data Storage ➤ M3: Insecure Communication ➤ M4: Insecure Authentication ➤ M5: Insufficient Cryptography ➤ M6: Insecure Authorization ➤ M7: Client Code Quality Issues ➤ M8: Code Tampering ➤ M9: Reverse Engineering ➤ M10: Extraneous Functionality
  24. 24. CASE STUDY ➤ #1: InsecureBankV2
 (DEFCON 25) ➤ #2: クレジットカードアプリ ➤ #3: 温泉ガイドアプリ paper stack 1 SQ SEPIA 500X by wintersoul1 on flickr, CC-BY-NC-ND 2.0
  25. 25. CASE STUDY #1 ➤ InsecureBankV2 (難読化版) ➤ DEF CON 25で発表 ➤ 優秀な’hack-me’型問題 ➤ もともと難読化されていない ➤ 以下のルールを元に難読化
 “proguard-android-optimize” ➤ パス増加: 5→8 ➤ 全ての最適化を許可
 (i.e. HV class merging etc.)
  26. 26. M1: IMPROPER PLATFORM USAGE ➤ 安全でないBroadcastReceiver ➤ privateに見えるaction name ➤ フルバックアップ可能
  27. 27. M3: INSECURE COMMUNICATION ➤ TLS interception ➤ Certificate pinningの未実施
  28. 28. M5: INSUFFICIENT CRYPTOGRAPHY ➤ 固定パラメータによる暗号系の使用
  29. 29. CASE STUDY #2 ➤ 中国向けクレジットカードアプリ ➤ 現在日本では入手不能
 (地理的制約が適用された?) ➤ 公開β中に発見 ➤ 面白い対象 ➤ 機微情報の取扱い ➤ 大量の個人情報
  30. 30. M1: IMPROPER PLATFORM USAGE ➤ 大量のプライバシー懸念 ➤ 大量のパーミッション宣言
  31. 31. M2: INSECURE STORAGE ➤ world-readableなファイル作成 ➤ 大量のログ出力 ➤ よくある脆弱性
  32. 32. M3: INSECURE COMMUNICATION ➤ 平文http通信を強く示唆 ➤ 位置情報を送信?
  33. 33. M5: INSUFFICIENT CRYPTOGRAPHY ➤ 固定パラメータによる暗号系の使用
  34. 34. M8: CODE TAMPERING ➤ 公開鍵の埋め込み ➤ これを置き換えたらどうなる?
  35. 35. CASE STUDY #3 ➤ 温泉ガイド ➤ Target API > 3
  36. 36. M7: CLIENT CODE QUALITY ➤ addJavascriptInterface()によるカスタムJS インターフェースの使用 ➤ APIレベル17未満ではカスタムJSインター フェースがarbitrary OS command executionへexploitできる可能性 ➤ 条件: ➤ コンテンツのコントロール ➤ 対象あるいは環境のAPIレベルが17未 満
  37. 37. GO FURTHER ➤ 展望・TBD類 ➤ バイナリパッチモードの強化 ➤ 正確性の向上 ➤ シグニチャの追加 ➤ exploitationの追加 ➤ ARMコード解析 ➤ MSILコード解析 ➤ iOSサポート ➤ シンボリック実行の使用 ➤ 自動的な動的解析 摩周湖 by Sendai Blog on flickr, CC-BY 2.0
  38. 38. FURTHER BINARY PATCHING ➤ Status: ほぼdone (近くPR) ➤ Introducing variable (in smali) ➤ ローカルレジスタの確保 ➤ 定数の割り当て ➤ 対象引数の置き換え ➤ DBのパッチ ➤ Introducing function (in smali) ➤ 関数をテンプレートから導入 ➤ 呼び出しの導入 ➤ DBのパッチ ➤ 自動修復機能の強化に必須
  39. 39. FURTHER ACCURACY ➤ Status: ほぼdone (近くPR) ➤ storageのゾーニング
 (e.g. 外部=insecureなど) ➤ 必要な引数のみを解析 ➤ APIの選択的なemulation
 (e.g. StringBuilderなど) ➤ TLS pinningパターンの追加 ➤ 確度の慎重な評価
  40. 40. FURTHER SIGNATURES ➤ Status: WIP ➤ HTTP parameter injection ➤ Path traversal ➤ Client-side XSS/SQLi ➤ 脆弱な暗号系の使用 ➤ rooted端末の不完全な検出 ➤ 機微情報の疑わしい使用 ➤ Taint解析 ➤ File I/O ➤ Network I/O
  41. 41. FURTHER EXPLOITS ➤ Status: WIP ➤ TLS pinningの解除 ➤ フラグ制御型ログの強制出力 ➤ 発見した問題のexploit作成 ➤ API仕様の解析?
  42. 42. ARM CODE ANALYSIS ➤ Status: WIP ➤ ネイティブコード解析 ➤ 検討: radare2 (r2)+VEX IR ➤ 問題: ➤ r2: 時間がかかる ➤ r2: ファイル全体の逆アセンブルができ ない?
 (cf. IDAでのProduce File)
  43. 43. MSIL CODE ANALYSIS ➤ Status: WIP ➤ 主にUnityベースの古いアプリを対象 (Mono) ➤ 検討: CoreCLR
  44. 44. IOS ➤ Status: WIP ➤ Swift, Objective-C, bitcodeによるバイナ リの解析 ➤ 検討: radare2+VEX IR+LLVM tools ➤ 問題: 
 ARMコード解析と同様
  45. 45. TRUE SYMBOLIC EXEC. ➤ Status: 研究中 ➤ シンボリック実行によって ➤ 順方向解析できる ➤ 到達可能性の評価ができる ➤ すると… ➤ コードの部分評価ができる
 (e.g. 変換を解析したり) ➤ 正確性の向上 ➤ 高度な難読化ツールへの耐性 ➤ 検討: VEX IR
  46. 46. AUTOMATIC DYNAMIC ANALYSIS ➤ Status: 研究中 ➤ MobSFのようなもの
  47. 47. CONCLUSION ➤ Trueseeingの特徴は… ➤ 速い ➤ 正確 ➤ 使いやすい ➤ 自由が確約されている IMG_2988s by 不憂照相館 on flickr, CC-BY-NC-ND 2.0
  48. 48. FAST ➤ 逆コンパイラを一切使わない ➤ SQLによる高速な分析 ➤ 複雑なクエリの処理が得意
  49. 49. ACCURATE (1) ➤ Dalvikコードから直接データフローを解 析 ➤ Lenient Backtracking ➤ Call stack tracing ➤ Static tracing ➤ Instansic tracing
  50. 50. ACCURATE (2) ➤ アプリが難読化されていても影響を受けずに解析 できる ➤ M1: 不適切なCP/BRの公開, プライバシーの懸 念, 有効なdebug/backupビット etc. ➤ M2: 安全でないファイルパーミッション, ログ 出力がある問題 etc. ➤ M3: 平文通信, TLS non-pinning etc. ➤ M5: 固定パラメータによる暗号系の使用 etc. ➤ M7: WebView関連の脆弱性 etc. ➤ M8: 公開鍵が埋め込まれている問題 etc. ➤ M9: 難読化の欠如
  51. 51. INTUITIVE ➤ 分かりやすく詳細なレポート ➤ HTML: 人間向け ➤ Text: CI向け ➤ Continuous security
 (継続的セキュリティ)
  52. 52. FREE AS FREEDOM ➤ GPL-3 ➤ https://github.com/monolithworks/ trueseeing ➤ 永久に自由 ➤ 改修やシグニチャを今後拡充 ➤ 便利なだけでなく不可欠な存在を目指し て Freedom by Mochamad Arief on flickr, CC-BY-NC-ND 2.0
  53. 53. QUESTIONS?
  54. 54. BRING YOUR APK!
  55. 55. FIN. 9.11.2017 Monolith Works Inc.

×