mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-15 01:17:36 +00:00
Translated ['mobile-pentesting/ios-pentesting/README.md', 'mobile-pentes
This commit is contained in:
parent
0a6daa04a4
commit
798cecd97e
2 changed files with 378 additions and 207 deletions
|
@ -14,11 +14,11 @@
|
|||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
* **サイバーセキュリティ企業で働いていますか?** HackTricksであなたの会社を宣伝したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロードしたり**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||||
* **サイバーセキュリティ会社で働いていますか?** HackTricksであなたの会社を宣伝したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロードしたり**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)をご覧ください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
|
||||
* [**公式のPEASS&HackTricks swag**](https://peass.creator-spring.com)を手に入れましょう。
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**テレグラムグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
|
||||
* **ハッキングのトリックを共有するには、PRを**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **に提出してください。**
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**テレグラムグループ**](https://t.me/peass)に**参加**するか、**Twitter**で[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**をフォロー**してください。
|
||||
* **ハッキングのトリックを共有するには、**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **および**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **にPRを提出**してください。
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -65,9 +65,9 @@ otool -hv <app-binary> | grep PIE # PIEフラグを含める必要がありま
|
|||
* **スタックキャナリー**:スタックの整合性を検証するために、関数を呼び出す前にスタックに「キャナリー」値が配置され、関数が終了すると再度検証されます。
|
||||
|
||||
```
|
||||
otool -I -v <app-binary> | grep stack_chk # stack_chk_guardとstack_chk_failのシンボルを含める必要があります
|
||||
otool -I -v <app-binary> | grep stack_chk # stack_chk_guardおよびstack_chk_failのシンボルを含める必要があります
|
||||
```
|
||||
* **ARC(Automatic Reference Counting)**:一般的なメモリ破損の欠陥を防ぐため
|
||||
* **ARC(Automatic Reference Counting)**:一般的なメモリ破損の欠陥を防ぐために
|
||||
|
||||
```
|
||||
otool -I -v <app-binary> | grep objc_release # _objc_releaseシンボルを含める必要があります
|
||||
|
@ -78,7 +78,70 @@ otool -I -v <app-binary> | grep objc_release # _objc_releaseシンボルを含
|
|||
otool -arch all -Vl <app-binary> | grep -A5 LC_ENCRYPT # cryptidは1である必要があります
|
||||
```
|
||||
|
||||
**感
|
||||
**機密/安全でない関数の識別**
|
||||
|
||||
* **弱いハッシュアルゴリズム**
|
||||
|
||||
```
|
||||
# iOSデバイス上で
|
||||
otool -Iv <app> | grep -w "_CC_MD5"
|
||||
otool -Iv <app> | grep -w "_CC_SHA1"
|
||||
|
||||
# Linux上で
|
||||
grep -iER "_CC_MD5"
|
||||
grep -iER "_CC_SHA1"
|
||||
```
|
||||
* **安全でないランダム関数**
|
||||
|
||||
```
|
||||
# iOSデバイス上で
|
||||
otool -Iv <app> | grep -w "_random"
|
||||
otool -Iv <app> | grep -w "_srand"
|
||||
otool -Iv <app> | grep -w "_rand"
|
||||
|
||||
# Linux上で
|
||||
grep -iER "_random"
|
||||
grep -iER "_srand"
|
||||
grep -iER "_rand"
|
||||
```
|
||||
* **安全でない「Malloc」関数**
|
||||
|
||||
```
|
||||
# iOSデバイス上で
|
||||
otool -Iv <app> | grep -w "_malloc"
|
||||
|
||||
# Linux上で
|
||||
grep -iER "_malloc"
|
||||
```
|
||||
* **安全で脆弱な関数**
|
||||
|
||||
```
|
||||
# iOSデバイス上で
|
||||
otool -Iv <app> | grep -w "_gets"
|
||||
otool -Iv <app> | grep -w "_memcpy"
|
||||
otool -Iv <app> | grep -w "_strncpy"
|
||||
otool -Iv <app> | grep -w "_strlen"
|
||||
otool -Iv <app> | grep -w "_vsnprintf"
|
||||
otool -Iv <app> | grep -w "_sscanf"
|
||||
otool -Iv <app> | grep -w "_strtok"
|
||||
otool -Iv <app> | grep -w "_alloca"
|
||||
otool -Iv <app> | grep -w "_sprintf"
|
||||
otool -Iv <app> | grep -w "_printf"
|
||||
otool -Iv <app> | grep -w "_vsprintf"
|
||||
|
||||
# Linux上で
|
||||
grep -R "_gets"
|
||||
grep -iER "_memcpy"
|
||||
grep -iER "_strncpy"
|
||||
grep -iER "_strlen"
|
||||
grep -iER "_vsnprintf"
|
||||
grep -iER "_sscanf"
|
||||
grep -iER "_strtok"
|
||||
grep -iER "_alloca"
|
||||
grep -iER "_sprintf"
|
||||
grep -iER "_printf"
|
||||
grep -iER "_vsprintf"
|
||||
```
|
||||
### 基本的な動的解析
|
||||
|
||||
[**MobSF**](https://github.com/MobSF/Mobile-Security-Framework-MobSF)が実行する動的解析を確認してください。異なるビューをナビゲートし、それらと対話する必要がありますが、いくつかのクラスをフックして他の操作を行い、完了したらレポートを作成します。
|
||||
|
@ -108,42 +171,42 @@ PID Name Identifier
|
|||
|
||||
### IPAの構造
|
||||
|
||||
`.ipa` ファイルは **圧縮されたパッケージ** ですので、拡張子を `.zip` に変更して解凍することができます。インストールする準備ができた **完全なパッケージ化された** アプリは一般的に **バンドル** と呼ばれます。\
|
||||
解凍すると、`<NAME>.app` という名前のファイルが表示され、その他のリソースが含まれた圧縮アーカイブが格納されています。
|
||||
`.ipa`ファイルは**圧縮されたパッケージ**ですので、拡張子を`.zip`に変更して**解凍**することができます。インストールする準備ができた**完全なパッケージ化された**アプリは一般的に**バンドル**と呼ばれます。\
|
||||
解凍すると、`<NAME>.app`という名前のフォルダが表示され、その中に他のリソースが含まれています。
|
||||
|
||||
* `Info.plist`: アプリケーション固有の設定を含むファイルです。
|
||||
* `_CodeSignature/`: バンドル内のすべてのファイルに対する署名を含む plist ファイルが含まれています。
|
||||
* `Assets.car`: アイコンなどのアセットが含まれた別の圧縮アーカイブです。
|
||||
* `Frameworks/`: .dylib や .framework ファイルとしてのアプリのネイティブライブラリが含まれています。
|
||||
* `PlugIns/`: .appex ファイルとしてのアプリの拡張機能が含まれている場合があります(例では表示されません)。
|
||||
* [`Core Data`](https://developer.apple.com/documentation/coredata): オフラインでアプリケーションの永続的なデータを保存し、一時的なデータをキャッシュし、アプリケーションの単一のデバイス上でアンドゥ機能を追加するために使用されます。単一の iCloud アカウント内の複数のデバイス間でデータを同期するために、Core Data はスキーマを自動的に CloudKit コンテナにミラーリングします。
|
||||
* [`PkgInfo`](https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/ConfigApplications.html): `PkgInfo` ファイルは、アプリケーションまたはバンドルのタイプと作成者コードを指定する別の方法です。
|
||||
* **en.lproj, fr.proj, Base.lproj**: これらは、特定の言語のリソースを含む言語パックであり、言語がサポートされていない場合のデフォルトリソースも含まれています。
|
||||
* `_CodeSignature/`: バンドル内のすべてのファイルに対する署名を含むplistファイルが含まれています。
|
||||
* `Assets.car`: アイコンなどのアセットが含まれる別の圧縮されたアーカイブです。
|
||||
* `Frameworks/`: .dylibまたは.frameworkファイルとしてのアプリのネイティブライブラリが含まれています。
|
||||
* `PlugIns/`: .appexファイルとしてのアプリの拡張機能が含まれている場合があります(例では表示されません)。
|
||||
* [`Core Data`](https://developer.apple.com/documentation/coredata): オフラインでアプリケーションの永続的なデータを保存し、一時的なデータをキャッシュし、アプリケーションの単一のデバイス上でアンドゥ機能を追加するために使用されます。単一のiCloudアカウント内の複数のデバイス間でデータを同期するために、Core Dataはスキーマを自動的にCloudKitコンテナにミラーリングします。
|
||||
* [`PkgInfo`](https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/ConfigApplications.html): `PkgInfo`ファイルは、アプリケーションまたはバンドルのタイプと作成者コードを指定する別の方法です。
|
||||
* **en.lproj, fr.proj, Base.lproj**: これらは、特定の言語のリソースと、言語がサポートされていない場合のデフォルトリソースを含む言語パックです。
|
||||
|
||||
iOS アプリケーションで UI を定義するための複数の方法があります: _storyboard_, _nib_ または _xib_ ファイルです。
|
||||
iOSアプリケーションでUIを定義するための複数の方法があります: _storyboard_, _nib_または_xib_ファイルです。
|
||||
|
||||
**Info.plist**
|
||||
|
||||
情報プロパティリストまたは `Info.plist` は、iOS アプリの情報の主要なソースです。アプリの重要な設定情報を記述する **キーと値のペア** を含む構造化ファイルで構成されています。実際には、すべてのバンドルされた実行可能ファイル(アプリ拡張、フレームワーク、アプリ)には **`Info.plist` ファイルが必要** です。すべての可能なキーは [**Apple Developer Documentation**](https://developer.apple.com/documentation/bundleresources/information\_property\_list?language=objc) で確認できます。
|
||||
情報プロパティリストまたは`Info.plist`は、iOSアプリの情報の主要な情報源です。アプリの重要な設定情報を記述した、キーと値のペアを含む構造化ファイルで構成されています。実際には、すべてのバンドルされた実行可能ファイル(アプリ拡張、フレームワーク、アプリ)には**必ず**`Info.plist`ファイルがあることが期待されています。すべての可能なキーについては、[**Apple Developer Documentation**](https://developer.apple.com/documentation/bundleresources/information\_property\_list?language=objc)を参照してください。
|
||||
|
||||
ファイルは **XML またはバイナリ (bplist)** の形式でフォーマットされている場合があります。次の単純なコマンドを使用して、XML 形式に変換できます。
|
||||
ファイルは**XMLまたはバイナリ(bplist)**でフォーマットされている場合があります。次の単純なコマンドを使用して、XML形式に変換できます。
|
||||
|
||||
* macOS の場合は、macOS 10.2 以降のバージョンにネイティブで付属しているツールである `plutil` を使用します(公式のオンラインドキュメントは現在利用できません):
|
||||
* macOSの場合は、macOS 10.2以降のバージョンにネイティブで付属しているツールである`plutil`を使用します(公式のオンラインドキュメントは現在利用できません):
|
||||
|
||||
```bash
|
||||
$ plutil -convert xml1 Info.plist
|
||||
```
|
||||
* Linux の場合:
|
||||
* Linuxの場合:
|
||||
|
||||
```bash
|
||||
$ apt install libplist-utils
|
||||
$ plistutil -i Info.plist -o Info_xml.plist
|
||||
```
|
||||
|
||||
以下は、`Info.plist` ファイル内で簡単に検索できるいくつかの情報と対応するキーワードの非網羅的なリストです。ファイルを調査するか、`grep -i <keyword> Info.plist` を使用してください。
|
||||
以下は、`Info.plist`ファイルで簡単に検索できるいくつかの情報と対応するキーワードの非網羅的なリストです。ファイルを調査するか、`grep -i <keyword> Info.plist`を使用して検索できます。
|
||||
|
||||
* アプリの許可目的の文字列: `UsageDescription`
|
||||
* カスタム URL スキーム: `CFBundleURLTypes`
|
||||
* カスタムURLスキーム: `CFBundleURLTypes`
|
||||
* エクスポート/インポートされたカスタムドキュメントタイプ: `UTExportedTypeDeclarations` / `UTImportedTypeDeclarations`
|
||||
* アプリトランスポートセキュリティ(ATS)の設定: `NSAppTransportSecurity`
|
||||
|
||||
|
@ -151,9 +214,9 @@ $ plistutil -i Info.plist -o Info_xml.plist
|
|||
|
||||
**データパス**
|
||||
|
||||
iOS では、**システムアプリケーションは `/Applications`** ディレクトリにあり、**ユーザーがインストールした** アプリは **`/private/var/containers/`** の下にあります。ただし、ファイルシステムをナビゲートして適切なフォルダを見つけることは簡単なタスクではありません。なぜなら、**すべてのアプリにはランダムな 128 ビット UUID**(ユニバーサルユニーク識別子)が割り当てられ、ディレクトリ名に使用されるからです。
|
||||
iOSでは、**システムアプリケーションは`/Applications`**ディレクトリにあり、**ユーザーがインストールした**アプリは**`/private/var/containers/`**以下で利用できます。ただし、ファイルシステムをナビゲートして適切なフォルダを見つけることは簡単なタスクではありません。なぜなら、**すべてのアプリにはランダムな128ビットUUID(ユニバーサルユニーク識別子)**が割り当てられ、ディレクトリ名に使用されるからです。
|
||||
|
||||
ユーザーがインストールしたアプリのインストールディレクトリ情報を簡単に取得するために、objection のコマンド `env` を使用することもできます。これにより、アプリのすべてのディレクトリ情報が表示されます。
|
||||
ユーザーがインストールしたアプリのインストールディレクトリ情報を簡単に取得するために、objectionのコマンド`env`を使用することもできます。これにより、アプリのすべてのディレクトリ情報が表示されます。
|
||||
```bash
|
||||
OWASP.iGoat-Swift on (iPhone: 11.1.2) [usb] # env
|
||||
|
||||
|
@ -164,53 +227,57 @@ CachesDirectory /var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8E
|
|||
DocumentDirectory /var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8EF8-8F5560EB0693/Documents
|
||||
LibraryDirectory /var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8EF8-8F5560EB0693/Library
|
||||
```
|
||||
アプリには、2つの主要な場所があります:
|
||||
以下は、モバイルペンテスト/iosペンテスト/README.mdファイルからのコンテンツです。関連する英語のテキストを日本語に翻訳し、翻訳を返し、マークダウンとHTMLの構文を正確に保ちます。コード、ハッキング技術の名前、ハッキング用語、クラウド/SaaSプラットフォームの名前(Workspace、aws、gcpなど)、'leak'、pentesting、およびマークダウンタグなどのものは翻訳しないでください。また、翻訳とマークダウンの構文以外の追加のものは追加しないでください。
|
||||
|
||||
* **バンドルディレクトリ** (`/var/containers/Bundle/Application/3ADAF47D-A734-49FA-B274-FBCA66589E67/`)。
|
||||
* **データディレクトリ** (`/var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8EF8-8F5560EB0693/`)。
|
||||
```markdown
|
||||
如上所述,应用程序有两个主要位置:
|
||||
|
||||
これらのフォルダには、アプリケーションのセキュリティ評価中に詳細に調査する必要がある情報が含まれています(たとえば、保存されたデータの機密情報を分析する場合など)。
|
||||
* **Bundle** **directory** (`/var/containers/Bundle/Application/3ADAF47D-A734-49FA-B274-FBCA66589E67/`)。
|
||||
* **Data directory** (`/var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8EF8-8F5560EB0693/`)。
|
||||
|
||||
**バンドルディレクトリ:**
|
||||
这些文件夹包含在应用程序安全评估期间必须仔细检查的信息(例如分析存储的敏感数据时)。
|
||||
|
||||
**Bundle directory:**
|
||||
|
||||
* **AppName.app**
|
||||
* これはIPAで以前に見たアプリケーションバンドルであり、必要なアプリケーションデータ、静的コンテンツ、およびアプリケーションのコンパイルされたバイナリを含んでいます。
|
||||
* このディレクトリはユーザーには見えますが、**ユーザーは書き込むことはできません**。
|
||||
* このディレクトリの内容は**バックアップされません**。
|
||||
* このフォルダの内容は、コードの署名を**検証するために使用**されます。
|
||||
* 这是之前在IPA中看到的应用程序包,它包含了必要的应用程序数据、静态内容以及应用程序的编译二进制文件。
|
||||
* 此目录对用户可见,但**用户无法写入**。
|
||||
* 此目录中的内容**不会备份**。
|
||||
* 此文件夹的内容用于**验证代码签名**。
|
||||
|
||||
**データディレクトリ:**
|
||||
**Data directory:**
|
||||
|
||||
* **Documents/**
|
||||
* ユーザーが生成したすべてのデータが含まれています。このデータの作成はアプリケーションのエンドユーザーによって開始されます。
|
||||
* ユーザーに見え、**ユーザーは書き込むことができます**。
|
||||
* このディレクトリの内容は**バックアップされます**。
|
||||
* アプリは、`NSURLIsExcludedFromBackupKey`を設定することでパスを無効にすることができます。
|
||||
* 包含所有用户生成的数据。应用程序最终用户启动了此数据的创建。
|
||||
* 对用户可见,**用户可以写入**。
|
||||
* 此目录中的内容**会备份**。
|
||||
* 应用程序可以通过设置`NSURLIsExcludedFromBackupKey`来禁用路径。
|
||||
* **Library/**
|
||||
* **ユーザー固有ではないファイル**、つまり**キャッシュ**、**設定**、**クッキー**、およびプロパティリスト(plist)の設定ファイルなどが含まれています。
|
||||
* iOSアプリは通常、`Application Support`と`Caches`のサブディレクトリを使用しますが、アプリはカスタムのサブディレクトリを作成することもできます。
|
||||
* 包含所有**非用户特定**的文件,例如**缓存**、**首选项**、**Cookie**和属性列表(plist)配置文件。
|
||||
* iOS应用程序通常使用`Application Support`和`Caches`子目录,但应用程序可以创建自定义子目录。
|
||||
* **Library/Caches/**
|
||||
* **一時的にキャッシュされたファイル**が含まれています。
|
||||
* ユーザーには見えず、**ユーザーは書き込むことはできません**。
|
||||
* このディレクトリの内容は**バックアップされません**。
|
||||
* アプリが実行されていないときやストレージ容量が不足しているときに、OSがこのディレクトリのファイルを自動的に削除する場合があります。
|
||||
* 包含**半持久性缓存文件**。
|
||||
* 对用户不可见,**用户无法写入**。
|
||||
* 此目录中的内容**不会备份**。
|
||||
* 当应用程序未运行且存储空间不足时,操作系统可能会自动删除此目录中的文件。
|
||||
* **Library/Application Support/**
|
||||
* アプリの実行に必要な**永続的なファイル**が含まれています。
|
||||
* ユーザーには**見えず**、ユーザーは書き込むことはできません。
|
||||
* このディレクトリの内容は**バックアップされます**。
|
||||
* アプリは、`NSURLIsExcludedFromBackupKey`を設定することでパスを無効にすることができます。
|
||||
* 包含运行应用程序所需的**持久性文件**。
|
||||
* 对用户**不可见**,用户无法写入。
|
||||
* 此目录中的内容**会备份**。
|
||||
* 应用程序可以通过设置`NSURLIsExcludedFromBackupKey`来禁用路径。
|
||||
* **Library/Preferences/**
|
||||
* **アプリケーションが再起動しても永続化される**プロパティの保存に使用されます。
|
||||
* 情報は、\[BUNDLE\_ID].plistという名前のplistファイル内に、暗号化されていない状態でアプリケーションのサンドボックス内に保存されます。
|
||||
* `NSUserDefaults`を使用して保存されたすべてのキー/値のペアは、このファイル内で見つけることができます。
|
||||
* 用于存储可以**在应用程序重新启动后仍然存在**的属性。
|
||||
* 信息以未加密的形式保存在应用程序沙箱中的名为\[BUNDLE\_ID].plist的plist文件中。
|
||||
* 使用`NSUserDefaults`存储的所有键/值对都可以在此文件中找到。
|
||||
* **tmp/**
|
||||
* アプリの起動間に永続化する必要のない**一時ファイル**を書き込むためにこのディレクトリを使用します。
|
||||
* 非永続的なキャッシュファイルが含まれています。
|
||||
* ユーザーには**見えません**。
|
||||
* このディレクトリの内容はバックアップされません。
|
||||
* アプリが実行されていないときやストレージ容量が不足しているときに、OSがこのディレクトリのファイルを自動的に削除する場合があります。
|
||||
* 使用此目录来写入**不需要在应用程序启动之间持久存在**的临时文件。
|
||||
* 包含非持久性缓存文件。
|
||||
* 对用户**不可见**。
|
||||
* 此目录中的内容不会备份。
|
||||
* 当应用程序未运行且存储空间不足时,操作系统可能会自动删除此目录中的文件。
|
||||
|
||||
iGoat-Swiftのバンドルディレクトリ(`/var/containers/Bundle/Application/3ADAF47D-A734-49FA-B274-FBCA66589E67/iGoat-Swift.app`)内のアプリケーションバンドル(.app)ディレクトリを詳しく見てみましょう。
|
||||
让我们仔细查看iGoat-Swift的应用程序包(.app)目录,位于Bundle目录内(`/var/containers/Bundle/Application/3ADAF47D-A734-49FA-B274-FBCA66589E67/iGoat-Swift.app`):
|
||||
```
|
||||
```bash
|
||||
OWASP.iGoat-Swift on (iPhone: 11.1.2) [usb] # ls
|
||||
NSFileType Perms NSFileProtection ... Name
|
||||
|
@ -240,9 +307,9 @@ DVIA-v2:
|
|||
@rpath/Bolts.framework/Bolts (compatibility version 1.0.0, current version 1.0.0)
|
||||
[...]
|
||||
```
|
||||
**アプリが暗号化されているかどうかを確認する**
|
||||
**アプリが暗号化されているか確認する**
|
||||
|
||||
次の出力があるかどうかを確認してください:
|
||||
次のコマンドを実行して、出力があるか確認してください:
|
||||
```bash
|
||||
otool -l <app-binary> | grep -A 4 LC_ENCRYPTION_INFO
|
||||
```
|
||||
|
@ -262,7 +329,7 @@ DVIA-v2:
|
|||
0000000100004acc adrp x10, 1098 ; 0x10044e000
|
||||
0000000100004ad0 add x10, x10, #0x268
|
||||
```
|
||||
サンプルアプリケーションの**Objective-Cセグメント**を表示するには、次のコマンドを使用します:
|
||||
サンプルアプリケーションの**Objective-Cセグメント**を出力するには、次のコマンドを使用します:
|
||||
```bash
|
||||
otool -oV DVIA-v2
|
||||
DVIA-v2:
|
||||
|
@ -302,7 +369,7 @@ double _field1;
|
|||
double _field2;
|
||||
};
|
||||
```
|
||||
ただし、バイナリを逆アセンブルするための最良のオプションは、[**Hopper**](https://www.hopperapp.com/download.html?)と[**IDA**](https://www.hex-rays.com/products/ida/support/download\_freeware/)です。
|
||||
ただし、バイナリを逆アセンブルするための最良のオプションは、[**Hopper**](https://www.hopperapp.com/download.html?)と[**IDA**](https://www.hex-rays.com/products/ida/support/download_freeware/)です。
|
||||
|
||||
![](../.gitbook/assets/image%20\(9\)%20\(1\)%20\(2\).png)
|
||||
|
||||
|
@ -321,17 +388,17 @@ iOSがデバイスにデータを保存する方法については、次のペ
|
|||
{% endcontent-ref %}
|
||||
|
||||
{% hint style="warning" %}
|
||||
次の情報の保存場所は、アプリケーションの**インストール直後**、アプリケーションの**すべての機能を確認した後**、さらには**1つのユーザーからログアウトして別のユーザーにログインした後**にチェックする必要があります。\
|
||||
次の情報の保存場所は、アプリケーションを**インストール直後**、アプリケーションの**すべての機能を確認した後**、さらには**1つのユーザーから別のユーザーにログインアウトした後**にチェックする必要があります。\
|
||||
目標は、アプリケーション(パスワード、トークン)、現在のユーザー、以前にログインしたユーザーの**保護されていない機密情報**を見つけることです。
|
||||
{% endhint %}
|
||||
|
||||
### Plist
|
||||
|
||||
**plist**ファイルは、**キーと値のペアを含む**構造化されたXMLファイルです。これは永続的なデータを保存する方法であり、したがって、これらのファイルに**機密情報が含まれている場合があります**。アプリをインストールした後や、アプリを集中的に使用した後にこれらのファイルをチェックして、新しいデータが書き込まれているかどうかを確認することが推奨されます。
|
||||
**plist**ファイルは、**キーと値のペアを含む**構造化されたXMLファイルです。これは永続的なデータを保存する方法であり、したがって、これらのファイルに**機密情報が含まれている場合があります**。アプリをインストールした後や、アプリを集中的に使用した後に、新しいデータが書き込まれているかどうかを確認するために、これらのファイルをチェックすることをお勧めします。
|
||||
|
||||
plistファイルにデータを永続化する最も一般的な方法は、**NSUserDefaults**の使用です。このplistファイルは、**`Library/Preferences/<appBundleID>.plist`**にアプリのサンドボックス内に保存されます。
|
||||
plistファイルにデータを永続化する最も一般的な方法は、**NSUserDefaults**の使用です。このplistファイルは、**`Library/Preferences/<appBundleID>.plist`**の中にアプリのサンドボックス内に保存されます。
|
||||
|
||||
[`NSUserDefaults`](https://developer.apple.com/documentation/foundation/nsuserdefaults)クラスは、デフォルトのシステムとのプログラム的なインターフェースを提供します。デフォルトのシステムにより、アプリケーションは**ユーザーの設定に応じて動作をカスタマイズ**することができます。`NSUserDefaults`に保存されたデータは、アプリケーションバンドルで表示することができます。このクラスはデータをplistファイルに保存しますが、少量のデータと一緒に使用することを意図しています。
|
||||
[`NSUserDefaults`](https://developer.apple.com/documentation/foundation/nsuserdefaults)クラスは、デフォルトのシステムとのプログラム的なインターフェースを提供します。デフォルトのシステムにより、アプリケーションは**ユーザーの設定に応じて動作をカスタマイズ**することができます。`NSUserDefaults`に保存されたデータは、アプリケーションバンドル内で表示することができます。このクラスはデータをplistファイルに保存しますが、少量のデータと一緒に使用することを意図しています。
|
||||
|
||||
このデータは、信頼できるコンピュータから直接アクセスすることはできませんが、**バックアップ**を実行することでアクセスすることができます。
|
||||
|
||||
|
@ -341,7 +408,7 @@ plistファイルにデータを永続化する最も一般的な方法は、**N
|
|||
```bash
|
||||
find ./ -name "*.plist"
|
||||
```
|
||||
ファイルは**XMLまたはバイナリ(bplist)**形式でフォーマットされている可能性があります。次の単純なコマンドを使用して、XML形式に変換することができます:
|
||||
ファイルは**XMLまたはバイナリ(bplist)**形式でフォーマットされている可能性があります。次の単純なコマンドを使用して、XML形式に変換できます:
|
||||
|
||||
* macOSでは、`plutil`を使用します。これはmacOS 10.2以降のバージョンにネイティブに付属しているツールです(公式のオンラインドキュメントは現在利用できません):
|
||||
|
||||
|
@ -398,19 +465,19 @@ NSLog(@"data stored in core data");
|
|||
### YapDatabase
|
||||
|
||||
[YapDatabase](https://github.com/yapstudios/YapDatabase)はSQLiteの上に構築されたキー/値ストアです。\
|
||||
YapデータベースはSQLiteデータベースなので、前のセクションで提案されたコマンドを使用して見つけることができます。
|
||||
YapデータベースはSQLiteデータベースなので、前のセクションで説明した方法で見つけることができます。
|
||||
|
||||
### その他のSQLiteデータベース
|
||||
|
||||
アプリケーションが独自のSQLiteデータベースを作成することは一般的です。それらには**機密データ**が保存されており、暗号化されていない場合があります。そのため、常にアプリケーションディレクトリ内のすべてのデータベースをチェックすることは興味深いです。したがって、データが保存されているアプリケーションディレクトリに移動します(`/private/var/mobile/Containers/Data/Application/{APPID}`)
|
||||
アプリケーションが独自のSQLiteデータベースを作成することは一般的です。それらには**機密データ**が保存されており、暗号化されていない状態で残されている可能性があります。そのため、アプリケーションディレクトリ内のすべてのデータベースをチェックすることは常に興味深いです。したがって、データが保存されているアプリケーションディレクトリに移動します (`/private/var/mobile/Containers/Data/Application/{APPID}`)
|
||||
```bash
|
||||
find ./ -name "*.sqlite" -or -name "*.db"
|
||||
```
|
||||
### Firebaseリアルタイムデータベース
|
||||
|
||||
アプリケーション開発者は、**NoSQLクラウドホストデータベースとのデータの保存と同期にFirebaseリアルタイムデータベースを利用**することができます。データはJSONとして保存され、接続されたすべてのクライアントにリアルタイムで同期され、アプリケーションがオフラインになっても利用可能です。
|
||||
アプリケーション開発者は、**NoSQLクラウドホストされたデータベースとのデータの保存と同期にFirebaseリアルタイムデータベースを利用**することができます。データはJSONとして保存され、リアルタイムで接続されたすべてのクライアントに同期され、アプリケーションがオフラインになっても利用可能です。
|
||||
|
||||
ミス構成されたFirebaseデータベースをチェックする方法はこちらで見つけることができます:
|
||||
ミス構成されたFirebaseデータベースのチェック方法はこちらで見つけることができます:
|
||||
|
||||
{% content-ref url="../../network-services-pentesting/pentesting-web/buckets/firebase-database.md" %}
|
||||
[firebase-database.md](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md)
|
||||
|
@ -445,14 +512,14 @@ fatalError("Error opening realm: \(error)")
|
|||
|
||||
[Couchbase Lite](https://github.com/couchbase/couchbase-lite-ios)は、軽量で埋め込み型のドキュメント指向(NoSQL)データベースエンジンであり、同期が可能です。iOSおよびmacOS向けにネイティブにコンパイルされます。
|
||||
|
||||
`/private/var/mobile/Containers/Data/Application/{APPID}/Library/Application Support/`にある可能性のあるCouchbaseデータベースをチェックしてください。
|
||||
`/private/var/mobile/Containers/Data/Application/{APPID}/Library/Application Support/`には、Couchbaseデータベースが存在する可能性がありますので、確認してください。
|
||||
|
||||
### クッキー
|
||||
|
||||
iOSはアプリのクッキーを各アプリのフォルダ内の**`Library/Cookies/cookies.binarycookies`**に保存します。ただし、開発者は時々、バックアップでアクセスできるという理由で、これらを**キーチェーン**に保存することを選択することもあります。
|
||||
iOSはアプリのクッキーを各アプリのフォルダ内の**`Library/Cookies/cookies.binarycookies`**に保存します。ただし、開発者は時々、バックアップでアクセス可能な上記の**クッキーファイル**ではなく、**キーチェーン**に保存することを選択することもあります。
|
||||
|
||||
クッキーファイルを調査するには、[**このPythonスクリプト**](https://github.com/mdegrazia/Safari-Binary-Cookie-Parser)を使用するか、objectionの**`ios cookies get`**を使用します。\
|
||||
また、objectionを使用してこれらのファイルをJSON形式に変換し、データを調査することもできます。
|
||||
クッキーファイルを調査するには、[**このPythonスクリプト**](https://github.com/mdegrazia/Safari-Binary-Cookie-Parser)を使用するか、objectionの**`ios cookies get`**を使用できます。\
|
||||
これらのファイルをJSON形式に変換してデータを調査するためにも、objectionを使用することができます。
|
||||
```bash
|
||||
...itudehacks.DVIAswiftv2.develop on (iPhone: 13.2.3) [usb] # ios cookies get --json
|
||||
[
|
||||
|
@ -483,14 +550,14 @@ iOSはアプリのクッキーを各アプリのフォルダ内の**`Library/Coo
|
|||
|
||||
[Appleのドキュメント](https://developer.apple.com/documentation/foundation/urlsessionconfiguration/1410529-ephemeral):
|
||||
|
||||
`ephemeralセッション構成オブジェクトは、デフォルトのセッション構成オブジェクト(defaultを参照)と似ていますが、対応するセッションオブジェクトはキャッシュ、資格情報ストア、またはディスク上のセッション関連データを保存しません。代わりに、セッション関連のデータはRAMに保存されます。ephemeralセッションがデータをディスクに書き込む唯一の場合は、URLの内容をファイルに書き込むように指示した場合です。`
|
||||
`ephemeralセッション構成オブジェクトは、デフォルトのセッション構成(defaultを参照)と似ていますが、対応するセッションオブジェクトはキャッシュ、資格情報ストア、またはディスク上のセッション関連データを保存しません。代わりに、セッション関連のデータはRAMに保存されます。ephemeralセッションがデータをディスクに書き込む唯一の場合は、URLの内容をファイルに書き込むように指示した場合です。`
|
||||
3. キャッシュは、キャッシュポリシーを[.notAllowed](https://developer.apple.com/documentation/foundation/urlcache/storagepolicy/notallowed)に設定することで無効にすることもできます。これにより、キャッシュがメモリまたはディスクに保存されなくなります。
|
||||
|
||||
### スナップショット
|
||||
|
||||
ホームボタンを押すたびに、iOSは現在の画面のスナップショットを撮影し、アプリケーションへの遷移をよりスムーズに行うために使用します。ただし、現在の画面に**機密データ**が含まれている場合、それは**画像に保存**されます(これは**再起動を超えて永続化**されます)。これらのスナップショットは、ホーム画面をダブルタップしてアプリ間を切り替えることでアクセスすることもできます。
|
||||
|
||||
iPhoneがジェイルブレイクされていない限り、**攻撃者**はこれらのスクリーンショットを見るためには、**デバイスにアクセス**する必要があります。デフォルトでは、最後のスナップショットはアプリのサンドボックス内の`Library/Caches/Snapshots/`または`Library/SplashBoard/Snapshots`フォルダに保存されます(信頼されたコンピュータはiOS 7.0以降ではファイルシステムにアクセスできません)。
|
||||
iPhoneがジェイルブレイクされていない限り、**攻撃者**はこれらのスクリーンショットを見るためには、**デバイスにアクセスするためのブロック解除**が必要です。デフォルトでは、最後のスナップショットはアプリのサンドボックス内の`Library/Caches/Snapshots/`または`Library/SplashBoard/Snapshots`フォルダに保存されます(信頼されたコンピュータはiOS 7.0以降ではファイルシステムにアクセスできません)。
|
||||
|
||||
この問題を防ぐための方法の一つは、スナップショットを撮る前に空白の画面を表示するか、機密データを削除することです。これは`ApplicationDidEnterBackground()`関数を使用して行うことができます。
|
||||
|
||||
|
@ -526,33 +593,33 @@ self.backgroundImage.bounds = UIScreen.mainScreen.bounds;
|
|||
[self.backgroundImage removeFromSuperview];
|
||||
}
|
||||
```
|
||||
この設定は、アプリケーションがバックグラウンドになるときに背景画像を「overlayImage.png」に設定します。現在のビューを常に上書きするため、「overlayImage.png」による機密データの漏洩を防ぎます。
|
||||
この設定は、アプリケーションがバックグラウンドになるときに背景画像を `overlayImage.png` に設定します。`overlayImage.png` は常に現在のビューを上書きするため、機密データの漏洩を防ぎます。
|
||||
|
||||
### キーチェーン
|
||||
|
||||
[**Keychain-Dumper**](https://github.com/ptoomey3/Keychain-Dumper)のようなツールを使用してキーチェーンをダンプすることができます(デバイスはジェイルブレイクされている必要があります)。\
|
||||
また、[**Objection**](https://github.com/sensepost/objection)の`ios keychain dump`も使用できます。
|
||||
[**Keychain-Dumper**](https://github.com/ptoomey3/Keychain-Dumper) のようなツールを使用してキーチェーンをダンプすることができます(デバイスはジェイルブレイクされている必要があります)。\
|
||||
また、[**Objection**](https://github.com/sensepost/objection) の `ios keychain dump` を使用することもできます。
|
||||
|
||||
**NSURLCredential**
|
||||
|
||||
**NSURLCredential**は、ユーザー名とパスワードをキーチェーンに保存するための完璧なクラスです。NSUserDefaultsやキーチェーンラッパーを使用する必要はありません。\
|
||||
ユーザーがログインしたら、彼のユーザー名とパスワードをキーチェーンに保存できます。
|
||||
**NSURLCredential** は、ユーザー名とパスワードをキーチェーンに保存するための完璧なクラスです。NSUserDefaultsやキーチェーンラッパーを気にする必要はありません。\
|
||||
ユーザーがログインしたら、彼のユーザー名とパスワードをキーチェーンに保存することができます。
|
||||
```swift
|
||||
NSURLCredential *credential;
|
||||
|
||||
credential = [NSURLCredential credentialWithUser:username password:password persistence:NSURLCredentialPersistencePermanent];
|
||||
[[NSURLCredentialStorage sharedCredentialStorage] setCredential:credential forProtectionSpace:self.loginProtectionSpace];
|
||||
```
|
||||
これらの秘密情報をダンプするために、**Objection**の`ios nsurlcredentialstorage dump`を使用することができます。
|
||||
**Objectionの** `ios nsurlcredentialstorage dump` を使用して、これらの秘密情報をダンプすることができます。
|
||||
|
||||
## カスタムキーボード/キーボードキャッシュ
|
||||
|
||||
iOS 8.0以降、AppleはカスタムキーボードなどのiOS用のカスタム拡張機能のインストールを許可しています。\
|
||||
インストールされたキーボードは、**設定** > **一般** > **キーボード** > **キーボード**から管理できます。\
|
||||
カスタムキーボードは、**キーストローク**をスニフィングしてそれらを攻撃者のサーバーに送信することができます。ただし、**ネットワーキング接続が必要なカスタムキーボードはユーザーに通知されます。**\
|
||||
インストールされたキーボードは、**設定** > **一般** > **キーボード** > **キーボード** から管理できます。\
|
||||
カスタムキーボードは、**キーストローク**を**スニフィング**して、それらを攻撃者のサーバーに送信することができます。ただし、**ネットワーキング接続が必要なカスタムキーボードはユーザーに通知されます。**\
|
||||
また、**ユーザーは別の**(より信頼性の高い)**キーボード**に切り替えて資格情報を入力することができます。
|
||||
|
||||
さらに、**アプリケーションは、アプリ内でカスタムキーボードの使用を制限**することができます(または少なくともアプリの重要な部分では制限できます)。
|
||||
さらに、**アプリケーションは、アプリ内(または少なくともアプリの重要な部分に対して)カスタムキーボードの使用を制限する**ことができます。
|
||||
|
||||
{% hint style="warning" %}
|
||||
ユーザーがそれらを必要としないと考える場合、サードパーティのキーボードを許可しないことをお勧めします。
|
||||
|
@ -565,13 +632,13 @@ iOS 8.0以降、AppleはカスタムキーボードなどのiOS用のカスタ
|
|||
|
||||
{% hint style="info" %}
|
||||
したがって、これらのファイルを常にチェックし、可能な**機密情報**を検索してください。\
|
||||
ネットワークトラフィックを傍受することは、カスタムキーボードがキーストロークをリモートサーバーに送信しているかどうかを確認する別の方法です。
|
||||
カスタムキーボードがキーストロークをリモートサーバーに送信しているかどうかを確認するために、**ネットワークトラフィックを傍受**することもできます。
|
||||
{% endhint %}
|
||||
|
||||
キーボードキャッシュには、[UITextInputTraitsプロトコル](https://developer.apple.com/reference/uikit/uitextinputtraits)が使用されます。UITextField、UITextView、およびUISearchBarクラスは、このプロトコルを自動的にサポートし、次のプロパティを提供します。
|
||||
|
||||
* `var autocorrectionType: UITextAutocorrectionType`は、入力中にオートコレクションが有効かどうかを決定します。オートコレクションが有効な場合、テキストオブジェクトは未知の単語を追跡し、適切な置換を提案します。ユーザーが置換をオーバーライドしない限り、入力されたテキストを自動的に置換します。このプロパティのデフォルト値は`UITextAutocorrectionTypeDefault`であり、ほとんどの入力方法ではオートコレクションが有効になります。
|
||||
* `var secureTextEntry: BOOL`は、`UITextField`のテキストのコピーとテキストのキャッシュが無効になり、入力されているテキストが非表示になるかどうかを決定します。このプロパティのデフォルト値は`NO`です。
|
||||
* `var secureTextEntry: BOOL`は、`UITextField`に対してテキストのコピーとテキストのキャッシュが無効になり、入力されているテキストが非表示になるかどうかを決定します。このプロパティのデフォルト値は`NO`です。
|
||||
|
||||
**コードでこの動作を特定するには:**
|
||||
|
||||
|
@ -582,7 +649,7 @@ textObject.secureTextEntry = YES;
|
|||
```
|
||||
* Xcodeの`Interface Builder`でxibとstoryboardファイルを開き、適切なオブジェクトの`Attributes Inspector`で`Secure Text Entry`と`Correction`の状態を確認します。
|
||||
|
||||
アプリケーションは、テキストフィールドに入力された機密情報のキャッシュを防止する必要があります。キャッシュを無効にするには、`textObject.autocorrectionType = UITextAutocorrectionTypeNo`の指示を使用して、必要なUITextFields、UITextViews、およびUISearchBarsでプログラム的に無効にします。PINやパスワードなどのマスクする必要があるデータには、`textObject.secureTextEntry`を`YES`に設定します。
|
||||
アプリケーションは、テキストフィールドに入力された機密情報のキャッシュを防止する必要があります。キャッシュを無効にするには、`textObject.autocorrectionType = UITextAutocorrectionTypeNo`の指示を使用して、必要なUITextFields、UITextViews、およびUISearchBarsでプログラム的に無効にします。PINやパスワードなどのマスクする必要があるデータに対しては、`textObject.secureTextEntry`を`YES`に設定します。
|
||||
```objectivec
|
||||
UITextField *textField = [ [ UITextField alloc ] initWithFrame: frame ];
|
||||
textField.autocorrectionType = UITextAutocorrectionTypeNo;
|
||||
|
@ -592,9 +659,9 @@ textField.autocorrectionType = UITextAutocorrectionTypeNo;
|
|||
コードをデバッグする最も一般的な方法は、ログを使用することであり、アプリケーションはログ内に**機密情報を表示する可能性があります**。\
|
||||
iOSバージョン6以前では、ログはワールドリーダブルでした(悪意のあるアプリは他のアプリのログを読み取り、そこから機密情報を抽出することができました)。**現在では、アプリは自分自身のログにのみアクセスできます**。
|
||||
|
||||
ただし、**アンロックされた**デバイスに**物理的なアクセス**権限を持つ**攻撃者**は、それをコンピュータに接続し、ログを**読み取る**ことができます(アプリによってディスクに書き込まれたログは、アプリがアンインストールされても削除されません)。
|
||||
ただし、**アンロックされた**デバイスに**物理的なアクセス**権限を持つ**攻撃者**は、それをコンピュータに接続し、ログを**読み取る**ことができます(アプリがアンインストールされても、アプリによってディスクに書き込まれたログは削除されません)。
|
||||
|
||||
アプリの**すべての画面をナビゲート**し、**すべてのUI要素と機能**とやり取りし、すべてのテキストフィールドに入力テキストを提供し、**機密情報**が公開されていないかどうかを確認するためにログを**確認**することが推奨されます。
|
||||
アプリの**すべての画面をナビゲート**し、**すべてのUI要素と機能**とやり取りし、すべてのテキストフィールドに入力テキストを提供し、**ログを確認**して**公開された機密情報**を探すことが推奨されます。
|
||||
|
||||
以下のキーワードを使用して、アプリのソースコードを事前定義およびカスタムのログステートメントをチェックします:
|
||||
|
||||
|
@ -625,7 +692,7 @@ Xcodeの**デバイス**ウィンドウを通じてコンソールログを収
|
|||
5. 問題を再現します。
|
||||
6. デバイスウィンドウの右上にある**コンソールを開く**ボタンをクリックして、別のウィンドウでコンソールログを表示します。
|
||||
|
||||
![](<../../.gitbook/assets/image (466) (2) (2) (2) (2) (2) (2) (2) (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1)
|
||||
![](<../../.gitbook/assets/image (466) (2) (2) (2) (2) (2) (2) (2) (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1)
|
||||
```bash
|
||||
iPhone:~ root# socat - UNIX-CONNECT:/var/run/lockdown/syslog.sock
|
||||
|
||||
|
@ -643,22 +710,22 @@ Jun 7 13:42:14 iPhone touch[9708] <Notice>: MS:Notice: Injecting: (null) [touch
|
|||
![](../.gitbook/assets/image%20\(9\)%20\(1\)%20\(2\).png)
|
||||
|
||||
\
|
||||
[**Trickest**](https://trickest.io/)を使用して、世界で最も高度なコミュニティツールによって強化された**ワークフローを簡単に構築**および**自動化**します。\
|
||||
今すぐアクセスを取得:
|
||||
[**Trickest**](https://trickest.io/)を使用して、世界で最も先進的なコミュニティツールによって強化されたワークフローを簡単に構築し、自動化することができます。\
|
||||
今すぐアクセスを取得してください:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
## バックアップ
|
||||
|
||||
iOSには、デバイスに保存されているデータのコピーを作成する自動バックアップ機能が含まれています。iTunes(macOS Catalinaまで)またはFinder(macOS Catalina以降)を使用するか、iCloudバックアップ機能を使用して、ホストコンピュータからiOSバックアップを作成できます。いずれの場合も、バックアップにはApple Pay情報やTouch IDの設定などの高度に機密性の高いデータを除く、iOSデバイスに保存されているほぼすべてのデータが含まれます。
|
||||
iOSには、デバイスに保存されているデータのコピーを作成する自動バックアップ機能が含まれています。iTunes(macOS Catalinaまで)またはFinder(macOS Catalina以降)を使用するか、iCloudバックアップ機能を使用して、ホストコンピュータからiOSバックアップを作成することができます。いずれの場合も、バックアップにはApple Pay情報やTouch IDの設定などの高度に機密性の高いデータを除く、iOSデバイスに保存されているほぼすべてのデータが含まれます。
|
||||
|
||||
iOSはインストールされたアプリとそのデータをバックアップするため、明らかな懸念は、アプリによって保存された**機密ユーザーデータ**がバックアップを通じて**意図せず漏洩する可能性**があるかどうかです。もう1つの懸念は、**データを保護したりアプリの機能を制限するために使用される機密の設定が、変更されたバックアップを復元した後にアプリの動作を変更するために改ざんされる可能性があるかどうか**です。両方の懸念は妥当であり、これらの脆弱性は現在の多くのアプリに存在することが証明されています。
|
||||
iOSはインストールされたアプリとそのデータをバックアップするため、アプリによって保存される**機密性の高いユーザーデータがバックアップを通じて意図せず漏洩する可能性**があるかどうかが明らかな懸念事項です。もう1つの懸念事項は、**データを保護したりアプリの機能を制限するために使用される機密性の高い設定が、変更されたバックアップを復元した後にアプリの動作を変更するために改ざんされる可能性**があるかどうかです。両方の懸念事項は妥当であり、これらの脆弱性は現在の多くのアプリに存在することが証明されています。
|
||||
|
||||
モバイルアプリがインストールされたデバイスのバックアップには、[アプリのプライベートディレクトリ](https://developer.apple.com/library/content/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/FileSystemOverview/FileSystemOverview.html#//apple\_ref/doc/uid/TP40010672-CH2-SW12)のすべてのサブディレクトリ(`Library/Caches/`を除く)およびファイルが含まれます。\
|
||||
したがって、**アプリのプライベートディレクトリまたはサブディレクトリに含まれるファイルやフォルダに機密データを平文で保存しないようにしてください**。
|
||||
モバイルアプリがインストールされたデバイスのバックアップには、[アプリのプライベートディレクトリ](https://developer.apple.com/library/content/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/FileSystemOverview/FileSystemOverview.html#//apple\_ref/doc/uid/TP40010672-CH2-SW12)内のすべてのサブディレクトリ(`Library/Caches/`を除く)とファイルが含まれます。\
|
||||
したがって、**アプリのプライベートディレクトリまたはサブディレクトリ内のファイルやフォルダに平文で機密データを保存しないように注意してください**。
|
||||
|
||||
`Documents/`および`Library/Application Support/`のすべてのファイルは、デフォルトで常にバックアップされますが、[バックアップからファイルを除外](https://developer.apple.com/library/content/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/FileSystemOverview/FileSystemOverview.html#//apple\_ref/doc/uid/TP40010672-CH2-SW28)するには、`NSURLIsExcludedFromBackupKey`キーを使用して`NSURL setResourceValue:forKey:error:`を呼び出すことができます。\
|
||||
ファイルとディレクトリをバックアップから除外するために、[NSURLIsExcludedFromBackupKey](https://developer.apple.com/reference/foundation/nsurl#//apple\_ref/c/data/NSURLIsExcludedFromBackupKey)および[CFURLIsExcludedFromBackupKey](https://developer.apple.com/reference/corefoundation/cfurl-rd7#//apple\_ref/c/data/kCFURLIsExcludedFromBackupKey)ファイルシステムプロパティを使用できます。
|
||||
`Documents/`と`Library/Application Support/`のすべてのファイルは、デフォルトで常にバックアップされますが、[バックアップからファイルを除外](https://developer.apple.com/library/content/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/FileSystemOverview/FileSystemOverview.html#//apple\_ref/doc/uid/TP40010672-CH2-SW28)することもできます。`NSURLIsExcludedFromBackupKey`キーを使用して`NSURL setResourceValue:forKey:error:`を呼び出すことで、バックアップからファイルとディレクトリを除外することができます。\
|
||||
ファイルシステムのプロパティである[NSURLIsExcludedFromBackupKey](https://developer.apple.com/reference/foundation/nsurl#//apple\_ref/c/data/NSURLIsExcludedFromBackupKey)と[CFURLIsExcludedFromBackupKey](https://developer.apple.com/reference/corefoundation/cfurl-rd7#//apple\_ref/c/data/kCFURLIsExcludedFromBackupKey)を使用して、ファイルとディレクトリをバックアップから除外することができます。
|
||||
|
||||
{% hint style="warning" %}
|
||||
したがって、アプリケーションのバックアップをチェックする際には、**アクセス可能な機密情報**があるかどうかを確認し、バックアップの**設定を変更することでアプリケーションの機密な動作を変更できるかどうか**を確認する必要があります。
|
||||
|
@ -666,11 +733,11 @@ iOSはインストールされたアプリとそのデータをバックアッ
|
|||
|
||||
**テスト方法**
|
||||
|
||||
まず、デバイスのバックアップを作成してください(Finderを使用して行うことができます)。バックアップの保存場所を見つけるために、公式のAppleのドキュメントを参照してください:[iPhone、iPad、およびiPod touchのバックアップの場所を見つける](https://support.apple.com/en-us/HT204215)。
|
||||
まず、デバイスのバックアップを作成します(Finderを使用して行うことができます)。公式のAppleのドキュメントは、[iPhone、iPad、およびiPod touchのバックアップの場所を特定する](https://support.apple.com/en-us/HT204215)のに役立ちます。
|
||||
|
||||
デバイスのバックアップ(`/Users/carlos.martin/Library/Application Support/MobileSync/Backup/{deviceID}`)を見つけたら、grepなどを使用して機密情報を探したり、[iMazing](https://imazing.com)のようなツールを使用したりできます。
|
||||
デバイスのバックアップ(`/Users/carlos.martin/Library/Application Support/MobileSync/Backup/{deviceID}`)を見つけたら、grepなどを使用して機密情報を探したり、[iMazing](https://imazing.com)のようなツールを使用することができます。
|
||||
|
||||
バックアップが暗号化されているかどうかを特定するには、バックアップディレクトリのルートにある「Manifest.plist」というファイルから「IsEncrypted」というキーを確認できます。次の例は、バックアップが暗号化されていることを示す設定を示しています:
|
||||
バックアップが暗号化されているかどうかを特定するには、バックアップディレクトリのルートにある「Manifest.plist」というファイルから「IsEncrypted」というキーを確認することができます。以下の例は、バックアップが暗号化されていることを示す設定を示しています:
|
||||
```markup
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
|
@ -695,9 +762,9 @@ iOSはインストールされたアプリとそのデータをバックアッ
|
|||
|
||||
## 機密データのメモリテスト
|
||||
|
||||
ある時点で、機密情報がメモリに保存されることになります。目的は、この情報ができるだけ短時間で露出されるようにすることです。
|
||||
ある時点で、機密情報がメモリに保存されることになります。目的は、この情報ができるだけ短時間で公開されるようにすることです。
|
||||
|
||||
アプリケーションのメモリを調査するためには、まず**メモリダンプ**を作成します。または、デバッガなどを使用してメモリをリアルタイムで**分析**することもできます。どの方法を使用しても、これは非常にエラーが発生しやすいプロセスです。ダンプは実行された関数によって残されたデータを提供し、重要なステップを実行し忘れる可能性があります。また、分析中にデータを見落とすことは、データの足跡(正確な値または形式)を知っていない限り非常に簡単です。たとえば、アプリがランダムに生成された対称鍵に従って暗号化する場合、その鍵をメモリ内で見つけることは非常に困難です。
|
||||
アプリケーションのメモリを調査するためには、まず**メモリダンプ**を作成します。または、デバッガなどを使用してメモリをリアルタイムで**分析**することもできます。どの方法を使用しても、これは非常にエラーが発生しやすいプロセスです。ダンプは実行された関数によって残されたデータを提供し、重要なステップを実行し忘れる可能性があります。また、分析中にデータを見落とすことは非常に簡単です。データの足跡(正確な値または形式)を知っていない限り、メモリにキーが表示されることはほとんどありません。たとえば、アプリがランダムに生成された対称鍵によって暗号化される場合、その鍵の値を他の手段で見つけない限り、メモリに鍵を見つけることは非常に困難です。
|
||||
|
||||
**メモリダンプの取得と分析**
|
||||
|
||||
|
@ -711,9 +778,9 @@ $ strings memory > strings.txt
|
|||
# using rabin2
|
||||
$ rabin2 -ZZ memory > strings.txt
|
||||
```
|
||||
お気に入りのエディタで`strings.txt`を開き、機密情報を特定するために探索してください。
|
||||
お気に入りのエディタで`strings.txt`を開き、機密情報を特定してください。
|
||||
|
||||
ただし、他の種類のデータを調査したい場合は、radare2とその検索機能を使用することをお勧めします。詳細な情報とオプションのリストについては、radare2の検索コマンド(`/?`)のヘルプを参照してください。以下はその一部です。
|
||||
ただし、他の種類のデータを調査したい場合は、radare2とその検索機能を使用することをお勧めします。詳細やオプションのリストについては、radare2の検索コマンド(`/?`)のヘルプを参照してください。以下はその一部です。
|
||||
```bash
|
||||
$ r2 <name_of_your_dump_file>
|
||||
|
||||
|
@ -747,47 +814,47 @@ Usage: /[!bf] [arg] Search stuff (see 'e??search' for options)
|
|||
|
||||
### チェック
|
||||
|
||||
コード内に**ハードコードされた**パスワード/シークレットがあるか、それらが**予測可能**であるか、コードが**弱い****暗号化**アルゴリズムを使用しているかを確認するために行う主なチェックです。
|
||||
コード内に**ハードコードされた**パスワード/シークレットがあるか、それらが**予測可能**であるか、コードが**弱い****暗号化**アルゴリズムを使用しているかを確認するために、主なチェックを実行することが重要です。
|
||||
|
||||
興味深いことに、**objection**を使用して一部の**暗号**ライブラリを自動的に**モニタリング**することができます。以下のコマンドを使用します。
|
||||
興味深いことに、**objection**を使用して一部の**暗号**ライブラリを自動的に**モニタリング**することができます。以下のコマンドを使用します:
|
||||
```swift
|
||||
ios monitor crypt
|
||||
```
|
||||
**詳細な情報**については、iOSの暗号化APIとライブラリにアクセスしてください[https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06e-testing-cryptography](https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06e-testing-cryptography)
|
||||
**詳細な情報**については、iOSの暗号化APIとライブラリにアクセスしてください。[https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06e-testing-cryptography](https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06e-testing-cryptography)
|
||||
|
||||
## ローカル認証
|
||||
|
||||
テスターは、ローカル認証は常にリモートエンドポイントで強制するか、暗号化プリミティブに基づいている必要があることを認識しておく必要があります。データが認証プロセスから返らない場合、攻撃者は簡単にローカル認証をバイパスすることができます。
|
||||
テスターは、ローカル認証は常にリモートエンドポイントで強制するか、暗号化プリミティブに基づいていることを意識する必要があります。認証プロセスからデータが返らない場合、攻撃者は簡単にローカル認証をバイパスすることができます。
|
||||
|
||||
[**Local Authentication framework**](https://developer.apple.com/documentation/localauthentication)は、開発者が認証ダイアログをユーザーに拡張するための一連のAPIを提供します。リモートサービスに接続する文脈では、ローカル認証を実装するために[keychain](https://developer.apple.com/library/content/documentation/Security/Conceptual/keychainServConcepts/01introduction/introduction.html)を活用することが可能です(おすすめです)。
|
||||
[**ローカル認証フレームワーク**](https://developer.apple.com/documentation/localauthentication)は、開発者が認証ダイアログをユーザーに拡張するためのAPIセットを提供します。リモートサービスに接続する文脈では、ローカル認証を実装するために[keychain](https://developer.apple.com/library/content/documentation/Security/Conceptual/keychainServConcepts/01introduction/introduction.html)を活用することが可能です(おすすめです)。
|
||||
|
||||
**指紋ID**センサーは、[SecureEnclaveセキュリティコプロセッサ](https://www.blackhat.com/docs/us-16/materials/us-16-Mandt-Demystifying-The-Secure-Enclave-Processor.pdf)によって操作され、指紋データをシステムの他の部分に公開しません。Touch IDの次に、Appleは顔認識に基づいた認証を可能にする_Face ID_を導入しました。
|
||||
**指紋ID**センサーは、[SecureEnclaveセキュリティコプロセッサ](https://www.blackhat.com/docs/us-16/materials/us-16-Mandt-Demystifying-The-Secure-Enclave-Processor.pdf)によって操作され、指紋データをシステムの他の部分に公開しません。Touch IDの次に、Appleは顔認識に基づく認証を可能にする_Face ID_を導入しました。
|
||||
|
||||
開発者は、Touch ID/Face ID認証を組み込むために2つのオプションがあります:
|
||||
|
||||
* `LocalAuthentication.framework`は、ユーザーをTouch IDを使用して認証するための高レベルのAPIです。アプリは登録された指紋に関連するデータにアクセスできず、認証が成功したかどうかのみを通知されます。
|
||||
* `Security.framework`は、[keychainサービス](https://developer.apple.com/documentation/security/keychain\_services)にアクセスするための低レベルのAPIです。アプリがバイオメトリック認証でいくつかの秘密データを**保護する必要がある場合**、これは安全なオプションです。アクセス制御はシステムレベルで管理され、簡単にバイパスすることはできません。`Security.framework`にはC APIがありますが、[いくつかのオープンソースのラッパー](https://www.raywenderlich.com/147308/secure-ios-user-data-keychain-touch-id)が利用可能であり、キーチェーンへのアクセスはNSUserDefaultsへのアクセスと同じくらい簡単です。
|
||||
* `Security.framework`は、[キーチェーンサービス](https://developer.apple.com/documentation/security/keychain\_services)にアクセスするための低レベルのAPIです。アプリがバイオメトリック認証でいくつかの秘密データを**保護する必要がある**場合、これは安全なオプションです。アクセス制御はシステムレベルで管理され、簡単にバイパスすることはできません。`Security.framework`にはC APIがありますが、[いくつかのオープンソースのラッパー](https://www.raywenderlich.com/147308/secure-ios-user-data-keychain-touch-id)が利用可能であり、キーチェーンへのアクセスはNSUserDefaultsへのアクセスと同じくらい簡単です。
|
||||
|
||||
{% hint style="danger" %}
|
||||
`LocalAuthentication.framework`または`Security.framework`を使用する場合、攻撃者によってバイパスされる可能性のある制御になることに注意してください。これらの制御は、真偽値のみを返し、進行するためのデータは返しません。詳細については、[Don't touch me that way, by David Lindner et al](https://www.youtube.com/watch?v=XhXIHVGCFFM)を参照してください。
|
||||
`LocalAuthentication.framework`または`Security.framework`を使用する場合、攻撃者によってバイパスされる可能性がある制御であることに注意してください。これらの制御は真偽値のみを返し、進行するためのデータは返しません。詳細については、[Don't touch me that way, by David Lindner et al](https://www.youtube.com/watch?v=XhXIHVGCFFM)を参照してください。
|
||||
{% endhint %}
|
||||
|
||||
### ローカル認証フレームワーク
|
||||
|
||||
開発者は、**`LAContext`**クラスの**`evaluatePolicy`**関数を利用して**認証プロンプト**を表示することができます。利用可能な2つのポリシーは、受け入れ可能な認証形式を定義します:
|
||||
開発者は、**`LAContext`**クラスの**`evaluatePolicy`**関数を利用して**認証プロンプト**を表示することができます。利用可能な2つのポリシーは、許容される認証形式を定義します:
|
||||
|
||||
* `deviceOwnerAuthentication`(Swift)または`LAPolicyDeviceOwnerAuthentication`(Objective-C):利用可能な場合、ユーザーはTouch ID認証を実行するように求められます。Touch IDがアクティブ化されていない場合、デバイスのパスコードが代わりに要求されます。デバイスのパスコードが有効にされていない場合、ポリシーの評価は失敗します。
|
||||
* `deviceOwnerAuthenticationWithBiometrics`(Swift)または`LAPolicyDeviceOwnerAuthenticationWithBiometrics`(Objective-C):認証はTouch IDに制限され、ユーザーはTouch IDのために求められます。
|
||||
* `deviceOwnerAuthenticationWithBiometrics`(Swift)または`LAPolicyDeviceOwnerAuthenticationWithBiometrics`(Objective-C):認証はバイオメトリクスに制限され、ユーザーはTouch IDを求められます。
|
||||
|
||||
**`evaluatePolicy`関数は真偽値を返します**。ユーザーが正常に認証されたかどうかを示します。つまり、簡単にバイパスすることができます(以下を参照)。
|
||||
|
||||
### キーチェーンを使用したローカル認証
|
||||
|
||||
**iOSキーチェーンAPIは(そして使用すべきです)ローカル認証を実装するために使用**できます。このプロセスでは、アプリはキーチェーンに秘密の認証トークンまたはユーザーを識別する他の秘密データを保存します。リモートサービスに認証するために、ユーザーはパスフレーズまたは指紋を使用してキーチェーンをロック解除し、秘密データを取得する必要があります。
|
||||
**iOSキーチェーンAPIは(そして使用すべきです)ローカル認証を実装するために使用**できます。このプロセスでは、アプリはキーチェーンに秘密の認証トークンまたは他の秘密のデータを保存します。リモートサービスに認証するために、ユーザーはパスフレーズまたは指紋を使用してキーチェーンをロック解除し、秘密のデータを取得する必要があります。
|
||||
|
||||
キーチェーンは、特別な`SecAccessControl`属性を持つアイテムを保存することができます。これにより、ユーザーがTouch ID認証をパスした後(または属性パラメータで許可されている場合はパスコード)、キーチェーンからのアイテムへのアクセスが許可されます。
|
||||
キーチェーンは、特別な`SecAccessControl`属性を持つアイテムを保存することができます。この属性が許可された場合、ユーザーがTouch ID認証をパスした後にのみ、キーチェーンからアイテムにアクセスできます(属性パラメータによってフォールバックとしてパスコードが許可されている場合)。
|
||||
|
||||
次の例では、文字列「test\_strong\_password」をキーチェーンに保存します。文字列は、パスコードが設定されている場合にのみ現在のデバイスでアクセスでき、現在登録されている指紋に対してTouch ID認証が行われた後にのみアクセスできます(`kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly`パラメータと`SecAccessControlCreateFlags.biometryCurrentSet`パラメータ):
|
||||
以下の例では、文字列「test\_strong\_password」をキーチェーンに保存します。この文字列は、パスコードが設定されている場合(`kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly`パラメータ)、および現在登録されている指紋に対してTouch ID認証が行われた後にのみアクセスできます(`SecAccessControlCreateFlags.biometryCurrentSet`パラメータ):
|
||||
|
||||
{% tabs %}
|
||||
{% tab title="Swift" %}
|
||||
|
@ -825,9 +892,46 @@ if status == noErr {
|
|||
// error while saving
|
||||
}
|
||||
```
|
||||
{% endtab %}
|
||||
{% tab title="Objective-C" %}
|
||||
|
||||
{% tab title="Objective-C" %}オブジェクティブ-C{% endtab %}
|
||||
以下は、iOSアプリのペネトレーションテストに使用するための情報です。
|
||||
|
||||
## 概要
|
||||
|
||||
iOSアプリのペネトレーションテストは、iOSアプリケーションのセキュリティ脆弱性を特定し、悪用される可能性を排除するために行われます。このガイドでは、iOSアプリのペネトレーションテストに使用するツールとテクニックについて説明します。
|
||||
|
||||
## ツール
|
||||
|
||||
iOSアプリのペネトレーションテストには、以下のツールが使用されます。
|
||||
|
||||
- **Burp Suite**: プロキシサーバーとして使用され、トラフィックのキャプチャと分析を行います。
|
||||
- **Cycript**: iOSアプリのランタイム解析とデバッグに使用されます。
|
||||
- **Frida**: iOSアプリのランタイム解析とデバッグに使用されます。
|
||||
- **MobSF**: モバイルアプリケーションのセキュリティフレームワークです。
|
||||
- **Needle**: iOSアプリのセキュリティテストフレームワークです。
|
||||
|
||||
## テクニック
|
||||
|
||||
iOSアプリのペネトレーションテストには、以下のテクニックが使用されます。
|
||||
|
||||
- **リバースエンジニアリング**: iOSアプリのバイナリ解析を行い、アプリの内部構造やセキュリティ脆弱性を特定します。
|
||||
- **ランタイム解析**: CycriptやFridaを使用して、iOSアプリのランタイムを解析し、実行中のコードやメモリ内のデータを調査します。
|
||||
- **APIインターセプト**: Burp Suiteを使用して、iOSアプリとの通信をキャプチャし、APIリクエストやレスポンスを分析します。
|
||||
- **データストレージ解析**: iOSアプリのデータストレージを解析し、機密情報が適切に保護されているかどうかを確認します。
|
||||
|
||||
## 注意事項
|
||||
|
||||
iOSアプリのペネトレーションテストを実施する際には、以下の注意事項に留意する必要があります。
|
||||
|
||||
- **法的制約**: ペネトレーションテストは、法的な制約に従って実施する必要があります。適切な許可を得るか、自身のアプリでテストを行うようにしてください。
|
||||
- **機密情報の保護**: ペネトレーションテスト中に取得した機密情報は、適切に保護する必要があります。情報の漏洩を防ぐために、適切なセキュリティ対策を講じてください。
|
||||
|
||||
## 参考文献
|
||||
|
||||
- [iOS Application Penetration Testing](https://www.owasp.org/index.php/IOS_Application_Penetration_Testing)
|
||||
- [iOS Application Security Testing Cheat Sheet](https://www.owasp.org/index.php/IOS_Application_Security_Testing_Cheat_Sheet)
|
||||
|
||||
{% endtab %}
|
||||
```objectivec
|
||||
// 1. create AccessControl object that will represent authentication settings
|
||||
CFErrorRef *err = nil;
|
||||
|
@ -855,13 +959,31 @@ if (status == noErr) {
|
|||
// error while saving
|
||||
}
|
||||
```
|
||||
{% tab title="Swift" %}
|
||||
|
||||
次に、キーチェーンから保存されたアイテムをリクエストすることができます。キーチェーンサービスは、ユーザーに認証ダイアログを表示し、適切な指紋が提供されたかどうかに応じてデータまたはnilを返します。
|
||||
|
||||
```swift
|
||||
let query: [String: Any] = [
|
||||
kSecClass as String: kSecClassGenericPassword,
|
||||
kSecAttrService as String: "MyApp",
|
||||
kSecReturnData as String: true
|
||||
]
|
||||
|
||||
var item: CFTypeRef?
|
||||
let status = SecItemCopyMatching(query as CFDictionary, &item)
|
||||
|
||||
if status == errSecSuccess {
|
||||
let passwordData = item as! Data
|
||||
let password = String(data: passwordData, encoding: .utf8)
|
||||
print("Password: \(password ?? "")")
|
||||
} else {
|
||||
print("Failed to retrieve password from keychain")
|
||||
}
|
||||
```
|
||||
|
||||
{% endtab %}
|
||||
{% endtabs %}
|
||||
|
||||
今、私たちはキーチェーンから保存されたアイテムをリクエストすることができます。キーチェーンサービスは、ユーザーに認証ダイアログを表示し、適切な指紋が提供されたかどうかに応じてデータまたはnilを返します。
|
||||
|
||||
{% tabs %}
|
||||
{% tab title="Swift" %}
|
||||
```swift
|
||||
// 1. define query
|
||||
var query = [String: Any]()
|
||||
|
@ -884,9 +1006,57 @@ let password = String(data: queryResult as! Data, encoding: .utf8)!
|
|||
// authorization not passed
|
||||
}
|
||||
```
|
||||
{% endtab %}
|
||||
{% tab title="Objective-C" %}
|
||||
|
||||
{% tab title="Objective-C" %}オブジェクティブ-C{% endtab %}
|
||||
以下は、iOSアプリのペネトレーションテストに関する情報です。
|
||||
|
||||
## iOSアプリのペネトレーションテスト
|
||||
|
||||
iOSアプリのペネトレーションテストは、iOSアプリのセキュリティを評価するために行われます。以下に、iOSアプリのペネトレーションテストの手法とツールについて説明します。
|
||||
|
||||
### 1. リバースエンジニアリング
|
||||
|
||||
リバースエンジニアリングは、iOSアプリのバイナリコードを解析して、アプリの内部構造や機能を理解するための手法です。リバースエンジニアリングには、デコンパイルやディスアセンブルなどの手法があります。
|
||||
|
||||
### 2. デバッグ
|
||||
|
||||
デバッグは、iOSアプリの実行中にプログラムの動作を監視し、問題を特定するための手法です。デバッグには、デバッガやプロキシツールを使用することがあります。
|
||||
|
||||
### 3. ネットワークトラフィックのキャプチャ
|
||||
|
||||
ネットワークトラフィックのキャプチャは、iOSアプリがネットワーク上で送受信するデータを監視するための手法です。キャプチャには、プロキシツールやパケットキャプチャツールを使用することがあります。
|
||||
|
||||
### 4. 脆弱性の分析
|
||||
|
||||
脆弱性の分析は、iOSアプリのセキュリティ上の脆弱性を特定するための手法です。脆弱性の分析には、静的解析や動的解析などの手法があります。
|
||||
|
||||
### 5. データストレージの解析
|
||||
|
||||
データストレージの解析は、iOSアプリがデータを保存する方法や場所を特定するための手法です。データストレージの解析には、ファイルシステムの解析やデータベースの解析などの手法があります。
|
||||
|
||||
### 6. 認証とセッション管理のテスト
|
||||
|
||||
認証とセッション管理のテストは、iOSアプリの認証機能やセッション管理機能のセキュリティを評価するための手法です。認証とセッション管理のテストには、認証バイパスやセッションハイジャックなどの手法があります。
|
||||
|
||||
### 7. 機密情報の漏洩テスト
|
||||
|
||||
機密情報の漏洩テストは、iOSアプリが機密情報を適切に保護しているかどうかを評価するための手法です。機密情報の漏洩テストには、データの暗号化やセキュアな通信の確認などの手法があります。
|
||||
|
||||
### 8. バイナリ解析
|
||||
|
||||
バイナリ解析は、iOSアプリのバイナリコードを解析して、セキュリティ上の脆弱性や悪意のあるコードを特定するための手法です。バイナリ解析には、逆アセンブラやデバッガなどのツールを使用することがあります。
|
||||
|
||||
### 9. マルウェアの検出
|
||||
|
||||
マルウェアの検出は、iOSアプリがマルウェアであるかどうかを判断するための手法です。マルウェアの検出には、静的解析や動的解析などの手法があります。
|
||||
|
||||
### 10. セキュリティポリシーの評価
|
||||
|
||||
セキュリティポリシーの評価は、iOSアプリが適切なセキュリティポリシーを実装しているかどうかを評価するための手法です。セキュリティポリシーの評価には、セキュリティガイドラインの確認やセキュリティ設定のテストなどの手法があります。
|
||||
|
||||
以上が、iOSアプリのペネトレーションテストの手法とツールの概要です。これらの手法とツールを使用して、iOSアプリのセキュリティを評価し、脆弱性を特定することができます。
|
||||
|
||||
{% endtab %}
|
||||
```objectivec
|
||||
// 1. define query
|
||||
NSDictionary *query = @{(__bridge id)kSecClass: (__bridge id)kSecClassGenericPassword,
|
||||
|
@ -912,7 +1082,7 @@ NSLog(@"Something went wrong");
|
|||
|
||||
### 検出
|
||||
|
||||
アプリ内でのフレームワークの使用は、アプリのバイナリの共有ダイナミックライブラリのリストを分析することで検出することもできます。これは、`otool`を使用して行うことができます。
|
||||
アプリのバイナリの共有ダイナミックライブラリのリストを分析することで、アプリ内でのフレームワークの使用も検出することができます。これは `otool` を使用して行うことができます。
|
||||
```bash
|
||||
$ otool -L <AppName>.app/<AppName>
|
||||
```
|
||||
|
@ -921,13 +1091,13 @@ $ otool -L <AppName>.app/<AppName>
|
|||
/System/Library/Frameworks/LocalAuthentication.framework/LocalAuthentication
|
||||
/System/Library/Frameworks/Security.framework/Security
|
||||
```
|
||||
もし`Security.framework`が使用されている場合、2番目のもののみ表示されます。
|
||||
もし`Security.framework`が使用されている場合、2番目のものだけが表示されます。
|
||||
|
||||
### ローカル認証フレームワークのバイパス
|
||||
|
||||
#### Objection
|
||||
|
||||
\*\*\*\*[**Objection バイオメトリクスバイパス**](https://github.com/sensepost/objection/wiki/Understanding-the-iOS-Biometrics-Bypass) \*\*\*\*は、LocalAuthenticationをバイパスするために使用できます。ObjectionはFridaを使用して`evaluatePolicy`関数をインストゥルメント化し、認証が成功しなかった場合でも`True`を返すようにします。`ios ui biometrics_bypass`コマンドを使用して、セキュリティの脆弱なバイオメトリック認証をバイパスします。Objectionはジョブを登録し、`evaluatePolicy`の結果を置き換えます。これはSwiftとObjective-Cの両方で動作します。
|
||||
[**Objection Biometrics Bypass**](https://github.com/sensepost/objection/wiki/Understanding-the-iOS-Biometrics-Bypass)は、LocalAuthenticationをバイパスするために使用されます。ObjectionはFridaを使用して`evaluatePolicy`関数をインストルメントし、認証が成功しなかった場合でも`True`を返すようにします。`ios ui biometrics_bypass`コマンドを使用して、安全でない生体認証をバイパスします。Objectionはジョブを登録し、`evaluatePolicy`の結果を置き換えます。これはSwiftとObjective-Cの両方で動作します。
|
||||
```bash
|
||||
...itudehacks.DVIAswiftv2.develop on (iPhone: 13.2.3) [usb] # ios ui biometrics_bypass
|
||||
(agent) Registering job 3mhtws9x47q. Type: ios-biometrics-disable
|
||||
|
@ -1040,7 +1210,7 @@ frida -U -f com.highaltitudehacks.DVIAswiftv2 --no-pause -l fingerprint-bypass-i
|
|||
|
||||
## ネットワーク通信
|
||||
|
||||
**暗号化なしでの通信が行われていないこと**と、アプリケーションがサーバーのTLS証明書を正しく**検証していること**を確認することが重要です。\
|
||||
**暗号化なしでの通信**が行われていないことを確認することは重要です。また、アプリケーションがサーバーのTLS証明書を正しく**検証している**ことも確認する必要があります。\
|
||||
このような問題をチェックするためには、**Burp**のようなプロキシを使用できます。
|
||||
|
||||
{% content-ref url="burp-configuration-for-ios.md" %}
|
||||
|
@ -1049,22 +1219,22 @@ frida -U -f com.highaltitudehacks.DVIAswiftv2 --no-pause -l fingerprint-bypass-i
|
|||
|
||||
### ホスト名のチェック
|
||||
|
||||
TLS証明書の検証における一般的な問題は、証明書が**信頼できるCAによって署名されているかどうか**を確認することですが、証明書の**ホスト名**がアクセスされているホスト名と一致しているかどうかを**チェックしない**ことです。\
|
||||
この問題をBurpを使用してチェックするためには、iPhoneでBurp CAを信頼した後、**異なるホスト名のためにBurpで新しい証明書を作成**して使用します。アプリケーションがまだ動作する場合、何かが脆弱です。
|
||||
TLS証明書の検証における一般的な問題は、証明書が**信頼できるCAによって署名されているかどうか**をチェックすることですが、証明書の**ホスト名**がアクセスされているホスト名と一致しているかどうかを**チェックしない**ことです。\
|
||||
この問題をBurpを使用してチェックするためには、iPhoneでBurp CAを信頼した後、Burpで**異なるホスト名のために新しい証明書を作成**して使用します。アプリケーションがまだ動作する場合、何かが脆弱です。
|
||||
|
||||
### 証明書ピニング
|
||||
|
||||
アプリケーションが正しくSSLピニングを使用している場合、アプリケーションは証明書が予想されるものである場合にのみ動作します。しかし、アプリケーションをテストする際には、Burpが独自の証明書を提供するため、これは問題になる可能性があります。\
|
||||
Jailbrokenデバイス内でこの保護をバイパスするために、アプリケーション[**SSL Kill Switch**](https://github.com/nabla-c0d3/ssl-kill-switch2)をインストールするか、\[**Burp Mobile Assistant\_\*]\(\_**[**https://portswigger.net/burp/documentation/desktop/tools/mobile-assistant/installing)\\**](https://portswigger.net/burp/documentation/desktop/tools/mobile-assistant/installing\)/)\*をインストールできます。
|
||||
アプリケーションが正しくSSLピニングを使用している場合、アプリケーションは証明書が予想されるものである場合にのみ動作します。しかし、テスト中のアプリケーションでは、Burpが独自の証明書を提供するため、問題が発生する可能性があります。\
|
||||
Jailbrokenデバイス内でこの保護をバイパスするために、アプリケーション[**SSL Kill Switch**](https://github.com/nabla-c0d3/ssl-kill-switch2)をインストールするか、[**Burp Mobile Assistant**](https://portswigger.net/burp/documentation/desktop/mobile/config-ios-device)をインストールすることができます。
|
||||
|
||||
また、**objection**の`ios sslpinning disable`を使用することもできます。
|
||||
|
||||
## その他
|
||||
|
||||
* **`/System/Library`**には、システムアプリケーションで使用される電話にインストールされたフレームワークがあります。
|
||||
* App Storeからユーザーがインストールしたアプリケーションは、**`/User/Applications`**内にあります。
|
||||
* ユーザーがApp Storeからインストールしたアプリケーションは、**`/User/Applications`**にあります。
|
||||
* **`/User/Library`**には、ユーザーレベルのアプリケーションによって保存されたデータが含まれています。
|
||||
* **`/User/Library/Notes/notes.sqlite`**にアクセスして、アプリケーション内に保存されたメモを読むことができます。
|
||||
* **`/User/Library/Notes/notes.sqlite`**にアクセスすると、アプリケーション内に保存されたメモを読むことができます。
|
||||
* インストールされたアプリケーションのフォルダー(**`/User/Applications/<APP ID>/`**)の中には、いくつかの興味深いファイルがあります:
|
||||
* **`iTunesArtwork`**:アプリで使用されるアイコン
|
||||
* **`iTunesMetadata.plist`**:App Storeで使用されるアプリの情報
|
||||
|
@ -1072,9 +1242,9 @@ Jailbrokenデバイス内でこの保護をバイパスするために、アプ
|
|||
|
||||
### ホットパッチング/強制更新
|
||||
|
||||
開発者は、アプリをApp Storeに再提出して承認されるまで待つことなく、**すべてのインストールされたアプリをリモートで即座にパッチ**することができます。\
|
||||
この目的のためには、通常[**JSPatch**](https://github.com/bang590/JSPatch)**が使用されます。**ただし、[Siren](https://github.com/ArtSabintsev/Siren)や[react-native-appstore-version-checker](https://www.npmjs.com/package/react-native-appstore-version-checker)などの他のオプションもあります。\
|
||||
**これは悪意のある第三者のSDKによって悪用される可能性がある危険なメカニズムです。そのため、自動更新に使用される方法(あれば)を確認し、テストすることが推奨されます。**この目的のために、以前のバージョンのアプリをダウンロードして試すことができます。
|
||||
開発者は、アプリをApp Storeに再提出して承認を待つことなく、**すべてのインストールされたアプリをリモートで即座にパッチ**することができます。\
|
||||
この目的のためには、通常は[JSPatch](https://github.com/bang590/JSPatch)が使用されますが、[Siren](https://github.com/ArtSabintsev/Siren)や[react-native-appstore-version-checker](https://www.npmjs.com/package/react-native-appstore-version-checker)などの他のオプションもあります。\
|
||||
**これは悪意のある第三者のSDKによって悪用される可能性がある危険なメカニズムです。そのため、自動更新に使用される方法(あれば)を確認し、テストすることが推奨されます。**この目的のために、以前のバージョンのアプリをダウンロードしてみることができます。
|
||||
|
||||
### サードパーティ
|
||||
|
||||
|
@ -1091,7 +1261,7 @@ Jailbrokenデバイス内でこの保護をバイパスするために、アプ
|
|||
|
||||
* [https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06b-basic-security-testing#information-gathering](https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06b-basic-security-testing#information-gathering)
|
||||
* [iOS & Mobile App Pentesting - INE](https://my.ine.com/CyberSecurity/courses/089d060b/ios-mobile-app-pentesting)
|
||||
## 追加情報
|
||||
## 詳細情報
|
||||
|
||||
* [https://github.com/ivRodriguezCA/RE-iOS-Apps/](https://github.com/ivRodriguezCA/RE-iOS-Apps/) IOS無料コース([https://syrion.me/blog/ios-swift-antijailbreak-bypass-frida/](https://syrion.me/blog/ios-swift-antijailbreak-bypass-frida/))
|
||||
* [https://www.sans.org/reading-room/whitepapers/testing/ipwn-apps-pentesting-ios-applications-34577](https://www.sans.org/reading-room/whitepapers/testing/ipwn-apps-pentesting-ios-applications-34577)
|
||||
|
@ -1116,9 +1286,9 @@ Jailbrokenデバイス内でこの保護をバイパスするために、アプ
|
|||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
* **サイバーセキュリティ企業で働いていますか?** **HackTricksで会社を宣伝**したいですか?または、**最新バージョンのPEASSを入手**したいですか?または、HackTricksを**PDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見しましょう、私たちの独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクション
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見しましょう、独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです
|
||||
* [**公式のPEASS&HackTricks swag**](https://peass.creator-spring.com)を手に入れましょう
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **ハッキングのトリックを共有するには、**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **にPRを提出してください。**
|
||||
* **ハッキングのトリックを共有するには、**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **および**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **にPRを提出してください。**
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,42 +1,39 @@
|
|||
# iOSテスト環境
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
- **サイバーセキュリティ会社**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**最新バージョンのPEASSを入手したり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||||
|
||||
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
|
||||
|
||||
- [**公式のPEASS&HackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう。
|
||||
|
||||
- [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
|
||||
|
||||
- **ハッキングのトリックを共有するには、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)にPRを提出してください**。
|
||||
* **サイバーセキュリティ会社**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**最新バージョンのPEASSを入手したり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
|
||||
* [**公式のPEASS&HackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう。
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
|
||||
* **ハッキングのトリックを共有するには、PRを**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **に提出してください。**
|
||||
|
||||
</details>
|
||||
|
||||
## Apple Developer Program
|
||||
|
||||
# Apple Developer Program
|
||||
**プロビジョニングID**は、Appleの開発者アカウントに関連付けられた公開鍵と秘密鍵のコレクションです。アプリに署名するためには、**Apple Developer Program**に登録するために**99ドル/年**を支払う必要があります。これをしないと、ソースコードからアプリケーションを物理デバイスで実行することはできません。別のオプションとして、**脱獄されたデバイス**を使用することもできます。
|
||||
|
||||
**プロビジョニングID**は、Appleの開発者アカウントに関連付けられた公開鍵と秘密鍵のコレクションです。アプリに署名するためには、**Apple Developer Program**に登録して**99ドル/年**を支払い、プロビジョニングIDを取得する必要があります。これがないと、ソースコードからアプリケーションを物理デバイスで実行することはできません。別のオプションとして、**脱獄されたデバイス**を使用することもできます。
|
||||
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**」をクリックします。
|
||||
|
||||
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 SDKシミュレータ**は、iOSデバイスのより高レベルな_シミュレーション_を提供します。最も重要なことは、エミュレータバイナリはARMコードではなくx86コードにコンパイルされます。実際のデバイス向けにコンパイルされたアプリは実行されないため、シミュレータはブラックボックス分析やリバースエンジニアリングには役立ちません。
|
||||
|
||||
## **シミュレータ**
|
||||
### **シミュレータ**
|
||||
|
||||
最初に知っておく必要があることは、**シミュレータ内でのペンテストは、脱獄されたデバイスで行うよりも制限が多い**ということです。
|
||||
シミュレータ内でのペントストを実行する場合、**ジェイルブレイクされたデバイス**で行うよりも制限が多くなります。
|
||||
|
||||
iOSアプリをビルドおよびサポートするために必要なすべてのツールは、**公式にはMac OSのみでサポートされています**。\
|
||||
AppleのデファクトツールであるXcodeは、iOSアプリケーションの作成/デバッグ/インストゥルメンテーションに使用できます。他のコンポーネント(シミュレータやさまざまなSDKバージョンなど)をダウンロードすることもできます。\
|
||||
|
@ -44,112 +41,116 @@ AppleのデファクトツールであるXcodeは、iOSアプリケーション
|
|||
|
||||
シミュレータのファイルは`/Users/<username>/Library/Developer/CoreSimulator/Devices`にあります。
|
||||
|
||||
シミュレータを開くには、Xcodeを実行し、_Xcodeタブ_を押して _Open Developer tools_ --> _Simulator_をクリックします。\
|
||||
__次の画像で「iPod touch \[...]」をクリックすると、他のデバイスを選択できます。
|
||||
シミュレータを開くには、Xcodeを実行し、_Xcodeタブ_ --> _Open Developer tools_ --> _Simulator_をクリックします。\
|
||||
\_\_次の画像で「iPod touch \[...]」をクリックすると、他のデバイスを選択できます。
|
||||
|
||||
![](<../../.gitbook/assets/image (457).png>)
|
||||
|
||||
![](<../../.gitbook/assets/image (458).png>)
|
||||
|
||||
## シミュレータ内のアプリケーション
|
||||
### シミュレータ内のアプリケーション
|
||||
|
||||
`/Users/<username>/Library/Developer/CoreSimulator/Devices`内には、**インストールされたシミュレータ**がすべて表示されます。エミュレータの中に作成されたアプリケーションのファイルにアクセスしたい場合、**どのエミュレータにアプリがインストールされているか**を知るのは困難かもしれません。正しいUIDを見つけるためのクイックな方法は、シミュレータでアプリを実行し、次のコマンドを実行することです:
|
||||
`/Users/<username>/Library/Developer/CoreSimulator/Devices`内には、**インストールされたシミュレータ**がすべて表示されます。エミュレータ内で作成されたアプリケーションのファイルにアクセスしたい場合、**どのエミュレータにアプリがインストールされているか**を知るのは困難かもしれません。正しいUIDを見つけるためのクイックな方法は、シミュレータでアプリを実行し、次のコマンドを実行することです:
|
||||
```bash
|
||||
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/`にアクセスする必要があります。
|
||||
しかし、驚くことに、ここにアプリは見つかりません。`/Users/<username>/Library/Developer/Xcode/DerivedData/{Application}/Build/Products/Debug-iphonesimulator/`にアクセスする必要があります。
|
||||
|
||||
そして、このフォルダには**アプリのパッケージが見つかります**。
|
||||
そして、このフォルダには**アプリケーションのパッケージが見つかります**。
|
||||
|
||||
# エミュレータ
|
||||
## エミュレータ
|
||||
|
||||
Corelliumは唯一の一般公開されているiOSエミュレータです。これはパーユーザーライセンスモデルを採用したエンタープライズSaaSソリューションであり、トライアルライセンスは提供されていません。
|
||||
Corelliumは現在公開されている唯一のiOSエミュレータです。これはエンタープライズ向けのSaaSソリューションであり、ユーザーライセンスモデルを採用しており、トライアルライセンスは提供されていません。
|
||||
|
||||
# ジェイルブレイク
|
||||
## ジェイルブレイク
|
||||
|
||||
AppleはiPhoneで実行されるコードが**Appleによって発行された証明書で署名されている**ことを厳密に要求しています。**ジェイルブレイク**は、OSによって設定されたこれらの制限や他のセキュリティ制御を積極的に**回避するプロセス**です。したがって、デバイスがジェイルブレイクされると、インストールされるアプリをチェックする責任がある**整合性チェック**がパッチされ、**バイパス**されます。
|
||||
AppleはiPhoneで実行されるコードが**Appleによって発行された証明書で署名されている**必要があります。**ジェイルブレイク**は、OSによって設定されたこれらの制限や他のセキュリティ制御を積極的に**回避するプロセス**です。したがって、デバイスがジェイルブレイクされると、インストールされるアプリをチェックする責任がある**整合性チェック**がパッチされ、**バイパス**されます。
|
||||
|
||||
{% hint style="info" %}
|
||||
Androidとは異なり、iOSでは「デベロッパーモード」に切り替えて未署名/信頼できないコードをデバイス上で実行することはできません。
|
||||
{% endhint %}
|
||||
|
||||
## AndroidのRootとの比較
|
||||
### AndroidのRootとの比較
|
||||
|
||||
iOSのジェイルブレイクは、しばしばAndroidのルート化と比較されますが、プロセスは実際にはかなり**異なります**。違いを説明するために、まずAndroidの「ルート化」と「フラッシング」の概念を見直してみましょう。
|
||||
|
||||
* **ルート化**: これは通常、システムに`su`バイナリをインストールするか、ルート化されたカスタムROMでシステム全体を置き換えることを含みます。ブートローダーにアクセスできる限り、ルートアクセスを取得するためにはエクスプロイトは必要ありません。
|
||||
* **ルート化**: これは通常、システムに`su`バイナリをインストールするか、ルート化されたカスタムROMでシステム全体を置き換えることを含みます。ブートローダーにアクセスできる限り、エクスプロイトはルートアクセスの取得に必要ありません。
|
||||
* **カスタムROMのフラッシュ**: ブートローダーをアンロックした後、デバイス上で実行されているOSを置き換えることができます。ブートローダーをアンロックするためにはエクスプロイトが必要な場合があります。
|
||||
|
||||
**iOSデバイスでは、カスタムROMのフラッシュは不可能**です。なぜなら、iOSブートローダーは**Appleによって署名されたイメージのみ**をブートおよびフラッシュすることを許可しているからです。これが、**Appleによって署名されていない場合、公式のiOSイメージもインストールできない**理由であり、iOSのダウングレードは前のiOSバージョンがまだ署名されている限りのみ可能です。
|
||||
|
||||
ジェイルブレイクの目的は、iOSの保護機能(特にAppleのコード署名メカニズム)を**無効にすること**です。これにより、デバイス上で**任意の未署名コードが実行**できるようになります(カスタムコードやCydiaやSileoなどの代替アプリストアからダウンロードしたコードなど)。"ジェイルブレイク"という言葉は、無効化プロセスを自動化するオールインワンツールを指す口語的な表現です。
|
||||
ジェイルブレイクの目的は、iOSの保護機能(特にAppleのコード署名メカニズム)を**無効にすること**です。これにより、デバイス上で**任意の未署名コードが実行**できるようになります(例:カスタムコードやCydiaやSileoなどの代替アプリストアからダウンロードしたコード)。"ジェイルブレイク"という言葉は、無効化プロセスを自動化するオールインワンツールを指す口語的な表現です。
|
||||
|
||||
## ジェイルブレイクの考慮事項
|
||||
### ジェイルブレイクの考慮事項
|
||||
|
||||
iOSデバイスのジェイルブレイクは、Appleがシステムを強化し、エクスプロイトされた脆弱性を修正するため、ますます**複雑**になっています。ジェイルブレイクは非常に時間的に敏感な手順になっており、Appleが脆弱なバージョンの署名を比較的早く停止するためです(iPhone 4とiPad 1のBootROMに影響を与える[limera1nエクスプロイト](https://www.theiphonewiki.com/wiki/Limera1n)などのハードウェアベースの脆弱性を利用する場合を除く)。これは、Appleがファームウェアの署名を停止した後、特定のiOSバージョンにダウングレードできないことを意味します。
|
||||
iOSデバイスのジェイルブレイクは、Appleがシステムを強化し、エクスプロイトされた脆弱性を修正するため、ますます**複雑**になっています。ジェイルブレイクは非常に時間的に敏感な手順になっており、Appleが修正をリリースした後は比較的すぐにこれらの脆弱なバージョンの署名を停止します(iPhone 4やiPad 1のBootROMに影響を与える[limera1nエクスプロイト](https://www.theiphonewiki.com/wiki/Limera1n)などのハードウェアベースの脆弱性を利用する場合を除く)。つまり、**Appleがファームウェアの署名を停止した後は、特定のiOSバージョンにダウングレードすることはできません**。
|
||||
|
||||
セキュリティテストに使用するジェイルブレイクされたデバイスがある場合は、最新のiOSバージョンにアップグレードした後も再ジェイルブレイクできることが100%確実でない限り、そのままにしておいてください。
|
||||
|
||||
iOSのアップグレードは、チャレンジ-レスポンスプロセス(いわゆるSHSHブロブを生成するプロセス)に基づいています。デバイスは、チャレンジに対する応答がAppleによって署名されている場合にのみOSのインストールを許可します。これが研究者が「署名ウィンドウ」と呼ぶものであり、**ダウンロードしたOTAファームウェアパッケージを単純に保存してデバイスにロードすることはできません**。マイナーなiOSのアップグレードでは、2つのバージョンがAppleによって署名される場合があります(最新バージョンと前のiOSバージョン)。これは、iOSデバイスをダウングレードできる唯一の状況です。現在の署名ウィンドウを確認し、OTAファームウェアをダウンロードすることができます。[IPSW Downloadsのウェブサイト](https://ipsw.me)から。
|
||||
iOSのアップグレードは、チャレンジレスポンスプロセス(いわゆるSHSHブロブの生成)に基づいています。デバイスは、チャレンジに対するレスポンスがAppleによって署名されている場合にのみOSのインストールを許可します。これが研究者が「署名ウィンドウ」と呼ぶものであり、**ダウンロードしたOTAファームウェアパッケージを単純に保存してデバイスにロードすることはできません**。マイナーなiOSのアップグレードでは、2つのバージョンがAppleによって署名される場合があります(最新バージョンと前のiOSバージョン)。これは、iOSデバイスをダウングレードできる唯一の状況です。現在の署名ウィンドウを確認し、OTAファームウェアをダウンロードすることができます。[IPSW Downloadsのウェブサイト](https://ipsw.me)から。
|
||||
|
||||
{% hint style="danger" %}
|
||||
**OSを更新すると、ジェイルブレイクの効果が失われます。**
|
||||
{% endhint %}
|
||||
|
||||
## ジェイルブレイクの種類
|
||||
### ジェイルブレイクの種類
|
||||
|
||||
* **テザリングジェイルブレイク**は、再起動時に持続しないため、ジェイルブレイクを再適用するにはデバイスをコンピュータに接続する(テザリング)必要があります。コンピュータが接続されていない場合、デバイスは再起動しない場合があります。
|
||||
* **セミテザリングジェイルブレイク**は、再起動時にデバイスがコンピュータに接続されていない限り、再適用することはできません。デバイスは自分自身で非ジェイルブレイクモードで起動することもできます。
|
||||
* **セミアンテザリングジェイルブレイク**は、デバイスが自動的に起動できますが、コード署名の無効化のためのカーネルパッチ(またはユーザーランドの変更)は自動的に適用されません。ユーザーは、アプリを起動したり、ウェブサイトを訪れたりすることでデバイスを再ジェイルブレイクする必要があります(コンピュータへの接続は必要ありません)。
|
||||
* **アンテザリングジェイルブレイク**は、一度だけ適用する必要があるため、エンドユーザーの最も人気のある選択肢です。その後、デバイスは永久にジェイルブレイクされた状態になります。
|
||||
* **セミテザリングジェイルブレイク**は、再起動時にデバイスがコンピュータに接続されていないと再適用できません。デバイスは自身で非ジェイルブレイクモードで起動することもできます。
|
||||
* **セミアンテザリングジェイルブレイク**は、デバイスが自身で起動できますが、コード署名の無効化のためのカーネルパッチ(またはユーザーランドの変更)は自動的に適用されません。ユーザーはアプリを起動したり、ウェブサイトを訪れたりしてデバイスを再ジェイルブレイクする必要があります(コンピュータへの接続は必要ありませんので、アンテザリングという用語が使われます)。
|
||||
* **アンテザリングジェイルブレイク**は、エンドユーザーにとって最も人気のある選択肢です。一度だけ適用する必要があり、その後デバイスは永久にジェイルブレイクされた状態になります。
|
||||
|
||||
## ジェイルブレイクツール
|
||||
### ジェイルブレイクツール
|
||||
|
||||
異なるiOSバージョンには、**異なるジェイルブレイク手法**が必要です。[iOSのバージョンに公開されているジェイルブレイクがあるかどうかを判断](https://canijailbreak.com)してください。ジェイルブレイクグループ/作者の名前と似たドメイン名の背後に隠れている偽のツールやスパイウェアに注意してください。
|
||||
異なるiOSバージョンには、**異なるジェイルブレイク手法**が必要です。[自分のiOSバージョンに公開されているジェイルブレイクがあるかどうかを確認](https://canijailbreak.com)してください。ジェイルブレイクグループ/作者の名前に似たドメイン名の背後に隠れている偽のツールやスパイウェアに注意してください。
|
||||
|
||||
iOSのジェイルブレイクシーンは非常に急速に進化して
|
||||
## **Jailbreakingの後**
|
||||
バージョ
|
||||
### 利点
|
||||
|
||||
Jailbreakingの最も重要な副作用は、OSによって設定された**サンドボックスが取り除かれる**ことです。したがって、デバイス上の**任意のアプリがファイルシステム上の任意のファイル**を読み取ることができます。これには、他のアプリのファイル、クッキー、キーチェーンも含まれます。
|
||||
|
||||
Jailbrokenデバイスでは、ユーザーは**承認されていないアプリをインストール**し、それ以外ではアクセスできない**より多くのAPI**を利用することができます。
|
||||
|
||||
{% hint style="warning" %}
|
||||
**通常のユーザーはモバイルをJailbreakすることはお勧めしません**
|
||||
{% endhint %}
|
||||
|
||||
### **Jailbreaking後**
|
||||
|
||||
{% content-ref url="basic-ios-testing-operations.md" %}
|
||||
[basic-ios-testing-operations.md](basic-ios-testing-operations.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## **Jailbreakの検出**
|
||||
### **Jailbreakの検出**
|
||||
|
||||
**いくつかのアプリケーションは、モバイルがjailbrokenされているかどうかを検出し、その場合はアプリケーションを実行しないようにします**
|
||||
**いくつかのアプリケーションは、モバイルがJailbrokenされているかどうかを検出し、その場合はアプリケーションを実行しないようにします**
|
||||
|
||||
* iOSをjailbreakすると、通常は**ファイルとフォルダがインストール**されます。これらを検索してデバイスがjailbrokenであるかどうかを判断することができます。
|
||||
* jailbrokenデバイスでは、アプリケーションはサンドボックスの外に**新しいファイルへの読み書きアクセス**を取得します。
|
||||
* 一部の**API呼び出し**は**異なる動作**を示す場合があります。
|
||||
* iOSをJailbreakすると、通常**ファイルとフォルダがインストール**されます。これらを検索してデバイスがJailbrokenであるかどうかを判断することができます。
|
||||
* Jailbrokenデバイスでは、アプリケーションはサンドボックスの外部にある**新しいファイルに読み書きアクセス**できます。
|
||||
* 一部の**API呼び出し**は**異なる動作**を示します。
|
||||
* **OpenSSH**サービスの存在
|
||||
* `/bin/sh`を呼び出すと、0ではなく1が**返されます**
|
||||
|
||||
**Jailbreakingの検出方法の詳細は[こちら](https://www.trustwave.com/en-us/resources/blogs/spiderlabs-blog/jailbreak-detection-methods/)を参照してください。**
|
||||
|
||||
`objection`の`ios jailbreak disable`を使用して、この検出を回避することもできます。
|
||||
**objection**の`ios jailbreak disable`を使用して、この検出を回避することもできます。
|
||||
|
||||
# **Jailbreak Detection Bypass**
|
||||
|
||||
`objection`の`ios jailbreak disable`を使用して、この検出を回避することもできます。
|
||||
|
||||
また、ツール**Liberty Lite**(https://ryleyangus.com/repo/)をインストールすることもできます。リポジトリが追加されると、アプリが「検索」タブに表示されるはずです。
|
||||
## **Jailbreak Detection Bypass**
|
||||
|
||||
* **objection**の`ios jailbreak disable`を使用して、この検出を回避することもできます。
|
||||
* ツール**Liberty Lite**(https://ryleyangus.com/repo/)をインストールすることもできます。リポジトリが追加されると、アプリは「検索」タブに表示されるはずです。
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
- **サイバーセキュリティ企業で働いていますか? HackTricksであなたの会社を宣伝したいですか?または、PEASSの最新バージョンやHackTricksのPDFをダウンロードしたいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!**
|
||||
|
||||
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見しましょう、私たちの独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクション
|
||||
|
||||
- [**公式のPEASS&HackTricksのスワッグ**](https://peass.creator-spring.com)を手に入れましょう
|
||||
|
||||
- **[💬](https://emojipedia.org/speech-balloon/) Discordグループ**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter**で私をフォローする[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
|
||||
- **ハッキングのトリックを共有するには、[hacktricks repo](https://github.com/carlospolop/hacktricks)と[hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)にPRを提出してください。**
|
||||
* **サイバーセキュリティ企業で働いていますか? HackTricksであなたの会社を宣伝したいですか?または、PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロードしたりしたいですか?** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見しましょう、私たちの独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクション
|
||||
* [**公式のPEASS&HackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter**で私をフォローしてください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **ハッキングのトリックを共有するには、PRを** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **に提出してください。**
|
||||
|
||||
</details>
|
||||
|
|
Loading…
Reference in a new issue