新闻里每个月都在出”千万账号泄露”——Optus、Medibank、Latitude、Dymocks……数据出去之后,攻击者拿你的邮箱+密码去别的网站试一遍,这就是 credential stuffing。你听到的”撞库”、“凭证填充”、“pass the hash”全是 brute force 的变种,路数差很多。
这一篇承接 hash 文章——只存 hash 不够,因为有些攻击根本不需要破 hash。
顶层结论
- Brute force 不是”一个攻击”,是一族——4 种路数,防御招式不一样
- 最危险的是 credential stuffing(撞库):它绕过你做的所有 hash / salt,因为攻击者用的是真密码
- vibe-coder 默认防御:MFA + 登录限速 + 加盐慢 hash——三道闸缺一不可
速查表
| 类型 | 怎么打 | vibe-coder 现实例子 |
|---|---|---|
| Simple brute force | 从 aaaa 试到 zzzz,字符全枚举 | 攻 4 位 PIN |
| Dictionary attack | 用常用密码字典(rockyou.txt)逐个试 | 攻”123456”、“password”、“qwerty” |
| Reverse brute force | 固定一个密码,试所有用户名 | 用 Password123 试遍你网站全部用户 |
| Credential stuffing(撞库) | 拿别处泄露的”邮箱+密码”对去你网站试 | Optus 泄露 → 黑客拿数据去试 Netflix |
| Pass the hash(子类) | 偷到 hash 后不破解,直接拿 hash 当凭据登 | 内网横移、NTLM 协议典型 |
1. Simple brute force(穷举)
字典都不用,纯暴力枚举所有字符组合。
- 4 位数字 PIN:10⁴ = 1 万种,秒破
- 8 位小写字母:26⁸ ≈ 2000 亿,普通 GPU 几小时
- 16 位大小写+数字+符号:比宇宙寿命还长
关键变量:长度 + 字符集 + hash 算法速度。
vibe-coder 教训:别让你的”验证码”、“邀请码”、“重置密码 token” 只有 6 位数字——直接被穷举。
2. Dictionary attack(字典攻击)
不再瞎试,用历史泄露密码当字典。
最有名的字典是 rockyou.txt——2009 年 RockYou 泄露的 1400 万个真实密码。后来积累了几十亿条。
排前 10 的密码(用了 15 年还没变):
123456
password
123456789
qwerty
12345678
abc123
password123
admin
111111
welcome
为什么有效:人类挑密码极度可预测。你以为”自己的”密码,字典里早就有。
vibe-coder 教训:你写代码”自动生成默认密码给新用户”,千万别用 welcome temp123 这种——直接命中字典。
3. Reverse brute force(反向暴力)
反过来——固定一个密码,试所有用户名。
逻辑:既然 Password123 在某个用户那有效,那你网站里肯定还有别的用户也用这个密码。
特点:
- 单账号失败次数低 → 绕过”登录失败 5 次锁账号”
- 攻击者目标不是某个特定人,是任何能进的账号
vibe-coder 教训:登录限速不能只按用户名计,还要按 IP / 按全站总失败率计——否则反向暴力直接绕过。
4. Credential stuffing(撞库)— 最危险
拿别处泄露的”邮箱+密码”对,直接去你网站试。
为什么最危险:
- 攻击者用的是真密码——你存 hash、加 salt、用 bcrypt 全都不阻拦,因为不需要破 hash
- 用户在 N 个网站用同一个密码,Optus 泄露 = 用户的 Netflix / 银行 / Gmail 同步沦陷
- 登录请求看起来正常,失败率反而比纯暴力低——单 IP 试几个就换 IP
澳洲现场:Optus 泄露后,媒体报道大量 .com.au 网站登录失败率突然飙升——就是攻击者拿数据来撞。
vibe-coder 教训:
- 你的 hash 算法再强,也救不了被撞库的用户——必须靠 MFA 拦
- 检查注册邮箱有没有出现在 HaveIBeenPwned 泄露库,出现就强制改密 / 强制开 MFA
5. Pass the hash(传递 hash)— credential stuffing 的子类
偷到 hash 后,不破解,直接拿 hash 去认证。
特别针对 Windows NTLM / Kerberos 这类老协议——某些协议设计成”客户端发 hash 给服务器,服务器对比 hash”。攻击者从内存里拽到 hash,直接重放就能登。
关键前提:hash 没加 salt——加了 salt,每个用户的 hash 不一样,拿一个 hash 没法复用。
vibe-coder 教训:你自己写的 web 系统几乎不会直接踩 pass the hash(它是企业 AD 的痛),但它在告诉你为什么 salt 是刚需——见 hash 文章里的警告。
vibe-coder 三道闸:挡住 4 种 brute force
| 招式 | 挡哪几种 | 怎么落地 |
|---|---|---|
| MFA | 全部 4 种 | 让 IdP 做,别自己写 |
| 登录限速 + lockout | Simple / Dictionary / Reverse | 按用户名 + 按 IP 双维度;失败 5 次后加 CAPTCHA |
| salt + 慢 hash(argon2id / bcrypt) | Pass the hash + 减缓字典 | 用 argon2 库,别自己拼盐 |
| HaveIBeenPwned 检测 | Credential stuffing | 注册 / 改密时调他们的 API,撞上就拒 |
| CAPTCHA | 自动化的全部 | 不一上来就放,失败 3 次后再触发,体验更好 |
默认配置:全开。AI 给你写登录系统时,默认它没做齐——逐条问。
工具(知道名字就行)
| 工具 | 用来 |
|---|---|
| Hashcat | GPU 破 hash,最快的离线工具 |
| John the Ripper | 老牌 hash 破解,功能全 |
| Hydra | 在线服务暴力(SSH / FTP / web 表单) |
| Aircrack-ng | Wi-Fi 握手包破解 |
| Ophcrack | 老 Windows hash + 彩虹表 |
vibe-coder 不需要会用,但要听过——做 pen test 的人会用这些工具来打你(见 pen test 文章)。
概念关联
- Brute Force Attack · 密码攻击 · salt · 彩虹表
- hash function · MFA · 认证