
很多人对“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升级一下固件很可能就避免了一次真实的入侵。