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

Drawing Dataflow On Dalvik Bytecodes

Mar 18, 2018

Download

Technology

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Drawing Dataflow On Dalvik Bytecodes

DRAWING DATAFLOW ON DALVIK

BYTECODESTakahiro Yoshimura

(@alterakey)

Page 2: Drawing Dataflow On Dalvik Bytecodes

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

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

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

➤ 講演:

DEF CON 25 Demo LabsCODE BLUE 2017 etc.

Page 3: Drawing Dataflow On Dalvik Bytecodes

WHAT I DO➤ alterakey

➤ Security Researcher

➤ iOS/Android

➤ Network pentesting

Page 4: Drawing Dataflow On Dalvik Bytecodes

FINDING VULNERABILITIES➤ 静的解析

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

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

➤ 動的解析

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

Page 5: Drawing Dataflow On Dalvik Bytecodes

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

Page 6: Drawing Dataflow On Dalvik Bytecodes

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

Page 7: Drawing Dataflow On Dalvik Bytecodes

PROBLEMS➤ 難読化

➤ 手法として定着

➤ 逆コンパイラを妨害

Page 8: Drawing Dataflow On Dalvik Bytecodes

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

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

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

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

Page 9: Drawing Dataflow On Dalvik Bytecodes

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

(QARK et al.)

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

➤ 信頼性の問題

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

Page 10: Drawing Dataflow On Dalvik Bytecodes

GO DIRECT➤ Trueseeing ➤ 機能

➤ データフロー解析

➤ 定数や型のゆるい推論

➤ マニフェスト分析

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

➤ 速度向上

➤ 頑健性向上

➤ D8にも対応

➤ PyPIからすぐに使える!

Page 11: Drawing Dataflow On Dalvik Bytecodes

DISASSEMBLING➤ ツールチェイン

➤ apktool

➤ SQLite3 DB

Page 12: Drawing Dataflow On Dalvik Bytecodes

MARKING UP➤ 解釈

➤ 通常指令 (op)

➤ メタ指令

➤ .class / .method

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

➤ マーク

➤ メソッド

➤ クラス

Page 13: Drawing Dataflow On Dalvik Bytecodes

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

➤ 定数

➤ 関数呼び出し

➤ sput (static put)

➤ iput (instance put)

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

➤ クラス群の関係性

➤ 今ごろなぜSQL?

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

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

Page 14: Drawing Dataflow On Dalvik Bytecodes

DATAFLOW TRACING (1)➤ Lenient Backtracking

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

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

(関心点を「解く」)

➤ 関心点の例

➤ API呼び出しの引数 etc.

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

➤ move*, const*

Page 15: Drawing Dataflow On Dalvik Bytecodes

DATAFLOW TRACING (2)➤ Call tracing

➤ 引数から呼び出し元へ

➤ Call stackの上位へ波及

➤ p*=パラメータ

➤ 正しくない場合もある

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

Page 16: Drawing Dataflow On Dalvik Bytecodes

DATAFLOW TRACING (3)➤ Static trace

➤ sget/sputを対応

➤ sputを解く

Page 17: Drawing Dataflow On Dalvik Bytecodes

DATAFLOW TRACING (4)➤ Instansic trace

➤ iget/iputを対応

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

➤ iputを解く

Page 18: Drawing Dataflow On Dalvik Bytecodes

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

Page 19: Drawing Dataflow On Dalvik Bytecodes

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

➤ HTML: 人間向け

➤ Text: CI向け

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

Page 20: Drawing Dataflow On Dalvik Bytecodes

BINARY PATCHING➤ Removing (in smali)

➤ insnの削除

➤ DBのパッチ

Page 21: Drawing Dataflow On Dalvik Bytecodes

AS AN EXPLOITATION TOOL➤ Package grabber

➤ Package resigner ➤ デバッグ有効化

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

➤ TLS un-pinning (WIP)

➤ etc.

Page 22: Drawing Dataflow On Dalvik Bytecodes

FREE AS FREEDOM➤ GPL-3

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

➤ 永久に自由

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

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

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

Page 23: Drawing Dataflow On Dalvik Bytecodes

QUESTIONS?

Page 24: Drawing Dataflow On Dalvik Bytecodes

FIN.10.2.2018 Monolith Works Inc.