从免费的WEB应用防火墙hihttps谈机器学习之生成对抗规则过程

hihttps是一款免费的web应用防火墙,既支持传统WAF的所有功能如SQL注入、XSS、恶意漏洞扫描、密码暴力破解、CC、DDOS等,又支持无监督机器学习,自主对抗,重新定义web安全。

今天笔者就从web安全的角度,介绍hihttps怎样通过机器学习自动生成对抗规则的5个过程:

一、样本采集

和图形图像的人工智能一样,机器学习无论是有监督还是无监督,第一步都是先采集样本。web安全有先天性的样本采集优势,成本几乎为0,方法是:通过反向代理的模式采集完整的HTTP协议数据,可以参考hihttps源码https://github.com/qq4108863/hihttps/ ,样本要求如下:

1、足够的随机化,在不同的IP地址之间随机采集。

2、足够多的样本,保证99.99%的正确率,至少需要采集数万份的样本。

3、足够的时间,至少在不同的时间段采集3-7天的样本。

4、尽量是正常流量下采集,减少样本没有被黑客攻击污染的可能性。

5、完整的数据,样本包括全部的HTTP 请求头和body。

基于机器学习的web应用防火墙hiihttp是怎样工作的呢?比如有个网站接口,在正常情况是通过http://www.hihttps.com/hihttps?id=xxx&token=xxx的形式访问,hihttps先把采集到样本如URL参数,保存在train训练目录下,样本文件主要内容如下:

GET /hihttps?id=123&token=2458-a632-3d56-a9bf

GET /hihttps?id=238&token=ce58-a49d-b767-68ed

GET /hihttps?id=523&token=2bd8-c4d2-d324-29b3

GET /hihttps?id=abc&token=2bd8-c4d2-d324-29b3

GET /hihttps?id=abc%20’or 1=1’

……

当采集到的样本数量,达到一定数量(如1万),hihttps机器学习引擎就开始启动,第一步就是滤噪。

二、 滤噪

在正常的情况下,拿到的样本绝大多数是大量重复性存在的,但是也不排除样本存在黑客攻击,也就是说,个别样本可能已经被污染了,hihttps在降维和特征提取之前先过滤。

滤噪的方法通常是用聚类方法,把样本分为两类,把其中小于3%的样本去掉,通常有以下几种做法:

1:URL参数过滤。比如正常情况下是/hihttps?id=xxx&token=xxx,那么如果有小于1%的/hihttps?sql=xxx,那么就要过滤这条样本。

2:URL长度过滤。一般来说,URL长度值分布,均值μ,方差σ3,在切比雪夫不等式范围外,要过滤掉。

3:参数值长度过滤。一般来说,参数如tolken=xxx,其中xxx的长度值分布,均值μ,方差σ3,在切比雪夫不等式范围外,要过滤掉。

4:SQL注入过滤。用libinjection库查一遍,符合SQL注入特征的样本要过滤。

5:XSS攻击过滤。用libinjection库查一遍,符合XSS特征的样本要过滤。

6:其他已知攻击过滤。如ModSecurity 的OWASP规则很牛,先跑一遍过滤。

经过滤噪处理后,我们把样本就分为正常和异常样本,正常的如下:

GET /hihttps?id=123&token=2458-a632-3d56-a9bf

GET /hihttps?id=238&token=ce58-a49d-b767-68ed

GET /hihttps?id=523&token=2bd8-c4d2-d324-29b3

GET /hihttps?id=abc&token=2bd8-c4d2-d324-29b3

 …..

少数异常样本,如疑似SQL注入攻击则去掉

GET /hihttps?id=abc%20’or 1=1’

……

整个过程,无监督进行,可以用到的数学算法有K均值(K-Mean)、主成分分析PCA、切比雪夫不等式、高斯混合模型GMM、稀疏矩阵……

具体的算法源码可以参考https://github.com/qq4108863/AI

三、 降维

滤噪后最重要的一步就是降维,这是机器学习的核心。降维就是通过特定的数学算法,把复杂的东西,用特征表达向量,变为机器可以理解的东东,降维方法分为线性降维(PCA 、ICA LDA、LFA、LPP等)和非线性降维KPCA 、KICA、KDA、ISOMAP、LLE、LE、LPP、LTSA、MVU等)。

怎么让机器理解/hihttps?id=abc%20’or 1=1’这就是一条攻击呢?在web安全领域和图形图像完全不同,主要就是涉及自然语言处理,尤其是文本的识别,主要有下面几种模型:

1、词袋模型

文本的降维本质上涉及到了文本的表达形式。在传统的词袋模型当中,对于每一个词采用one-hot稀疏编码的形式,假设目标语料中共有N个唯一确认的词,那么需要一个长度N的词典,词典的每一个位置表达了文本中出现的某一个词。在某一种特征表达下,比如词频、binary、tf-idf等,可以将任意词,或者文本表达在一个N维的向量空间里。凭借该向量空间的表达,可以使用机器学习算法,进行后续任务处理。

这种方式被称为n-gram语法,指文本中连续出现的n个语词。当n分别为1、2、3时,又分别称为一元语法(unigram)、 *本文原创作者:websecurity,本文属于FreeBuf原创奖励计划,未经许可禁止转载