4. 撞库与相关攻击对比
在账号安全对抗中,很多人把“暴力破解”“密码喷洒”“撞库”“爬虫”混为一谈,导致检测规则写得过宽或过窄:过宽会误伤正常用户,过窄则漏掉真实攻击。要建立可落地的检测体系,必须先厘清四类行为的攻击前提、请求形态、成功信号和可观测痕迹。本节从原理出发,给出对比框架、识别要点与实战复盘方法。
一、核心原理:四类攻击的“资源假设”不同
四类攻击的本质差异,在于攻击者手中掌握的资源不同,以及他们如何利用这些资源换取账号或数据。
- 暴力破解(Brute Force):针对单个或少量账号,穷举大量密码。前提是攻击者知道用户名,且目标系统没有严格的失败锁定。典型特征是“同一账号、海量密码”。
- 密码喷洒(Password Spraying):针对大量账号,使用少量弱密码(如
Password123、Welcome2024)。前提是攻击者掌握用户名字典,且系统对单账号失败次数限制较松。典型特征是“同一密码、海量账号”。 - 撞库(Credential Stuffing):使用其他平台泄露的真实账号密码对,批量尝试登录。前提是用户在多个平台复用密码。典型特征是“账号密码成对出现、来源外部泄露、成功率高于随机猜测”。
- 爬虫(Crawler/Scraper):不以登录成功为目标,而是批量获取公开或半公开数据(商品、用户资料、评论)。它可能不涉及登录,也可能使用少量账号维持会话。典型特征是“高频访问资源、路径集中、无登录失败信号”。
一句话记忆:暴力破解是“一账号多密码”,密码喷洒是“多账号一密码”,撞库是“多账号多密码但成对来自泄露库”,爬虫是“不关心密码,只关心数据”。
二、方法流程:从请求日志到判定结论
检测这四类行为,不能只看单条日志,而要按“聚合—特征—判定”的流程处理。以下是一个可操作的流程:
- 数据采集:收集登录接口、注册接口、资源访问接口的日志,至少包含时间、源 IP、User-Agent、账号、密码哈希(或密码长度)、响应码、响应体大小、会话 ID。
- 维度聚合:按源 IP、账号、会话、时间窗口(如 1 分钟、5 分钟、1 小时)聚合请求次数、失败次数、成功次数、唯一账号数、唯一密码数。
- 特征计算:计算失败率、账号集中度、密码集中度、请求间隔方差、UA 一致性、地理/ASN 跳变等。
- 规则与模型判定:结合阈值规则与异常检测模型,输出风险分和攻击类型标签。
- 处置与验证:对高风险请求触发验证码、二次验证、限速或封禁,并通过人工复核确认误报。
下面是一段简化的日志聚合示例,用于区分“同一账号多密码”和“同一密码多账号”:
# 按源 IP 聚合 5 分钟窗口
ip=203.0.113.45 window=5m
login_attempts=842
unique_accounts=317
unique_passwords=12
failed_ratio=0.98
top_password="Password123" 出现 301 次
top_account="user001" 出现 3 次
# 判定倾向:密码喷洒(多账号、少密码、高失败率)
如果日志显示 unique_accounts=1、unique_passwords=500,则更倾向暴力破解;如果 unique_accounts=200、unique_passwords=200 且账号密码成对出现、失败率约 0.7~0.9,则更倾向撞库。
三、对比表格与识别要点
下表从攻击目标、请求形态、关键指标和典型日志特征四个维度进行对比,便于在检测规则中直接映射。
| 攻击类型 | 攻击目标 | 请求形态 | 关键识别指标 | 典型日志特征 |
|---|---|---|---|---|
| 暴力破解 | 单个/少量账号 | 同一账号,大量不同密码 | 账号唯一数低、密码唯一数高、失败率极高 | unique_accounts=1, unique_passwords=500 |
| 密码喷洒 | 大量账号 | 同一/少量密码,大量不同账号 | 账号唯一数高、密码唯一数低、失败率极高 | unique_accounts=300, unique_passwords=5 |
| 撞库 | 大量账号 | 账号密码成对出现,来自外部泄露库 | 账号与密码唯一数接近、失败率中高、成功账号有复用特征 | unique_accounts≈unique_passwords, failed_ratio=0.8 |
| 爬虫 | 数据资源 | 高频访问列表/详情页,可能不登录 | 资源路径集中、请求间隔规律、UA 固定、无登录失败 | path=/api/items?page=N, 200 OK, 无 login 事件 |
识别要点:撞库与密码喷洒最容易混淆。关键区别是密码是否成对且多样。密码喷洒的密码种类极少,撞库的密码种类与账号数量接近,且往往能在泄露库中找到对应关系。
四、案例/场景:一次撞库与爬虫混合攻击的复盘
某电商平台在促销期间发现登录失败率上升,同时商品详情页访问量异常。初始规则只按“单 IP 登录失败次数”告警,结果大量告警来自 NAT 出口,误报严重。复盘后发现攻击分为两个阶段:
- 第一阶段(撞库):攻击者使用 2000 组泄露账号密码,通过 300 个代理 IP 分散尝试。每个 IP 只尝试 6~8 次,单 IP 失败次数未触发阈值。但按“账号+密码成对”聚合后,发现
unique_accounts≈unique_passwords,且失败率 0.85,成功账号中 60% 在后续 24 小时内修改了密码。 - 第二阶段(爬虫):攻击者用撞库成功的 12 个账号维持会话,高频抓取商品价格和库存。请求路径集中在
/api/items,间隔稳定在 1.2 秒,UA 为固定版本。
最终检测规则调整为:
# 撞库规则(窗口 10 分钟)
unique_accounts > 50
AND unique_passwords > 40
AND abs(unique_accounts - unique_passwords) < 20
AND failed_ratio > 0.6
AND source_ip_count > 10
# 爬虫规则(窗口 5 分钟)
request_count > 300
AND path_entropy < 1.5
AND interval_variance < 0.3
AND login_failure_count = 0
误区提醒:不要只用“单 IP 失败次数”检测撞库。撞库常使用代理池分散请求,单 IP 指标会失效。应优先使用“账号—密码对”的聚合特征,并结合成功登录后的行为异常。
五、误区与复盘:常见检测陷阱
- 把爬虫当撞库:爬虫可能不登录,或使用少量正常账号。若只盯登录失败,会漏掉爬虫;若把高频访问一律当撞库,会误伤正常比价用户。
- 忽略成功登录:撞库的成功请求往往混在失败请求中。只统计失败会低估风险。应同时监控“失败后成功”的账号,尤其是同一 IP 下多个账号成功。
- 阈值一刀切:不同业务登录频率差异大。应按业务线、时间段、用户群体分别设定基线,再用相对偏差触发告警。
- 不做泄露库比对:撞库的核心是“泄露库复用”。如果条件允许,应将登录密码与已知泄露库做哈希比对,命中即高风险,这比单纯行为规则更准确。
复盘时建议回答三个问题:攻击者用了多少账号和密码?失败与成功的比例是多少?成功账号后续是否有异常操作?这三个答案能直接区分撞库、密码喷洒和暴力破解,并为爬虫检测提供会话线索。
本节小结:暴力破解看“账号少密码多”,密码喷洒看“账号多密码少”,撞库看“账号密码成对且来自泄露库”,爬虫看“资源路径集中且无登录失败”。检测时先聚合、再算特征、后判定,避免单 IP 阈值陷阱。