freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

从免费的WEB应用防火墙hihttps谈机器学习之生成对抗规则过程
2020-02-17 14:00:05

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)、二元语法(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的天下。

*本文原创作者:websecurity,本文属于FreeBuf原创奖励计划,未经许可禁止转载

# waf # 机器学习 # hihttps
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录