A. 反汇编和CFG的创建
为了更进一步的分析,将二进制转变成一个中介的代表。这个转变是通过将逆向工程运用到二进制中得到的。因此,这个中介代表用一个反汇编程序以汇编语言代码的形式得到。在我们的模型中,反汇编是通过Datarescues’ID A Pro[8]得到的。汇编代码在语法和语义学上相较于二进制代码具有更高的分辨率,因此汇编代码能够更好地反映可执行文件的结构。
函数是汇编代码中的主要部件。这些函数按照结点数分开并依照它们在虚拟内存中的存储单元用连续的数字标明(结点的标识)。我们运用一个IDC程序由反汇编来自动地创建CFG,并将结果保存在图表文件中。有些代码不属于上述的任何一种函数,在我们的模型中并不将它们纳入考虑。
B. 提取特征
为了从控制流图中开采信息,首先应该明确特征,然后通过快速算法把它们提取出来并应用于数据挖掘。我们在模型中定义的特点根据结点,边界和子图的信息被分为三大类。表格Ⅰ显示了一些在我们的实验数据集提取的特征的平均值。
结点代表了汇编代码的函数,所以结点需要保持函数的类型和与其它结点的关联。就结点而论,一些特别的结点被定义成没有入度和出度的孤立的结点,或者是有入度但无出度的末端结点。
我们注意到,如表格Ⅰ所标注的,入口结点总是存在在良性的可执行文件中,但病毒的入口结点不能进行反汇编,也不能靠近程序的最前面。
边界的统计值信息非常重要,反映了与结点之间复杂的联系。早期的研究通常集中于函数的结点而忽略了二者之间的关系。我们的研究显示出这些关联对于可执行文件的重要的安全特性。在表格Ⅰ中可以看到,度的平均值和最大值一类的对边界的统计值在善意的可执行文件中通常要大于在病毒中的值。这表明相较恶意的可执行文件,函数之间的关联在善意的软件中表现得更为频繁。
由于静态分析的限制,CFG不总是一个单一的连通图。论文网http://www.751com.cn/ 为了研究到CFG的特别部分,我们定义了一些连接子图:起始子图包括了从起始结点开始的结点和结点之间的定向边界线,最大的包括了CFG中的起始结点的不定向子图,最大的拥有最多结点的不定向子图等等。表格Ⅰ的另一个有趣的发现是起始的不定向子图在善意的可执行文件中总是最大的不定向子图,而这个情况并不出现在恶意的可执行文件中。本文来自辣.文'论,文·网原文请找腾讯324,9114
明确了这些特征以后,应该采用一些统计方法和算法来获得它们的值。在我们的模型中,建立了一个邻接表来保存控制流图的信息,并规划特定的图表遍历算法来得到之前定义的特征的值。
我们辨认了得到的由大量静止的可计算特征组成的特征集-确切地说-基于PE文件的控制流图,它们的总数在很大程度上比利用可执行文件的字节和代码的n-grams方法小。这促进了模型的进程并且降低了成本。
C. 分类器
特征集是作为一个对分类器的众所周知的数据挖掘算法的输入给出的。在我们的模型中,我们用了三种类型的分类器算法,并对每一个算法进行了简短的描述。
决策树。决策树递归地划分了预测变量和绝对反应变量之间的模型的预测空间。使用一系列投入产出样本构造一个决策树。学习系统采用了一个自顶向下的方法在检索空间中搜寻解决方案。通过合成树给出了一系列规则,这些规则最终将每个观察分类到所给的类中。
Bagging。在精确度和稳定度方面Bagging或Bootstrap算法是一种中间的算法来改进分类和回归模型。Bagging[9]生成了分类器的多样版本,在这些版本中用最多票数选举出最终类的结果。多样版本由最初的数据集合的bootstrap复制创建的。通过改进不稳定性和个别的分类器,Bagging能够给出大量有关精确度的信息。
上一页 [1] [2] [3] [4] [5] [6] [7] [8] 下一页