一次险些让分析师和防御机制都失效的“无头文件”攻击

作者:???深圳市网安计算机安全检测技术有限公司 2019/04/08 09:05:46 353次阅读 国际
文章来源:https://www.4hou.com/web/17197.html

摘要

? ? ? ?Cofense Intelligence近日在一场通过恶意附件传播的网络钓鱼活动中,发现了一个有趣的现象,恶意文件中包含了一个看似“损坏”实际却能执行的文件。在某些条件下,该文件能避开自动和手动分析,并能在目标环境中武器化。

? ? ? ?“损坏”指的是文件缺乏文件头,其设计初衷可能是让分析人员误以为附件是无害的,觉得只是攻击者犯下的一个简单的错误,不值得认真对待。但只有当你打开附件或使用特殊程序提取附件时,才会出现无头文件。

? ? ? ?此项攻击行动试图利用当前一个普遍存在的问题:信息超载。当分析人员或自动防御系统处理堆积如山的信息时,为了效率他们有时会忽略一些错误的文件,因为它们看起来像是良性的。在此行动中,如果目标环境允许,文件会下载一个脚本来修复“丢失”的头文件,继而运行完整的文件。

? ? ? ?虽然此项行动中运用的多阶段规避技术只是一个例外,在当前并没有形成趋势,但是对此手段的大肆运用可能导致毁灭性的结果。为了防范类似的攻击,明智的做法是将分析师的经验和自动化分析相结合。

细节

? ? ? ?Cofense Intelligence最近注意到了一场攻击行动,攻击者运用了一个看似“损坏”的可执行文件来躲过防御系统的检测,并且该文件能在目标环境中完全武器化。粗略的分析表明,可执行文件缺少了正确的“文件头”,由于缺少文件头,分析师很有可能就简单地将威胁行为者的手段视为低级错误而不予理睬。事实上,攻击者设计的初衷就是如此,并让文件通过脚本下载来修复“文件头”,再对完整的可执行文件进行执行(前提是满足托管环境中所需条件)。

文件头

? ? ? ?文件头本质上是帮助操作系统确定如何解释文件的内容,可以指示几个因素,例如文件是存档文件还是可执行文件。大多数Windows可执行文件都以字符MZ开头,这个MZ头几乎总是存在的,即使在可执行文件被加壳、混淆或嵌入时也是如此。可执行文件的十六进制内容和MZ头,如图1所示。

一次险些让分析师和防御机制都失效的“无头文件”攻击

????????????????????????????????????????????????????图1:可执行文件的MZ文件头的十六进制视图

? ? ? ?如果该头文件不存在,则可执行文件将无法执行。一些分析人员、自动分析系统或是可执行提取程序将忽略任何没有头信息的文件,并认为文件已遭到破坏。图2中显示了图1中相同可执行文件的示例,但缺少MZ标头。

一次险些让分析师和防御机制都失效的“无头文件”攻击

????????????????????????????????????????????????????????????????图2:缺少MZ标头的图1文件

? ? ? ?图1中的可执行文件在没有MZ头的情况下无法运行。相反,要使图2中的可执行文件运行,只需要在二进制文件的顶部添加“MZ”即可。

创建可执行文件流程

? ? ? ?在Cofense Intelligence观察到的攻击行动中,恶意文档将植入一个嵌入式对象,并将其视为部分可执行文件,文件头如图2所示。由于此可执行文件没有MZ标头,因此VirusTotal上的防病毒引擎检测到的检出率为2/58。这也意味着,分析人员如果将其作为可执行文件运行的话将不会成功,他们可能会认为此文件已被破坏——理论上来说这种逻辑是没错的。一旦部分可执行文件植入成功,恶意文档就会利用CVE-2017-11882(一个Office远程代码执行漏洞,出现在公式编辑器中)下载并执行.hta文件的内容,如图3所示。

一次险些让分析师和防御机制都失效的“无头文件”攻击

????????????????????????????????????????????图3:下载的.hta文件的内容

? ? ? ?此脚本有四个步骤。第一步是创建一个文件“~F9.TMP”,内容为“MZ”:

一次险些让分析师和防御机制都失效的“无头文件”攻击

????????????????????????????????????????????????????????????????图4:创建可执行文件的第一步

? ? ? ?第二步将新文件(“MZ”)的内容添加到名为“~AFER125419.TMP”的文件的开头。文件“~AFER125419.TMP”是原始可执行文件中嵌入对象的名称:

一次险些让分析师和防御机制都失效的“无头文件”攻击

????????????????????????????????????????????????????????????图5:创建可执行文件的第二步

? ? ? ?添加“MZ”标头后,新文件与图1所示的文件相同。虽然文件保留.TMP扩展名,但仍然可以从命令行以可执行文一次险些让分析师和防御机制都失效的“无头文件”攻击

????????????????????????????????????????????????????????????????图6:创建可执行文件的第三步

? ? ? ?在最后一步中,此二进制文件被复制到Windows“Startup”文件夹,并被重命名为可执行文件,并确保它将在下一次计算机启动时运行。此举提供了持久性。

一次险些让分析师和防御机制都失效的“无头文件”攻击

????????????????????????????????????????图7:创建可执行文件的第四步

后续

? ? ? ?本文中的恶意文档实际上是由反病毒公司检测到的,这主要是因为它使用了一个最小混淆的方程编辑器漏洞和一个嵌入的对象。当恶意文件刚植入磁盘时,VirusTotal对可执行对象的检出率只有2/58,而通过添加“MZ标头”重塑可执行对象后,检测比率会跳到40/71,这的确能表明MZ标头的缺失会使大部分分析人员和自动化系统感染迷惑。而“二进制文件只有在经过下载的脚本修改之后才能作为可执行文件运行”,这一信息在几个层面上造成了分析的干扰:

? ? ? ?首先,计算机必须能够访问互联网,这可以防止二进制文件在某些沙箱和分析环境中运行。因为这些环境默认情况下是不具有Internet访问权限的。而对此二进制文件进行的任何手动静态分析都会让其“被破坏”,从而增加了该文件被忽略的可能性。

? ? ? ?为了进行进一步的分析,脚本需是可用的。如果脚本下载源被攻击者删除或其他原因而不可用,则二进制文件永远不会成为可执行文件,并且不太可能被检测到。

最后,如果脚本是单独下载并运行的,它将创建两个2字节的文件,并显示一条错误消息,进一步让分析人员加深它就是一个糟糕的恶意软件的印象。

不容忽视的问题——信息超载

? ? ? ?信息超载对任何企业来说都是一个不容小觑的问题。为了能够快速处理和确定信息的优先级,分析人员和技术防御人员有时会忽略那些运行不了的“损毁”文件。哪怕这些文件能够确认是一种威胁,分析人员往往也会被迫优先考虑破坏性更明显的恶意软件,而不是想着怎么修复一个“损毁”样本。而且,即使修复了“损毁”样本,往往也只有满足一定标准时恶意文档才能有效。这种为了逃避检测而使用的多级执行并不常见,但同样具有很高的风险。为了保护自己免受类似的威胁,组织机构需要在预防程序和培训上做一定的投入,将人工经验和自动防御程序的分析相结合来发现此项威胁。

附录

表1.文件IoC:

一次险些让分析师和防御机制都失效的“无头文件”攻击

?表2.网络IoC:

一次险些让分析师和防御机制都失效的“无头文件”攻击


指导单位
广东省公安厅网络警察总队 广东省信息安全等级保护协调小组办公室