drawing dataflow on dalvik bytecodes

24
DRAWING DATAFLOW ON DALVIK BYTECODES Takahiro Yoshimura (@alterakey)

Upload: takahiro-yoshimura

Post on 18-Mar-2018

120 views

Category:

Technology


6 download

TRANSCRIPT

DRAWING DATAFLOW ON DALVIK

BYTECODESTakahiro Yoshimura

(@alterakey)

WHO I AM➤ 吉村 孝広 (@alterakey)

➤ 株式会社モノリスワークスCTO

➤ Keybase: https://keybase.io/alterakey

➤ 講演:

DEF CON 25 Demo LabsCODE BLUE 2017 etc.

WHAT I DO➤ alterakey

➤ Security Researcher

➤ iOS/Android

➤ Network pentesting

FINDING VULNERABILITIES➤ 静的解析

➤ 対象のバイナリを解析して挙動を推定

➤ データフローの解析が重要

➤ 動的解析

➤ 対象を実際に動作させて挙動を観測→触れない

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ではあるけど)

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

PROBLEMS➤ 難読化

➤ 手法として定着

➤ 逆コンパイラを妨害

WHY IS DECOMPILING HARD?➤ 逆コンパイラの動作には何が必要なのか…

➤ 正確な逆アセンブル結果

➤ ある種の共通コードパターン

(e.g. function prologue/epilogue) ➤ 難読化ツールはこれらを妨害

RELATED WORKS➤ 複数の逆コンパイラを併用

(QARK et al.)

➤ 速度の問題: さらに低下

➤ 信頼性の問題

➤ 実のところ、単なる併用では答にならないと感じている…

GO DIRECT➤ Trueseeing ➤ 機能

➤ データフロー解析

➤ 定数や型のゆるい推論

➤ マニフェスト分析

➤ 逆コンパイラを使用しない

➤ 速度向上

➤ 頑健性向上

➤ D8にも対応

➤ PyPIからすぐに使える!

DISASSEMBLING➤ ツールチェイン

➤ apktool

➤ SQLite3 DB

MARKING UP➤ 解釈

➤ 通常指令 (op)

➤ メタ指令

➤ .class / .method

➤ .implements / .super etc. ➤ アノテーション類

➤ マーク

➤ メソッド

➤ クラス

GO FASTER➤ コードベースをマップする

➤ 定数

➤ 関数呼び出し

➤ sput (static put)

➤ iput (instance put)

➤ 名前類 (メソッド, クラス)

➤ クラス群の関係性

➤ 今ごろなぜSQL?

— 複雑なクエリを効率良く実行

➤ DBに「考えさせる」設計

DATAFLOW TRACING (1)➤ Lenient Backtracking

➤ 「関心点」から引数まで

➤ 関心点が何らかの定数に帰着させられないか追跡

(関心点を「解く」)

➤ 関心点の例

➤ API呼び出しの引数 etc.

➤ レジスタの参照/書込を対応

➤ move*, const*

DATAFLOW TRACING (2)➤ Call tracing

➤ 引数から呼び出し元へ

➤ Call stackの上位へ波及

➤ p*=パラメータ

➤ 正しくない場合もある

➤ R8/Kotlinがp*を積極的に再利用するなど

DATAFLOW TRACING (3)➤ Static trace

➤ sget/sputを対応

➤ sputを解く

DATAFLOW TRACING (4)➤ Instansic trace

➤ iget/iputを対応

➤ インスタンス同一性は現在無視 (WIP)

➤ iputを解く

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

INTUITIVE➤ CVSS 3.0 Temporal ➤ 分かりやすく詳細なレポート

➤ HTML: 人間向け

➤ Text: CI向け

➤ Continuous security(継続的セキュリティ)

BINARY PATCHING➤ Removing (in smali)

➤ insnの削除

➤ DBのパッチ

AS AN EXPLOITATION TOOL➤ Package grabber

➤ Package resigner ➤ デバッグ有効化

➤ フルバックアップ有効化

➤ TLS un-pinning (WIP)

➤ etc.

FREE AS FREEDOM➤ GPL-3

➤ https://github.com/monolithworks/trueseeing

➤ 永久に自由

➤ 改修やシグニチャを今後拡充

➤ 便利なだけでなく不可欠な存在を目指して

Freedom by Mochamad Arief on flickr, CC-BY-NC-ND 2.0

QUESTIONS?

FIN.10.2.2018 Monolith Works Inc.