现代无线侦察技术(一):伪基站攻击基本理论篇
导语:
引言
在过去的几年里,强制无线设备连接到恶意接入点的“微妙艺术”已经有了一些令人兴奋的发展。 在 Dominic White 和 Ian de Villiers 对 MANA 的研究以及 George Chatzisofroniou 的 Lure10和已知信标攻击中,我们已经看到了 karma 风格的攻击手段的复苏,这些攻击可以用来攻击对 karma 免疫的设备[1][2]。
我想更深入地研究这些技术,了解它们在技术层面上是如何工作的,并且尝试试图亲自实现这些技术似乎看起来是一个完美的学习机会。 本文最初的目的是用相对简短的篇幅叙述我如何努力重现这些技术,并将其整合到 EAPHammer(见:https://github.com/s0lst1c3/eaphammer) 中。 然而,鉴于威胁追踪社区普遍缺乏对这一主题的关注,以及最近在野外使用流氓 AP 攻击的高调案例(例如:发生在本月早些时候的俄罗斯 GRU 组织将美国和欧洲作为目标的一系列攻击) ,我决定将这篇文章扩展成更长一些的内容[3]。
其结果是我将发表一个由四部分组成的系列博客文章,旨在为那些有兴趣在操作和技术层面了解更多关于现代无线安全的人们提供一个详细的学习 AP 基本原理的路线图。 在本系列文章中,我们将介绍几乎所有攻击者可以滥用802.11来发起中间人(person-In-the-middle,PITM)攻击的方法。 此外,我们将讨论为什么攻击者会开发这些技术,追踪流氓 AP 攻击的历史以及从本世纪初到现在的相应缓解措施。 最后,本系列文章将为进攻和防守的实践者提供操作指导。
对前人研究工作的致谢
在进一步讨论之前,我需要澄清一件事:
我并没有发明本指南中所列出的技术,也不是第一个编写实现这些技术的工具。 本文所述技术的创始人是 Dino A. Dai Zovi、 Shane Macaulay、@_sophron (George Chatzisofroniou)、@singe (Dom White)和 Ian de Villers。 这些作者的成功会在我们的整个系列博文中引用,所以如有转载请注明来源。
尽管这些人完成了令人惊叹的工作,但这可能是我尝试过的最具挑战性的事情之一。 实现本指南中所描述的技术花费了我整整四个月的时间。 本指南中描述的大多数攻击都已经在 hostapd 中有了相应的防御补丁(参见: https://w1.fi/cgit/hostap/) ,这是一个用内核级 C 语言编写的庞大而复杂的代码库。调试非常具有挑战性,在项目开始时,微妙的内存损坏错误是相当常见的(尽管随着时间的推移,我处理这些错误的能力有所提高)。 不用说,我在处理错误的过程中学到了很多东西,并且讲真,这提升了我的 C 语言熟练程度,但是如果没有前人的研究工作为我的开发提供了学习路线图,这个项目仍然会变得更加困难。
背景信息
802.11协议定义了可以存在于无线网络中的两个实体:
·基站: 连接到接入点(即笔记本电脑、电话等)的客户端设备。 在本系列文章中有时可能会使用术语“站点”、“基站”、“客户端”和“ 客户端设备”来描述相同的事情。 [4]
·接入点(ap) : 提供接入分配系统(即网络)的网络硬件。[4]
这两个实体可用于构建802.11中定义的三种基本网络类型:
·扩展服务集(ESS)(又名“基础设施”网络) : 基础设施网络将是本文的主要关注点,所以请注意这一部分。 基础设施网络中的 BSS 由零个或多个连接到接入点的站点组成,并通过其基本服务集标识符(BSSID)进行标识。 扩展服务集(ESS)本身由一个或多个 BSS 组成,通过一个公共分发系统(DS)连接。 DS 本身可以是连接接入点的任何种类的有线或网状网络[4]。
·独立基本服务集(IBSS)(又名“ Ad-Hoc”网络) : IBSS 网络不需要接入点,至少由一个基站组成。 在这篇文章中,我们没有涉及到这种类型的网络[4]。
·网状基本服务集(MBSS)(又名“网状”网络) : EBSS 网络由一个或多个网状站点组成,包括零个或多个网状门(你也许没太明白这里是什么意思) 。听起来很困惑吗? 不要担心这个问题——网状网络可能很有趣,但它与我们在这里讨论的问题无关[4]。
网络选择和漫游
虽然802.11协议有非常具体的规则,规定了一个站点会如何加入 ESS,但是它没有指定站点应该如何选择一个 ESS 来连接。 此外,该协议允许站点在具有相同 ESSID 的接入点之间自由漫游(因为从建筑物的一端走到另一端时,你不希望失去 WiFi 连接,等等)。 然而,802.11协议并没有指定如何选择这些接入点。 此外,即使站点必须向 ESS 认证才能与接入点相关联,802.11协议也不要求接入点到站点的认证[4][5][6]。
这种模糊性是协议内置的,以便在设计客户端设备时给予硬件制造商一定程度的灵活性。 然而,这种模糊性也使得本文中描述的每一种攻击成为可能[5][6]。 在接下来的章节中,我们将回顾当前客户端设备用于网络发现和选择的每个算法,以及漫游过程中的访问点选择。 然后我们将描述可以用来滥用这些算法的网络攻击。
首选网络列表(PNLs)
每当一个站点连接到无线网络时,网络的 ESSID 就存储在站点的首选网络列表(PNL)中。 PNL 是站点过去连接的每个网络的有序列表,PNL 中的每个条目包含网络的 ESSID 和建立连接所需的任何网络特定配置信息[5][6]。
被动扫描
客户端设备使用的第一种网络选择算法称为被动扫描。 在基础设施网络中,接入点周期性地发送信标帧,以便向附近的站点通报它们的存在和能力。 信标是广播帧,这意味着它们将被附近所有的站点接收到。 信标包括 AP 支持的速率、加密能力和其他信息。 对于本文的内容来说,最重要的是,信标帧包含 AP 的 ESSID (只要不禁用 ESSID 广播)[5][6]。
在被动扫描期间,客户端设备监听来自附近接入点的信标帧。 客户端设备通常在默认情况下配置为自动连接到其 PNL 内的网络。 如果是这种情况,并且客户端设备接收到一个信标帧,其 ESSID 字段与客户端的 PNL 中的 ESSID 相匹配,那么客户端将自动连接到发送信标帧的接入点[5][6]。 下面的动画描述了这个过程:
被动扫描
利用伪基站攻击滥用被动扫描过程
如前所述,802.11协议不需要访问点来对站点进行身份验证。 事实上,在802.11无线通信中使用的所有形式的身份验证都是在核心802.11协议的基础上进行分层的,并且在客户端设备决定连接到接入点之前不会发生。 此外,使用被动扫描的站点完全依靠信标帧的 ESSID 字段来确定接入点属于哪个 ESS [5][6]。
假设我们想要锁定一个当前没有连接到任何无线设备的无线设备。 如果我们知道客户端的 PNL 中至少有一个条目,我们可以通过使用该条目的 ESSID 创建我们自己的访问点来强制客户端连接到我们的接入点。 这样做的原因是我们的接入点将发送信标帧,这些帧将被客户端设备接收。 客户端设备将比较信标帧中的 ESSID 字段和它的 PNL,并在找到匹配的ESSID时尝试连接到我们的 AP [5][6]。
802.11漫游
正如前面提到的,802.11协议允许站点在同一 ESS 内的接入点之间自由漫游。 然而,该标准并没有规定当站点的 ESS 中有多个 AP 可用时,站点应该如何选择一个 AP 来连接。 客户端设备通常通过选择提供最佳连接的接入点来优化以应对这种情况,这通常归结为信号强度、吞吐量和信噪比的组合。 与自动网络选择一样,客户端设备依赖于信标帧 ESSID 字段来确定附近的 AP 是否是其当前 ESS 的一部分[5][6]。
802.11漫游
使用伪基站攻击滥用802.11漫游
我们可以通过创建一个与我们所希望的目标网络具有相同的 ESSID 的接入点来滥用802.11漫游过程。 如果我们能够提供比目标网络接入点更好的信号,那么与目标网络相关的任何客户端设备都将漫游到我们的流氓接入点。 我们可以通过以下两种方式之一来做到这一点:
·诱惑: 我们提供比目标接入点更好的信号,诱使客户端设备漫游到我们的 AP。
·强制: 我们使用反认证包、干扰或其他形式的拒绝服务(DoS)攻击来阻止对目标接入点的访问。 这会强制连接到 AP 的任何客户端设备漫游到我们的流氓访问点。
使用 EAPHammer 滥用 802.11漫游过程
在接下来的两个部分中,我们将介绍如何使用 EAPHammer 滥用802.11的漫游过程,以强制客户端设备连接到流氓 AP。
利用诱惑强制漫游
为了吸引用户漫游到一个邪恶的仿冒接入点,只需创建一个与目标网络具有相同的 ESSID 的接入点:
./eaphammer -i wlan0 --essid exampleCorp --captive-portal
攻击过程应该和你在下面的动画中看到的类似:
利用诱惑强制漫游
高功率的天线可以帮助解决这种类型的攻击,尽管对于企业网络硬件来说可能仍然很难取得一致的结果。
利用强制手段强制漫游
为了强制客户端漫游到一个邪恶的仿冒接入点,首先创建一个与目标网络具有相同 ESSID 的流氓接入点:
./eaphammer -i wlan0 --essid exampleCorp --captive-portal
接下来,从访问点对目标客户端设备进行身份验证,迫使它们漫游到你建立的邪恶接入点:
ifconfig wlan1 down iwconfig wlan1 mode monitor ifconfig wlan1 up iwconfig wlan1 channel 1 aireplay-ng -0 0 -a de:ad:be:ef:13:37
整个攻击过程应该和你在下面的 动画 中看到的相似:
利用强制手段强制漫游
请注意,强制连接流氓访问点常常具有不确定性。 现实世界的无线部署通常有多个接入点,这些接入点往往更强大,由于其位置靠近最高限度,具有更好的站点线路范围。 取消认证一个接入点通常会导致目标漫游到另一个有效接入点,而不是你的流氓 AP,除非附近所有接入点都取消认证(loud) ,或者你非常小心地放置流氓 AP (这很困难)。
主动探测
802.11中使用的第二种网络选择算法称为主动探测。 使用主动探测的客户端设备不断传输探测请求帧,以确定范围内的 AP 及其功能。 探测请求有两种形式: 直接请求和广播请求。 定向探测请求发送到特定的 ESSID,是客户端检查附近是否有特定网络的方法。
使用定向探测的客户端将在其 PNL 中发送针对每个网络的探测请求。 值得注意的是,定向探测是识别附近隐藏网络存在的唯一方法。 这和广播探测请求的工作方式几乎完全相同,但是发送时 SSID 字段设置为 NULL。 这个地址将广播探测器指向附近的所有接入点,允许站点检查附近是否有它喜欢的网络,而不会显示它的 PNL 的内容。
主动探测
当接入点接收到探测请求帧时,它首先检查帧的 SSID 字段。 如果帧是广播探测或帧的 SSID 字段与接入点的 ESSID相匹配,那么 AP 将通过向客户端发送探测响应帧来进行响应。 探测响应帧包含与信标帧相似的信息,包括支持的数据速率、功能和访问点的 ESSID (只针对探测请求)。
当客户端在其 PNL 中收到网络的探测响应时,它向发送探测响应的接入点发送一个身份验证请求(即使在开放网络中,没有身份验证也会被视为一种身份验证形式)。 假设身份验证成功(对于开放网络,它几乎总是应该成功) ,那么客户端将向客户端发送一个关联请求,以启动连接。
Karma攻击: 关于活动网络发现的假设
假设接入点将802.11标准视为法律,那么接入点应该只响应广播探测请求,或者直接针对它们的 ESSID 的探测请求。
然而,正如 Dino Dai Zovi 和 Shane Macaulay 在2005年意识到的那样,当你修改一个访问点来响应它接收到的所有探测请求时,会发生一些有趣的事情。 通过这样做,你可以有效地欺骗客户端设备连接到一个流氓 AP,并且事先不知道客户端的 PNL [5]。
这被称为 Karma 攻击,它非常简单: 访问点只监听定向探测请求,然后以同样的 ESSID 发送回定向探测响应。 然后客户端接收到 ESSID,认为这个 AP 是接近于 PNL 中的某个网络,于是客户端就可以连接到流氓 AP 。
使用 EAPHammer 执行 Karma 攻击
Eaphammer 不再支持经典的 karma 攻击,所以如果你想尝试这些攻击,你必须降级到更老的版本。 相反,EAPHammer 支持 MANA 攻击,我会在本系列文章的在第二部分中介绍。
总结
本系列文章的第一部分到此结束。 在第二部分中,我们将讨论现代无线设备安全性的改进如何大大降低了原始 Karma 攻击的有效性。 然后,我们将深入探讨两种规避这些缓解措施的技术,并描述它们是如何在 EAPHammer 中实现的。
参考资料
[1] https://sensepost.com/blog/2015/improvements-in-rogue-ap-attacks-mana-1%2F2/
[2] https://census-labs.com/news/2018/02/01/known-beacons-attack-34c3/
[3] https://www.justice.gov/opa/pr/us-charges-russian-gru-officers-international-hacking-and-related-influence-and
[4] https://standards.ieee.org/standard/802_11-2016.html
[5] https://ieeexplore.ieee.org/document/1495975?arnumber=1495975
[6] https://www.aon.com/cyber-solutions/aon_cyber_labs/whitepaper-identifying-rogue-access-point-attacks-using-probe-response-patterns-and-signal-strength/
发表评论