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.

Drawing Dataflow On Dalvik Bytecodes

319 views

Published on

Dalvikバイトコードにおけるデータフロー自動解析ならびにtrueseeingについて (セキュリティうどん14杯目 Lighting Talk) #secudon

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Drawing Dataflow On Dalvik Bytecodes

  1. 1. DRAWING DATAFLOW ON DALVIK BYTECODES Takahiro Yoshimura (@alterakey)
  2. 2. WHO I AM ➤ 吉村 孝広 (@alterakey) ➤ 株式会社モノリスワークス CTO ➤ Keybase: 
 https://keybase.io/alterakey ➤ 講演: 
 DEF CON 25 Demo Labs
 CODE BLUE 2017 etc.
  3. 3. WHAT I DO ➤ alterakey ➤ Security Researcher ➤ iOS/Android ➤ Network pentesting
  4. 4. FINDING VULNERABILITIES ➤ 静的解析 ➤ 対象のバイナリを解析して挙動を推定 ➤ データフローの解析が重要 ➤ 動的解析 ➤ 対象を実際に動作させて挙動を観測→触れない
  5. 5. ANATOMY OF ANDROID APPLICATIONS ➤ Binary XML: Android manifest, layouts, etc. ➤ Dalvik VM executable (DEX) ➤ Dalvik: Register-based virtual machine ➤ 16-bit opcodes, 65536 regs ➤ java classes are fused: 65536 methods max. ← multidex ➤ incompatible opcodes! (isomorphicではあるけど)
  6. 6. REVERSING ANDROID APPLICATIONS ➤ Binary XML: apktool ➤ Dalvik VM executable (DEX) ➤ 逆アセンブル ➤ .dex→baksmali (apktool)→.smali ➤ 逆コンパイル: 一般的 ➤ .dex→dex2jar→.jar→JD-GUI, jad, et al.→.java
 .dex→dad→.java
  7. 7. PROBLEMS ➤ 難読化 ➤ 手法として定着 ➤ 逆コンパイラを妨害
  8. 8. WHY IS DECOMPILING HARD? ➤ 逆コンパイラの動作には何が必要なのか… ➤ 正確な逆アセンブル結果 ➤ ある種の共通コードパターン
 (e.g. function prologue/epilogue) ➤ 難読化ツールはこれらを妨害
  9. 9. RELATED WORKS ➤ 複数の逆コンパイラを併用
 (QARK et al.) ➤ 速度の問題: さらに低下 ➤ 信頼性の問題
 ➤ 実のところ、単なる併用では 答にならないと感じている…
  10. 10. GO DIRECT ➤ Trueseeing ➤ 機能 ➤ データフロー解析 ➤ 定数や型のゆるい推論 ➤ マニフェスト分析 ➤ 逆コンパイラを使用しない ➤ 速度向上 ➤ 頑健性向上 ➤ D8にも対応 ➤ PyPIからすぐに使える!
  11. 11. DISASSEMBLING ➤ ツールチェイン ➤ apktool ➤ SQLite3 DB
  12. 12. MARKING UP ➤ 解釈 ➤ 通常指令 (op) ➤ メタ指令 ➤ .class / .method ➤ .implements / .super etc. ➤ アノテーション類 ➤ マーク ➤ メソッド ➤ クラス
  13. 13. GO FASTER ➤ コードベースをマップする ➤ 定数 ➤ 関数呼び出し ➤ sput (static put) ➤ iput (instance put) ➤ 名前類 (メソッド, クラス) ➤ クラス群の関係性 ➤ 今ごろなぜSQL?
 — 複雑なクエリを効率良く実行 ➤ DBに「考えさせる」設計
  14. 14. DATAFLOW TRACING (1) ➤ Lenient Backtracking ➤ 「関心点」から引数まで ➤ 関心点が何らかの定数に帰 着させられないか追跡
 (関心点を「解く」) ➤ 関心点の例 ➤ API呼び出しの引数 etc. ➤ レジスタの参照/書込を対応 ➤ move*, const*
  15. 15. DATAFLOW TRACING (2) ➤ Call tracing ➤ 引数から呼び出し元へ ➤ Call stackの上位へ波及 ➤ p*=パラメータ ➤ 正しくない場合もある ➤ R8/Kotlinがp*を積極的 に再利用するなど
  16. 16. DATAFLOW TRACING (3) ➤ Static trace ➤ sget/sputを対応 ➤ sputを解く
  17. 17. DATAFLOW TRACING (4) ➤ Instansic trace ➤ iget/iputを対応 ➤ インスタンス同一性は現 在無視 (WIP) ➤ iputを解く
  18. 18. VERSATILE ➤ 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
  19. 19. INTUITIVE ➤ CVSS 3.0 Temporal ➤ 分かりやすく詳細なレポート ➤ HTML: 人間向け ➤ Text: CI向け ➤ Continuous security
 (継続的セキュリティ)
  20. 20. BINARY PATCHING ➤ Removing (in smali) ➤ insnの削除 ➤ DBのパッチ
  21. 21. AS AN EXPLOITATION TOOL ➤ Package grabber ➤ Package resigner ➤ デバッグ有効化 ➤ フルバックアップ有効化 ➤ TLS un-pinning (WIP) ➤ etc.
  22. 22. FREE AS FREEDOM ➤ GPL-3 ➤ https://github.com/ monolithworks/trueseeing ➤ 永久に自由 ➤ 改修やシグニチャを今後拡充 ➤ 便利なだけでなく不可欠な存 在を目指して Freedom by Mochamad Arief on flickr, CC-BY-NC-ND 2.0
  23. 23. QUESTIONS?
  24. 24. FIN. 10.2.2018 Monolith Works Inc.

×