iOS Testing Environment
Reading time: 13 minutes
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
Apple Developer Program
プロビジョニングアイデンティティは、Apple開発者アカウントに関連付けられた公開鍵と秘密鍵のコレクションです。アプリに署名するには、99$/年を支払ってApple Developer Programに登録し、プロビジョニングアイデンティティを取得する必要があります。これがないと、物理デバイスでソースコードからアプリケーションを実行することはできません。別の方法としては、脱獄したデバイスを使用することです。
Xcode 7.2以降、Appleは無料のiOS開発プロビジョニングプロファイルを作成するオプションを提供しており、これにより実際のiPhoneでアプリケーションを作成およびテストできます。Xcode --> Preferences --> Accounts --> +(資格情報に新しいアプリIDを追加)--> 作成したApple IDをクリック --> Manage Certificates --> +(Apple Development)--> Done
__次に、iPhoneでアプリケーションを実行するには、まずiPhoneにコンピュータを信頼させる必要があります。その後、Xcodeからアプリケーションをモバイルで実行しようとしますが、エラーが表示されます。設定に移動して、Settings --> General --> Profiles and Device Management --> 信頼されていないプロファイルを選択し、「信頼」**をクリックします。
同じ署名証明書で署名されたアプリケーションは、キーチェーンアイテムのように安全にリソースを共有できます。
プロビジョニングプロファイルは、電話の中に**/Library/MobileDevice/ProvisioningProfiles
**に保存されています。
Simulator
note
シミュレーターはエミュレーターとは異なることに注意してください。シミュレーターはデバイスの動作や機能をシミュレートするだけで、実際にはそれらを使用しません。
Simulator
最初に知っておくべきことは、シミュレーター内でのペンテストは、脱獄したデバイスで行うよりもはるかに制限されるということです。
iOSアプリを構築およびサポートするために必要なすべてのツールは、Mac OSでのみ公式にサポートされています。
Appleの事実上のツールは、iOSアプリケーションを作成/デバッグ/インスツルメントするためのXcodeです。これを使用して、シミュレーターやアプリを構築およびテストするために必要なさまざまなSDK バージョンをダウンロードできます。
公式アプリストアからXcodeをダウンロードすることを強くお勧めします。他のバージョンにはマルウェアが含まれている可能性があります。
シミュレーターのファイルは/Users/<username>/Library/Developer/CoreSimulator/Devices
にあります。
シミュレーターを開くには、Xcodeを実行し、Xcodeタブ --> Open Developer tools --> _Simulator_を押します。
__次の画像で「iPod touch [...]」をクリックすると、テストする他のデバイスを選択できます:
Applications in the Simulator
/Users/<username>/Library/Developer/CoreSimulator/Devices
内には、すべてのインストールされたシミュレーターが見つかります。エミュレーターの1つ内で作成されたアプリケーションのファイルにアクセスしたい場合、どのエミュレーターにアプリがインストールされているかを知るのは難しいかもしれません。正しいUIDを見つけるための簡単な方法は、シミュレーターでアプリを実行し、次のコマンドを実行することです:
xcrun simctl list | grep Booted
iPhone 8 (BF5DA4F8-6BBE-4EA0-BA16-7E3AFD16C06C) (Booted)
UIDがわかれば、その中にインストールされているアプリは/Users/<username>/Library/Developer/CoreSimulator/Devices/{UID}/data/Containers/Data/Application
で見つけることができます。
しかし、驚くべきことに、ここではアプリケーションを見つけることはできません。/Users/<username>/Library/Developer/Xcode/DerivedData/{Application}/Build/Products/Debug-iphonesimulator/
にアクセスする必要があります。
このフォルダ内でアプリケーションのパッケージを見つけることができます。
エミュレーター
Corelliumは唯一の公開されているiOSエミュレーターです。これは、ユーザーごとのライセンスモデルを持つ企業向けSaaSソリューションであり、トライアルライセンスは提供されていません。
ジェイルブレイク不要
非ジェイルブレイクデバイスでiOSアプリケーションをペンテストする方法についてのブログ記事をチェックしてください:
iOS Pentesting withuot Jailbreak
ジェイルブレイキング
Appleは、iPhone上で実行されるコードがAppleによって発行された証明書で署名されている必要があると厳格に要求しています。ジェイルブレイキングは、そのような制限やOSによって設けられた他のセキュリティコントロールを回避するプロセスです。したがって、デバイスがジェイルブレイクされると、アプリがインストールされているかどうかを確認する整合性チェックがパッチされ、バイパスされます。
note
Androidとは異なり、iOSではデバイス上で未署名/信頼されていないコードを実行するために「開発者モード」に切り替えることはできません。
Androidのルート化とiOSのジェイルブレイキング
しばしば比較されますが、Androidのルート化とiOSのジェイルブレイキングは根本的に異なるプロセスです。Androidデバイスのルート化には、su
バイナリのインストールやルート化されたカスタムROMでシステムを置き換えることが含まれる場合がありますが、ブートローダーがアンロックされていれば必ずしもエクスプロイトは必要ありません。カスタムROMのフラッシングは、ブートローダーをアンロックした後にデバイスのOSを置き換え、時にはエクスプロイトが必要です。
対照的に、iOSデバイスはブートローダーがApple署名のイメージのみをブートする制限のため、カスタムROMをフラッシュすることができません。iOSのジェイルブレイキングは、未署名のコードを実行するためにAppleのコード署名保護を回避することを目的としており、Appleの継続的なセキュリティ強化によって複雑化しています。
ジェイルブレイキングの課題
Appleが脆弱性を迅速にパッチするため、iOSのジェイルブレイキングはますます困難になっています。iOSのダウングレードはリリース後の限られた時間内でのみ可能であり、ジェイルブレイキングは時間に敏感な問題です。セキュリティテストに使用されるデバイスは、再ジェイルブレイキングが保証されない限り、更新しない方が良いです。
iOSの更新はチャレンジレスポンスメカニズム(SHSH blobs)によって制御されており、Apple署名のレスポンスに対してのみインストールが許可されます。このメカニズムは「署名ウィンドウ」として知られ、OTAファームウェアパッケージを保存し、後で使用する能力を制限します。IPSW Downloads websiteは、現在の署名ウィンドウを確認するためのリソースです。
ジェイルブレイクの種類
- テザードジェイルブレイクは、各再起動のためにコンピュータ接続を必要とします。
- セミテザードジェイルブレイクは、コンピュータなしで非ジェイルブレイクモードにブートすることを許可します。
- セミアンテザードジェイルブレイクは、コンピュータなしで手動で再ジェイルブレイキングを必要とします。
- アンテザードジェイルブレイクは、再適用なしで恒久的なジェイルブレイクソリューションを提供します。
ジェイルブレイキングツールとリソース
ジェイルブレイキングツールはiOSのバージョンやデバイスによって異なります。Can I Jailbreak?、The iPhone Wiki、およびReddit Jailbreakなどのリソースは最新の情報を提供します。例としては:
デバイスを変更することにはリスクが伴い、ジェイルブレイキングは慎重に行うべきです。
ジェイルブレイキングの利点とリスク
ジェイルブレイキングはOSによって課せられたサンドボックスを解除し、アプリがファイルシステム全体にアクセスできるようにします。この自由により、未承認のアプリのインストールやより多くのAPIへのアクセスが可能になります。しかし、一般ユーザーにとって、ジェイルブレイキングは推奨されません。セキュリティリスクやデバイスの不安定さがあるためです。
ジェイルブレイキング後
ジェイルブレイク検出
いくつかのアプリケーションは、モバイルがジェイルブレイクされているかどうかを検出し、その場合アプリケーションは実行されません
- ジェイルブレイク後、iOSではファイルとフォルダが通常インストールされます。これらを検索してデバイスがジェイルブレイクされているかどうかを判断できます。
- ジェイルブレイクされたデバイスでは、アプリケーションがサンドボックス外の新しいファイルに対して読み書きアクセスを得ます
- 一部のAPI 呼び出しは異なる動作をします
- OpenSSHサービスの存在
/bin/sh
を呼び出すと0ではなく1を返します
ジェイルブレイキングを検出する方法についての詳細情報はこちら。
この検出を回避するために、objectionのios jailbreak disable
を使用することができます。
ジェイルブレイク検出バイパス
- この検出を回避するために、objectionの
ios jailbreak disable
を使用することができます。 - ツールLiberty Lite(https://ryleyangus.com/repo/)をインストールすることもできます。リポジトリが追加されると、アプリは「検索」タブに表示されるはずです。
参考文献
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。