一种基于机器学习的恶意PowerShell命令识别方法与流程

文档序号:18901305发布日期:2019-10-18 21:58阅读:564来源:国知局
一种基于机器学习的恶意PowerShell命令识别方法与流程

本发明属于计算器安全防护领域,具体涉及一种基于机器学习的恶意powershell命令识别方法,用于筛选大量powershell命令中包含有恶意行为的命令。



背景技术:

近年来,微软代替cmd所推出的powershell已经成为windows上命令行shell的首选。它基于微软.net框架,并且允许使用者访问操作系统服务。powershell拥有级高的权限,系统虽然会监控使用权限并限制某些权限的访问,但是攻击者依旧可以使用特殊手段绕过这些限制。攻击者往往将具有恶意攻击性质的代码进行混淆,使得防火墙往往不能轻易。windows操作系统可以说是世界上使用最多的家庭操作系统之一,针对windows操作系统的攻击与入侵从未停止过。因此,针对不断变化的攻击方式要提出相应的安全保护方法。微软在windows平台推出新的commder-lineshell——powershell,一种命令shell和脚本语言,由于灵活方便并且有强大的构造能力,可以直接使用其命令执行相关的脚本功能。已经涌现了不少新的命令攻击框架powersploit,empire,nishang,甚至有psattack这种可以绕过powershel.exe直接通过.net框架来调用powershell,并且绕过用户提示直接进行敏感权限的使用。这种恶意攻击代码甚至可以嵌入到微软office套件中,直接运行恶意攻击命令,而使用者接收不到任何提示。因此,powershell在windows平台上常常是犯罪者们选择的攻击方式的一部分。可能在使用用户不经意间获得较高权限,对主机进行破坏。

恶意攻击脚本的传统检测方法为正则项匹配和大量的if-then规则,这种方法后期维护十分繁琐。且对于结合了混淆技术的恶意命令,其规则也很难有效的识别出恶意命令。混淆技术被用来隐藏恶意软件的存在,其目的为了使防御类的软件越来越难找到其混淆模式,同时使逆向工程师和分析师更难以破译并完全理解恶意软件正在做什么。



技术实现要素:

针对现有技术中的问题,本发明提供了一种基于机器学习的powershell恶意命令检测方法,其目的在于有效识别恶意(包含混淆)powershell命令,防止用户计算机遭受破坏。

为解决上述技术问题,本发明通过以下技术方案予以解决:

一种基于机器学习的恶意powershell命令识别方法,包括以下步骤:

步骤1):获取需要执行的powershell命令,对命令信息进行统计特征提取;

步骤2):在进行过基本信息处理过后,基于步骤1)提取的统计特征,将统计特征分为正常命令特征和恶意命令特征,使用机器学习的方法对统计特征进行训练,得到分类器;

步骤3):根据步骤2)训练出的分类器作为评价器,当收到新的命令时,使用步骤1)的方法对其进行处理,然后将提取出的特征作为评价器的输入,若输出结果小于0,则表明该新命令为恶意命令。

进一步,步骤1)中,所描述的统计特征包含:字符频率直方图、命令的长度、命令字符串的信息熵和字符”powershell”出现的次数;所述字符频率直方图为当前字符串中每一个字符对应的ascii码编码的十进制值的频率统计,即统计该字符在字符串中出现的次数。

进一步,所述字符串的信息熵用来衡量信息量的大小,若不确定性越大,则信息量越大,熵越大,若不确定性越小,则信息量越小,熵越小。

进一步,字符串的信息熵h(x)通过下式计算得到:

其中,p(xi)表示第i个字符出现的频率,n为字符串的总长度。

进一步,步骤2)中,使用fisher线性判别方法进行数据训练,将正例x1设置为常规的powershell命令,负例x0设置为包含有恶意性质的powershell命令;设法将输入特征样例投影到低维的超平面上,使得同类样例的投影点尽可能接近和密集,异类投影点尽可能远离。

进一步,步骤2)中,使用机器学习的方法对统计特征进行训练,具体步骤如下;

步骤2.1)输入样例的投影:

211)输入特征向量为xi=(x1,x2,…,x131)t,xi为第i类的向量为0或1;

212)计算每个类别的平均值n为该类样本的总个数,x为xi中的样本;

213)定义投影后的特征向量yi=(y1,y2,…,yd)t,其中d小于总数131,

214)然后投影转换y=wtx,其中w为投影矩阵,y为投影过后的新样本;

215)计算整个体系的类内散度和类间散度:

类内散度:其中,第i类样本的类内散度,c为类别的总个数;

其中其中,为第i类样本的均值;

类间散度:其中,为第正例样本均值,为第负例类样本均值;

步骤2.2)根据步骤2.1)得到的类间散度和类内散度,优化目标重写为:

其中,w为投影矩阵;

对目标使用拉格朗日乘数法进行目标优化:l(w,λ)=wtsbw-λ(wtsww-1)

其中,λ为拉格朗日乘数;

化简优化函数为w*是由的特征向量组成的,λ由的特征值组成;

步骤2.3)对于步骤2.2)中求得的使用奇异值分解方法对其特征向量进行求解,求解后最大特征值对应的特征为投影矩阵w,投影矩阵w可以将输入的特征向量的长度缩短到1;

步骤2.4)通过步骤2.3)将数据变成长度为1的数据以后,根据整体数据的分布情况,确定一个阈值z,根据阈值将正例和负例区分开来。

进一步,步骤3)利用步骤2)中确定的投影矩阵w和阈值z,确定新输入数据的类别;当新的命令输入时,先按照步骤1)的方法将输入的字符串转换成特征,然后特征与投影矩阵w进行运算,将特征长度缩短为1,最后与阈值z进行比较,确定其是正例还是负例,即正常代码还是恶意代码。

本发明具有以下有益效果:

1)能够快速的对输入文本进行特征分析,精准提取出文本中的词频信息以及隐藏的字节代码。

2)能够判别一段文本代码中是否包含有恶意“powershell”代码,有效的对数据流进行筛选,阻止恶意代码对计算机进行进一步侵害。

附图说明

为了更清楚地说明本发明具体实施方式中的技术方案,下面将对具体实施方式描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明的流程图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

如图1所示,作为本发明的某一优选实施例,一种基于强化学习的无人机集群分布式编队方法,包括以下步骤:

步骤1):获取外部输入,分为正常使用的powershell命令作为正例和带有恶意攻击性质的命令作为负例。先将其进行数字特征化,然后进行统计特征处理。

具体如下:

步骤1.1)首先对其进行字符化处理,计算机中每一个英语字符都能在ascii码表中对应一个十进制的数字。一个命令就是一个字符串,每一个字符串可以看成是一个字符数组,其中的元素即为字符,由于每个字符都对应一个ascii的十进制数字,一个字符串就可以编码成由十进制数字组成的数组。

步骤1.2)对于统计特征,就是一种能够描述字符串的信息分布情况的一种特征,其主要由命令字符串的信息熵、命令的长度、字符频率分布直方图和powershell关键词出现次数组成。

其中字符频率统计直方图是一种字符串统计方法,将输入的字符串命令进行编码处理,当前字符串中每一个字符对应的ascii码编码的十进制值的频率统计,即统计该字符在字符串中出现的次数,它将步骤1.1)中处理过的特征进行字符频率统计。由于步骤1.1)中已经将一个字符串进行了数字编码,直方图则对每一个数字编码在整个数组中出现的次数进行统计。由于ascii码表的有效字符数为128,对应的,直方图的长度也为128,其中每一个元素即为该位置下表对应的字符在字符串中出现的次数。一个字符串的信息熵能有有效的表示一个字符串的有效信息含量,所谓信息熵就二进制的字符集在去掉冗余度后的二进制编码位数.冗余度是通过统计每个字符出现概率获得的。字符串的信息熵用来衡量信息量的大小,若不确定性越大,则信息量越大,熵越大,若不确定性越小,则信息量越小,熵越小。其计算公式为:

其中p(xi)表示第i个字符出现的频率,n为字符串总长度。

powershell次数统计则计算整个字符串中powershell字字符串的个数。

步骤2)将处理过的数据用于进一步的分割试验。在进行过基本信息处理过后,基于步骤1)提取的统计特征,将统计特征分为正常命令特征和恶意命令特征,使用机器学习的方法对统计特征进行训练,得到分类器。

lda(线性判别分析)是一种线性分类方法,它能够有效的扩大不同类别之间的间距,缩小同一类别之间的间距。对于二类而言,会将特征维度缩减为1,并且创造一个投影矩阵。最终根据维度降低后特征确定一个阈值,该阈值能够确定一个特征是属于正例还是负例。使用fisher线性判别方法进行数据训练,将正例x1设置为常规的powershell命令,负例x0设置为包含有恶意性质的powershell命令;设法将输入特征样例投影到低维的超平面上,使得同类样例的投影点尽可能接近和密集,异类投影点尽可能远离。使得同类样例的投影点尽可能接近,使得异类投影点尽可能远离。

使用机器学习的方法对统计特征进行训练,具体如下:

步骤2.1)步骤1)中处理过的输入特征向量为xi=(x1,x2,…,x131)t,xi为第i类的向量(0为正例,1为负例)。首先计算每个类别的平均值n为该类别样本总数,x为第i类的某个样本;然后定义投影后的特征向量yi=(y1,y2,…,yd)t,其中d小于总数131,然后投影转换方法为y=wtx,其中w为投影矩阵,y为投影后的样本。

紧接着需要计算整个体系的类内散度和类间散度。类内散度可表示为其中,si为第i类的类内散度,c为类别总数;其中,为第i类样本的均值;类间散度表示为其中,为正例样本的均值,为负例样本的均值。

步骤2.2)根据步骤2.1)得到的类间散度和类内散度,可以作为分类器优化的方法。这样优化目标重写为其中,w为投影矩阵;对目标使用拉格朗日乘数法进行目标优化l(w,λ)=wtsbw-λ(wtsww-1),化简优化函数为其中,λ为拉格朗日乘数;w*是由的特征向量组成的,λ由的特征值组成。

步骤2.3)对于步骤2.2)中求得的使用奇异值分解svd(singularvaluedecomposition)的方法对其特征向量进行求解。求解后最大特征值对应的特征为投影矩阵w,投影矩阵可以将输入的特征向量的长度缩短到1。

步骤2.4)通过步骤2.3)将数据变成长度为1的数据以后,只要根据整体数据的分布情况,就能够确定一个阈值分别为正例和负例的均值,这个阈值能够尽可能的将正例和负例区分开来。

步骤3)利用步骤2)中确定的投影矩阵w和阈值能够有效的确定新输入数据的类别。当新的命令输入时,先按照步骤1)的方法将输入的字符串转换成特征x。然后特征与投影矩阵w进行运算wtx,将特征长度缩短为1,最后与阈值进行比较,大于就确定为正例,即正常代码,小于就确定为负例,即恶意代码。

通过本发明方法能够有效识别恶意(包含混淆)powershell命令,防止用户计算机遭受破坏。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1