开源项目机器学习驱动的WEB应用防火墙
Posted MottoIN
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了开源项目机器学习驱动的WEB应用防火墙相关的知识,希望对你有一定的参考价值。
fWaf – Machine learning driven Web Application Firewall
GitHub:https://github.com/faizann24/Fwaf-Machine-Learning-driven-Web-Application-Firewall
文章目录:
1.数据集
2.训练
3.结果准确性
4.下一步
数据集:
首先要做的是寻找带有标记的数据,本项目中使用的是一些2010的数据,包含了数百万条HTTP查询日志,原数据来源于一个叫secrepo的站点,通过自己编写的一些脚本,对这些数据打上了安全标签。
修正好数据后,还需要收集一些恶意的查询,我想到的方法是从GitHub上收集一些包含XSS、SQL和其它攻击的Payloads,加上自己之前整理的,组成了恶意查询数据集。
通过上边的方法,我现在有了两个文件:一个是干净的WEB查询数据集(包含1000000条数据),一个是恶意的WEB查询数据集(包含50000条数据),这就是训练分类器所需的数据了。
训练:
关于机器学习的算法,我使用的是Logistic回归分析模型,它比较快速,这点对我的脾气。其实还可以使用SVM或神经网络,不过他们跟Logistic相比需要更多的时间。我们的问题是一个二进制分类问题,因为我们需要预测出来一个查询是恶意的还是正常的。这个项目选用了N-grames算法,N=3.
我们先直接嵌入代码:
加载数据集:
加载了goodqueries 和 badqueries。 接下来,使用主成分分析法(PCA)将这两类数据库可视化显示出来。如下图所示,红色表示坏的查询语料,蓝色表示好的查询语料。
可以看到,在不同的位置上,坏点(红点)和好点(蓝点)确实出现了。
接下来,我们使用Tfidvectorizer算法将数据转为tfidf值,然后使用我们的分类器进行训练。 之所以使用tfidf值,是因为我们要对ngrams参数赋予相应的权重,比如赋予 ‘<img ’ 一个较大的权重,因为如果一个查询中包含这个类型,很有可能是恶意的查询。浏览 http://www.tfidf.com 可以了解更多关于TFIDF的情况。
接下来让我们开始适用逻辑回归。
搞定!
结果准确性:
你一定很关心结果的准确性,对不对? 准确率99%,很神奇是不是。或许你还在怀疑,无图无真相,那我就实际的检查一些查询,看看模型是否能够准确的进行判别。结果如下:
下一步:
下一步要做什么呢? 这是一个业余项目,还有很多工作可以去完善它。比如,可以做多类别的分类检测恶意查询是否属于SQL注入、XSS或其他注入。我们可以收集一个更大的数据集,包含了所有类型的恶意查询,从而扩大了训练模型的范围使其可以检测到恶意查询的类型。您还可以把这个模型与WEB服务器关联起来。如果你做了这些工作,不妨和我交流一下。
GitHub:https://github.com/faizann24/Fwaf-Machine-Learning-driven-Web-Application-Firewall
【文章来源】
Fsecurify
*MottoIN小编翻译整理,接下来会陆续推出“机器学习与网络安全”为主题的相关文章,欢迎感兴趣的同学一起学习、交流。
*转载请注明来自MottoIN
【MottoIN原创文章奖励计划正在进行】
欢迎投稿,来信请寄root#mottoin.com
以上是关于开源项目机器学习驱动的WEB应用防火墙的主要内容,如果未能解决你的问题,请参考以下文章