解释深度学习在安全领域中的应用
摘要:
虽然深度学习在各个领域显示出巨大的潜力,但缺乏透明度限制了它在安全或关键安全领域的应用。现有的研究试图开发解释技术,为每个分类决策提供可解释的解释。不幸的是,当前的方法是针对非安全性任务(例如,图像分析)进行优化的。它们的关键假设在安全应用程序中经常被违反,导致解释的保真度很差。
本文提出了一种用于安全应用的高保真度解释方法LEMNA。给定一个输入数据样本,LEMNA生成一小组可解释的特性来解释如何对输入样本进行分类。其核心思想是利用一个简单的可解释模型来近似复杂深度学习决策边界的局部区域。本地可解释模型是专门设计用来(1)处理特性依赖关系,以便更好地处理安全应用程序(例如,二进制代码分析);(2)处理非线性局部边界,提高解释保真度。我们使用两个流行的安全深度学习应用程序(恶意软件分类器和用于二进制反向工程的函数启动检测器)来评估我们的系统。大量评价表明,与现有方法相比,LEMNA解释具有更高的保真度。此外,我们还演示了LEMNA的实际用例,以帮助机器学习开发人员验证模型行为、排除分类错误并自动修补目标模型的错误。
一、引言:
近年来,深层神经网络在构建安全应用方面显示出巨大的潜力。到目前为止,研究人员已经成功地应用深度神经网络对恶意软件分类器进行了训练[2,16,21,48,68],二值逆向工程[15,52,71]和网络入侵检测[24,62],均取得了极高的准确率。
安全从业人员在对其精确性感兴趣的同时,也担心深度学习模型缺乏透明性,因此在安全和安全关键领域不愿广泛采用深度学习分类器。更具体地说,深层神经网络可以轻易地包含数十万甚至数百万个神经元。该网络经过大量数据集的训练,具有较高的分类精度。然而,网络的高度复杂性也导致了模型的低可解释性。很难理解深层神经网络是如何做出某些决定的。缺乏透明度为建立对模型的信任或有效地排除分类错误造成了关键障碍。
为了提高深度神经网络的透明性,研究人员开始研究解释方法来解释分类结果。现有的研究大多集中在图像分析或自然语言处理(NLP)等非安全应用领域。图1a显示了一个示例。给出了一幅输入图像,该解释方法通过将最具影响力的特征精确地指向最终的决策来解释分类结果。常见的方法包括在网络中进行正向传播[17,19,32,76]或反向传播[3,50,53]来推断重要的特征。更先进的方法[34,45]在没有分类器细节知识的黑箱设置下产生解释。其基本思想是用线性模型近似局部决策边界,从而推断出重要特征。
不幸的是,现有的解释方法不能直接应用于安全应用程序。首先,现有的大部分方法都是为图像分析而设计的,这些方法更喜欢使用卷积神经网络(CNN)。然而,CNN模型在安全领域并不十分流行。二进制反向工程和恶意软件分析等安全应用程序都具有高级特性依赖关系(e。或需要高可伸缩性。因此,递归神经网络(RNN)或多层感知器模型(MLP)得到了更广泛的应用[15,21,52,68]。目前,RNN上还没有很好的解释方法。其次,现有的方法仍然存在解释保真度低的问题,我们在5中的实验验证了这一点。这对于图像分析可能是可以接受的,但是在安全应用程序中可能会造成严重的问题。例如,在图1a中,突出显示的像素并不完全准确(特别是在边缘区域),但足以提供直观的理解。然而,对于安全应用程序,如Session 2D: ML 2 CCS 18, 2018年10月15-19日,Toronto, ON, Canada 364 binary analysis,不正确地突出显示一个字节的代码可能会导致严重的误解或解释错误。
我们的设计。在本文中,我们试图开发一种新的、高保真的用于安全应用的解释方法。我们的方法在黑箱环境下工作,并引入了专门的设计来解决上述挑战。给定一个输入数据实例x和一个标识符,如一个RNN,我们的方法旨在确定一组小的特性,为x的分类有重要贡献。这是通过生成一个当地近似目标分类器的年代决定边界附近x。显著提高保真度的近似,我们的方法不再假定本地检测边界是线性的,也不认为是独立的特性。这是现有模型所做的两个关键假设[34,45],这两个假设在安全应用程序中经常被违反,导致解释保真度较差。相反,我们引入了一种新的方法来近似非线性局部边界,该方法基于融合lasso增强的混合回归模型[27][64]。
我们的设计基于两个关键的洞见。首先,在给定足够的数据[35]的情况下,混合回归模型在理论上可以逼近线性和非线性的决策边界。这为优化非线性边界的局部逼近提供了灵活性,避免了较大的拟合误差。其次,融合套索是捕获特征依赖的常用惩罚术语。通过在学习过程中加入融合lasso,混合回归模型可以将特征作为一个组,从而获取相邻特征之间的依赖关系。该方法同时保留了深度学习模型的局部非线性和特征依赖性,从而得到高保真度的解释结果。为了方便起见,我们将我们的方法称为使用非线性近似或LEMNA的局部解释方法。
评估。为了证明我们的解释模型的有效性,我们将LEMNA应用于两个有前途的安全应用程序:对PDF恶意软件[55]进行分类,并检测该函数开始对二进制代码[52]进行反向工程。分类器分别在10,000个PDF文件和2,200个二进制文件上进行训练,两者的准确率都达到98.6%或更高。我们应用LEMNA来解释它们的分类结果,并开发了一系列的保真度度量 来评估这些解释的正确性。保真度指标可以通过直接比较近似的检测边界和真实的检测边界来计算,也可以通过运行端到端特征测试来计算。结果表明,在所有不同的分类器和应用程序设置中,LEMNA的性能显著优于现有的方法。
除了有效性评估之外,我们还演示了安全性分析人员和机器学习开发人员如何从解释结果中获益。首先,通过解释分类器如何做出正确的决策,我们证明了LEMNA可以帮助建立信任。特别是,对于二进制和恶意软件分析,我们证明了分类器已经成功地学习了许多著名的启发式和黄金规则在各自的领域。其次,我们证明了LEMNA可以从分类器中提取新的知识。这些新的启发式很难直接手工总结,但一旦被LEMNA提取出来,对于领域专家来说就有了直观的意义。最后,使用LEMNA的功能,分析人员可以解释为什么分类器会产生错误。这允许分析人员自动生成目标补丁通过对每一个可解释错误增加训练样本,并通过有针对性的再训练提高分类器的性能。
Contributions:
1. 我们设计并开发了一种专门用于基于深度学习的安全应用的解释方法——LEMNA。利用融合lasso增强的混合回归模型,LEMNA对包括RNN在内的一系列深度学习模型产生了高保真度的解释结果。
2. 我们提出了一系列的保真度度量来量化解释结果的准确性。我们的实验表明,LEMNA比现有的解释方法有显著的优势。
3. 对于二进制分析和恶意软件检测,LEMNA阐明了为什么分类器做出正确和错误的决定。我们提出了一个简单的方法,自动转换成可操作的步骤,以补丁的目标错误的分类器。
我们的工作只是提高模型透明度,以便更有效地测试和调试深度学习模型的第一步。通过使决策过程具有可解释性,我们的努力可以为建立用于关键应用的可靠的深度学习系统作出积极贡献。
二、可解释的机器学习
接下来,在第3节中,我们将使用深度学习模型介绍关键的安全应用程序,并讨论为什么现有的解释技术不适用于安全应用程序。
2.1 问题定义
可解释机器学习试图为分类结果提供可解释的解释。更具体地说,给定一个输入实例x和一个分类器C,分类器将在测试期间为x分配一个标签y。然后,解释技术旨在说明实例x被分类为y的原因。这通常涉及识别对分类过程(或结果)做出关键贡献的一组重要特征。如果选择的特性可以被人类分析人员解释,那么这些特性就可以提供一个解释。图1显示了图像分类和情绪分析的示例。分类器的决策可以用选定的特征来解释(例如,突出显示的像素和关键字)。
本文以深层神经网络为研究对象,提出了安全应用的解释方法。到目前为止,大多数现有的解释方法都是为图像分析或NLP设计的。我们将它们分为白盒和黑盒方法,并描述它们是如何工作的。
2.2 Whitebox Explanation Methods
大多数现有的解释技术都是在已知模型体系结构、参数和培训数据的白盒设置下工作的。这些技术也被称为深度解释方法,主要是为CNN设计的。它们利用两种主要的策略来推断特征的重要性:(1)基于输入或结构遮挡的正向传播;(2)基于梯度的反向传播。我们将在下面讨论这些技术。
基于前向传播的方法。给定一个输入样本,关键思想是对输入(或隐藏的网络层)进行扰动,并观察相应的变化。这背后的直觉是,干扰重要特征更有可能导致网络结构和分类输出的重大变化。现有的方法要么取消部分特征子集,要么删除网络的中间部分[17,32,74,76]。最近的一个工作[19]扩展了这一想法,以检测对抗性的例子(即。,恶意输入,导致分类错误)。
基于反向传播的方法。基于反向传播的方法利用深度神经网络的梯度来推断特征的重要性。梯度可以是分类器输出相对于输入或隐藏层的偏导数。通过将输出传播回输入,这些方法可以直接计算输入特征的权重。对于图像分类器,基本方法是利用图像[54,57]或视频帧[18]中输出相对于输入像素的梯度计算特征显著性映射。后来的作品通过应用显著性映射一层一层的[3]或映射像素组[50]来改进这一思想。
基于反向传播的方法面临零梯度的挑战。在神经网络内部,激活函数往往具有饱和的部分,相应的梯度将变为零。零梯度使得显著性映射很难(如果不是不可能的话)回溯重要的特性。最近的研究[53,59]试图通过近似来解决这个问题。然而,这牺牲了解释[34]的忠实性。
2.3黑箱解释方法
黑箱解释方法不需要了解分类器内部结构和参数等知识。相反,他们将分类器视为一个黑箱,并通过发送输入和观察输出(即,模型归纳方法)。
这类系统中最具代表性的是LIME[45]。给定一个输入x(例如,一个图像),LIME系统地扰乱x获得一组人工图像特征空间x的附近地区的数据集(见图2 x, x)。然后,LIME 提要人工图像目标分类器f (x)获得标签,并使用标签数据符合线性回归模型д(x)。这д(x)旨在附近近似f(x)的一小部分的输入图像特征空间。lime假定分类边界附近的当地输入实例是线性的,因此它是合理使用线性回归模型本地代表分类决定selfexplanatory f (x)线性回归,因此石灰可以确定重要功能基于回归系数。SHAP[34]最近的一项工作试图通过向人工生成的数据样本添加权重来扩展LIME。其他研究建议使用其他线性模型(如决策树[6]和决策集[31])逐步逼近目标检测边界。
另外需要说明的是,机器学习的解释与主成分分析(PCA)[26]、稀疏编码[39]、卡方统计[49]等特征选择方法是完全不同的。解释方法的目的是识别特定输入实例x的关键特性,以具体解释实例x是如何分类的。另一方面,在对整个训练数据进行训练之前,通常会采用PCA等特征选择方法来减少特征维数(以加快训练或减少过拟合),这并不能解释具体的分类决策是如何做出的。
3解释安全应用程序
虽然深度学习在构建安全应用程序方面显示出了巨大的潜力,但相应的解释方法却远远落后。结果,缺乏透明度降低了信任。首先,如果安全从业人员不了解如何做出关键决策,他们可能不信任深度学习模型。其次,如果安全从业人员不能排除分类错误(例如,由有偏差的培训数据引入的错误),那么需要担心的是,这些错误可能在实践中被放大。在下面,我们将介绍深度学习最近取得成功的两个关键安全应用程序。然后我们讨论了为什么现有的解释方法不适用于安全应用程序。
3.1安全应用的深度学习
在本文中,我们主要关注两类重要的安全应用:二进制反向工程和恶意软件分类。
二进制逆向工程。深度学习在二值分析中的应用包括识别函数边界[52],定位函数类型特征[15],跟踪相似的二值代码[71]。更具体地说,Shin等人利用双向RNN改进了函数边界识别,实现了近乎完美的性能[52]。Chua等人还使用RNN精确地跟踪二进制[15]中的参数和函数类型。最近,Xu等人使用MLP对控制流图进行编码,以查明易受攻击的代码片段[71]。
恶意软件分类。现有的工作主要使用MLP模型进行大规模的恶意软件分类。例如,研究人员训练MLP在二进制代码级别[48]检测恶意软件,并对Android恶意软件进行分类[2,21]。最近,Wang等[68]提出了一种基于审计日志[7]检测恶意软件的对抗性神经网络。
一个关键的观察结果是,与CNN相比,RNN和MLP被这些安全应用程序更广泛地采用。原因是RNN被设计用来处理顺序数据,它在处理二进制代码的长序列时表现得非常好。特别是双向RNN可以捕获每个十六进制[52]之间输入序列中的双向依赖关系。在恶意软件分类中,MLP以其高效的特点得到了广泛的应用。另一方面,由于CNN可以利用特征对二维图像[30]的分组效应,在图像处理上表现良好。这些安全应用程序没有这种类似矩阵的数据结构可以从使用CNN中获益。
3.2为什么不采用现有的解释方法
直接将现有的解释方法应用于安全应用程序存在一些关键挑战。在表1中,我们总结了所需的属性,以及为什么现有方法不能交付它们。
支持RNN和MLP。上述安全应用程序的模型选择与现有的解释方法之间存在明显的不匹配。现有的解释方法大多是为CNN设计用于图像分类器的。然而,如3.1所述,我们感兴趣的安全应用主要采用RNN或MLP。由于模型不匹配,现有的解释方法不太适用。例如,显著性映射[3,18,54,57]和激活差传播[53]等反向传播方法需要对CNN的卷积层和池化层进行特殊的操作,这在RNN和MLP 1中是不存在的。像LIME这样的黑盒方法也不能很好地支持RNN(我们稍后的实验验证了这一点)。像LIME这样的方法假设特征是独立的,但是这个假设被RNN所违背,RNN显式地建模了序列数据的依赖关系。
支持局部非线性决策边界。现有的大多数方法(如LIME)都假定决策边界的局部线性。然而,当局部决策边界为非线性时(对于大多数复杂网络来说是如此),这些解释方法会产生严重的误差。图3a显示了一个关于x的决策边界高度非线性的例子。换句话说,线性部分非常局限于一个非常小的区域。典型的采样方法容易触及线性区域外的人工数据点,使得线性模型难以逼近x附近的决策边界。在后面的实验(5)中,我们证实了简单的线性近似会显著降低解释保真度。
支持黑箱设置。虽然白盒方法和黑盒方法都有它们的应用程序场景,但是黑盒方法对于安全应用程序仍然是更可取的。值得注意的是,在没有详细的网络架构、参数或培训数据的情况下,人们使用预培训模型(例如双向RNN[52]、Dyninst[5]中的前缀树)并不少见。即使一些前向传播方法可能被迫在黑箱设置下工作(通过放弃中间层的观察),它也不可避免地会导致性能下降。
总结。本文旨在通过开发专门的安全应用解释方法来弥补这一缺陷。我们的方法旨在在黑盒环境下工作,有效地支持流行的深度学习模型,如RNN、MLP和CNN。更重要的是,该方法需要实现更高的解释保真度来支持安全应用程序。
4我们的解释方法
为了实现上述目标,我们设计并开发了LEMNA。在高层,我们将目标深度学习分类器视为一个黑箱,并通过模型近似推导出解释。为了提供一个高保真度的解释,LEMNA需要采用与现有方法非常不同的设计路径。首先,我们引入了fusion lasso[64]来处理在安全应用程序和RNN(如时间序列分析、二进制代码序列分析)中经常遇到的特征依赖问题。然后,将融合lasso集成到混合回归模型[28]中,逼近局部非线性决策边界,以支持复杂的安全应用。接下来,我们首先讨论了使用熔融套索和混合回归模型的设计选择背后的见解。然后,我们描述了将它们集成到单个模型中的技术细节,以同时处理特性依赖和局部非线性。最后,我们介绍了利用LEMNA推导高保真度解释的附加步骤。
4.1我们设计背后的洞见
融合套索。融合lasso是一种常用的惩罚因子,用于捕获特征依赖项,并在深度学习模型(如RNN)中用于处理依赖项。在高层,融合套索迫使LEMNA将相关/相邻的特征组合在一起以产生有意义的解释。下面,我们将介绍这种直觉的技术细节。
为了从一组数据样本中学习模型,机器学习算法需要最小化一个损失函数L(f (x),y),该函数定义了模型的真实标签和预测标签之间的差异。例如,学习线性回归模型f (x) =βx +ϵ从一个数据集N样本,学习算法需要最小化以下方程的参数β使用最大似然估计(标定)[38]。
这里xi是一个训练样本,用m维特征向量(x1, x2,···,xM)T表示。xi的标签记为yi。向量β=(β1β2,···βM)包含线性模型的系数。·为衡量模型预测与真实标号之间差异的l2范数。
融合套索是一种惩罚项,可以引入任何损失函数的学习算法。以线性回归为例。熔融套索表现为对系数施加的约束,即
融合套索在一个小阈值S(即(超参数)当学习算法使损失函数最小化时。因此,惩罚项迫使学习算法为相邻的特征分配相等的权重。直观上,这可以解释为强制学习算法以特征为组,然后基于特征组学习目标模型。
安全应用程序,如时间序列分析和代码序列分析,通常需要使用RNN显式地建模序列数据的特性依赖关系。得到的分类器根据特征的共现情况进行分类决策。如果我们使用一个标准的线性回归模型(例如LIME)来得到一个解释,我们就不能正确地近似一个局部的决策边界。这是因为线性回归模型不能捕获特征依赖并独立处理它们。
通过在逼近局部决策边界的过程中引入熔融套索,我们期望得到的线性模型具有如下形式:
特征被分组在一起,因此重要的特征可能被选择为一个组或多个组。在LEMNA中显式地建模这个过程有助于获得更准确的解释,特别是对于RNN所做的决策。我们将使用图1b中的情绪分析示例进一步解释这一思想。在融合套索的帮助下,回归模型将共同考虑相邻的特征(例如,一个句子中的单词相邻)。在推导解释时,我们的模型并不是简单的给出一个不单词,而是能够准确的捕捉到不值得付出代价的短语作为情绪分析结果的解释。
混合回归模型。混合回归模型使我们能够更准确地逼近局部非线性决策边界。如图3b所示,混合回归模型是多元线性回归模型的组合,使得进行近似更具有表达性:
其中K为超参数,表示混合模型中组合的线性分量总数;πk表明重量分配到相应的组件。
给定足够的数据样本,无论分类器的决策边界是线性的还是非线性的,混合回归模型都可以近乎完美地逼近决策边界(使用有限的线性模型集)[35]。因此,在深度学习解释的背景下,混合回归模型可以避免上述非线性问题,得到更准确的解释。
为了说明这个想法,我们使用图3中的示例。如图3a所示,标准的线性近似不能保证在输入x附近采样的数据仍然保持在局部线性区域。这很容易导致不精确的近似和低保真度的解释。我们在图3b中的方法是用多边形边界近似局部决策边界,其中每条蓝线代表一个独立的线性回归模型。产生解释的最佳线性模型应该是通过数据点x的红线,这样近似过程就可以得到一个最优线性回归模型,用来确定重要特征作为解释。
4.2模型开发
接下来,我们将这些设计见解转化为一个功能性的解释系统。摘要介绍了在混合回归模型的学习过程中对融合lasso进行集成的技术步骤,以便同时处理特征依赖和决策边界非线性问题。从技术上讲,我们需要通过最小化下面的方程得到一个混合回归模型
f(·)代表混合回归模型方程(4)所示,βk j表明k线性回归模型中的参数与j特征。
与标准线性回归不同,我们的优化目标很难实现,不能简单地利用MLE来实现最小化。为了有效地估计混合回归模型的参数,我们使用了另一种方法。
首先,我们以概率分布的形式表示混合回归模型:
然后,我们对待π1:K,β1:parameters3 K和σ2 1:K。通过对这些参数进行猜测,初始化它们的值,然后使用期望最大化(EM)[37]进行参数估计。期望最大化(EM)[37]是一种通过重复执行e步和m步来估计参数的算法。下面,我们将简要描述如何在我们的问题中使用EM算法。更多细节见附录a。
在方程(6),易建联是一个分布相结合K高斯分布,和每一个分布βk xi均值和方差σ2 K。在E-Step中,我们按照学习普通混合回归模型的标准步骤,将每个数据样本分配到一个高斯分布。基于样本数据分配在前面的E-Step,然后重新计算参数π1:K,β1:K和σ2 1:K。参数π1:K和σ2 1:K, re-computation仍然遵循普通混合模型使用的标准程序的学习。但是,对于每个参数在β1:K, re-computation遵循一个定制的过程。这是计算βk通过最小化对βk以下方程:
其中Nk表示分配给第k个组件的样本数量。这个re-computation定制,背后的原因是融合套索β1必须实施参数:K为了格兰特混合回归模型能够处理特性的依赖。我们可以观察到,上面的等式与方程所示共享相同的形式(2)。因此,我们可以通过标定,从而减少方程计算的值参数β1:K。
按照EM算法的标准步骤,重复执行e步和m步。直到达到稳定(即,高斯分布变化不大,从e步到m步),我们输出混合回归模型。注意,我们把σ2 1:K到模型参数ϵ1:K按照标准方法应用于普通混合模型的学习。
4.3应用模型进行解释
利用改进的混合回归模型,讨论了如何对深度学习分类器进行高保真解释.
近似局部决策边界。给出一个输入实例x,生成解释的关键是近似目标分类器的局部决策边界。最终的产品是一个可解释的线性模型,它允许我们选择一小部分顶部特性作为解释。为此,我们首先按照[45]中描述的方法在本地(大约x)合成一组数据样本。其思想是随机地使x的一个特征子集无效。
然后利用合成数据样本的语料库对局部决策边界进行近似。有两种可能的方案:一是训练单一混合回归模型进行多类分类;另一种方案是训练多个混合回归模型,每个模型执行二元分类。出于效率考虑,我们选择了第二种方案,并对附录b进行了更严格的分析。
派生的解释。给定输入数据实例x及其分类结果y,我们现在可以将解释作为x分类的一组重要特征来生成。更具体地说,我们得到了一个由融合lasso增强的混合回归模型。从这个混合模型中,我们确定了具有最佳逼近局部决策边界的线性分量。线性模型中的权值(或系数)可以用来对特征进行排序。我们选择了一小部分top特性作为解释结果。
注意,LEMNA被设计用来同时处理非线性和特征依赖,但这并不意味着LEMNA不能使用相对独立的特征(如MLP或CNN)来处理深度学习模型。事实上,LEMNA的设计提供了根据目标深度学习模型调整解释方法的灵活性。例如,通过增加hyper-parameter年代融合套索(阈值),我们可以放松约束强加给参数β1:K和允许浮萍属更好地处理减少对政府的依赖特性。在第5节中,我们通过将LEMNA应用于构建在RNN和MLP上的安全应用程序,演示了可通用性的级别。
5 评价
在这一部分,我们评估了我们的解释方法在两个安全应用:恶意软件分类和二进制反向工程的有效性。本节主要通过一系列保真度指标来评估解释的准确性。在下一节中(§6),我们将实际用例浮萍属理解分类器的行为,排除分类错误,和补丁的错误分类器。
5.1实验装置
我们将LEMNA应用于两个安全应用:利用RNN检测反向工程二进制代码的函数启动;基于MLP对PDF恶意软件进行分类。下面,我们将详细介绍这两个安全应用程序、LEMNA的实现和比较基线。
二进制逆向工程。二进制代码反向工程是(1)检测和检测恶意软件[51],(2)加强软件的安全性[75],(3)生成安全补丁[56]的关键步骤。多年来,二进制分析主要由经验丰富的安全分析师手工完成。最近,研究人员表明,训练有素的RNN可以帮助处理关键的逆向工程步骤,如检测函数start[52],这可以大大节省人力。考虑到检测函数开始的重要性(即我们选择这个应用程序来测试LEMNA。
我们遵循[52]构建一个基于广泛使用的包含2200二进制[5]的数据集的RNN。我们在x86体系结构和gcc编译器下编译这些二进制文件,优化级别分别为O0、O1、O2和O3。这将生成4个训练数据集,每个优化级别对应一个。与[52]类似,我们使用双向RNN并训练4个不同的分类器。
数据集中的每个二进制文件都表示为十六进制代码序列。如图4所示,我们首先将十六进制代码转换为它们的十进制值,并将序列中的每个元素视为一个特性。对于训练,序列中的每个元素都有一个标签,要么是函数开始,要么不是函数开始。如图4所示,假设原始二进制代码是90 90 90 83 ec 4 c和函数是在83年开始,然后标签向量(0,0,0,0,1,0,0),我们遵循[52]截断很长的二进制序列和设定最大长度为200。然后我们将序列输入RNN。我们使用Keras[14]对模型进行训练,以Theano[63]作为后台。我们使用70%的样本进行训练,剩下的30%进行测试,将数据集随机分割。
如表2所示,检测准确率极高,所有病例的检测准确率和召回率均达到98.57%以上。结果与[52]报道的结果相当。神经网络的超参数可以在附录c中找到。
PDF恶意软件分类器。我们遵循[21,48]基于广泛使用的数据集(4999个恶意PDF文件和5000个良性文件)[55]构建一个基于mlp的恶意软件分类器。我们按照[55,58]为每个文件提取135个特性。这些特性是研究人员根据元数据和PDF的结构(如对象标记的数量和javascript标记的数量)手工制作的。完整的特征列表可以在拟态[1]中找到。我们采用标准方法将特征值转换为二进制表示形式[41](即,将非零特征值转换为1),避免了某些高值特征对训练过程的扭曲。和之前一样,我们随机选取70%的数据集(恶意软件和良性1:1)作为训练数据,剩下的30%作为测试数据。如表2所示,我们的准确率和召回率都在98.13%以上,与[55]相似.我们将上述RNN和MLP作为运行LEMNA的目标分类器。给出了一个输入实例,对目标分类器进行了近似,并给出了分类结果。解释是给定输入的最重要的特征。对于恶意软件分类器,LEMNA输出一小部分顶级特性,解释为什么文件是(不是)恶意软件。对于函数start检测器,图4显示了一个示例。给定一个输入十六进制序列和检测到的函数开始(即(83), LEMNA在序列中标记出一组贡献最大的十六进制编码。这里,83是函数的开始,LEMNA指出,函数开始前的十六进制编码90是最重要的检测原因。
LEMNA有3个可配置的超参数。首先,近似本地决策边界,我们将工艺N数据样本为模型拟合(参见4)。第二个和第三个参数K混合组件的数量,和二元函数的阈值融合的套索S开始检测,我们将参数设置为:N = 500 K = 6 S = 1 e 4。对于恶意软件分类,我们设置参数为:N=500, K=6, S=1e4。注意,参数S的设置非常不同,因为恶意软件分析特性是相对独立的,而二进制分析特性具有很高的依赖性。我们修正这些参数来运行我们的大多数实验。稍后,我们将有一个专门的部分来对参数设置进行敏感性测试(这表明LEMNA对这些超参数不敏感)。
LEMNA的计算成本。LEMNA的计算成本相对较低。对于这两个安全应用程序,为给定实例生成解释的时间大约为10秒。这种计算任务进一步得益于并行化。例如,使用一台带有Intel Xeon CPU E5-2630、一台Nvidia Tesla K40c GPU和256G RAM的服务器,大约需要2.5小时来解释针对30个线程的O0的所有25,040个二进制测试序列。
比较基线。我们使用两条基线进行比较。首先,我们使用最先进的blackbox方法LIME[45]作为我们的比较基线。LIME[45]已经被用来解释图像分类器和NLP的应用。它在安全应用和RNN上的性能还不清楚。为了公平比较,我们还将LIME配置为N=500,这是用于拟合线性回归模型的人工样本数量。其次,我们使用随机特征选择方法作为基线。在给定输入条件下,随机选择特征作为分类结果的解释。
5.2保真度评价
为了验证解释的正确性(保真度),我们进行了两个阶段的实验。在第一阶段,我们直接检查我们的局部近似相对于原始决策边界的准确性。这可能会对解释的准确性作出初步估计。第二阶段,对解释保真度进行端到端评价。我们设计了三个保真度测试来显示所选择的特征是否确实是分类结果的主要贡献者。
评价1:局部近似精度。该度量通过比较近似的决策边界和原始的决策边界来直接计算。我们测量均方根误差(RMSE):RMSE = qPni = 1(πp i)n,其中π表示一个单一的预测从目标深度学习分类器,获得p i表示近似预测得到的解释方法,和n是测试样本数据的总数。更具体地说,我们从一个给定的分类器和一组测试数据样本开始。对于每个测试数据样本xi,我们首先使用分类器得到一个预测概率pi。然后,对于xi,我们根据式(6)生成一个回归模型,该模型可以产生一个估计的预测概率pi。对n个测试样本运行这些步骤后,我们得到预测向量P = (p1,p2,…),对应的近似向量P = (p1, p2,…),p n)。最后,我们利用这两个向量来计算RMSE。RMSE越低,说明近似的决策边界(P)越接近真实边界(P),说明解释的保真度越高。
评估2:端到端保真度测试。为了验证所选特性的正确性,我们设计了三个端到端保真度测试。为了帮助读者理解测试过程,我们使用“图像分类器”作为一个玩具例子5。该过程对其他分类器的工作方式相同。如图5所示,训练图像分类器对“shoe”和“sweater”进行分类。图5a为标签为“毛衫”的输入图像(x)。在图5b中,解释方法用红色高亮重要像素(特征)来解释分类的原因。我们将选择的特性表示为Fx。为了检验解释的准确性,我们有三个直觉:
如果feature Fx被准确的选中,那么从输入x中移除Fx将导致将该图像分类到不同的标签,即,鞋子(图5c)。
如果准确选择了feature Fx,那么将Fx的feature值添加到鞋子的图像中很可能会导致分类错误,即,将其分类为毛衣(图5d)。
如果feature Fx被准确的选择,我们可以制作出一个只包含Fx中feature的合成图像,这个合成图像很可能被归类为毛衫(Figure 5e)。
利用这些直觉,我们构造了3个不同的保真度测试来验证所选的特性。更正式地说,给定一个输入实例x及其分类标签y, LEMNA标识了一小部分重要特性(Fx)作为解释。然后我们按照下面的步骤生成3个测试样本t(x)1、t(x)2和t(x)3用于特征验证
特征推理测试:通过对实例x中选定的特征Fx进行空化,构造一个样本t(x)1。
特征增强测试:我们首先从相反的类(即然后将实例r的特征值替换为Fx的特征值,构造t(x)2。
综合测试:我们构造t(x)3作为一个综合实例。我们保留所选特性Fx的特性值,同时为其余特性随机赋值。
本实验的关键变量是选取的重要特征个数作为“解释”(即外汇| |)。直观地说,一个更大的
|Fx|可能会产生更好的解释保真度,但会损害结果的可解释性。我们希望|Fx|保持较小,以便人类分析师能够理解。
给定测试数据集中的一个实例x,我们生成3个样本,每个样本对应一个保真度测试。我们将3个样本送入分类器,并检测其阳性分类率(PCR)。PCR检测的是仍被归为x’s原标签的样品的比例。注意,这里的阳性并不意味着恶意软件或功能开始。这仅仅意味着新的样品仍然被归类为x的原始标签。如果特征选择准确,我们预计特征推断样本的PCR值较低,特征增强样本的PCR值较高,综合测试样本的PCR值较高。
5.3实验结果
我们的实验表明,在所有的保真度指标上,LEMNA的表现明显优于LIME和随机基线。
当地的近似精度。如表3所示,LEMNA的RMSE比LIME小一个数量级。这
观察对恶意软件分类器和函数开始检测都成立。LIME的最佳表现结果RMSE为0.1532,仍然比LEMNA的最差表现结果(0.0196)高出近10倍。这一结果证实了我们的混合回归模型能够比简单的线性模型建立更精确的近似。注意,这个度量不适用于随机基线,因为随机基线并不构建决策边界。
图6a显示了特征推断测试的结果。召回特征推理测试是从输入实例中删除重要特征。PCR值越低,说明所选特征对分类决策越重要。仅通过消除LEMNA产生的前5个特征,function start检测器将PCR降至25%或更低。考虑到分类器极高的准确率(99.5%+,见表2),PCR的大幅下降表明小集合特征对分类非常重要。注意,由于前5个特征只占输入序列中200个总特征的2.5%,所以特征的空化被认为是次要的。如果我们取消前35个特征,PCR就会降到接近0。
回想一下,功能增强是添加所选特征输入x相反的类的一个实例,希望x的分类器产生一个标签。更高的PCR显示所选特征x更重要。相对符合先前的测试结果:(1)添加少量的高级特性可以翻转的标签类相反的实例;(2)我们的方法大大优于两个基线。值得注意的是,对于PDF恶意软件分类器,通过替换前5个特性,75%的测试用例会翻转它们的标签。
图6c显示了合成测试的类似趋势。使用从给定x中选择的特性,合成实例更有可能被标记为x的标签。仅使用5个top特性,合成实例有85%-90%的机会获得x的标签,这表明已经成功捕获了核心模式。
在所有三个测试中,我们的LEMNA都比LIME和随机基线表现出色得多。有趣的是,对于恶意软件分类器,LIME的性能和随机特征选择一样差。这是因为特征向量稀疏,不利于决策边界的平滑。LIME很难准确地逼近非光滑边界,这再次验证了我们的设计直觉。我们的系统更适合于安全应用,因为与图像分析任务相比,安全应用需要更高的解释精度。
Hyper-parameters的敏感性。最后,我们测试如果参数设置不同,结果会如何变化。我们测试了大量的参数配置,发现我们的结论是一致的。由于篇幅限制,我们总结了表4中的关键结果。三个超参数分别为模型拟合的精加工数据样本个数(N)、混合组分总数(K)、融合lasso的阈值(S)。表4给出了O0数据集上二元函数启动检测器的结果。我们展示了4组配置,每次只改变一个参数。对于保真度测试,我们将选择的特征数量固定为25来计算PCR。结果表明,超参数的改变对LEMNA的性能影响不大。
6 ML解释的应用
到目前为止,我们已经验证了解释结果的准确性。在本节中,我们将介绍LEMNA的实际应用。我们使用案例研究来说明解释结果如何帮助安全分析师1)建立对训练有素的分类器的信任,2)排除分类错误,3)系统地修补目标错误。由于深度学习的应用领域是一个相对较新的领域,人们对它的认识还不够充分,所以在接下来的文章中,我们主要关注二元逆向工程的应用。我们对PDF恶意软件分类器进行了相同的分析,结果在附录e中。
6.1了解分类器行为
我们的解释方法的主要应用是评估分类器的可靠性,帮助建立信任。我们认为分类器的可靠性和可信度不一定来自于训练数据的高分类精度。通常情况下,培训数据不够完整,不足以捕获所有可能的差异。相反,信任更有可能是通过理解模型行为而建立的。在这一节中,我们研究了两个关键的方向来理解分类器如何做出决策:(1)捕捉和验证黄金规则和完善的启发式;(2)发现新知识。
捕获著名的启发式(C.W.H.)。一个可靠的分类器至少应该捕获各自应用领域中众所周知的启发式。例如,在二进制反向工程领域,安全实践者积累了一组有用的启发式来识别函数开始,其中一些甚至被视为黄金规则。某些黄金规则源自应用程序二进制接口(ABI)标准[22]的规范。例如,ABI需要一个函数来存储旧的帧指针(ebp),如果这个函数维护一个新的帧指针。这导致了最常见的序章[push ebp;mov ebp, esp]。另一组成熟的规则来自主流编译器。例如,GNU GCC经常在函数开始之前插入nop指令,这将函数对齐到架构优化[43]。
通过对解释结果的分析,我们发现有强有力的证据表明深度学习分类器已经成功地捕获了著名的启发式。在表5中,我们展示了4种最具代表性的情况,每种情况对应一个分类器(或优化级别)。在Case-1中,分类器正确检测到函数从55开始。然后,我们的LEMNA通过突出特性的重要性(即,即附近的十六进制编码)。结果符合众所周知的黄金法则,即[push ebp;mov ebp, esp]。这表明分类器正在以一种合理的方式进行决策。类似地,Case-2捕获c3之后的函数start 53。这与编译器引入的一种流行的启发式方法相对应,因为编译器通常通过ret指令(特别是在O0和O1级别)最终退出函数。
在Case-4中,83是函数start, LEMNA用红色突出显示了90。这表明分类器在函数开始规则之前遵循nop,这是由编译器在对齐的函数之前填充nop s造成的。类似地,在Case-3中,LEMNA突出显示了填充指令[lea esi,[esi+eiz*1+0]],这是编译器引入的另一个模式。总的来说,LEMNA表明,著名的启发式被分类器成功捕获。
在我们的分析过程中,我们观察到著名的启发式算法在较低的优化级别(O0, O1)上广泛适用,但在较高的优化级别(O2, O3)上适用的二进制数不多。例如,o0级95%的函数以[55 89 E5]开头,与Case-1的启发式相匹配。74%的o1优化函数以ret作为结束指令(Case-2)。相反,只有30%的O2或O3级别的二进制函数符合众所周知的启发式,例如,函数端填充指令([90 90 90 90],[8d b4 26 00 00])。这很直观,因为更高层次的优化会显著地使代码结构多样化,从而降低黄金规则的效率。
发现新知识(D.N.K.)。除了匹配已知的启发式之外,我们还检查分类器是否获取了现有知识之外的新启发式。对于安全应用程序,我们认为新的启发式需要由领域专家来解释。在二元分析领域,许多潜在有用的启发式都是特定于单个函数的,很难手工总结所有这些启发式。例如,链接器插入的实用函数通常具有惟一的起始代码段,而这些代码段很少出现在其他地方(例如,_start函数总是以[xor ebp, ebp;流行esi])。手工组织这些规则是不切实际的。然而,这些规则一旦由LEMNA推导出来,对领域专家来说就有了直观的意义。
如表5所示,我们对解释结果进行了分析,发现分类器确实学到了新的知识。我们选取了5个具有代表性的案例(ID 5 9),案例5显示,由于后续的[ed 5e],在函数开始时检测到31个案例。[31 ed 5e]对应效用函数_start的start(即[xor ebp, ebp;流行esi])。这说明我们的解释方法可以帮助总结与特殊函数有关的独特序言。注意,函数start 31本身并不一定是一个重要的指示器。实际上,31表示经常出现在函数中间的操作码(xor)。正是[ed 5e]导致了正确的检测。
案例6说明了另一个有趣的模式,其中2b是检测从b8开始的函数的最重要的特性。2b驻留在遵循模式的指令中[mov eax, CONS1;在eax, CONS2]中,CONS1和CONS2是常量,CONS1 - CONS2 = 0或3。这个模式只出现在register_tm_clone和deregister_tm_clone的序言中,这两个是用于事务内存的实用函数。这也是一个特定于函数的模式,用于检测函数的启动。
案例7、案例8和案例9在功能开始时都有一些类型的准备工作。在Case-7中,[83,ec]被标记为最重要的特征,它对应于指令[sub esp, 0x1c]。在函数开始时经常使用这种形式的指令来准备堆栈框架。对于Case-8, [mov eax, DWORD PTR [esp+0x4]]被标记为最具指示性的特征。通常插入这条指令是为了获取函数的第一个参数。注意,04是红色的,这是因为04用作[esp+0x4]获取函数参数的偏移量。如果这个偏移量的值不同,那么这个指令不一定是函数开始的指示器。对于Case-9,它首先保存稍后修改的寄存器([push ebp;推动edi;推动esi])。调用约定(一个通用ABI标准)要求保存这些寄存器,这些寄存器也经常出现在函数开始处。
总的来说,LEMNA验证了分类器的决策在很大程度上遵循了可解释的逻辑,这有助于建立对这些分类器的信任。
6.2分类错误的排除
深层神经网络虽然具有较高的准确性,但仍然存在一定的误差。这些错误不应被简单地忽略,因为它们往往表明培训不足,而在实践中(由于有偏见的培训)可能会被放大。我们的解释方法试图深入了解是什么导致了给定错误分类的错误。通过对误差产生的原因进行检查,为有针对性的误差修正提供可操作的指导。
假阴性的原因(R.F.N.)。对于二进制分析应用程序,分类器有时会错过真正的函数启动。如表5(根据R.F.N.)所示,给出一个错误的否定,我们解释了为什么真正的函数开始不被分类为函数开始。具体来说,我们将元组(代码序列、实函数开始)输入到LEMNA中,而红色的特性是不识别函数开始的原因。例如,在Case-10中,[50 fd]被标记为主要原因,对应于[jmp 0xfffffd50]。这条指令几乎总是出现在例程或函数的中间,误导分类器认为实质31不是函数的开始。这是一个异常情况,因为这个[50 fd]恰好是特殊区域.plt的最后一条指令,后面跟着_start函数。Case-11和Case-12由于指令[mov edx,eax]和[mov eax,ds:0x82014d0]的错误分类,经常出现在函数中间。
假阳性原因(R.F.P.)。表5还显示了分类器选择错误函数开始的示例。在这里,我们将元组(代码序列、错误的函数启动)放入LEMNA,以解释为什么选择了错误的函数启动。例如,Case-13用红色突出显示c3,表示ret指令。通常,ret位于一个函数的末尾,用于退出,这使得下一个字节83成为函数开始的有力候选。但是,Case-13是特殊的,因为ret实际上是为了优化目的而放在函数中间的。Case-14和Case-15都被填充指令[lea esi,[esi+eiz*1+0x0]所误导,[lea esi,[esi+eiz*1+0x0]]通常用于对齐函数。但是,在这两种情况下,这个填充指令实际上用于对齐函数内部的基本块。
总体而言,LEMNA表明,这些错误很大程度上是由误导模式主导实际指标这一事实造成的。为了减少这些错误,我们需要在特征空间中找出相应的区域,并抑制这些误导模式。
6.3 ML分类器的针对性补丁
基于以上结果,我们开发了自动程序,将洞察转换为行动,以修补分类器。
修补的方法。为了修补特定的分类错误,我们的想法是识别分类器中训练不足的相应部分。然后我们制作了目标训练样本来扩充原始训练数据。具体来说,给定一个错误分类的实例,我们应用LEMNA来确定引起错误的一小部分特性(Fx)。通常情况下,这些实例是训练数据中的异常值,并且没有足够的反例。为此,我们的策略是通过增加相关的反例来增加训练数据,将Fx的feature值替换为random值。
我们使用一个示例(表5中的Case-10)来描述修补程序。分类器由于[50 fd]而错过了函数的开始,这是一种通常存在于函数中间的十六进制模式。理想情况下,分类器应该选择其他模式[31 ed 5e]来定位函数的起始位置。不幸的是,错误模式的影响太大了。为此,我们可以增加新的样本,以减少误导特征的影响([50 fd]),促进正确的指标([31 ed 5e])。将“[50 fd]”的十六进制值替换为随机十六进制值,生成新的样本。通过在训练数据中加入新的样本,减少再训练分类器的误差。
评估结果。为了证明修补的有效性,我们对所有5个分类器执行了上述步骤。对于每一个假阳性和假阴性,我们分别生成kp和kn的新样本。注意kp和kn不一定相同,但是它们都需要很小。毕竟,我们希望在不损害分类器已有的高精度的前提下,对目标错误进行修补。对于所有的分类器,我们一致地替换了前5个误导特征,并用40个时间重新训练模型。
表6显示了修补前后的分类器性能。我们测试了参数的敏感性,发现只要我们将kp和kn设置在2 - 10之间(附录- f),结果是相对一致的。由于篇幅限制,表6只给出了每个分类器的一组结果。我们的实验表明,对这五个分类器进行再训练后,可以减少误报和误报。这些结果表明,通过对模型行为的理解,我们可以识别出模型的不足之处,并对模型进行相应的改进。
7讨论
福利vs。风险。LEMNA的目的是帮助安全分析人员理解、检查甚至修补基于深度学习的安全系统。从防御的角度设计时,攻击者可能会利用它来寻找深度学习分类器的缺点。然而,我们认为这不应该稀释LEMNA的价值,也不应该成为不开发解释工具的理由。类似的还有软件fuzzing技术[13,73]:虽然黑客可以使用fuzzing工具寻找漏洞加以利用,但是fuzzing技术通过在软件发布前帮助软件测试发现并修复漏洞,极大地造福了软件行业。
分析LEMNA输出的指南。LEMNA输出对每个测试用例的解释。要彻底检查分类器,开发人员可能需要通过LEMNA运行大量测试用例。人工阅读每个案例的解释是时间消耗,因此我们提出了一种更有效的方法,那就是先对相似的解释进行分组。在6中,我们将完全相同的解释进行分组,然后选择最具代表性的案例。在实践中,开发人员可以根据需要使用任何其他集群技术对解释进行分组。
更广泛的安全应用。LEMNA使用两个流行的安全应用程序进行评估。还有许多其他的安全应用程序,如检测二进制代码的函数端、确定函数类型和检测脆弱代码[15,24,47,52,66]。他们也可以从LEMNA中获益,因为他们的深度学习架构是RNN或MLP。请注意,像CNN这样的模型与MLP有一些相似之处,因此LEMNA可能有助于相关应用(例如图像分析)。未来的工作将探讨LEMNA在更广泛的应用领域中的适用性。
其他深度学习架构。除了MLP和RNN,还有其他深度学习架构,如从序列到序列网络[4,60]和混合网络[25,36,71]。虽然这些架构主要在机器翻译[4]和图像字幕[25]等领域取得成功,但初步证据显示,它们在安全方面有发挥更大作用的潜力[36,71]。一旦将来构建了具体的安全应用程序,我们计划在这些新的体系结构上测试LEMNA。
模糊的特性。当特性是可解释的时,LEMNA是有用的,但是对于所有应用程序来说,这可能不是真的。特别是,研究人员最近提出了各种方法[8,67,70],以混淆输入特征,增加运行对抗性攻击的难度。可能由于特征混淆经常降低分类器的精度,这些技术还没有得到广泛的应用。LEMNA并不直接适用于训练在模糊特征上的分类器。但是,如果模型开发人员在原始和模糊的特性之间有映射,那么开发人员仍然可以将LEMNA的输出转换为可解释的特性。
8其他RELATEDWORK
由于在2和3中已经讨论了大部分相关的工作,我们在这里简要讨论其他相关的工作。
提高机器学习的鲁棒性。Adeep学习模型可能被一个对抗性样本(即,一种恶意输入,精心设计,导致错误分类)[61]。为了提高模型的抵抗力,研究人员提出了各种防御方法[9,20,36,40,67]。最相关的工作是对抗性训练[20]。对抗性训练是在训练数据集中加入对抗性的例子来重新训练一个更健壮的模型。可以使用各种技术为对抗性训练制作对抗性示例[11,33,42,72]。我们的补丁方法和标准的对抗性训练之间的一个关键区别是,我们的补丁是基于对错误的理解。我们尽量避免盲目地对模型进行再培训,以免引入新的漏洞。
减轻受污染数据的影响。最近的研究已经探索了减轻训练数据污染所带来的错误分类的方法[10,12,46,65]。机器反学习[10]是一种典型的方法,它通过将标准的训练算法转化为累加形式来消除某些训练数据的影响。最近的一项工作[29]提出利用影响函数来识别导致错误分类的数据点。我们的方法是对现有工作的补充:我们建议增加训练数据来修复训练不足的组件(而不是删除坏的训练数据)。更重要的是,在修复这些错误之前,LEMNA帮助人类分析人员理解这些错误。
9 总结
本文介绍了一种新的方法——LEMNA,它可以为安全应用中的单个分类结果提供高保真度的解释。LEMNA将目标深度学习模型视为黑盒,通过融合lasso增强的混合回归模型逼近目标深度学习的决策边界。通过对两种常用的基于深度学习的安全应用进行评价,证明了该方法的正确性。此外,我们还演示了机器学习开发人员和安全分析人员如何从LEMNA中获益,以便更好地理解分类器行为、排除错误分类错误,甚至执行自动化补丁来增强原始的深度学习模型。
附录- A. EM算法细节