hacktricks/generic-methodologies-and-resources/pentesting-wifi/evil-twin-eap-tls.md
2023-08-03 19:12:22 +00:00

12 KiB
Raw Blame History

恶意双子星 EAP-TLS

☁️ HackTricks 云 ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥


赏金漏洞提示注册 Intigriti一个由黑客创建的高级 赏金漏洞平台!立即加入我们:https://go.intigriti.com/hacktricks,开始赚取高达 $100,000 的赏金!

{% embed url="https://go.intigriti.com/hacktricks" %}

在某个时候,我需要使用下面的帖子中提出的解决方案,但是 https://github.com/OpenSecurityResearch/hostapd-wpe 中的步骤在现代的 kali2019v3中不再起作用。
无论如何,很容易让它们起作用。
你只需要从这里下载 hostapd-2.6https://w1.fi/releases/,然后在重新编译 hostapd-wpe 之前安装:apt-get install libssl1.0-dev

EAP-TLS 的恶意双子星

本文摘自 https://versprite.com/blog/application-security/eap-tls-wireless-infrastructure/

不常见的情况:攻击 EAP-TLS

之前我提到了一个在这个项目中我们不得不处理的不常见的无线网络配置。这个方案基于 EAP-TLS其中 supplicant 必须在被授权访问网络之前向认证服务器呈现有效的客户端证书。

在这种情况下,只有在相互认证过程顺利进行时才会创建安全的 TLS 通道。换句话说,如果 supplicant 首先接受认证服务器的证书,然后认证服务器接受 supplicant 的证书。

在评估过程中,当我们在攻击机器上使用 hostapd-wpe 时,我们对获得的错误消息感到惊讶:

hostapd-wpe 错误

正如你在错误消息中看到的,我们的工具触发了一个错误消息,指示它没有接受无线客户端的证书,因为它是由一个未知的 CA 签名的。很滑稽,对吧?我们的攻击工具因为用户没有提供有效的凭据而拒绝了受害者的访问。🙂

因此,根据工具的输出,我们可以看到协商已经达到了客户端证书确实被呈现给了伪造的 Radius 服务器的点,这意味着攻击者伪造的证书被受害者接受了。

这意味着 supplicant 的配置过于宽松,它接受了来自 radius 服务器的任何证书。

在看到这个错误并搜索网络后,我们意识到利用这种情况并不常见 - 从与此相关的博客上缺乏信息来判断 - 我们必须以某种方式处理它。

MiTM 攻击 - 定义目标

你可能已经猜到了,这里的想法是调整我们的工具,使其接受偶尔 supplicant 提供的任何证书,以让受害者与我们的恶意无线基础设施建立完整的连接,然后在受害者和互联网之间执行中间人攻击,显示一个捕获明文凭据的强制性门户作为第一步。

注意:当 MiTM 攻击完全可用时,你可以将受害者的所有流量重定向到你的主机,以捕获 NetNTLM 哈希,例如。我们还在以下帖子中介绍了类似的攻击:目标 Windows 机器和 DNS 服务器之间的 MiTM 攻击

在这两种情况下,我们首先需要了解 hostapd-wpe 是在哪里执行证书控制,然后相应地修改它,以防止它拒绝无效或未知的客户端证书。

在对源代码进行快速分析后,我们找到了以下内容:

原始源代码文件hostapd-2.6/src/eap_server/eap_server_tls.c

eap_server_tls_ssl_init

如你在上面的代码中看到的(第 80 行hostapd 上的 EAP TLS 服务器实现调用了一个名为 eap_server_tls_ssl_init 的自定义函数来初始化服务器,第三个参数设置为 1。

原始源代码文件hostapd-2.6/src/eap_server/eap_server_tls_common.c

tls_connection_set_verify-1

tls_connection_set_verify-2

在上面的代码中(从第 78 行到第 80 行),我们可以观察到使用参数 verify_peer 设置为 1 调用了函数 tls_connection_set_verify(这是从 eap_tls_init 函数中接收到的)。

原始源代码文件hostapd-2.6/src/crypto/tls_openssl.c verify_peer

在上面的代码中从第2307行到2309行我们可以观察到参数verify_peer原本设置为1最终将被用作OpenSSL函数SSL_set_verify的参数用于在库作为服务器时验证客户端证书是否有效。通过将原始行修改为0我们可以改变工具的行为使其忽略客户端证书是否有效。

修改后的源代码文件hostapd-2.6/src/eap_server/eap_server_tls.c

eap_tls_init

在修补了hostapd-wpe的源代码并重新编译之后我们再次尝试进行攻击并得到以下输出

patching hostapd-wpe

通过观察我们修改后的hostapd-wpe版本的输出我们可以看到错误消息不再存在客户端似乎已连接到我们的伪造AP。现在我们应该建立适当的基础设施向受害者呈现一个强制性门户并尝试进行钓鱼攻击。

为了快速利用它我们决定从Wifiphisher中提取代码的部分并根据我们的特定需求进行调整在Python中创建一个简单的强制性门户。可以在参考资料中找到这个概念验证的代码链接。

现在我们拥有了所有的元素,让我们从攻击者的角度执行对受害者的攻击,并看看整个过程是如何进行的:

1. 使用airodump-ng检查环境

airodump-ng

从输出中我们可以识别出受害者00:0F:60:07:95:D7连接到WPA2企业网络“enterprise”ESSID的访问点BSSIDF4:EC:38:FA:E7:57

2. 运行修改后的hostapd-wpe工具为目标网络创建一个伪造的AP

modified modified hostapd-wpe

3. 自定义强制性门户模板例如HTML登录使其对目标受众受害者熟悉并运行它

Customize the captive portal

4. 执行断开连接攻击并承担风险(如果你不耐烦的话)

de-auth attack

结果我们将在修改后的hostapd-wpe工具的输出中看到以下消息

victim connected

这表明一个受害者00:0f:60:07:95:d7已连接到我们的伪造AP。

在受害者的Windows主机上我们观察到它自动连接到了伪造的AP并且一旦尝试进行网页浏览用户就会看到强制性门户

captive portal credentials

受害者输入凭据后,我们可以在强制性门户的控制台上看到输出:

captive portal console

以下截图显示了对连接到WPA2网络的iPhone设备执行攻击时向受害者显示的消息要求受害者接受证书

accept certificate

以下截图显示了呈现给iPhone设备的强制性门户

iphone credentials

注意此演示的强制性门户HTML模板只是一个概念验证样本我鼓励您开发自己的模板包括在网络上搜索文件的HTML标签以便捕获NetNTLM哈希如果受害者使用Internet Explorer以及其他更复杂的模板要求用户在允许访问网络之前下载计算机上的二进制文件以进行扫描。

尽管我们可以阅读不同的在线文章声称EAP-TLS是无线基础设施最安全的实现但由于其可扩展性问题大多数公司并未使用它创建、交付、配置和撤销每个用户的唯一证书的复杂性。

这个方案的整个安全性再次依赖于链条中最薄弱的环节,可能是一个配置为接受认证服务器提供的任何证书的设备或主机,或者是一个不考虑此操作风险的无意识用户使用的移动设备。


Bug赏金提示注册Intigriti一个由黑客创建的高级Bug赏金平台!立即加入我们:https://go.intigriti.com/hacktricks,开始赚取高达**$100,000**的赏金!

{% embed url="https://go.intigriti.com/hacktricks" %}

☁️ HackTricks云 ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥