2. 基础知识

在进入实战之前,必须先把“登录Velocity”和“暴力尝试识别”这两个核心概念讲清楚。很多初学者一上来就急着写规则、调阈值,结果把正常用户的快速登录误判为攻击,或者把慢速撞库完全漏掉。本章的目标是建立一套共同语言:知道我们在度量什么、识别什么、以及这些指标在真实系统中意味着什么。

一、什么是登录Velocity

登录Velocity(登录速率/登录速度)并不是一个单一数字,而是描述“单位时间内登录相关事件发生快慢”的一组度量。它既可以按用户维度统计,也可以按IP、设备、会话、ASN或全局维度统计。核心思想是:正常人的登录行为有节律,而自动化攻击往往在时间分布上呈现异常聚集或异常规律。

登录Velocity通常包含以下几类指标:

  • 尝试频率:某账号或某IP在固定窗口内发起的登录请求次数,例如“5分钟内20次”。
  • 失败速率:单位时间内登录失败次数,是暴力破解最直接的信号。
  • 账号切换速度:同一IP在短时间内尝试的不同账号数量,撞库攻击的典型特征。
  • 成功/失败比:大量失败后突然成功,可能意味着密码被猜中。
  • 时间间隔规律性:自动化脚本的请求间隔往往高度均匀,而人类操作带有随机停顿。

关键理解:Velocity不是“越快越可疑”。企业内网批量登录、SSO会话刷新、移动端续期都可能产生高Velocity。识别暴力尝试必须结合失败率、账号分布、地理与设备一致性等上下文,而不是只看速度。

二、暴力尝试识别的基本概念

暴力尝试(Brute Force Attempt)泛指攻击者通过反复尝试来获取合法凭据的行为。根据策略不同,常见类型包括:

类型 攻击方式 典型Velocity特征 识别难点
纯暴力破解 对同一账号穷举所有密码组合 单账号失败次数极高,间隔短且均匀 可能触发账号锁定,攻击者会切换账号
字典攻击 用常见密码字典逐个尝试 失败率高,尝试次数中等但持续 与用户忘记密码行为相似
撞库 用泄露的账号密码对批量尝试 单IP尝试大量不同账号,成功率低但分布广 IP分散、慢速撞库难以用阈值捕获
密码喷洒 用少量常见密码尝试大量账号 每账号失败1-3次,全局失败量高 单账号维度几乎无异常
Credential Stuffing变种 结合代理池、设备指纹伪造 IP轮换、设备ID变化、Velocity被稀释 需要跨维度关联与行为基线

识别暴力尝试的本质是一个异常检测问题:在大量正常登录事件中,找出那些在时间、频率、账号分布、来源特征上偏离基线的行为。它通常不是单条规则能解决的,而是“规则+统计+机器学习+情报”的组合。

三、常见术语与核心参数

在后续实战中会反复出现以下术语,建议先建立清晰认知:

  • 时间窗口(Window):统计Velocity的时间范围,如60秒、5分钟、1小时。窗口越短越敏感,越长越平滑。
  • 阈值(Threshold):触发告警的临界值,例如“5分钟内失败≥10次”。
  • 滑动窗口 vs 固定窗口:滑动窗口实时性更好,固定窗口实现简单但存在边界突刺问题。
  • 基线(Baseline):正常行为的统计轮廓,可按用户、部门、时段、地区建立。
  • 速率限制(Rate Limiting):在网关或应用层限制请求频率,属于预防手段。
  • 账号锁定(Account Lockout):连续失败后锁定账号,属于阻断手段,但可能被用于拒绝服务。
  • CAPTCHA挑战:在疑似自动化时插入人机验证,属于降级验证手段。
  • 误报(False Positive):把正常行为判为攻击;漏报(False Negative):把攻击判为正常。
  • TTL/衰减:让历史计数随时间衰减,避免旧行为长期影响当前判断。

术语使用建议:在团队沟通中,明确“Velocity”指的是哪个维度、哪个窗口、哪个指标。例如“IP维度5分钟失败速率”比笼统说“登录太快”要可执行得多。

四、应用场景与典型流程

登录Velocity与暴力尝试识别广泛应用于以下场景:

  1. 面向公众的Web/App登录:防御撞库、密码喷洒,保护用户账号。
  2. 企业VPN与SSO:识别外部暴力破解和内部横向移动前的凭据试探。
  3. API网关与开放平台:防止接口被高频枚举。
  4. 云控制台与运维后台:高权限入口,对Velocity异常尤其敏感。
  5. 风控与反欺诈:将登录异常作为账户盗用链路的第一环信号。

一个典型的识别流程可以概括为“采集→聚合→判定→响应→复盘”:

1. 采集:登录日志、网关日志、WAF日志、设备指纹
2. 聚合:按用户/IP/设备/ASN在滑动窗口内计算Velocity
3. 判定:规则阈值 + 基线偏离 + 情报匹配 + 模型评分
4. 响应:告警、限速、CAPTCHA、锁定、二次验证
5. 复盘:确认误报/漏报,调整窗口、阈值与特征

下面是一段简化的日志示例,展示如何从原始日志中提取Velocity所需字段:

2024-06-01T10:00:01Z login_failed user=alice ip=203.0.113.10 device=web
2024-06-01T10:00:02Z login_failed user=alice ip=203.0.113.10 device=web
2024-06-01T10:00:03Z login_failed user=alice ip=203.0.113.10 device=web
2024-06-01T10:00:05Z login_failed user=bob   ip=203.0.113.10 device=web
2024-06-01T10:00:06Z login_failed user=carol ip=203.0.113.10 device=web
2024-06-01T10:00:08Z login_success user=alice ip=203.0.113.10 device=web

从这段日志可以观察到:同一IP在8秒内对多个账号发起失败尝试,随后alice登录成功。这既可能是撞库后命中,也可能是攻击者已经掌握alice密码。单看“alice失败3次”并不突出,但结合“IP尝试多账号”这一维度,风险显著上升。

五、常见误区与复盘要点

误区1:只按账号维度统计。密码喷洒和撞库会刻意分散账号,单账号Velocity很低,必须同时看IP、设备、ASN等维度。

误区2:阈值一刀切。不同业务、不同时段、不同用户群体的正常登录频率差异巨大,固定阈值必然导致误报或漏报。

误区3:忽视成功登录。攻击者一旦成功,后续可能不再高频尝试,只盯失败会错过已失陷账号。

误区4:把锁定当唯一手段。攻击者可以利用锁定机制对大量账号进行拒绝服务,需配合限速、CAPTCHA和风险评分。

复盘时应重点回答三个问题:这次告警对应的行为,在时间分布上是否偏离该账号/该IP的历史基线?是否存在跨维度的关联证据?响应动作是否影响了正常用户?只有把这三个问题回答清楚,Velocity指标和识别规则才能真正迭代到可用状态。