上个月有个做运维的朋友抱着一台旧笔记本找我,说公司要做一次办公区无线网络的自查,问能不能把整套流程走一遍。他手里那份检查清单上写着“验证无线口令强度”“确认握手过程可审计”这类条目,看着挺唬人,实际动手才发现问题全在细节上:网卡不认监听模式、抓了半天抓不到完整的四次握手、好不容易拿到包又不知道该怎么判断它到底有没有用。这类事情在无线安全审计里太常见了,Kali Linux 装好只是起点,真正决定你能不能跑通流程的,是对 WPA2 认证机制的理解深度和对工具链边界的把握。
这篇内容我想把“从 WPA2 原理到口令强度验证”这条链路完整拆一遍:四次握手里每个字段是干什么的、空口上抓到的包为什么有时是废的、字典测试的算力账该怎么算、以及站在防守方角度该怎么配置才不至于一测就穿。适合已经装好 Kali、能敲命令但流程跑不顺的人,也适合做内网自查、需要给出一份说得过去的审计结论的人。下面所有操作的前提都是你自己的网络,或者拿到书面授权的目标环境,这一点没有讨论空间。
2. 先搞清楚四次握手里每个字段在干什么
很多人一上来就打开抓包工具,盯着屏幕上跳动的 MAC 地址发呆,抓到了文件也不知道里面有没有自己要的东西。根子在于没弄明白 WPA2 的认证过程到底交换了什么。你把这个过程想明白了,后面所有工具的输出你都能自己解读,不用靠背命令。
2.1 从“输入口令”到“链路上跑的密钥”
WPA2-PSK 最容易被误解的一点是:客户端和路由器之间从来不会传输口令本身,哪怕加密前的明文里也没有。口令只存在于两端本地,各自用它算出一个叫 PMK(Pairwise Master Key)的东西。计算方式是 PBKDF2,哈希算法用 HMAC-SHA1,迭代 4096 轮,输入是口令字符串和 SSID:
PMK = PBKDF2(HMAC-SHA1, passphrase, SSID, 4096, 256)这里有两个细节值得停留一下。第一,SSID 参与了计算。这意味着同一个口令配在不同 SSID 上,算出来的 PMK 完全不同,你也不能拿 A 网络的结果去套 B 网络。第二,4096 轮迭代是刻意设计的“拖慢”机制——它的目的就是让暴力枚举变贵,这也是后面算力估算时那个关键系数的来源。
PMK 算出来之后并不会直接拿来加密数据。两端还要通过四次握手协商出一对临时密钥 PTK(Pairwise Transient Key),用它来加密单播流量。这个协商过程就是所谓“四次握手”,四个报文的作用分别是:
| 报文 | 方向 | 携带的关键内容 | 作用 |
|---|---|---|---|
| Message 1 | AP → 客户端 | ANonce(AP 生成的随机数) | 发起协商,把 AP 的随机数交出去 |
| Message 2 | 客户端 → AP | SNonce + MIC | 交出客户端随机数,并附上校验值 |
| Message 3 | AP → 客户端 | GTK + RSN IE + MIC | 下发组播密钥,确认双方密钥一致 |
| Message 4 | 客户端 → AP | ACK + MIC | 确认安装完成 |
PTK 的派生公式大致是这样:
PTK = PRF-X(PMK, "Pairwise key expansion", Min(AA,SPA) || Max(AA,SPA) || Min(ANonce,SNonce) || Max(ANonce,SNonce))AA 是 AP 的 MAC,SPA 是客户端的 MAC,两个 Nonce 就是握手里交换的随机数。注意这里用 Min/Max 做了排序,好处是双方算出来的拼接顺序一致,不用额外协商谁先谁后。
PTK 再往下切分成三段:KCK 用来算 MIC,KEK 用来加密握手过程中的密钥材料,TK 才是真正加密数据的那个。而 MIC 是什么?它是对整个握手报文内容做 HMAC 得到的校验值,只有持有正确 PMK 的一方才算得出来。
这就是整个离线口令强度测试的理论基础:抓到一个完整的 Message 1 和 Message 2,攻击者手上就有了 ANonce、SNonce、两个 MAC、以及一个 MIC。他可以拿字典里的候选口令,按同样的流程算出 PMK → PTK → KCK → MIC,然后跟抓到的 MIC 比对,一致就说明口令猜对了。整个过程不需要跟 AP 有任何交互,纯本地计算。理解这一点,你就明白为什么抓包质量比工具版本重要得多。
2.2 关于 PMKID 的那条旁路
2018 年之后公开的另一种思路是利用 RSN IE 里的信息直接构造校验值,不需要抓到完整握手。它针对的是 Message 1 里携带的 PMKID 字段:
PMKID = HMAC-SHA1(PMK, "PMK Name" || AA || SPA)只要能收到一个带 PMKID 的 Message 1,就能拿字典离线做同样的比对。这种方式的好处是不需要等客户端上线,只要 AP 主动发过这个字段就行;坏处是不少设备在特定配置下不带这个字段,或者固件版本不同行为不一致,实测命中率很依赖目标设备。另外,很多厂商在较新的固件里已经默认关闭或不再生成 PMKID,所以别把它当成万能钥匙。
站在审计角度,这条旁路的价值不在于“更快”,而在于它揭示了一个设计问题:单个管理帧里泄露的信息就足以支撑离线验证。写报告的时候这一点比演示过程本身更有说服力。
2.3 三个流传很广的误解
误解一:抓不到握手就是工具不行。实际绝大多数情况是时机不对——目标网络当时没有客户端在重连,或者你的网卡在信道跳频时刚好错过了那几十毫秒。后面第 3 节会专门讲怎么解决。
误解二:改了 MAC 地址就能“隐藏”。MAC 随机化确实会给目标画像带来干扰,但在审计场景里你自己知道在测什么,这个操作的意义主要是模拟真实终端行为,而不是“隐身”。
误解三:口令越长越安全。这条只能说对了一半。如果口令是Password123456这种结构,长度够但完全在规则字典的覆盖范围内,字典测试几秒钟就出结果。真正的强度取决于是否落在常见构造模式之外,而不是单纯的长度。
3. 环境搭建里真正的门槛是网卡而不是系统
Kali 装完、工具齐全,很多人以为万事俱备,结果插上笔记本自带的无线网卡,airmon-ng start一执行就报错或者干脆没反应。无线审计这条链路上,硬件选型的重要性被严重低估了。
3.1 芯片与驱动的选择逻辑
能不能进入监听模式(monitor mode),取决于网卡芯片和驱动是否支持。市面上常见的三类情况:
| 类型 | 典型表现 | 适用性 |
|---|---|---|
| 内置网卡(多数轻薄本) | 驱动只支持 managed 模式,无法注入或进入监听 | 不适合,别浪费时间 |
| 外置 USB 网卡,芯片支持监听 | 可切换 monitor,可抓包,注入能力看芯片 | 大多数审计场景够用 |
| 外置网卡,支持双频并发 | 可同时监听 2.4G 与 5G | 复杂环境推荐 |
选购时看三个硬指标:芯片型号是否被主流驱动支持(不要看商品页宣传,要看芯片)、是否支持监听模式与帧注入、天线增益与接口类型。USB 延长线是个容易被忽略的细节,网卡贴着机箱插,金属屏蔽和 USB 3.0 的干扰会让抓包丢帧率明显上升,用一根带屏蔽的延长线把网卡挪到开阔位置,实测差别不小。
驱动方面,内核自带的驱动通常最稳。有些芯片需要额外编译驱动,编译完还要处理内核版本升级后的回归问题——这一点在第 6 节会展开。我的习惯是先跑一遍基础验证:
# 查看网卡是否被识别 iw dev # 查看网卡支持的能力(关注 monitor 是否在 Supported interface modes 里) iw list | grep -A 10 "Supported interface modes" # 用 airmon-ng 检查是否有进程干扰 sudo airmon-ng check # 切换监听模式 sudo airmon-ng start wlan0airmon-ng check这一步经常被跳过。NetworkManager、wpa_supplicant、dhclient 这些进程会周期性扫描信道,把你的监听接口拽回 managed 模式,表现出来就是“抓了一会儿突然断了”。看到提示就把对应进程停掉,或者用airmon-ng check kill一次性处理,代价是这台机器暂时断网,所以建议用有线连接或者干脆离线操作。
3.2 监听模式跑通之后要先做链路验证
切到监听模式不等于抓包链路就是通的。我的做法是先做一次最小验证:确认接口出现在iw dev里、状态是 monitor、然后跑 30 秒抓包看看有没有帧进来。
# 确认接口状态 iw dev wlan0mon info # 抓 30 秒,看是否有帧 sudo airodump-ng wlan0mon --output-format pcap -w /tmp/verify --write-interval 5如果 30 秒后verify-01.cap大小还是 0 或者只有几十字节,问题基本锁定在三处:接口没真正进监听模式、信道被固定在了一个没有活动的频点、或者驱动把帧过滤掉了。逐项排查,别一上来就怀疑工具。
3.3 授权边界和环境隔离
这一节我想说得直白些。无线审计最容易出问题的地方不是技术,是边界。动手之前需要明确三件事:测试范围(哪些 SSID 在授权清单内)、时间窗口(避开业务高峰,避免影响正常使用)、应急联系人(出现异常能立刻停手)。这三条写进文档,比任何技术细节都重要。
环境隔离上,建议单独准备一台设备做审计,不要用日常工作机。原因有两个:一是airmon-ng check kill会把网络管理进程干掉,影响正常办公;二是抓包文件和测试日志本身就是敏感数据,混在日常机器上不好管理。测试结束后的数据处理也要有约定——抓包文件里含有真实 MAC 和握手信息,按敏感数据处理,不要随手扔在共享目录里。
4. 空口上到底能看见什么,以及怎么判断抓到的东西有用
抓包这件事,新手最常问的是“为什么我抓不到”,老手最常做的是“先看清楚环境再动手”。这两个习惯的差别,决定了你是在盲目重试还是在有目的地定位问题。
4.1 先做目标画像,别急着抓
扫描阶段的目标不是“找到尽可能多的网络”,而是搞清楚你要测的那个网络长什么样。airodump-ng的输出里有几个字段值得逐个看:
sudo airodump-ng wlan0mon- BSSID:AP 的 MAC,后面所有操作的目标标识
- CH:当前信道。这个字段决定你后面抓包时
--channel该填多少,填错了什么都抓不到 - ENC / CIPHER / AUTH:加密套件与认证方式,确认是 WPA2-PSK 还是 WPA2-Enterprise,两者的测试路径完全不同
- PWR:信号强度,低于 -80 dBm 时丢帧严重,考虑调整位置
- STATION:关联的客户端及其 MAC。这一栏是判断“能不能等到握手”的关键依据
我会额外关注两点。一是是否有客户端在活跃通信——底部 STATION 列表里如果有设备在持续产生数据包,握手抓取的成功率会高很多。二是是否启用了 802.11w(PMF),管理帧保护开启后,部分依赖伪造管理帧的辅助手段会失效,这时候只能靠自然重连来等握手。PMF 状态在airodump-ng的标准输出里不一定直观显示,可以结合--wps参数或者单独的探测手段确认。
4.2 握手的触发时机与抓取策略
四次握手只在客户端重新关联的时候发生。这句话解释了一切:一个已经连上并且稳定通信的设备,你干等一整天也等不到握手。所以要制造重连。
三种常见思路,按侵入性从低到高排列:
第一种是自然等待。把抓包挂在那里,等客户端自己因为信号波动、休眠唤醒、路由器重启而重连。侵入性为零,但可能要等很久,适合在授权时间窗宽裕的情况下用。
第二种是利用已有流量特征。某些设备在特定条件下会周期性重连,比如从省电模式唤醒、或者漫游到信号更强的 AP。观察 STATION 列表里某个设备的包间隔,找到规律后再挂抓包。
第三种是主动触发重连。向已关联的客户端发送解除认证帧,让设备重新走一遍关联流程。这是审计场景里最常用的手段,但也是最需要注意影响的手段——它会短暂中断该客户端的连接,在生产环境里必须事先确认窗口期。执行时限定目标,不要对广播地址发送:
# 仅针对指定客户端和 AP,发送少量解除认证帧 sudo aireplay-ng --deauth 3 -a <AP_BSSID> -c <CLIENT_MAC> wlan0mon数量上别贪多。发 3 到 5 个就足够触发重连,发几百个不但没必要,还会让客户端反复掉线,影响体验甚至触发某些设备的保护机制。发送完立刻盯着抓包输出,正常的话几秒内就能看到WPA handshake: xx:xx:xx...的提示。
抓取命令本身要注意信道锁定:
sudo airodump-ng -c 6 --bssid <AP_BSSID> -w /tmp/audit wlan0mon-c指定信道,--bssid过滤目标。这两项加上去之后,抓包文件会干净很多,后面分析也省事。如果目标网络同时工作在 2.4G 和 5G,两个频段要分别处理,5G 的握手同样有效,只是客户端分布不同。
4.3 什么样的抓包文件才算“有效”
airodump-ng右上角出现WPA handshake提示,只代表它检测到了一组看起来完整的握手,不代表这个文件真的能用来做离线验证。判断标准有三个层次:
第一层,报文齐全度。至少要有 Message 1 和 Message 2。只有 Message 1(AP 发出去的 ANonce)是不够的,因为缺少 SNonce 和 MIC,无法构造校验。只有 Message 2、3、4 也常见,这种情况下前面的 ANonce 缺失,同样跑不了。用 Wireshark 打开看eapol协议过滤,数一下有几个包、方向对不对,是最直观的办法。
第二层,MIC 校验是否通过。这一步需要拿着已知口令去验,审计场景里你手上通常没有正确口令,所以退而求其次——用工具自带的检查功能看它是否认为这组握手可用:
# 用 aircrack-ng 检查握手是否完整(不指定字典时它会先做完整性判断) aircrack-ng /tmp/audit-01.cap输出里如果提示Found 1 AP并且列出了 ESSID,说明握手结构被识别了;如果提示No valid WPA handshakes found,那就是结构不完整,别浪费时间跑字典。
第三层,是否被重复帧污染。在高密度环境里,一次抓包文件可能混进多个客户端的握手片段,工具解析时可能错误配对。表现是明明抓到了握手,跑字典却永远跑不出结果。解决办法是抓包时就用--bssid和-c收紧范围,或者在分析阶段按客户端 MAC 拆分文件。
提示:抓包文件不要只留一份。原始 cap 保留,另存一份转换后的 hash 格式用于离线计算。很多“跑不出结果”的问题,最后查出来是文件在转换过程中字段丢失导致的。
5. 字典测试的本质是概率抽样,不是魔法
“破解”这个词容易让人产生误解,好像存在某种技巧能绕过口令本身。实际不是。离线验证的数学本质非常朴素:在候选集合里逐个试,试中了就是中了,试不中就说明口令不在这个集合里。所以整件事的成败,八成取决于候选集合(字典)的质量,两成取决于算力。
5.1 为什么说这是一道概率题
假设目标口令是 8 位纯数字,候选空间是 10^8,也就是 1 亿个。如果你的字典恰好是按顺序排列的全量数字,那必然命中,只是要花时间。但如果口令是zhangsan2023这种结构,纯数字字典再大也没用。反过来,一个只有几万条、但覆盖了“常见拼音 + 年份”组合的小字典,命中率可能远高于几十 GB 的通用大字典。
这就引出一个实操上的判断:先做画像,再选字典。目标网络的 SSID 是公司名还是个人昵称?周围环境的用户群体大概是什么构成?这些信息决定了你该用哪类字典。我不止一次见过有人拿几十 GB 的国外泄露库去跑一个本地小公司的网络,跑了两天没结果,换成几千条本地化构造的字典,几分钟就出来了。
5.2 字典构建与规则引擎
字典构建有三条路,各有适用场景:
路径一,通用字典直接使用。优点是省事,缺点是命中率对特定目标很不稳定。适合作为第一轮快速筛查,跑个十几分钟没结果就换思路。
路径二,基于目标信息构造。把 SSID 相关的词、常见缩写、本地化的拼音组合、年份后缀、特殊符号变体组合起来。这一步的产出通常只有几百到几万条,但命中率往往最高。构造时可以用脚本批量生成:
# 基于关键词构造候选集合的简化示例 import itertools base_words = ["office", "wifi", "guest", "company"] years = [str(y) for y in range(2018, 2026)] seps = ["", "_", "-", "@"] candidates = set() for w in base_words: for y in years: for s in seps: candidates.add(f"{w}{s}{y}") candidates.add(f"{w.capitalize()}{s}{y}") with open("/tmp/custom.txt", "w") as f: for c in sorted(candidates): f.write(c + "\n")这段代码只是个骨架,实际用的时候把关键词换成本地化词汇,再叠加大小写变形和常见数字后缀,产出量会大很多。注意控制规模,几十万条以内跑起来还行,上千万条就要先算算时间。
路径三,规则引擎扩展。拿一个基础字典,用 hashcat 的规则文件做变形,比如首字母大写、末尾加数字、字母替换(a→@、o→0)。这种方式的好处是用很小的存储换很大的覆盖:
# 用规则文件对基础字典做变形后测试 hashcat -m 22000 /tmp/audit.22000 /tmp/base.txt -r /usr/share/hashcat/rules/best64.rulebest64.rule是内置的常用规则集,规模适中。规模更大的规则集会显著拉长时间,需要结合算力判断值不值得。
5.3 先把算力账算清楚再决定跑不跑
WPA2 的 PBKDF2 迭代 4096 轮,这个设计让 GPU 的优势被大幅削弱,但也意味着算力估算必须做,否则你可能在跑一个要跑三个月的东西。参考量级(以-m 22000模式为例):
| 硬件档位 | 大致速率 | 8 位纯数字(10^8)耗时 | 100 万条字典耗时 |
|---|---|---|---|
| 集成显卡 | 数千 H/s | 数十小时以上 | 数分钟到十几分钟 |
| 中端独立显卡 | 3 万 ~ 8 万 H/s | 20 分钟 ~ 1 小时 | 十几秒 |
| 高端独立显卡 | 20 万 H/s 以上 | 十分钟以内 | 几秒 |
| 多卡集群 | 百万级 H/s | 分钟级 | 秒级 |
这张表的意义不是让你精确预测,而是让你在动手前有个量级概念。如果字典有 5000 万条,而你的设备只有 3 万 H/s,那理论耗时接近 28 分钟——听起来还行,但这是在满负荷理想状态下,实际会因为散热降频、字典读取瓶颈而更慢。
转换格式这一步也值得说,不同工具链之间的格式转换经常出问题:
# 将 cap 转换为 hashcat 可识别的 22000 格式 hcxpcapngtool -o /tmp/audit.22000 /tmp/audit-01.cap # 查看转换结果,确认包含有效的握手记录 wc -l /tmp/audit.22000转换后文件为空或者只有注释行,说明原始 cap 里没有可用握手,回到第 4 节重新抓。这个检查步骤能省掉大量“跑了两小时没结果”的冤枉时间。
注意:跑字典期间机器会满载,风扇噪音和发热都很明显。如果是在办公环境做自查,安排在非工作时间,避免影响同事。
6. 换个角度:路由器侧该怎么配才经得起测
审计做多了会发现一个规律——绝大多数“一测就穿”的网络,问题不在加密协议本身,而在配置习惯。WPA2 的密码学设计到今天仍然是可靠的,出问题的永远是口令选择和辅助功能的开关。
6.1 口令策略和协议选择的组合
先说协议。WPA2-PSK(AES/CCMP)目前仍然是家用和小型办公场景的主流选择,安全性取决于口令强度。WPA3 引入的 SAE 握手在抗离线测试方面有本质改进——它的设计目标之一就是让抓包之后无法高效做离线验证。所以设备支持的话,优先选 WPA3,或者 WPA2/WPA3 混合模式过渡。
但要提醒一点:混合模式下,如果客户端只支持 WPA2,它仍然会走 PSK 流程,安全性回到 WPA2 水平。所以混合模式是过渡方案,不是终点。
口令策略上,我给的优先级排序是这样的:
| 优先级 | 措施 | 说明 |
|---|---|---|
| 高 | 长度 16 位以上 | 直接拉高候选空间,简单有效 |
| 高 | 避开常见词 + 年份 / 拼音 + 数字结构 | 这类结构在规则字典里覆盖度极高 |
| 中 | 关闭 WPS | WPS 的 PIN 机制存在设计缺陷,应彻底关闭 |
| 中 | 定期更换访客网络口令 | 访客网络是薄弱环节,隔离做好的话风险可控 |
| 低 | 隐藏 SSID | 对审计几乎没有阻碍作用,实际收益很低 |
关于 SSID 隐藏这一条我想多说一句。很多配置指南把它列为首要措施,但从审计视角看,隐藏 SSID 只是让被动扫描看不到广播,客户端探测请求里照样会带出 SSID 名称,成本几乎为零就能还原。把精力放在这上面不如放在口令长度上。
6.2 企业环境的 802.1X 与 PMF
规模稍大的环境应该考虑 WPA2-Enterprise(802.1X)。它的核心区别是每个用户有独立凭据,认证由 RADIUS 服务完成,而不是所有人共用一个预共享密钥。这样一来:
- 单个凭据泄露不影响其他用户
- 可以做到按人审计、随时吊销
- 离职人员的凭据可以直接作废,不用改全员口令
部署上的坑主要在证书管理。客户端要信任服务端证书,服务端要能验证客户端身份,证书过期或者链不完整会导致大面积连不上。上线前一定要做小范围灰度,别一次性推全网。
另外建议开启802.11w(管理帧保护,PMF)。它的作用是给解除认证这类管理帧加上完整性校验,防止伪造。开启之后,靠伪造管理帧触发重连的手段会失效,审计时只能等自然重连。对防守方来说这是实打实的收益,代价是极少数老旧设备可能不兼容,同样需要灰度验证。
6.3 一份可以直接拿去用的自查清单
做内网自查的时候,我一般按这个顺序过一遍,十几分钟能出结论:
- 协议与加密套件:确认是 WPA2-AES 或 WPA3,不是 TKIP,更不是 WEP。看到 WEP 直接判定为高危,无需进一步测试。
- WPS 状态:确认关闭。部分设备的管理界面里这项藏得比较深,需要在无线高级设置里找。
- 管理界面口令:路由器管理后台的口令不能和 Wi-Fi 口令相同,也不能是出厂默认值。
- 访客网络隔离:访客网络要开启客户端隔离,不能访问内网资源。
- 固件版本:确认不是多年前的老固件,厂商的安全更新要及时跟进。
- 口令强度抽样:用第 5 节的方法,拿一个构造合理的字典跑一次,记录耗时和是否命中。命中的话,这就是报告里最有价值的结论。
- 日志与告警:确认路由器有连接日志,能追溯异常接入。
第 6 条是很多人纠结的地方——要不要真的跑字典?我的看法是,内部自查就应该跑。不跑你无法给出“口令强度足够”这个结论,只能写“建议加强”,报告价值差很多。前提是操作在授权范围内,且结果只用于内部整改。
7. 几个真正会绊倒人的细节
前面讲的都是主干流程,但实际操作中卡住人的往往是些边角问题。这一节把我踩过的、以及帮别人排查过的几个典型情况摊开说。
7.1 信道跳频导致的握手丢失
airodump-ng默认会在所有信道之间跳频,每个信道停留的时间很短。如果目标网络在信道 6,而握手恰好发生在你的网卡跳到信道 11 的那一瞬间,这一轮就白等了。表现是“明明看到设备重连了,但就是抓不到握手”。
解决办法很简单:抓包时用-c锁定信道。这个操作在第 4 节提过,但值得再强调一次,因为它能解决相当比例的“抓不到”问题。锁定之后如果还是抓不到,再去看客户端是否真的重连了——有时候解除认证帧发出去了,客户端却因为信号好、缓存了密钥而没有走完整流程,这时候可以多发几轮,间隔拉开一些。
另一个相关细节是多 AP 同名 SSID 的情况。办公环境里常见多个 AP 用同一个 SSID 做覆盖,客户端漫游时会跟不同的 BSSID 握手。你锁定了其中一个 BSSID,客户端却漫游到了另一个,握手自然抓不到。这种环境下建议先扫描清楚所有 BSSID,逐个处理,或者干脆不锁 BSSID 只锁信道,接受文件里混杂多个握手,后期再拆。
7.2 内核升级之后的驱动回归
这个坑很隐蔽。某次系统更新之后,之前一直好用的外置网卡突然进不了监听模式,airmon-ng start执行完没有任何报错,但iw dev里看不到 monitor 接口。排查了半天才发现是新内核里的驱动模块版本变了,需要重新编译。
判断方法:
# 查看网卡当前使用的驱动模块 sudo airmon-ng # 查看内核日志里与网卡相关的报错 sudo dmesg | grep -i -E "wlan|80211|firmware"dmesg里的固件加载失败是最常见的信号。如果是自行编译的驱动,升级内核后必须重新编译,这个步骤容易忘。我的习惯是在做审计之前先跑一次完整的链路验证(第 3.2 节),确认没问题再进入正式流程,避免中途发现环境坏了。
还有一种情况是网卡被识别但速率异常低。表现出来是抓包文件里帧很少、丢包严重。原因可能是 USB 供电不足(尤其是通过 Hub 连接时)、或者 2.4G 频段被周边设备干扰。换个 USB 口、换根线,往往就好了。
7.3 审计的产出不是口令,是结论
这一点是我做完几次之后才想明白的。刚开始做自查的时候,我把重点全放在“能不能测出口令”上,测出来就觉得很成功。后来发现这个思路是偏的——口令只是中间结果,真正的产出是一份能指导整改的结论。
一份像样的审计记录至少应该包含:测试范围与时间窗口、目标环境画像(SSID、加密方式、客户端数量)、使用的字典类型与规模、耗时、结果判定、以及针对性的整改建议。如果测出了弱口令,建议要具体到“改成什么结构”,而不是笼统地说“加强口令强度”。
数据处理上也有讲究。抓包文件里含有真实 MAC 和握手信息,属于敏感材料,测试结束后应该归档到受控位置,到期销毁。中途产生的临时文件、字典、转换后的 hash 文件同理。我见过把测试文件留在共享目录里的情况,这本身就是个不小的隐患。
还有一个小经验:测试记录要写清楚“没测什么”。比如由于时间窗口限制没有对 5G 频段做完整测试,或者某个访客网络因为隔离策略无法从外部接近。把这些边界写清楚,报告的可信度反而更高,也避免后续被误解为“已经全面覆盖”。
最后分享一个我觉得挺实用的小技巧:做自查前,先拿自己的手机热点当靶子完整走一遍流程。热点的 SSID 和口令你完全可控,可以验证抓包、转换、字典测试整条链路是否通畅,也能测出你这套硬件的实际速率。等流程跑顺了再去碰正式目标,能省掉大量在现场手忙脚乱的时间。我自己每次换设备或者升级系统之后都会这么过一遍,十分钟的事,但能避免很多尴尬。