欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

提取字符串方法在恶意软件分析中的应用

来源:本站整理 作者:佚名 时间:2019-09-04 TAG: 我要投稿

目前逆向工程师、安全分析人员和事件响应人员在分析恶意软件二进制文件时,已经拥有了大量成熟的工具。在进行恶意软件分析时,为了逐步收集有关二进制文件功能的线索,设计对应的检测方法,并确定最终的环境措施,他们会相继应用这些工具。最常用的初始步骤便是通过字符串程序检查它的可打印字符。如果二进制文件执行诸如打印错误消息、连接到URL、创建注册表项或将文件复制到特定位置等操作,那么它通常会包含一些有助于未来分析的字符串。
注:字符串程序在NT和Win2K上工作时,意味着可执行文件和目标文件会多次嵌入UNICODE字符串,使用标准ASCII字符串或grep程序无法轻松查看。字符串只扫描你传递的文件,以获取默认长度为3或更多UNICODE(或ASCII)字符的UNICODE(或ASCII)字符串。 请注意,该方法也适用于Windows 95。
手动过滤掉这些相关字符串可能非常耗时且容易出错,尤其是考虑到以下的3种情况:
1.相关字符串出现的频率比不相关字符串出现的频率少得多;
2.较大的二进制文件可以输出数万个单独的字符串;
3.对于“相关”的定义,在不同的分析师之间可能存在显著差异;
在执行恶意软件分析时,调查人员绝不想错过任何一个重要的线索,有了这些线索,不但可以减少分析时所用的时间,而且还能得出完整和正确的分析结论。在这篇文章中,我们将展示FireEye Data Science (FDS)和FireEye Labs Reverse Engineering (FLARE)团队最近合作的成果——如何使用提取字符串方法来简化分析过程。
关键过程
1.在恶意软件上运行字符串程序会不可避免地产生与重要字符串混淆的字符串,而这些字符串只有在对整个输出结果进行筛选和筛查之后才能被发现。而本文介绍的新机器学习模型可以根据字符串与恶意软件分析的相关性自动对字符串进行排序,从而大大加快这一筛选过程。
2.了解哪些字符串是相关的,通常需要经验丰富的分析人员,但利用提取字符串方法可以让这个过程变得相当简单;
3. 本文介绍的新机器学习模型可以优先考虑各个恶意软件样本的字符串输出,这些样本是依据FireEye逆向工程师7年以来编写的相关字符串数据集。
字符串程序的工作原理
字符串程序返回的每个字符串都是由3个或更多字符组成的序列表示的,以null结束符结尾,与周围的上下文和文件格式无关。这意味着这些字符串是不能被人们所阅读出来的,而计算机也只能将字符序列标识为字符串。例如,如果连续的字节0x31、0x33、0x33、0x37、0x00出现在二进制文件中,字符串可以将把这些连续的字节解释为“1337”。从这个示例中可以看到,这些ASCII字符并不会真实的表示该字符串本身。不过它们可以表示内存地址、CPU指令,甚至程序使用的数据。字符串程序会让分析人员过滤掉输出中出现的无关字符串。例如,从恶意软件分析师的角度来看,图1中列出的来自恶意二进制代码示例的字符串中,只有少数几个是和恶意行为相关的。

字符串输出中包含44个和样本相关的字符串,其中SHA-256值为eb84360ca4e33b8bb60df47ab5ce962501ef3420bc7aab90655fd507d2ffcedd。
根据降序相关性对字符串进行排序将使分析师的分析过程变得更加容易,这样,他们只需要将注意力集中在列表顶部最相关的字符串上,而忽略下面的所有内容。但是,完成字符串自动排序的任务并非易事。相关字符串的空间是非结构化和庞大的,而设计精心调整的规则来强有力地解释它们之间所有可能的变化,将是一个艰巨的任务。
对字符串输出进行排序
对字符串输出进行排序的任务可以在机器学习(ML)框架中进行,这个框架称为学习排序(learning to rank, LTR) 。LTR(Learning torank)学习排序是一种监督学习(SupervisedLearning)的排序方法。LTR已经被广泛应用到文本挖掘的很多领域,比如IR中排序返回的文档,推荐系统中的候选产品、用户排序,机器翻译中排序候选翻译结果等等。IR领域传统的排序方法一般通过构造相关度函数,然后按照相关度进行排序。影响相关度的因素很多,比如上面提到的tf,idf,dl等。有很多经典的模型来完成这一任务,比如VSM,Boolean model,概率模型等。对于传统的排序方法,很难融合多种信息,比如向量空间模型以tf*idf作为权重构建相关度函数,就很难利用其他信息了,并且如果模型中参数比较多,也会使得调参非常困难,而且很可能会出现过拟合现象。于是人们很自然的想到了用机器学习(Machine Learning)来解决这一问题,于是就有了Learning to rank。机器学习方法很容易融合多种特征,而且有成熟深厚的理论基础。
解决LTR问题的一种方法是使用 GBDT(Gradient Boosting Decision Tree),GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),是一种迭代的决策树算法,该算法由多棵决策树组成,所有树的结论累加起来做最终答案。它在被提出之初就和SVM一起被认为是泛化能力(generalization)较强的算法。近些年更因为被用于搜索排序的机器学习模型而引起大家关注。GBDT中的树都是回归树,不是分类树,这点对理解GBDT相当重要(尽管GBDT调整后也可用于分类但不代表GBDT的树是分类树)。GBDT的核心就在于,每一棵树学的是之前所有树结论和的残差,这个残差就是一个加预测值后能得真实值的累加量。比如A的真实年龄是18岁,但第一棵树的预测年龄是12岁,差了6岁,即残差为6岁。那么在第二棵树里我们把A的年龄设为6岁去学习,如果第二棵树真的能把A分到6岁的叶子节点,那累加两棵树的结论就是A的真实年龄;如果第二棵树的结论是5岁,则A仍然存在1岁的残差,第三棵树里A的年龄就变成1岁,继续学。
GBDT通过梯度下降的方法,不断学习降低损失的决策树,最终将每棵预测树的加权和作为一个集合。具有LTR目标函数的GBDT可以学习类概率来计算每个字符串的预期相关性,然后可以用它对给定的字符串输出进行排序。
在图2的初始train()步骤中,超过25000个二进制文件通过字符串程序运行,最终生成包含超过1800万个字符串的训练数据。然后,每个训练样本对应于该输入文件上的字符串程序输出的ASCII和Unicode字符串的串联列表。为了训练模型,这些原始字符串被转换为包含自然语言处理特征(如香农熵和字符共现频率)的数字向量,以及特定于域的信号,如存在损害指示符(例如文件路径,IP地址,URL)等,格式字符串,导入和其他相关标志。

[1] [2]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载