Press "Enter" to skip to content

从免费的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 库查一遍,符合 SQL 注入特征的样本要过滤。

 

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 )、 二元语法 ( bigram )与三元语法( trigram )。

 

2 、维度选择方法

 

常用的有卡方、互信息这种统计检验的方法;还有借助机器学习模型降维的方法。比如,使用随机森林,或者逻辑回归等模型,筛选出那些在分类任务中具有较大特征重要性,或者系数绝对值较大的 TOP 特征作为降维后的特征集合。

 

3 、主题模型

 

主题模型同时具备了降维和语义表达的效果,比如 LSI 、 LDA 、 PLSA 、 HDP 等统计主题模型,这些模型寻求文本在低维空间(不同主题上)的表达,在降低维度的同时,尽可能保留原有文本的语义信息。

 

4 、神经网络

 

如卷积神经 CNN 、循环神经 RNN 等。

 

理论可能有点复杂,那我们直接拿 4 条样本来举例说明吧:

 

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

 

…..

 

降维的目的就是为了让机器能够理解 id 是什幺, token 又是什幺,什幺情况是攻击。我们先来定义一些稀疏编码:

 

N :整数, 0-9

 

C :字符, a-z

 

X: 16 进制数字, 0-9 a-f

 

D: 标点分隔符 .-|

 

……..

 

GET /hihttps?id= 123 &token=2458-a632-3d56-a9bf 这种我们就用稀疏编码把其维度降为 id= N&token=XDXDXDX ,这样机器就可能理解了,哦,原来 id 就是数字嘛。

 

当然这是最简单的情况,实际场景可能很复杂,比如 10.1 究竟是代表数字?或者钱?或者版本号呢?就需要做更多的参数关联运算(如 money=xx 或者 version=xx )。如果我们观察到的样本,大于 99.9% 的参数 id= 都是数字,就可以认为 GET /hihttps?id=abc 就是一条非法攻击,这就是机器学习能够检测未知攻击的核心原理。

 

实际生产环境中情况更复杂的,所以让机器达到网络专家的智能水平,还有很长的路要走,但这是必然的发展方向。

 

四、特征提取

 

下一步, hihttps 就是对正常流量进行数值化的特征提取和分析。通过对大量样本进行特征分布统计,建立数学模型,特征提取包括: URL 参数个数、参数值长度的均值和方差、参数字符分布、 URL 的访问频率等等。如下表所示:

 

类别 序号 特征名称 特征描述
语法特征 1 URL_len URL 长度
2 Path_len 路径长度
3 Path 路径最大长度
4 Path_Maxlen 路径平均长度
5 Argument_len 参数部分长度
6 Name_Max_len 参数名最大长度
7 Name_Avglen 参数名平均长度
8 Value_Max_len 参数值最大长度
9 Value_Avg_len 参数值平均长度
10 Argument_len 参数个数
11 String_Max_len 字符串最大长度
12 Number_Maxlen 连续数字最大长度
13 Path_number 路径中的数字个数
14 Unknow_len 特殊字符的个数
15 Number_Percentage 参数值中数字占有比例
16 String_Percentage 参数值字母占有比例
17 Unkown_Percentage 参数值中特殊字符的比例
18 BigString_Percentage 大写字符所占比例
19 Spacing_Precentage 空格字符所占比例
领域特征 19 ContainIP 参数值是否包含 IP
20 Sql_Risk_level SQL 类型危险等级
21 Xss_Risk_level Xss 类型危险等级
22 Others_Risk_level 其他类型危险等级

 

五、生成对抗规则

 

最后 hihttps 通过大量的样本采集 ,精确给这个 /hihttps?id=xxx&token=xxx 接口参数,生成对抗规则,保存在 rule 目录下,和传统 WAF 的 ModSecurity 的 OWASP 规则放在一起,保护网站不被攻击。

 

下面的一律视为攻击,只有机器学习才有可能检测未知攻击,这是网络安全专家也难以做到的。

 

GET /hihttps?id=123    参数缺失

 

GET /hihttps?id=abc&token=2458-a632-3d56-a9bf   id 参数不对

 

GET /hihttps?admin=%0acdef         未知攻击

 

……..

 

最后总结如下:

 

1 、整个过程完全是无监督的机器学习,有些特殊的参数,也可以由网络安全专家人为干预半监督,从而从 99.9% 到 100% 准确率的进化。

 

2 、传统的 waf 规则很难对付未知漏洞和未知攻击。让机器像人一样学习,具有一定智能自动对抗 APT 攻击或许是唯一有效途径,但黑客技术本身就是人类最顶尖智力的较量, WEB 安全仍然任重而道远。

 

3 、幸好 hihttps 这类免费的应用防火墙在机器学习、自主对抗中开了很好一个头,未来 web 安全很可能是特征工程 + 机器学习共同完成,未来 WEB 安全必然是 AI 的天下。

 

本文作者:神经蛙

Be First to Comment

发表评论

电子邮件地址不会被公开。 必填项已用*标注