2、访问频率概念:频率定义、正常访问模式、突发流量与恶意爬取的区别

2.1 频率到底是个什么东西?

我经常跟团队里刚入行的同学说,频率这个词听起来高大上,说白了就是“单位时间内发生了多少次”。放在Secrets访问场景里,就是每秒/每分钟/每小时,你的密钥被拉了多少回。

举个例子。你有个,用来调用内部支付接口。正常情况下,每秒钟调用一两次,顶多三五次。突然有一天,你发现它每秒被调了2000次——那肯定出事了。

核心公式: 访问频率 = 请求次数 / 时间窗口(秒/分/时)

但这里有个坑——时间窗口选多长?我踩过雷。选太短(比如1秒),稍微一次抖动就报警,值班同学半夜爬起来发现只是重试。选太长(比如1小时),攻击者早就把密钥薅光了。我个人习惯:短窗口用于检测突增,长窗口用于识别慢速爬取。后面会细说。

2.2 正常访问模式长什么样?

要检测异常,你先得知道什么是正常。每个系统的访问模式都不一样,但有几个共性的特征。

  • 周期性:比如每天上午10点业务高峰期,调用量会自然上涨;凌晨四五点跌到谷底。这是业务规律。
  • 稳定性:同一个密钥,在相同时间窗口内,调用量波动通常不会超过±20%。除非搞了大促。
  • 关联性:Secrets的调用往往跟业务请求绑定。如果某个密钥只处理订单查询,那它就不会突然跑去调用数据删除接口。

我记得有个电商客户,他们有个Secrets专门给物流查询用。正常模式是每分钟50~80次,周末稍低。某天突然飙到每分钟3000次,查日志发现是他们自己的运维脚本写死了循环——还好不是攻击。这就说明,光看频率还不够,得结合上下文。

避坑指南: 我建议你在建立基线时,至少取过去7天、同时段的数据,去除节假日和已知变更窗口。别把大促当天当正常基线——我曾经这么干过,误报率直接翻倍。

2.3 突发流量很正常,别见风就是雨

什么叫突发流量?就是短期内请求量快速拉升,但很快又回落,而且源头是可信的。比如秒杀活动刚刚开始,或者支付回调集中到达。

突发流量和恶意爬取最大的区别在于行为模式,不是单纯看数字。给你看个表,这是我做攻防演练时整理的对比。

对比维度 突发流量 恶意爬取
发起源头 有限的业务IP/服务,通常是内网或固定白名单 大量分散IP,常来自住宅代理或云节点
请求模式 集中在同一类接口,参数有业务含义 遍历式请求,尝试各种路径或枚举参数
时间特征 与业务事件强相关(如开售、出报表) 随机或均匀,有时特意选择凌晨静默期
频率变化 陡升陡降,持续几分钟到几十分钟 缓慢爬坡,尝试绕过频率阈值
Secrets使用 使用正确的Secrets,调用合法 可能盗用或猜测Secrets,调用非法接口

你看,光把“请求量高”当成恶意,你会被业务方骂死。2019年我帮一个视频平台做检测,他们有个热门综艺开播,瞬间Secrets调用暴涨30倍。幸亏我们提前知道排期,直接把阈值抬高了——不然那个夜没人能睡。

2.4 恶意爬取的典型特征

恶意爬取,说白了就是想白嫖你的数据。它不是单纯的频率高,而是有“坏心眼”。

有哪些特征?我给你列几条实战中见得最多的。

  1. 频率呈周期波动但逐渐升高:攻击者会试探你的限流阈值,比如先跑100次/分钟,没被封就提到200,再提到500。这种“爬楼梯”式增长,人工业务很少出现。
  2. 请求间隔极其均匀:正常人的操作总有停顿,爬虫的间隔可以精确到毫秒级。我见过一个爬虫,每0.5秒发一次请求,简直像节拍器。
  3. Secrets轮换行为异常:如果多个密钥在短时间内被交替使用,而且来源IP不同,大概率是在轮换密钥绕检测。
  4. 低频慢爬更难搞:有些攻击者很聪明,把频率降到每小时几十次,比正常用户还低。他们可能只盯着你最新的几个Secrets反复试。这时候单纯看频率没用,得结合Secrets的使用周期和上下文。
注意: 我遇到过最头疼的一种情况——攻击者伪装成正常用户,每个IP每天只请求一个Secrets,频率完美匹配业务基线。这种你得靠关联分析,比如多个Secrets几乎同时被首次使用,或者所有请求指向同一批目标数据。

2.5 一张图理清知识框架

下面的SVG图我把这一章的核心概念串了一遍。你看一眼应该就能记住:频率定义、正常模式、突发流量、恶意爬取,以及它们之间的判断路径。

访问频率分析框架图 Secrets访问频率分析核心框架 访问频率 正常访问模式 周期性 · 稳定性 · 关联性 突发流量 陡升陡降 · 与业务事件强相关 恶意爬取 分散IP · 爬楼梯 · 均匀间隔 建立基线 → 保持监控 确认事件 → 临时抬阈值 溯源IP/Secrets → 阻断 判断依据:源头+模式+时间+Secrets使用 图例说明 绿色节点=正常;橙色=突发;红色=恶意;紫色=应对动作 虚线箭头表示下一步操作,实线箭头表示分类路径

2.6 判断频率异常的几个实战技巧

说了这么多理论,讲讲实在的。怎么快速判断一个频率波动是正常还是恶意?我一般走这个步骤。

  1. 先看来源IP:是不是已知的内部服务?是不是CDN回源?如果是,大概率是正常的。
  2. 再看请求参数:参数里有没有明显的遍历特征?比如Secrets ID从1到9999挨个试?有的话,直接拉黑。
  3. 然后看频率曲线:是不是平滑上升又平滑下降?还是像锯齿一样忽高忽低?后者更像爬虫在试探。
  4. 最后看Secrets本身:这个密钥之前的使用记录怎么样?有没有在多地同时被调用?我见过一个密钥同时在美东和美西被调用,时差都不考虑——明显是盗用的。
一个懒人方法: 如果觉得人工分析太麻烦,可以直接把请求日志喂给异常检测模型,用时间序列分解看残差。我在生产环境就是这么干的——让模型先筛一轮,人再复核,效率很高。不过模型的基线要定期更新,否则业务一改就全乱了。