离线计算破解 WPS PIN 码(Pixie Dust攻击)

WiFiGrab教程4:Pixie攻击秒破WPS PIN码

在2011年 Stefan Viehböck 演示过WPS的在线暴力破解的攻击,由于PIN码猜测最多只需11000种组合,平均6小时就能攻破一台路由器。而在2014年 Dominique Bongard 又演示了一种离线暴力破解的攻击,这种可怕的攻击可在不到一秒时间内破解WPA密钥,Bongard先生还在其幻灯片结尾发出警告:“立即禁用WPS!”

1 WPS破解原理

1.1 在线破解

PIN码为8位纯数字,而第8位为前面1-7位的校验和,所以总共只有10的7次方种组合。而由于PIN码的验证过程是分段式的,即先验证前4位,再验证后4位,则攻击者只需先猜测前4位组合(104),再猜测后四位组合(103),即最多11000种组合即可猜出正确PIN码。而WPS协议最初默认没有对PIN的验证次数进行限制,这就使在线PIN破解成为了可能。传统的在线攻击方案可以借助 reaver 或 bully 简便地实现,信号良好情况下大约 3s/pin(WPS1.0,无锁 PIN 现象),平均几小时即可攻破一台路由器。

image-20250910002321896

注意在WPS在线攻击中,攻击者电脑扮演的是Registrar,而受攻击路由器则充当Enrollee(与前面分析的逻辑相反)。攻击工具(如reaverbully)运行在攻击者的电脑上(Supplicant/Client)。它宣称自己是一个“外部注册器(External Registrar)”,使受攻击目标接受管理并传输网络配置信息。

攻击者通过遍历所有PIN码组合,发送M4帧后根据是否收到AP回复的WSC_NACK来确定前半段PIN码是否正确,若不正确则递增下一个组合。直到猜中前半段PIN码,再发送M6帧并根据是否收到AP回复的WSC_NACK来确定后半段PIN码是否正确,最终完全确认整个PIN码。

1.2 离线破解

现在多数路由器都是 WPS2.0(WSC),会出现锁 PIN 现象,一定程度提高了安全性。可就算是几次 PIN 尝试的机会,也留给了攻击者可乘之机。2014年Dominique Bongard演示了一种离线破解WPS的方法,对某些存在安全漏洞的路由器可在不到一秒内破解。该攻击利用了某些路由厂商芯片只能生成低熵的伪随机数,进而破解加密过程。攻击称为“pixie-dust attack”,翻译为“小精灵尘埃攻击”或“仙尘”攻击(外国人起名灵感感觉大都跟游戏影视作品有关)。

image-20250909172542790

入网设备和AP之间没有传输PIN码,是通过计算PIN码的Hash值来验证的。如果PIN码验证失败,流程会止于M4阶段。根据之前在线PIN破解过程分析,攻击者可以获取到PIN码最终计算产物E-Hash1和E-Hash2(AP发送的M3帧),以及中间计算值AuthKey、PKE、PKE,而初始参数PIN码与两个中间计算使用的随机数E-S1和E-S2是不知道的。但是如果攻击者能猜测到AP生成的随机数E-S1和E-S2,就可以通过代入所有PIN码组合去猜测验证,最终获取到PIN码。

那么怎么能猜到AP生成的随机数呢?Dominique Bongard发现某些路由器的芯片生成的是不安全的伪随机数(Pseudo-Random Number Generator,PRNG),导致其可以通过上一个随机数进行逆向预测。例如,Broadcom基本上使用C中的Rand()函数,在Ralink中随机数始终不会生成(因此为0),而RTL819x生成的随机数存在复用(N1、E-S1、E-S2均相同)。

易受攻击的路由器收录:https://docs.google.com/spreadsheets/d/1tSlbqVQ59kGn8hgmwcPTHUECQ3o9YhXR91A_p7Nnj5Y/edit#gid=2048815923

在攻击过程中,M1阶段受攻击路由器会生成随机数N1(E-Nonce),到M3阶段又会生成的随机数E-S1和E-S2,这两个随机数是紧接着N1生成的。而N1可以直接捕获到,如果路由器生成的是伪随机数,就可以进行逆向分析。


2 实验过程

本次实验以无线安全审计目的,意在对路由器安全强度进行测试,仅做学习研究之用。请注意遵循相关法律法规。

其实现在大多数路由器已经没有WPS漏洞了,越新的路由器会采用更新的无线安全标准(如WPA3),同时禁用WPS功能。无线安全水平是在不断提升的,但也不排除还有少部分老旧路由器没有被淘汰更新。

本次实验使用的软件为WiFiGrab。

百度云盘下载:https://pan.baidu.com/s/1Q9oWrHF_nKgwOtKyVcb7IQ?pwd=xxwd

123云盘下载:https://www.123684.com/s/q496Td-Ru95H

  1. 接入USB抓包网卡后启动软件。

    image-20250913231853167

  2. 在设置中可同时启用2.4G和5G扫描,并将扫描时间改长一些,确认。

    image-20250913231924840

    image-20250913231951653

  3. 点击扫描WiFi,对附近无线网络进行扫描。

    扫描完成,可以观察边框颜色,黑色边框说明AP启用了WPS,灰色边框说明AP未启用WPS(软件通过AP信标帧中的wifi_protected_setup_state字段确定)。

    仅对已启用WPS的AP进行测试(需注意隐藏WiFi即使启用了WPS,也无法直接进行WPS攻击,因为不知道WiFi名称无法接入。但其实WiFi名称是可以通过抓包获取的,不过本软件不涉及该内容)。

    image-20250913233000916

  4. 以笔者自己的路由器(荣耀CD16)进行测试,选择目标后,点击PIN。

    image-20250913234505706

  5. 运行后WPS离线攻击没有成功,说明该路由器没有伪随机数漏洞。

    观察日志可以看到,软件如前面分析的,对AP发起WPS的流程。通过M1到M3交互获取到E-Nonce、PKR、PKE、AuthKey等信息,然后尝试猜测E-S1和E-S2,但未猜测成功,该AP可能基于物理过程生成的是真随机数,或是使用其他算法生成的随机数。

    image-20250913234908815

  6. 笔者对周围的路由器也进行了安全测试,发现大多数路由器也不存在此漏洞,是较新的路由设备。但也有极个别路由器(可能是采用老式芯片的光猫或路由器)是有该漏洞存在的。

    前文有易受攻击的路由器收录的信息,而WPS的广播信息中有两个字段Model Name和Model Number标识了AP设备的型号与编号,由此能得知AP是否易受攻击。易受攻击的路由器在软件中会显示为蓝色边框,同时在MAC地址后侧括号中会显示该设备信息(如Ralink Wireless Access Point RT2860)。

    笔者找到了个别显示蓝色边框的路由器进行测试,发现其PIN码信息可以被计算出来,且只需要不到十几秒时间。

    image-20250914015718940


3 参考资料

https://ifconfig.dk/pixiedust/

https://github.com/2EXP/2exp.github.io/issues/3

https://mlg556.github.io/posts/bruteforce-wps-with-reaver-and-pixiewps/bruteforce-wps-with-reaver-and-pixiewps.html

https://blog.csdn.net/moonlinux20704/article/details/109102318

http://archive.hack.lu/2014/Hacklu2014_offline_bruteforce_attack_on_wps.pdf

posted @ 2025-09-15 16:04  小网洞  阅读(94)  评论(0)    收藏  举报