首先是来自于外部搜集的规则以及我们内部整理的规则,这是一个初始来源。
我们会将规则动态加载到一个基于storm的实时计算流量的框架,相当于做一个只检测不拦截的测试。
通过把报警日志做离线分析后,统计出其中的漏报误报,对偏差较大的规则进行修改优化后,加入到规则中,这样形成了一个闭环。在运营维护过程中,不断的去优化规则。
日志处理方面,加入监督式机器学习,用于进行误报判断。一个完整的闭环形成日志收集到优化特征,继而优化参数进行离线训练,将分类器的结果进行误报和漏报率进行统计机算,最终用域下一次日志结果分类中。
通过长时间的观察和经验,发现误报的日志在一些特征值上有着明显的区别,比如该IP距离上次请求的时间间隔会比较大。那么根据我们提取出来的规则,我们会整理一份训练数据,包括漏报和误报日志样例,训练后的结果直接作为日志分类时的分类器。对判断为误报的日志则输出到管理控制台,人工确认后的结果,则继续作为样本优化分类器。
通过交换机流量镜像的方式,将流量镜像rabbit mq,并通过STORM去消费。STORM这块除了计算每条请求是否为攻击外,还会计算一些各种维度上的信息,总结出封堵的动态规则,发送至WAF module的REST接口,通过WAF来直接拦截,防止一些漏报和攻击绕过。
对WAF日志进行处理和统计,用到了spark的streaming和mllib。主要的逻辑为解析日志,计算特征值,根据统计学的SVM算法进行分类,尝试找出其中的误报日志,输出到管理控制台进行人工确认。而人工确认后的结果,会再次作为训练数据去训练分类器。
自动化的方向发展,比如:无人值守、自动加白、自动识别可疑访问。
大数据分析,前置分析:
基于storm对流量进行实时机算
更宽泛的规则策略
实时分数机算
可自动或手段与waf联动
闭环设计,日志处理:
supervised learning
误报率、漏报率
机器学习为辅、人工为主
大数据分析,后置学习:
基于spark stream、spark mllib
针对waf日志进行解析、分析、统计、学习
自动分析每日上百万日志中误报条目
人工确认结果作为训练数据输入