hacktricks/mobile-pentesting/ios-pentesting/ios-testing-environment.md

14 KiB
Raw Blame History

iOS Testing Environment

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %} {% endhint %}

Apple Developer Program

プロビジョニングアイデンティティは、Apple開発者アカウントに関連付けられた公開鍵と秘密鍵のコレクションです。アプリに署名するには、99$/年を支払ってApple Developer Programに登録し、プロビジョニングアイデンティティを取得する必要があります。これがないと、物理デバイスでソースコードからアプリケーションを実行することはできません。これを行う別の方法は、脱獄デバイスを使用することです。

Xcode 7.2以降、Appleは実際のiPhoneでアプリケーションを書いてテストすることを可能にする無料のiOS開発プロビジョニングプロファイルを作成するオプションを提供しています。Xcode --> Preferences --> Accounts --> +あなたの資格情報で新しいアプリIDを追加--> 作成したApple IDをクリック --> Manage Certificates --> +Apple Development--> Done
__次に、iPhoneでアプリケーションを実行するには、まずiPhoneにコンピュータを信頼させる必要があります。その後、Xcodeからモバイルでアプリケーションを実行しようとしますが、エラーが表示されます。設定に移動して、Settings --> General --> Profiles and Device Management --> 信頼されていないプロファイルを選択し、「信頼」**をクリックします。

同じ署名証明書で署名されたアプリケーションは、キーチェーンアイテムのように安全にリソースを共有できます

プロビジョニングプロファイルは、電話の中の**/Library/MobileDevice/ProvisioningProfiles**に保存されています。

Simulator

{% hint style="info" %} シミュレーターはエミュレーターとは異なることに注意してください。シミュレーターはデバイスの動作と機能をシミュレートするだけで、実際にはそれらを使用しません。 {% endhint %}

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)

Once you know the UID the apps installed within it can be found in /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ソリューションであり、トライアルライセンスは提供されていません。

ジェイルブレイキング

Appleは、iPhone上で実行されるコードがAppleによって発行された証明書で署名されている必要があると厳格に要求しています。ジェイルブレイキングは、そのような制限やOSによって設けられた他のセキュリティ制御を回避するプロセスです。したがって、デバイスがジェイルブレイクされると、アプリがインストールされているかどうかを確認する整合性チェックがパッチされ、バイパスされます

{% hint style="info" %} Androidとは異なり、iOSではデバイス上で署名されていない/信頼されていないコードを実行するために「開発者モード」に切り替えることはできません。 {% endhint %}

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などのリソースは最新の情報を提供します。例としては:

  • A7-A11チップデバイス用のCheckra1n
  • iOS 15.0-16.5のCheckm8デバイスA8-A11用のPalera1n
  • iOSバージョン14.8までのUnc0ver

デバイスを変更することにはリスクが伴い、ジェイルブレイキングは慎重に行うべきです。

ジェイルブレイキングの利点とリスク

ジェイルブレイキングはOSによって課せられたサンドボックスを解除し、アプリがファイルシステム全体にアクセスできるようにします。この自由により、未承認のアプリのインストールやより多くのAPIへのアクセスが可能になります。しかし、一般ユーザーにとって、ジェイルブレイキングは推奨されません。潜在的なセキュリティリスクやデバイスの不安定さがあるためです。

ジェイルブレイキング後

{% content-ref url="basic-ios-testing-operations.md" %} basic-ios-testing-operations.md {% endcontent-ref %}

ジェイルブレイク検出

いくつかのアプリケーションは、モバイルがジェイルブレイクされているかどうかを検出しようとし、その場合アプリケーションは実行されません

  • iOSをジェイルブレイクした後、ファイルとフォルダーが通常インストールされ、これらを検索してデバイスがジェイルブレイクされているかどうかを判断できます。
  • ジェイルブレイクされたデバイスでは、アプリケーションがサンドボックスの外の新しいファイルに対して読み書きアクセスを得ます
  • 一部のAPI 呼び出し異なる動作をします
  • OpenSSHサービスの存在
  • /bin/shを呼び出すと0ではなく1を返します

ジェイルブレイキングを検出する方法についての詳細情報はこちら

この検出を回避するために、objectionのios jailbreak disableを使用することができます。

ジェイルブレイク検出バイパス

参考文献

Support HackTricks
{% endhint %} {% endhint %}