diff --git a/ch7.md b/ch7.md index 4cf565c40771749b72b30a01c28e44ba8999b2b7..63afbf49c725bb44b5ca3e136e78787ac68c5226 100644 --- a/ch7.md +++ b/ch7.md @@ -1,48 +1,48 @@ -# ߼ WLAN +# 第七章 高级 WLAN 攻击 -> ߣVivek Ramachandran, Cameron Buchanan +> 作者:Vivek Ramachandran, Cameron Buchanan -> ߣ[](https://github.com/) +> 译者:[飞龙](https://github.com/) -> Э飺[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/) +> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/) -## +## 简介 -> ֪֪ˣս +> 知己知彼,百战不殆。 -> ӣӱ +> 孙子,《孙子兵法》 -Ϊ͸ߣ˽ڿͿִеĸ߽׹ʮҪʹܲ͸ִǡһչʾڿܹ߷㣬ִи߼ +作为渗透测试者,了解黑客可以执行的高阶攻击十分重要,即使你可能不会在渗透测试中执行它们。这一章致力于展示黑客如何能够将无线访问用作接入点,执行高级攻击。 -һУǻῴܹʹѧ֪ʶִи߼ǻרעм˹MITMijɹҪļɺʵսһǻʹ MITM ΪӸӵĹĻͻỰٳ֡ +这一章中,我们会看到我们如何能够使用所学的知识来执行高级攻击。我们基本上专注于中间人攻击(MITM),它的成功需要大量的技巧和实战。一旦我们完成了它,我们会使用这个 MITM 攻击作为更加复杂的攻击的基础,例如窃听和会话劫持。 -## 7.1 м˹ +## 7.1 中间人攻击 -MITM WLAN ϵͳDZĹ֮һˡʵʩʹòͬãǻʹձһ -- ʹ LAN ӵڿͻ˵ϴ˼ٵĽ㡣㲥 SSID ͸ıȵơûӵٵĽ㣨ڸߵźǿǿӣ֮ǰ۹ҿԾӵĽϡ +MITM 攻击可能是 WLAN 系统上最有潜力的攻击之一了。实施攻击可以使用不同的配置,我们会使用最普遍的一个 -- 攻击者使用有线 LAN 连接到互联网,并在客户端的网卡上创建了假的接入点。这个接入点广播的 SSID 和附近的本地热点相似。用户可能碰巧连接到这个假的接入点(或者由于更高的信号强度理论强制连接,我们之前讨论过),并且可能仍旧相信它连接到正常的接入点上。 -ڿԽûתϣʹߺ֮š +攻击者现在可以将所有用户流量转发到互联网上,使用它所创建的有线和无线之间的网桥。 -ϰУǻģ +在下面的练习中,我们会模拟这个攻击。 -### ʵսʱ -- м˹ +### 实战时间 -- 中间人攻击 -ѭָʼ +遵循以下指南来开始: -1. Ϊ˿ʼм˹ʹ` airbase-ng`ںڿ͵ıʼDZϴ㣬`mitm`ִ +1. 为了开始中间人攻击,我们首先使用` airbase-ng`,在黑客的笔记本上创建软接入点,叫做`mitm`。我们执行下列命令: ``` - airbase-ng --essid mitm Cc 11 mon0 + airbase-ng --essid mitm –c 11 mon0 ``` - £ + 命令输出如下: ![](img/7-1-1.jpg) -2. Ҫע` airbase-ng`еʱᴴӿ`at0`ǻĽ`mitm`߶˵Ľӿڡ +2. 要注意` airbase-ng`在运行的时候会创建接口`at0`。把它当做我们基于软件的接入点`mitm`的有线端的接口。 ![](img/7-1-2.jpg) -3. ںڿ͵ıʼDZϴţߣ`eth0`ߣ`at0`ӿɡ£ +3. 让我们现在在黑客的笔记本上创建网桥,由有线(`eth0`)和无线(`at0`)接口组成。命令如下: ``` brctl addbr mitm-bridge @@ -54,262 +54,262 @@ MITM ![](img/7-1-3.jpg) -4. ǿΪָһ IP ַصԡҪעҲʹ DHCP ʵ֡ǿΪŽӿָ IP ַʹ +4. 我们可以为这个网桥指定一个 IP 地址,并检查网关的连接性。要注意我们也可以使用 DHCP 来实现。我们可以为网桥接口指定 IP 地址,使用下列命令: ``` ifconfig mitm-bridge 192.168.0.199 up ``` - ֮ ping ` 192.168.0.1`ȷӵʣಿ֡ + 我们之后尝试 ping 网关` 192.168.0.1`,来确保我们连接到了网络的剩余部分。 -5. ڿں˵ IP תڷܹȷתʹ +5. 我们现在开启内核的 IP 转发,便于封包能够正确转发,使用下列命令: ``` echo 1 > /proc/sys/net/ipv4/ip_forward ``` - £ + 命令输出如下: ![](img/7-1-4.jpg) -6. ǽ߿ͻӵǵĽ`mitm`ϡͨ DHCP Զ IP ַ߶˵ϣͻ IP Ϊ`192.168.0.197`ǿ ping ߶˵`192.168.0.1`֤ԡ +6. 现在让我们将无线客户端连接到我们的接入点`mitm`上。它会通过 DHCP 自动获得 IP 地址(服务器运行在有线端的网关上)。这里,客户端主机的 IP 为`192.168.0.197`。我们可以 ping 有线端的网关`192.168.0.1`来验证连接性。 ![](img/7-1-5.jpg) -7. ǿԿӦ ping +7. 我们可以看到,主机响应了 ping 请求,像这样: ![](img/7-1-6.jpg) -8. Ҳ֤ͻ˵ӣͨ۲ڿϵ`airbase-ng `նˣ +8. 我们也可以验证客户端的连接,通过观察黑客主机上的`airbase-ng `终端: ![](img/7-1-7.jpg) -9. һ䣬dzȤǣ߽ӿת߶ˣӵơǿͨ Wireshark ̽`at0`ӿ֤ +9. 这里提一句,非常有趣的是,由于所有流量都从无线接口转发到有线端,我们拥有流量的完整控制。我们可以通过启动 Wireshark 并嗅探`at0`接口来验证。 ![](img/7-1-8.jpg) -0. ڴӿͻ ping `192.168.0.1 `ǿԿ Wireshark еķʹù ICMPʹĿ겢ǡм˹ +0. 让我们现在从客户端主机上 ping 网关`192.168.0.1 `。我们可以看到, Wireshark 中的封包(使用过滤器 ICMP),即使封包的目标并不是我们。这就是中间人攻击的力量。 ![](img/7-1-9.jpg) -### ոշʲô +### 刚刚发生了什么? -dzɹִм˹׼ͨα㲢Žӵǵ̫ӿϡȷκӵα߿ͻ˻оͨ LAN ӵ +我们成功执行了中间人攻击的准备工作。我们通过创建伪造接入点并将其桥接到我们的以太网接口上。这确保了任何连接到伪造接入点的无线客户端会感觉到,它通过有线 LAN 连接到互联网。 -### һ -- ϵм˹ +### 试一试 -- 纯无线网络上的中间人攻击 -һϰУŽߺ߽ӿڡ֮ǰᵽֻ MITM ӽṹ֮һҲϡǿʹ߽ӿڣһڴαĽ㣬һӿӵȨ㡣ӿڶŽһԣ߿ͻӵǵαʱͨߵӵȨϡ +在上一个练习中,我们桥接了无线和有线接口。我们之前提到过,这只是 MITM 的连接结构之一,也有其它的组合。我们可以使用两个无线接口,一个用于创建伪造的接入点,另一个接口连接到授权接入点。这两个接口都桥接在一起。所以,当无线客户端连接到我们的伪造接入点的时候,它就通过攻击者的主机连接到了授权接入点上。 -Ҫע⣬Ҫʹù߱ʼDZϵ +要注意,这个配置需要使用攻击者笔记本上的两个网卡。 -ǷܹʹñʼDZڽⲿִ -- סûϰעǸܴս +看看是否能够使用笔记本的内建网卡和外部网卡来执行这个攻击 -- 记住,你可能没有这个练习所需的注入驱动器。这是个很大的挑战。 -## 7.2 ͨ MITM +## 7.2 通过 MITM 进行无线窃听 -һϰУ˽Ϊ MITM ׼ڣǻῴһʹ +在上一个练习中,我们了解了如何为 MITM 进行准备。现在,我们会看一看如何使用它来进行无线窃听。 -ʵΧһԭܺߵڶߵԣ߿κηͲܺ +整个实验围绕一个原则,所有受害者的流量现在都经过攻击者的主机。所以,攻击者可以窃听任何发送并来自受害者主机的无线流量。 -### ʵսʱ -- +### 实战时间 -- 无线窃听 -ѭָʼ +遵循以下指南来开始: -1. ظһʵв衣 WiresharkȤǣʹ MITM ŽѾӿȻǿŽӵҪĻ +1. 重复上一个实验的所有步骤。启动 Wireshark,有趣的是,即使 MITM 桥接已经建立,这个跟接口仍然允许我们窥视桥接的流量,如果我们想要的话: ![](img/7-2-1.jpg) -2. `at0`ӿϵ̽Ǽͺͽյ +2. 启动`at0`接口上的嗅探,便于我们监控所有由无线网卡发送和接收的流量: ![](img/7-2-2.jpg) -3. ߿ͻˣκҳ߽Ҳӵ LAN ϣʹõַ`http://192.168.0.1` +3. 在无线客户端,打开任何网页。我这里,无线接入点也连接到 LAN 上,我们使用地址`http://192.168.0.1`来打开它: ![](img/7-2-3.jpg) -4. ʹ¼档 +4. 使用你的密码登录,进入管理界面。 -5 Wireshark УӦÿ˴ +5, 在 Wireshark 中,我们应该看到了大量活动: ![](img/7-2-4.jpg) -6. ù HTTP ֻ鿴 Web +6. 设置过滤器 HTTP 来只查看 Web 流量: ![](img/7-2-5.jpg) -7. ǿ׶λ㷢 HTTP POST +7. 我们可以轻易定位用于向接入点发送密码的 HTTP POST 请求。 ![](img/7-2-6.jpg) -8. ֮ǰϸͼ +8. 下面是之前封包的详细视图。 ![](img/7-2-7.jpg) -9. չ HTTP Эͷǻῴ벢ûԴı֮ͣ˹ϣֵǿһһͼбΪ 64ǿԿһ`/md5.js`ʹǻ MD5 ϣֵȤǣڹϣĴУûÿỰΣܵطŹǽһϰϸڣΪⲢ߰ȫһ֣ӶⱾݡ +9. 展开 HTTP 协议头,我们会看到我们所输入的密码并没有以纯文本发送,反之它发送了哈希值。如果我们看一看封包,在上一个截图中标号为 64,我们可以看到,有一个`/md5.js`的请求,这使我们怀疑它是密码的 MD5 哈希值。有趣的是,在哈希的创建中,如果没有在每个会话层面加盐,这个技巧容易受到重放攻击。我们将其留做一个练习来发现细节,因为这并不是无线安全的一部分,从而超出了这本书的内容。 ![](img/7-2-8.jpg) -0. չʾм˹ڼ䣬ɿͻ˷͵ +0. 这展示了在中间人攻击期间,监视器如何轻易窃听由客户端发送的流量。 -### ոշʲô +### 刚刚发生了什么? -׼ MITM ܺߵ֪ܺΪ MITM Уߵԣܺߵδɱ +我们准备的 MITM 环境现在允许我们窃听受害者的无线流量,而无需让受害者知道。这是因为在 MITM 中,所有流量都经过攻击者的主机。所以,所有受害者的未加密流量都可被攻击者窃听。 -### һ -- Google +### 试一试 -- 发现 Google 搜索者 -ڵ磬ǶΪ Google ϵ˽ܵġܲңGoogle ϵ HTTPĬǴı +在当今世界,我们都认为我们在 Google 上的搜索都是私密的。很不幸,Google 搜索上的流量都经过 HTTP,并且默认是纯文本。 -һܵĹʹܹʹ Wireshark 鿴ִܺе Google +你可以想出一个智能的过滤器,使你能够使用 Wireshark 来查看受害者所执行的所有 Google 搜索吗? -## 7.3 ϵĻỰٳ +## 7.3 无线上的会话劫持 -ǿԻ MITM ִеһȤĹӦûỰٳ֡ MITM ڼ䣬ܺߵķߡ߸תĿĵأĿĵطصӦתȤǣУ߿޸ķݣûбܣζ޸ġĬ +我们可以基于 MITM 执行的另一种有趣的攻击就是应用会话劫持。在 MITM 攻击期间,受害者的封包发往攻击者。攻击者负责将其转发到正常的目的地,并将目的地发回的响应转发给主机。有趣的是,在这个过程中,攻击者可以修改封包的数据(如果没有保护或加密)。这意味着它可以修改、拆解甚至静默丢掉封包。 -һУǻʹ׼õ MITM һϵ DNS ٳ֮֡ DNS ٳ֣ǽĻỰٳΪ` https://www.google.com` +在下一个例子中,我们会使用准备好的 MITM 环境看一看无线上的 DNS 劫持。之后利用 DNS 劫持,我们将浏览器的会话劫持为` https://www.google.com`。 -### ʵսʱ -- ϵĻỰٳ +### 实战时间 -- 无线上的会话劫持 -1. м˹ܺϣ` https://www.google.com`ʹ Wireshark ĽӦ +1. 建立中间人攻击环境。在受害者主机上,让我们启动浏览器并输入` https://www.google.com`。让我们使用 Wireshark 来监控流量,你的界面应该像这样: ![](img/7-3-1.jpg) -2. ʹ DNS ǿԿܺ߷` https://www.google.com` DNS +2. 使用 DNS 过滤器,我们可以看到,受害者发出了` https://www.google.com`的 DNS 请求: ![](img/7-3-2.jpg) -3. Ϊ˽ٳỰҪα DNS ӦὫ`https://www.google.com ` IP ַΪڿ IP `192.168.0.199`ûĿĵĹ߽`dnsspoof`﷨ǣ +3. 为了劫持浏览器会话,我们需要发送伪造的 DNS 响应,它会将`https://www.google.com `的 IP 地址解析为黑客主机的 IP `192.168.0.199`。我们用户这个目的的工具叫做`dnsspoof`。它的语法是: ``` - dnspoof Ci mitm-bridge + dnspoof –i mitm-bridge ``` - £ + 命令的输出如下: ![](img/7-3-3.jpg) -4. ˢǿ Wireshark пֻҪܺ߷κ Google DNS Dnsspoof Ӧ +4. 刷新浏览器创建,现在我们可以在 Wireshark 中看到,只要受害者发送了任何主机(包括 Google)的 DNS 请求,Dnsspoof 都会回应。 ![](img/7-3-4.jpg) -5. ܺϣǻῴӵĴΪǽ`google.com` IP ַΪ`192.168.0.199`Ǻڿ IPûм 80 ˿ڵķ +5. 在受害者主机上,我们会看到不能连接的错误。这是因为我们将`google.com`的 IP 地址解析为`192.168.0.199`,这是黑客主机的 IP,但是没有监听 80 端口的服务: ![](img/7-3-5.jpg) -6. Kali Apacheʹ +6. 让我们在 Kali 上运行 Apache,使用下列命令: ``` apachet2ctl start ``` - £ + 命令的输出如下: ![](img/7-3-6.jpg) -7. ڣһˢܺϵǶյ`It works!`Apache Ĭҳ档 +7. 现在,一旦我们刷新了受害者主机上的浏览器,我们都会收到`It works!`,它是Apache 的默认页面。 ![](img/7-3-7.jpg) -8. ʾݲαӦٳܺߵĻỰ +8. 这个示例表明,可以拦截数据并发送伪造的响应,来劫持受害者的会话。 -### ոշʲô +### 刚刚发生了什么? -ʹ MITM ΪִӦýٳֹⱳ󵽵׷ʲôMITM ׼ȷܹܺ߷͵зֻҪǿܺߵ DNS ڹ߱ʼDZϵ Dnsspoof ͻᷢ DNS Ӧܺߣ`google.com`Ϊߵ IP ܺ߱ʼDZӦ򹥻ߵ IP ַ 80 ˿ڷ HTTP +我们使用无线 MITM 作为基础执行了应用劫持攻击。所以这背后到底发生了什么?MITM 准备工作确保了我们能够看到受害者发送的所有封包。只要我们看到了来自受害者的 DNS 请求封包,运行在攻击者笔记本上的 Dnsspoof 就会发送 DNS 响应给受害者,将`google.com`解析为攻击者的主机 IP 。受害者笔记本接受这个响应并且浏览器会向攻击者的 IP 地址的 80 端口发送 HTTP 请求。 -ʵĵһ֣߻ûκν̼ 80 ˿ڣ Firefox ش֮һڹϵ 80 ˿ڣĬ϶˿ڣ Apache ͻյԹӦĬϵ`It works!`ҳ档 +在实验的第一个部分,攻击者机器上没有任何进程监听 80 端口,于是 Firefox 返回错误。之后,一旦我们在攻击者主机上的 80 端口(默认端口)开启了 Apache 服务器,浏览器的请求就会收到来自攻击者主机的响应,带有默认的`It works!`页面。 -ʵһȫ˽ϵ͵IJ㼶ǵڶ㣩Ǿ׽ٳڽϸ߲㼶ϵӦã DNS ͻ˺ Web +这个实验表明,一旦我们完全控制了较低的层级(这里是第二层),我们就能轻易劫持运行在较高层级上的应用,例如 DNS 客户端和 Web 浏览器。 -### һ -- Ӧýٳս +### 试一试 -- 应用劫持挑战 -Ựٳֵһ޸Ŀͻ˷͵ݡKali Ͽõ EttercapĴ滻Ĺ +会话劫持的下一步就是修改客户端发送的数据。Kali 上可用的软件叫做 Ettercap。这会帮助你用于网络的创建搜索和替换的过滤器。 -սУдһ򵥵ĹаȫĶɲȫġ Google ȫǷʾΪȫ +这个挑战中,编写一个简单的过滤器,将网络上所有安全的东西变成不安全的。尝试在 Google 上搜索安全,并看看结果是否显示为不安全。 -## 7.4 ֿͻ˵İȫ +## 7.4 发现客户端的安全配置 -֮ǰ½УǿδšWEP WPA ۹ޣǵǿԿͻ˵̽ʱô֪̽ SSID ĸأ +之前的章节中,我们看到了如何创建开放、WEP 和 WPA 接入点蜜罐,但是当我们看到来自客户端的探测请求时,我们怎么知道探测的 SSID 属于哪个网络呢? -⿴Щ֣ܼ򵥡Ҫ㲥ͬ SSID Ľ㣬ӵвͬİȫáοͻʱڴԶӵЩ֮һ +这看起来有些棘手,但解决方案很简单。我们需要创建广播相同 SSID 的接入点,但是拥有不同的安全配置。当漫游客户端搜索网络时,它会基于储存的网络配置自动连接到这些接入点之一。 -ԣǿʼɣ +所以,让我们开始吧! -### ʵսʱ -- ͻ˵Ľ֤ +### 实战时间 -- 客户端的解除验证攻击 -1. Ǽ߿ͻӵ` Wireless Lab`ãûӵκνʱ̽Ϊ˷ָİȫãҪ㡣ǵۣǼͻ˵ʱ硢WEPWPA-SPK WPA2-SPKҪĸ㡣Ϊȴĸӿ -- `mon0``mon3`ʹ`airmon-ng start wlan0 ` +1. 我们假设无线客户端拥有` Wireless Lab`网络配置,在它没有连接到任何接入点时,它发送了这个网络的探测请求。为了发现该网络的安全配置,我们需要创建多个接入点。出于我们的讨论,我们假设客户端的配置时开放网络、WEP、WPA-SPK 或者 WPA2-SPK。所以我们需要创建四个接入点。为了完成它,我们首先创建四个虚拟接口 -- `mon0`到`mon3`,多次使用`airmon-ng start wlan0 `命令: ![](img/7-4-1.jpg) -2. ʹ`ifconfig -a`´Ľӿڣ +2. 你可以使用`ifconfig -a`命令看到所有新创建的接口: ![](img/7-4-2.jpg) -3. `mon0`ϴ AP +3. 现在我们在 `mon0`上创建开放 AP: ![](img/7-4-3.jpg) -4. `mon1`ϴ WEP AP +4. 我们在`mon1`上创建 WEP 保护的 AP: ![](img/7-4-4.jpg) -5. WPA-PSK AP `mon2`ϣ +5. WPA-PSK 的 AP 在`mon2`上: ![](img/7-4-5.jpg) -6. WPA2-PSK AP `3`ϣ +6. WPA2-PSK 的 AP 在`3`上: ![](img/7-4-6.jpg) -7. ǿͬƵִ` airodump-ng `ȷĸ㶼У +7. 我们可以在相同频道上执行` airodump-ng `来确保所有四个接入点都启动并且运行,像这样: ![](img/7-4-7.jpg) -8. Ǵοͻϵ WIFIȡ֮ǰӵĸ` Wireless Lab `ӵðȫáӵ WPA-PSK 磬 +8. 现在让我们打开漫游客户端上的 WIFI。取决于之前连接到哪个` Wireless Lab `,它会连接到该安全配置。这里,它连接到了 WPA-PSK 网络,像这样: ![](img/7-4-8.jpg) -### ոշʲô +### 刚刚发生了什么? -Ǵӵͬ SSID DzͬȫõĶ۹ޡȡڿͻΪ`Wireless Lab`索ĸãӵӦǸ +我们创建了拥有相同 SSID 但是不同安全配置的多个蜜罐。取决于客户端为`Wireless Lab`网络储存哪个配置,它会连接到相应的那个。 -ʮʵãΪִ͸ԣ㲻֪ͻ˵ıʼDZĸȫáͨտͻҵʵǸҲ WIFI 㡣 +这个技巧十分实用,因为如果你在执行渗透测试,你不知道客户端的笔记本上是哪个安全配置。这会允许你通过引诱客户端来找到合适的那个。这个技巧也叫作 WIFI 钓鱼。 -### һ -- տͻ +### 试一试 -- 引诱客户端 -ڿͻϴͬ SSID IJͬã۹Ƿܼǡ +在客户端上创建相同 SSID 的不同配置,并检查你的蜜罐是否能检测它们。 -Ҫע⣬ WIFI ͻ˿ܲ̽ⴢе硣ʱͲʹ۵ļǡ +要注意,许多 WIFI 客户端可能不探测储存在配置中的网络。这时就不能使用我们讨论的技巧来检测它们。 -## С -- ߼ WLAN +## 小测验 -- 高级 WLAN 攻击 -Q1 MITM У˭мˣ +Q1 在 MITM 攻击中,谁是中间人? -1. 㡣 -2. ߡ -3. ܺߡ -4. ǡ +1. 接入点。 +2. 攻击者。 +3. 受害者。 +4. 都不是。 -Q2 Dnsspoof ܹ +Q2 Dnsspoof 能够: -1. α DNS -2. α DNS Ӧ -3. Ҫ DNS С -4. ҪڽС +1. 伪造 DNS 请求。 +2. 伪造 DNS 响应。 +3. 需要在 DNS 服务器上运行。 +4. 需要在接入点上运行。 -Q3 MITM \_\_ ɣ +Q3 无线 MITM 攻击可以在 \_\_ 上完成: -1. ͬʱ߿ͻϡ -2. һһƵϡ -3. κ SSID ϡ -4. 3 4 +1. 同时在所有无线客户端上。 +2. 一次在一个频道上。 +3. 在任何 SSID 上。 +4. 3 和 4。 -Q4 ǵ MITN ׼УǸӿܺ +Q4 在我们的 MITN 准备工作中,那个接口离受害者最近? 1. At0 2. Eth0 3. Br0 4. En0 -## ܽ +## 总结 -һУ˽ʹΪʵָ߼Ϊϵ MITM һЩ׼֮ܺߵ֮ʹͬ׼ͨ DNS ٳܺߵӦò㣨Web +这一章中,我们了解了如何使用无线作为基础来实现高级攻击。我们为无线上的 MITM 攻击做了一些准备,之后用它来窃听受害者的流量。之后我们使用相同的准备工作,通过 DNS 毒化攻击来劫持受害者的应用层(Web 流量)。 -һУǻ˽ΰȷĹ滮̽ͱ׶ʵʩ߹Ҳ漰 WLAN ʵ +在下一章中,我们会了解如何按照正确的规划、探索和报告阶段来实施无线攻击。我们也会涉及到保护 WLAN 的最佳实践。 diff --git a/ch8.md b/ch8.md index 394eca2f9346a17956b2912ac287e1e7e022752a..f35b32f218079f2eea11c19f8564288632359cb6 100644 --- a/ch8.md +++ b/ch8.md @@ -1,186 +1,186 @@ -# ڰ ҵ WPA RADIUS +# 第八章 攻击企业级 WPA 和 RADIUS -> ߣVivek Ramachandran, Cameron Buchanan +> 作者:Vivek Ramachandran, Cameron Buchanan -> ߣ[](https://github.com/) +> 译者:[飞龙](https://github.com/) -> Э飺[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/) +> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/) -## +## 简介 -> ͷԽˤԽҡ +> 个头越大,摔得越惨。 -> -- +> -- 谚语 -ҵ WPA ԴɹƵĹ⻷ԱΪ߰ȫǸһУǻῴȷˡ +企业级 WPA 总是自带不可攻破的光环。多数网络管理员认为它对于无线安全问题是个银弹。在这一章中,我们会看到这个真理不再正确了。 -һУǻ˽ʹö Kali Ĺߺͼɣҵ WPA +这一章中,我们会了解如何使用多种 Kali 包含的工具和技巧,来攻击企业级 WPA。 -## 8.1 FreeRADIUS-WPE +## 8.1 配置 FreeRADIUS-WPE -Ҫ RADIUS ʵʩҵ WPA 㷺ʹõĿԴ RADIUS ʱ FreeRADIUSǣãΪÿιʮġ +我们需要 RADIUS 服务器来实施企业级 WPA 攻击。最广泛使用的开源 RADIUS 服务器时 FreeRADIUS。但是,它难于配置,并且为每次攻击而配置它十分无聊。 -Joshua Wright һ֪İȫоԱдһ FreeRADIUS IJʹúִй FreeRADIUS-WPE Kali ûԴ FreeRADIUS-WPE Ҫִвá +Joshua Wright 是一个知名的安全研究员,他写了一个 FreeRADIUS 的补丁使其易于配置和执行攻击。这个补丁以 FreeRADIUS-WPE 发布。Kali 没有自带 FreeRADIUS-WPE ,所以我们需要执行下列步骤来配置。 -1. ` https://github.com/brad-anton/freeradius-wpe `ҵӣ` https://github.com/brad-anton/ freeradius-wpe/raw/master/freeradius-server-wpe_2.1.12-1_i386. deb` +1. 访问` https://github.com/brad-anton/freeradius-wpe `并且你会找到下载连接:` https://github.com/brad-anton/ freeradius-wpe/raw/master/freeradius-server-wpe_2.1.12-1_i386. deb`。 ![](img/8-1-1.jpg) -2. ֮`ldconfig`֮ʹ` dpkg Ci freeradius-server-wpe_2.1.12-1_ i386.deb `װ +2. 下载完成之后,在`ldconfig`之后使用` dpkg –i freeradius-server-wpe_2.1.12-1_ i386.deb `来安装: ![](img/8-1-2.jpg) - Ҫ Kali Radius + 我们现在需要快速在 Kali 上配置 Radius 服务器。 -### ʵսʱ -- ʹ FreeRADIUS-WPE AP +### 实战时间 -- 使用 FreeRADIUS-WPE 建立 AP -1. LAN ˿֮һӵ Kali ̫˿ڡĽӿ`eth0`ӿڲͨ DHCP IP ַ +1. 将接入点的 LAN 端口之一连接到你的 Kali 主机的以太网端口。我们这里的接口是`eth0`。启动这个接口并通过运行 DHCP 获得 IP 地址,像这样: ![](img/8-1-3.jpg) -2. ¼㣬ȫģʽΪ WPA/WPA2-Enterprise`Version`Ϊ WPA2`Encryption `Ϊ AES֮` EAP (802.1x) `棬 Radius IP ַ Kali IP ַ `Radius Password ``test` +2. 登录接入点,将安全模式设为 WPA/WPA2-Enterprise,将`Version`设为 WPA2,将`Encryption `设为 AES。之后,在` EAP (802.1x) `部分下面,输入 Radius 服务器 IP 地址,就是你的 Kali 的 IP 地址。 `Radius Password `是`test`,像这样: ![](img/8-1-4.jpg) -3. ڴµնˣĿ¼`/usr/local/etc/raddb` FreeRADIUS-WPE ļŵĵط +3. 让我们现在打开新的终端,访问目录`/usr/local/etc/raddb`。这是所有 FreeRADIUS-WPE 配置文件存放的地方。 ![](img/8-1-5.jpg) -4. Ǵ`eap.conf`ᷢ`default_eap_type`Ϊ MD5ǽΪ`peap` +4. 让我们打开`eap.conf`。你会发现`default_eap_type`设为了 MD5,让我们将它改为`peap`。 ![](img/8-1-6.jpg) -5. Ǵ`clients.conf`Ƕͻ˰ĵطܹӵǵ Radius Ȥǣ棬ʾΧ`192.168.0.0/16 ``secret`ĬΪ`test`Dz 2 ʹõġ +5. 让我们打开`clients.conf`。这就是我们定义客户端白名单的地方,它们能够连接到我们的 Radius 服务器。有趣的是,如果你浏览到下面,忽略设置示例,范围`192.168.0.0/16 `的`secret`默认设为`test`,这就是我们步骤 2 中所使用的。 ![](img/8-1-7.jpg) -6. ʹ`radiusd Cs CX ` RADIUS +6. 我们现在使用`radiusd –s –X `命令启动 RADIUS 服务器。 ![](img/8-1-8.jpg) -7. һϣĻϿһѵϢᰲ˿ڡ̫ˣڿԿʼһµʵˡ +7. 一旦启动完毕,你会在屏幕上看到一堆调试信息,但是最后服务器会安顿下来并监听端口。太棒了!我们现在可以开始这一章的实验了。 ![](img/8-1-9.jpg) -### ոշʲô +### 刚刚发生了什么? -dzɹ FreeRADIUS-WPEǻһµʵʣಿʹ +我们成功配置了 FreeRADIUS-WPE。我们会在这一章的实验的剩余部分使用它。 -### һ -- ת RADIUS +### 试一试 -- 玩转 RADIUS -FreeRADIUS-WPE ӵдѡʹԼϤǸõ⡣ʱ鿴ͬļԼЭͬdzҪ +FreeRADIUS-WPE 拥有大量选项。使你自己熟悉它们是个好的主意。花费时间来查看不同的配置文件,以及它们如何协同工作非常重要。 -## 8.2 PEAP +## 8.2 攻击 PEAP -ܱĿչ֤Э飨PEAP EAP 㷺ʹõİ汾 Windows ԭԴ EAP ơ +受保护的可扩展的身份验证协议(PEAP)是 EAP 的最广泛使用的版本。这是 Windows 原生自带的 EAP 机制。 -PEAP ӵ汾 +PEAP 拥有两个版本: -+ ʹ EAP-MSCHAPv2 PEAPv0еİ汾Ϊ Windows ԭ֧֣ -+ ʹ EAP-GTC PEAPv1 ++ 使用 EAP-MSCHAPv2 的 PEAPv0(最流行的版本,因为 Windows 原生支持)。 ++ 使用 EAP-GTC 的 PEAPv1。 -PEAP ʹ÷˵֤֤ RADIUS PEAP Ĺ֤֤IJá +PEAP 使用服务端的证书来验证 RADIUS 服务器。几乎所有 PEAP 的攻击都会利用证书验证的不当配置。 -һʵУǻῴһڿͻ˹ر֤֤ʱƽ PEAP +下一个实验中,我们会看一看如何在客户端关闭证书验证的时候破解 PEAP。 -### ʵսʱ -- ƽ PEAP +### 实战时间 -- 破解 PEAP -ѭָʼ +遵循以下指南来开始: -1. ٴμ` eap.conf `ļȷ PEAP +1. 再次检查` eap.conf `文件来确保开启了 PEAP: ![](img/8-2-1.jpg) -2. ֮ RADIUS ʹ`radiusd Cs CX` +2. 之后重启 RADIUS 服务器,使用`radiusd –s –X`: ![](img/8-2-2.jpg) -3. FreeRADIUS-WPE ־ļ +3. 监控由 FreeRADIUS-WPE 创建的日志文件: ![](img/8-2-3.jpg) -4. Windows ԭ֧ PEAPȷر֤֤ +4. Windows 原生支持 PEAP。让我们确保关闭了证书验证: ![](img/8-2-4.jpg) -5. Ҫ`Configure `ǩҳ`Secured password`Աߣ Windows ҪԶʹǵ Windows ¼ƺ룺 +5. 我们需要点击`Configure `标签页,它在`Secured password`的旁边,并告诉 Windows 不要自动使用我们的 Windows 登录名称和密码: ![](img/8-2-5.jpg) -6. ҲҪ`Advanced Settings`Իѡ`User authentication` +6. 我们也需要在`Advanced Settings`对话框中选择`User authentication`。 ![](img/8-2-6.jpg) -7. һͻӵ˽㣬ͻ˻ʾû롣ʹ`Monster`Ϊû`abcdefghi `Ϊ룺 +7. 一旦客户端连接到了接入点,客户端会提示输入用户名和密码。我们使用`Monster`作为用户名,`abcdefghi `作为密码: ![](img/8-2-7.jpg) -8. һˣǾ־ļп MSCHAP-v2 challenge Ӧ +8. 一旦我们完成了,我们就能在日志文件中看到 MSCHAP-v2 challenge 响应。 ![](img/8-2-8.jpg) -9. ʹ`asleap`ƽʹð`abcdefghi`бļܹƽʾĿģֻ˵еļ`list`аб +9. 我们现在使用`asleap`来破解它,使用包含`abcdefghi`的密码列表文件,我们能够破解它。(出于演示目的,我们只创建了单行的文件,叫做`list`,其中包含列表。) ![](img/8-2-9.jpg) -### ոշʲô +### 刚刚发生了什么? -ʹ FreeRADIUS-WPE ۹ޡҵͻòûʹ PEAP ֤֤ǽǵα֤չʾͻˣˡһˣڲ֤Э MSCHAP-v2 ʼЧڿͻʹǵα֤ݣܹ׶ȡûchallenge ӦԪ顣 +我们使用 FreeRADIUS-WPE 建立了蜜罐。企业客户端配置不当,没有使用 PEAP 证书验证。这允许我们将我们的伪造证书展示给客户端,它被乐意接受了。一旦它发生了,内部验证协议 MSCHAP-v2 开始生效。由于客户端使用我们的伪造证书来解密数据,我们能够轻易读取用户名、challenge 和响应元组。 -MSCHAP-v2 ֵܵ乥ʹ`asleap`ƽ challenge ӦżԣΪֵеĵʡ +MSCHAP-v2 易于受到字典攻击。我们使用`asleap`来破解 challenge 和响应偶对,因为它看起来基于字典中的单词。 -### һ -- PEAP ı +### 试一试 -- 攻击 PEAP 的变体 -PEAP Զַʽáʹ֤֤Աûӵбᵽ֤߿Դκгǩ֤ʵ֤顣Ծɻᱻͻ˽ܡҲǿܵġ +PEAP 可以以多种方式不当配置。即使打开了证书验证,如果管理员没有在连接到服务器列表中提到验证服务器,攻击者可以从任何列出的签证机构获得其他域的真实证书。这仍旧会被客户端接受。这个攻击的其他变体也是可能的。 -Ƽ̽һµIJͬԡ +我们推荐你探索这一章的不同可能性。 ## EAP-TTLS -Ƽ㳢Թ EAP-TTLSһǶ PEAP 顣 +我们推荐你尝试攻击 EAP-TTLS,它类似于这一章我们对 PEAP 所做的事情。 -## ҵȫʵ +## 企业安全最佳实践 -˴Ķ WPA/WPA2 ĹиҲҵǵľ飬Ƽ飺 +我们意见看到了大量的对 WPA/WPA2 的攻击,有个人也有企业。基于我们的经验,我们推荐下列事情: -+ SOHO ͹˾ʹǿ WPA2ܹ 63 ַúǡ ++ 对于 SOHO 和中型公司,使用强密码的 WPA2,你总共能输入 63 个字符,好好利用它们。 -+ ڴҵʹô EAP-TLS ҵ WPA2ͬʱڿͻ˺ͷʹ֤֤Ŀǰû취ơ ++ 对于大型企业,使用带有 EAP-TLS 的企业级 WPA2。这会同时在客户端和服务器使用证书来验证,目前没办法攻破。 -+ Ҫ PEAP EAP-TTLS WPA2ȷ֤֤򿪣ѡȷǩRADIUS Ȩ󣬹رκûµ RADIUS ֤ǩá ++ 如果你需要带有 PEAP 或者 EAP-TTLS 的 WPA2,确保你的证书验证打开,选择了正确的签发机构,RADIUS 服务器开启了授权,最后,关闭任何允许用户接受新的 RADIUS 服务器、证书或者签发机构的配置。 -## С -- ҵ WPA RADIUS +## 小测验 -- 攻击企业级 WPA 和 RADIUS -Q1 FreeRADIUS-WPE ʲô +Q1 FreeRADIUS-WPE 是什么? -1. ͷʼд RADIUS -2. FreeRADIUS IJ -3. Linux ĬԴİ汾 -4. ϶ǡ +1. 从头开始编写的 RADIUS 服务器。 +2. FreeRADIUS 服务器的补丁。 +3. 所有 Linux 默认自带的版本。 +4. 以上都不是。 -Q2 ĸڹ PEAP +Q2 下列哪个可以用于攻击 PEAP? -1. α֤Ϣ -2. α֤ -3. ʹ WPA-PSK -4. ȫ +1. 伪造验证信息 +2. 伪造证书 +3. 使用 WPA-PSK +4. 以上全部 -Q3 EAP-TLS ʹʲô +Q3 EAP-TLS 使用了什么? -1. ͻ֤ -2. ֤ -3. 1 2 -4. 1 2 +1. 客户端证书 +2. 服务端证书 +3. 1 或者 2 +4. 1 和 2 -Q4 EAP-TTLS ʹʲô +Q4 EAP-TTLS 使用了什么? -1. ֻпͻ֤ -2. ֤ -3. ֤ +1. 只有客户端证书 +2. 服务端证书 +3. 基于密码的验证 4. LEAP -## ܽ +## 总结 -һУǿι PEAP EAP-TTLS ҵ WPAҵ֤ơ +这一章中,我们看到了如何攻破运行 PEAP 或者 EAP-TTLS 的企业级 WPA。它们是两个用于企业的最常见的验证机制。 -һУǻῴһΰѧжʵ͸ԡ +下一章中,我们会看一看如何把我们学到的所有东西用于真实的渗透测试。