TRUESEEING:
EFFECTIVE
DATAFLOW ANALYSIS
OVER DALVIK
OPCODES
Takahiro / Ken-ya Yoshimura
(@alterakey / @ad3liae)
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
WHAT WE DO
➤ alterakey
➤ Security Researcher
➤ iOS/Android
➤ Network pentesting
➤ ad3liae
➤ Security Researcher
➤ iOS/Android
FINDING VULNERABILITIES
➤ 静的解析
➤ 対象のバイナリを解析して挙動を推定
➤ データフローの解析が重要
➤ 動的解析
➤ 対象を実際に動作させて挙動を観測
PROBLEMS
➤ 難読化
➤ 手法として定着
➤ 逆コンパイラを阻害
➤ 動的解析は…?
➤ 許可がない場合も多々 :(

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

(QARK et al.)
➤ 速度の問題: さらに低下
➤ 信頼性の問題

➤ 実のところ、単なる併用では答にならな
いと感じている…
WHY IS DECOMPILING HARD?
➤ 逆コンパイラの動作には何が必要なのか…
➤ 正確な逆アセンブル結果
➤ ある種の共通コードパターン

(e.g. function prologue/epilogue)
➤ 難読化ツールはこれらを妨害
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がp*を積極的に再利用する例
➤ WIP, 近日対処
DATAFLOW TRACING (3)
➤ Static trace
➤ sget/sputを対応
➤ sputを解く
DATAFLOW TRACING (4)
➤ Instansic trace
➤ iget/iputを対応
➤ インスタンス同一性無視

(WIP)
➤ iputを解く
PATCH AND TIDY
➤ コードベースの部分更新
➤ 逆アセンブル
➤ コードベース/DBのパッチ
➤ 再アセンブル
BINARY PATCHING
➤ Removing (in smali)
➤ insnの削除
➤ DBのパッチ
AS AN EXPLOITATION TOOL
➤ デバッグ有効化
➤ フルバックアップ有効化
➤ 署名の置き換え
➤ TLS un-pinning (WIP)
REPORTING
➤ 脆弱性をスコア付けして評価
➤ HTML形式: 読みやすく詳細なレポート
➤ Text形式: CI-friendlyなレポート
SCORING VULNERABILITIES
➤ CVSS 3.0 Temporal
➤ プロファイルによる評価調整
➤ 脆弱性クラスごとの重要性
REPORTING IN HTML
➤ 詳細かつ明解なレポート
➤ Summary
➤ Description
➤ Solution
➤ Risk Factor
➤ CVSS score
➤ Instances
➤ 人間向け
REPORTING IN TEXT
➤ gcc-like
➤ CI系など向け
➤ Continuous security

(継続的セキュリティ)
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
CASE STUDY
➤ #1: InsecureBankV2

(DEFCON 25)
➤ #2: クレジットカードアプリ
➤ #3: 温泉ガイドアプリ
paper stack 1 SQ SEPIA 500X by wintersoul1 on flickr, CC-BY-NC-ND 2.0
CASE STUDY #1
➤ InsecureBankV2 (難読化版)
➤ DEF CON 25で発表
➤ 優秀な’hack-me’型問題
➤ もともと難読化されていない
➤ 以下のルールを元に難読化

“proguard-android-optimize”
➤ パス増加: 5→8
➤ 全ての最適化を許可

(i.e. HV class merging etc.)
M1: IMPROPER PLATFORM USAGE
➤ 安全でないBroadcastReceiver
➤ privateに見えるaction name
➤ フルバックアップ可能
M3: INSECURE COMMUNICATION
➤ TLS interception
➤ Certificate pinningの未実施
M5: INSUFFICIENT CRYPTOGRAPHY
➤ 固定パラメータによる暗号系の使用
CASE STUDY #2
➤ 中国向けクレジットカードアプリ
➤ 現在日本では入手不能

(地理的制約が適用された?)
➤ 公開β中に発見
➤ 面白い対象
➤ 機微情報の取扱い
➤ 大量の個人情報
M1: IMPROPER PLATFORM USAGE
➤ 大量のプライバシー懸念
➤ 大量のパーミッション宣言
M2: INSECURE STORAGE
➤ world-readableなファイル作成
➤ 大量のログ出力
➤ よくある脆弱性
M3: INSECURE COMMUNICATION
➤ 平文http通信を強く示唆
➤ 位置情報を送信?
M5: INSUFFICIENT CRYPTOGRAPHY
➤ 固定パラメータによる暗号系の使用
M8: CODE TAMPERING
➤ 公開鍵の埋め込み
➤ これを置き換えたらどうなる?
CASE STUDY #3
➤ 温泉ガイド
➤ Target API > 3
M7: CLIENT CODE QUALITY
➤ addJavascriptInterface()によるカスタムJS
インターフェースの使用
➤ APIレベル17未満ではカスタムJSインター
フェースがarbitrary OS command
executionへexploitできる可能性
➤ 条件:
➤ コンテンツのコントロール
➤ 対象あるいは環境のAPIレベルが17未
満
GO FURTHER
➤ 展望・TBD類
➤ バイナリパッチモードの強化
➤ 正確性の向上
➤ シグニチャの追加
➤ exploitationの追加
➤ ARMコード解析
➤ MSILコード解析
➤ iOSサポート
➤ シンボリック実行の使用
➤ 自動的な動的解析
摩周湖 by Sendai Blog on flickr, CC-BY 2.0
FURTHER BINARY PATCHING
➤ Status: ほぼdone (近くPR)
➤ Introducing variable (in smali)
➤ ローカルレジスタの確保
➤ 定数の割り当て
➤ 対象引数の置き換え
➤ DBのパッチ
➤ Introducing function (in smali)
➤ 関数をテンプレートから導入
➤ 呼び出しの導入
➤ DBのパッチ
➤ 自動修復機能の強化に必須
FURTHER ACCURACY
➤ Status: ほぼdone (近くPR)
➤ storageのゾーニング

(e.g. 外部=insecureなど)
➤ 必要な引数のみを解析
➤ APIの選択的なemulation

(e.g. StringBuilderなど)
➤ TLS pinningパターンの追加
➤ 確度の慎重な評価
FURTHER SIGNATURES
➤ Status: WIP
➤ HTTP parameter injection
➤ Path traversal
➤ Client-side XSS/SQLi
➤ 脆弱な暗号系の使用
➤ rooted端末の不完全な検出
➤ 機微情報の疑わしい使用
➤ Taint解析
➤ File I/O
➤ Network I/O
FURTHER EXPLOITS
➤ Status: WIP
➤ TLS pinningの解除
➤ フラグ制御型ログの強制出力
➤ 発見した問題のexploit作成
➤ API仕様の解析?
ARM CODE ANALYSIS
➤ Status: WIP
➤ ネイティブコード解析
➤ 検討: radare2 (r2)+VEX IR
➤ 問題:
➤ r2: 時間がかかる
➤ r2: ファイル全体の逆アセンブルができ
ない?

(cf. IDAでのProduce File)
MSIL CODE ANALYSIS
➤ Status: WIP
➤ 主にUnityベースの古いアプリを対象
(Mono)
➤ 検討: CoreCLR
IOS
➤ Status: WIP
➤ Swift, Objective-C, bitcodeによるバイナ
リの解析
➤ 検討: radare2+VEX IR+LLVM tools
➤ 問題: 

ARMコード解析と同様
TRUE SYMBOLIC EXEC.
➤ Status: 研究中
➤ シンボリック実行によって
➤ 順方向解析できる
➤ 到達可能性の評価ができる
➤ すると…
➤ コードの部分評価ができる

(e.g. 変換を解析したり)
➤ 正確性の向上
➤ 高度な難読化ツールへの耐性
➤ 検討: VEX IR
AUTOMATIC DYNAMIC ANALYSIS
➤ Status: 研究中
➤ MobSFのようなもの
CONCLUSION
➤ Trueseeingの特徴は…
➤ 速い
➤ 正確
➤ 使いやすい
➤ 自由が確約されている
IMG_2988s by 不憂照相館 on flickr, CC-BY-NC-ND 2.0
FAST
➤ 逆コンパイラを一切使わない
➤ SQLによる高速な分析
➤ 複雑なクエリの処理が得意
ACCURATE (1)
➤ Dalvikコードから直接データフローを解
析
➤ Lenient Backtracking
➤ Call stack tracing
➤ Static tracing
➤ Instansic tracing
ACCURATE (2)
➤ アプリが難読化されていても影響を受けずに解析
できる
➤ M1: 不適切なCP/BRの公開, プライバシーの懸
念, 有効なdebug/backupビット etc.
➤ M2: 安全でないファイルパーミッション, ログ
出力がある問題 etc.
➤ M3: 平文通信, TLS non-pinning etc.
➤ M5: 固定パラメータによる暗号系の使用 etc.
➤ M7: WebView関連の脆弱性 etc.
➤ M8: 公開鍵が埋め込まれている問題 etc.
➤ M9: 難読化の欠如
INTUITIVE
➤ 分かりやすく詳細なレポート
➤ HTML: 人間向け
➤ Text: CI向け
➤ Continuous security

(継続的セキュリティ)
FREE AS FREEDOM
➤ GPL-3
➤ https://github.com/monolithworks/
trueseeing
➤ 永久に自由
➤ 改修やシグニチャを今後拡充
➤ 便利なだけでなく不可欠な存在を目指し
て
Freedom by Mochamad Arief on flickr, CC-BY-NC-ND 2.0
QUESTIONS?
BRING YOUR APK!
FIN.
9.11.2017 Monolith Works Inc.

[CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes

  • 1.
  • 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.
    WHAT WE DO ➤alterakey ➤ Security Researcher ➤ iOS/Android ➤ Network pentesting ➤ ad3liae ➤ Security Researcher ➤ iOS/Android
  • 4.
    FINDING VULNERABILITIES ➤ 静的解析 ➤対象のバイナリを解析して挙動を推定 ➤ データフローの解析が重要 ➤ 動的解析 ➤ 対象を実際に動作させて挙動を観測
  • 5.
    PROBLEMS ➤ 難読化 ➤ 手法として定着 ➤逆コンパイラを阻害 ➤ 動的解析は…? ➤ 許可がない場合も多々 :(

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