作者:Vivek Ramachandran, Cameron Buchanan
译者:飞龙
安全的错觉比不安全更加糟糕。
-- 佚名
安全的错觉比不安全更加糟糕,因为你不可能为面对被黑的可能性做准备。
WLAN 的身份验证模式可能很弱,可以被破解和绕过。这一章中,我们会查看一些 WLAN 中所使用的基本的身份验证模式,以及学习如何破解它们。
在默认的配置模式下,所有接入点都在信标帧中发送它们的 SSID。这让附近的客户端能够轻易发现它们。隐藏 SSID 是个配置项,其中接入点并不在信标帧中广播它的 SSID。因此,只有知道接入点 SSID 的客户端可以连接它。
不幸的是,这个方法不能提供可靠的安全,但是网络管理员认为它很安全。隐藏 SSID 不应该被看作安全手段。我们现在来看看如何发现隐藏的 SSID。
执行下列指南以开始:
-
使用 Wireshark,如果我们监控
Wireless Lab
网络中的信标帧信标帧,我们就能够以纯文本查看 SSID。你应该能看到信标真,像这样: -
配置你的接入点来隐藏
Wireless Lab
网络的 SSID。这个配置项在不同接入点中可能不同。这里,我需要检查Visibility Status
选项的Invisible
选项,像这样: -
现在如果你查看 Wireshark 的记录,你会发现
Wireless Lab
的 SSID从信标帧中消失了。这是隐藏 SSID 所做的事情: -
为了绕过信标帧,我们首先使用被动技巧来等待正常客户端连接到接入点。这会生成探测请求和响应,它包含网络的 SSID,从而揭示它的存在。
-
作为替代,你可以使用
aireplay-ng
来发送接触验证封包给所有代表Wireless Lab
接入点的路由器,通过输入:aireplay-ng -0 5 -a <mac> --ignore-negative mon0
,其中<mac>
是路由器的 MAC 地址。-0
选项用于选则接触验证攻击,5
是要发送的封包数量。最后,-a
指定了所定位的接入点的 MAC 地址。 -
接触验证的过程会强迫所有正常客户端断开连接并重连。为接触验证的封包添加个过滤来单独查看它们是个好主意。
-
来自接入点的探测响应最后会发现 SSID。这些封包会出现在 Wireshark 中。一旦正常客户端连接回来了,我们就可以通过探针的请求和响应帧来查看隐藏的 SSID。可以使用过滤器
(wlan.bssid == 00:21:91:d2:8e:25) && !(wlan.fc.type_subtype == 0x08)
来监控所有发往或来自接入点的非信标封包。&&
符号代表逻辑 AND 操作符,!
符号代表逻辑 NOT 操作符:
即使 SSID 隐藏而且不广播,当正常的客户端尝试连接到接入点时,它们就交换了探测请求和响应的封包。这些封包包含接入点的 SSID。由于这些封包没有加密,它们可以被非常轻易地嗅探来发现SSID 。
我们在之后的章节中会出于其它目的,例如跟踪,涉及到探测请求。
许多情况下,所有客户端可能已经链接到接入点,并且在 Wireshark 记录中没有探测请求或响应的封包。这里,我们可以强制客户端断开接入点的链接,通过发送伪造的解除验证封包。这些封包会强迫客户端重新连接到接入点上,从而获取 SSID。
在之前的练习中,我们广播了解除验证封包来强制所有无线客户端重新连接。尝试验证如何使用aireplay-ng
工具,选择性对某个客户端执行它。
要注意,即使我们使用 Wireshark 演示了许多概念,但也可以使用其它工具来完成攻击,例如aircrack-ng
套件。我们推荐你探索整个 aircrack-NG 套件以及其它位于官网的文档: http://www.aircrack-ng.org
。
MAC 过滤器是个古老的技巧,用于验证和授权,它们根植于有线世界。不幸的是,它们在无线世界中变得十分糟糕。
最基本的想法就是基于客户端的 MAC 地址进行验证。MAC 过滤器是为网络接口分配的一段识别代码,路由器能够检查这个代码并将其与允许的 MAC 列表进行比较。允许的 MAC 地址列表由网络管理员维护,储存于接入点中。我们现在要看看绕过 MAC 过滤器有多容易。
让我们遵循以下步骤来开始:
-
让我们首先配置我们的接入点来使用 MAC 过滤,之后添加受害者笔记本的客户端 MAC 地址。我的路由器上的设置页面是这样:
-
一旦开启了 MAC 过滤,只有允许的 MAC 地址能够成功被接入点验证。如果我们尝试从不在 MAC 地址白名单中的机器连接接入点,就会失败。
-
在这个场景背后,接入点发送验证失败的消息给客户端。封包记录像这样:
-
为了绕过 MAC 过滤器,我们可以使用
airodump-ng
来寻找连接到接入点的客户端 MAC 地址。我们可以通过输入airodumpng -c 11 -a --bssid <mac> mon0
命令。通过指定bssid
命令,我们只监控接入点,这是我们所感兴趣的。-c 11
命令将频道设置为接入点所在的11
。-a
命令确保在airodump-NG
输出的客户端部分中,只展示相关客户端,以及到接入点的连接。这会向我们展示所有和接入点相关的客户端 MAC 地址。 -
一旦我们找到了白名单中的客户端 MAC 地址,我们可以使用
macchanger
工具来修改客户端的 MAC 地址,Kali自带这个工具。你可以使用macchanger –m <mac> wlan0
命令来完成。你使用-m
命令指定的 MAC 地址就是wlan0
接口的新 MAC 地址。 -
你可以看到,将 MAC 地址修改为白名单客户端之后,我们现在能够连接接入点了。
我们使用airodump-ng
监控了空域,找到了连接到无线网络的正常用户的 MAC 地址。之后我们可以使用macchanger
工具来修改无线网卡的 MAC 地址,与客户端保持一致。这会欺骗接入点,使其相信我们是正常耳朵客户端,它会允许我们访问它的无线网络。
我们鼓励你探索airodump-NG
工具的不同选项,通过访问官网的文档: http://www.aircrack-ng.org/doku. php?id=airodump-ng
。
术语“开放验证”是个误解,因为它实际上不提供任何验证。当接入点配置为使用开放验证的时候,所有连接它的客户端都可以成功验证。
我们现在使用开放验证来获得验证并连接到接入点。
让我们现在看看如何绕过开放验证。
-
我们首先将我们的接入点
Wireless Lab
设置为开放验证。在我的接入点中,这可以通过将Security Mode
设为Disable Security
来轻易完成。 -
我们之后使用
iwconfig wlan0 essid Wireless Lab
命令来连接到这个接入点,之后验证我们到接入点的连接是否成功。 -
要注意我们没有提供任何用户名/密码来通过开放验证。
这可能是目前为止最简单的练习了。你可以看到,在连接到开放验证网络和连接到接入点时没有任何障碍。
共享密钥验证使用例如 WEP 的共享密钥来验证客户端。信息的交换展示在这张图中:
无线客户端发送验证请求给接入点,它会回复一个 challenge。现在客户端需要使用共享密钥加密这个 challenge,并发送ui接入点,接入点解密它来检查是否它可以恢复原始的 challenge 文本。如果成功了,客户端就验证成功,如果没有,它会发送验证失败的信息。
这里的安全问题是,攻击者可以被动监听整个通信,通过嗅探空域来访问 challenge 的纯文本和加密文本。他可以使用 XOR 操作来获取密钥流。密钥流可以用于加密任何由接入点发送的未来的 challenge,而不需要知道真实的密钥。
这种共享验证的常见形式就是 WEP,或者无线等效协议。它易于破解,并且由数不清的工具用于使破解 WEP 网络变得容易。
这个练习中,我们会了解如何嗅探空域来获取 challenge 或者加密后的 challenge,获取密钥流,使用它来验证接入点,而不需要共享密钥。
绕过共享验证比上一个练习更加困难,所以仔细遵循下列步骤:
-
让我们首先为我们的
Wireless Lab
网络建立共享验证。通过将安全模式设置为 WEP ,将验证设置为Shared Key
,我们已经在我的接入点上完成了设置。 -
让我们现在将正常的客户端连接到该网络,使用我们在第一步设置的共享密钥。
-
为了绕过共享密钥验证,我们首先需要嗅探接入点和客户端之间的封包。但是,我们也需要记录整个共享密钥的交换。为了完成它,我们使用
airodump-ng
工具的airodump-ng mon0 -c 11 --bssid <mac> -w keystream
命令。-w
选项在这里是新增的,让 Airodump-NG 在keystream
为前缀的文件中储存信息。顺便,在不同文件中储存不同的封包捕获的会话是个好主意。这允许你在很长时间之后分析它们。 -
我们可以等待正常客户端连接到接入点,或者使用之前用过的解除验证的技术强迫重新连接。一旦客户端连接并且工项密钥验证获得成功,
airodump-ng
就会通过嗅探空域自动捕获这个改变。当AUTH
列出现了WEP
,就说明捕获成功。 -
捕获到的密钥流储存在当前目录
keystream
为前缀的文件中。我这里的文件名称是keystream-01-00-2191-D2-8E-25.xor
。 -
为了伪造共享密钥验证,我们使用
aireplay-ng
工具。我们执行aireplay-ng -1 0 -e "Wireless Lab" -y keystream01-00-21-91-D2-8E-25.xor -a <mac> -h AA:AA:AA:AA:AA:AA mon0
命令。这个aireplay-ng
的命令使用我们之前获得的密钥流,并尝试验证 SSID 为Wireless Lab
,MAC 地址为address 00:21:91:D2:8E:25
的接入点。启动 WIreshark,并通过wlan.addr == AA:AA:AA:AA:AA:AA
过滤器嗅探所有感兴趣的封包。我们可以使用 Wireshark 来验证它。你应该能在 Wireshark 的界面上看到记录,像这样: -
第一个封包是验证请求,由
aireplay-ng
工具发给接入点: -
第二个封包由接入点发给客户端的 challenge 文本组成,像这样:
-
第三个封包中,这个工具向接入点发送了加密的 challenge。
-
由于
aireplay-ng
工具将导出的密钥流用于江米,验证会成功,接入点会在第四个封包中发送成功消息。 -
在验证成功过之后,这个工具伪造了接入点的关联,像这样:
-
如果你在你的接入点管理界面中的无线日志中查看,你会看到 MAC 地址为
AA:AA:AA:AA:AA:AA
的客户端建立了连接。
我们成功从共享验证交换中导出了密钥流,并且使用它来伪造接入点的验证。
接入点拥有最大客户端数量,超过之后它们就会拒绝连接。通过为aireplay-ng
编写一个小型的包装器,我们就可以自动发送数百个连接请求,从随机的 MAC 地址发往接入点。这会填满路由器的内部表格,一旦达到了最大客户端数量,接入点会停止接受新的连接。这通常叫做拒绝服务(DoS)工具,可以强制路由器重启或使其失去功能。这也可以导致所有无线客户端失去连接以及不能使用授权后的网络。
Q1 如何强迫无线客户端重新连接到接入点?
- 发送解除验证的封包
- 重启客户端
- 重启接入点
- 以上全部
Q2 开放验证是干什么的?
- 提供了适当的安全
- 不提供任何阿暖
- 需要使用加密
- 以上都不是
Q3 如何破解共享密钥验证?
- 从封包中导出密钥流
- 导出加密密钥
- 向接入点发送解除验证的封包
- 重启接入点
这一章中,我们了解了 WLAN 验证。隐藏 SSID 是“隐藏式安全”的策略,很容易被攻破。MAC 地址过滤器不能够提供任何安全,因为 MAC 地址可以从无线封包中嗅探,而 MAC 地址在封包中毫无加密。开放验证不提供任何实际的验证。共享密钥验证的破解有些麻烦,但是,使用了正确的工具,我们可以导出和储存密钥流,我们可以使用它来回应之后由接入点发送的所有 challenge。最后我们可以获得验证而不需要知道真实的密钥。
下一章中,我们会看一看 WLAN 加密机制的不同 -- WEP,WPA 和 WPA2 -- 并看一看其中的不安全性。