4. 撞库与相关攻击对比

在账号安全对抗中,很多人把“暴力破解”“密码喷洒”“撞库”“爬虫”混为一谈,导致检测规则写得过宽或过窄:过宽会误伤正常用户,过窄则漏掉真实攻击。要建立可落地的检测体系,必须先厘清四类行为的攻击前提、请求形态、成功信号和可观测痕迹。本节从原理出发,给出对比框架、识别要点与实战复盘方法。

一、核心原理:四类攻击的“资源假设”不同

四类攻击的本质差异,在于攻击者手中掌握的资源不同,以及他们如何利用这些资源换取账号或数据。

  • 暴力破解(Brute Force):针对单个或少量账号,穷举大量密码。前提是攻击者知道用户名,且目标系统没有严格的失败锁定。典型特征是“同一账号、海量密码”。
  • 密码喷洒(Password Spraying):针对大量账号,使用少量弱密码(如 Password123、Welcome2024)。前提是攻击者掌握用户名字典,且系统对单账号失败次数限制较松。典型特征是“同一密码、海量账号”。
  • 撞库(Credential Stuffing):使用其他平台泄露的真实账号密码对,批量尝试登录。前提是用户在多个平台复用密码。典型特征是“账号密码成对出现、来源外部泄露、成功率高于随机猜测”。
  • 爬虫(Crawler/Scraper):不以登录成功为目标,而是批量获取公开或半公开数据(商品、用户资料、评论)。它可能不涉及登录,也可能使用少量账号维持会话。典型特征是“高频访问资源、路径集中、无登录失败信号”。

一句话记忆:暴力破解是“一账号多密码”,密码喷洒是“多账号一密码”,撞库是“多账号多密码但成对来自泄露库”,爬虫是“不关心密码,只关心数据”。

二、方法流程:从请求日志到判定结论

检测这四类行为,不能只看单条日志,而要按“聚合—特征—判定”的流程处理。以下是一个可操作的流程:

  1. 数据采集:收集登录接口、注册接口、资源访问接口的日志,至少包含时间、源 IP、User-Agent、账号、密码哈希(或密码长度)、响应码、响应体大小、会话 ID。
  2. 维度聚合:按源 IP、账号、会话、时间窗口(如 1 分钟、5 分钟、1 小时)聚合请求次数、失败次数、成功次数、唯一账号数、唯一密码数。
  3. 特征计算:计算失败率、账号集中度、密码集中度、请求间隔方差、UA 一致性、地理/ASN 跳变等。
  4. 规则与模型判定:结合阈值规则与异常检测模型,输出风险分和攻击类型标签。
  5. 处置与验证:对高风险请求触发验证码、二次验证、限速或封禁,并通过人工复核确认误报。

下面是一段简化的日志聚合示例,用于区分“同一账号多密码”和“同一密码多账号”:

# 按源 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 阈值陷阱。