这类攻击最麻烦的地方在于,请求本身“长得像好人”,传统规则引擎根本看不出来。核心答案:应用层防护要识别伪装正常的请求,关键是把判断依据从“单次请求特征”切换到“实体行为轨迹”用时间窗口内的访问频次、路径序列、参数分布和会话一致性做多维基线比对,偏离基线的行为再结合人机验证做二次确认。
规则防护为什么会被“伪装正常”的请求绕过
攻击者早就摸透了规则引擎的脾气,一个SQL注入关键字被拦,他就改成编码变形;一个IP被限速,他就换成代理池轮着来,伪装正常请求的套路,本质是把攻击行为拆散、稀释、包装成业务本身就会发生的流量。
常见伪装手法就这么几类:
- 低频慢速遍历:每个账号每小时只试几次密码,单看频次完全在正常范围内,但跨账号汇总后就是撞库行为
- 参数污染稀释:正常下单请求里夹带一个异常参数,规则引擎只校验关键字段,异常参数被直接放过
- 路径爬取伪装:爬虫把请求间隔拉到和真人相近,UA、Referer、Cookie全套伪造,单看请求头挑不出毛病
- 业务逻辑滥用:领券、砍价、积分兑换这类接口,请求参数完全合法,只是频次和顺序不符合真人操作习惯
规则防护的硬伤在于它看的是“这次请求像不像坏请求”,而伪装正常请求的攻击者恰恰保证每一次单独拿出来都像好请求,规则匹配得再细,也追不上攻击者换着花样包装的速度,行业共识认为,单靠静态规则够不到这类场景,必须引入对实体在时间维度上行为模式的分析,据工信部公开发布的网络安全态势相关材料,应用层异常访问中伪装型请求的占比近年来明显上升,具体比例各家口径不一,但方向是一致的攻击面正在从“明显恶意”向“看起来正常”迁移。
行为分析识别伪装请求的四个判断维度
行为分析不是玄学,落到工程上就是几个可计算的指标,下面这些维度组合起来用,比单看任何一个都靠谱。
访问频次的时间分布
真人访问有节律:白天多晚上少、工作日多周末少、操作之间有停顿,脚本可以伪造间隔,但很难在长时间窗口里维持和真人一致的分布曲线,实操上可以这样做:
- 按账号/IP/设备三个粒度分别统计滑动窗口内的请求次数,窗口建议设5分钟、1小时、24小时三层
- 算请求间隔的方差,真人操作方差大,脚本往往方差小得异常
- 对比该实体当前窗口频次与其历史7天同时段均值的偏离度,偏离超过设定倍数(常见取3到5倍)触发降权
访问路径的序列特征
正常用户的操作路径有先后逻辑,登录页→列表页→详情页→下单页,这个顺序在多数电商场景里说得通;反过来直接请求下单接口、跳过前置页面、参数里带着不存在的商品ID,就是序列异常。
一个可验证的判断方式是维护实体最近的路径序列,计算其与业务典型路径的编辑距离或序列相似度,相似度低于阈值时,把请求标为可疑而不是直接拦截,交给后续模块复核。
会话一致性校验
伪装请求最容易露馅的地方是会话本身,设备指纹、JA3/JA4 TLS指纹、Cookie启用状态、浏览器特性上报,这些东西攻击者能伪造一部分,但很难在多维度同时对齐。
- 同一Cookie对应的TLS指纹在短时间内频繁变化,高度可疑
- 设备指纹里的canvas/webgl哈希与UA声明的浏览器版本矛盾,标记
- 会话内请求头顺序、Accept-Language等字段漂移,记录并加权
参数分布与业务语义偏离
同一接口的正常请求,参数取值分布是稳定的,比如搜索接口的关键词长度、分页参数范围、排序字段取值,都有业务规律,伪装请求往往参数构造得“太规整”或“太随机”。
可以用简单的统计方法:对每个接口的参数做分位数统计,请求参数落在长尾区间的比例过高时加分,再结合业务规则,比如商品ID连续递增的查询、分页参数每次固定跳100页,这些都不是真人干的事。
行为分析引擎和传统规则防护有什么区别,怎么配合落地
核心差异对比
| 对比项 | 传统规则防护 | 行为分析防护 |
|---|---|---|
| 判断对象 | 单次请求的特征 | 实体在时间窗口内的行为序列 |
| 对抗伪装能力 | 弱,攻击者变形即绕过 | 较强,伪装行为在长窗口内难自洽 |
| 误报控制 | 误报低但漏报高 | 需要基线调优,误报可控 |
| 响应方式 | 直接拦截 | 先降权、打标、人机验证,再决定拦截 |
两者不是替代关系,业内通行的做法是规则引擎做第一层粗筛拦掉明显恶意流量,行为分析引擎对放行流量做第二层持续评估,评分低的请求进入人机验证或限速通道。
落地步骤(可验证的操作路径)
- 采集层:在WAF或API网关后接入日志,确保每个请求带上账号ID、IP、设备指纹、会话ID、接口名、参数摘要,Nginx侧可在log_format里追加
$http_user_agent和自定义头,网关侧输出结构化JSON。 - 基线学习期:新上线行为分析模块时先跑观察模式,通常建议累计2到4周的业务流量,让各维度基线稳定,这个阶段只记录评分不动请求。
- 阈值标定:按接口分别看评分分布,把线上人工确认的攻击样本和正常样本分别标注,画出评分的分界区间,用分位数定阈值,而不是拍脑袋。
- 处置策略分级:评分进入可疑区间时先触发滑块或短信验证,验证通过则放行并记录;持续可疑才升级为限速或封禁,这样能压住误报对正常用户的干扰。
电商大促期间怎么识别伪装成正常用户的攻击请求
大促是伪装请求最密集的场景,秒杀开始前后,脚本会用大量养号账号模拟正常浏览行为养权重,然后在开抢瞬间发起高并发请求,这个场景有几个针对性做法:
- 提前进入观察期:大促前一周对参与活动的账号建立行为档案,重点关注近期突然活跃、设备指纹集中、访问路径高度雷同的账号群
- 库存接口单点加固:下单和库存扣减接口的请求,除了常规频控,额外校验前置路径是否完整走过商品详情页和购物车页
- 群体聚类辅助判断:把设备指纹、IP段、行为序列做哈希聚类,同一簇内实体行为高度同步时,整簇降权,比逐个判断更高效
- 人机验证前置:对评分处于灰色地带的请求,在进入下单接口前就弹出验证,而不是等到扣库存阶段再拦
这类场景里,行为分析的价值不在于“识别出某一次请求是攻击”,而在于把“一群看起来正常的账号在同一时刻做同样的事”这个整体模式识别出来,单看每个账号都正常,放在一起就不正常,这是规则引擎做不到的事。
行为分析误报率偏高怎么降低,部署成本大概在什么范围
误报压降的实操手段
- 按接口分组标定:不同接口的正常行为差异很大,统一阈值必然误报,登录接口和商品详情接口要分开建模
- 引入白名单实体但只降权不豁免:内部账号、已知合作方流量可以降低评分权重,但仍保留行为分析评分,避免白名单变成后门
- 人机验证作为缓冲层:把“拦截”换成“先验证”,能让误报从用户体验事故降级成一次额外点击
- 定期回灌误报样本:每周把人工确认的误报样本加入基线训练集,迭代周期保持在周级别
部署成本的大致构成
行为分析防护的投入主要在三个地方:日志采集与存储的扩容成本、实时计算引擎的资源成本、基线调优的人力成本,前两项与流量规模线性相关,多数情况下可以用现有大数据平台复用,增量可控,人力成本是大头,前期基线标定通常需要安全团队投入数人周的工作量,价格区间因流量规模、是否自研、是否采购商业方案差别很大,很难给统一数字,实践中的做法是先选一两个高风险接口试点,跑通观察模式再逐步扩大覆盖面,这样首期投入能压到较低水平,也便于用试点数据说服业务方追加预算。
Q&A:应用层行为分析防护常见问题
行为分析引擎需要多长的数据积累才能上线?
观察模式建议至少2到4周,时间太短,正常业务的周期性规律(工作日和周末差异、促销节奏)还没覆盖到,基线不稳,如果业务本身有明显的月度或季度周期,积累周期需要相应拉长,上线初期的评分仅供参考,处置策略从最轻的验证开始逐级放开。
伪装正常请求的行为分析和传统风控系统是一回事吗?
有重叠但不是一回事,传统风控系统偏重交易和账户维度的规则判断,行为分析更关注请求层面的访问行为序列,侧重点在应用层防护,两者可以共用日志管道和实体画像,但判断模型和处置策略要分别设计,混在一起容易互相干扰阈值。
小团队没有大数据平台,行为分析能落地吗?
能,起步阶段不需要全量实时计算,用Nginx日志加定时批处理就能算出滑动窗口频次和路径序列这两个核心指标,配合网关侧的简单打分逻辑即可覆盖大部分伪装请求场景,真正需要实时引擎的是秒杀这类高并发场景,其他业务用准实时(分钟级延迟)完全够用,据公开的行业实践材料,多数中小规模业务的行为分析落地门槛比想象中低,关键是把采集数据打通,而不是堆计算资源。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/787101.html


