口令认证漏洞:弱口令、默认口令、暴力破解与字典攻击的防御与绕过

口令认证,说白了就是「你知我知」的那串字符。但现实是,这串字符往往脆弱得不堪一击。我做了这么多年渗透测试,十次里有八次都是从口令入手撕开防线的。今天咱们就聊聊,攻击者是怎么搞你的口令的,以及你该怎么防。

弱口令:最朴素的突破口

弱口令是什么?就是那些攻击者闭着眼睛都能猜到的密码。比如 123456、password、admin。我在一次金融系统测试中,发现核心数据库的密码是 P@ssw0rd——嗯,看起来挺复杂,但攻击者字典里排前五十就有它。

常见弱口令 Top 10(来自历年泄露数据统计)
  1. 123456
  2. password
  3. 123456789
  4. 12345678
  5. 12345
  6. qwerty
  7. abc123
  8. football
  9. monkey
  10. iloveyou

为什么会这样?说白了,用户图省事。但作为安全工程师,你不能指望用户自觉。我个人的习惯是:在注册环节直接做密码强度校验,低于 80 分的不让过。

默认口令:厂商留下的后门

默认口令比弱口令更可怕。因为它是厂商预设的,所有设备都一样。我记得有一次,客户买了一批路由器,管理员密码全是 admin/admin。攻击者只要知道设备型号,就能直接登录。

设备类型 常见默认用户名 常见默认密码
路由器/交换机 admin admin
摄像头 root 12345
数据库 sa 空密码
打印机 admin password
注意: 设备上线前,必须强制修改默认口令。我曾经见过一个企业,上了 200 台摄像头,密码全是默认的——攻击者只用了一个脚本,就把整个监控网络拿下了。

暴力破解:穷举的艺术

暴力破解就是挨个试。从 aaaaaa 试到 zzzzzz。理论上,只要时间够,总能试出来。但现实中,攻击者不会傻到纯暴力——太慢了。

我见过一个案例:某系统没有登录频率限制,攻击者用 100 个 IP 同时爆破,每秒能试 5000 次。一个 6 位纯数字密码,不到 3 分钟就破了。

我的建议: 暴力破解的防御核心是「限速」和「锁定」。但要注意,锁定策略不能太死——我曾经见过一个系统,输错 3 次就锁 24 小时,结果用户天天被锁,最后 IT 部门被迫把策略关了。合理的做法是:5 次错误后锁定 15 分钟,并触发告警。

字典攻击:更聪明的暴力破解

字典攻击不试所有组合,它只试「可能」的密码。攻击者会收集各种密码字典——从泄露数据库、社交工程、常见词汇里整理出来的。

举个例子,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)
避坑指南: 我曾经见过一个团队,把密码策略设得特别严——必须 20 位、每 30 天换一次、不能重复最近 10 次。结果呢?用户全把密码写在便签纸上贴在显示器上。嗯,这比弱口令还危险。

攻击者的绕过手法

防御做得再好,攻击者也有办法绕。我总结了几种常见的绕过方式:

绕过手法 原理 防御建议
凭证填充 用其他平台泄露的账号密码来试 强制使用唯一密码,或启用 MFA
哈希传递 不破解密码,直接用哈希值认证 使用 Kerberos 等安全协议,禁用 NTLM
离线破解 拿到哈希文件后本地慢慢算 使用 bcrypt/argon2 等慢哈希算法
社会工程 钓鱼邮件、假冒客服骗取密码 员工安全意识培训,邮件过滤

说白了,没有绝对安全的系统。但你可以让攻击者的成本高到不值得下手。

知识体系总览

下面这张图,把口令认证漏洞的核心逻辑串起来了。攻击者从弱口令、默认口令、暴力破解、字典攻击四个方向切入,而防御者需要从策略、技术、监控三个层面构建防线。

口令认证漏洞知识体系 攻击者入口 弱口令 默认口令 暴力破解 字典攻击 目标系统 认证接口 防御层 密码策略 登录限速 多因素认证 行为监控 核心逻辑 攻击者从四个方向(弱口令、默认口令、暴力破解、字典攻击)尝试突破目标系统的认证接口。 防御层通过密码策略、登录限速、多因素认证和行为监控构建纵深防御。 关键原则:让攻击成本 > 攻击收益,同时不影响正常用户体验。

嗯,这张图把整个逻辑串起来了。攻击者从左边四个方向切入,目标是中间的认证接口,防御者在右边构建多层防线。你想想看,如果只防一个方向,其他三个方向就是敞开的。

实战建议: 我每次做渗透测试,都会先试默认口令,再跑字典,最后才考虑暴力破解。因为前两个的成功率最高,成本最低。作为防御方,你应该反过来——先堵住默认口令和弱口令这两个最容易攻破的点。