[cb17] trueseeing: effective dataflow analysis over dalvik opcodes

55
TRUESEEING: EFFECTIVE DATAFLOW ANALYSIS OVER DALVIK OPCODES Takahiro / Ken-ya Yoshimura (@alterakey / @ad3liae)

Upload: code-blue

Post on 22-Jan-2018

251 views

Category:

Software


13 download

TRANSCRIPT

Page 1: [CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes

TRUESEEING: EFFECTIVE

DATAFLOW ANALYSIS OVER DALVIK

OPCODESTakahiro / Ken-ya Yoshimura

(@alterakey / @ad3liae)

Page 2: [CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes

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

Page 3: [CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes

WHAT WE DO➤ alterakey

➤ Security Researcher

➤ iOS/Android

➤ Network pentesting

➤ ad3liae

➤ Security Researcher

➤ iOS/Android

Page 4: [CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes

FINDING VULNERABILITIES➤ 静的解析

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

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

➤ 動的解析

➤ 対象を実際に動作させて挙動を観測

Page 5: [CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes

PROBLEMS➤ 難読化

➤ 手法として定着

➤ 逆コンパイラを阻害

➤ 動的解析は…?

➤ 許可がない場合も多々 :(

Page 6: [CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes

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

(QARK et al.)

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

➤ 信頼性の問題

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

Page 7: [CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes

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

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

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

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

Page 8: [CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes

GO DIRECT➤ Trueseeing ➤ 機能

➤ データフロー解析

➤ 定数や型のゆるい推論

➤ マニフェスト分析

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

➤ 速度向上

➤ 頑健性向上

➤ D8にも対応

➤ PyPIからすぐに使える!

Page 9: [CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes

DISASSEMBLING➤ ツールチェイン

➤ apktool

➤ SQLite3 DB

Page 10: [CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes

MARKING UP➤ 解釈

➤ 通常指令 (op)

➤ メタ指令

➤ .class / .method

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

➤ マーク

➤ メソッド

➤ クラス

Page 11: [CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes

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

➤ 定数

➤ 関数呼び出し

➤ sput (static put)

➤ iput (instance put)

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

➤ クラス群の関係性

➤ 今ごろなぜSQL?

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

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

Page 12: [CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes

DATAFLOW TRACING (1)➤ Lenient Backtracking

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

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

(関心点を「解く」)

➤ 関心点の例

➤ API呼び出しの引数 etc.

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

➤ move*, const*

Page 13: [CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes

DATAFLOW TRACING (2)➤ Call tracing

➤ 引数から呼び出し元へ

➤ Call stackの上位へ波及

➤ p*の特殊な取扱い

➤ 正しくない場合もある

➤ R8がp*を積極的に再利用する例

➤ WIP, 近日対処

Page 14: [CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes

DATAFLOW TRACING (3)➤ Static trace

➤ sget/sputを対応

➤ sputを解く

Page 15: [CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes

DATAFLOW TRACING (4)➤ Instansic trace

➤ iget/iputを対応

➤ インスタンス同一性無視

(WIP)

➤ iputを解く

Page 16: [CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes

PATCH AND TIDY➤ コードベースの部分更新

➤ 逆アセンブル

➤ コードベース/DBのパッチ

➤ 再アセンブル

Page 17: [CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes

BINARY PATCHING➤ Removing (in smali)

➤ insnの削除

➤ DBのパッチ

Page 18: [CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes

AS AN EXPLOITATION TOOL➤ デバッグ有効化

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

➤ 署名の置き換え

➤ TLS un-pinning (WIP)

Page 19: [CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes

REPORTING➤ 脆弱性をスコア付けして評価

➤ HTML形式: 読みやすく詳細なレポート

➤ Text形式: CI-friendlyなレポート

Page 20: [CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes

SCORING VULNERABILITIES➤ CVSS 3.0 Temporal ➤ プロファイルによる評価調整

➤ 脆弱性クラスごとの重要性

Page 21: [CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes

REPORTING IN HTML➤ 詳細かつ明解なレポート

➤ Summary

➤ Description

➤ Solution

➤ Risk Factor

➤ CVSS score

➤ Instances ➤ 人間向け

Page 22: [CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes

REPORTING IN TEXT➤ gcc-like

➤ CI系など向け

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

Page 23: [CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes

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

Page 24: [CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes

CASE STUDY➤ #1: InsecureBankV2

(DEFCON 25)

➤ #2: クレジットカードアプリ

➤ #3: 温泉ガイドアプリ

paper stack 1 SQ SEPIA 500X by wintersoul1 on flickr, CC-BY-NC-ND 2.0

Page 25: [CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes

CASE STUDY #1 ➤ InsecureBankV2 (難読化版)

➤ DEF CON 25で発表

➤ 優秀な’hack-me’型問題

➤ もともと難読化されていない

➤ 以下のルールを元に難読化“proguard-android-optimize”

➤ パス増加: 5→8

➤ 全ての最適化を許可(i.e. HV class merging etc.)

Page 26: [CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes

M1: IMPROPER PLATFORM USAGE➤ 安全でないBroadcastReceiver

➤ privateに見えるaction name

➤ フルバックアップ可能

Page 27: [CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes

M3: INSECURE COMMUNICATION➤ TLS interception

➤ Certificate pinningの未実施

Page 28: [CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes

M5: INSUFFICIENT CRYPTOGRAPHY➤ 固定パラメータによる暗号系の使用

Page 29: [CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes

CASE STUDY #2 ➤ 中国向けクレジットカードアプリ

➤ 現在日本では入手不能

(地理的制約が適用された?)

➤ 公開β中に発見

➤ 面白い対象

➤ 機微情報の取扱い

➤ 大量の個人情報

Page 30: [CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes

M1: IMPROPER PLATFORM USAGE➤ 大量のプライバシー懸念

➤ 大量のパーミッション宣言

Page 31: [CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes

M2: INSECURE STORAGE➤ world-readableなファイル作成

➤ 大量のログ出力

➤ よくある脆弱性

Page 32: [CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes

M3: INSECURE COMMUNICATION➤ 平文http通信を強く示唆

➤ 位置情報を送信?

Page 33: [CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes

M5: INSUFFICIENT CRYPTOGRAPHY➤ 固定パラメータによる暗号系の使用

Page 34: [CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes

M8: CODE TAMPERING➤ 公開鍵の埋め込み

➤ これを置き換えたらどうなる?

Page 35: [CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes

CASE STUDY #3 ➤ 温泉ガイド

➤ Target API > 3

Page 36: [CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes

M7: CLIENT CODE QUALITY➤ addJavascriptInterface()によるカスタムJSインターフェースの使用

➤ APIレベル17未満ではカスタムJSインターフェースがarbitrary OS command

executionへexploitできる可能性

➤ 条件:

➤ コンテンツのコントロール

➤ 対象あるいは環境のAPIレベルが17未満

Page 37: [CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes

GO FURTHER➤ 展望・TBD類

➤ バイナリパッチモードの強化

➤ 正確性の向上

➤ シグニチャの追加

➤ exploitationの追加

➤ ARMコード解析

➤ MSILコード解析

➤ iOSサポート

➤ シンボリック実行の使用

➤ 自動的な動的解析

摩周湖 by Sendai Blog on flickr, CC-BY 2.0

Page 38: [CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes

FURTHER BINARY PATCHING➤ Status: ほぼdone (近くPR)

➤ Introducing variable (in smali) ➤ ローカルレジスタの確保

➤ 定数の割り当て

➤ 対象引数の置き換え

➤ DBのパッチ

➤ Introducing function (in smali) ➤ 関数をテンプレートから導入

➤ 呼び出しの導入

➤ DBのパッチ

➤ 自動修復機能の強化に必須

Page 39: [CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes

FURTHER ACCURACY➤ Status: ほぼdone (近くPR)

➤ storageのゾーニング

(e.g. 外部=insecureなど)

➤ 必要な引数のみを解析

➤ APIの選択的なemulation

(e.g. StringBuilderなど)

➤ TLS pinningパターンの追加

➤ 確度の慎重な評価

Page 40: [CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes

FURTHER SIGNATURES➤ Status: WIP

➤ HTTP parameter injection

➤ Path traversal

➤ Client-side XSS/SQLi ➤ 脆弱な暗号系の使用

➤ rooted端末の不完全な検出

➤ 機微情報の疑わしい使用

➤ Taint解析

➤ File I/O

➤ Network I/O

Page 41: [CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes

FURTHER EXPLOITS➤ Status: WIP

➤ TLS pinningの解除

➤ フラグ制御型ログの強制出力

➤ 発見した問題のexploit作成

➤ API仕様の解析?

Page 42: [CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes

ARM CODE ANALYSIS➤ Status: WIP ➤ ネイティブコード解析

➤ 検討: radare2 (r2)+VEX IR

➤ 問題:

➤ r2: 時間がかかる

➤ r2: ファイル全体の逆アセンブルができ

ない?

(cf. IDAでのProduce File)

Page 43: [CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes

MSIL CODE ANALYSIS➤ Status: WIP

➤ 主にUnityベースの古いアプリを対象

(Mono)

➤ 検討: CoreCLR

Page 44: [CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes

IOS➤ Status: WIP

➤ Swift, Objective-C, bitcodeによるバイナリの解析

➤ 検討: radare2+VEX IR+LLVM tools

➤ 問題:

ARMコード解析と同様

Page 45: [CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes

TRUE SYMBOLIC EXEC.➤ Status: 研究中

➤ シンボリック実行によって

➤ 順方向解析できる

➤ 到達可能性の評価ができる

➤ すると…

➤ コードの部分評価ができる(e.g. 変換を解析したり)

➤ 正確性の向上

➤ 高度な難読化ツールへの耐性

➤ 検討: VEX IR

Page 46: [CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes

AUTOMATIC DYNAMIC ANALYSIS➤ Status: 研究中

➤ MobSFのようなもの

Page 47: [CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes

CONCLUSION➤ Trueseeingの特徴は…

➤ 速い

➤ 正確

➤ 使いやすい

➤ 自由が確約されている

IMG_2988s by 不憂照相館 on flickr, CC-BY-NC-ND 2.0

Page 48: [CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes

FAST➤ 逆コンパイラを一切使わない

➤ SQLによる高速な分析

➤ 複雑なクエリの処理が得意

Page 49: [CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes

ACCURATE (1)➤ Dalvikコードから直接データフローを解析

➤ Lenient Backtracking

➤ Call stack tracing

➤ Static tracing

➤ Instansic tracing

Page 50: [CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes

ACCURATE (2)➤ アプリが難読化されていても影響を受けずに解析できる

➤ M1: 不適切なCP/BRの公開, プライバシーの懸念, 有効なdebug/backupビット etc.

➤ M2: 安全でないファイルパーミッション, ログ出力がある問題 etc.

➤ M3: 平文通信, TLS non-pinning etc.

➤ M5: 固定パラメータによる暗号系の使用 etc.

➤ M7: WebView関連の脆弱性 etc.

➤ M8: 公開鍵が埋め込まれている問題 etc.

➤ M9: 難読化の欠如

Page 51: [CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes

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

➤ HTML: 人間向け

➤ Text: CI向け

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

Page 52: [CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes

FREE AS FREEDOM➤ GPL-3

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

➤ 永久に自由

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

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

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

Page 53: [CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes

QUESTIONS?

Page 54: [CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes

BRING YOUR APK!

Page 55: [CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes

FIN.9.11.2017 Monolith Works Inc.