CN115080982A - 一种针对漏洞检测模型的组合对抗攻击方法 - Google Patents

一种针对漏洞检测模型的组合对抗攻击方法 Download PDF

Info

Publication number
CN115080982A
CN115080982A CN202210729780.8A CN202210729780A CN115080982A CN 115080982 A CN115080982 A CN 115080982A CN 202210729780 A CN202210729780 A CN 202210729780A CN 115080982 A CN115080982 A CN 115080982A
Authority
CN
China
Prior art keywords
code
statement
population
sample
perturbation
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.)
Granted
Application number
CN202210729780.8A
Other languages
English (en)
Other versions
CN115080982B (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.)
Harbin Institute of Technology
Original Assignee
Harbin Institute of Technology
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 Harbin Institute of Technology filed Critical Harbin Institute of Technology
Priority to CN202210729780.8A priority Critical patent/CN115080982B/zh
Publication of CN115080982A publication Critical patent/CN115080982A/zh
Application granted granted Critical
Publication of CN115080982B publication Critical patent/CN115080982B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/004Artificial life, i.e. computing arrangements simulating life
    • G06N3/006Artificial life, i.e. computing arrangements simulating life based on simulated virtual individual or collective life forms, e.g. social simulations or particle swarm optimisation [PSO]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/12Computing arrangements based on biological models using genetic models
    • G06N3/126Evolutionary algorithms, e.g. genetic algorithms or genetic programming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biophysics (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Computing Systems (AREA)
  • General Physics & Mathematics (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • General Health & Medical Sciences (AREA)
  • Evolutionary Biology (AREA)
  • Mathematical Physics (AREA)
  • Molecular Biology (AREA)
  • Artificial Intelligence (AREA)
  • Biomedical Technology (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Genetics & Genomics (AREA)
  • Physiology (AREA)
  • Stored Programmes (AREA)
  • Machine Translation (AREA)

Abstract

本发明公开了一种针对漏洞检测模型的组合对抗攻击方法,首先使用本发明中提出的4种代码扰动方法对程序骨架中可修改的语句进行扰动,生成大量语义相似的候选样本。其次,利用生成的候选样本初始化遗传算法的种群规模和成员,然后,根据不同的扰动方法设计变异算子,并对种群成员进行选择、交叉和变异操作生成新的种群;最后,判断每次迭代生成的新种群中是否存在适应度大于一定阈值的成员,如果存在,则表示成功获得对抗样本。根据本发明提出的多种代码扰动方法,可实现对各种语法要素执行语义保持的程序等价变换,从而提高生成的对抗样本质量。通过将遗传搜索策略与多种代码扰动方法相结合,能够提高对代码漏洞检测模型的攻击成功率和攻击效率。

Description

一种针对漏洞检测模型的组合对抗攻击方法
技术领域
本发明涉及一种漏洞检测模型的对抗攻击方法,具体涉及一种针对漏洞检测模型的组合对抗攻击方法。
背景技术
软件漏洞检测是保证软件质量和安全性的关键步骤,是软件工程领域的重要研究课题之一。日益增长的漏洞数量促使人们不断探索更高效、准确的自动化识别方法,其中基于深度学习的模型由于可以自动提取漏洞特征,摆脱了专家手工定义漏洞特征的桎梏,并在源代码漏洞检测上取得了良好的性能,受到越来越多的关注。但是,目前已有大量研究表明,深度学习模型具有脆弱性,容易受到对抗样本攻击,导致输出错误的识别结果。对抗样本是指在样本上施加一个精心设计的扰动后生成的新样本,该样本在保持与原始样本的语义相似性的条件下,使得模型输出错误的识别结果。如果对漏洞代码样本稍加扰动便可轻易逃避检测,将会对软件安全构成严重威胁,并可能对用户或者国家带来巨大的损失。鉴于漏洞检测对于保障软件安全的重要性,研究漏洞检测模型的对抗攻击方法有着重要的实际意义。
目前,针对深度学习模型进行对抗攻击的研究主要集中在图像处理和自然语言处理领域,在源代码任务领域的研究甚少。图像领域的输入空间是连续的,攻击方法大多基于梯度,通过求梯度来确定扰动的方向和大小。文本领域的输入空间是离散的,攻击方法主要基于词的插入、替换和删除,采用同义词或者词向量嵌入空间距离相近的词作为替换和插入的候选词。在源代码任务领域,基于梯度和词替换的对抗攻击方法无法保证程序语法和语义的正确性,现有的攻击方法中,普适性最强的是标识符重命名、插入死代码、插入打印语句方法和修改函数结构,这些方法能应用于任何粒度的漏洞检测模型中,然而标识符重命名对于不依赖变量名称的漏洞检测模型无效,而对于修改函数结构的方法,作者(Li,Zhen,et al."Towards Making Deep Learning-based Vulnerability DetectorsRobust."arXiv preprint arXiv:2108.00669(2021).)只是描述了这些方法的功能以及实现这些方法的非开源工具Tigress(https://tigress.wtf/),没有给出方法具体的实施方式,导致难以灵活使用该方法。其它可用方法中,例如布尔值替换、前后缀交换等方法普适性较差,在细粒度漏洞检测模型上的生成的扰动样本数量较少,原因是细粒度检测模型的输入样本中,包含能够应用这些扰动方法的语法结构的样本占比较少。因此,仅使用现有的扰动方法在细粒度漏洞检测模型上的可生成的扰动样本数量较少,使得找到对抗样本的概率较低。
发明内容
本发明的目的是提供一种针对漏洞检测模型的组合对抗攻击方法,该方法提出4种新的适用于程序代码的保持语义的扰动方法,并提出结合遗传搜索策略的组合攻击方法以提高生成的对抗样本的质量以及提高攻击的成功率。另外,本发明提出在程序骨架而不是在原始程序上进行扰动,从而避免对程序分析工具的频繁调用,提高模型攻击的效率。
本发明的目的是通过以下技术方案实现的:
一种针对漏洞检测模型的组合对抗攻击方法,首先使用本发明中提出的4种代码扰动方法对程序骨架中可修改的语句进行扰动,生成大量语义相似的候选样本。其次,利用生成的候选样本初始化遗传算法的种群规模和成员,然后,根据不同的扰动方法设计变异算子,并对种群成员进行选择、交叉和变异操作生成新的种群;最后,判断每次迭代生成的新种群中是否存在适应度大于一定阈值的成员,如果存在,则表示成功获得对抗样本。包括如下步骤:
步骤1:对用于训练漏洞检测模型的数据进行预处理,生成程序骨架;
步骤2:使用4种语义保持的代码扰动方法对程序骨架中可修改的语句进行扰动,生成大量语义相似的候选样本,4种语义保持的代码扰动方法包括变异测试生成等价变异体、交换无数据依赖关系的相邻代码行、常量替换、宏定义替换;
步骤3:以步骤2生成的候选样本的数量作为种群规模,所有的候选样本作为种群成员,进行种群初始化;
步骤4:利用遗传算法的选择算子,根据针对漏洞程序构造的适应度函数挑选步骤3中合适的种群成员加入下一代种群;
步骤5:利用遗传算法的交叉算子,在给定的交叉概率下重组步骤3中种群成员中的两个个体,生成新的种群成员加入下一代种群;
步骤6:根据步骤2提出的4种代码扰动方法和现有的3种代码扰动方法设计变异算子,在给定的变异概率下,对步骤4和步骤5所生成的新一代种群成员进行变异,生成新的变异样本加入下一代种群,现有的3种代码扰动方法包括插入冗余代码、函数合并、循环等价变换;
步骤7:对步骤6生成的新一代种群成员执行标识符标准化;
步骤8:按照步骤4设计的适应度值计算方法,计算标识符标准化后的新一代种群成员的适应度;
步骤9:如果步骤6生成的种群中存在大于适应度阈值的成员,则成功获得对抗样本,否则在步骤6生成的种群上跳回执行步骤4,直到超过预设的最大迭代次数。
相比现有技术,本发明具有如下优点:
(1)本发明提出使用变异测试生成等价变异体、交换无数据依赖关系的相邻代码行、常量替换和宏定义替换方法等4种普适性强、扰动较小并且能够在语义保持的条件下改变代码的数据依赖、控制依赖等结构信息的代码扰动方法作为攻击方法,与现有的插入冗余代码、函数合并和循环等价变换等3种代码扰动方法组合,作为组合攻击方法,有利于提高攻击成功率。同时,本发明提出的4种代码扰动方法都是在有限的语句范围内执行保持语义不变的等价变换,不影响代码的原始功能。
(2)本发明在组合攻击过程中利用遗传算法提高攻击成功率和效率,相比于利用贪心算法寻找token位置再选择token扰动方式的攻击方法(Chen,Penglong,et al."Generating Adversarial Source Programs Using Important Tokens-basedStructural Transformations."2022 26th International Conference on Engineeringof Complex Computer Systems(ICECCS).IEEE,2022.),本发明利用遗传算法将7种代码扰动方法组合起来,以程序语句作为基因,在语句修改过程中,在语句上可选用的扰动方法更多,并且遗传算法更容易得到全局最优解,能够快速和准确地找到高质量的对抗样本,在保证较小扰动前提下,提高模型的攻击成功率和攻击效率。同时,在遗传算法种群迭代进化过程中,可以通过限制在每个基因(即每条语句)上的攻击次数,移除不满足扰动次数约束的成员,保证找到的对抗样本改动尽可能小。
附图说明
图1是本发明针对漏洞检测模型的组合对抗攻击方法的流程示意图。
图2是以漏洞检测模型SySeVR(Li,Zhen,et al."Sysevr:A framework for usingdeep learning to detect software vulnerabilities."IEEE Transactions onDependable and Secure Computing(2021).)为例,给出在漏洞检测模型上的具体攻击流程示意图。
图3是在漏洞检测模型SySeVR上的一个攻击实例。
图4是漏洞检测模型SySeVR对图3所示实例生成的切片。
图5是对图4所示样本攻击成功后的样本,即对抗样本。
图6是程序骨架实例。
图7是基于变异测试生成等价变异体的语句扰动方法的一个应用实例。
图8是基于交换无数据依赖关系的相邻代码行的扰动方法的一个应用实例。
图9是基于常量替换的扰动方法的一个应用实例。
图10是基于宏定义替换的扰动方法的一个应用实例。
图11是基于插入冗余代码的扰动方法的一个应用实例。
图12是基于函数合并的扰动方法的一个应用实例。
图13是基于循环等价变换的扰动方法的一个应用实例。
具体实施方式
下面结合附图对本发明的技术方案作进一步的说明,但并不局限于此,凡是对本发明技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神和范围,均应涵盖在本发明的保护范围中。
本发明提供了一种针对漏洞检测模型的新型组合对抗攻击方法,首先,对用于训练漏洞检测模型的数据进行预处理生成程序骨架。其次,使用本发明中提出的语义保持的代码扰动方法对程序骨架中可修改的语句进行扰动,生成大量语义相似的候选样本。接下来,利用遗传算法对上述候选空间中的样本进行迭代修改,直至生成能够攻击成功的对抗样本。其中,利用遗传算法对程序进行迭代修改以生成对抗样本的具体方案如下:首先,以预处理阶段生成的程序骨架的数量作为种群规模,将程序骨架对应的切片代码段作为种群成员(即染色体)进行初始化,其中代码段中的语句可视为染色体上的基因;然后,根据不同的扰动方法设计变异算子,并对种群成员进行选择、交叉和变异操作生成新的种群;最后,判断新生成的种群中是否存在适应度大于一定阈值的成员,如果存在,则表示成功获得对抗样本,说明模型被攻击成功,否则迭代执行上述操作,直至达到预设的最大迭代次数。根据本发明提出的多种代码扰动方法,可实现对各种语法要素执行语义保持的程序等价变换,从而提高生成的对抗样本质量。通过将遗传搜索策略与多种代码扰动方法相结合,能够提高对代码漏洞检测模型的攻击成功率和攻击效率。
如图1所示,具体步骤如下:
步骤1:对用于训练漏洞检测模型的数据进行预处理,生成程序骨架,程序骨架可以是经过数据预处理后的文件、函数、代码片段或者代码中的语句,取决于所选的漏洞检测模型的检测粒度。具体步骤如下:
步骤11:根据漏洞检测模型的数据预处理过程中得到的抽象语法树、程序依赖图等结构信息确定每一行语句上可用的扰动方法,并且保留每种扰动方法实施时所需要的信息。
步骤12:把扰动方法看作是对原始代码中一条语句的修改,扰动所影响的语句看作是未填充的语句,包含未填充语句的程序经过数据预处理过程会生成含有未填充语句的切片样本代码,以这样的切片样本代码作为程序骨架。在后续的攻击过程中,根据步骤11所保留的信息确定未填充语句的内容。
为了避免攻击过程中频繁调用静态分析工具,本发明借鉴了Ramakrishnan等人(Ramakrishnan,Goutham,et al."Semantic robustness ofmodels ofsource code."arXiv preprint arXiv:2002.03043(2020).)提出的程序骨架的思想。但是作者使用的攻击方法为标识符重命名,所以攻击方法只影响抽象语法树对应的叶子节点。与此不同的是,本发明中使用的攻击方法影响的是程序中的一条语句,即会影响抽象语法树中该语句对应的子树。图6为程序骨架的一个例子。
步骤2:使用变异测试生成等价变异体、交换无数据依赖关系的相邻代码行、常量替换、宏定义替换4种语义保持的代码扰动方法对程序骨架中可修改的语句进行扰动,生成大量语义相似的候选样本。
具体步骤如下:
步骤21:按照语句重要性评分方法计算切片样本代码中每一条语句的评分。
单条语句评分的具体计算方法如下:
I(x,li)=P(ytrue|x)-P(ytrue|x′i);
其中:
x=s1s2…si…sn
x′i=s1s2…si-1si+1…sn
式中,si为x中第i条语句,x为切片样本代码,x'i为删除第i条语句后的样本,ytrue为样本真实类别,P为模型输出的置信度。
步骤22:按照步骤21中全部语句的评分对切片中的语句进行降序排序,得到一个降序排序列表,排在越靠前的语句对模型预测的结果影响越大。
步骤23:从步骤22生成的列表中按照顺序依次取出一条语句,并在该语句上使用本发明提出的变异测试生成等价变异体、交换无数据依赖关系的相邻代码行、常量替换、宏定义替换等4种代码扰动方法对原始语句进行扰动,将每次扰动生成的新样本作为候选样本。本发明提出的4种语义保持的代码扰动方法如下:
(1)变异测试生成等价变异体
利用变异测试生成程序的等价变异体,等价变异体中变异算子所影响的语句作为原始程序中该语句的修改候选。在步骤21所选语句所有修改候选中随机选择一条语句替换该语句。图7为该方法的一个实例,使用整型常量替代变异算子将第4行的整型常量10变异为11。
(2)交换无数据依赖关系的相邻代码行
如果所选的语句不是最后一行代码并且满足如下条件,那么与下一行代码交换位置,在后续迭代过程中不再使用交换相邻代码行方法对这两行代码进行扰动,以避免引入语法错误。图8为该方法的一个实例,交换了两行变量声明语句。交换相邻代码行的条件如下:
如果同一函数内相邻两行代码中任意一行代码的输入空间和输出空间与另外一行代码的输入空间和输出空间都不相交,并且这两行代码不是分支、循环等控制语句,则两者不存在依赖关系。具体地,输入空间对象集合SI表示代码语句操作所依据或所读取的所有对象集合,输出空间对象集合SO表示代码语句操作所影响或写入的所有对象集合。对于两条语句的输入空间对象集合和输出空间对象集合SI1、SO1、SI2、SO2,如果满足条件
Figure BDA0003712692790000091
Figure BDA0003712692790000101
那么这两行语句没有数据依赖关系,表明二者可以交换。
(3)常量替换:
步骤21所选语句中的整型常量和字符串常量重新定义成const变量,并增加变量声明语句。变量名称可以是随机大写字母组成的字符串。图9为该方法的一个实例,将整型常量5定义成const变量IKDFC。
(4)宏定义替换
首先在步骤21所选的语句中,随机选择要进行宏定义替换的token,然后为此token生成一个宏名,该宏名可以是(1)采用随机大写字母组成的字符串,或者(2)来自其他程序并符合C语言宏定义规则的token,最后将生成的宏名替换原始的token,从而得到与所扰动的程序具有相同语义的新样本。图10是该方法的一个实例,使用宏名NDUSI替换token“)”。
步骤24:重复步骤23,直到遍历完程序骨架中全部可修改的语句。
步骤3:以步骤2生成的候选样本的数量作为种群规模,所有的候选样本作为种群成员,进行种群初始化。具体步骤如下:
步骤31:初始化遗传算法的参数,以步骤2生成的候选样本的数量作为种群规模,其他参数选择默认设置(例如设置最大迭代次数为100,选择概率为0.4,交叉概率为0.6,变异概率为0.6)。
步骤32:初始化种群成员(即染色体),以步骤2生成的所有候选样本作为种群成员,其中代码段中的语句可视为染色体上可修改的基因。
步骤4:利用遗传算法的选择算子,根据针对漏洞程序构造的适应度函数挑选步骤3中合适的种群成员加入下一代种群。具体步骤如下:
步骤41:设计选择算子。根据本发明构造的适应度函数,利用运算量最少的轮盘赌方法作为选择算子。本发明构造的适应度函数如下:
对抗攻击的目的是在原始样本附近寻找扰动样本,扰动样本要尽可能增加模型的损失,即降低模型对其真实类别的置信度直到模型输出错误的识别结果。因此,本发明将适应度函数定义为模型对当前成员真实类别的置信度,计算方法如下式所示,即表示扰动后的样本对其真实类别的置信度越低,适应度值越高:
Fitness=-Fw((X+δ),y);
式中,F为模型函数,X为原始切片样本代码,δ为攻击方法在切片样本代码X上施加的扰动,X+δ为扰动后的样本,w为模型参数,y为X的类别标签。
步骤42:按照设定的选择概率(例如0.4)和步骤41的选择算子选择保留在下一代中的种群成员。
步骤5:利用遗传算法的交叉算子,在给定的交叉概率下重组步骤3中种群成员中的两个个体,生成新的种群成员加入下一代种群。
具体步骤如下:
步骤51:设计保持语义不变的交叉算子。本发明利用对切片样本代码破坏最小的单点交叉方法作为交叉算子,在双亲成员都没有使用过交换相邻代码行扰动的语句中,随机选择一条语句作为交叉点位置,双亲成员均使用这个交叉点位置,交换交叉点一侧的基因生成两个新的子代并加入下一代种群中,以相同交叉位置保证交叉后切片样本代码语句行数不变,即基因数量不变,保证交叉后子代语法语义的正确性。
步骤52:按照设定的交叉概率(例如0.6)和步骤51的交叉算子选择双亲成员生成子代加入下一代种群。
步骤6:根据在步骤2中提出的变异测试生成等价变异体、交换无数据依赖关系的相邻代码行、常量替换、宏定义替换等4种语义保持的代码扰动方法和现有的插入冗余代码、函数合并和循环等价变换等3种语义保持的代码扰动方法设计变异算子,在给定的变异概率下,对步骤4和步骤5所生成的新一代种群成员进行变异,生成新的变异样本加入下一代种群。具体步骤如下:
步骤61:以给定的变异概率(例如0.6),在切片样本代码中选择一行语句。
步骤62:确定每种代码扰动方法在步骤61所选语句上生成的候选修改语句内容,代码扰动方法选用本发明在步骤2中提出的变异测试生成等价变异体、交换无数据依赖关系的相邻代码行、常量替换、宏定义替换等4种语义保持的代码扰动方法和现有的插入冗余代码、函数合并和循环等价变换等3种语义保持的代码扰动方法。用候选的语句替换原始的语句,生成一个新的变异样本。如果扰动方法在原始语句的基础上增加了一条新的语句(例如插入冗余代码扰动),则本文将新增的语句和原始语句视为一条语句,以避免和其他种群成员行数不一致的现象,从而保证下一轮正常的交叉和变异操作。现有的3种语义保持的代码扰动方法具体如下:
(1)插入冗余代码
在步骤61所选语句位置插入一条冗余代码语句,冗余代码语句可选形式如下:
1)printf("token%x\n",&variable);
2)while(false){(char*)variable="token";}
3)if(false){(char*)variable="token";}
4)if(false){(int)variable=0;}
5)if(variable!=variable){(char*)variable="token";}
语句中有两类的待填充的内容:一个是variable,它是原始程序中在插入位置之前的合法的变量名称,作用是增加冗余代码与原始程序中代码语句的依赖关系。另外一个是token,它可以是任意token,作用是使扰动后的样本尽可能降低对真实类别的置信度。图11是该方法的一个实例,在第10行插入了一条打印语句。
参数的确定方法如下:
根据本发明提出的候选token重要性评分,选择评分最高的token作为填充内容。候选token重要性评分如下式计算:
Figure BDA0003712692790000131
式中,xperturb为待扰动的样本集合,x为待扰动样本,w为token,yx为样本x的真实类别,I(x,w)为x中w所在位置评分,如下式计算:
I(x,wi)=P(ytrue|x)-P(ytrue|x′i);
其中:
x=s1s2…si…sn
x′i=s1s2…si-1sisi+1…sn
si=w1w2…wj...wm
s′ij=w1w2...wj-1wj+1…wm
式中,si为x中第i条语句,x为切片样本代码,s′ij为删除第i条语句中第j个token后的语句,x′i为删除第i条语句中第j个token后的样本,ytrue为样本真实类别,P为模型输出的置信度。
(2)函数合并
将步骤61所选语句中的函数调用语句展开为具体实现函数功能的代码语句,函数合并方法会删除原有的函数调用语句,为避免改变程序语义或引入语法错误,在应用函数合并方法后移除该行全部可用代码扰动方法。图12是该方法的一个实例,将printIntLine函数在调用函数内展开。
(3)循环等价变换
将步骤61所选语句中的循环结构采用等价的方式改写。现有的循环变换方法有两种,一种是将while循环语句与for循环语句互换,例如将while(exp)改写成for(;exp;)的形式,另外一种将while语句的循环体展开一步。
为了增加循环等价变换的多样性,本发明在已有的循环等价变换模式基础上,提出6种新的循环等价变换模式。以while(exp)为例,可选的改写模式如下:
1)while(1){if(!exp)break;…}
2)int flag=1while(flag){if(!exp)flag=0;…}
3)while(1){if(!exp)break;else continue;…}
4)int flag=1while(flag){if(!exp)flag=0;else continue;…}
5)bool flag=true while(flag){if(!exp)flag=false;…}
6)bool flag=true while(flag){if(!exp)flag=false;else continue;…}
for和do…while循环同理。图13是该方法的一个实例,利用模式5)改写第2行for循环语句。
步骤63:在变异测试生成等价变异体、交换无数据依赖关系的相邻代码行、常量替换、宏定义替换、插入冗余代码、函数合并和循环等价变换等7种代码扰动方法中随机选择一种可用的扰动方法。
步骤64:根据步骤63选择的代码扰动方法和步骤62确定的修改语句内容修改在步骤61所选语句。
步骤7:对步骤6生成的新一代种群成员执行标识符标准化。
步骤8:按照步骤4设计的适应度值计算方法,计算标准化后的新一代种群成员的适应度。
步骤9:如果步骤6生成的种群中存在大于适应度阈值(一般设为0.5)的成员,则成功获得对抗样本,否则在步骤6生成的种群上跳回执行步骤4,直到超过预设的最大迭代次数。
本发明的上述方法能执行覆盖多种语法要素的语义保持的程序等价变换,提高生成的对抗样本质量以及对抗样本对代码漏洞检测模型的攻击成功率和攻击效率。
实施例:
以图2所示的在漏洞检测模型SySeVR上所示攻击流程、图3所示代码样本为例。
图3是原始代码样本,图4是漏洞检测模型对图3数据处理后生成的代码切片中的一个。以图4所示切片作为输入,模型以99.89%的置信度输出有漏洞类别。图5是图4所示切片的对抗样本,以图5所示切片作为输入,模型以99.98%的置信度输出无漏洞类别。图5中的扰动如下:首先是第1行中的扰动,将函数名称CWE122_Heap_Based_Buffer_Overflow__c_dest_char_cpy_11_bad重新定义成宏名STATIC,将符号“(”重新定义成宏名BAD,将符号“)”重新定义成宏名DATAVOIDPTR。然后第10行上的扰动为交换相邻代码行和插入冗余代码。本发明利用遗传算法将7种代码扰动方法组合起来,以切片样本代码数量作为种群大小,每个种群成员即切片样本代码作为染色体,程序中的语句作为染色体上的基因,以代码扰动方法对程序语句的修改作为变异算子,迭代扰动切片样本代码。通过这种启发式策略指引搜索方向降低复杂性,寻找优化解来提高攻击成功率。

Claims (9)

1.一种针对漏洞检测模型的组合对抗攻击方法,其特征在于所述方法包括如下步骤:
步骤1:对用于训练漏洞检测模型的数据进行预处理,生成程序骨架;
步骤2:使用4种语义保持的代码扰动方法对程序骨架中可修改的语句进行扰动,生成大量语义相似的候选样本,4种语义保持的代码扰动方法包括变异测试生成等价变异体、交换无数据依赖关系的相邻代码行、常量替换、宏定义替换;
步骤3:以步骤2生成的候选样本的数量作为种群规模,所有的候选样本作为种群成员,进行种群初始化;
步骤4:利用遗传算法的选择算子,根据针对漏洞程序构造的适应度函数挑选步骤3中合适的种群成员加入下一代种群;
步骤5:利用遗传算法的交叉算子,在给定的交叉概率下重组步骤3中种群成员中的两个个体,生成新的种群成员加入下一代种群;
步骤6:根据步骤2提出的4种代码扰动方法和现有的3种代码扰动方法设计变异算子,在给定的变异概率下,对步骤4和步骤5所生成的新一代种群成员进行变异,生成新的变异样本加入下一代种群,现有的3种代码扰动方法包括插入冗余代码、函数合并、循环等价变换;
步骤7:对步骤6生成的新一代种群成员执行标识符标准化;
步骤8:按照步骤4设计的适应度值计算方法,计算标识符标准化后的新一代种群成员的适应度;
步骤9:如果步骤6生成的种群中存在大于适应度阈值的成员,则成功获得对抗样本,否则在步骤6生成的种群上跳回执行步骤4,直到超过预设的最大迭代次数。
2.根据权利要求1所述的针对漏洞检测模型的组合对抗攻击方法,其特征在于所述步骤1的具体步骤如下:
步骤11:根据漏洞检测模型的数据预处理过程中得到的结构信息确定每一行语句上可用的扰动方法,并且保留每种扰动方法实施时所需要的信息;
步骤12:把扰动方法看作是对原始代码中一条语句的修改,扰动所影响的语句看作是未填充的语句,包含未填充语句的程序经过数据预处理过程会生成含有未填充语句的切片样本代码,以这样的切片样本代码作为程序骨架。
3.根据权利要求1所述的针对漏洞检测模型的组合对抗攻击方法,其特征在于所述步骤2的具体步骤如下:
步骤21:按照语句重要性评分方法计算切片样本代码中每一条语句的评分;
步骤22:按照步骤21中全部语句的评分对切片中的语句进行降序排序,得到一个降序排序列表;
步骤23:从步骤22生成的列表中按照顺序依次取出一条语句,并在该语句上使用变异测试生成等价变异体、交换无数据依赖关系的相邻代码行、常量替换、宏定义替换4种代码扰动方法对原始语句进行扰动,将每次扰动生成的新样本作为候选样本;
步骤24:重复步骤23,直到遍历完程序骨架中全部可修改的语句。
4.根据权利要求3所述的针对漏洞检测模型的组合对抗攻击方法,其特征在于所述步骤21中,单条语句评分的具体计算方法如下:
I(x,li)=P(ytrue|x)-P(ytrue|x′i);
其中:
x=s1s2…si…sn
x′i=s1s2…si-1si+1…sn
式中,si为x中第i条语句,x为切片样本代码,x'i为删除第i条语句后的样本,ytrue为样本真实类别,P为模型输出的置信度。
5.根据权利要求3所述的针对漏洞检测模型的组合对抗攻击方法,其特征在于所述步骤23中,4种语义保持的代码扰动方法如下:
(1)变异测试生成等价变异体
利用变异测试生成程序的等价变异体,等价变异体中变异算子所影响的语句作为原始程序中该语句的修改候选;
(2)交换无数据依赖关系的相邻代码行
如果所选的语句不是最后一行代码并且满足特定的条件,那么与下一行代码交换位置,在后续迭代过程中不再使用交换相邻代码行方法对这两行代码进行扰动,以避免引入语法错误;
(3)常量替换:
将步骤21所选语句中的整型常量和字符串常量重新定义成const变量,并增加变量声明语句;
(4)宏定义替换
首先在步骤21所选的语句中,随机选择要进行宏定义替换的token,然后为此token生成一个宏名,该宏名可以是(1)采用随机大写字母组成的字符串,或者(2)来自其他程序并符合C语言宏定义规则的token,最后将生成的宏名替换原始的token,从而得到与所扰动的程序具有相同语义的新样本。
6.根据权利要求5所述的针对漏洞检测模型的组合对抗攻击方法,其特征在于所述交换无数据依赖关系的相邻代码行需要满足如下的特定条件:如果同一函数内相邻两行代码中任意一行代码的输入空间和输出空间与另外一行代码的输入空间和输出空间都不相交,并且这两行代码不是分支、循环等控制语句,则两者不存在依赖关系,具体地,输入空间对象集合SI表示代码语句操作所依据或所读取的所有对象集合,输出空间对象集合SO表示代码语句操作所影响或写入的所有对象集合。对于两条语句的输入空间对象集合和输出空间对象集合SI1、SO1、SI2、SO2,如果满足条件
Figure FDA0003712692780000041
Figure FDA0003712692780000042
那么这两行语句没有数据依赖关系,表明二者可以交换。
7.根据权利要求1所述的针对漏洞检测模型的组合对抗攻击方法,其特征在于所述步骤4的具体步骤如下:
步骤41:根据适应度函数,利用运算量最少的轮盘赌方法作为选择算子,所述适应度函数如下:
Fitness=-Fw((X+δ),y);
式中,F为模型函数,X为原始切片样本代码,δ为攻击方法在切片样本代码X上施加的扰动,X+δ为扰动后的样本,w为模型参数,y为X的类别标签;
步骤42:按照设定的选择概率和步骤41的选择算子选择保留在下一代中的种群成员。
8.根据权利要求1所述的针对漏洞检测模型的组合对抗攻击方法,其特征在于所述步骤5的具体步骤如下:
步骤51:利用对切片样本代码破坏最小的单点交叉方法作为交叉算子,在双亲成员都没有使用过交换相邻代码行扰动的语句中,随机选择一条语句作为交叉点位置,双亲成员均使用这个交叉点位置,交换交叉点一侧的基因生成两个新的子代并加入下一代种群中,以相同交叉位置保证交叉后切片样本代码语句行数不变,即基因数量不变,保证交叉后子代语法语义的正确性;
步骤52:按照设定的交叉概率和步骤51的交叉算子选择双亲成员生成子代加入下一代种群。
9.根据权利要求1所述的针对漏洞检测模型的组合对抗攻击方法,其特征在于所述步骤6的具体步骤如下:
步骤61:以给定的变异概率,在切片样本代码中选择一行语句;
步骤62:确定每种代码扰动方法在步骤61所选语句上生成的候选修改语句内容,用候选的语句替换原始的语句,生成一个新的变异样本;如果扰动方法在原始语句的基础上增加了一条新的语句,则本文将新增的语句和原始语句视为一条语句,以避免和其他种群成员行数不一致的现象,从而保证下一轮正常的交叉和变异操作;
步骤63:在变异测试生成等价变异体、交换无数据依赖关系的相邻代码行、常量替换、宏定义替换、插入冗余代码、函数合并和循环等价变换7种代码扰动方法中随机选择一种可用的扰动方法;
步骤64:根据步骤63选择的代码扰动方法和步骤62确定的修改语句内容修改在步骤61所选语句。
CN202210729780.8A 2022-06-24 2022-06-24 一种针对漏洞检测模型的组合对抗攻击方法 Active CN115080982B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210729780.8A CN115080982B (zh) 2022-06-24 2022-06-24 一种针对漏洞检测模型的组合对抗攻击方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210729780.8A CN115080982B (zh) 2022-06-24 2022-06-24 一种针对漏洞检测模型的组合对抗攻击方法

Publications (2)

Publication Number Publication Date
CN115080982A true CN115080982A (zh) 2022-09-20
CN115080982B CN115080982B (zh) 2024-07-19

Family

ID=83255827

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210729780.8A Active CN115080982B (zh) 2022-06-24 2022-06-24 一种针对漏洞检测模型的组合对抗攻击方法

Country Status (1)

Country Link
CN (1) CN115080982B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115333869A (zh) * 2022-10-14 2022-11-11 四川大学 一种分布式网络对抗攻击自训练学习方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6698010B1 (en) * 1999-08-20 2004-02-24 Nec Corporation System, method and computer program product for automatic generation of data processing program
CN110991549A (zh) * 2019-12-13 2020-04-10 成都网域复兴科技有限公司 一种针对图像数据的对抗样本生成方法及系统
CN111753303A (zh) * 2020-07-29 2020-10-09 哈尔滨工业大学 一种基于深度学习和强化学习的多粒度代码漏洞检测方法
CN113760358A (zh) * 2021-08-30 2021-12-07 河北大学 一种面向源代码分类模型的对抗样本生成方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6698010B1 (en) * 1999-08-20 2004-02-24 Nec Corporation System, method and computer program product for automatic generation of data processing program
CN110991549A (zh) * 2019-12-13 2020-04-10 成都网域复兴科技有限公司 一种针对图像数据的对抗样本生成方法及系统
CN111753303A (zh) * 2020-07-29 2020-10-09 哈尔滨工业大学 一种基于深度学习和强化学习的多粒度代码漏洞检测方法
CN113760358A (zh) * 2021-08-30 2021-12-07 河北大学 一种面向源代码分类模型的对抗样本生成方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
严飞;张铭伦;张立强;: "基于边界值不变量的对抗样本检测方法", 网络与信息安全学报, no. 01, 15 February 2020 (2020-02-15) *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115333869A (zh) * 2022-10-14 2022-11-11 四川大学 一种分布式网络对抗攻击自训练学习方法
CN115333869B (zh) * 2022-10-14 2022-12-13 四川大学 一种分布式网络对抗攻击自训练学习方法

Also Published As

Publication number Publication date
CN115080982B (zh) 2024-07-19

Similar Documents

Publication Publication Date Title
Zhang et al. Generating adversarial examples for holding robustness of source code processing models
CN113360915B (zh) 基于源代码图表示学习的智能合约多漏洞检测方法及系统
CN112579477A (zh) 一种缺陷检测方法、装置以及存储介质
CN109189925A (zh) 基于点互信息的词向量模型和基于cnn的文本分类方法
CN116049831A (zh) 一种基于静态分析和动态分析的软件漏洞检测方法
CN113741886B (zh) 一种基于图的语句级程序修复方法及系统
CN113705237B (zh) 融合关系短语知识的关系抽取方法、装置和电子设备
CN115357904B (zh) 一种基于程序切片和图神经网络的多类漏洞检测方法
CN110119355B (zh) 一种基于知识图谱向量化推理通用软件缺陷建模方法
CN113297580B (zh) 基于代码语义分析的电力信息系统安全防护方法及装置
CN114579430A (zh) 一种基于预训练语言模型的测试用例推荐系统及方法
CN115098857B (zh) 一种可视化恶意软件的分类方法及装置
CN117291265B (zh) 一种基于文本大数据的知识图谱构建方法
CN113901170A (zh) 结合Bert模型和模板匹配的事件抽取方法及系统、电子设备
CN115983274B (zh) 一种基于两阶段标签校正的噪声事件抽取方法
CN116305158A (zh) 一种基于切片代码依赖图语义学习的漏洞识别方法
CN116432184A (zh) 基于语义分析和双向编码表征的恶意软件检测方法
CN115080982B (zh) 一种针对漏洞检测模型的组合对抗攻击方法
CN116303881A (zh) 一种基于自监督表示学习的企业单位地址匹配方法及装置
CN115292520A (zh) 一种面向多源移动应用知识图谱构建方法
CN113312498B (zh) 用无向图嵌入知识图谱的文本信息抽取方法
CN117354067A (zh) 一种恶意代码检测方法及系统
CN112906820A (zh) 基于遗传算法的对抗卷积神经网络句子相似度计算方法
CN115658907B (zh) 一种基于历史信息的qpso算法和义原的文本对抗攻击方法
CN116257601A (zh) 一种基于深度学习的违法词库构建方法及系统

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
GR01 Patent grant
GR01 Patent grant