很多人对“WPS”这三个字母的印象,还停留在路由器背面那张贴纸上。确实,WPS设计的初衷是让人少记一串密码,按个按钮就能连上Wi-Fi。但我在实际做无线网络安全评估时,见过太多因为WPS导致整个网络沦陷的例子。这篇文章想说的“Pixie Dust攻击”,就是专门盯着WPS协议本身的一种破解思路。标题里经常提到“轻松入侵”,但我写这篇的目的不是为了教人怎么入侵,而是把攻击原理拆开,告诉你怎么发现自己的网络是否暴露在风险里,以及该做哪些加固动作。
这里说的Pixie Dust攻击,不是在那边一个劲地猜你的Wi-Fi密码,它更接近一种“协议实现层面的漏洞利用”。在某些路由器上,攻击者在几秒钟到几分钟之内,就能算出WPS的PIN码,然后直接拿到你的无线网络密钥。你设再复杂的Wi-Fi密码也没用,因为攻击者走的是另一条路。本文会从WPS协议设计缺陷讲起,再把Pixie Dust的原理、影响范围、检测方法和加固措施一条条理清楚。不管你是普通家庭用户,还是负责公司无线网络的技术人员,都能从中找到对应的排查思路。
1. 先搞清楚WPS到底为什么会被盯上
1.1 WPS设计初衷和它留下的“后门”
WPS全称是Wi-Fi Protected Setup,最早是为了解决普通用户“不会配置复杂无线密码”的痛点。它提供了两种主要的连接方式:一种叫做PIN模式,你在路由器上设置一个8位数字PIN码,连接设备输入这个PIN就能接入;另一种叫做按钮模式(PBC),物理上按一下路由器按钮,然后在一定时间内按一下设备按钮,双方自动匹配连接。
听起来很方便,对吧?问题恰恰出在“方便”两个字上。
PIN模式本质上是一个静态的、固定的数字凭证。你设置好之后,只要不手动去改,它就一直在那里。而PBC模式虽然是一次性的,但按钮按下去后,路由器会进入一个“监听状态”,这段时间内任何物理上能接触到无线信号的设备,理论上都有可能试图“加入”这个配对流程。当然,Pixie Dust攻击关心的是PIN模式,因为PIN模式有一个很稳定的协议交互过程,攻击者可以在这一过程中截获外部消息,并进行离线计算。
从协议架构上看,WPS引入了几个神秘的角色:Enrollee(申请接入的设备)和Registrar(负责验证的设备),路由器通常扮演Registrar。双方要协商一组密钥,完成一系列加密握手。问题在于,为了兼容性,这一套握手流程在当年设计时加入了大量可选项和扩展字段,虽然加密算法本身没问题,但实现这套协议的路由器固件就未必那么严谨了。
我在给用户做安全评估时,有个粗略判断标准:只要发现目标路由器开启了WPS,且固件版本低于某几个年份的系统,十有八九能通过协议层面的问题拿到PIN码,进而拿到真实的无线密码。也就是说,你根本不需要暴力猜密码,也不需要破解WPA2握手包,直接跟WPS的这个PIN流程“对话”就行。
1.2 WPS PIN的熵到底有多惨
有人可能会想:PIN码是8位数字,就算暴力穷举也就10^8种组合,是不是得跑很长时间?这就是大多数人认知里的误区。WPS PIN并不是一个简单的8位随机数。
我直接说结论:8位PIN码里,最后一位是校验位,它是由前7位计算出来的,也就是说攻击者只需要猜对前7位即可。更关键的是,WPS协议会把前4位和后3位分开校验,路由器会单独告诉攻击者“前4位对不对”或者“后3位对不对”。
我来算一笔账:前4位最多有10000种可能,后3位最多有1000种可能。因为校验是分开的,攻击者的暴力猜解空间从100000000种大幅缩小到了11000种左右。就算一次PIN校验要等几秒钟,几小时内也能跑完。
但Pixie Dust攻击比这还要“省力”。它根本不需要在线一次性一次性地试PIN,它会在握手过程中抓到路由器生成的某些随机数或派生密钥片段,然后把这些数据拿回本地,离线去计算PIN。离线计算的速度可以做到每秒成千上万次,11000个组合瞬间就能算完。
所以,只要路由器固件实现上存在那个特定漏洞,Pixie Dust攻击就可以让WPS PIN的这11000种组合几乎形同虚设。真实测试里,有些型号的响应时间从原来的几百秒压缩到了10秒以内,这也是为什么很多文章会用“秒级破解”来形容它。
2. Pixie Dust攻击的完整拆解
2.1 攻击原理与协议层面的关键点
Pixie Dust攻击的核心,不是攻击WPS协议的密码空间,而是攻击“随机数生成”和“密钥派生函数调用”的实现。我知道这个描述听起来有点抽象,换个说法:WPS握手过程中,双方要各自生成一个随机数(Nonce),再结合PIN码、MAC地址等信息,通过一个叫PBKDF2或类似哈希派生算法的流程,生成一个会话密钥。
问题出在哪呢?出在“随机数”上。
部分路由器为了节省硬件成本,或者因为固件开发人员的水平参差不齐,在生成Nonce时使用了“可预测的随机数”。有的甚至直接用设备启动时间、计数器或者固定种子去生成。攻击者虽然看不到路由器内部的随机数,却能在握手的外部消息中拿到一部分派生出来的密钥碎片(业界习惯把这两个碎片称为E-S1和E-S2,来源于WPS协议中的那两个Hash值)。
这两个碎片本来是设计用来保护PIN码校验过程的。当攻击者捕获到这两个碎片后,下一步就是拿着PIN码候选列表,一条条地重新走一遍密钥派生过程,然后把计算结果和目标碎片做比对。一旦匹配,PIN码就水落石出了。整个过程不需要再跟路由器通信,完全离线进行。
说白了,正常情况下的暴力破解,是每次尝试都要让路由器参与校验,路由器端还有锁定机制帮你兜底;而Pixie Dust攻击是把“校验”这件工作从路由器手里搬到了攻击者本地,锁不锁定都没意义了。
2.2 为什么说是“离线破解”
要理解离线破解的威胁有多大,可以对比一下在线暴力破解的场景。
在线破解WPS PIN时,路由器是唯一的校验服务端。你发200次PIN尝试,路由器就会把它们当做异常行为,很多固件会自动触发锁定策略:锁定半小时甚至24小时,期间一切WPS请求都被丢弃。所以很多老式在线破解工具最大的天花板不是计算速度,而是路由器的“耐心”。
而离线破解完全没有这个困扰。攻击者只要坐在附近嗅探一次完整握手,拿到E-S1/E-S2,剩下的事情都在自己的电脑上完成。本地CPU或显卡的速度有多快,破解速度就有多快。更重要的是,离线破解不会在路由器上留下任何日志,因为路由器跟攻击机之间后续不再有任何交互。等你发现无线网被攻破了,排查时甚至找不到异常连接记录。
这也是Pixie Dust攻击在安全圈里被单独拿出来讲的原因:普通暴力破解像在银行柜台反复输入密码,试错会被拒;Pixie Dust更像是在路边捡到了你钱包里的半张密码条,然后拿回家慢慢试密码,银行对此毫无感知。
2.3 哪些设备容易中招
从芯片和固件层面来看,最早被公开的Pixie Dust攻击主要影响一批使用了特定无线芯片方案的路由器。这些方案的芯片内部实现中,随机数生成器存在明显缺陷。采用这些方案的路由器品牌分布在不少低端和中端价位段,尤其是几年前的旧款设备。
因为合规原因,我不会在这里直接列举具体的品牌型号,但你可以参考以下几个特征来粗筛:
- 生产年份集中在某个特定周期,且固件一直停留在出厂版本
- 管理员界面里,WPS选项存在,并且默认开启
- 设备不是由专业网络安全团队维护,而是直接沿用了公版方案
- 官方后面推出的固件修复补丁里,明确提到了“Improves WPS security”或“fixes WPS vulnerability”之类的字眼
从我个人排查经验来看,这类设备有一个共同点:即使Wi-Fi密码设得很复杂,只要WPS开着,Pixie Dust攻击模型下的安全等级就等于“WPS PIN的熵值”。Wi-Fi密码本身再强,也没机会被检验。
这里要重点提醒一句:如果你家里或公司还有这类老路由器,我的建议是不要抱有侥幸心理。哪怕你的WPS PIN从来没有告诉过别人,攻击者也能通过协议交互自己算出来。就像家里的门锁,就算你从来不给别人钥匙,但如果门锁本身可以从外面用一根铁丝捅开,那有没有钥匙都不重要了。
3. 实操视角:如何检测与评估自己环境
3.1 先摸清WPS到底开着没有
站在防御者的角度,第一步不是猜自己到底有没有问题,而是直接去检查路由器。不同品牌的管理界面差别很大,但绝大多数路由器都能通过浏览器访问管理地址,登录后找到无线设置或者网络设置里的WPS菜单。
我见过不少用户把WPS和Wi-Fi密码混为一谈。这里必须分清楚:WPS状态是独立的开关,你在管理页面里看到“WPS已开启”就意味着PIN方式或按钮方式生效中。有些路由器通过按钮配对时会临时开启WPS状态,但一段时间后又会自动关闭,这种相对安全一些;真正危险的是管理界面里明确显示“WPS: Enabled”且没有自动过期机制。
想更严谨地做评估,你可以借用支持无线扫描的手机App或开源网络检测工具,扫描一下周边信号的WPS能力。检测结果里通常会有一列显示“WPS”或“WPS PIN”,也能读出路由器当前是否开启了WPS。这类工具很多,我用过的至少有七八种,但看法都一样:只要标志显示WPS开启了,就需要继续往下排查固件和硬件信息。
3.2 识别固件版本和后续补丁
查完WPS开关后,下一步就是看路由器固件版本。登录管理界面,找到“系统状态”或“设备信息”,里面通常会有路由器和固件版本号。
我把这个排查步骤拆成这样:
- 记录下路由器的型号和硬件版本号
- 记录当前固件版本号
- 到官方支持页面,查看该型号是否有更新版本,更新说明里有没有包含WPS相关修复
- 如果版本号落后了一大截,直接把固件升级到最新版再复查
为什么固件更新这么关键?因为Pixie Dust攻击针对的是实现层面的漏洞,而不是协议标准本身。协议标准没法轻易改,但各家的实现代码是可以打补丁的。官方只要在固件里把随机数生成器改成强随机的,或者对WPS握手过程做严格校验,Pixie Dust攻击就会失效。所以,固件版本落后的路由器,才是攻击者的目标。
我在帮一个熟悉的朋友排查他家路由器时就遇到过典型情况:路由器本身不算老旧,但固件停留在两年前出厂版,WPS默认开启。我当时提示他升级固件后复查,升级完再去扫描,WPS能力标志已经消失,因为新版固件直接移除了WPS功能。这个案例说明,厂商自己也很清楚WPS问题有多严重,新版固件宁可砍掉功能也不留安全隐患。
3.3 复测时的安全原则
如果你想像我一样,动手模拟一遍检测流程,那必须明确一个底线:只能在你自己拥有、或者你已经获得明确授权进行安全测试的网络环境里操作。
我这里说的“检测”,不是教你去蹭隔壁邻居的网络做实验。正确做法是找一台自己的旧路由器,让它恢复出厂设置,开启WPS,然后把它放在一个隔离的测试网络里。你用自己的电脑作为“攻击者”的角色,去尝试通过WPS协议交互来做信息收集。这样既能复现原理,又不影响任何真实使用中的生产网络。
可能有人觉得“检测WPS存不存在”这种操作无所谓,但我要多说一句:无线信号本身无法被限制在房间内,只要你的设备发出了WPS探测请求,隔壁设备是能感知到这个数据包的。在非授权网络上做扫描,本身就是一种入侵行为的前置步骤,无论如何都不该尝试。
这套检测流程也不用追求什么花哨手段,本质上就是三步:确认WPS开关状态,确认固件版本,确认能否通过协议交互获取足够的信息。正常用户做到前两步,已经能解决九成的风险。
4. 加固与防御:别让Pixie Dust成为家常便饭
4.1 立刻能落地的加固动作
如果你的路由器WPS还开着,而且固件已经很老,那我的建议优先级非常明确:
- 第一优先:关闭WPS。在路由器管理页面里找到WPS设置,选择禁用。这一步做完,Pixie Dust攻击的地基就被抽掉了。
- 第二优先:升级固件。如果厂商提供了新版固件,升级到最新版,并且注意升级完成后再次确认WPS是否还在默认开启状态。
- 第三优先:如果厂商已经不维护这款路由器,那就别犹豫,换一台支持现行主流协议的新设备。旧设备停留在“能跑就行”的状态,对网络安全来说就是定时炸弹。
这里有个容易忽略的细节:有些路由器关闭WPS之后,一旦恢复出厂设置,WPS又会自动回到开启状态。所以每次重置路由器后,都要检查一遍WPS开关。我见过不止一个人信誓旦旦说“我早就关了WPS”,结果一查,他说的那台路由器经过一次断电重启或恢复出厂后又自动回到了默认状态。
新购买路由器的时候,也建议把WPS是否默认开启作为筛选条件之一。很多新设备现在默认禁用WPS,或者干脆砍掉了这个功能,这对用户反而是好事。你不需要再去花时间理解什么E-S1/E-S2,也不用担心哪天有人在门外用几分钟时间把你的Wi-Fi密码算出来。
4.2 密码策略和无线协议的配套选择
关掉WPS之后,你是不是就觉得天下太平了?不完全是。Wi-Fi本身的安全性还取决于你选的加密协议和密码强度。
现在的无线路由器基本都支持WPA2或者WPA3。如果你设备比较旧,只支持WPA2,那加密方式一定要选AES,不要选TKIP,也不要选“自动切换”。密码方面,至少12位以上,尽量混入大小写、数字和符号。你可能觉得这跟WPS没什么关系,但如果有一天WPS被重新打开了,或者攻击者换了一条非Pixie Dust的攻击链路,这些基础操作就是你剩下的防线。
另外,有条件的话,我建议把访客网络和主网络隔离开。很多路由器都提供“访客网络”功能,访客网络单独分配一个信号,可以设置独立密码,并且禁止访问内网资源。这样就算某个访客的设备被攻破,或者有人通过访客网络发起了旁路攻击,核心设备和内网数据依然在保护圈外。
在我配合过的几个小团队里,有一多半的无线安全问题不是因为攻击手段多高级,而是因为基础设施配置太过随意。关闭了WPS之后,顺手把访客网络打开,把主网络密码换成一串毫不相关的高强度口令,整个网络的安全等级会立刻好很多。
4.3 如何感知异常WPS行为
除了被动加固,我还建议做一点主动监测。路由器后台日志里,通常不会记录“WPS PIN尝试失败”这类细颗粒度事件,但有几种现象可以作为判断线索:
- 网络里突然出现一个不认识的设备连接记录。排查办法是绑定设备和MAC地址过滤,或者启用“设备接入通知”
- 路由器管理界面莫名其妙变成“配置状态”,说明有人在尝试做初始化或恢复设置
- 无线频道信号质量异常波动,多次出现无线设备掉线重连,可能有人在对无线信号做干扰或注入
如果你有稍微专业一点的管理需求,可以开一台具备无线监测能力的设备,放在网络里监听自己的无线接入点。重点关注那些长时间停留在WPS握手阶段,却始终不完成连接流程的客户端。正常连接设备在几秒内就完成握手了,不会反复发起WPS探测请求。只要出现这种客户端,基本可以认定有人在打你WPS的主意。
不过说实话,“感知异常行为”对于普通家庭用户来说门槛偏高。大多数家用路由器只适合做基础配置,能准确记录安全事件的设备并不多。所以我对个人用户的建议还是那句:与其研究如何监测WPS攻击,不如直接关掉WPS,从源头上消除这个攻击面。
5. 常见问题与避坑心得实录
5.1 WPS到底能不能留着用?
每次聊到这个话题,都会有人问:“我家里设备有点老,不用WPS连接不方便,留着行不行?”
我的看法很直接:如果路由器固件更新已经覆盖了Pixie Dust漏洞,那么你留着WPS可能问题不大;但如果是一台几年前的旧路由器,固件不再更新,那WPS的便利性完全抵消不了它带来的风险。
用一个生活例子来解释:WPS就像家门旁边开的一扇小窗。你可以把门锁得非常结实,但小窗没锁紧的话,有心人绕到后面轻轻一撬就进屋了。关掉WPS,等于把这个小窗彻底封上。虽然以后手动输入Wi-Fi密码麻烦一点,但安全级别完全不同。
如果确实需要WPS帮助连接某些带按钮的设备,比如某些无线打印机或智能插座,那可以找支持PBC按钮模式的型号,并且在路由器端把“PIN模式”跟“按钮模式”分开控制。只要PIN模式不生效,Pixie Dust就没有计算目标,攻击面就小了很多。
5.2 为什么固件升级不是万能的
升级固件是防御Pixie Dust攻击的有效手段,但不要觉得“升级了就万事大吉”。
第一,有些厂商只是把WPS菜单默认从“开启”改成了“关闭”,但没有从内核层面修复随机数生成器。也就是说,一旦用户手动开启WPS,漏洞依然存在。
第二,部分固件版本之间差异很大,升级之后可能会把之前自定义的网络配置重置掉。你要是没有留心复查,连上了却发现网速变慢或者信号增强功能失灵,可能就退回去了。更有意思的是,有些用户升级完之后发现WPS又自动开启,说明厂商在升级逻辑里保留了旧配置。
所以我每次升级固件后,都会做一套“复位确认”:查看WPS状态,查看无线加密方式,查看管理密码有没有重置。这三项检查加起来不到三分钟,但能防止升级完出现“隐性回退”。
5.3 我在实际排查中踩过的坑
最后聊两个我亲身经历过的坑,希望能帮大家避一下。
第一个坑是“只在路由器界面关了WPS,但没有改掉PIN码”。有人可能会想,WPS都关了,还改PIN干嘛?其实吧,有些路由器的WPS PIN和无线访问配置是做在同一套参数里的,如果你之前已经用某个PIN码做过设备配对,这个PIN码有可能会保留在路由器的非易失性存储里。就算你从界面关闭了WPS,后续固件升级或配置恢复时,系统可能还会读回原来的配置。我遇到过一次,用户明确说自己没开启WPS,但扫描结果依然显示WPS能力正常。最后排查原因就是固件在做自动恢复时把WPS开关重新打开了。
第二个坑是“只检测但不复测”。我见过有人做完评估,确认WPS已经禁用,就觉得任务完成了。问题是,很多路由器重启后,部分设置项会因为未保存到配置文件而回到默认值。你必须在重启一次路由器之后,再次复查WPS状态。这个检查很简单,但特别容易被忽略。有一次我自己也是因为懒得重启,结果隔了一周再看,路由器已经恢复出厂设置,WPS又自动开了。
另外再提一个使用习惯:不建议长期启用路由器的“远程管理”功能。Pixie Dust攻击虽然只针对本地无线信号,但不排除攻击者通过远程管理接口尝试配置路由器的可能性。关掉远程管理,会让网络边界更干净。平时配置路由器,直接用网线连接或者在同一局域网内访问管理界面,就足够了。
我在处理这类无线安全问题时,最深的感受是:很多攻击之所以能成功,靠的不是攻击者的技术有多高明,而是设备默认配置太宽松、用户缺少一种“攻击面意识”。Pixie Dust攻击背后的WPS漏洞,已经不是一个新鲜话题了,但正因为太“老”,才更容易被忽略。你现在花几分钟关掉WPS,升级一下固件,很可能就避免了一次真实的入侵。