TRUESEEING: EFFECTIVE
DATAFLOW ANALYSIS OVER DALVIK
OPCODESTakahiro / 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.