web攻击异常检测技术的研究和实现—免费毕业设计论文内容摘要:

),并为检测属性设定一个动态监测的阀值。 在检测期间,模型对每个观测实例的属性值返回一个异常得分,这个得分是一个在区间 [0,1]之间的值,这个值代表了与学习阶段确定出来的 “正常” 属性的轮廓的相关性的大小。 也就是说,得分越接近 1,表示被检测的属性与“正常”属性的相关性越高,是异常的概率就越小,反之,得分越接近 0,表示越有可能是一个异常属性。 由于这多种模型分别与 Web 应用的多个方面相关联,所以,一个被检测属性的最终异常得分是每个模 型单独得分的权重的加和,如果权重和的值大于学习期间设定的阀值,则异常检测程序认为这个请求有异常,并提出警告。 本章之后的部分简要描述异常检测组件使用模型的实现。 属性长度( Attribute Length) 属性长度模型( Attribute Length Model),又叫字符串长度模型( String Length Model)是基于大部分属性值的变动都在一个长度范围内,这个长度可能是个确定值,也可能是个短长度,而恶意的属性经常违反这个假设,比如,缓冲区溢出,要包含 shellcode, shellcode要足够的长,从而溢出受攻击的进程所给的缓冲区,从而达到控制目标进程的目的。 这个模型的目标是尽可能接近真实值,然而,字符串和检测实例的长度的分布是未知的,而且检测结果很大程度上依赖观测到的真实值。 这个模型的实现过程,在学习阶段首先计算每个样本属性的平均值 (μ )和方差 (σ 2),在检测阶段,一个给定的属性长度 l,来自真实的属性长度的分布情况,而异常的概率的计算基于Chebyshev不等式: l :被检测的属性长度 μ :样本平均值 σ 2:样本方差 22 )()(|)||(|   llplxp 公式 1 在 Chebyshev不等式中,约束条件越弱,结果中属性长度的容忍范围就越大。 字符分布( Character Distribution) 字符分布模型( Character Distribution Model)的依据正常的属性值一般有一个较为规则的字符 分 布 , 而 且 这 些 字 符 通 常 是 人 可 读 的 可 打 印 字 符 ( 例如: ”/?username=aaaamp。 password=bbb”)。 一般说来,一个给定属性的值会有一个基本相似的字符分布情况,一个字符分布是由相对字符频率的降序排列组成的 256个 ASCII字符。 对于合法的输入来说,这个相对字符频率是缓慢的降低的,而对于一些恶意的输入,相对字符频率或者是由于某个单字符的大量使用而急剧降低,或者是由于随机字符的使用而基本不变化。 在学习阶段,一个属性的理想化的字符分布会通过输入样本而被计算出来,而后所有字符属性的的平均值将被计算出来。 在检测阶段,被检测属性的字符分布的概率将通过理想化的分布并使用变量的 Pearsonχ 2检验发被计算出来。 结构推论( Structural Inference) 结构推论模型( Structural Inference Model)主要是学习字符串的结构从而确定异常信息的模型。 他的的思想来源于观察到的合法属性值字符串一般有规则的语法形式。 例如,一个合法的路径一般只有字母数字和路径分隔符组成 (. | / | [azAZ09] )。 因此,形成一个近似真实的正则语法是很必要的。 模型在学习阶段产生相应的正则语法,它认为观测到的属性值是一个正则语法的输出。 在学习阶段结构及推论模型收集所有相关的正则语法。 算法首先创建一个非确定的有限自动机( NFA),它反映原始的输入数据,然后逐渐的合并状态,直到产生一个能反映原始输入的合理的规则表 达式。 状态合并目标是尽量抓住中间区域(即避免过于简化和过于概括),过于简化的语法仅能识别原始的输入,而过于概括的语法又会兼容所有可能的输入,从而丢失结构信息。 在检测阶段,一个被检测属性将被沿着这个自动机的一条路径,如果存在没有一条路径能将这个被检测属性的值转化为一个已有的规则表达形式,则说明被检测属性不可能来自学习阶段产生的规则语法,那么这个属性就是一个异常属性,反之,如果可以转化到规则语法形式,则说明这个属性是一个正常属性。 令牌发现( Token Finder) 令牌发现模型( Token Finder Model)使用统计检测来确定是否输入域中是否包含一个令牌,它依赖于被检测属性的期望值是否在一个常量集合中来判断是否发生了异常情况。 在学习阶段,每个属性的唯一值被记录在这个集合中,如果,这个集合的大小可以增长到所有观测属性的总数(集合中每个记录都不重复),那属性的期望值是一个随机值,否则,模型假设属性的期望值是一个枚举值。 在检测阶段,如果属性集合被确定接受枚举枚举值,那么检测属性值会被检测是否存在于学习阶段产生的集合中,如果被检测的属性值存在于这个集合中,那么模型假设这个值是无害的,否则,模 型认为这个值是个异常值。 第 4 章 异常 检测 异常的检测是根据不同的检测模型提供的方法,根据学习阶段得到的信息,对检测阶段的属性进行分析,已确定检测属性是否是异常属性,以及相应的异常得分。 异常检测模型一般是建立在统计方法的基础上,运用各自的方法对应用程序或 Web请求进行学习和分析,在学习训练阶段,一般模型会认为给定的学习数据都是正常数据,模型对这些正常数据进行不同方式的转换并进行统计分析,并将保存结果,当程序转换到测试阶段后,异常检测模型就会对被检测数据做同样的转换,并利用之前保存的统计结果进 行比较分析,从而确定被检测的数据是否是异常数据。 属性长度模型 属性长度模型在学习阶段存储属性大概的长度分布,这个属性长度分布以样本属性的平均值 mean和方差的 σ 2的形式被给出,在检测阶段根据下面的公式进行计算: cdi stob sv dl  |)(| 22 如果公式计算的结果小于给出的阀值 dcdist,则说明观测属性的长度偏离正常情况,他很可能是一个异常的属性,如果公式计算的结果大于给出的阀值 dcdist,则说明该检测属性是正常属性。 利用属性长度模型进行异常检测的具体步骤为: 在机器的学习 阶段,在向量中记录下每一个属性长度值 X[i],以及这个值出现的次数N[i], X和 N的长度为 n。 n iNiX  ])[][( 1 )][(][2  n iXiN  异常检测得分为: |)(| 22obsvl 其中: lobsv :被检测的属性长度 根据异常检测得分和给定的阀值,进行异常判断。 字符分布模型 字符分布模型在学习阶段存储了应用程序属性的理性化字符分布( LCD),而后,在检测阶段,它利用 Pearsonχ 2检验确定属性的字符分布的正常状态 ,如果模型被表示为异常,结果通过下面两种方法之一被确定: 如果被检测的字符分布表象为一种极具的下降,这表明有少量的字符出现的频率很高。 根据每个字符出现的的频率值构建一个字符分布向量,一般的形式为: C={(c1, f1) , (c2, f2) , . . . , (cm, fm)} 其中 ci是 出现频率为第 i位的字符值, fi是这个字符出现的频率。 C是一个 m个元素组成的向量, C中的每个元素是一个 (字符值 ,出现频率 )的值对。 在检测时期,一个被检测的属性值是不是异常属性,将通过分析 Cobsv和 Corig得到结论 ,这里 Cobsv是 被检测的属性的字符分布向量, Corig是从训练信息中的字符分布向量。 如果: cd istjo rigio b sv dff  || , 其中: (cobsv,i,fobsv,i)和 (corig,j,forig,j)分别是观测向量和正常向量中的一项,且 cobsv,= corig,j dcdist设定的距离阀值,当某一字符的检测频率和正常频率相差的距离超过设定的阀值,则认为,观测属性是异常行为,否则,为正常行为。 如果被检测的属性的字符分布呈现呈现一种同一的分布,这时检测变成检查被检测属性的字符分布是否 是一个随机分布,主要实现方法是计算在向量 Cobsv和 Corig中任何两个值对的频率差的最大值。 对于每个 i,j(0≤ i,j≤ m)有: c d i s tjo r i gio b s v dff  |)m a x ( | , 其中, m为向量的长度。 如果, Cobsv和 Corig中频率的最大差值大于设定的阀值 dcdist,则说明被观测属性呈现一个随机分布,并报告异常,否则,为正常字符分布。 结构推论模型 结构推论模型在学习阶段使用训练数据,为训练属性构建一个近似于真实语法的概括语法。 在检测阶段,如果一个被检测的属性被结构推论模型确定为异常 ,概括过程提取异常字符串的前缀和违反概括语法的第一个字符,用于预防其他的网络攻击。 使用违规字符串的前缀来概括攻击字符串是有根据的,它是根据对同一个 Web应用程序的重复攻击一般会有相似的 URLs前缀或路径前缀。 字符串转化到字符串前缀一般基于字符分类,例如,将所有的小写字母被映射为“ a”,所有的大写字母被影射为“ A”,所有的数字字符被影射为“ 0”,其他所有字符保持不变。 例如: 首先进行简单的转换: /usr/lib/ → /aaa/aaa/ /etc/X11/XF86Config → /aaa/A00/AA00Aaaaaa 然后,由于转换后相同字符多次出现,所以相同的字符进行合并: /aaa/aaa/ → /a/a/ /aaa/A00/AA00Aaaaaa → /a/A0/A0Aa 通过以上两步,一个简单的概括语法被建立。 然后,可以检测转换后目标属性值 (sobsv)与转化后的异常属性字符串 (sorig)的相似性,具体做法是比较这两个格式化的属性值是否相等,即: 对于每个 0≤ i≤ m,其中, m=| sorig | 判断 sobsv,i = sorig,i 是否成立,如果成立,则说明目标属性值有着异常字符串的特征,这个目标属性是一个异常属性。 举例说明: 如果,一个属性值仅有小写字符和数字组成,则概括过程可能建立一个正常标识,基于语法: [ a | 0 ]+,如果检测到一个第一个异常字符是分号 ( “。 ” )的字符串,则模型建立一个异常规则: [ a | 0 ]+。 ,那么,今后试图使用分号 ”。 ”字符执行的攻击将被分类器简单的划为异常行为。 令牌发现模型 令牌发现模型首先会检测训练数据的相关性,如果训两数据是相关的,则模型在检测阶段测试被检 测的属性值是否是训练过程所产生的集合的成员,如果被检测属性不是集合的成员,则模型返回异常,并发出警告,否则为正常情况。 这个检测的具体过程是: I是一个输入向量,假设长度为 n; 根据 I确定另外两个向量 A和 B: A[0]=0,B[0]=0 在第 n步时, A[n]=A[n1]+1 If( I[n] == I[n1]) B[n]=B[n1]+1 Else B[n]=B[n1]1 通过 KolgomorovSmirnov无参数的检测方法,确定 A、 B向量是否是相关的, 平均数计算公式: n iXXA V G  ][)( X为长度为 n的向量 方差计算公式: 1A V G (X ))(X [i ])V A RIA N CE (X2  n X为长度为 n的向量 协方差 计算公式: 1 ))(][))((][(),(    n YA V GiYXA V GiXYXCO V A R IA NCE X和 Y的长度都相同,都为 n 计算步骤: rho= COVARANCE(A,B)/sqrt(VARANCE (A)*(VARANCE(B))) z= * log(( + rho)/( rho)) addend = / sqrt((double) (N 3)) upper = (exp(2*(z+addend)) 1) / (exp(2*(z+addend)) + 1) lower = (exp(2*(zaddend)) 1) / (exp(2*(zaddend)) + 1) 通过以上步骤得到两个相关值: upper和 lower 如果 upper和 lower同号,则表示 A和 B相关,如果 A和 B异号,则表明 A和 B不相关。 如果相关则从训练数据中返回令牌集。 在检测期间,用输入的属性值在学习期间返回的令牌集中进行查找,如果找到匹配的令牌,则模型返回 1,否则 模型返回 0。 第 5 章 系统设计与实现 LibAnomaly是加利福尼亚大学圣塔芭芭拉分校的可靠软件组开发的一个用于异常检测的工具,它建立了一个异常检测系统的框架, LibAnomaly使用 C++实现的在 GPL许可证下的自由软件,但其主要运行在 L。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。