From 072b62f85423e52a6a8d3442048d4d4fa593b8e7 Mon Sep 17 00:00:00 2001 From: Translator Date: Wed, 20 Aug 2025 11:26:54 +0000 Subject: [PATCH] Translated ['src/generic-methodologies-and-resources/pentesting-network/ --- .../pentesting-network/pentesting-ipv6.md | 108 +++++++++++------- 1 file changed, 68 insertions(+), 40 deletions(-) diff --git a/src/generic-methodologies-and-resources/pentesting-network/pentesting-ipv6.md b/src/generic-methodologies-and-resources/pentesting-network/pentesting-ipv6.md index 840633b28..9fbf2b61f 100644 --- a/src/generic-methodologies-and-resources/pentesting-network/pentesting-ipv6.md +++ b/src/generic-methodologies-and-resources/pentesting-network/pentesting-ipv6.md @@ -8,27 +8,27 @@ IPv6 アドレスは、ネットワークの組織化とデバイスの相互作用を強化するように構造化されています。IPv6 アドレスは次のように分かれています: -1. **ネットワークプレフィックス**: 最初の 48 ビットで、ネットワークセグメントを決定します。 -2. **サブネット ID**: 次の 16 ビットで、ネットワーク内の特定のサブネットを定義するために使用されます。 -3. **インターフェース識別子**: 最後の 64 ビットで、サブネット内のデバイスを一意に識別します。 +1. **ネットワークプレフィックス**:最初の 48 ビットで、ネットワークセグメントを決定します。 +2. **サブネット ID**:次の 16 ビットで、ネットワーク内の特定のサブネットを定義するために使用されます。 +3. **インターフェース識別子**:最後の 64 ビットで、サブネット内のデバイスを一意に識別します。 IPv6 は IPv4 に見られる ARP プロトコルを省略していますが、2 つの主要なメッセージを持つ **ICMPv6** を導入しています: -- **隣接要求 (NS)**: アドレス解決のためのマルチキャストメッセージ。 -- **隣接広告 (NA)**: NS へのユニキャスト応答または自発的な通知。 +- **隣接要求 (NS)**:アドレス解決のためのマルチキャストメッセージ。 +- **隣接広告 (NA)**:NS へのユニキャスト応答または自発的な通知。 IPv6 には特別なアドレスタイプも含まれています: -- **ループバックアドレス (`::1`)**: IPv4 の `127.0.0.1` に相当し、ホスト内の内部通信に使用されます。 -- **リンクローカルアドレス (`FE80::/10`)**: ローカルネットワーク活動のためのもので、インターネットルーティングには使用されません。同じローカルネットワーク上のデバイスは、この範囲を使用して互いに発見できます。 +- **ループバックアドレス (`::1`)**:IPv4 の `127.0.0.1` に相当し、ホスト内の内部通信に使用されます。 +- **リンクローカルアドレス (`FE80::/10`)**:ローカルネットワーク活動用で、インターネットルーティングには使用されません。同じローカルネットワーク上のデバイスは、この範囲を使用して互いに発見できます。 ### ネットワークコマンドにおける IPv6 の実用的な使用法 IPv6 ネットワークと対話するために、さまざまなコマンドを使用できます: -- **リンクローカルアドレスの Ping**: `ping6` を使用してローカルデバイスの存在を確認します。 -- **隣接発見**: `ip neigh` を使用してリンク層で発見されたデバイスを表示します。 -- **alive6**: 同じネットワーク上のデバイスを発見するための代替ツールです。 +- **リンクローカルアドレスの Ping**:`ping6` を使用してローカルデバイスの存在を確認します。 +- **隣接発見**:`ip neigh` を使用してリンク層で発見されたデバイスを表示します。 +- **alive6**:同じネットワーク上のデバイスを発見するための代替ツールです。 以下はコマンドの例です: ```bash @@ -38,38 +38,38 @@ ip neigh | grep ^fe80 # Alternatively, use alive6 for neighbor discovery alive6 eth0 ``` -IPv6アドレスは、デバイスのMACアドレスからローカル通信のために導出できます。以下は、既知のMACアドレスからリンクローカルIPv6アドレスを導出するための簡略ガイドと、IPv6アドレスの種類およびネットワーク内のIPv6アドレスを発見する方法の簡単な概要です。 +IPv6アドレスは、ローカル通信のためにデバイスのMACアドレスから導出できます。以下は、既知のMACアドレスからリンクローカルIPv6アドレスを導出するための簡略ガイドと、IPv6アドレスの種類およびネットワーク内のIPv6アドレスを発見する方法の簡単な概要です。 ### **MACアドレスからリンクローカルIPv6を導出する** -MACアドレス **`12:34:56:78:9a:bc`** が与えられた場合、リンクローカルIPv6アドレスは次のように構築できます: +MACアドレス **`12:34:56:78:9a:bc`** が与えられた場合、リンクローカルIPv6アドレスは次のように構築できます。 -1. MACをIPv6形式に変換: **`1234:5678:9abc`** -2. `fe80::` を前に付け、中間に `fffe` を挿入: **`fe80::1234:56ff:fe78:9abc`** -3. 左から7番目のビットを反転させ、`1234` を `1034` に変更: **`fe80::1034:56ff:fe78:9abc`** +1. MACをIPv6形式に変換: **`1234:5678:9abc`** +2. `fe80::` を前に付け、中間に `fffe` を挿入: **`fe80::1234:56ff:fe78:9abc`** +3. 左から7ビットを反転させ、`1234` を `1034` に変更: **`fe80::1034:56ff:fe78:9abc`** ### **IPv6アドレスの種類** -- **ユニークローカルアドレス (ULA)**:ローカル通信用で、公共インターネットルーティングには使用されません。プレフィックス: **`FEC00::/7`** -- **マルチキャストアドレス**:1対多の通信用。マルチキャストグループ内のすべてのインターフェースに配信されます。プレフィックス: **`FF00::/8`** -- **エニキャストアドレス**:1対最近接の通信用。ルーティングプロトコルに従って最も近いインターフェースに送信されます。**`2000::/3`** グローバルユニキャスト範囲の一部です。 +- **ユニークローカルアドレス (ULA)**: ローカル通信用で、公共インターネットのルーティングには使用されません。プレフィックス: **`FEC00::/7`** +- **マルチキャストアドレス**: 1対多の通信用。マルチキャストグループ内のすべてのインターフェースに配信されます。プレフィックス: **`FF00::/8`** +- **エニキャストアドレス**: 1対最近接の通信用。ルーティングプロトコルに従って最も近いインターフェースに送信されます。**`2000::/3`** のグローバルユニキャスト範囲の一部です。 ### **アドレスプレフィックス** -- **fe80::/10**:リンクローカルアドレス(169.254.x.xに似ています) -- **fc00::/7**:ユニークローカルユニキャスト(プライベートIPv4範囲の10.x.x.x、172.16.x.x、192.168.x.xに似ています) -- **2000::/3**:グローバルユニキャスト -- **ff02::1**:マルチキャスト全ノード -- **ff02::2**:マルチキャストルーターノード +- **fe80::/10**: リンクローカルアドレス(169.254.x.xに類似) +- **fc00::/7**: ユニークローカルユニキャスト(プライベートIPv4範囲の10.x.x.x、172.16.x.x、192.168.x.xに類似) +- **2000::/3**: グローバルユニキャスト +- **ff02::1**: マルチキャスト全ノード +- **ff02::2**: マルチキャストルーターノード ### **ネットワーク内のIPv6アドレスを発見する方法** -#### 方法1:リンクローカルアドレスを使用 +#### 方法1: リンクローカルアドレスを使用 1. ネットワーク内のデバイスのMACアドレスを取得します。 2. MACアドレスからリンクローカルIPv6アドレスを導出します。 -#### 方法2:マルチキャストを使用 +#### 方法2: マルチキャストを使用 1. マルチキャストアドレス `ff02::1` にpingを送信して、ローカルネットワーク上のIPv6アドレスを発見します。 ```bash @@ -77,20 +77,20 @@ service ufw stop # Stop the firewall ping6 -I ff02::1 # Send a ping to multicast address ip -6 neigh # Display the neighbor table ``` -### IPv6 Man-in-the-Middle (MitM) Attacks +### IPv6 Man-in-the-Middle (MitM) 攻撃 -IPv6ネットワークでMitM攻撃を実行するためのいくつかの技術が存在します。例えば: +IPv6 ネットワークで MitM 攻撃を実行するためのいくつかの技術が存在します。例えば: -- ICMPv6隣接またはルーター広告のスプーフィング。 -- ルーティングを操作するためにICMPv6リダイレクトまたは「パケットが大きすぎます」メッセージを使用する。 -- モバイルIPv6を攻撃する(通常、IPSecを無効にする必要があります)。 -- 悪意のあるDHCPv6サーバーを設定する。 +- ICMPv6 隣接またはルーター広告のスプーフィング。 +- ICMPv6 リダイレクトまたは「パケットが大きすぎる」メッセージを使用してルーティングを操作する。 +- モバイル IPv6 を攻撃する(通常、IPSec を無効にする必要があります)。 +- 悪意のある DHCPv6 サーバーを設定する。 -## Identifying IPv6 Addresses in the eild +## eild における IPv6 アドレスの特定 -### Exploring Subdomains +### サブドメインの探索 -IPv6アドレスに関連する可能性のあるサブドメインを見つける方法は、検索エンジンを活用することです。例えば、`ipv6.*`のようなクエリパターンを使用することが効果的です。具体的には、次の検索コマンドをGoogleで使用できます: +IPv6 アドレスに関連している可能性のあるサブドメインを見つける方法は、検索エンジンを活用することです。例えば、`ipv6.*` のようなクエリパターンを使用することが効果的です。具体的には、次の検索コマンドを Google で使用できます: ```bash site:ipv6./ ``` @@ -126,9 +126,9 @@ sudo sysctl -w fs.file-max=100000 sudo sysctl -w net.core.somaxconn=65535 sudo sysctl -w net.ipv4.tcp_tw_reuse=1 ``` -### パッシブNDPおよびDHCPv6スニッフィング +### Passive NDP & DHCPv6 Sniffing -すべてのIPv6ホストは**自動的に複数のマルチキャストグループ**(`ff02::1`、`ff02::2`、…)に参加し、SLAAC/NDPのためにICMPv6を使用するため、パケットを1つも送信せずに全体のセグメントをマッピングできます。次のPython/Scapyのワンライナーは、最も興味深いL2メッセージをリッスンし、誰が誰であるかの色付きのタイムスタンプ付きログを出力します: +すべてのIPv6ホストは**自動的に複数のマルチキャストグループ**(`ff02::1`, `ff02::2`, …)に参加し、SLAAC/NDPのためにICMPv6を使用するため、パケットを1つも送信せずに全体のセグメントをマッピングできます。次のPython/Scapyのワンライナーは、最も興味深いL2メッセージをリッスンし、誰が誰であるかの色付きのタイムスタンプ付きログを出力します: ```python #!/usr/bin/env python3 from scapy.all import * @@ -199,7 +199,7 @@ sniff(iface=a.interface,prn=handler,timeout=a.time or None,store=0) ### ルーター広告 (RA) スプーフィング -IPv6ホストはデフォルトゲートウェイの発見のために**ICMPv6ルーター広告**に依存しています。 正当なルーターよりも**頻繁に**偽のRAを注入すると、デバイスは静かにあなたをゲートウェイとして切り替えます。 +IPv6ホストはデフォルトゲートウェイの発見のために**ICMPv6ルーター広告**に依存しています。正当なルーターよりも**頻繁に**偽のRAを注入すると、デバイスは静かにあなたをゲートウェイとして切り替えます。 ```python #!/usr/bin/env python3 from scapy.all import * @@ -227,9 +227,36 @@ sudo sysctl -w net.ipv6.conf.all.forwarding=1 sudo ip6tables -A FORWARD -i eth0 -j ACCEPT sudo ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE ``` -### RDNSS (DNS) スプーフィング via RA +#### ルーター広告フラグ (M/O) とデフォルトルーターの優先度 (Prf) -[RFC 8106](https://datatracker.ietf.org/doc/html/rfc8106) は、RA 内に **Recursive DNS Server (RDNSS)** オプションを追加することを許可します。最新の OS(Win 10 ≥1709、Win 11、macOS Big Sur、Linux systemd-resolved など)は、自動的にそれを信頼します: +| フラグ | 意味 | クライアントの動作への影響 | +|------|---------|----------------------------| +| **M (管理アドレス構成)** | `1` に設定されている場合、ホストは **DHCPv6** を使用して IPv6 アドレスを取得しなければなりません。 | アドレス全体が DHCPv6 から取得されるため、*mitm6* スタイルのポイズニングに最適です。 | +| **O (その他の構成)** | `1` に設定されている場合、ホストは **DHCPv6** を使用して *その他* の情報 (DNS, NTP, …) を取得する必要があります。 | アドレスは SLAAC 経由ですが、DNS は DHCPv6 でハイジャック可能です。 | +| **M=0 / O=0** | 純粋な SLAAC ネットワーク。 | RA / RDNSS トリックのみが可能で、クライアントから DHCPv6 は送信されません。 | +| **M=1 / O=1** | 混合環境。 | DHCPv6 と SLAAC の両方が使用され、スプーフィングのための表面が最も広くなります。 | + +ペンテスト中に、正当な RA を一度確認し、どのベクターが実行可能かを判断できます: +```bash +sudo tcpdump -vvv -i eth0 'icmp6 && ip6[40] == 134' # capture Router Advertisements +``` +ダンプ内の `flags [M,O]` フィールドを探してください – 推測は不要です。 + +RA ヘッダー内の **Prf** (ルーターの優先度) フィールドは、*複数の* ゲートウェイが存在する場合に、あなたの不正ルーターがどれだけ魅力的に見えるかを制御します: + +| Prf 値 | バイナリ | 意味 | +|--------|---------|------| +| **高** | `10` | クライアントはこのルーターを *中*/*低* のものより好みます | +| 中 (デフォルト) | `01` | ほぼすべての正当なデバイスによって使用されます | +| 低 | `00` | より良いルーターが存在しない場合にのみ選択されます | + +Scapy でパケットを生成する際は、上記のように `prf` パラメータを通じて設定できます (`prf=0x1` → 高)。 **高い Prf**、**短い間隔**、および **ゼロ以外のライフタイム** を組み合わせることで、あなたの不正ゲートウェイは非常に安定します。 + +--- + +### RA を介した RDNSS (DNS) スプーフィング + +[RFC 8106](https://datatracker.ietf.org/doc/html/rfc8106) は、RA 内に **再帰的 DNS サーバー (RDNSS)** オプションを追加することを許可します。 現代の OS (Win 10 ≥1709, Win 11, macOS Big Sur, Linux systemd-resolved, …) は自動的にこれを信頼します: ```python #!/usr/bin/env python3 from scapy.all import * @@ -253,7 +280,7 @@ send(ra,iface=args.interface,loop=1,inter=args.interval) ### DHCPv6 DNS スプーフィング (mitm6) -SLAACの代わりに、WindowsネットワークはDNSのために**ステートレスDHCPv6**に依存することがよくあります。[mitm6](https://github.com/rofl0r/mitm6)は、`Solicit`メッセージに自動的に応答し、**あなたのリンクローカルアドレスを300秒間DNSとして割り当てる**「Advertise → Reply」フローを提供します。これにより以下が可能になります: +SLAACの代わりに、WindowsネットワークはDNSのために**ステートレスDHCPv6**に依存することがよくあります。[mitm6](https://github.com/rofl0r/mitm6)は、`Solicit`メッセージに自動的に**Advertise → Reply**フローで応答し、**あなたのリンクローカルアドレスを300秒間DNSとして割り当てます**。これにより以下が可能になります: * NTLMリレー攻撃 (WPAD + DNSハイジャック) * ルーターに触れずに内部名前解決を傍受する @@ -276,5 +303,6 @@ sudo mitm6 -i eth0 --no-ra # only DHCPv6 poisoning - [RFC 8106 – IPv6 ND DNS Configuration](https://datatracker.ietf.org/doc/html/rfc8106) - [http://www.firewall.cx/networking-topics/protocols/877-ipv6-subnetting-how-to-subnet-ipv6.html](http://www.firewall.cx/networking-topics/protocols/877-ipv6-subnetting-how-to-subnet-ipv6.html) - [https://www.sans.org/reading-room/whitepapers/detection/complete-guide-ipv6-attack-defense-33904](https://www.sans.org/reading-room/whitepapers/detection/complete-guide-ipv6-attack-defense-33904) +- [Practical Guide to IPv6 Attacks in a Local Network](https://habr.com/ru/articles/930526/) {{#include ../../banners/hacktricks-training.md}}