WAF强固之盾:机器学习赋能下的语义分析
WAF 中,传统的基于正则的检测方法依赖正则的运营更新,以不断防护新的攻击方法;
主要流程为:HTTP包 -> payload解码 -> 正则匹配
但是,攻击者可以通过修改攻击载荷、使用编码技术、绕过常规规则等方式来规避正则表达式的检测,同时传统正则匹配也有上下文长度的限制;
因此,采用语义分析和机器学习结合的方式能够增强攻击检测能力,并预防一些未出现过的攻击类型;
先从语义分析角度入手,其主要流程为
HTTP包 -> payload词法分析 -> payload语法分析 -> 检测评分
和基于正则匹配的检测方法,主要区别在于:
- payload词法分析:以词法状态机的形式,从预处理后的token流中,识别出有独立意义的单元序列,如关键字、标识符、运算符、常量和分隔符等;
- payload语法分析:将词法单元序列,按照语法规则进行组织和解释,构建出抽象语法树AST;
- 构造出AST后,对抽象语法树进行遍历,进行类型检查、符号表管理、作用域规则检查等操作,以验证合法性并进行评分;
可见,相较于以往“粗暴”的正则匹配方法,语义分析能够挖掘出攻击背后的实际意义,拦截能力更强并减少误报(如粗暴拦截select关键字等正则);
在此基础上,可以将语义分析的特征和payload原始特征结合起来,构建机器学习模型,进一步检测攻击;这使得模型可以关注更全面的信息,同时利用原始特征(关键字)和语义特征(语法);
对于针对WAF场景的机器学习模型,可以考虑 Word2Vec + Classification 的模式构建,具体来说:
- Word2Vec 将 payload token 序列转为 number 序列,供分类模型学习,模型的学习可以用 n-gram 等经典算法实现,构建具有“相近语义则序号相近”特征的词典;
- Classification 分类模型可以使用如 SVM 等经典算法实现,并且使用 boost 等方式进行优化训练;
- Word2Vec 和 Classification 模型是分离的,可以基于大量无标签数据训练一个语义丰富的 Word2Vec,而滚动更新 Classification 模型的训练;
https://github.com/li-car-fei/WAF-AI