1.本发明涉及计算机技术领域,尤其涉及一种基于平稳多臂老虎机的代码对抗样本生成方法
。
背景技术:
2.在软件工程和软件安全领域,存在大量针对源代码
、
二进制代码和汇编代码等形式的代码进行分析和检测任务
。
使用深度学习模型来自动实现这些代码分析和检测任务能大大降低软件开发
、
测试和维护等方面的成本,因此基于深度学习模型的代码分析和检测技术得到了越来越多的研究和应用
。
但是深度学习模型很容易受到对抗样本的攻击,因此提高这类模型的鲁棒性已成为迫切需要解决的重要问题
。
对抗训练是提升基于深度学习的代码分类模型鲁棒性的重要手段,而高效生成其模型的代码对抗样本是其关键技术
。
现有技术中通常采用
fastgradientsignmethod(fgsm)
:
fgsm
是一种基于梯度的对抗样本生成方法,它利用输入样本的梯度信息来生成对抗样本
。
该方法通过将输入数据的梯度方向与损失函数的符号相乘,生成一些小的扰动,从而使模型产生错误的预测结果
。
但在使用现有技术生成对抗样本时存在生成速度较慢
、
生成的样本质量较低的问题
。
技术实现要素:
3.为了解决上述技术问题,本发明实施例提出了一种基于平稳多臂老虎机的代码对抗样本生成方法,能够高效快速地生成大量代码对抗样本,且该代码对抗样本的质量高从而逃逸检测成功率高
。
4.为了实现上述目的,本发明实施例提供了一种基于平稳多臂老虎机的代码对抗样本生成方法,包括:获取代码数据集,并创建多个代理对象;其中,每一所述代理对象具有对应的初始动作集;从所述代码数据集中获取一个第一代码样本;通过代码对抗样本生成模型中的攻击器,基于多个所述代理对象进行代理采样和代理投票处理,确定注入动作,并将所述注入动作注入所述第一代码样本,得到第二代码样本;其中,所述攻击器是基于多臂老虎机算法配置得到的;对所述第二代码样本进行逃逸检测,并将逃逸成功的第二代码样本加入对抗样本集;在进行逃逸检测后,当所述第二代码样本不满足结束条件时,返回至获取所述第一代码样本的步骤获取新的第一代码样本,以进行迭代,直至获取到的新的第二代码样本满足所述结束条件时停止迭代,并获取停止迭代后的对抗样本集;其中,所述代码对抗样本生成模型通过平稳性奖励更新策略进行更新,具体为:在每次迭代时,判断迭代次数是否满足延迟更新策略的条件,若满足,则基于所述逃逸检测的结果和多代理更新策略,对所述代码对抗样本生成模型的参数进行更新;
其中,所述停止迭代后的对抗样本集用于对代码分类模型进行训练,所述代码分类模型用于进行代码分类识别
。
5.进一步的,所述多个代理对象通过如下步骤创建得到:获取多个初始动作集;将多个所述初始动作集分别与多台多臂老虎机一一对应;其中,所述初始动作集中的每个初始动作对应于一台单臂老虎机,每一所述单臂老虎机的概率分布被配置为一个对应的
beta
分布,每一所述单臂老虎机配置有对应的成功次数和失败次数;创建多个初始化代理对象,并将多个所述初始化代理对象分别与多台所述多臂老虎机一一对应,得到多个代理对象
。
6.进一步的,所述基于多个所述代理对象进行代理采样和代理投票处理,确定注入动作,具体包括:对每一所述代理对象进行代理采样得到初始动作;分别对所有所述代理对象的初始动作进行代理投票,确定票数最高的初始动作以作为注入动作
。
7.进一步的,所述延迟更新策略的条件包括:所述迭代次数是预设延迟更新回合数的倍数
。
8.进一步的,所述多代理更新策略包括:确定单代理更新策略;其中,所述单代理更新策略的奖励过程包括:若所述第二代码样本逃逸失败,则增加所述注入动作对应的单臂老虎机的失败次数;若所述第二代码样本逃逸成功,则增加所述注入动作对应的单臂老虎机的成功次数;按照所述单代理更新策略,对多个所述代理对象中所有具有与所述注入动作相同的动作的代理对象进行奖励
。
9.进一步的,所述单代理更新策略的奖励过程还包括:若所述第二代码样本逃逸成功,则判断所述注入动作是否携带有内容:当所述注入动作携带内容,且所述注入动作的原始内容为空
、
当前内容不为空时,创建一个新动作,将所述新动作加入与所述注入动作对应的代理对象;其中,所述新动作用于指示与所述注入动作相同的操作,所述新动作的内容为所述注入动作的当前内容,所述新动作对应于一台成功次数和失败次数均为1的单臂老虎机;当所述注入动作携带内容,且所述注入动作的原始内容不为空时,增加与所述注入动作的父动作对应的单臂老虎机的成功次数;其中,所述父动作指示的操作与所述注入动作所指示的操作相同,且所述父动作的原始内容为空
。
10.进一步的,所述在每次迭代时,判断迭代次数是否满足延迟更新策略的条件,若满足,则基于所述逃逸检测的结果和多代理更新策略,对所述代码对抗样本生成模型的参数进行更新,具体包括:在每次迭代时:获取历史奖励分布;基于所述逃逸检测的结果以及多代理更新策略,获取与多个所述代理对象对应的本轮奖励分布;根据所述本轮奖励分布更新所述历史奖励分布;
判断迭代次数是否满足延迟更新策略的条件,若满足,则:基于本轮更新后的历史奖励分布,对所述代码对抗样本生成模型的参数进行更新
。
11.进一步的,所述对所述第二代码样本进行逃逸检测,具体包括:通过基于机器学习的代码检测器对所述第二代码样本进行逃逸检测
。
12.综上,本发明具有以下有益效果:采用本发明实施例,能有效提高代码对抗样本生成模型学习所有奖励分布的速度,提高代码对抗样本的生成效率,且提高生成的代码对抗样本能够顺利通过逃逸检测的概率,而采用大量基于代码对抗生成的对抗样本以作为训练数据集,来训练基于深度学习的代码分类模型,则能使得训练好的模型不容易被拥有微小扰动的对抗样本所欺骗,进一步还有助于提高代码分类模型的鲁棒性
。
附图说明
13.图1是本发明提供的一种基于平稳多臂老虎机的代码对抗样本生成方法的一个实施例的流程示意图;图2是本发明提供的一种基于平稳多臂老虎机的代码对抗样本生成方法的一个实施例的示意图;图3是本发明提供的一种基于平稳多臂老虎机的代码对抗样本生成方法的另一个实施例的示意图
。
具体实施方式
14.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚
、
完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例
。
基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围
。
15.在本技术描述中,术语“第一”、“第二”、“第三”等仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量
。
由此,限定有“第一”、“第二”、“第三”等的特征可以明示或者隐含地包括一个或者更多个该特征
。
在本技术的描述中,除非另有说明,“多个”的含义是两个或两个以上
。
16.在本技术的描述中,需要说明的是,除非另有定义,本发明所使用的所有的技术和科学术语与属于本的技术领域的技术人员通常理解的含义相同
。
本发明中说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本发明,对于本领域的普通技术人员而言,可以具体情况理解上述术语在本技术中的具体含义
。
17.参见图1,是本发明提供的基于平稳多臂老虎机的代码对抗样本生成方法的一个实施例的流程示意图,该方法包括步骤
s1
至
s5
,具体如下:
s1,
获取代码数据集,并创建多个代理对象;其中,每一所述代理对象具有对应的初始动作集;
s2,
从所述代码数据集中获取一个第一代码样本;
s3,
通过代码对抗样本生成模型中的攻击器,基于多个所述代理对象进行代理采
样和代理投票处理,确定注入动作,并将所述注入动作注入所述第一代码样本,得到第二代码样本;其中,所述攻击器是基于多臂老虎机算法配置得到的;
s4,
对所述第二代码样本进行逃逸检测,并将逃逸成功的第二代码样本加入对抗样本集;
s5,
在进行逃逸检测后,当所述第二代码样本不满足结束条件时,返回至获取所述第一代码样本的步骤获取新的第一代码样本,以进行迭代,直至获取到的新的第二代码样本满足所述结束条件时停止迭代,并获取停止迭代后的对抗样本集;其中,所述代码对抗样本生成模型通过平稳性奖励更新策略进行更新,具体为:在每次迭代时,判断迭代次数是否满足延迟更新策略的条件,若满足,则基于所述逃逸检测的结果和多代理更新策略,对所述代码对抗样本生成模型的参数进行更新;其中,所述停止迭代后的对抗样本集用于对代码分类模型进行训练,所述代码分类模型用于进行代码分类识别
。
18.需要说明的是,由于延迟更新策略和多代理更新策略均是具有平稳性质的更新策略,因此代码对抗样本生成模型是通过平稳性奖励更新策略进行更新的,再结合多臂老虎机算法,则称为平稳多臂老虎机(
smab, stationary multi-armed bandit
)算法
。
19.可以理解的是,本实施例中,参见图2,以反馈的方式,通过平稳性奖励更新策略对代码对抗样本生成模型当中的攻击器进行更新,能使得代码对抗样本生成模型学习到能导致代码数据集中特定代码的错误分类的特定扰动序列,从而生成质量更高的对抗样本
。
20.需要说明的是,代码分类识别是指对软件(例如二进制软件
、
恶意软件)进行代码的分类识别,当软件为恶意软件时,代码的分类识别结果用于指示恶意软件的组织分类识别结果
。
21.示例性的,所述代码数据集中的代码为源代码或二进制代码
。
22.示例性的,所述结束条件为所述代码数据集中的所有代码样本均逃逸成功或逃逸失败
。
23.需要说明的是,所述初始动作集中的动作为预先定义的
、
且可修改代码的动作
。
24.作为上述方案的改进,所述多个代理对象通过如下步骤创建得到:获取多个初始动作集;将多个所述初始动作集分别与多台多臂老虎机一一对应;其中,所述初始动作集中的每个初始动作对应于一台单臂老虎机,每一所述单臂老虎机的概率分布被配置为一个对应的
beta
分布,每一所述单臂老虎机配置有对应的成功次数和失败次数;创建多个初始化代理对象,并将多个所述初始化代理对象分别与多台所述多臂老虎机一一对应,得到多个代理对象
。
25.具体的,在本发明实施例中,将每个单臂老虎机的概率分布建模为一个
beta
分布,
beta
分布的两个参数分别代表单臂老虎机中的臂的成功次数和失败次数,初始状态下二者均为
1。
本发明实施中的多臂老虎机使用二元组表示,m表示单臂老虎机集合,r表示奖励分布集合
,
每个奖励分布对应一台单臂老虎机
。
26.作为上述方案的改进,所述基于多个所述代理对象进行代理采样和代理投票处理,确定注入动作,具体包括:对每一所述代理对象进行代理采样得到初始动作;
分别对所有所述代理对象的初始动作进行代理投票,确定票数最高的初始动作以作为注入动作
。
27.需要说明的是,若存在多个票数最高的初始动作,则将所述多个票数最高的初始动作中的第一个采样得到的初始动作作为注入动作
。
28.示例性的,所述代理采样包括汤普森采样
。
29.作为其中一种实施方式,所述代理投票具体为:在所有代理各自动作集中选出候选动作:假设每个代理为各自的动作都维持了一个
β
分布,即一个
β
分布能反映一个代理中一个动作的成功次数和失败次数,每个代理都基于各自动作集的
β
分布使用汤普森采样(
thompson sampling
)算法进行采样,采样得到的动作即为当前代理的候选动作,记该动作得一票;汇总所有候选动作后,统计票数,比较所有代理的候选动作,若不同代理的候选动作完全相同(包括动作执行的操作和注入的内容),则该候选动作的票数增加;选出最终动作,投票结果中,若出现了某一候选动作的票数高于其他动作,则该候选动作作为本次投票过程的最终动作;若出现了多个候选动作票数相等,则选择第一个票数最高的候选动作作为最终投票出来的动作
。
30.作为上述方案的改进,所述延迟更新策略的条件包括:所述迭代次数是预设延迟更新回合数的倍数
。
31.作为上述方案的改进,所述多代理更新策略包括:确定单代理更新策略;其中,所述单代理更新策略的奖励过程包括:若所述第二代码样本逃逸失败,则增加所述注入动作对应的单臂老虎机的失败次数;若所述第二代码样本逃逸成功,则增加所述注入动作对应的单臂老虎机的成功次数;按照所述单代理更新策略,对多个所述代理对象中所有具有与所述注入动作相同的动作的代理对象进行奖励
。
32.作为上述方案的改进,所述单代理更新策略的奖励过程还包括:若所述第二代码样本逃逸成功,则判断所述注入动作是否携带有内容:当所述注入动作携带内容,且所述注入动作的原始内容为空
、
当前内容不为空时,创建一个新动作,将所述新动作加入与所述注入动作对应的代理对象;其中,所述新动作用于指示与所述注入动作相同的操作,所述新动作的内容为所述注入动作的当前内容,所述新动作对应于一台成功次数和失败次数均为1的单臂老虎机;当所述注入动作携带内容,且所述注入动作的原始内容不为空时,增加与所述注入动作的父动作对应的单臂老虎机的成功次数;其中,所述父动作指示的操作与所述注入动作所指示的操作相同,且所述父动作的原始内容为空
。
33.在本发明实施例中,参见图3,多代理更新策略为
;a
,初始化单代理对象,即在为单代理创建一个新的动作时,将动作对应单臂老虎机的两个参数(即“成功次数”和“失败次数”)均初始化为1;如上是一般的处理过程,而若存在具体输入的动作时,例如所述注入动作,则直接以所述注入动作对应的单臂老虎机的两个参数作为待处理的单代理对象对应的两个参数;b,确定单代理更新策略的奖励过程,即在后续迭代过程中每次选择动作,若未能导致代码样本逃逸,则“失败次数”参数值增加;若能导致代码样本逃逸,则“成功次数”参数
值增加;其中,若能导致代码样本逃逸,则还要判断动作是否带有内容:若动作带有内容且原始内容corg
为空
、
当前内容cnow
不为空,则为该单代理创建新动作,其中新动作的操作与原动作相同
、
内容为cnow
,新动作对应单臂老虎机的两个参数均初始化为1;若动作带有内容且原始内容corg
不为空,则需要增加该动作的父动作对应单臂老虎机的“成功次数”参数值,其中该动作的父动作是指与该动作操作相同但corg
为空的动作
。
34.该过程将增加动作对应单臂老虎机的“失败次数”参数值作为一个奖励过程,将增加动作对应单臂老虎机的“成功次数”参数值
、
创建新动作和奖励父动作作为另一个奖励过程,其中,奖励分布的公式如下:
35.其中,为当前单代理对象;
36.c
,将单代理更新策略的奖励过程扩展为多代理更新策略的奖励过程;即记录所有选择了某一动作的代理并对这些代理进行奖励,其中,奖励分布的公式如下:
37.其中a表示代理对象集合,
ma表示当前代理选择的动作,m为某一动作
。
38.作为上述方案的改进,所述在每次迭代时,判断迭代次数是否满足延迟更新策略的条件,若满足,则基于所述逃逸检测的结果和多代理更新策略,对所述代码对抗样本生成模型的参数进行更新,具体包括:在每次迭代时:获取历史奖励分布;基于所述逃逸检测的结果以及多代理更新策略,获取与多个所述代理对象对应的本轮奖励分布;根据所述本轮奖励分布更新所述历史奖励分布;判断迭代次数是否满足延迟更新策略的条件,若满足,则:基于本轮更新后的历史奖励分布,对所述代码对抗样本生成模型的参数进行更新
。
39.需要说明的是,所述历史奖励分布是在本轮之前的每次迭代时获取到的所述本轮奖励分布所积累形成的,应理解,采用本实施例,可以使得每次的奖励均被记录下来,但又无需频繁对模型进行更新,从而兼顾模型更新的准确性与效率,进一步能解决多臂老虎机算法在更新参数时所存在的局限性
。
40.作为上述方案的改进,所述对所述第二代码样本进行逃逸检测,具体包括:
通过基于机器学习的代码检测器对所述第二代码样本进行逃逸检测
。
41.示例性的,所述基于机器学习的代码检测器包括
ember
(用于恶意软件分类的恶意软件和良性软件样本的代表性公共数据集)和
malconv 软件
。
42.实施例一:首先,定义符号或参数:
x
代表代码数据集,
xa代表生成的对抗样本集,a代表代理集合,
t
代表延迟更新回合数,c代表当前攻击迭代次数;然后,进行初始化工作,包括初始化代理集合a和每个代理的动作集合
、
初始化延迟更新回合数
、
初始化当前迭代攻击次数
、xa置空等;接着,从
x
中获取一个代码样本
sample
;然后,针对
sample
,进行代理采样和代理投票过程,从所有代理选择的动作中选出最终的注入动作
m*
;随后,攻击器把最终的注入动作
m*
应用到
sample
上之后,再判断
sample
是否成功逃逸,将成功逃逸的
sample
添加进
xa,再结合多代理更新策略执行不同的奖励过程,此处的奖励并不会直接修改模型参数,而是积累对参数的修改以形成历史数据;然后,当c能够整除
t
时,即满足执行延迟更新的条件,此时再依据历史数据更新模型参数;最后,当所有样本均成功逃逸或失败逃逸时,结束迭代,获得
xa。
43.综上,本发明具有以下有益效果:采用本发明实施例,能有效提高代码对抗样本生成模型学习所有奖励分布的速度,提高代码对抗样本的生成效率,且提高生成的代码对抗样本能够顺利通过逃逸检测的概率,而采用大量基于代码对抗生成的对抗样本以作为训练数据集,来训练基于深度学习的代码分类模型,则能使得训练好的模型不容易被拥有微小扰动的对抗样本所欺骗,进一步还有助于提高代码分类模型的鲁棒性
。
44.通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的硬件平台的方式来实现,当然也可以全部通过硬件来实施
。
基于这样的理解,本发明的技术方案对背景技术做出贡献的全部或者部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如
rom/ram、
磁碟
、
光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法
。
45.以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围
。