过去整整5年了,学习心得。AiSEC全自动人工智能WAF防火墙[1],启动这个项目的时候,我刚刚工作不到1年,幸得隔级非直系领导A的赏识,推选我组团利用业余时间来做,不到一个星期,被最大的直系领导B叫停,因为白天工作时间也在参与项目的沟通。实际上领导A嗅探到这样的项目,在普通大学的AI和安全教学里都能推广的开,相当于帮大学开发了一套实验课程,里面有钱赚。
ailx10
网络安全优秀回答者
网络安全硕士
去咨询
虽然项目没有落地开发,但是当年我可是做了大量的技术沉淀,基本上独自一人实现了基于Nginx的AI-WAF引擎,并且还跑通了,由于时代久远,现在基本上已经忘记光了,不曾想,依然有人在看,所以整理了这篇文章,其实就是2块东西,核心代码在文章里,仅供参考。
一、XSS、SQL、PHP 威胁检测引擎向WAF模型中喂了10个样本,其中3条正常样本,4条XSS注入,2条SQL注入,1条PHP注入,WAF模型给我们吐出来4条XSS攻击样本和1条SQL注入样本,因为WAF模型只吐攻击,所以3条正常样本被WAF模型消化了。可以设想一下,在真实的互联网环境中一次喂食了10万条报文,WAF模型消化了9.99万条正常报文,吐出100条攻击报文,是不是美滋滋。[2]
数据准备,waf模型加载,分发器预测报文,返回攻击引擎收集字段 ,攻击引擎接收攻击引擎收集字段,预测报文,返回预测信息,反查攻击字段对应的攻击引擎,输出是否是攻击报文。这个版本中:干掉了样本标签赋值,自适应样本种类数量,atk引擎和classisfier引擎合并成waf引擎(主要修改),优化预测函数和反查函数,输出是攻击或正常。[3]
二、将Python引擎挂到Nginx模块中因为要做到nginx里面,所以考虑用C/C++来做桥梁,使用C/C++调用Python的waf_load和waf_predict,这里是从C/C++向Python传递参数,也就是向AI引擎传递参数。[4]Python向C/C++传出反查字典,C/C++解析反查字典,便于记录日志,也就是AI引擎将结果反馈回去。[5]在Nginx中开发一个自定义模块,称作AI-SEC模块,将Nginx的报文传递个AI引擎,AI引擎再将结果反馈给Nginx,但是遇到了一个问题,AI引擎里面的分发器在Nginx中跑不通。[6]于是我放弃了分发器,直接用机器学习的多分类SVM进行威胁检测,最终当Nginx保护的网站,收到攻击请求就403阻断,否则就放行。[7]
参考^AiSEC全自动人工智能WAF防火墙 https://zhuanlan.zhihu.com/p/58824626^基于机器学习的WAF模型探究1 https://zhuanlan.zhihu.com/p/49761276^基于机器学习的WAF模型探究2 https://zhuanlan.zhihu.com/p/50072389^基于机器学习的WAF模型探究3 https://zhuanlan.zhihu.com/p/50115539^基于机器学习的WAF模型探究4 https://zhuanlan.zhihu.com/p/50374510^基于机器学习的WAF模型探究5 https://zhuanlan.zhihu.com/p/50930419^基于机器学习的WAF模型探究6 https://zhuanlan.zhihu.com/p/51061235