Objection を使用した iOS アプリセキュリティ解析
使用すべき場合
このスキルは以下の場合に使用します:
- 許可された侵入テスト中の iOS アプリケーションのランタイムセキュリティ評価の実施
- iOS キーチェーン、ファイルシステム、メモリの機密データ露出の検査
- セキュリティテスト中のクライアントサイドセキュリティ制御(SSL ピン留め、脱獄検出)のバイパス
- ソースコードにアクセスせずに iOS アプリのランタイム動作の評価
許可なく本番デバイスでこのスキルを使用しないでください — Objection はアプリのランタイム動作を変更し、セキュリティ監視をトリガーする可能性があります。
前提条件
- Python 3.10 以上(pip 付き)
- Objection インストール済み:
pip install objection - Frida インストール済み:
pip install frida-tools - 対象 iOS デバイス(脱獄済みで Frida サーバーが動作しているか、再パッケージ化された IPA を使用した非脱獄デバイス)
- 非脱獄デバイスの場合:
objection patchipaを使用して IPA に Frida Gadget を注入 - iOS テストには macOS 推奨(Xcode、ideviceinstaller)
- USB 接続またはネットワーク Frida サーバー経由の対象デバイス
ワークフロー
ステップ 1: テスト環境の準備
脱獄済みデバイスの場合:
# Cydia/Sileo 経由でデバイスに Frida サーバーをインストール
# SSH でデバイスに接続し、Frida サーバーを起動
ssh root@<device_ip> "/usr/sbin/frida-server -D"
# Frida 接続を確認
frida-ps -U # USB 接続デバイスのプロセス一覧表示
非脱獄デバイスの場合(許可されたテスト):
# IPA に Frida Gadget を注入
objection patchipa --source target.ipa --codesign-signature "Apple Development: [email protected]"
# パッチ済み IPA をインストール
ideviceinstaller -i target-patched.ipa
ステップ 2: Objection を対象アプリにアタッチ
# 実行中のアプリにバンドル ID でアタッチ
objection --gadget "com.target.app" explore
# またはアプリを新たに起動
objection --gadget "com.target.app" explore --startup-command "ios hooking list classes"
アタッチ後、Objection はランタイム探索のための対話型 REPL を提供します。
ステップ 3: データストレージセキュリティ評価(MASVS-STORAGE)
# アプリからアクセス可能な iOS キーチェーンアイテムをダンプ
ios keychain dump
# アプリサンドボックス内のファイル一覧
ios plist cat Info.plist
env # アプリ環境パスの表示
# NSUserDefaults の機密データを検査
ios nsuserdefaults get
# SQLite データベースの一覧表示
sqlite connect app_data.db
sqlite execute query "SELECT * FROM credentials"
# ペーストボードの機密データを確認
ios pasteboard monitor
ステップ 4: ネットワークセキュリティ評価(MASVS-NETWORK)
# SSL/TLS 証明書ピン留めを無効化
ios sslpinning disable
# Burp Suite プロキシでトラフィックを観測してピンバイパスを確認
# ネットワーク関連クラスのメソッド呼び出しを監視
ios hooking watch class NSURLSession
ios hooking watch class NSURLConnection
ステップ 5: 認証と認可の評価(MASVS-AUTH)
# すべての Objective-C クラス一覧
ios hooking list classes
# 認証関連クラスの検索
ios hooking search classes Auth
ios hooking search classes Login
ios hooking search classes Token
# 認証メソッドをフックしてパラメータを観察
ios hooking watch method "+[AuthManager validateToken:]" --dump-args --dump-return
# バイオメトリック認証呼び出しを監視
ios hooking watch class LAContext
ステップ 6: バイナリ保護評価(MASVS-RESILIENCE)
# 脱獄検出の実装を確認
ios jailbreak disable
# 脱獄検出バイパスのシミュレーション
ios jailbreak simulate
# ロード済みフレームワークとライブラリの一覧
memory list modules
# メモリ内の機密文字列を検索
memory search "password" --string
memory search "api_key" --string
memory search "Bearer" --string
# 特定のメモリ領域をダンプ
memory dump all dump_output/
ステップ 7: プラットフォーム連携評価(MASVS-PLATFORM)
# アプリが登録した URL スキームの一覧
ios info binary
ios bundles list_frameworks
# URL スキームハンドラをフック
ios hooking watch method "-[AppDelegate application:openURL:options:]" --dump-args
# クリップボードアクセスを監視
ios pasteboard monitor
# カスタムキーボード制限の確認
ios hooking search classes UITextField
主要概念
| 用語 | 定義 |
|---|---|
| Objection | Frida 上に構築されたランタイムモバイル探索ツールキット。一般的なセキュリティテストタスク用のプリビルドスクリプトを提供 |
| Frida Gadget | アプリプロセスに注入され、脱獄なしで Frida インストルメンテーションを可能にする共有ライブラリ |
| キーチェーン | iOS の安全な資格情報ストレージシステム。Objection は対象アプリのキーチェーンアクセスグループにアクセス可能なアイテムをダンプ可能 |
| SSL ピン留めバイパス | HTTPS トラフィックのプロキシインターセプトを可能にするため、証明書検証ロジックをランタイムで変更 |
| メソッドフック | Objective-C/Swift メソッド呼び出しをランタイムでインターセプトし、引数、戻り値の観察、動作の変更を行う |
ツール&システム
- Objection: 高レベルな Frida 駆動モバイルセキュリティ探索ツールキット。プリビルドコマンドを提供
- Frida: 動的インストルメンテーションフレームワーク。ネイティブアプリプロセスへの JavaScript 注入を提供
- Frida-tools: frida-ps、frida-trace、frida-discover などの Frida 用 CLI ユーティリティ
- ideviceinstaller: USB 経由での iOS アプリのインストール・管理のためのクロスプラットフォームツール
- Burp Suite: SSL ピン留めバイパス後のトラフィックインターセプト用 HTTP プロキシ
一般的な落とし穴
- アタッチ時にアプリがクラッシュ: 一部のアプリは Frida 検出を実装しています。アプリライフサイクルの初期に
--startup-commandを使用してアンチ Frida チェックをフックしてください。 - キーチェーンアクセス範囲: Objection はアプリのアクセスグループ内のキーチェーンアイテムのみをダンプできます。システムキーチェーンアイテムには別途脱獄レベルのツールが必要です。
- Swift 名前マングリング: Swift メソッド名はランタイムでマングルされます。
ios hooking list classesを grep と組み合わせてデマングルされた名前を見つけてください。 - 非永続的な変更: すべての Objection の変更はランタイムのみで、アプリ再起動時にリセットされます。発見事項はすぐに文書化してください。