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

18 KiB
Raw Blame History

iOSテスト環境

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

Apple Developer Program

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

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

同じ署名証明書で署名されたアプリケーションは、キーチェーンアイテムなどのリソースを安全な方法で共有できることに注意してください。

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

シミュレータ

{% hint style="info" %} シミュレータはエミュレータと同じではありません。シミュレータはデバイスの振る舞いと機能をシミュレートしますが、実際には使用しません。 {% endhint %}

iOS SDKシミュレータは、iOSデバイスのより高レベルな_シミュレーション_を提供します。最も重要なことは、エミュレータバイナリはARMコードではなくx86コードにコンパイルされます。実際のデバイス向けにコンパイルされたアプリは実行されないため、シミュレータはブラックボックス分析やリバースエンジニアリングには役立ちません。

シミュレータ

シミュレータ内でのペントストを実行する場合、ジェイルブレイクされたデバイスで行うよりも制限が多くなります。

iOSアプリをビルドおよびサポートするために必要なすべてのツールは、公式にはMac OSのみでサポートされています
AppleのデファクトツールであるXcodeは、iOSアプリケーションの作成/デバッグ/インストゥルメンテーションに使用できます。他のコンポーネントシミュレータやさまざまなSDKバージョンなどをダウンロードすることもできます。
公式のアプリストアからXcodeをダウンロードすることを強くお勧めします。他のバージョンにはマルウェアが含まれている可能性があります。

シミュレータのファイルは/Users/<username>/Library/Developer/CoreSimulator/Devicesにあります。

シミュレータを開くには、Xcodeを実行し、Xcodeタブ --> Open Developer tools --> _Simulator_をクリックします。
__次の画像で「iPod touch [...]」をクリックすると、他のデバイスを選択できます。

シミュレータ内のアプリケーション

/Users/<username>/Library/Developer/CoreSimulator/Devices内には、インストールされたシミュレータがすべて表示されます。エミュレータ内で作成されたアプリケーションのファイルにアクセスしたい場合、どのエミュレータにアプリがインストールされているかを知るのは困難かもしれません。正しい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ソリューションであり、ユーザーライセンスモデルを採用しており、トライアルライセンスは提供されていません。

ジェイルブレイク

AppleはiPhoneで実行されるコードがAppleによって発行された証明書で署名されている必要があります。ジェイルブレイクは、OSによって設定されたこれらの制限や他のセキュリティ制御を積極的に回避するプロセスです。したがって、デバイスがジェイルブレイクされると、インストールされるアプリをチェックする責任がある整合性チェックがパッチされ、バイパスされます。

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

AndroidのRootとの比較

iOSのジェイルブレイクは、しばしばAndroidのルート化と比較されますが、プロセスは実際にはかなり異なります。違いを説明するために、まずAndroidの「ルート化」と「フラッシング」の概念を見直してみましょう。

  • ルート化: これは通常、システムにsuバイナリをインストールするか、ルート化されたカスタムROMでシステム全体を置き換えることを含みます。ブートローダーにアクセスできる限り、エクスプロイトはルートアクセスの取得に必要ありません。
  • カスタムROMのフラッシュ: ブートローダーをアンロックした後、デバイス上で実行されているOSを置き換えることができます。ブートローダーをアンロックするためにはエクスプロイトが必要な場合があります。

iOSデバイスでは、カスタムROMのフラッシュは不可能です。なぜなら、iOSブートローダーはAppleによって署名されたイメージのみをブートおよびフラッシュすることを許可しているからです。これが、Appleによって署名されていない場合、公式のiOSイメージもインストールできない理由であり、iOSのダウングレードは前のiOSバージョンがまだ署名されている限りのみ可能です。

ジェイルブレイクの目的は、iOSの保護機能特にAppleのコード署名メカニズム無効にすることです。これにより、デバイス上で任意の未署名コードが実行できるようになりますカスタムコードやCydiaやSileoなどの代替アプリストアからダウンロードしたコード。"ジェイルブレイク"という言葉は、無効化プロセスを自動化するオールインワンツールを指す口語的な表現です。

ジェイルブレイクの考慮事項

iOSデバイスのジェイルブレイクは、Appleがシステムを強化し、エクスプロイトされた脆弱性を修正するため、ますます複雑になっています。ジェイルブレイクは非常に時間的に敏感な手順になっており、Appleが修正をリリースした後は比較的すぐにこれらの脆弱なバージョンの署名を停止しますiPhone 4やiPad 1のBootROMに影響を与えるlimera1nエクスプロイトなどのハードウェアベースの脆弱性を利用する場合を除く)。つまり、Appleがファームウェアの署名を停止した後は、特定のiOSバージョンにダウングレードすることはできません

セキュリティテストに使用するジェイルブレイクされたデバイスがある場合は、最新のiOSバージョンにアップグレードした後も再ジェイルブレイクできることが100確実でない限り、そのままにしておいてください。

iOSのアップグレードは、チャレンジレスポンスプロセスいわゆるSHSHブロブの生成に基づいています。デバイスは、チャレンジに対するレスポンスがAppleによって署名されている場合にのみOSのインストールを許可します。これが研究者が「署名ウィンドウ」と呼ぶものであり、ダウンロードしたOTAファームウェアパッケージを単純に保存してデバイスにロードすることはできません。マイナーなiOSのアップグレードでは、2つのバージョンがAppleによって署名される場合があります最新バージョンと前のiOSバージョン。これは、iOSデバイスをダウングレードできる唯一の状況です。現在の署名ウィンドウを確認し、OTAファームウェアをダウンロードすることができます。IPSW Downloadsのウェブサイトから。

{% hint style="danger" %} OSを更新すると、ジェイルブレイクの効果が失われます。 {% endhint %}

ジェイルブレイクの種類

  • テザリングジェイルブレイクは、再起動時に持続しないため、ジェイルブレイクを再適用するにはデバイスをコンピュータに接続する(テザリング)必要があります。コンピュータが接続されていない場合、デバイスは再起動しない場合があります。
  • セミテザリングジェイルブレイクは、再起動時にデバイスがコンピュータに接続されていないと再適用できません。デバイスは自身で非ジェイルブレイクモードで起動することもできます。
  • セミアンテザリングジェイルブレイクは、デバイスが自身で起動できますが、コード署名の無効化のためのカーネルパッチ(またはユーザーランドの変更)は自動的に適用されません。ユーザーはアプリを起動したり、ウェブサイトを訪れたりしてデバイスを再ジェイルブレイクする必要があります(コンピュータへの接続は必要ありませんので、アンテザリングという用語が使われます)。
  • アンテザリングジェイルブレイクは、エンドユーザーにとって最も人気のある選択肢です。一度だけ適用する必要があり、その後デバイスは永久にジェイルブレイクされた状態になります。

ジェイルブレイクツール

異なるiOSバージョンには、異なるジェイルブレイク手法が必要です。自分のiOSバージョンに公開されているジェイルブレイクがあるかどうかを確認してください。ジェイルブレイクグループ/作者の名前に似たドメイン名の背後に隠れている偽のツールやスパイウェアに注意してください。

バージョ

利点

Jailbreakingの最も重要な副作用は、OSによって設定されたサンドボックスが取り除かれることです。したがって、デバイス上の任意のアプリがファイルシステム上の任意のファイルを読み取ることができます。これには、他のアプリのファイル、クッキー、キーチェーンも含まれます。

Jailbrokenデバイスでは、ユーザーは承認されていないアプリをインストールし、それ以外ではアクセスできないより多くのAPIを利用することができます。

{% hint style="warning" %} 通常のユーザーはモバイルをJailbreakすることはお勧めしません {% endhint %}

Jailbreaking後

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

Jailbreakの検出

いくつかのアプリケーションは、モバイルがJailbrokenされているかどうかを検出し、その場合はアプリケーションを実行しないようにします

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

Jailbreakingの検出方法の詳細はこちらを参照してください。

objectionios jailbreak disableを使用して、この検出を回避することもできます。

Jailbreak Detection Bypass

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥