简单的活着

IPT for enhanced analysis

Posted on By Mista Cai

Using IPT for enhanced analysis


blog

这篇博文概述了英特尔新的处理器功能PT,并描述了它如何应用于增强第三代威胁检测技术。

博文概述了将PT集成到VMRay Analyzer中,以识别和触发恶意软件的隐藏功能。 VMRay还可以利用它来有效检测代码重用攻击,并无缝地重建相关的控制流。 由于处理器跟踪允许回顾过去,这会直接导致我们利用漏洞。

Introduction to IPT

英特尔新推出的第六代处理器系列(以前称为Skylake)具有称为PT的新硬件功能,可用于有效收集运行时分支信息。

乍一看,它类似于现有技术,如最后分支记录(LBR)和分支跟踪消息(BTM)。但是,就可以记录的跟踪信息的类型和数量而言,PT更快,更灵活。虽然LBR也很快,但它只允许存储有关最新(最多)32个分支的信息。因此,当涉及到跨越多个函数的广泛控制流的重建时,其适用性受到限制。另一方面,BTM对可记录的分支数量没有实际限制,但这是以对整个系统产生巨大性能影响为代价的。

PT对分支存储没有大小限制并且快速记录消除。

  • 它不是将所有数据写入虚拟内存,而是直接在物理内存中记录跟踪信息。这可以保持缓存清洁并避免TLB污染。
  • 另外,使用基于Packet的输出方案,大大减少了所需的存储器带宽。
  • 不是为每个采用的分支存储完整的源地址和目的地地址,而是仅捕获完全重建控制流所必需的最小所需信息。
  • 虽然这需要额外的解码器和分解能力来解释记录的数据,但这使得该方法在性能和存储器消耗方面非常有效。
  • 英特尔提供了库libipt,其中包含使用该技术的参考解码器实现。

一旦启用跟踪,处理器就会记录当前指令指针和处理器模式(16,32,64位模式),以通知解码器有关起始点的信息。之后,只有在解码器重建实际控制流时需要才会记录其他跟踪信息:

  • 如果遇到条件分支,则会记录一个位,指示是否采用了分支,
  • 在间接分支的情况下,存储完整的目标地址,
  • 在中断或异常的情况下,存储源和目标地址,
  • 如果切换处理器模式,则再次记录当前指令指针以及有关新处理器模式的信息。

除了这些数据,PT可以以不同的方式配置,以记录更多的数据,如有关代码执行的性能信息。但是,就我们的目的而言,这还不相关。我们可以参考英特尔文档以获取更多信息。

通过基于CR3的当前值,特权级别或当前存储区域进行过滤来进一步减少收集的数据量,甚至可以降低已经很小的性能影响。还必须通过设置物理地址表来指定CPU应如何以及在何处存储记录的分支数据。每个表条目定义相应输出存储区的位置和大小。每个表中的最后一个条目指定下一个表的位置。只要表中定义的所有区域都已填满,处理器就会自动切换到下一个表。由于表可以指向自身,因此也可以使用圆形输出区域。

增强第三代动态恶意软件分析

VMRay Analyzer是基于独特的hypervisor-based的第三代威胁检测技术。 简而言之,在虚拟化环境中引爆任意可执行文件或文档,并且在外部(hypervisor)完全监视其执行。 无需修改分析环境中的任何单个位,分析的软件几乎不可能检测和规避分析过程。

使用案例:识别和触发休眠函数

在分析期间,hypervisor拦截受监视的应用程序与系统的任何其他部分之间的单独交互。例如,拦截所有API或直接系统调用,并记录它们的参数和返回值。借助PT获得的跟踪信息,可以大大增强该分析数据。由于可以从虚拟机管理程序完全配置PT,因此分析的恶意软件样本和客户机操作系统本身都不知道此跟踪。

但是,恶意软件可能依赖于某些环境条件,并且仅在分析期间可能未提供的某些情况下执行相关代码路径。例如,它可能仅在星期三或东欧的机器上执行。

PT可用于以非常有效的方式识别这种休眠功能:通过将记录的跟踪信息与内存中的(解包和反混淆)二进制文件的静态反汇编相结合,我们能够重建精确的控制流。使用该数据,我们找到代码的每个未执行部分并识别相应的条件检查。通过利用我们的符号执行引擎,我们能够确定之前调用的相应API的相关输出值,以便将控制流导航到相关代码。有了这些信息,我们重新执行示例,并从虚拟机hypervisor补丁中获取相关的API结果,以强制执行休眠函数。

使用案例:识别和重建代码重用攻击

将PT集成到VMRay Analyzer中的另一个强大用例是有效识别ROP(和类似的代码重用)攻击。它不仅提供识别,而且还允许重建精确的控制流,从而导致被利用的漏洞。为此,我们利用循环缓冲区,该缓冲区包含每次API调用之前最新执行步骤的分支跟踪信息。每次执行通常涉及代码重用攻击的函数时,我们都会验证记录的跟踪信息并检查调用的来源。

作为有效的启发式算法,我们寻找以自由控制流指令结束的异常大量的短代码序列,例如返回或跳转寄存器。在这种情况下,持续的尝试漏洞利用很有可能。攻击的进一步证据是“违反”由CPU分支预测单元维护的内部调用栈的返回指令。幸运的是,这些预测缺失也存储在处理器生成的跟踪信息中。

关于相关技术的有趣读物可以在Georg Wicherski的Sandy Bridge的Taming ROP中找到。所描述的方法使用性能计数器来进行分支错误预测以检测ROP攻击。但是,它只能用于检测正在进行的攻击。它无法提供有关特定控制流和已被利用的漏洞的任何信息。

结论

分支跟踪是一种用于控制流重建的强大方法,因此可用于增强恶意软件和利用分析。遗憾的是,所有运行时监控都会影响系统性能,从而影响动态分析的有效性。在过去,已经存在特殊的处理器支持,用于跟踪的LBR和BTM。但是它们的局限性和性能缺陷使它们对恶意软件分析不切实际。英特尔新的PT功能可用于显着增强第三代威胁检测技术。

  • 首先,它在恶意软件分析期间提供了对休眠函数的有效识别。通过将其与符号执行引擎相结合以及管理程序透明地操作API和系统调用结果的能力,它是触发隐藏功能的有效解决方案。
  • 其次,它是一种检测正在进行的代码重用攻击的强大方法,并允许精确的控制流重建,从而导致被利用的漏洞。