口令认证漏洞:弱口令、默认口令、暴力破解与字典攻击的防御与绕过
口令认证,说白了就是「你知我知」的那串字符。但现实是,这串字符往往脆弱得不堪一击。我做了这么多年渗透测试,十次里有八次都是从口令入手撕开防线的。今天咱们就聊聊,攻击者是怎么搞你的口令的,以及你该怎么防。
弱口令:最朴素的突破口
弱口令是什么?就是那些攻击者闭着眼睛都能猜到的密码。比如 123456、password、admin。我在一次金融系统测试中,发现核心数据库的密码是 P@ssw0rd——嗯,看起来挺复杂,但攻击者字典里排前五十就有它。
- 123456
- password
- 123456789
- 12345678
- 12345
- qwerty
- abc123
- football
- monkey
- iloveyou
为什么会这样?说白了,用户图省事。但作为安全工程师,你不能指望用户自觉。我个人的习惯是:在注册环节直接做密码强度校验,低于 80 分的不让过。
默认口令:厂商留下的后门
默认口令比弱口令更可怕。因为它是厂商预设的,所有设备都一样。我记得有一次,客户买了一批路由器,管理员密码全是 admin/admin。攻击者只要知道设备型号,就能直接登录。
| 设备类型 | 常见默认用户名 | 常见默认密码 |
|---|---|---|
| 路由器/交换机 | admin | admin |
| 摄像头 | root | 12345 |
| 数据库 | sa | 空密码 |
| 打印机 | admin | password |
暴力破解:穷举的艺术
暴力破解就是挨个试。从 aaaaaa 试到 zzzzzz。理论上,只要时间够,总能试出来。但现实中,攻击者不会傻到纯暴力——太慢了。
我见过一个案例:某系统没有登录频率限制,攻击者用 100 个 IP 同时爆破,每秒能试 5000 次。一个 6 位纯数字密码,不到 3 分钟就破了。
字典攻击:更聪明的暴力破解
字典攻击不试所有组合,它只试「可能」的密码。攻击者会收集各种密码字典——从泄露数据库、社交工程、常见词汇里整理出来的。
举个例子,RockYou 字典有 1400 万条密码。攻击者用这个字典,能破解 60% 以上的普通用户密码。为什么?因为大多数人用的密码,都在这个字典里。
# 一个简单的字典攻击示例(Python)
import hashlib
def dictionary_attack(target_hash, wordlist_path):
with open(wordlist_path, 'r', encoding='utf-8', errors='ignore') as f:
for line in f:
password = line.strip()
# 假设是 MD5 哈希
if hashlib.md5(password.encode()).hexdigest() == target_hash:
return password
return None
# 使用示例
# hash = '5d41402abc4b2a76b9719d911017c592' # 对应 'hello'
# result = dictionary_attack(hash, 'rockyou.txt')
# print(f'破解结果: {result}')
你想想看,如果你的密码是 iloveyou 或者 princess,字典里一搜就有。我个人的经验是:密码长度至少 12 位,包含大小写、数字和特殊字符,而且不能是字典里的常见词。
防御策略:多层防线
光靠密码强度不够。你需要构建多层防线:
- 密码策略: 强制长度、复杂度、定期更换(但不要太频繁,否则用户会写在便利贴上)
- 登录限速: 同一 IP 每秒最多 3 次尝试,超过就临时封禁
- 多因素认证: 密码 + 短信验证码 / TOTP / 生物特征
- 行为分析: 检测异常登录模式(比如凌晨 3 点从国外 IP 登录)
- 密码黑名单: 禁止使用已知泄露的密码(可以对接 Have I Been Pwned API)
攻击者的绕过手法
防御做得再好,攻击者也有办法绕。我总结了几种常见的绕过方式:
| 绕过手法 | 原理 | 防御建议 |
|---|---|---|
| 凭证填充 | 用其他平台泄露的账号密码来试 | 强制使用唯一密码,或启用 MFA |
| 哈希传递 | 不破解密码,直接用哈希值认证 | 使用 Kerberos 等安全协议,禁用 NTLM |
| 离线破解 | 拿到哈希文件后本地慢慢算 | 使用 bcrypt/argon2 等慢哈希算法 |
| 社会工程 | 钓鱼邮件、假冒客服骗取密码 | 员工安全意识培训,邮件过滤 |
说白了,没有绝对安全的系统。但你可以让攻击者的成本高到不值得下手。
知识体系总览
下面这张图,把口令认证漏洞的核心逻辑串起来了。攻击者从弱口令、默认口令、暴力破解、字典攻击四个方向切入,而防御者需要从策略、技术、监控三个层面构建防线。
嗯,这张图把整个逻辑串起来了。攻击者从左边四个方向切入,目标是中间的认证接口,防御者在右边构建多层防线。你想想看,如果只防一个方向,其他三个方向就是敞开的。