研究这个的契机是有次跟我的学长@ZIKH26聊智能家居iot安全的时候说的“那不连接wifi怎么去入侵智能家居呢”,然后就引申出这个了,描述概括下核心内容大概是这样
我一听这个牛掰啊:
首先 这样就可以破解任意密码了(错误的,弱口令且字典需要足够强大,后续会说明)
其次 这可以直接让区域内设备都上不了网了,这破坏性多大,直接让邻居上不了网(:
当时学长玩这个的时候用的是aircrack-ng这个工具,说一套下来操作有很多,可以尝试下怎么一键梭哈
在寒假就一起研究了一下原理等的内容
直接get到学长的无线网卡

先用现成的工具体验一下


工具的具体操作过程这里就不写了,网上有很多文章怎么操作,这里探究怎么写出一键梭哈脚本
在用工具进行操作时,过程大概是这样的:启动网卡为监听模式->监听当前环境AP(路由器)->选定AP监听该设备下的连接设备(STA)->发送断开帧->捕获到握手包->破解
这时候就存在疑问点:
打开wireshark选定我们的无线网卡

看到就是一堆包,也看不懂也不知道哪些包是我需要的,所以就要去研究一下原理了
首先是怎么抓包,可以使用Scapy来操作
Scapy 是一个用于 网络数据包处理 和 网络攻击模拟 的强大 Python 库。它允许用户轻松地创建、发送、捕获、解析和修改网络数据包
具体可以看文档
Introduction — Scapy 2.6.1 documentation
我们所使用的模块主要在
scapy.layers.dot11 — Scapy 2.6.1 documentation
IEEE 802协议簇是指IEEE标准中关于局域网(LAN)和城域网(MAN)的一系列标准。IEEE 802中定义的服务和协议限定在OSI七层网络模型的最低两层,即数据链路层和物理层。实际上,IEEE802又将OSI的数据链路层分成了两个子层,逻辑链路控制层(LLC)和媒介访问控制层(MAC)。IEEE802协议簇由IEEE802标准委员会维护。其中最广泛应用的协议有以太网(802.3)和WLAN(802.11)。每一个工作组专注一个方向,每个工作组由数字编号,比如目前从802.1编到了802.24。

所以802.11协议是IEEE802标准委员会下属的无线局域网工作组制定的无线局域网标准。
详细内容可以看IEEE Xplore Full-Text PDF
802.11 MAC帧格式如图

每个MAC帧都包含以下几部分:
主要来看一下帧控制字段

数据帧:负责传输数据报文,包括一种帧主体部分为空的特殊报文(Null帧)。STA可以通过Null帧通知AP自身省电状态的改变。
控制帧:协助数据帧的传输,负责无线信道的清空、信道的获取等,还用于接收数据时的确认。常用的控制帧有:
管理帧:负责对无线网络的管理,包括网络信息通告、加入或退出无线网络,射频管理等。常用的管理帧有:
详尽在第九章节IEEE Xplore Full-Text PDF
关于地址Address n字段:表示MAC地址。4个Address位填法不固定,需要和Frame Control字段中的To DS/From DS位结合来确定。例如,帧从一个STA发往AP,与从AP发往STA,4个Address字段的填法是不一样的。
Address n字段填写规则

到这里我们就可以有个大概的思路了,如果我们想要知道当前环境下有哪些AP的话,就要捕捉到Beacon帧,因为这个帧是AP用于广播其存在和网络信息的方式。而断开就通过发送Deauthentication帧来中断STA和AP的连接。
这里会存在一个疑问,如何去获得STA的MAC地址呢?我是通过捕获AP发送的Beacon帧的目的地址来获取的,也就是add1。因为AP的Beacon帧是广播的,所以目的地址也会存在"ff:ff:ff:ff:ff:ff",过滤掉就行了。

现在我们怎么抓包,抓什么包,发送什么都搞清楚了,那破解关键抓的包是什么呢
我想既然有密码这里肯定是跟无限网络中的认证有关的,查阅一番后发现了802.1X
802.1X认证系统使用可扩展认证协议EAP(Extensible Authentication Protocol)来实现客户端、设备端和认证服务器之间的信息交互。EAP协议可以运行在各种底层,包括数据链路层和上层协议(如UDP、TCP等),而不需要IP地址。因此使用EAP协议的802.1X认证具有良好的灵活性。
EAP数据首先被封装在EAPOL帧中,传输于申请者(Supplicant)和验证者(Authenticator)之间。随后又封装在RADIUS或Diameter,传输于验证者和验证服务器(Authentication server)之间。

到这里要提一下WLAN的安全策略
WLAN安全提供了WEP、WPA、WPA2和WAPI四种安全策略机制。每种安全策略体现了一整套安全机制,包括无线链路建立时的链路认证方式,无线用户上线时的用户接入认证方式和无线用户传输数据业务时的数据加密方式。
现在常用的机制就是WPA/WPA2,在手机中就可以看到

由于WEP共享密钥认证采用的是基于RC4对称流的加密算法,需要预先配置相同的静态密钥,无论从加密机制还是从加密算法本身,都很容易受到安全威胁。为了解决这个问题,在802.11i标准没有正式推出安全性更高的安全策略之前,Wi-Fi联盟推出了针对WEP改良的WPA。WPA的核心加密算法还是采用RC4,在WEP基础上提出了临时密钥完整性协议TKIP(Temporal Key Integrity Protocol)加密算法,采用了802.1X的身份验证框架,支持EAP-PEAP、EAP-TLS等认证方式。随后802.11i安全标准组织又推出WPA2,区别于WPA,WPA2采用安全性更高的区块密码锁链-信息真实性检查码协议CCMP(Counter Mode with CBC-MAC Protocol)加密算法。
为了实现更好的兼容性,在目前的实现中,WPA和WPA2都可以使用802.1X的接入认证、TKIP或CCMP的加密算法,他们之间的不同主要表现在协议报文格式上,在安全性上几乎没有差别。
在802.11i里定义了两种密钥层次模型,一种是成对密钥层次结构,主要用来保护STA与AP之间往来的数据;一种是群组密钥层次结构,主要用来描述STA与AP之间的广播或组播数据。
密钥协商阶段是根据接入认证生成的成对主钥PMK(Pairwise Master Key)产生成对临时密钥PTK(Pairwise Transient Key)和群组临时密钥GTK(Group Temporal Key)。PTK用来加密单播报文,GTK用来加密组播和广播无线报文。

密钥协商包括单播密钥协商和组播密钥协商过程。
密钥协商过程也叫做四次握手过程,是通过EAPOL-Key报文进行信息交互的,如图所示。

组播密钥协商过程也叫做二次握手过程,此过程是在四次握手产生PTK并安装密钥后开始进行的,如图所示

通过对WLAN中的身份认证和访问控制机制了解之后,我们就可以知道加密的数据是封装在EAPOL数据包中的,也就是我们要抓取断开重连之后的四次握手数据包(EAPOL)
在工具抓取的数据包中也可以看到

要想知道密码的关键就在于这个四次握手包中,那这四次握手到底发生了什么呢?
在了解四次握手之前先了解一些术语
PMK (Pairwise Master Key)
PMK 是由 MSK 生成,WPA2/PSK 的情况下,当 supplicant 和 authenticator 身份验证后,PSK 变成 PMK。PMK 会驻留在 AP 和所有 STA,不需要进行 key 交换,用它来生成用于加密单播数据的PTK。
PMK=HMAC−SHA1(ssid,psk)
PSK由ssid和passphrase生成,知道AP名和密码就能得出PSK
GMK (Group Master Key)
GMK 用在四次握手来生成 GTK,GTK 在 AP 端由 MSK 生成,所有连接到该 AP 的 STA 共享。
PTK (Pairwise Transit Key)
PTK 用来加密 AP 和 Station 通讯的单播数据包,AP 与每个 Station 通讯用的 PTK 都是唯一的。我们来看一下生成 PTK 的函数,参数是生成 PTK 需要的信息:
PTK = PRF(PMK + ANonce + SNonce + Mac(AP) + Mac(SA))
PRF是 pseudo-random function 的缩写,表示伪随机函数,PMK、ANonce、SNonce、Mac(AA) 和Mac(SA) 作为它的输入参数;
ANonce是 AP 生成的随机数,A 表示 authenticator;
SNonce是 STA生成的随机数,S 表示 supplicant;
**Mac(AP)**是 AP 的 Mac 地址;
**Mac(SA)**是 STA 的 Mac 地址;
由此可知,生成 PTK 依赖 PMK。
PTK 由多个密钥组成

GTK (Group Temporal Key)
GTK 用来加密 AP 和 STA 通讯的多播/广播数据包,连接该 AP 的所有 STA 共享一个 GTK。生成 GTK 的公式:
GTK = PRF(GMK + ANonce + Mac(AA))
与 PTK 不同的是没有 SNonce 和 Mac(SA),GTK 也依赖 GMK。
MIC(Message Integrity Check)
消息完整性校验,针对一组需要保护的数据计算出的散列值,用来防止数据遭篡改。
KCK (Key Confirmation Key):
PTK 的一部分,用于计算 MIC 验证消息的完整性。
RSN Information:
包含有关密码套件 (加密算法) 和使用的身份验证方法的信息。

根据握手包详细分析一下

AP 会发送 Nonce,称之为 ANonce。4 次握手使用 HMAC-SHA1 过程生成 MIC。
关于Nonce:Nonce(Number once)是一个随机数或伪随机数,通常用于一次性用途,确保安全通信中的某些操作不会被重放攻击利用。它的基本特性是 唯一性,即每次通信中使用的 Nonce 都是不同的。

在STA收到AP发来的第一个帧之后,STA就拥有了计算PTK的所有数据:
从术语介绍中可知PMK是由ssid和密码计算出来的
此时STA会计算出PTK,然后截取其中的KCK去计算MIC
最终STA会发送SNonce、MIC、RSN到AP也就是第二个帧

在AP接收到STA发来的第二帧时,AP会计算PTK然后生成KCK,计算出MIC。然后将计算出来的MIC和收到的MIC进行对比,如果相同就证明AP和STA拥有相同的PMK,也就是密码是对的。如果密码是错的,那么就只会有前两个包,后续的包不会出现
Key information:
Install:此位向客户端发出信号以安装其派生的密钥。
Key ACK: 客户端必须确认此帧。
Key MIC: 存在完整性检查
[招生]科锐逆向工程师培训(2025年3月11日实地,远程教学同时开班, 第52期)!
最后于 2025-1-28 15:37
被kanxue编辑
,原因: