hacktricks/src/mobile-pentesting/ios-pentesting/ios-pentesting-without-jailbreak.md

119 lines
9.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# iOS Pentesting without Jailbreak
{{#include ../../banners/hacktricks-training.md}}
## Main idea
**entitlement `get_task_allow`** で署名されたアプリケーションは、初期アプリケーションのプロセスIDを引数として **`task_for_pid()`** という関数を実行することを許可し、その上でタスクポートを取得(制御し、メモリにアクセスできるようにする)します。
しかし、単にIPAを引き出し、権限で再署名し、デバイスに戻すだけでは簡単ではありません。これはFairPlay保護のためです。アプリの署名が変更されると、DRMデジタル著作権管理キーが **無効化され、アプリは動作しなくなります**
古い脱獄デバイスを使用すれば、IPAをインストールし、**お気に入りのツールを使用して復号化**Iridiumやfrida-ios-dumpなどし、デバイスから引き出すことが可能です。ただし、可能であれば、復号化されたIPAをクライアントにそのまま依頼することをお勧めします。
## Obtain decrypted IPA
### Get it from Apple
1. iPhoneにペンテストするアプリをインストールします。
2. macOS内で[Apple Configurator](https://apps.apple.com/au/app/apple-configurator/id1037126344?mt=12)をインストールして起動します。
3. Macの`Terminal`を開き、`/Users/[username]/Library/Group\\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps`にcdします。後でこのフォルダにIPAが表示されます。
4. iOSデバイスが表示されるはずです。ダブルクリックして、上部メニューバーからAdd + → Appsをクリックします。
5. Addをクリックすると、ConfiguratorがAppleからIPAをダウンロードし、デバイスにプッシュしようとします。前に私の推奨に従ってIPAをすでにインストールしている場合、アプリを再インストールするように求めるプロンプトが表示されます。
6. IPAは`/Users/[username]/Library/Group\\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps`内にダウンロードされ、そこから取得できます。
このプロセスに関する詳細情報は[https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed](https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed)を確認してください。
### Decrypting the app
IPAを復号化するために、インストールします。ただし、古い脱獄iPhoneを持っている場合、アプリケーションによってはそのバージョンがサポートされない可能性があります。通常、アプリは最新のバージョンのみをサポートします。
したがって、インストールするには、IPAを解凍するだけです
```bash
unzip redacted.ipa -d unzipped
```
`Info.plist`を確認して、サポートされている最小バージョンを確認し、デバイスがそれより古い場合は、値を変更してサポートされるようにします。
IPAを再圧縮します:
```bash
cd unzipped
zip -r ../no-min-version.ipa *
```
次に、例えば次のコマンドでIPAをインストールします:
```bash
ideviceinstaller -i no-min-version.ipa -w
```
注意してください、`invalid signature` エラーを防ぐために Cydia から **AppSync Unified tweak** が必要になる場合があります。
インストールが完了したら、Cydia から **Iridium tweak** を使用して復号化された IPA を取得できます。
### 権限のパッチと再署名
`get-task-allow` 権限でアプリケーションを再署名するために、`app-signer``codesign`、および `iResign` のようなツールがいくつか利用可能です。`app-signer` は非常にユーザーフレンドリーなインターフェースを持ち、再署名する IPA ファイルを指定し、**`get-task-allow` を設定**し、使用する証明書とプロビジョニングプロファイルを指定することが非常に簡単です。
証明書と署名プロファイルに関しては、Apple は Xcode を通じてすべてのアカウントに **無料の開発者署名プロファイル** を提供しています。アプリを作成し、1つを設定してください。その後、`Settings``Privacy & Security` に移動し、`Developer Mode` をクリックして **iPhone に開発者アプリを信頼させる** ように設定します。
再署名された IPA を使用して、デバイスにインストールしてペンテストを行う準備が整いました:
```bash
ideviceinstaller -i resigned.ipa -w
```
---
### Developer Modeを有効にする (iOS 16+)
iOS 16以降、Appleは**Developer Mode**を導入しました。`get_task_allow`を持つバイナリ*または*開発証明書で署名されたバイナリは、デバイスでDeveloper Modeが有効になるまで起動を拒否します。このフラグがオンでない限り、Frida/LLDBをアタッチすることもできません。
1. **任意の**開発者署名されたIPAを電話にインストールまたはプッシュします。
2. **設定 → プライバシーとセキュリティ → Developer Mode**に移動し、オンに切り替えます。
3. デバイスが再起動します。パスコードを入力した後、**Developer Modeをオンにする**ように求められます。
Developer Modeは、無効にするか電話を初期化するまでアクティブなままであるため、このステップはデバイスごとに一度だけ実行する必要があります。[Appleのドキュメント](https://developer.apple.com/documentation/xcode/enabling-developer-mode-on-a-device)がセキュリティの影響を説明しています。
### 現代のサイドロードオプション
現在、脱獄なしでサイドロードし、再署名されたIPAを最新の状態に保つための成熟した方法がいくつかあります
| ツール | 要件 | 強み | 制限 |
|------|--------------|-----------|-------------|
| **AltStore 2 / SideStore** | macOS/Windows/Linuxのコンパニオンが7日ごとに無料の開発プロファイルでIPAを再署名 | Wi-Fi経由の自動リロード、iOS 17まで動作 | 同じネットワーク上にコンピュータが必要、Appleによる3アプリ制限 |
| **TrollStore 1/2** | CoreTrustバグに脆弱なiOS 14 15.4.1のデバイス | *永久的*な署名7日制限なしインストール後はコンピュータ不要 | iOS 15.5+ではサポートされていない(バグが修正された) |
現在のiOSバージョンでのルーチンのペンテストには、Alt/Side-Storeが通常最も実用的な選択肢です。
### フック / 動的インスツルメンテーション
`get_task_allow`で署名され、Developer Modeがオンであれば、脱獄デバイスと同様にアプリをフックできます
```bash
# Spawn & attach with objection
objection -g "com.example.target" explore
# Or plain Frida
frida -U -f com.example.target -l my_script.js --no-pause
```
最近のFridaリリース>=16は、ポインタ認証やその他のiOS 17の緩和策を自動的に処理するため、ほとんどの既存のスクリプトはそのまま動作します。
### Jailbreakなしの自動動的分析MobSF
[MobSF](https://mobsf.github.io/Mobile-Security-Framework-MobSF/)は、実際のデバイス上で同じ技術(`get_task_allow`を使用して、開発者署名されたIPAをインストゥルメント化でき、ファイルシステムブラウザ、トラフィックキャプチャ、Fridaコンソールを備えたWeb UIを提供します【】。最も簡単な方法は、DockerでMobSFを実行し、USB経由でiPhoneを接続することです
```bash
docker pull opensecurity/mobile-security-framework-mobsf:latest
docker run -p 8000:8000 --privileged \
-v /var/run/usbmuxd:/var/run/usbmuxd \
opensecurity/mobile-security-framework-mobsf:latest
# Browse to http://127.0.0.1:8000 and upload your resigned IPA
```
MobSFは自動的にバイナリをデプロイし、アプリサンドボックス内にFridaサーバーを有効にし、インタラクティブなレポートを生成します。
### iOS 17 & ロックダウンモードの注意点
* **ロックダウンモード** (設定 → プライバシーとセキュリティ) は、動的リンカーが署名されていないまたは外部署名された動的ライブラリを読み込むのをブロックします。このモードが有効になっている可能性のあるデバイスをテストする際は、**無効**にしておく必要があります。さもなければ、Frida/objectionセッションはすぐに終了します。
* ポインタ認証 (PAC) はA12+デバイス全体で強制されます。Frida ≥16はPACストリッピングを透過的に処理します — 新しいメジャーiOSバージョンがリリースされる際は、*frida-server*とPython/CLIツールチェーンの両方を最新の状態に保ってください。
## 参考文献
- [https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed](https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed)
- Apple開発者ドキュメント デバイスでの開発者モードの有効化: <https://developer.apple.com/documentation/xcode/enabling-developer-mode-on-a-device>
- モバイルセキュリティフレームワーク (MobSF): <https://mobsf.github.io/Mobile-Security-Framework-MobSF/>
{{#include ../../banners/hacktricks-training.md}}