随着互联网的快速发展,网络攻击的形式和手段也日益复杂和多样化。Web应用成为攻击者的主要目标之一,因为它们通常暴露在互联网中,并承载大量敏感数据。Web应用防火墙(WAF)是保护Web应用免受各种攻击的重要工具。传统的WAF主要依赖预定义的静态规则和签名库来检测和拦截恶意流量。这些规则和签名库基于已知的攻击模式和特征,例如特定的URL模式、参数和值。然而,这种基于规则的保护方式存在更新滞后,难以应对新型和变种攻击,且无法主动防御。
为了解决上述问题,本发明提出了一种适用于WAF的基于日志分析的主动防御技术。该技术通过分布式架构,实时全量分析日志数据,结合动态封装和动态验证,实现对威胁流量的主动防御。具体创新点包括:
分布式日志收集与分析:采用分布式架构进行日志收集与聚合,保证系统的可扩展性和高效性。
实时全量日志分析:利用轻量化、多级聚合等技术,对日志数据进行实时全量分析,提高威胁识别的准确性。
动态封装与验证:通过动态封装和动态验证技术,增强防御措施的灵活性和有效性,防止重放攻击、数据篡改和伪造请求。
行为分析与设备指纹:结合用户行为分析和设备指纹识别,进一步提高系统对复杂和高级Bot攻击的防御能力。
本发明在传统WAF的基础上引入了全量日志分析、主动防御技术,显著提升了网络安全防护能力,适应了当前复杂多变的网络安全环境。
以下将详细介绍本发明的各个方面和关键技术。
如图1所示为整体框架,本技术从总体上来看,主要分成了两大部分:分别是bot-gather和bot-statr。
Bot-Gather运行在每个引擎节点上,负责收集本机的WAF日志和必要数据的采集,对流量进行会话识别,判断当前会话是否有相应的动态规则:如有的话则进行动态验证、指纹验证和行为分析等,并对验证不通过的流量进行处置;如没有的话则进行规则条件匹配,预聚合并将预聚合数据发到redis等处理。
Bot-Statr运行在单独的中心服务器上,支持部署多个,负责按照租户纬度将同一租户的预聚合数据消费,进行全网汇聚,并按照Bot规则所配置的统计纬度进行全网统计和规则阈值判断,若发现超过规则阈值,将生成一条和会话相对应的动态规则以及需插入前端的一段JS代码(若配置了主动防御),并通过MQ(复用redis)广播到全网的Bot-Gather中。
下面详细介绍Bot-Gather组件功能,整体如图2所示:
此组件运行在每一个引擎节点上,分布在全网各个云节点。
1、日志&数据采集
支持通过共享内存实时读取WAF引擎的安全日志和访问日志;
支持通过共享内存实时读取WAF的流量数据(仅必要字段);
支持记录日志读取状态,当Bot-Gather重启时可以恢复读取位置从而不丢失日志和流量数据;
支持按自定义分隔符或正则解析日志和流量数据,解析之后支持去除无用字段仅保留有用字段;
支持并发处理。
2、会话识别&查询动态规则
支持配置管理,接收管理平台(租户下发配置)下发的各种配置,并支持配置重启恢复;
支持按照当前所配Bot规则,对流量进行会话识别;
支持动态规则的存储和过期老化,并按照会话识别结果查询动态规则;
支持并发处理。
3、规则条件匹配&预聚合
若上述2没有查询到动态规则,则进入此步骤:
支持按照当前所配Bot规则,对流量进行规则匹配,过滤掉不满足匹配条件的流量和日志;
支持将满足匹配条件的流量和匹配结果,在内存中进行缓存和预聚合;
支持定期将预聚合数据按照租户ID进行hash分桶,分发到中心redis中,确保同一个租户的数据可以分配到同一个队列中;
支持并发处理。
4、主动防御模块
若上述2查询到动态规则,则进入此步骤:
支持提取请求中的签名值和相关数据(如URL、参数、随机数等),使用预设的公钥对签名值进行验证,如果签名失败则进入步骤5,执行动作为拦截,否则继续流程;
支持提取请求中的用户行为数据(如鼠标移动、点击或键盘输入等等),通过内置打分规则对当前行为进行分析,判断当前行为属于机器人还是正常用户,如果判断属于机器人则进入步骤5,执行动作为拦截,同时对于异常行为进行告警监控,否则继续流程;
支持提取请求关于设备的唯一信息(如浏览器类型、操作系统、硬件参数等等),通过内置算法生成设备指纹,将指纹与请求相关联,判断指纹是否重复或异常,并支持自定义白名单或黑名单指纹。若指纹异常则进入步骤5,执行动作为拦截,同时对于异常指纹进行告警监控,否则继续流程。
5、动作执行模块
此步骤依赖于WAF引擎的nginx模块,如果是拦截,重定向等都直接使用nginx。如果动作配置的是JS挑战或验证码,则由此模块动态生成JS代码并随响应一并返回给前端,以便验证用户的响应是否为正常用户。
下面详细介绍Bot-Statr组件功能,整体如图3所示:
此组件运行在单独的中心服务器上,支持多节点部署,方便弹性扩容,且不影响业务转发。主要功能如下:
1、消费redis&全网汇聚
支持多个statr之间负载分担;
支持消费redis中Bot规则匹配预聚合数据,在内存中缓存一段时间,聚合全网数据;
支持定期将全网汇聚数据通过内部chan发送到规则统计和判断模块;
支持并发处理。
2、各维度统计&规则判断
支持配置管理,接收管理平台(租户下发配置)下发的各种配置,并支持配置重启恢复;
支持按照Bot规则的纬度,将上述聚合数据关联到同一个规则中,并按照每个匹配条件进行各维度的统计;
支持按照Bot规则的纬度,判断其下关联的所有匹配条件是否达到所配阈值;
支持并发处理。
3、生成并维护动态规则
如上述2中达到触发阈值,则生成一条动态规则,由此模块在内存中保存;
支持将动态规则信息写入某个数据库(如PG),方便客户和管理员查看动态规则;
支持动态规则在Bot-Statr重启时恢复(从数据库中拉取数据);
如果该Bot规则配置了动态防护功能,需要在此模块动态封装:使用私钥对请求中的关键字段(不同规则动态变化)进行签名并将结果附加到JS中;封装JS代码以收集用户的行为;封装JS代码以收集用户设备的指纹信息。
4、支持广播动态规则
将上述3动态规则和动态生成的JS代码一并发到MQ中(复用Redis),广播到各个引擎节点
5、支持定期清理动态规则
支持定期清理内存中失效的动态规则;
支持定期清理PG中失效的动态规则。
与现有技术相比,本发明提出了一种适用于WAF的基于日志分析的主动防御技术。该技术通过分布式架构,实时全量分析日志数据,结合动态封装和动态验证,实现对威胁流量的主动防御:
1. 分布式数据收集和分析:不论是Bot-Gather和Bot-Statr组件,还是到组件中具体某个功能模块,均支持高并发、分布式的特点,保证了系统的高效性和可用性。
2. 实时全量分析:与传统模式,将日志发送到某个大数据平台进行机器学习、分析再和WAF设备联动的模式相比,日志和数据的分析理论上仅存在聚合时间的延后,其他流程均为实时统计和分析。
3. 主动防御:通过动态封装,动态验证,用户行为、设备指纹验证以及JS挑战/验证码等一系列手段,增强了防御措施的灵活性和有效性,对高级Bot具备一定的防御能力。
4. 轻量级:整个系统仅引入redis作为消息中间件(相对其他MQ很轻量),其他两个模块均采用golang编写,Bot-Gather和Bot-Statr可以单独编译成可执行文件,方便部署和运维 。
总体来说,本发明在传统WAF的基础上引入了先进的日志分析、实时统计处理和主动防御技术,显著提升了网络安全防护能力,适应了当前复杂多变的网络安全环境。
图1:整体架构图
图2:Bot-Gather组件
图3:Bot-Statr组件