审核 Wi-Fi Protected Access (WPA) 预共享密钥模式
尽管无线网络的部署呈指数级增长,但对网络和信息安全的关注却没有跟上步伐。经验证据表明,只有不到三分之一的无线网络实施了任何形式的数据加密,无论是 Wired Equivalent Privacy (WEP) 还是 Wi-Fi Protected Access (WPA)。那些实施了这些加密方法的网络管理员和家庭用户可能已经陷入了虚假的安全感。众所周知,WEP 很容易被利用,并且当 WPA 在消费者模式下使用时,存在相当大但相对不为人知的问题。本文重点关注通过加密提供的数据机密性,回顾 WEP 中的缺陷并检查围绕 WPA 的问题。本文探讨了演示在预共享密钥 (PSK) 模式下使用 WPA 的风险的工具。
WEP 于 1999 年被批准为 IEEE 标准。它旨在为防止数据在传输过程中被窃听以及未经授权访问网络资源提供适度保护。这种保护是通过一种加密方案提供的,该方案利用了 RC4 流密码的 flawed 实现。该实现的实际密钥大小具有误导性,因为密钥为 40 位和 104 位,并在密钥中添加了 24 位初始化向量 (IV)。这导致了 64 位和 128 位密钥的误称。
WEP 受密钥调度算法实现不佳的影响,并以明文传输 flawed IV。在 Fluher 等人发表了 RC4 密钥调度算法中的弱点 并于 2001 年 Shmoo Group 发布了 Airsnort 的 beta 版本之后,人们普遍承认 WEP 不是保护无线网络的适当方法。捕获大约五百万个数据包在统计上可以确保收集到大约四千个弱 IV。通过这些信息,Airsnort 可以识别大多数 WEP 密钥。这些在统计上较弱的有趣 IV 在行业内获得了广泛认可,因此,大多数供应商对其 WEP 固件和软件实现进行了更改,以过滤或删除弱 IV。
旧版本的 Airsnort 和其他通过检查有趣 IV 来攻击 WEP 的工具,作为针对 2002 年之后生产的大多数无线设备的攻击向量变得不可用。2004 年,Korek 发布了一种新的 WEP 统计密码分析攻击,虽然仍然基于密钥调度算法中的弱点,但 Korek 攻击取消了收集有趣 IV 的要求。此攻击已被编码到多种工具中,最著名的是 Aircrack、WepLab 和最新版本的 Airsnort。每种工具的功能略有不同,但每种工具打破 WEP 所需的数据包都比上一代 WEP 破解工具少一半。
IEEE 认识到 WEP 不是保护无线通信的充分方法,并着手创建新的安全标准 802.11i,也称为 WPA2。802.11i 于 2004 年初被批准为草案标准,其中包含一套强大的安全标准。802.11i 架构包含用于身份验证和基于端口的访问控制的 802.1x、AES(高级加密标准)块密码和 CCMP(计数器模式 CBC MAC 协议),用于跟踪关联并提供机密性、完整性和来源身份验证。
在这些强大的要求中,AES 是计算量最大的,并且已为 WEP 部署的 802.11b/g 硬件无法胜任实现 AES 块密码的任务。企业级无线部署的公司可能会担心部署不向后兼容的新设备;旧版 802.11 硬件将无法与新的 802.11i 硬件互操作。这将导致公司要么一次性部署所有新设备,要么面临互操作性的噩梦。
Wi-Fi 联盟应运而生,这是一个致力于促进无线局域网 (WLAN) 增长的非营利性行业协会。Wi-Fi 联盟创建了 WPA 规范作为桥接解决方案,以缓解对 WEP 的担忧,同时为 802.11i 提供桥梁。WPA 的设计符合 802.11i 规范的大部分内容。主要的例外是 WPA 不会为加密实现 AES,并将继续使用 RC4。这种方法确保了 WPA 将向后兼容 802.11 认证的硬件,并向前兼容 802.11i 硬件。本质上,它将提供一个桥梁,因为供应商将新设备上线,允许公司在以分阶段方式迁移到更新设备的同时利用 WPA 标准。
WPA 解决了 WEP 中固有的几个问题。通过实施临时密钥完整性协议 (TKIP),隐私和加密问题得到缓解,因为使用 RADIUS 或 Kerberos 身份验证服务器缓解了客户端到 AP 身份验证和未经授权的网络访问问题。TKIP 协议极大地扩展了密钥的大小,允许基于用户的密钥,创建了完整性检查机制,并消除了 WEP 密钥方案中的可预测性。
WPA 可以以两种版本实施:WPA-企业版和 WPA-个人版。WPA-企业版使用 802.1x 身份验证框架和 TKIP 密钥加密,通过使用 RADIUS 或身份验证服务器验证网络用户来防止未经授权的网络访问,并确保基于用户的密钥。到目前为止,WPA-企业版尚未容易受到任何针对基于用户的密钥的机密性的攻击。可以推测密钥的入侵者会发现该密钥在除被盗计算机之外的所有计算机上都不可用。
WPA-个人版也使用 TKIP 密钥加密机制,但使用预共享密钥 (PSK) 而不是从身份验证服务器生成的基于用户的密钥。此模式通常称为 WPA-PSK。在 WPA-PSK 中,用户必须共享一个密码短语,该密码短语可以是 8 到 63 个 ASCII 字符或 64 个十六进制数字(256 位)。与 WEP 类似,此密码短语对于网络的所有用户都是相同的,并存储在 AP 和客户端计算机上。WPA-PSK 专为不需要身份验证服务器的个人或小型企业环境而设计。在实际实施中,一些中型公司使用 WPA-PSK 而不是 WPA-企业版,以简化企业管理。
2003 年 11 月,ICSA Labs(TruSecure 的一部分)的高级技术主管 Robert Moskowitz 发布了“WPA 接口中密码短语选择的弱点”。在本文中,Moskowitz 描述了一个简单的公式,该公式通过对 WPA-PSK 网络执行字典攻击来揭示密码短语。此弱点基于以下事实:成对主密钥 (PMK) 是从密码短语、SSID、SSID 长度和 nonce 的组合派生而来的。此信息的串联字符串被哈希 4,096 次以生成 256 位值并与 nonce 值组合。创建和验证会话密钥所需的信息与正常流量一起广播并且很容易获得;然后挑战就变成了原始值的重建。Moskowitz 解释说,成对瞬时密钥 (PTK) 是基于 PMK 的 keyed-HMAC 函数;通过捕获四次握手身份验证,攻击者拥有对密码短语进行字典攻击所需的数据。根据 Moskowitz 的说法,“从少于大约 20 个字符的密码短语生成的密钥不太可能阻止攻击。”
2004 年底,当时佐治亚理工学院的学生 Takehiro Takahashi 发布了 WPA Cracker。大约在同一时间,网络工程师和著名的安全讲师 Josh Wright 发布了 coWPAtty。这两种工具都是为 Linux 系统编写的,并对 WPA-PSK 网络执行暴力字典攻击,以尝试确定共享密码短语。两者都要求用户提供字典文件和一个转储文件,其中包含 WPA-PSK 四次握手。两者的功能类似;但是,coWPAtty 包含一个自动解析器,而 WPA Cracker 需要用户执行手动字符串提取。此外,coWPAtty 优化了 HMAC-SHA1 函数,速度稍快。每种工具都使用 PBKDF2 算法来控制 PSK 哈希,以攻击和确定密码短语。但是,这两种工具对于较大的密码短语都不是非常快速或有效,因为每种工具都必须使用 Moskowitz 论文中描述的值执行 4,096 次 HMAC-SHA1 迭代。
要执行审核,我们需要一个 libpcap 文件,其中包含 WPA-PSK 四次握手身份验证和程序 WPA Cracker 或 coWPAtty。以 libcap 兼容的转储文件格式捕获四次握手是此练习中最具挑战性的部分。它需要一个能够 rf 监视器模式的无线 NIC 和一组修改后的无线驱动程序,这些驱动程序允许数据包通过接口传递。
libpcap 要么预先安装,要么作为大多数现代 Linux 发行版的软件包提供,并且是低级别网络监控的事实标准。libpcap 网络库为用户级别的数据包捕获提供了独立于系统的接口。对于那些喜欢编译而不是安装软件包的人来说,安装步骤很简单。从 SourceForge.net 下载最新的 libpcap 文件,然后展开 libpcap 文件,配置、make 和 make install。编译代码时,文件名取决于您下载的版本
# tar zxvf libpcap-current.tar.gz # cd libpcap-2005.06.01 # ./configure && make && make install
现在系统已经能够捕获网络数据,需要一种从空中读取数据的方法。大多数现代 Linux 发行版都附带一个或多个无线驱动程序,但很少有附带允许原始监视器模式或 rfmon 的修改后的驱动程序。rfmon 是一种嗅探模式,允许无线 NIC 报告来自 802.11 层的数据。虽然很少有主要的发行版附带支持 rfmon 的驱动程序,但许多实时 CD 安全发行版(例如 Knoppix-STD、Auditor 和 Whoppix)都预编译了修改后的无线驱动程序以及审核工具的编译二进制文件。
要使用的修改后的驱动程序取决于芯片组的类型。例如,基于 Prism2 的卡可以使用 wlan-ng 驱动程序或 Host-AP 驱动程序,而 Orinoco 卡和克隆卡可以使用修补的 orinoco_cs 驱动程序。使用高于 0.15 版本的 Orinoco 驱动程序的 Orinoco 卡具有内置的监视器模式,而基于 Atheros 的卡可以使用 MadWiFi 驱动程序。此列表并非详尽无遗,并且有许多可能的选项,包括驱动程序补丁、在内核树外部构建驱动程序模块的独立软件包以及作为内核源代码本身一部分的内核主线驱动程序。假定读者有能力为其特定卡和允许无线监视器模式的发行版安装驱动程序。
可以使用多种方法来捕获包含感兴趣的 WPA-PSK 四次握手的无线流量。tcpdump 允许进行网络监控和数据采集,但它不容易提供有意义的 AP 数据。Kismet 可以说是用于无线数据捕获、审核流量、网络检测和一般无线嗅探的最佳工具。具体来说,Kismet 可以将数据包数据记录到此演示所需的转储文件中,但这对于这种情况来说有点大材小用。最优雅的捕获方法是使用 airodump,它是 Christopher Devine 编写的 Aircrack 2.1 套件的一部分。Aircrack 可以处理大型捕获文件,并显示有意义的 AP 信息,包括 SSID、唯一 IV 总数和数据包大小。Aircrack 以 Tar File Gzipped 格式 (tgz) 提供。按照以下步骤安装以构建 Aicrack 工具套件;这种情况下的特定感兴趣工具是 airodump
# tar zxvf aircrack-2.1.tgz # cd aircrack-2.1 # make
工具编译完成后,现在可以捕获无线流量。首先必须将无线 NIC 置于 rf 监视器模式。例如,如果使用修补版本的 Orinoco 驱动程序,则会发出以下命令,其中 <AP channel> 是感兴趣的通道
# iwpriv eth0 monitor 1 <AP channel>
然后启用无线 NIC
# ifconfig wlan0 up
最后,将发出捕获流量的命令
# airodump wlan0 datafilename
Airodump 持续显示指定通道上的 AP SSID 和数据包捕获信息。为了减少捕获的数据量,可以将 AP 的 MAC 地址附加到 datafilename 之后。要退出 airodump,请使用 Ctrl-C 命令。
虽然 airodump 很高兴地捕获流量,但在发生客户端到 AP 关联之前,不会捕获四次握手。从攻击者的角度来看,这是一个随机事件,但是可以使用 void11 等工具执行死亡攻击来强制重新关联,该工具强制无线客户端与其关联的 AP 取消身份验证。无线客户端自动尝试重新关联,从而可以捕获 WPA-PSK 四次握手。假设已捕获握手,现在是执行暴力字典攻击的时候了。
coWPAtty 要求您的系统上安装 OpenSSL。下载 coWPAtty 后,使用以下步骤安装它
# tar zxvf Cowpatty-2.0.tar.gz # cd cowpatty # make
您现在已经构建了 coWPAtty 二进制文件。通过提供包含捕获的四次握手的 libpcap、要从中猜测密码短语的字典文件以及网络的 SSID 来执行二进制文件。选项是
-f:字典文件
-r:数据包捕获文件
-s:网络 SSID
二进制文件使用以下命令执行
# ./cowpatty -r datafilename \ -f dictionaryfile -s SSID
如果没有 WPA 四次交换,则显示以下消息
End of pcap capture file, incomplete TKIP four-way exchange. Try using a different capture.
如果文件确实包含四次握手,则显示以下内容
coWPAtty 2.0 - WPA-PSK dictionary attack. <jwright@hasborg.com> Collected all necessary data to mount crack against passphrase. Loading words into memory, please be patient ... Done (XX words). Starting dictionary attack. Please be patient.
coWPAtty 继续进行密集且相对缓慢的过程,即通过使用 PBKDF2 函数并对提供的数据集中的每个密码短语进行 4096 次 SHA-1 传递来测试每个字典单词作为密码短语。coWPAtty 更新其进度,直到它报告已找到 WPA-PSK 密码短语或无法从提供的字典文件中识别 WPA-PSK 密码短语。正如文档中指出的那样,由于每个密码短语所需的重复次数,coWPAtty 速度不快。预计实际使用中约为每秒 45 个密钥。
对于想要演示此工具但无法捕获网络数据的用户,coWPAtty 包含一个示例数据包捕获文件,名为 eap-test.dump,该文件是从 SSID 为 somethingclever 且 PSK 为 family movie night 的 AP 生成的。要演示使用提供的文件进行的攻击,请输入以下命令,确保提供的字典中包含短语 somethingclever
# ./cowpatty -r eap-test.dump \ -f dictionaryfile -s somethingclever
本文研究了 WEP 和 WPA 中的一些漏洞,并提供了审核 WPA 预共享密钥模式密码短语的工具和方法。为此,我们检查了 WEP 的框架和缺陷,并回顾了使用少于 20 个字符的 WPA-PSK 密码短语的风险。已经证明,尽管破解 WPA-PSK 的方法并非易事,但它也并非超出普通 Linux 用户的能力范围。家庭用户可以通过使用明显大于 20 个字符的密码短语,或者通过使用 WPA-企业版并合并身份验证服务器来降低其安全风险。企业用户应实施身份验证服务器,使用基于用户的密钥,并避免在 PSK 模式下实施 WPA。
本文的资源: /article/8405。
John L. MacMichael(CISSP、GSEC、CWNA)是一名海军军官和信息专业人士,在信息保障领域工作。他认为自己是一名普通的 Linux 用户,并在工作和家庭中使用各种发行版,包括 Slackware、Debian、Red Hat 和多个 live 发行版;他尚未找到自己最喜欢的发行版。他邀请您在 johnny@757.org 发表评论。