CN112000954B - 一种基于特征序列挖掘和精简的恶意软件检测方法 - Google Patents

一种基于特征序列挖掘和精简的恶意软件检测方法 Download PDF

Info

Publication number
CN112000954B
CN112000954B CN202010864197.9A CN202010864197A CN112000954B CN 112000954 B CN112000954 B CN 112000954B CN 202010864197 A CN202010864197 A CN 202010864197A CN 112000954 B CN112000954 B CN 112000954B
Authority
CN
China
Prior art keywords
api
sequence
software
feature sequence
value
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202010864197.9A
Other languages
English (en)
Other versions
CN112000954A (zh
Inventor
莫毓昌
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Baizhuo Information Technology Co ltd
Huaqiao University
Original Assignee
Baizhuo Information Technology Co ltd
Huaqiao University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Baizhuo Information Technology Co ltd, Huaqiao University filed Critical Baizhuo Information Technology Co ltd
Priority to CN202010864197.9A priority Critical patent/CN112000954B/zh
Publication of CN112000954A publication Critical patent/CN112000954A/zh
Application granted granted Critical
Publication of CN112000954B publication Critical patent/CN112000954B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/566Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/18Complex mathematical operations for evaluating statistical data, e.g. average values, frequency distributions, probability functions, regression analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/20Design optimisation, verification or simulation

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Data Mining & Analysis (AREA)
  • Software Systems (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Physics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Health & Medical Sciences (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Evolutionary Biology (AREA)
  • Virology (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Operations Research (AREA)
  • Probability & Statistics with Applications (AREA)
  • General Health & Medical Sciences (AREA)
  • Algebra (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Databases & Information Systems (AREA)
  • Evolutionary Computation (AREA)
  • Geometry (AREA)
  • Stored Programmes (AREA)
  • Complex Calculations (AREA)

Abstract

本发明提供一种基于特征序列挖掘和精简的恶意软件检测方法,包括:获得多个软件样本的API调用序列;构造关键API字典和非关键API字典,对API调用序列进行精简;利用确定性和随机化前后向扫描方式,提取API特征序列;采用统计频率筛选API特征序列;得到最终的关键API特征序列集合以及关于关键API特征序列权重的线性模型;检测被测软件是否为恶意软件。本发明提供的基于特征序列挖掘和精简的恶意软件检测方法,同时采用API特征序列精简和关键API扩展扫描这两项技术,既提高了恶意软件检测识别精度,又缩短了恶意软件检测识别耗费的时间,提高恶意软件检测识别效率。

Description

一种基于特征序列挖掘和精简的恶意软件检测方法
技术领域
本发明属于恶意软件检测技术领域,具体涉及一种基于特征序列挖掘和精简的恶意软件检测方法。
背景技术
恶意软件是指各种形式的恶意或者入侵软件,例如计算机病毒、蠕虫、间谍软件、木马、广告软件等。恶意软件通常以可执行程序、脚本等形式存在。在计算机系统安全领域,一个重要问题是进行恶意软件的检测与识别,以便能在恶意软件运行之前将其清除,避免给计算机系统造成破坏或者给用户造成损失。
恶意软件的检测与识别,常用方法为恶意软件静态检测方法,即:对恶意软件的静态特征进行识别,其中,静态特征主要包括可执行文件及其反汇编文件的字节码、汇编指令、导入函数和分节信息等特征。然而,实际应用中使用的恶意软件往往存在变形或垃圾代码插入等混淆情况,从而导致静态检测方法无法有效识别混淆后的恶意软件,降低恶意软件的检测分类精度。
因此,如何有效提高恶意软件的检测与识别精度,从而及时清除恶意软件,保障计算机系统运行安全,是目前急需解决的问题。
发明内容
针对现有技术存在的缺陷,本发明提供一种基于特征序列挖掘和精简的恶意软件检测方法,可有效解决上述问题。
本发明采用的技术方案如下:
本发明提供一种基于特征序列挖掘和精简的恶意软件检测方法,包括以下步骤:
步骤1,收集p个软件样本,分别为软件样本s1,s2,...,sp;其中,所述软件样本包括恶意软件样本和正常软件样本;
对于收集到的每个软件样本si,i=1,2,...,p,获得其API调用序列APIi=<APIi1,APIi2,...,APIic>;其中,c为软件样本si对应的API调用序列中包括的API的总数量;
步骤2,构造关键API字典和非关键API字典,从而对每个软件样本si的API调用序列APIi进行精简,得到每个软件样本si对应的精简后的API调用序列API'i,具体方法为:
步骤2.1,对p个软件样本的API调用序列包含的API进行统计分析,将重复的API去除,一共得到n种API,n种API形成的API集合表示为AS=<API[1],API[2],...,API[n]>;其中,API[1],API[2],...,API[n]分别代表第1种API,第2种API,...,第n种API;
步骤2.2,构造线性模型API权重训练集,方法为:
步骤2.2.1,对于每个软件样本si,根据其API调用序列APIi=<APIi1,APIi2,...,APIic>以及集合AS=<API[1],API[2],...,API[n]>,构造对应的输入向量Xi=<xi1,xi2,...,xin>;其中,输入向量Xi中元素数量,与集合AS中元素数量相等;输入向量Xi的各元素取值为:
如果集合AS中的API[1]出现在API调用序列APIi中,则输入向量Xi中第1个元素xi1取值为1;否则,输入向量Xi中第1个元素xi1取值为0;
如果集合AS中的API[2]出现在API调用序列APIi中,则输入向量Xi中第2个元素xi2取值为1;否则,输入向量Xi中第2个元素xi2取值为0;
依此类推
如果集合AS中的API[n]出现在API调用序列APIi中,则输入向量Xi中第n个元素xin取值为1;否则,输入向量Xi中第n个元素xin取值为0;
步骤2.2.2,对于软件样本si,定义标签真实值yi;标签真实值yi通过以下方式取值:如果软件样本si为恶意软件样本,则标签真实值yi为1;反之,如果软件样本si为正常软件样本,则标签真实值yi为0;
步骤2.2.3,将软件样本si的输入向量Xi和标签真实值yi组合,形成软件样本si的训练样本TSi=<Xi,yi>=<xi1,xi2,...,xin,yi>;
步骤2.2.4,因此,对于p个软件样本,可对应得到p个训练样本,从而形成线性模型API权重训练集;
步骤2.3,构建关于API权重的线性模型hθi
hθi=θ01xi12xi2+...+θnxin (1)
其中:
θ0为线性模型常数项;θ12,...,θn分别为线性模型的系数;
构建输出转换模型:
其中:
y'i为与软件样本si对应的基于API权重的线性模型的标签预测值;
步骤2.4,根据线性模型hθi和输出转换模型,对线性模型hθi进行拟合,得到最终的θ012,...,θn的值,从而得到最终的关于API权重的线性模型;
步骤2.5,对于集合AS=<API[1],API[2],...,API[n]>,系数θ1同时表示API[1]的权重,系数θ2同时表示API[2]的权重系数,...,系数θn同时表示API[n]的权重;
预设置权重阈值ε0;检查每个系数θj的绝对值是否小于权重阈值ε0,其中,j=1,2,...,n,如果是,则系数θj对应的API[j]为非关键API,并将非关键API存入非关键API字典;
设置百分比H,对各个系数θj的绝对值从大到小排序,获得排序最前面的H*n个系数;将获得的H*n个系数所对应的集合AS中的API[j]称为关键API,并将关键API存入关键API字典;
步骤2.6,对于步骤1收集到的每个软件样本si,将其API调用序列APIi=<APIi1,APIi2,...,APIic>中的非关键API剔除,从而得到软件样本si对应的精简后的API调用序列API'i
步骤3,对于每个软件样本si对应的精简后的API调用序列API'i,均对其API调用序列API'i进行挖掘,得到多个API特征序列,将各个API特征序列存入API特征序列集合C(API),具体方法为:
步骤3.1,对于每个软件样本si对应的精简后的API调用序列API'i,定位到关键API,对于定位到的每个关键API,均执行步骤3.2-步骤3.3;
步骤3.2,利用确定性前后向扫描方式,提取与定义的窗口尺度对应的API特征序列,并存入API特征序列集合C(API),方法为:
预定义窗口尺度为b;利用确定性前后向扫描方式,提取所有种包含关键API的尺度为b的API特征序列;
步骤3.3,利用随机性前后向扫描方式,提取与定义的窗口尺度对应的API特征序列,并存入API特征序列集合C(API),方法为:
步骤3.3.1,预定义窗口尺度为b;
步骤3.3.2,预定义随机截取阈值v*
步骤3.3.3,对于软件样本si,设精简后的API调用序列API'i为:API'i=<API'i1,API'i2,...,API'id>;其中,d为软件样本si对应的精简后的API调用序列API'i中包括的API的总数量;假设API'ik为API'i中的一个关键API;
步骤3.3.4,令计数器b0=0,计数器b1=0;
A1)进行前向扫描,方法为:
按照距离API'ik由近向远的顺序进行前向扫描,首先考察API'i(k-1),考察方法为:随机生成0到1之间的随机数v1,若v1大于阈值v*,则提取API'i(k-1),同时令b0=b0+1;如果v1不大于阈值v*,则不提取API'i(k+1),继续前向考察其他相邻的API';
A2)进行后向扫描,方法为:
按照距离API'ik由近向远的顺序进行后向扫描,首先考察API'i(k+1),考察方法为:随机生成0到1之间的随机数v2,若v2大于阈值v*,则提取API'i(k+1),同时令b1=b1+1;如果v2不大于阈值v*,则不提取API'i(k+1),继续后向考察其他相邻的API';
A3)当前向扫描提取到b0=0个API',而后向扫描提取到b1=b-1个API',则API'ik和后向扫描提取到的b1个API'按顺序排列,形成一种尺度为b的API特征序列;
当前向扫描提取到b0=1个API',而后向扫描提取到b1=b-2个API',则前向扫描提取到的b0个API'、API'ik和后向扫描提取到的b1个API'按顺序排列,形成一种尺度为b的API特征序列;
依此类推
当前向扫描提取到b0=b-1个API',而后向扫描提取到b1=0个API',则前向扫描提取到的b0个API'和API'ik按顺序排列,形成一种尺度为b的API特征序列;
因此,以上各种随机性扫描形成的尺度为b的API特征序列,均存入API特征序列集合C(API);
步骤4,利用统计频率筛选API特征序列集合C(API)中的各个API特征序列,得到筛选后的API特征序列集合C'(API),方法为:
设正常软件样本的总数量为|NS|,对于API特征序列集合C(API)中的每个API特征序列,统计其在所有正常软件样本的精简后的API调用序列中出现的次数F,计算该API特征序列的正常样本覆盖率F/|NS|;如果F/|NS|低于阈值C,则保留该API特征序列;否则,从API特征序列集合C(API)中剔除该API特征序列,进而得到筛选后的API特征序列集合C'(API);
步骤5,构造线性模型API特征序列训练集,方法为:
步骤5.1,对于筛选后的API特征序列集合C'(API),假设共有w个API特征序列,分别表示为:Q1,Q2,...,Qw,因此,C'(API)=<Q1,Q2,...,Qw>;
步骤5.2,对于每个软件样本si,根据其精简后的API调用序列API'i=<API'i1,API'i2,...,API'id>以及C'(API)=<Q1,Q2,...,Qw>,构造对应的输入向量Ei=<ei1,ei2,...,eiw>;其中,输入向量Ei中元素数量,与集合C'(API)中元素数量相等;输入向量Ei的各元素取值为:
如果集合C'(API)中的第1个API特征序列,即Q1出现在API调用序列API'i中,则输入向量Ei中第1个元素ei1取值为1;否则,输入向量Ei中第1个元素ei1取值为0;
如果集合C'(API)中的第2个API特征序列,即Q2出现在API调用序列API'i中,则输入向量Ei中第2个元素ei2取值为1;否则,输入向量Ei中第2个元素ei2取值为0;
依此类推
如果集合C'(API)中的第w个API特征序列,即Qw出现在API调用序列API'i中,则输入向量Ei中第w个元素eiw取值为1;否则,输入向量Ei中第w个元素eiw取值为0;
步骤5.3,对于软件样本si,定义标签真实值yi;标签真实值yi通过以下方式取值:如果软件样本si为恶意软件样本,则标签真实值yi为1;反之,如果软件样本si为正常软件样本,则标签真实值yi为0;
步骤5.4,将软件样本si的输入向量Ei和标签真实值yi组合,形成软件样本si的API特征序列训练样本QSi=<Ei,yi>=<ei1,ei2,...,eiw,yi>;
因此,对于p个软件样本,可对应得到p个API特征序列训练样本,从而形成线性模型API特征序列权重训练集;
步骤6,构建关于API特征序列权重的线性模型hβi
hβi=β01ei12ei2+...+βweiw (3)
其中:
β0为线性模型常数项;β12,...,βw分别为线性模型的系数;
构建输出转换模型:
其中:
f'i为与软件样本si对应的基于API特征序列权重的线性模型的标签预测值;
步骤7,根据线性模型hβi和输出转换模型,对线性模型hβi进行拟合,并在拟合过程中不断精简API特征序列集合C'(API),从而得到最终的关键API特征序列集合以及关于关键API特征序列权重的线性模型,具体方法为:
步骤7.1,根据线性模型hβi和输出转换模型,对线性模型hβi进行N轮迭代拟合,得到β012,...,βw的拟合值;
步骤7.2,对于每个API特征序列训练样本QSi=<Ei,yi>=<ei1,ei2,...,eiw,yi>,将ei1,ei2,...,eiw、β012,...,βw的值代入公式(3),计算得到hβi
步骤7.3,根据公式(4),得到API特征序列训练样本QSi的标签预测值f'i
步骤7.4,比较API特征序列训练样本QSi的标签真实值yi与标签预测值f'i,如果标签真实值yi与标签预测值f'i相等,代表线性模型hβi对API特征序列训练样本QSi预测正确,令统计量Di为1;反之,代表线性模型hβi对API特征序列训练样本QSi预测错误,令统计量Di为0;
步骤7.5,对于步骤5.4得到的训练样本集中的每个训练样本,均执行步骤7.1-步骤7.4,由于共有p个训练样本,可计算得到p个统计量Di;计算拟合度
如果本轮拟合度ε1低于上一轮拟合度,且两者差值大于阈值η,则停止迭代,执行步骤7.6;
否则,假设本轮得到的β012,...,βw表示为:β^0,β^1,β^2,...,β^w;预设置序列权重阈值ε2;检查系数β^1,β^2,...,β^w中每个系数β^z的值是否小于序列权重阈值ε2,其中,z=0,1,2,...,w,如果是,则将系数β^z对应的API特征序列Qz从API特征序列集合C'(API)中删除,从而得到精简后的API特征序列集合C"(API);然后,用精简后的API特征序列集合C"(API)替换上一轮得到的API特征序列集合C'(API),返回步骤6,重新执行步骤6、步骤7.1-步骤7.5;
步骤7.6,将上一轮得到的API特征序列集合称为关键API特征序列集合,设关键API特征序列集合共包括个关键API特征序列,分别为Q* 1,Q* 2,...,/>因此得到关键API特征序列集合/>
对应的,上一轮得到的Q* 1,Q* 2,...,分别对应的权重系数为:β* 1* 2,...,/>由此得到最终的关于关键API特征序列权重的线性模型/>
步骤8,利用最终得到的关于关键API特征序列权重的线性模型以及关键API特征序列集合/>检测被测软件是否为恶意软件,方法为:
步骤8.1,获得被测软件的API调用序列M1(API);
步骤8.2,利用步骤2构造的非关键API字典,将API调用序列M1(API)中的非关键API删除,得到精简后的API调用序列M2(API);
步骤8.3,通过前后向扫描,获得步骤7得到的关键API特征序列集合中各关键API特征序列的状态变量值,具体的:
如果关键API特征序列Q* 1出现在精简后的API调用序列M2(API)中,则关键API特征序列Q* 1的状态变量x1取值为1,否则,状态变量x1取值为0;
如果关键API特征序列Q* 2出现在精简后的API调用序列M2(API)中,则关键API特征序列Q* 2的状态变量x2取值为1,否则,状态变量x2取值为0;
依此类推
如果关键API特征序列出现在精简后的API调用序列M2(API)中,则关键API特征序列/>的状态变量/>取值为1,否则,状态变量/>取值为0;
由此得到状态变量x1,x2,...,的值;状态变量x1,x2,...,/>物理含义为:分别为关键API特征序列Q* 1,关键API特征序列Q* 2,...,关键API特征序列/>的权重值;
步骤8.4,组合关键API特征序列Q* 1,Q* 2,...,的状态变量值,构造得到输入向量/>
步骤8.5,将输入向量输入到步骤7得到的线性模型/>即公式(5),得到/>
如果则被测软件为恶意软件;如果/>则被测软件为正常软件。
优选的,步骤2.4具体为:
步骤2.4.1,预设置θ012,...,θn的初始值;
步骤2.4.2,对于每个训练样本TSi=<Xi,yi>=<xi1,xi2,...,xin,yi>,将xi1,xi2,...,xin、θ012,...,θn的值代入公式(1),计算得到hθi
步骤2.4.3,根据公式(2),得到训练样本TSi的标签预测值y'i
步骤2.4.4,比较训练样本TSi的标签真实值yi与标签预测值y'i,如果标签真实值yi与标签预测值y'i相等,代表线性模型hθi对训练样本TSi预测正确,令统计量Ai为1;反之,代表线性模型hθi对训练样本TSi预测错误,令统计量Ai为0;
步骤2.4.5,对于步骤2.2.4得到的训练样本集中的每个训练样本,均执行步骤2.4.2-步骤2.4.4,由于共有p个训练样本,可计算得到p个统计量Ai;计算拟合度
如果拟合度ε大于拟合度阈值η0,则停止迭代,此时得到的θ012,...,θn为最终的θ012,...,θn的值;如果拟合度ε不大于拟合度阈值η0,则调节θ012,...,θn的值,返回步骤2.4.2,重新进行拟合,直到拟合度ε大于拟合度阈值η0
本发明提供的一种基于特征序列挖掘和精简的恶意软件检测方法具有以下优点:
本发明提供的基于特征序列挖掘和精简的恶意软件检测方法,为一种基于软件行为的动态检测方法,本发明同时采用API特征序列精简和关键API扩展扫描这两项技术,提升了API特征序列的挖掘效率,从而能够全面得到更能反映恶意软件行为特征的API特征序列,既提高了恶意软件检测识别精度,又缩短了恶意软件检测识别耗费的时间,提高恶意软件检测识别效率。
附图说明
图1为本发明提供的一种基于特征序列挖掘和精简的恶意软件检测方法的流程示意图。
具体实施方式
为了使本发明所解决的技术问题、技术方案及有益效果更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
本发明提供一种基于特征序列挖掘和精简的恶意软件检测方法,一方面,通过恶意软件行为特征,即:关键API调用序列特征对恶意软件进行检测识别,由于为一种动态检测方法,可有效提高恶意软件检测识别准确度;另一方面,本发明对恶意软件API调用序列特征进行有效精简,提高恶意软件检测识别速度,以满足对恶意软件检测速度要求高的需求。
本发明提供一种基于特征序列挖掘和精简的恶意软件检测方法,主要思路为:
1、获得多个软件样本的API调用序列;
2、构造关键API字典和非关键API字典,从而对每个软件样本的API调用序列进行精简;
3、利用确定性和随机化前后向扫描方式,提取各个软件样本的API特征序列,得到API特征序列集合C(API);
4、采用统计频率筛选API特征序列集合C(API)中的各个API特征序列,得到筛选后的API特征序列集合C'(API);
5、构造线性模型API特征序列训练集;
6、构建关于API特征序列权重的线性模型和输出转换模型;
7、根据API特征序列权重的线性模型和输出转换模型,对线性模型进行拟合,并在拟合过程中不断精简API特征序列集合C'(API),从而得到最终的关键API特征序列集合以及关于关键API特征序列权重的线性模型;
8、利用最终得到的关于关键API特征序列权重的线性模型以及关键API特征序列集合/>检测被测软件是否为恶意软件。
参考图1,本发明提供的基于特征序列挖掘和精简的恶意软件检测方法,具体包括以下步骤:
步骤1,收集p个软件样本,分别为软件样本s1,s2,...,sp;其中,所述软件样本包括恶意软件样本和正常软件样本;
对于收集到的每个软件样本si,i=1,2,...,p,获得其API调用序列APIi=<APIi1,APIi2,...,APIic>;其中,c为软件样本si对应的API调用序列中包括的API的总数量;
在具体实现上,可采用以下方式实现:
1)针对KVM虚拟技术被云数据中心大规模采用的情况,搭建KVM虚拟化环境并配置linux虚拟机。
2)为了更好地模拟云应用环境,在Linux虚拟机安装hadoop软件和spark平台。
3)在linux虚拟机上基于Cuckoo沙箱软件搭建恶意软件动态分析环境。
4)将收集到的恶意软件样本集和正常软件样本集中的软件样本,逐个载入Cuckoo沙箱环境中运行。
5)根据Cuckoo沙箱输出的运行报告JSON文件,提取每个软件样本的API调用序列作为软件样本的动态特征。
步骤2,构造关键API字典和非关键API字典,从而对每个软件样本si的API调用序列APIi进行精简,得到每个软件样本si对应的精简后的API调用序列API'i
本步骤的目的是:步骤1提取的软件样本的API调用序列规模庞大,如果直接进行API特征序列挖掘,计算量大,无法在大型样本库上进行有效挖掘。
由于各种API调用序列中存在较多数量的普通API调用序列,这对于识别软件是否为恶意软件不能起到作用,因此,可以将这些普通API调用序列剔除,从而实现对API调用序列的精简,提升后面步骤中API调用序列挖掘的效率。
具体方法为:
步骤2.1,对p个软件样本的API调用序列包含的API进行统计分析,将重复的API去除,一共得到n种API,n种API形成的API集合表示为AS=<API[1],API[2],...,API[n]>;其中,API[1],API[2],...,API[n]分别代表第1种API,第2种API,...,第n种API;
步骤2.2,构造线性模型API权重训练集,方法为:
步骤2.2.1,对于每个软件样本si,根据其API调用序列APIi=<APIi1,APIi2,...,APIic>以及集合AS=<API[1],API[2],...,API[n]>,构造对应的输入向量Xi=<xi1,xi2,...,xin>;其中,输入向量Xi中元素数量,与集合AS中元素数量相等;输入向量Xi的各元素取值为:
如果集合AS中的API[1]出现在API调用序列APIi中,则输入向量Xi中第1个元素xi1取值为1;否则,输入向量Xi中第1个元素xi1取值为0;
如果集合AS中的API[2]出现在API调用序列APIi中,则输入向量Xi中第2个元素xi2取值为1;否则,输入向量Xi中第2个元素xi2取值为0;
依此类推
如果集合AS中的API[n]出现在API调用序列APIi中,则输入向量Xi中第n个元素xin取值为1;否则,输入向量Xi中第n个元素xin取值为0;
由此可以看出,输入向量Xi中各个元素,是刻画集合AS中对应API的布尔变量,取值为1或0。
步骤2.2.2,对于软件样本si,定义标签真实值yi;标签真实值yi通过以下方式取值:如果软件样本si为恶意软件样本,则标签真实值yi为1;反之,如果软件样本si为正常软件样本,则标签真实值yi为0;
步骤2.2.3,将软件样本si的输入向量Xi和标签真实值yi组合,形成软件样本si的训练样本TSi=<Xi,yi>=<xi1,xi2,...,xin,yi>;
例如:
假设n=4,则集合AS=<API[1],API[2],API[3],API[4]>;
对于某个软件样本,通过步骤1获得其API调用序列为<API[2],API[3],API[2],API[3],API[1]>;
则该软件样本的输入向量为:X=<x1,x2,x3,x4>=<1,1,1,0>。
其标签真实值y与软件样本类型有关,如果软件样本是恶意软件,则标签真实值y为1;如果软件样本是正常软件,则标签真实值y为0。
步骤2.2.4,因此,对于p个软件样本,可对应得到p个训练样本,从而形成线性模型API权重训练集;
步骤2.3,构建关于API权重的线性模型hθi
hθi=θ01xi12xi2+...+θnxin (1)
其中:
θ0为线性模型常数项;θ12,...,θn分别为线性模型的系数;
构建输出转换模型:
其中:
y'i为与软件样本si对应的基于API权重的线性模型的标签预测值;
步骤2.4,根据线性模型hθi和输出转换模型,对线性模型hθi进行拟合,得到最终的θ012,...,θn的值,从而得到最终的关于API权重的线性模型;
步骤2.4具体为:
步骤2.4.1,预设置θ012,...,θn的初始值;
步骤2.4.2,对于每个训练样本TSi=<Xi,yi>=<xi1,xi2,...,xin,yi>,将xi1,xi2,...,xin、θ012,...,θn的值代入公式(1),计算得到hθi
步骤2.4.3,根据公式(2),得到训练样本TSi的标签预测值y'i
步骤2.4.4,比较训练样本TSi的标签真实值yi与标签预测值y'i,如果标签真实值yi与标签预测值y'i相等,代表线性模型hθi对训练样本TSi预测正确,令统计量Ai为1;反之,代表线性模型hθi对训练样本TSi预测错误,令统计量Ai为0;
步骤2.4.5,对于步骤2.2.4得到的训练样本集中的每个训练样本,均执行步骤2.4.2-步骤2.4.4,由于共有p个训练样本,可计算得到p个统计量Ai;计算拟合度
如果拟合度ε大于拟合度阈值η0,则停止迭代,此时得到的θ012,...,θn为最终的θ012,...,θn的值;如果拟合度ε不大于拟合度阈值η0,则调节θ012,...,θn的值,返回步骤2.4.2,重新进行拟合,直到拟合度ε大于拟合度阈值η0
步骤2.5,对于集合AS=<API[1],API[2],...,API[n]>,系数θ1同时表示API[1]的权重,系数θ2同时表示API[2]的权重系数,...,系数θn同时表示API[n]的权重;例如,以系数θ1为例,系数θ1的绝对值越大,系数θ1对线性模型输出值影响就越大,所以,系数θ1对应集合AS中API[1]的权重越大。
预设置权重阈值ε0;例如,设置ε0等于0.005。
检查每个系数θj的绝对值是否小于权重阈值ε0,其中,j=1,2,...,n,如果是,则系数θj对应的API[j]为非关键API,并将非关键API存入非关键API字典;
设置百分比H,对各个系数θj的绝对值从大到小排序,获得排序最前面的H*n个系数;将获得的H*n个系数所对应的集合AS中的API[j]称为关键API,并将关键API存入关键API字典;
通过以上方法,非关键API字典中存储的各个非关键API,是指对识别软件样本是否为恶意软件影响非常小的普遍API,不能反映恶意软件行为特征;而关键API字典中存储的各个关键API,是指对识别软件样本是否为恶意软件影响非常大的API,能反映恶意软件行为特征。
步骤2.6,对于步骤1收集到的每个软件样本si,将其API调用序列APIi=<APIi1,APIi2,...,APIic>中的非关键API剔除,从而得到软件样本si对应的精简后的API调用序列API'i
例如:
假设n=4,则集合AS=<API[1],API[2],API[3],API[4]>;
对于某个软件样本,通过步骤1获得其API调用序列为<API[2],API[3],API[2],API[3],API[1]>;
步骤2获得非关键API字典NK=<API[2]
则该软件样本对应的精简后的API调用序列API'i为:<API[3],API[3],API[1]>。
通过实验可知,设置ε0等于0.005,通过剔除非关键API,软件样本的API调用序列的大小可以压缩到原来的10%左右,大大减少了大规模数据集的计算量,并且对恶意软件的识别准确度没有产生影响。
步骤3,对于每个软件样本si对应的精简后的API调用序列API'i,均对其API调用序列API'i进行挖掘,得到多个API特征序列,将各个API特征序列存入API特征序列集合C(API);
本步骤的目的是:步骤1提取的API调用序列的数量非常多,规模庞大,如果直接枚举式扫描进行API特征序列挖掘,计算量大,无法在大型样本库上进行高效挖掘。因此,本发明中,利用步骤2获得的关键API,围绕关键API对每个API调用序列进行前后向扫描,从而只提取包含关键API的API特征序列,此时得到的API特征序列的数量明显降低,从而提高API特征序列的挖掘效率,同时,提取到的API特征序列可充分反应恶意软件样本行为特征,进而不会影响恶意软件样本识别的准确度。
例如,常常遇到的恶意软件围绕的关键API是URLDownloadToFile,用于Payload下载。常常遇到的间谍软件或键盘记录器等恶意软件围绕的关键API是GetWindowDC,用于屏幕截取。所以,只需要获得包含关键API的API特征序列,即可充分反应恶意软件样本行为特征。
本步骤具体方法为:
步骤3.1,对于每个软件样本si对应的精简后的API调用序列API'i,定位到关键API,对于定位到的每个关键API,均执行步骤3.2-步骤3.3;
步骤3.2,利用确定性前后向扫描方式,提取与定义的窗口尺度对应的API特征序列,并存入API特征序列集合C(API),方法为:
预定义窗口尺度为b;利用确定性前后向扫描方式,提取所有种包含关键API的尺度为b的API特征序列;
例如,针对某个软件样本,步骤2获得精简后的API调用序列API'=<API[1],API[3],API[5],API[4],API[7]API[11],API[13],API[2],API[9],API[21]>;
步骤2获得关键API字典DK=<API[11]>;
如果窗口尺度为1,扫描精简后的API调用序列API',提取到的API特征序列为<API[11]>。
如果窗口尺度为2,扫描精简后的API调用序列API',提取到的API特征序列共有两个,分别为:<API[7],API[11]>和<API[11],API[13]>。
如果窗口尺度为3,扫描精简后的API调用序列API',提取到的API特征序列共有三个,分别为:<API[7],API[11],API[13]>,<API[4],API[7],API[11]>和<API[11],API[13],API[2]>。
窗口尺度最大值为可配置的参数,通常可以设置b等于5。
特别的,针对垃圾代码注入式恶意软件,本发明尤其设计以下步骤3.3中的随机化前向和后向多尺度窗口提取方式,从而提取不同尺度的API特征序列。
步骤3.3,利用随机性前后向扫描方式,提取与定义的窗口尺度对应的API特征序列,并存入API特征序列集合C(API),方法为:
步骤3.3.1,预定义窗口尺度为b;
步骤3.3.2,预定义随机截取阈值v*
步骤3.3.3,对于软件样本si,设精简后的API调用序列API'i为:API'i=<API'i1,API'i2,...,API'id>;其中,d为软件样本si对应的精简后的API调用序列API'i中包括的API的总数量;假设API'ik为API'i中的一个关键API;
步骤3.3.4,令计数器b0=0,计数器b1=0;
A1)进行前向扫描,方法为:
按照距离API'ik由近向远的顺序进行前向扫描,首先考察API'i(k-1),考察方法为:随机生成0到1之间的随机数v1,若v1大于阈值v*,则提取API'i(k-1),同时令b0=b0+1;如果v1不大于阈值v*,则不提取API'i(k+1),继续前向考察其他相邻的API';
A2)进行后向扫描,方法为:
按照距离API'ik由近向远的顺序进行后向扫描,首先考察API'i(k+1),考察方法为:随机生成0到1之间的随机数v2,若v2大于阈值v*,则提取API'i(k+1),同时令b1=b1+1;如果v2不大于阈值v*,则不提取API'i(k+1),继续后向考察其他相邻的API';
A3)当前向扫描提取到b0=0个API',而后向扫描提取到b1=b-1个API',则API'ik和后向扫描提取到的b1个API'按顺序排列,形成一种尺度为b的API特征序列;
当前向扫描提取到b0=1个API',而后向扫描提取到b1=b-2个API',则前向扫描提取到的b0个API'、API'ik和后向扫描提取到的b1个API'按顺序排列,形成一种尺度为b的API特征序列;
依此类推
当前向扫描提取到b0=b-1个API',而后向扫描提取到b1=0个API',则前向扫描提取到的b0个API'和API'ik按顺序排列,形成一种尺度为b的API特征序列;
因此,以上各种随机性扫描形成的尺度为b的API特征序列,均存入API特征序列集合C(API);
例如,针对某个软件样本,步骤2获得精简后的API调用序列API'=<API[1],API[3],API[5],API[4],API[7],API[11],API[13],API[2],API[9],API[21]>;
步骤2获得关键API字典DK=<API[11]>;
如果窗口尺度为3,则以下扫描方法如果可以实现,均需要采用:
1)前向扫描:
11)首先考察API[7],考察方法为:
随机生成0到1之间的随机数v1,若v1大于阈值v*,则提取API[7],同时令b0=b0+1;如果v1不大于阈值v*,则不提取API[7],继续向前考察API[4]
12)然后考察API[4],考察方法同样为:
随机生成0到1之间的随机数v3,若v3大于阈值v*,则提取API[4],同时令b0=b0+1;如果v3不大于阈值v*,则不提取API[4]
以此类推,进行前向扫描。
2)后向扫描:
21)首先考察API[13],考察方法为:
随机生成0到1之间的随机数v2,若v2大于阈值v*,则提取API[13],同时令b1=b1+1;如果v2不大于阈值v*,则不提取API[13],继续向后考察API[2]
22)然后考察API[2],考察方法同样为:
随机生成0到1之间的随机数v4,若v4大于阈值v*,则提取API[2],同时令b0=b0+1;如果v4不大于阈值v*,则不提取API[2]
以此类推,进行后向扫描。
由于关键API在精简后的API调用序列中的位置不同,所以前向扫描可提取到的API数量以及后向扫描可提取到的API数量,均需要根据实际情况而有所不同。因此,只要满足以下条件,均需要提取对应的一种API特征序列:
A1)如果后向扫描可成功提取到2个API,则API[11]和后向扫描提取到的2个API,组成尺度为3的一种API特征序列;
A2)如果前向扫描成功提取到1个API,而后向扫描成功提取到1个API,则前向扫描提取到的1个API、API[11]和后向扫描提取到的1个API,组成尺度为3的一种API特征序列;
A3)如果前向扫描能够成功提取到2个API,则前向扫描提取到的2个API和API[11],组成尺度为3的一种API特征序列。
由此共得到3种API特征序列。
需要注意的是,由于随机化阈值v*较小,所以随机化截取的API特征序列,大概率和步骤3.2中确定性截取的API特征序列相同。通过实验可知,设置阈值v*等于0.2时,采用确定性+随机化两种截取策略提取到的API特征序列总数,只比仅采用确定性截取策略提取到的API特征序列总数,增加不超过25%的API特征序列。
本发明中,阈值v*是可配置参数,通常可以设置阈值v*等于0.2。
当窗口尺度b设置较大时,获得的API特征序列数量庞大,可以进一步利用步骤4的统计频率筛选方式,对API特征序列进一步筛选。
步骤4,利用统计频率筛选API特征序列集合C(API)中的各个API特征序列,得到筛选后的API特征序列集合C'(API),方法为:
设正常软件样本的总数量为|NS|,对于API特征序列集合C(API)中的每个API特征序列,统计其在所有正常软件样本的精简后的API调用序列中出现的次数F,计算该API特征序列的正常样本覆盖率F/|NS|;如果F/|NS|低于阈值C,则保留该API特征序列;否则,从API特征序列集合C(API)中剔除该API特征序列,进而得到筛选后的API特征序列集合C'(API);
如果一个API特征序列在大部分正常软件样本中都出现,则该API特征序列不能作为恶意软件的行为特征序列。所以,只有当某个API特征序列的正常软件样本覆盖率低于阈值时,才能作为有效API特征序列,所以才保留该API特征序列。
通过实验可知,设置阈值C=10%,经过该步骤,API特征序列的数量可以压缩12.5%,能够有效减少大规模数据集的计算负荷。
步骤5,构造线性模型API特征序列训练集,方法为:
步骤5.1,对于筛选后的API特征序列集合C'(API),假设共有w个API特征序列,分别表示为:Q1,Q2,...,Qw,因此,C'(API)=<Q1,Q2,...,Qw>;
步骤5.2,对于每个软件样本si,根据其精简后的API调用序列API'i=<API'i1,API'i2,...,API'id>以及C'(API)=<Q1,Q2,...,Qw>,构造对应的输入向量Ei=<ei1,ei2,...,eiw>;其中,输入向量Ei中元素数量,与集合C'(API)中元素数量相等;输入向量Ei的各元素取值为:
如果集合C'(API)中的第1个API特征序列,即Q1出现在API调用序列API'i中,则输入向量Ei中第1个元素ei1取值为1;否则,输入向量Ei中第1个元素ei1取值为0;
如果集合C'(API)中的第2个API特征序列,即Q2出现在API调用序列API'i中,则输入向量Ei中第2个元素ei2取值为1;否则,输入向量Ei中第2个元素ei2取值为0;
依此类推
如果集合C'(API)中的第w个API特征序列,即Qw出现在API调用序列API'i中,则输入向量Ei中第w个元素eiw取值为1;否则,输入向量Ei中第w个元素eiw取值为0;
步骤5.3,对于软件样本si,定义标签真实值yi;标签真实值yi通过以下方式取值:如果软件样本si为恶意软件样本,则标签真实值yi为1;反之,如果软件样本si为正常软件样本,则标签真实值yi为0;
例如,筛选后的API特征序列集合C'(API)中,假设共有4个API特征序列,因此,C'(API)=<Q1,Q2,Q3,Q4>;其中,Q1=<API[2],API[3]>;Q2=<API[1]>;Q3=<API[4]>;Q1=<API[2],API[3],API[2]
对于某个软件样本,步骤2获得的API调用序列API'i为<API[2],API[3],API[2],API[3],API[1]>;
则该软件样本的输入向量E=<e1,e2,e3,e4>=<1,1,0,1>;
其标签真实值y与软件样本类型有关,如果软件样本是恶意软件,则标签真实值y为1;如果软件样本是正常软件,则标签真实值y为0。
步骤5.4,将软件样本si的输入向量Ei和标签真实值yi组合,形成软件样本si的API特征序列训练样本QSi=<Ei,yi>=<ei1,ei2,...,eiw,yi>;
因此,对于p个软件样本,可对应得到p个API特征序列训练样本,从而形成线性模型API特征序列权重训练集;
步骤6,构建关于API特征序列权重的线性模型hβi
hβi=β01ei12ei2+...+βweiw (3)
其中:
β0为线性模型常数项;β12,...,βw分别为线性模型的系数;
构建输出转换模型:
其中:
f'i为与软件样本si对应的基于API特征序列权重的线性模型的标签预测值;
步骤7,根据线性模型hβi和输出转换模型,对线性模型hβi进行拟合,并在拟合过程中不断精简API特征序列集合C'(API),从而得到最终的关键API特征序列集合以及关于关键API特征序列权重的线性模型,具体方法为:
步骤7.1,根据线性模型hβi和输出转换模型,采用步骤2.4的方法,对线性模型hβi进行N轮迭代拟合,得到β012,...,βw的拟合值;
步骤7.2,对于每个API特征序列训练样本QSi=<Ei,yi>=<ei1,ei2,...,eiw,yi>,将ei1,ei2,...,eiw、β012,...,βw的值代入公式(3),计算得到hβi
步骤7.3,根据公式(4),得到API特征序列训练样本QSi的标签预测值f'i
步骤7.4,比较API特征序列训练样本QSi的标签真实值yi与标签预测值f'i,如果标签真实值yi与标签预测值f'i相等,代表线性模型hβi对API特征序列训练样本QSi预测正确,令统计量Di为1;反之,代表线性模型hβi对API特征序列训练样本QSi预测错误,令统计量Di为0;
步骤7.5,对于步骤5.4得到的训练样本集中的每个训练样本,均执行步骤7.1-步骤7.4,由于共有p个训练样本,可计算得到p个统计量Di;计算拟合度
如果本轮拟合度ε1低于上一轮拟合度,且两者差值大于阈值η,则停止迭代,执行步骤7.6;
否则,假设本轮得到的β012,...,βw表示为:β^0,β^1,β^2,...,β^w;预设置序列权重阈值ε2;检查系数β^1,β^2,...,β^w中每个系数β^z的值是否小于序列权重阈值ε2,其中,z=0,1,2,...,w,如果是,则将系数β^z对应的API特征序列Qz从API特征序列集合C'(API)中删除,从而得到精简后的API特征序列集合C"(API);然后,用精简后的API特征序列集合C"(API)替换上一轮得到的API特征序列集合C'(API),返回步骤6,重新执行步骤6、步骤7.1-步骤7.5;
步骤7.6,将上一轮得到的API特征序列集合称为关键API特征序列集合,设关键API特征序列集合共包括个关键API特征序列,分别为Q* 1,Q* 2,...,/>因此得到关键API特征序列集合/>
对应的,上一轮得到的Q* 1,Q* 2,...,分别对应的权重系数为:β* 1* 2,...,/>由此得到最终的关于关键API特征序列权重的线性模型/>
/>
步骤8,利用最终得到的关于关键API特征序列权重的线性模型以及关键API特征序列集合/>检测被测软件是否为恶意软件,方法为:
步骤8.1,获得被测软件的API调用序列M1(API);
步骤8.2,利用步骤2构造的非关键API字典,将API调用序列M1(API)中的非关键API删除,得到精简后的API调用序列M2(API);
步骤8.3,通过前后向扫描,获得步骤7得到的关键API特征序列集合中各关键API特征序列的状态变量值,具体的:
如果关键API特征序列Q* 1出现在精简后的API调用序列M2(API)中,则关键API特征序列Q* 1的状态变量x1取值为1,否则,状态变量x1取值为0;
如果关键API特征序列Q* 2出现在精简后的API调用序列M2(API)中,则关键API特征序列Q* 2的状态变量x2取值为1,否则,状态变量x2取值为0;
依此类推
如果关键API特征序列出现在精简后的API调用序列M2(API)中,则关键API特征序列/>的状态变量/>取值为1,否则,状态变量/>取值为0;
由此得到状态变量x1,x2,...,的值;状态变量x1,x2,...,/>物理含义为:分别为关键API特征序列Q* 1,关键API特征序列Q* 2,...,关键API特征序列/>的权重值;
步骤8.4,组合关键API特征序列Q* 1,Q* 2,...,的状态变量值,构造得到输入向量/>
步骤8.5,将输入向量输入到步骤7得到的线性模型/>即公式(5),得到/>
如果则被测软件为恶意软件;如果/>则被测软件为正常软件。
本发明提供的一种基于特征序列挖掘和精简的恶意软件检测方法,具有以下特点:
(1)本发明提供的基于特征序列挖掘和精简的恶意软件检测方法,为一种基于软件行为的动态检测方法,本发明同时采用API特征序列精简和关键API扩展扫描这两项技术,提升了API特征序列的挖掘效率,从而能够全面得到更能反映恶意软件行为特征的API特征序列,既提高了恶意软件检测识别精度,又缩短了恶意软件检测识别耗费的时间,提高恶意软件检测识别效率。
(2)在API特征序列挖掘过程中,采用多尺度挖掘方法会导致API特征序列规模庞大,同时多尺度挖掘中的API特征序列嵌入重叠现象,也使得SVM和神经网络等分类模型容易产生过拟合。而本发明采用基于线性模型通过多次迭代进行API特征序列筛选,提升了模型的泛化能力。
实施例:
实验样本来源于某安全算法大赛使用的数据集,包括7类典型类别的恶意软件样本和正常软件样本。其中,7类恶意软件样本分别是:勒索病毒软件(98个)、挖矿软件(107个)、DDOS木马软件(185个)、蠕虫病毒软件(95个)、感染性病毒软件(221个)、后门和特洛伊木马软件(164个)。实验采用的正常软件样本是从操作系统Linux,windows和虚拟机软件VMware等软件包中提取的软件文件(2000个)。
(1)实施步骤1,利用沙箱技术获得各个软件样本的API调用序列。获得的各个软件样本的API调用序列的统计数据如表1所示。
表1
API调用序列平均长度
勒索病毒软件 136765
挖矿软件 2785781
DDOS木马软件 786875
蠕虫病毒软件 9877875
感染性病毒软件 635471
后门和特洛伊木马软件 6768390
正常软件 7663785
(2)实施步骤2,设置实验参数ε0=0.005,百分比H=10%,获得关键API字典和非关键API字典,字典大小如表2所示。
表2
继续实施步骤2,利用获得的非关键API字典,对各个软件样本的API调用序列进行精简。精简后的API调用序列的统计数据如表3所示。
表3
精简之后API调用序列平均长度 压缩效果
勒索病毒软件 16716 12.22%
挖矿软件 185178 6.65%
DDOS木马软件 46817 5.95%
蠕虫病毒软件 277187 2.81%
感染性病毒软件 35149 5.53%
后门和特洛伊木马软件 168130 2.48%
正常软件 1261377 16.46%
根据以上实验数据可知,设置ε0=0.005情况下,通过剔除非关键API,软件样本的API调用序列的大小可以压缩到原来的10%左右,大大减少了大规模数据集的计算负荷。
(3)实施步骤3,针对步骤2获得软件样本的API调用序列,围绕关键API,采用确定性和随机性前向和后向多尺度窗口截取方式,提取不同尺度的API特征序列。
设置确定性扫描窗口尺度最大值b=5,随机性扫描阈值v*=0.2情况下,获得的API特征序列数量如表4所示。
表4
从表中数据可知,设置阈值v*=0.2时,采用确定性+随机化的两种截取策略获得的API特征序列总数,只比仅采用确定性截取策略获得的API特征序列总数,增加不超过25%的特征序列。
(4)继续实施步骤4,设置阈值C=10%,利用统计频率进行API特征序列筛选。筛选之后的API特征序列统计数据如表5所示。
表5
根据实验数据可知,筛选之后的API特征序列数量为筛选之前的80%左右,能够缓解大规模数据集的计算负荷。
(5)实施步骤5-步骤7,利用线性模型迭代构造最优化检测分类模型和关键API特征序列集合。
实验过程中,设置η=0.5%,一共实施5轮优化,每一轮优化结果如表6所示。
表6
从实验数据可知,每一轮迭代中,由于API特征序列的剔除,API特征序列集合中包含的API特征序列数量会减少。
在前三轮迭代过程中,线性模型的拟合度不断提升,其原因是:这三轮剔除的都是非关键的API特征序列,通过排除非关键API特征序列的干扰,检测分类模型能够更好的利用关键API特征序列进行预测分类,所以拟合度不断提升。
第4轮中,被剔除的API特征序列中有少量关键API特征序列,所以模型的拟合度下降,但是由于仅仅降低0.3%,小于阈值0.5%,所以允许进行第5轮迭代。
显然第5轮中,被剔除的API特征序列中有大量关键API特征序列,所以拟合度急剧下降,下降值超过阈值0.5%。此时迭代停止。并且将前一轮,即第4轮获得线性模型作为最优的检测分类模型,获得的API特征序列集合作为关键API特征序列集合。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视本发明的保护范围。

Claims (2)

1.一种基于特征序列挖掘和精简的恶意软件检测方法,其特征在于,包括以下步骤:
步骤1,收集p个软件样本,分别为软件样本s1,s2,...,sp;其中,所述软件样本包括恶意软件样本和正常软件样本;
对于收集到的每个软件样本si,i=1,2,...,p,获得其API调用序列APIi=<APIi1,APIi2,...,APIic>;其中,c为软件样本si对应的API调用序列中包括的API的总数量;
步骤2,构造关键API字典和非关键API字典,从而对每个软件样本si的API调用序列APIi进行精简,得到每个软件样本si对应的精简后的API调用序列API'i,具体方法为:
步骤2.1,对p个软件样本的API调用序列包含的API进行统计分析,将重复的API去除,一共得到n种API,n种API形成的API集合表示为AS=<API[1],API[2],...,API[n]>;其中,API[1],API[2],...,API[n]分别代表第1种API,第2种API,...,第n种API;
步骤2.2,构造线性模型API权重训练集,方法为:
步骤2.2.1,对于每个软件样本si,根据其API调用序列APIi=<APIi1,APIi2,...,APIic>以及集合AS=<API[1],API[2],...,API[n]>,构造对应的输入向量Xi=<xi1,xi2,...,xin>;其中,输入向量Xi中元素数量,与集合AS中元素数量相等;输入向量Xi的各元素取值为:
如果集合AS中的API[1]出现在API调用序列APIi中,则输入向量Xi中第1个元素xi1取值为1;否则,输入向量Xi中第1个元素xi1取值为0;
如果集合AS中的API[2]出现在API调用序列APIi中,则输入向量Xi中第2个元素xi2取值为1;否则,输入向量Xi中第2个元素xi2取值为0;
依此类推
如果集合AS中的API[n]出现在API调用序列APIi中,则输入向量Xi中第n个元素xin取值为1;否则,输入向量Xi中第n个元素xin取值为0;
步骤2.2.2,对于软件样本si,定义标签真实值yi;标签真实值yi通过以下方式取值:如果软件样本si为恶意软件样本,则标签真实值yi为1;反之,如果软件样本si为正常软件样本,则标签真实值yi为0;
步骤2.2.3,将软件样本si的输入向量Xi和标签真实值yi组合,形成软件样本si的训练样本TSi=<Xi,yi>=<xi1,xi2,...,xin,yi>;
步骤2.2.4,因此,对于p个软件样本,可对应得到p个训练样本,从而形成线性模型API权重训练集;
步骤2.3,构建关于API权重的线性模型hθi
hθi=θ01xi12xi2+...+θnxin (1)
其中:
θ0为线性模型常数项;θ12,...,θn分别为线性模型的系数;
构建输出转换模型:
其中:
y'i为与软件样本si对应的基于API权重的线性模型的标签预测值;
步骤2.4,根据线性模型hθi和输出转换模型,对线性模型hθi进行拟合,得到最终的θ012,...,θn的值,从而得到最终的关于API权重的线性模型;
步骤2.5,对于集合AS=<API[1],API[2],...,API[n]>,系数θ1同时表示API[1]的权重,系数θ2同时表示API[2]的权重系数,...,系数θn同时表示API[n]的权重;
预设置权重阈值ε0;检查每个系数θj的绝对值是否小于权重阈值ε0,其中,j=1,2,...,n,如果是,则系数θj对应的API[j]为非关键API,并将非关键API存入非关键API字典;
设置百分比H,对各个系数θj的绝对值从大到小排序,获得排序最前面的H*n个系数;将获得的H*n个系数所对应的集合AS中的API[j]称为关键API,并将关键API存入关键API字典;
步骤2.6,对于步骤1收集到的每个软件样本si,将其API调用序列APIi=<APIi1,APIi2,...,APIic>中的非关键API剔除,从而得到软件样本si对应的精简后的API调用序列API'i
步骤3,对于每个软件样本si对应的精简后的API调用序列API'i,均对其API调用序列API'i进行挖掘,得到多个API特征序列,将各个API特征序列存入API特征序列集合C(API),具体方法为:
步骤3.1,对于每个软件样本si对应的精简后的API调用序列API'i,定位到关键API,对于定位到的每个关键API,均执行步骤3.2-步骤3.3;
步骤3.2,利用确定性前后向扫描方式,提取与定义的窗口尺度对应的API特征序列,并存入API特征序列集合C(API),方法为:
预定义窗口尺度为b;利用确定性前后向扫描方式,提取所有种包含关键API的尺度为b的API特征序列;
步骤3.3,利用随机性前后向扫描方式,提取与定义的窗口尺度对应的API特征序列,并存入API特征序列集合C(API),方法为:
步骤3.3.1,预定义窗口尺度为b;
步骤3.3.2,预定义随机截取阈值v*
步骤3.3.3,对于软件样本si,精简后的API调用序列API'i为:API'i=<API'i1,API'i2,...,API'id>;其中,d为软件样本si对应的精简后的API调用序列API'i中包括的API的总数量;API'ik为API'i中的一个关键API;
步骤3.3.4,令计数器b0=0,计数器b1=0;
A1)进行前向扫描,方法为:
按照距离API'ik由近向远的顺序进行前向扫描,首先考察API'i(k-1),考察方法为:随机生成0到1之间的随机数v1,若v1大于阈值v*,则提取API'i(k-1),同时令b0=b0+1;如果v1不大于阈值v*,则不提取API'i(k+1),继续前向考察其他相邻的API';
A2)进行后向扫描,方法为:
按照距离API'ik由近向远的顺序进行后向扫描,首先考察API'i(k+1),考察方法为:随机生成0到1之间的随机数v2,若v2大于阈值v*,则提取API'i(k+1),同时令b1=b1+1;如果v2不大于阈值v*,则不提取API'i(k+1),继续后向考察其他相邻的API';
A3)当前向扫描提取到b0=0个API',而后向扫描提取到b1=b-1个API',则API'ik和后向扫描提取到的b1个API'按顺序排列,形成一种尺度为b的API特征序列;
当前向扫描提取到b0=1个API',而后向扫描提取到b1=b-2个API',则前向扫描提取到的b0个API'、API'ik和后向扫描提取到的b1个API'按顺序排列,形成一种尺度为b的API特征序列;
依此类推
当前向扫描提取到b0=b-1个API',而后向扫描提取到b1=0个API',则前向扫描提取到的b0个API'和API'ik按顺序排列,形成一种尺度为b的API特征序列;
因此,以上各种随机性扫描形成的尺度为b的API特征序列,均存入API特征序列集合C(API);
步骤4,利用统计频率筛选API特征序列集合C(API)中的各个API特征序列,得到筛选后的API特征序列集合C'(API),方法为:
正常软件样本的总数量为|NS|,对于API特征序列集合C(API)中的每个API特征序列,统计其在所有正常软件样本的精简后的API调用序列中出现的次数F,计算该API特征序列的正常样本覆盖率F/|NS|;如果F/|NS|低于阈值C,则保留该API特征序列;否则,从API特征序列集合C(API)中剔除该API特征序列,进而得到筛选后的API特征序列集合C'(API);
步骤5,构造线性模型API特征序列训练集,方法为:
步骤5.1,对于筛选后的API特征序列集合C'(API),共有w个API特征序列,分别表示为:Q1,Q2,...,Qw,因此,C'(API)=<Q1,Q2,...,Qw>;
步骤5.2,对于每个软件样本si,根据其精简后的API调用序列API'i=<API'i1,API'i2,...,API'id>以及C'(API)=<Q1,Q2,...,Qw>,构造对应的输入向量Ei=<ei1,ei2,...,eiw>;其中,输入向量Ei中元素数量,与集合C'(API)中元素数量相等;输入向量Ei的各元素取值为:
如果集合C'(API)中的第1个API特征序列,即Q1出现在API调用序列API'i中,则输入向量Ei中第1个元素ei1取值为1;否则,输入向量Ei中第1个元素ei1取值为0;
如果集合C'(API)中的第2个API特征序列,即Q2出现在API调用序列API'i中,则输入向量Ei中第2个元素ei2取值为1;否则,输入向量Ei中第2个元素ei2取值为0;
依此类推
如果集合C'(API)中的第w个API特征序列,即Qw出现在API调用序列API'i中,则输入向量Ei中第w个元素eiw取值为1;否则,输入向量Ei中第w个元素eiw取值为0;
步骤5.3,对于软件样本si,定义标签真实值yi;标签真实值yi通过以下方式取值:如果软件样本si为恶意软件样本,则标签真实值yi为1;反之,如果软件样本si为正常软件样本,则标签真实值yi为0;
步骤5.4,将软件样本si的输入向量Ei和标签真实值yi组合,形成软件样本si的API特征序列训练样本QSi=<Ei,yi>=<ei1,ei2,...,eiw,yi>;
因此,对于p个软件样本,可对应得到p个API特征序列训练样本,从而形成线性模型API特征序列权重训练集;
步骤6,构建关于API特征序列权重的线性模型hβi
hβi=β01ei12ei2+...+βweiw (3)
其中:
β0为线性模型常数项;β12,...,βw分别为线性模型的系数;
构建输出转换模型:
其中:
f'i为与软件样本si对应的基于API特征序列权重的线性模型的标签预测值;
步骤7,根据线性模型hβi和输出转换模型,对线性模型hβi进行拟合,并在拟合过程中不断精简API特征序列集合C'(API),从而得到最终的关键API特征序列集合以及关于关键API特征序列权重的线性模型,具体方法为:
步骤7.1,根据线性模型hβi和输出转换模型,对线性模型hβi进行N轮迭代拟合,得到β012,...,βw的拟合值;
步骤7.2,对于每个API特征序列训练样本QSi=<Ei,yi>=<ei1,ei2,...,eiw,yi>,将ei1,ei2,...,eiw、β012,...,βw的值代入公式(3),计算得到hβi
步骤7.3,根据公式(4),得到API特征序列训练样本QSi的标签预测值f'i
步骤7.4,比较API特征序列训练样本QSi的标签真实值yi与标签预测值f'i,如果标签真实值yi与标签预测值f'i相等,代表线性模型hβi对API特征序列训练样本QSi预测正确,令统计量Di为1;反之,代表线性模型hβi对API特征序列训练样本QSi预测错误,令统计量Di为0;
步骤7.5,对于步骤5.4得到的训练样本集中的每个训练样本,均执行步骤7.1-步骤7.4,由于共有p个训练样本,可计算得到p个统计量Di;计算拟合度
如果本轮拟合度ε1低于上一轮拟合度,且两者差值大于阈值η,则停止迭代,执行步骤7.6;
否则,本轮得到的β012,...,βw表示为:β^0,β^1,β^2,...,β^w;预设置序列权重阈值ε2;检查系数β^1,β^2,...,β^w中每个系数β^z的值是否小于序列权重阈值ε2,其中,z=0,1,2,...,w,如果是,则将系数β^z对应的API特征序列Qz从API特征序列集合C'(API)中删除,从而得到精简后的API特征序列集合C"(API);然后,用精简后的API特征序列集合C"(API)替换上一轮得到的API特征序列集合C'(API),返回步骤6,重新执行步骤6、步骤7.1-步骤7.5;
步骤7.6,将上一轮得到的API特征序列集合称为关键API特征序列集合,关键API特征序列集合共包括个关键API特征序列,分别为/>因此得到关键API特征序列集合/>
对应的,上一轮得到的分别对应的权重系数为:/>由此得到最终的关于关键API特征序列权重的线性模型/>
步骤8,利用最终得到的关于关键API特征序列权重的线性模型以及关键API特征序列集合/>检测被测软件是否为恶意软件,方法为:
步骤8.1,获得被测软件的API调用序列M1(API);
步骤8.2,利用步骤2构造的非关键API字典,将API调用序列M1(API)中的非关键API删除,得到精简后的API调用序列M2(API);
步骤8.3,通过前后向扫描,获得步骤7得到的关键API特征序列集合中各关键API特征序列的状态变量值,具体的:
如果关键API特征序列Q* 1出现在精简后的API调用序列M2(API)中,则关键API特征序列Q* 1的状态变量x1取值为1,否则,状态变量x1取值为0;
如果关键API特征序列Q* 2出现在精简后的API调用序列M2(API)中,则关键API特征序列Q* 2的状态变量x2取值为1,否则,状态变量x2取值为0;
依此类推
如果关键API特征序列出现在精简后的API调用序列M2(API)中,则关键API特征序列/>的状态变量/>取值为1,否则,状态变量/>取值为0;
由此得到状态变量的值;状态变量/>物理含义为:分别为关键API特征序列Q* 1,关键API特征序列Q* 2,...,关键API特征序列/>的权重值;
步骤8.4,组合关键API特征序列的状态变量值,构造得到输入向量
步骤8.5,将输入向量输入到步骤7得到的线性模型/>即公式(5),得到/>
如果则被测软件为恶意软件;如果/>则被测软件为正常软件。
2.根据权利要求1所述的基于特征序列挖掘和精简的恶意软件检测方法,其特征在于,步骤2.4具体为:
步骤2.4.1,预设置θ012,...,θn的初始值;
步骤2.4.2,对于每个训练样本TSi=<Xi,yi>=<xi1,xi2,...,xin,yi>,将xi1,xi2,...,xin、θ012,...,θn的值代入公式(1),计算得到hθi
步骤2.4.3,根据公式(2),得到训练样本TSi的标签预测值y'i
步骤2.4.4,比较训练样本TSi的标签真实值yi与标签预测值y'i,如果标签真实值yi与标签预测值y'i相等,代表线性模型hθi对训练样本TSi预测正确,令统计量Ai为1;反之,代表线性模型hθi对训练样本TSi预测错误,令统计量Ai为0;
步骤2.4.5,对于步骤2.2.4得到的训练样本集中的每个训练样本,均执行步骤2.4.2-步骤2.4.4,由于共有p个训练样本,可计算得到p个统计量Ai;计算拟合度
如果拟合度ε大于拟合度阈值η0,则停止迭代,此时得到的θ012,...,θn为最终的θ012,...,θn的值;如果拟合度ε不大于拟合度阈值η0,则调节θ012,...,θn的值,返回步骤2.4.2,重新进行拟合,直到拟合度ε大于拟合度阈值η0
CN202010864197.9A 2020-08-25 2020-08-25 一种基于特征序列挖掘和精简的恶意软件检测方法 Active CN112000954B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010864197.9A CN112000954B (zh) 2020-08-25 2020-08-25 一种基于特征序列挖掘和精简的恶意软件检测方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010864197.9A CN112000954B (zh) 2020-08-25 2020-08-25 一种基于特征序列挖掘和精简的恶意软件检测方法

Publications (2)

Publication Number Publication Date
CN112000954A CN112000954A (zh) 2020-11-27
CN112000954B true CN112000954B (zh) 2024-01-30

Family

ID=73471620

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010864197.9A Active CN112000954B (zh) 2020-08-25 2020-08-25 一种基于特征序列挖掘和精简的恶意软件检测方法

Country Status (1)

Country Link
CN (1) CN112000954B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116578981B (zh) * 2023-07-12 2023-09-22 中国科学院合肥物质科学研究院 基于关键片段提取的恶意软件检测模型训练、方法和系统

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103177215A (zh) * 2013-03-05 2013-06-26 四川电力科学研究院 基于软件控制流特征的计算机恶意软件检测新方法
WO2017084451A1 (zh) * 2015-11-18 2017-05-26 腾讯科技(深圳)有限公司 识别恶意软件的方法和装置
CN109508545A (zh) * 2018-11-09 2019-03-22 北京大学 一种基于稀疏表示和模型融合的Android Malware分类方法
CN109753800A (zh) * 2019-01-02 2019-05-14 重庆邮电大学 融合频繁项集与随机森林算法的Android恶意应用检测方法及系统
CN110135160A (zh) * 2019-04-29 2019-08-16 北京邮电大学 软件检测的方法、装置及系统
CN111027069A (zh) * 2019-11-29 2020-04-17 暨南大学 恶意软件家族检测方法、存储介质和计算设备
WO2020134311A1 (zh) * 2018-12-26 2020-07-02 中兴通讯股份有限公司 一种恶意软件检测方法和装置

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20170108330A (ko) * 2016-03-17 2017-09-27 한국전자통신연구원 악성 코드 탐지 장치 및 방법
WO2018178027A1 (en) * 2017-03-28 2018-10-04 British Telecommunications Public Limited Company Intialisation vector identification for malware file detection

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103177215A (zh) * 2013-03-05 2013-06-26 四川电力科学研究院 基于软件控制流特征的计算机恶意软件检测新方法
WO2017084451A1 (zh) * 2015-11-18 2017-05-26 腾讯科技(深圳)有限公司 识别恶意软件的方法和装置
CN109508545A (zh) * 2018-11-09 2019-03-22 北京大学 一种基于稀疏表示和模型融合的Android Malware分类方法
WO2020134311A1 (zh) * 2018-12-26 2020-07-02 中兴通讯股份有限公司 一种恶意软件检测方法和装置
CN109753800A (zh) * 2019-01-02 2019-05-14 重庆邮电大学 融合频繁项集与随机森林算法的Android恶意应用检测方法及系统
CN110135160A (zh) * 2019-04-29 2019-08-16 北京邮电大学 软件检测的方法、装置及系统
CN111027069A (zh) * 2019-11-29 2020-04-17 暨南大学 恶意软件家族检测方法、存储介质和计算设备

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
基于API序列特征和统计特征组合的恶意样本检测框架;芦效峰;蒋方朔;周箫;崔宝江;伊胜伟;沙晶;;清华大学学报(自然科学版)(第05期);全文 *
基于注意力机制的恶意软件调用序列检测;张岚;来耀;叶晓俊;;计算机科学(第12期);全文 *

Also Published As

Publication number Publication date
CN112000954A (zh) 2020-11-27

Similar Documents

Publication Publication Date Title
Liu et al. ATMPA: attacking machine learning-based malware visualization detection methods via adversarial examples
CN109359439B (zh) 软件检测方法、装置、设备及存储介质
CN109784056B (zh) 一种基于深度学习的恶意软件检测方法
US9454658B2 (en) Malware detection using feature analysis
CN110704840A (zh) 一种基于卷积神经网络cnn的恶意软件检测方法
Sun et al. Malware family classification method based on static feature extraction
Sun et al. An opcode sequences analysis method for unknown malware detection
Falana et al. Mal-Detect: An intelligent visualization approach for malware detection
KR20120073018A (ko) 악성 코드 탐지를 위한 시스템 및 방법
Kakisim et al. Sequential opcode embedding-based malware detection method
Vadrevu et al. Maxs: Scaling malware execution with sequential multi-hypothesis testing
Yuste et al. Optimization of code caves in malware binaries to evade machine learning detectors
AU2022215147B2 (en) Machine learning methods and systems for determining file risk using content disarm and reconstruction analysis
Manavi et al. A new approach for malware detection based on evolutionary algorithm
CN112000954B (zh) 一种基于特征序列挖掘和精简的恶意软件检测方法
Ma et al. Using multi-features to reduce false positive in malware classification
Fazlali et al. Metamorphic malware detection using opcode frequency rate and decision tree
CN108229168B (zh) 一种嵌套类文件的启发式检测方法、系统及存储介质
Aditya et al. Deep learning for malware classification platform using windows api call sequence
RU2747464C2 (ru) Способ обнаружения вредоносных файлов на основании фрагментов файлов
De La Rosa et al. Efficient characterization and classification of malware using deep learning
Liu et al. FENOC: an ensemble one-class learning framework for malware detection
Sawaisarje et al. Malware detection based on string length histogram using machine learning
Xia et al. Malware classification with Markov transition field encoded images
Lee et al. A Lightweight Malware Classification Method Based on Detection Results of Anti-Virus Software

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
TA01 Transfer of patent application right

Effective date of registration: 20231116

Address after: 362000 Fengze District, Quanzhou City, Fujian Province

Applicant after: HUAQIAO University

Applicant after: Baizhuo Information Technology Co.,Ltd.

Address before: 321004 No.588, Yingbin Avenue, Wucheng District, Jinhua City, Zhejiang Province

Applicant before: Mo Yuchang

TA01 Transfer of patent application right
GR01 Patent grant
GR01 Patent grant