职场文秘网

首页 > 心得体会 > 学习材料 / 正文

基于隐马尔可夫模型的SQL注入攻击行为检测

2023-05-11 19:15:03

朱静雯 许 静 陈 亮 李 洁

1(南开大学软件学院 天津 300350) 2(南开大学人工智能学院 天津 300350) 3(国网天津市电力公司电力科学研究院 天津 300384)

如今软件发展迅速,迭代频率高,由于网络安全意识不够,导致很大一部分开发者在编写程序过程中未考虑对SQL注入攻击(Structure Query Language Injection Attack,SQLIA)的防范。据OWASP[1](Open Web Application Security Project)统计,近几年SQL注入漏洞的威胁稳居第一,如果恶意用户针对Web系统进行SQL注入攻击,若是攻击成功一定程度上会造成很大危害。另外,对于攻击进行及时的检测分析,可以在Web系统中有效定位和挖掘到漏洞位置,从而为后期的修复和防御打下基础。恶意攻击者在Web系统中留下的网络日志可被用来识别其攻击行为。

检测SQL注入攻击的一种有效方法是研究用户的行为意图,而基于日志研究用户的点击行为模型的难点主要体现在:(1) 对于一个复杂的或者动态网页,请求中可能嵌套了多个广告或者信息组合模块,导致日志冗余量大,难于处理;
(2) 浏览器的多线程并发可以导致同一用户的日志记录被交织和混乱,基于单条记录的行为模式匹配将受到影响;
(3) 防火墙过滤和代理模式影响了日志采集的完整性,使得用户连续点击行为意图的还原受到阻碍。

当前国内外对于SQL注入攻击的检测方法中,静态模式匹配的做法[2-4]较为常见。其他检测方法如污点跟踪,原理是对用户的输入进行判断、标记和转换,然后监督这段字符串结构是否改变或者是否被当作额外的查询语句执行。对于动态规则检测方法[5-6],赵宇飞等[5]从网络流量检测的角度,提出了针对SQL注入的LFF检测方法。LEF检测方法利用流量趋势可以匹配到未知类型的产生数据流的SQL注入攻击。但也因此受到了流量特征限制,不太适用于经验丰富的攻击者和数据规格较小的情况,尤其是在进行了流量控制的信息系统中更为明显。也有很多研究思路是围绕攻击者的行为展开的。将马尔可夫模型用于用户行为模式分析[7-8]、入侵者的建模[9]和行为预测[10],从而发现Web攻击行为。马兰等[11]提出了一种基于隐半马尔可夫模型(Hidden simi-Markov Model,HSMM)的SWIM应用层DDoS攻击的检测方法,利用HSMM建立动态异常检测模型动态地追踪正常SWIM用户的浏览行为,以访问包的大小和请求时间间隔为特征进行建模,并训练模型进行异常检测,结果表明所提方法可有效地检测DDoS攻击。朱骊安[12]用隐马尔可夫模型建立Web参数模型,检测注入类的Web攻击,并用于实际案例分析,取得了较高的准确率。韦炜等[13]提出一种新的多阶马尔可夫预测推荐算法,该算法通过学习用户历史行为数据,以及分析用户浏览行为特征,达到预测用户浏览行为的目的。

在Web应用攻击场景中,尤其是对于SQL注入等需要注入代码至攻击入口的攻击类型中,攻击者需要遍历网站及参数,会多次连接服务器,并在单位时间内会产生大量连接和页面跳转,并且需要发送大量的探测攻击载荷及漏洞利用脚本,而常规用户往往更加关注网站内容及功能,因而两者对于登陆或输入框等攻击入口的访问频率、停留时间和跳转行为与普通用户存在着较大差异[1,5,12-13]。在系统用户访问操作日志中,记录了大量用户行为数据,因此可以从日志中发现用户浏览行为的异常,对频发的入口页面的访问进行判断。本文通过行为分析方法,基于自定义日志,提出一种利用隐马尔可夫模型HMM进行SQL注入攻击自动检测的方法。该方法与其他攻击检测方法不同,不仅对SQL注入关键词进行检测和分析,同时进一步通过隐马尔可夫模型深入分析系统用户行为的异常,从而在发生异常初期及时判断访问路径的偏离程度。该方法可利用隐马尔可夫模型对隐状态的还原能力,完整地还原用户的浏览轨迹,从而识别攻击用户并发现潜在的SQL注入攻击威胁。

1.1 用户行为建模

典型的Web系统网站的结构不仅包括页面之间的关联,也包括页面内容的布局和各种链接的类型。用户的每次点击行为都会发出HTTP请求,这些细节会被详细记录在日志中。

本文以Web系统Iwebshop为目标网站进行示例分析和检测实验。图1是Iwebshop首页的整体结构框架,包括下拉菜单、搜索栏、轮播图和类别导航等模块,其中a、b、c分别表示该网页中的三类主要的链接类型。同一个列表区域中的超链接项视作同一类型,若多个列表属于相同功能的并列关系,则也看作是同一链接类型。

图1 Iwebshop结构图

在示例网站中,针对攻击需求增加了相应的漏洞入口,以自定义日志的格式记录下用户的访问浏览行为,其中部分用户的访问行为包含攻击操作。日志源格式主要包括两部分:来源于Apache服务器生成的日志和使用JavaScript捕捉的用户点击超链接生成的自定义txt日志。

通过对用户访问行为进行记录并从时间轴角度分析日志,发现每条日志都是针对一个对象(Object)的HTTP请求。对象请求序列如图2所示,标记为O={O1,O2,…,Ot}。如果连续的请求对象属于同一页面,则定义这一段连续的HTTP请求为某个页面P的一次请求。在HMM模型中,这样的一组请求对应一个特定的状态S。在实际操作中,用户的一次具体的点击操作便会引发一组目标页面的网络请求。该点击操作所在的页面可能包含着循环展示等多个功能模块,所以该请求会引起一系列被动和嵌套的网络请求。这一组请求在时间和内容上发生聚集。因此用户在浏览器端的点击过程即可对应到HMM模型的状态转换过程。此处用aij来表示状态Si到状态Sj的一次迁移。

图2 用户点击行为模型

用户的有效点击对象往往是超链接。有效点击会导致页面之间的跳转或页面内状态的改变。对于一个特定的页面,根据功能和位置的不同将有效超链接划分为几种类型,而每种类型的超链接点击事件对应该页面(也就是该状态)的一次有效输出。因此用户的点击过程就可以被定义为HMM的输出过程,如图3所示。在客户端进行检测和分析时,只需要捕捉定义后的输出值即可。对于一个给定的输出,可以经过模型推导,找出对应的隐含状态,即该链接类型所在的页面。至此,将用户浏览系统的过程通过建模对应到了HMM模型的状态转换和值输出的过程中。

图3 用户点击输出模型

1.2 用户行为HMM模型构建

隐马尔可夫模型是一个双重马尔可夫过程,由可见的输出层和隐藏的状态层组成。实际观察到的输出序列被用于识别分析,在某个状态的输出值具有随机性;
隐藏的状态序列是一条受到状态转移概率影响的马尔可夫链。

在本文中通过三元组λ=(A,B,π)来表示一个隐马尔可夫模型:其中:A表示隐含状态转移概率矩阵,B表示观测状态转移概率矩阵,π表示初始状态概率矩阵。关键数据源可能包括页面间的跳转概率矩阵A、在各个页面点击不同类型超链接的状态转移概率矩阵B和初始概率矩阵π。其中,初始概率矩阵π体现的特征是网站初始状态为首页,是必经入口,而两种状态转移矩阵A和B的值是统计大量用户访问行为得出。

马尔可夫模型方法的缺点是当系统复杂度和规模变大时,状态数量的骤增造成对结果图表的计算会相当复杂和困难[14]。因此选择页面建立状态时,页面数量应在相对合适的范围内。

HMM模型通过设置初始状态转换概率矩阵和状态的不同输出值的概率矩阵,可从给定的输出值序列推断出可能的状态转换序列。利用HMM模型对隐状态的描述能力,分析日志记录中的链接类型并反向推测这些记录对应的页面类型。在捕捉完整的用户点击链的前提下,HMM模型的这种逆向还原能力弥补了部分缺失日志记录的不足。

针对HMM模型特点,本文将所有的独立页面定义为状态,组成的集合映射为HMM模型中的状态集。页面之间共用了一些重要组件,但是页面地址URL中的controller值是根据所实现的功能定义的。页面内不同链接类型定义为在某个页面或状态的输出值,即用户点击一个链接,就完成了在某个状态的一次值的输出。

根据Web系统的结构,按照一定顺序定义网页名称和ID,然后为页面指定状态ID,如表1所示。“page_ID”字段对应日志记录中的controller值。此处定义状态集S={s1,s2,…,sn},n=17。

表1 状态-页面关联表

基于上文所建立的用户行为隐马尔可夫模型,本文通过自定义日志和行为分析技术,提出了一种SQL注入攻击行为检测方法,其整体的实现流程如图4所示。首先,获取Web系统用户浏览日志并判断是否为正常的训练数据。如果是正常训练数据,则根据可达性概率矩阵和链接类型表进行网站建模,并进行隐马尔可夫模型的训练;
接下来进行用户行为轨迹的逆向还原,如果不是训练数据,则表明已经是训练好的数据,那么则直接进行行为逆向还原。最终基于行为概率分析进行行为单元的分析,并最终判断用户行为是否包含SQL注入攻击。

图4 本文所述方法整体流程

该方法通过隐马尔可夫模型对隐含状态的分析还原能力,深入分析和还原系统用户的浏览轨迹,并识别用户行为中的异常,从而可以在发生异常初期及时判断访问路径的偏离程度。同时,该方法不受代理服务器和防火墙干扰,是一种提高分类效率和准确度的方法,可以一定程度上保证系统用户行为意图的完整性,并减小上层算法的规模和复杂度。

2.1 建立可达性概率矩阵

建立可达性概率矩阵是本文所述方法的一个重要环节。首先,对Iwebshop进行遍历,得到所有页面集合并详细统计各页面内的链接类型。在遍历过程中同时记录页面间跳转的顺序关系。页面Pi到页面Pj的可达性定义为在页面Pi的所有链接类型中存在至少一个链接使得用户可以通过点击操作来完成到页面Pj的跳转意图。页面之间的跳转关系可以用图5所示的页面可达性图表表示。其中Rij(第i行,第j列)的值为“○”表示页面Pi到页面Pj的可达性成立,没有值则表示不可达。

图5 页面可达性统计图

在大量的正常用户访问日志数据集中,抽取约2 000条来自多个主机的浏览记录组成正常用户的浏览行为模型;
由带有攻击属性的用户日志组成异常浏览数据集。此外,根据数据交互入口的数量,将登录、帮助及列表、商品搜索和商城资讯页面归为SQL注入攻击相对容易实施;
首页、用户中心和团购商品页面攻击难度较大;
其余页面攻击难度归为中等。

2.2 采集数据处理

为了能够将用户点击行为抽象成构建HMM模型的格式,还需要对采集到的自定义日志数据进行处理和分析。首先,本文对超链接进行了代码上的监控,一次有效点击会产生一条自定义文本记录。用户真正点击的节点会带有特殊标记,根据标记对日志进行初步筛选和清理,形成如表2所示的采样日志范例。每一条记录中依次包含的关键属性包括:日期与时间、IP地址、用户名、客户端操作环境与协议、HTTP操作方法和URL值。其中URL地址中关注controller和用户追加字段。controller值反映了当前页面位置和用户浏览过程中点击的链接类型值,而用户追加字段往往是提交内容和危险关键字的拼接。范例中①、②、③属于正常访问记录,④、⑤、⑥属于SQL注入的前期尝试,不在正常用户操作范围。从日志中提取页面标识和链接类型标识构成用户浏览链,分别对应HMM模型的状态标识和状态输出值标识,从而构造出状态迁移和特征值输出过程。

表2 采样日志范例

2.3 计算和构建HMM模型

本文在建立可达性矩阵并进行采集数据处理的基础上,进一步构建用户浏览日志的隐马尔可夫HMM模型。本文基于MATLAB的HMM工具箱函数进行计算,其主要包括:

(1) hmmgenerate:给定一个隐马尔可夫模型,可以从模型中计算产生一个指定长度的状态序列和对应的输出序列,而且序列符合随机性特征。

(2) hmmviterbi:在已知混淆矩阵和转移矩阵的情况下,使用Viterbi算法来计算某个输出序列对应的最优的隐藏状态序列。

(3) hmmestimate:给定一个输出序列和对应的状态序列,来计算输出概率、转移概率的最大似然估计。

(4) hmmtrain:已知输出的序列,状态转移序列不确定。通过猜测来初始化转移矩阵和混淆矩阵。通过迭代的过程来估计出转移状态和混淆矩阵。此处可以设定迭代次数和精度。

(5) hmmdecode:主要用来计算给定观测序列的概率,指在确定的状态下产生序列中某符号的条件概率。

基于上述函数可进行HMM模型计算及构建。首先从正常浏览日志的数据集中提取全部页面跳转链,统计得到页面跳转的概率矩阵A和页面访问的概率分布B。据此初始化得到的马尔可夫模型为用户的合理请求,偏离该模型的行为划分为异常。

初始概率矩阵π的生成过程:采用正则表达式匹配的方法将日志中参数controller的值提取出来,例如login→ucenter→cart→home→ucenter。根据状态-页面关联表,可以转化为含有时序的状态转换链:s2→s5→s4→s1→s5。然后使用状态转换对表示为:S=[(s2,s5),(s5,s4),(s4,s1),(s1,s5)]。对于每一个状态对(sa,sb),sa为源状态(页面),sb为目的状态(页面)。si的取值共有17种。根据源状态的17种取值建立17个集合U1,U2,…,U17。每个集合Ui包含所有以si作为源状态的状态对。对于U1,计算页面P1转移到其他页面Pe的概率,公式如下:

probability=count(se)/count(U1)

(1)

probability为某跳转页面在所有以页面P1为源页面的跳转页面集合中的比例,对于Ui的计算以此类推,得出如表3所示的页面跳转概率矩阵。可以看出,Pij表示页面Pi转移到页面Pj的概率,概率为0表示页面可达关系不成立。概率是根据普通用户的浏览记录统计得到。因此在用户浏览过程中,明显偏离预设浏览习惯的访问行为需要针对性分析来排查异常。同样的,在访问模型中同时加入普通用户和攻击者的访问数据来调整参数,得到新的状态转移概率矩阵和值输出矩阵,从而使得该模型具有更好的状态转移过程的还原能力。

表3 页面跳转概率矩阵

续表3

为了对本文所述方法的有效性进行实验验证,基于“PHP 5+ MySQL 5”搭建了用于实验的示例目标系统Iwebshop。在该目标系统中,针对实验需求增加了相应的漏洞入口,并以自定义日志的格式记录下用户的访问浏览行为,其中部分用户的访问行为包含SQL注入攻击操作。日志源格式主要包括两部分:来源于Apache服务器生成的日志和使用JavaScript捕捉的用户点击超链接生成的自定义txt日志。实验采用平台为64位Windows 7系统计算机,并使用版本为R2013a的MATLAB集成的HMM工具箱进行模型计算,对本文所述方法进行了应用实现。

通过本文模型计算出的状态转移概率矩阵和值输出矩阵进行访问状态还原,并还原计算出最终的用户访问状态和频率分布,如图6和图7所示。其中,状态分布频率即该用户在指定时间段内对各个页面的访问频率分布。横轴表示状态序号,纵轴表示累计数量。本次实验选取2 000条记录长度的双方浏览历史进行对比,得到400个行为单元。GState为符合HMM的正常用户访问情况,AState是SQL注入攻击后的状态分布情况。在正常浏览过程中,该示例数据中35%用于首页和账户验证,28%用于浏览帮助及帮助列表,25%用于商品详情和商品搜索,7%用于购物车和用户中心,约有5%用于商城资讯;
在模拟攻击浏览过程中,27%用于商城资讯页面浏览,25%用于首页和账户验证,17%用于商品分类,15%用于商品搜索和详情页,帮助页面占13%,个人中心和购物车约3%。最明显的不同是普通的用户将过半的访问页面选择了首页和商城的浏览,还有近1/4用于获取帮助。而攻击者将大部分操作用于账户验证过程和资讯,还有近1/5访问停留在商品分类列表。后者的访问分布属于明显异常情况,增加了该类用户作为攻击者的可疑程度。

图6 普通用户访问频率分布(GState)

图7 攻击者访问频率分布(AState)

图8是截取一名普通用户和一名恶意攻击者的访问数据各400条绘制得到的浏览轨迹对比曲线图。横轴表示日志记录编号,纵轴是页面ID。通过重复试验,统计并观察访问轨迹曲线的波动粒度,将每5条清洗结果的记录视为一个行为单元。这样,在不影响观察用户浏览意图的前提下,达到了赋予一小段时间内连续请求合理的意义的目的。

图8 普通用户与攻击者的浏览轨迹对比曲线

对图像中两条曲线的规律性波动片段进行采样,然后根据状态-页面关联表进行反向还原,尽可能地重现用户浏览过程和访问意图。按照规律波动片段的长度研究,首先分析序号104到218之间的长片段C1:虚线曲线在帮助列表和帮助详情跳转,大致意图是在寻找某类目详细帮助。实线曲线80%在资讯详情页面,有规律地低频率跳转至首页和商品详情页。根据正常用户访问行为统计,访问资讯页面并停留在资讯页面的概率为(0.1)n,其中n为连续访问的次数,显然这段访问明显偏离HMM用户行为模型,且商城资讯页攻击难度最小,因此片段C1鉴定为SQL注入攻击片段。

对于序号8到75之间的长片段C2:虚线曲线在登录系统和注册之后查看详情页面,最后在登录之后跳转至商品搜索结果页面。登录和注册页面来回跳转概率分别为38%和10%,该现象较符合正常用户访问习惯。而实线曲线是高频率反复访问商品分类页,根据HMM模型正常用户转移矩阵,该页面重复访问概率仅为(0.01)n,商品分类页同时含有可闭合的URL参数和搜索输入框,攻击难度适中。所以片段C2极有可能包含SQL注入攻击。

片段C3是序号起止于266和291的访问序列。虚线曲线访问页面是首页、搜索列表、用户中心和资讯详情,跳转方向和频率均未有异常,也未出现单个页面的连续多次访问。作为对比的实线曲线,虽然在帮助列表和帮助详情两者之间的跳转方向符合正常模型要求,但出现了明显的帮助详情页的连续请求记录,该页面又属于攻击难度最小的类别,故将该片段识别为危险访问级别的请求序列。

此外,本文通过实验过程还发现了存在跨越正常浏览片段和危险访问片段的行为单元。实验中,定义行为单元的5条记录中,属于危险片段的记录不少于3条,则将该单元纳入攻击行为的范畴。例如,序号1到10的记录分为两个行为单元Behavior_a(1-5)和Behavior_b(6-10)。序号8/9/10被并入了前一部分分析到的攻击片段C1,因此行为单元Behavior_b含有三条攻击属性记录,属于攻击属性的行为单元;
Behavior_a属于正常访问行为单元。标记完成后统计实验结果,长片段C1、C2、C3包含的攻击行为单元共210个,如表4所示。整体实验的误报率为16.2%,漏报率为5.75%,实验结果表明本文所述方法可以有效检测出Web系统用户的SQL注入攻击行为。

表4 粒度调整对实验的影响

为进一步对比验证本文所述方法的有效性,本文采用K-means方法及FCM模糊聚类方法进行横向实验和结果对比分析。

4.1 K-means方法

为反映不同类型攻击的特征,本文在进行K-means聚类分析时,从语法角度将SQL注入记录标记为7个参数指标,分别是:前终结符、注入前缀、注入关键词、常变量参数、大写字母、其他特殊字符、后终结符。

首先使用粒度为5进行聚类,将初始日志每5条绑定成一个单元,这涉及到横向参数绑定方法和纵向条目绑定方法。不同于上节中曲线绘制时选择的评定方法,前者选择将5条访问数据视为一个行为单元整体,可以保证行为曲线在最小粒度上的含义和连贯性,从而给出更合理的异常划分标准。此处选择纵向绑定保证尽可能地保留参数包含的攻击意图。横向和纵向是针对数据排列方向而言,横向意味着将同一条记录数据的不同参数进行归并来缩减算法复杂度,更加适用于独立性较强的界限明确的数据源;
纵向是指将相邻n条数据对应的同一个参数的不同取值进行归并,换算成为一条综合评定的有代表性的新数据项。后者更适用于在更细粒度上不方便设定异常划分标准的数据源。两种思想都具有一定的减小数据规模和算法复杂度的效果。

实验中的横向绑定方法:将每条日志记录的7个特殊参数值评定出攻击结果(是/否),将连续5条结果进行单元绑定来决定该行为单元的结果,横向绑定会增大判定误差;
纵向绑定方法:行为单元L={l1,l2,l3,l4,l5},包含5条连续日志。日志包含7个SQL注入攻击参数。将p11、p21、p31、p41、p51绑定为行为单元L的第一个参数的集合,L的其他参数以此类推,从而得到L的参数表。再使用K-means方法进行聚类,K-means方法使用默认参数,共410条结果,71个攻击记录,339个正常访问记录。

若使用默认粒度1,直接进行K-means聚类,得到攻击分类577条,正常日志记录1 474条。攻击占比为28.1%,攻击识别结果低于HMM方法。因为攻击单元是把连续的一段访问都记为攻击范畴,而K-means方法会把攻击过程中必要或非必要指向正常页面的记录记为正常访问结果。在聚类或距离分类方法中,每个日志记录都是相对独立的,因此对主页的访问将被归类为正常访问记录,导致攻击检测结果低于HMM行为单元方法。

4.2 FCM模糊聚类方法

FCM(Fuzzy C-means)算法是基于对目标函数优化基础上的一种数据聚类方法。在该算法产生的结果中,用一个个数值表示每一个数据点对聚类中心的隶属程度。文中的日志数据中,处于试探攻击地带的日志和一定比例的非正常模式浏览痕迹是不应该从严格意义上划分是否属于攻击类别的。使用FCM模糊聚类算法处理文中行为单元数据,得到每个行为单元对攻击类别的隶属度。在模糊集上,给定一个论域U,从U到单位区间[0,1]上的一个映射就可以称为U上的一个模糊集,记为A。对于每一条数据x,μA是映射函数,μA(x)的值叫作元素x对模糊集A的隶属度,接近1的取值表示x隶属于A的可能性更大。

引进隶属度的概念同样可以验证HMM模型中的片段概率分析的合理性。在用户浏览轨迹图中,长片段C1的范围大约是从序号110到序号204之间的记录。

表5 浏览轨迹C1片段的攻击隶属度分布

该片段的攻击隶属度聚集在高可信度的范围,这和HMM模型下的属于正常浏览模型的概率极低的结论相契合,同时也表明识别SQL注入攻击特征字段选择的合理性。

本文基于隐马尔可夫模型,提出一种SQL注入攻击行为的检测方法。首先获取Web系统访问用户的行为序列,利用HMM模型恢复隐藏状态并完成状态序列,然后利用网页访问频率区分用户浏览意图,从而优化攻击识别结果。该方法不需要提供系统的字符输入接口,建模完成后即可获取所需的输入数据,几乎不会影响原系统的源代码和运行逻辑,且不受防火墙和代理服务器限制。最后根据行为曲线偏离程度和访问频率异常程度综合判定具有SQL注入攻击意图的用户。在异常标准设定和结果评定方面,提出了纵向绑定和横向绑定的数据处理方法,有效提升了异常数据的保留比例,提高了系统中SQL注入攻击检测能力,并通过对比实验和结果分析验证了本文所述方法的有效性。下一步工作考虑同时应用单个操作的攻击隶属度和所属行为单元的攻击概率来分配权重,设计成综合性的用户行为评估系统以提高结果准确性。

Tags: 马尔   注入   模型  

搜索
网站分类
标签列表