基于机器学习的web异常检测——基于HMM的状态序列建模,将原始数据转化为状态机表示,然后求解概率判断异常与否

本文涉及的产品
云防火墙,500元 1000GB
简介:

基于机器学习的web异常检测

from: https://jaq.alibaba.com/community/art/show?articleid=746

Web防火墙是信息安全的第一道防线。随着网络技术的快速更新,新的黑客技术也层出不穷,为传统规则防火墙带来了挑战。传统web入侵检测技术通过维护规则集对入侵访问进行拦截。一方面,硬规则在灵活的黑客面前,很容易被绕过,且基于以往知识的规则集难以应对0day攻击;另一方面,攻防对抗水涨船高,防守方规则的构造和维护门槛高、成本大。


基于机器学习技术的新一代web入侵检测技术有望弥补传统规则集方法的不足,为web对抗的防守端带来新的发展和突破。机器学习方法能够基于大量数据进行自动化学习和训练,已经在图像、语音、自然语言处理等方面广泛应用。然而,机器学习应用于web入侵检测也存在挑战,其中最大的困难就是标签数据的缺乏。尽管有大量的正常访问流量数据,但web入侵样本稀少,且变化多样,对模型的学习和训练造成困难。因此,目前大多数web入侵检测都是基于无监督的方法,针对大量正常日志建立模型(Profile),而与正常流量不符的则被识别为异常。这个思路与拦截规则的构造恰恰相反。拦截规则意在识别入侵行为,因而需要在对抗中“随机应变”;而基于profile的方法旨在建模正常流量,在对抗中“以不变应万变”,且更难被绕过。


基于异常检测的web入侵识别,训练阶段通常需要针对每个url,基于大量正常样本,抽象出能够描述样本集的统计学或机器学习模型(Profile)。检测阶段,通过判断web访问是否与Profile相符,来识别异常。



对于Profile的建立,主要有以下几种思路:

1. 基于统计学习模型

基于统计学习的web异常检测,通常需要对正常流量进行数值化的特征提取和分析。特征例如,URL参数个数、参数值长度的均值和方差、参数字符分布、URL的访问频率等等。接着,通过对大量样本进行特征分布统计,建立数学模型,进而通过统计学方法进行异常检测。


2. 基于文本分析的机器学习模型

Web异常检测归根结底还是基于日志文本的分析,因而可以借鉴NLP中的一些方法思路,进行文本分析建模。这其中,比较成功的是基于隐马尔科夫模型(HMM)的参数值异常检测


3. 基于单分类模型

由于web入侵黑样本稀少,传统监督学习方法难以训练。基于白样本的异常检测,可以通过非监督或单分类模型进行样本学习,构造能够充分表达白样本的最小模型作为Profile,实现异常检测。


4. 基于聚类模型

通常正常流量是大量重复性存在的,而入侵行为则极为稀少。因此,通过web访问的聚类分析,可以识别大量正常行为之外,小搓的异常行为,进行入侵发现。


基于统计学习模型

基于统计学习模型的方法,首先要对数据建立特征集,然后对每个特征进行统计建模。对于测试样本,首先计算每个特征的异常程度,再通过模型对异常值进行融合打分,作为最终异常检测判断依据。

这里以斯坦福大学CS259D: Data Mining for CyberSecurity课程[1]为例,介绍一些行之有效的特征和异常检测方法。


特征1:参数值value长度

模型:长度值分布,均值μ,方差σ2,利用切比雪夫不等式计算异常值p


特征2:字符分布

模型:对字符分布建立模型,通过卡方检验计算异常值p


特征3:参数缺失

模型:建立参数表,通过查表检测参数错误或缺失

 

特征4:参数顺序

模型:参数顺序有向图,判断是否有违规顺序关系


特征5:访问频率(单ip的访问频率,总访问频率)

模型:时段内访问频率分布,均值μ,方差σ2,利用切比雪夫不等式计算异常值p


特征6:访问时间间隔

模型:间隔时间分布,通过卡方检验计算异常值p


最终,通过异常打分模型将多个特征异常值融合,得到最终异常打分:

 

基于文本分析的机器学习模型

URL参数输入的背后,是后台代码的解析,通常来说,每个参数的取值都有一个范围,其允许的输入也具有一定模式。比如下面这个例子:


例子中,绿色的代表正常流量,红色的代表异常流量。由于异常流量和正常流量在参数、取值长度、字符分布上都很相似,基于上述特征统计的方式难以识别。进一步看,正常流量尽管每个都不相同,但有共同的模式,而异常流量并不符合。在这个例子中,符合取值的样本模式为:数字_字母_数字,我们可以用一个状态机来表达合法的取值范围:


对文本序列模式的建模,相比较数值特征而言,更加准确可靠。其中,比较成功的应用是基于隐马尔科夫模型(HMM)的序列建模,这里仅做简单的介绍,具体请参考推荐文章[2]。


基于HMM的状态序列建模,首先将原始数据转化为状态表示,比如数字用N表示状态,字母用a表示状态,其他字符保持不变。这一步也可以看做是原始数据的归一化(Normalization),其结果使得原始数据的状态空间被有效压缩,正常样本间的差距也进一步减小。


紧接着,对于每个状态,统计之后一个状态的概率分布。例如,下图就是一个可能得到的结果。“^”代表开始符号,由于白样本中都是数字开头,起始符号(状态^)转移到数字(状态N)的概率是1;接下来,数字(状态N)的下一个状态,有0.8的概率还是数字(状态N),有0.1的概率转移到下划线,有0.1的概率转移到结束符(状态$),以此类推。


利用这个状态转移模型,我们就可以判断一个输入序列是否符合白样本的模式:


正常样本的状态序列出现概率要高于异常样本,通过合适的阈值可以进行异常识别。


基于单分类模型

在二分类问题中,由于我们只有大量白样本,可以考虑通过单分类模型,学习单类样本的最小边界,边界之外的则识别为异常。


这类方法中,比较成功的应用是单类支持向量机(one-class SVM)。这里简单介绍该类方法的一个成功案例McPAD的思路,具体方法关注文章[3]。


McPAD系统首先通过N-Gram将文本数据向量化,对于下面的例子,


首先通过长度为N的滑动窗口将文本分割为N-Gram序列,例子中,N取2,窗口滑动步长为1,可以得到如下N-Gram序列。


下一步要把N-Gram序列转化成向量。假设共有256种不同的字符,那么会得到256*256种2-GRAM的组合(如aa, ab, ac … )。我们可以用一个256*256长的向量,每一位one-hot的表示(有则置1,没有则置0)文本中是否出现了该2-GRAM。由此得到一个256*256长的0/1向量。进一步,对于每个出现的2-Gram,我们用这个2-Gram在文本中出现的频率来替代单调的“1”,以表示更多的信息:

 

至此,每个文本都可以通过一个256*256长的向量表示。


现在我们得到了训练样本的256*256向量集,现在需要通过单分类SVM去找到最小边界。然而问题在于,样本的维度太高,会对训练造成困难。我们还需要再解决一个问题:如何缩减特征维度。特征维度约减有很多成熟的方法,McPAD系统中对特征进行了聚类达到降维目的。


上左矩阵中黑色表示0,红色表示非零。矩阵的每一行,代表一个输入文本(sample)中具有哪些2-Gram。如果换一个角度来看这个矩阵,则每一列代表一个2-Gram有哪些sample中存在,由此,每个2-Gram也能通过sample的向量表达。从这个角度我们可以获得2-Gram的相关性。对于2-Gram的向量进行聚类,指定的类别数K即为约减后的特征维数。约减后的特征向量,再投入单类SVM进行进一步模型训练。

 

再进一步,McPAD采用线性特征约减加单分类SVM的方法解决白模型训练的过程,其实也可以被深度学习中的深度自编码模型替代,进行非线性特征约减。同时,自编码模型的训练过程本身就是学习训练样本的压缩表达,通过给定输入的重建误差,就可以判断输入样本是否与模型相符。

 

我们还是沿用McPAD通过2-Gram实现文本向量化的方法,直接将向量输入到深度自编码模型,进行训练。测试阶段,通过计算重建误差作为异常检测的标准。


基于这样的框架,异常检测的基本流程如下,一个更加完善的框架可以参见文献[4]。

 

 

本文管中窥豹式的介绍了机器学习用于web异常检测的几个思路。web流量异常检测只是web入侵检测中的一环,用于从海量日志中捞出少量的“可疑”行为,但是这个“少量”还是存在大量误报,只能用于检测,还远远不能直接用于WAF直接拦截。一个完备的web入侵检测系统,还需要在此基础上进行入侵行为识别,以及告警降误报等环节。

推荐阅读

1. CS259D: Data Mining for CyberSecurity, 课程网址:http://web.stanford.edu/class/cs259d/

2. 楚安,数据科学在Web威胁感知中的应用,http://www.jianshu.com/p/942d1beb7fdd

3. McPAD : A Multiple Classifier System for Accurate Payload-based Anomaly Detection, Roberto Perdisci

4. AI2 : Training a big data machine to defend, Kalyan Veeramachaneni












本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/bonelee/p/7777217.html,如需转载请自行联系原作者


相关文章
|
13天前
|
机器学习/深度学习 存储 设计模式
特征时序化建模:基于特征缓慢变化维度历史追踪的机器学习模型性能优化方法
本文探讨了数据基础设施设计中常见的一个问题:数据仓库或数据湖仓中的表格缺乏构建高性能机器学习模型所需的历史记录,导致模型性能受限。为解决这一问题,文章介绍了缓慢变化维度(SCD)技术,特别是Type II类型的应用。通过SCD,可以有效追踪维度表的历史变更,确保模型训练数据包含完整的时序信息,从而提升预测准确性。文章还从数据工程师、数据科学家和产品经理的不同视角提供了实施建议,强调历史数据追踪对提升模型性能和业务洞察的重要性,并建议采用渐进式策略逐步引入SCD设计模式。
26 8
特征时序化建模:基于特征缓慢变化维度历史追踪的机器学习模型性能优化方法
|
6天前
|
机器学习/深度学习 数据采集 JSON
Pandas数据应用:机器学习预处理
本文介绍如何使用Pandas进行机器学习数据预处理,涵盖数据加载、缺失值处理、类型转换、标准化与归一化及分类变量编码等内容。常见问题包括文件路径错误、编码不正确、数据类型不符、缺失值处理不当等。通过代码案例详细解释每一步骤,并提供解决方案,确保数据质量,提升模型性能。
123 88
|
11天前
|
机器学习/深度学习 数据采集 算法
机器学习在生物信息学中的创新应用:解锁生物数据的奥秘
机器学习在生物信息学中的创新应用:解锁生物数据的奥秘
108 36
|
18天前
|
机器学习/深度学习 人工智能
Diff-Instruct:指导任意生成模型训练的通用框架,无需额外训练数据即可提升生成质量
Diff-Instruct 是一种从预训练扩散模型中迁移知识的通用框架,通过最小化积分Kullback-Leibler散度,指导其他生成模型的训练,提升生成性能。
46 11
Diff-Instruct:指导任意生成模型训练的通用框架,无需额外训练数据即可提升生成质量
|
12天前
|
人工智能 Kubernetes Cloud Native
跨越鸿沟:PAI-DSW 支持动态数据挂载新体验
本文讲述了如何在 PAI-DSW 中集成和利用 Fluid 框架,以及通过动态挂载技术实现 OSS 等存储介质上数据集的快速接入和管理。通过案例演示,进一步展示了动态挂载功能的实际应用效果和优势。
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
模型训练数据-MinerU一款Pdf转Markdown软件
MinerU是由上海人工智能实验室OpenDataLab团队开发的开源智能数据提取工具,专长于复杂PDF文档的高效解析与提取。它能够将含有图片、公式、表格等多模态内容的PDF文档转化为Markdown格式,同时支持从网页和电子书中提取内容,显著提升了AI语料准备的效率。MinerU具备高精度的PDF模型解析工具链,能自动识别乱码,保留文档结构,并将公式转换为LaTeX格式,广泛适用于学术、财务、法律等领域。
223 4
|
2月前
|
机器学习/深度学习 数据采集 数据处理
谷歌提出视觉记忆方法,让大模型训练数据更灵活
谷歌研究人员提出了一种名为“视觉记忆”的方法,结合了深度神经网络的表示能力和数据库的灵活性。该方法将图像分类任务分为图像相似性和搜索两部分,支持灵活添加和删除数据、可解释的决策机制以及大规模数据处理能力。实验结果显示,该方法在多个数据集上取得了优异的性能,如在ImageNet上实现88.5%的top-1准确率。尽管有依赖预训练模型等限制,但视觉记忆为深度学习提供了新的思路。
43 2
|
3月前
|
机器学习/深度学习 缓存 监控
利用机器学习优化Web性能和用户体验
【10月更文挑战第16天】本文探讨了如何利用机器学习技术优化Web性能和用户体验。通过分析用户行为和性能数据,机器学习可以实现动态资源优化、预测性缓存、性能瓶颈检测和自适应用户体验。文章还介绍了实施步骤和实战技巧,帮助开发者更有效地提升Web应用的速度和用户满意度。
|
3月前
|
机器学习/深度学习 存储 人工智能
揭秘机器学习背后的神秘力量:如何高效收集数据,让AI更懂你?
【10月更文挑战第12天】在数据驱动的时代,机器学习广泛应用,从智能推荐到自动驾驶。本文以电商平台个性化推荐系统为例,探讨数据收集方法,包括明确数据需求、选择数据来源、编写代码自动化收集、数据清洗与预处理及特征工程,最终完成数据的训练集和测试集划分,为模型训练奠定基础。
98 3
|
3月前
|
机器学习/深度学习 算法 Python
“探秘机器学习的幕后英雄:梯度下降——如何在数据的海洋中寻找那枚失落的钥匙?”
【10月更文挑战第11天】梯度下降是机器学习和深度学习中的核心优化算法,用于最小化损失函数,找到最优参数。通过计算损失函数的梯度,算法沿着负梯度方向更新参数,逐步逼近最小值。常见的变种包括批量梯度下降、随机梯度下降和小批量梯度下降,各有优缺点。示例代码展示了如何用Python和NumPy实现简单的线性回归模型训练。掌握梯度下降有助于深入理解模型优化机制。
47 2