ios-pentest について
ios-pentestは、専用の手順書と方法論ガイドを使ってiOSアプリのセキュリティ評価を進めるスキルです。アプリのバイナリやインストール済みアプリを調査するテスター向けで、偵察から報告までOWASP MASTGの活動を扱います。
主な機能
- 01iOS評価の各段階に対応する手順書
- 02SSLピンニングと脱獄検知のテスト
- 03キーチェーンとアプリ内ストレージの分析
- 04ネットワーク、認証、暗号のテスト
- 05iOS固有の証拠を含む構造化された調査結果
活用シーン
- 01IPAとインストール済みiOSアプリの評価
- 02キーチェーンやアプリファイル内の認証情報の調査
- 03HTTPS、gRPC、WebSocket通信のテスト
- 04OWASP MASTGとMASVS要件の確認
MCP 対応
iOSシミュレーターやデバイスのUI自動化とスクリーンショット取得にMobile MCPを使用すると記載されています。Mobile MCPサーバーの設定例も含みます。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ hardw00t/ ai-security-arsenal --skill ios-pentestインストール後、Claude Code で/ios-pentestを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
checklists/owasp_mastg_ios.mdexamples/initial_setup.mdkeychain_dump.mdssl_bypass_run.mdmethodology/auth_testing.mdcrypto_testing.mddata_storage.mddynamic_analysis.mdnetwork_testing.mdrecon.mdstatic_analysis.mdpayloads/jailbreak_detection_paths.txturl_scheme_tests.txtreferences/bounty_patterns_2024_2026.mdfrida_ios_snippets.mdios_vulns.mdtroubleshooting.mdschemas/finding.jsonscripts/biometric_bypass.jscrypto_hooks.jsjailbreak_bypass.jskeychain_hooks.jsmethod_tracer.jsssl_pinning_bypass.jstemplates/finding_report.mdworkflows/auth_testing.mdcomplete_assessment.mdipa_decryption.mdjailbreak_detection_bypass.mdkeychain_extraction.md詳細
iOS モバイルアプリケーションの侵入テスト
iOS アプリのセキュリティ評価を行うためのシンプルなルーターです。OWASP MASTG の全範囲(偵察 → 静的解析 → 動的解析 → ネットワーク → ストレージ → 暗号 → 認証 → レポート作成)をカバーします。詳細な手順書は workflows/ と methodology/ にあります。必要な場合にのみ読み込んでください。
使用する場面
- 新規の iOS アプリケーションセキュリティ評価(IPA + インストール済みアプリ)。
- SSL ピンニング、脱獄検出、生体認証、デバッグ対策のバイパス。
- キーチェーン/NSUserDefaults/ファイル/SQLite の抽出とトリアージ。
- HTTPS/gRPC/WebSocket トラフィックの傍受と改ざん。
- OWASP MASTG/MASVS のコンプライアンステスト。
- 復号済みまたは暗号化された Mach-O バイナリの解析。
トリガーフレーズ
「pentest iOS app」、「test this IPA」、「bypass SSL pinning iPhone」、「extract keychain」、「MASTG iOS」、「iOS jailbreak bypass」、「analyze .ipa」、「test iPhone app」。
このスキルを使用しない場面
- Android APK の解析 →
android-pentestを使用してください。 - バックエンドの一般的な Web API テスト →
web-pentest/api-pentestを使用してください。 - iOS のソースコードレビュー(リポジトリがある場合) → iOS 言語パックと
secure-code-reviewを使用してください。 - macOS デスクトップアプリの解析 →
macos-pentestを使用してください。
決定木
target acquired?
├── no binary yet → workflows/ipa_decryption.md
└── yes
├── need HTTPS visibility? → workflows/ssl_pinning_bypass.md
├── app exits on jailbroken device? → workflows/jailbreak_detection_bypass.md
├── hunting credentials/tokens? → workflows/keychain_extraction.md
├── testing login / biometric? → workflows/auth_testing.md
└── full engagement → workflows/complete_assessment.md
並列実行のヒント
同時に実行します(独立した I/O で、状態を共有しません)。
class-dump -H App.app/App -o headers/otool -L App.app/Appとotool -hv App.app/Appstrings -a App.app/App | grep ...plutil -p App.app/Info.plist- Objection の列挙を別の spawn で実行。
順番に実行する必要があります(Frida セッション/spawn 状態を共有します)。
- Frida の
--no-pausespawn → バイパススクリプトが読み込まれるまで待機 → アプリを操作 → その後、追加のスクリプトをアタッチ。 - Objection の
ios sslpinning disable→ その後、トラフィックに依存するコマンドを実行。 ideviceimagemounter→ その後、frida-ps -Uを実行。- キーチェーンのダンプには、インストール後にアプリを少なくとも一度起動しておく必要があります。
サブエージェントへの委任
対象範囲を明確に切り分けられる場合は、サブエージェントを起動してください。
- 静的バイナリ解析サブエージェント — 復号済みの
App.app/を渡します。class-dump、otool、strings、フレームワークの一覧取得を並列で実行し、注目すべきクラス、ハードコードされたシークレット、安全でない API の使用状況を構造化した概要として返します。 - キーチェーン抽出サブエージェント —
<bundle_id>を渡します。objection ... keychain dump --jsonを実行し、各エントリーをアクセシビリティ/ACL によって分類して、schemas/finding.jsonに従った検出事項を出力します。 - 任意:メインエージェントが UI を操作している間、Burp をプロキシ API 経由で操作するネットワークキャプチャサブエージェント。
Frida の spawn と計測をサブエージェントに分担させてはいけません。Frida セッションはステートフルで、単一のプロセスに結び付いています。
推論に使う予算
次の場合は、拡張思考を使用してください。
- 逆コンパイルした Objective-C/Swift(Hopper/Ghidra/IDA の出力)を解釈する場合。
- 汎用バイパスが失敗した際に、カスタム Frida フックを設計する場合。
- 暗号処理の流れ(鍵の由来 → 暗号 → ストレージ)を推論する場合。
- 複数の微妙な問題が重なる場合に、MASVS の重大度をトリアージする場合。
次の場合は、拡張思考を省略してください。
scripts/にある既成の Frida/Objection スクリプトを実行する場合。ios keychain dump --jsonの出力を解析する場合(パターンマッチ)。otool/class-dumpの呼び出しと出力の収集。- ファイルのダウンロード、デバイスの列挙、SSH による取得。
マルチモーダルフック
Mobile MCP(@anthropic/mobile-mcp --ios)は、iOS シミュレーター/デバイスの UI 自動化を提供します。
- 脱獄検出モーダル — バイパス前の警告と、バイパス後に警告が表示されなくなった状態をスクリーンショットに撮り、
evidence.screenshotとして保存します。 - 生体認証プロンプト — Face ID/Touch ID のシートをキャプチャしてゲートの存在を証明し、その後、保護された画面にアクセスできたことを確認します。
- アプリスイッチャーのスナップショット漏えい — バックグラウンド移行時に機密データが表示されているスナップショットキャッシュのエントリーをスクリーンショットに撮ります。
- WebView 認証フロー — SSO に関する検出事項のため、ログインのリダイレクトチェーンを視覚的にキャプチャします。
~/.claude/mcp.json:
{"mcpServers": {"mobile-mcp": {"command": "npx", "args": ["-y", "@anthropic/mobile-mcp", "--ios"]}}}
構造化出力
すべての検出事項を、schemas/finding.json に準拠する JSON として出力してください。iOS 固有のフィールド:affected.bundle_id、affected.ios_version、affected.device_udid、affected.jailbroken、mastg_id、evidence.frida_pid、evidence.keychain_dump、evidence.screenshot。
ワークフロー一覧
| ワークフロー | ファイル |
|---|---|
| 完全評価の手順書 | workflows/complete_assessment.md |
| SSL ピンニングのバイパス | workflows/ssl_pinning_bypass.md |
| ジェイルブレイク検出のバイパス | workflows/jailbreak_detection_bypass.md |
| キーチェーンの抽出とトリアージ | workflows/keychain_extraction.md |
| IPA の復号/取得 | workflows/ipa_decryption.md |
| 認証と生体認証のテスト | workflows/auth_testing.md |
方法論一覧
ペイロード一覧
| ファイル | 用途 |
|---|---|
| payloads/jailbreak_detection_paths.txt | iOS アプリがジェイルブレイクの検出時に調べる一般的なファイル/スキーム |
| payloads/url_scheme_tests.txt | URL スキーム/ディープリンクのテストベクトル |
Frida スクリプト一覧(scripts/)
| スクリプト | 用途 |
|---|---|
ssl_pinning_bypass.js | 汎用 SSL/TLS ピンニングのバイパス |
jailbreak_bypass.js | ジェイルブレイク検出のバイパス |
biometric_bypass.js | Touch ID/Face ID のバイパス |
keychain_hooks.js | キーチェーン操作の監視 |
crypto_hooks.js | 暗号操作のトレース |
method_tracer.js | 汎用 Objective-C メソッドトレーサー |
参考資料一覧
| ファイル | 用途 |
|---|---|
| references/ios_vulns.md | iOS の脆弱性クラス、深刻度表、MASVS マップ |
| references/troubleshooting.md | Frida/ピンニング/プロキシの問題のトリアージ |
| references/frida_ios_snippets.md | 再利用可能な Frida コードスニペット |
| references/bounty_patterns_2024_2026.md | 2023年以降のバグバウンティ TTP(URL スキーム/Universal Link の乗っ取り、WebView のディープリンク XSS、キーチェーンの IAM トークンの安全性不備) |
| checklists/owasp_mastg_ios.md | MASTG iOS チェックリスト全体 |
| templates/finding_report.md | Markdown の発見事項テンプレート |
例
| ファイル | 用途 |
|---|---|
| examples/initial_setup.md | 初回接続時の手順書 |
| examples/ssl_bypass_run.md | ピンニングバイパスの手順書 |
| examples/keychain_dump.md | キーチェーンのダンプとトリアージの手順書 |
ツール
| ツール | 用途 | インストール |
|---|---|---|
| Frida / frida-tools | 動的インストルメンテーション | pip install frida-tools (≥ 16.6) |
| Objection | モバイル探索用 REPL | pip install objection (≥ 1.11) |
| libimobiledevice | デバイス通信 | brew install libimobiledevice |
| ios-deploy | アプリのデプロイ | brew install ios-deploy |
| ideviceinstaller | アプリのインストール/一覧表示 | brew install ideviceinstaller |
| class-dump | ObjC ヘッダーの抽出 | brew install class-dump |
| frida-ios-dump | FairPlay の復号 | github.com/AloneMonkey/frida-ios-dump |
| Burp Suite | HTTPS の傍受 | PortSwigger |
| Hopper / IDA / Ghidra | バイナリのリバースエンジニアリング | ベンダー/GitHub |
| Mobile MCP | UI 自動化と画面キャプチャ | npx @anthropic/mobile-mcp --ios |
前提条件のクイックチェック
各作業の前に実行し、ラボ環境が壊れている場合はすぐに中止します。
idevice_id -l # at least one UDID listed
ideviceinfo | grep ProductVersion
frida-ps -U # frida-server reachable
objection -g <bundle_id> explore --startup-command 'ios info binary; exit'
ジェイルブレイク済みのセットアップ:OpenSSH + Frida(Sileo リポジトリ build.frida.re)+ AppSync Unified + Filza。ジェイルブレイクしていない場合の代替手段:objection patchipa で IPA にパッチを適用して Frida Gadget を注入するか、ideviceimagemounter で開発者ディスクイメージをマウントします。
最終検証
2026-04。Frida ≥ 16.6、Objection ≥ 1.11、iOS 15~17 のターゲットで検証済み。iOS 18 以降では、ジェイルブレイクの選択肢はユーザースペースのみ(Dopamine/palera1n rootless)に移行します。SSH のパスは /var/jb/usr/bin/ssh、Frida サーバーの場所は /var/jb/usr/sbin/frida-server です。