Web防护发展至今,现存的问题大多是疑难杂症,令人头秃……
除了以上场景,新型应用攻击频繁出现,传统WAF的误报、漏报率仍然偏高等问题也是难以破局的存在。
引入机器学习的业务建模思路,通过对特定的业务模式进行学习,辅助分析异常流量和业务本身的状态,能够为目前难以覆盖的场景问题带来不同视角的解决思路和方法,提高产品的综合防护能力。下面将分享长亭在业务建模过程中的探索与应用,让您科学而系统的认识长亭WAF的业务建模能力。
业务建模的防护实践
由下知上,先分析HTTP请求的结构
为了更好的完成建模,首先要完成底层的知识梳理,分析HTTP请求的组成结构。
1.HTTP 请求的第一行,包括请求的方法、路径、query、协议版本等。
2.HTTP 请求头,键值对一般有两类:常用标准请求头、自定义请求头。
3.HTTP 请求体,主要有五类:
万变不离其宗,业务建模的基本原则
1.充分利用先验知识明确建模问题的边界,把复杂问题划分为子问题。
2.改进利用数据驱动的方式建立具有良好泛化能力的模型。
两个角度出发,开始建模的第一步
在建模的众多场景和可能中,我们选取了以下两个角度:
1.结构的角度
对于特定的业务,请求都会有特定的结构,这些结构包括:
- 请求会传输什么样的参数
- 请求会包含什么请求头
- 请求体是什么格式,包括其中包含的参数
2.数据的角度
HTTP通信的主要目的是传输请求中包含的业务数据,如:query/form参数和其他类型的请求body内容等,这也是我们业务建模主要关注的角度。
我们对请求中发送的数据进行分类分析,包含:
追求最优解,模型的选择问题
通过综合分析并结合经验,我们选取了数据分布模型、HMM模型、向量化+单分类模型完成本次建模实践,下面对几种模型的使用场景与方法进行简单分析。
1.数据分布模型
数据分布模型包含数据长度分布、字符分布、泛化字符分布、原始字符串分布和泛化字符串分布等维度。
HTTP请求结构的某些组成部分的观测值在不同维度的数据分布上存在明显特征,举例看看:
A.弱特征简单数据在长度分布、字符分布、泛化字符分布的特征
如某个参数长度分布具有集中在10-20个字符区间内的特征。
(说明:一般为了减少误报,我们会将原始字符串进行泛化处理,如把数字类字符都映射到“1”上,字母类字符都映射到“a”上,中文字符也都映射到固定值等。)
B.可枚举性参数在原始字符串分布和泛化字符串分布的特征
如用type参数来表示的业务类型务,type的取值则有增、删、改、查四种,具有可枚举性特征。
(说明:枚举类型的参数值和部分请求头的值 (比如 UA) 都是常见的可枚举性数据,对于这类值,我们也可以建立数据分布模型。)
上述分布特征可以分两种情况进行计算。
A. 单个请求自身存在分布的情况
(说明:如某个参数的泛化字符分布,这类情景可以通过分布检验来计算待检测数据分布与训练样本统计分布的异常程度进行判别。)
B.多个请求统计得到整体分布
(说明:如符合枚举特性的参数值的整体分布、参数长度整体分布等,这类请求可以计算整体分布的标准差,对待检测数据选取特定倍数的标准差作为阈值进行判别。)
在测试实践中发现,数据分布模型容易得到比较好的召回率,但选取合适的阈值是关键。
2.HMM模型(隐马尔可夫模型)
弱特征简单数据的建模可以采用HMM模型,如大多数的请求参数、自定义Header等。
使用 HMM 需要注意两部分:
学习过程:根据采集的样本训练状态转移矩阵。
(说明:可以采用数据分布模型中提到的泛化方法来减少状态数,同时也能提高模型精度。)
判别过程:当状态转移矩阵训练完成后,根据训练样本得到一个概率阈值,将待检测数据作为新的观测样本,动态规划计算出概率后再与阈值比较判断。
3.向量化+单分类模型
这是从数据驱动的角度最直接容易想到的方法,单分类模型可以选用 SVDD算法,但此方法中数据的向量化是前提也是难点,将对建模效果起到决定性因素。
如何对数据进行向量化?
基于N-gram思想实现向量化是常见方法,但在业务建模的场景中明显存在一些问题。
(说明:比如 2-gram 配合降维算法,但在计算 N-gram 的过程中难免会损失整体特征,并且受限于特征维度,N的选取也不能太大 (一般选2为多)。在实际测试中证明基于此种方式的准确率和召回率并不理想。)
为了完善向量化逻辑,我们作出了一些改进,在雷池(SafeLine)语义分析引擎的基础上增加了用于业务建模的语义特征提取模块,引入了包括各类形式语言语义特征、编码特征、表达式特征等更具有整体性的特征,改进版的特征工程对 SVDD 的分类效果也起到了明显的提升。
终极目标,业务建模的应用
问题背景、原则、建模角度、算法模型均已就绪之后,我们开始进行业务建模实际应用部分的探讨。从结构和数据两个业务建模角度,主要应用思路如下:
1.请求结构模型的应用
请求结构模型主要包含请求参数组合和请求头组合两部分,具体来说就是 header、query、form、cookie 这些Key-Value数据的 Key集合。我们对每个请求样本计算这些Key的集合,然后对整体分布进行统计,用数据分布模型处理。
结合实践经验和领域知识,很多情况下这些结构分布比较固定,也可以考虑直接生成固定规则作为正常结构来对比判断请求。
2.请求数据模型的应用
首先确定数据类型,分析待建模数据是否存在编码、特定数据格式、强特征等属性,根据分析的结果采用下面的方法进行进一步处理。
(1)强特征简单数据
直接对强特征使用数据分布模型即可。
(2)弱特征简单数据
弱特征简单数据 (如长度有限、非二进制、无编码和数据格式等 )采用以下方式进行模型应用:
A.对数据的字符、长度等采用数据分布模型
B.对数据内容本身使用 HMM 和单分类模型
3.结构化数据
对于 JSON、XML、YAML、PHP 序列化数据等有特定数据格式的数据,模型的应用主要包含两步:
A.首先生成对应的 schema,对 schema 采用数据分布模型建模
B.对叶子节点数据,比如 JSON 的 string、XML 的 data 等,递归进行数据类型分析,并根据分析的结果继续递归处理。
4、编码类数据
对于存在 base64、URL 编码、HTML 实体编码等编码的数据,模型的应用主要包含两步:
A.对数据进行解码,对编码方式采用数据分布模型建模。
B.对解码之后的数据,以递归方式进行数据类型分析,并根据分析的结果继续递归处理。
- 1.自定义协议数据
对于文本类自定义协议数据,采用弱特征简单数据的建模方法进行建模。
(说明:自定义协议分析是一个值得单独研究课题,相关内容请大家期待后续的分享。)
- 2.复杂文本类数据
涉及复杂文本数据的业务,无法限制用户提交的内容,具备以下特点:
1.因内容没有明确的模式可寻,从内容和语义角度分析数据易出现误报。
(说明:如内容分享类平台,可能会提交包含代码的技术文章或者包含多种语言的外语短文。)
2.数据内容安全风险低。
(说明:这类业务提交的内容一般不会涉及到敏感逻辑或者影响到控制流,安全风险本身相对较低。)
综上,涉及复杂文本的建模优先级并不高,如果需要辅助分析一般从编码和字符集角度建立数据分布模型即可。
- 3.其他二进制数据
如加密业务等,这类业务目前没有直接通用的建模方法。
一个问题,如何减少脏数据的影响?
1.可与其他模块配合使用,如语义分析引擎、威胁情报等,排除掉恶意请求,以及黑IP相关请求等脏数据。
2.尽量保证足够的请求样本覆盖程度:如保证足够多的IP / session数,足够长的时间跨度。
3.结合数据分布模型排除边缘数据:如某个特征分布在n-sigma之外的数据。
能量积聚,应用效果硬核输出
雷池(SafeLine)下一代Web应用防火墙融合了业务建模后带来了能力升维:
业务自适应:全接口的流量作为输入,通过机器学习思路建立各个业务流量正常情况下的行为模型。
异常流量判断:根据模型设定允许的偏差度,进行异常流量的识别和判断,有效防护0 day漏洞、新型攻击。
模型自进化:在业务发生主动、被动的变化时可自动触发模型的重新学习,不断更新模型,持续贴合业务。
业务建模与智能语义分析引擎,威胁情报、主动BOT防护、可编程插件等能力融合构成了雷池(SafeLine)下一代web应用防火墙的综合能力,它集高性能、低漏报、低误报,0day防护、BOT管理、API防护能力于一身,适配包括本地机房、公/私有云、K8S在内的多种部署场景,不让黑客越雷池半步。
发表评论
您还未登录,请先登录。
登录