如何在虚拟机中运行堆喷涂分析

时间:2017-11-06 02:00:22

标签: machine-learning neural-network virtual-machine windbg

在过去的几周里,我一直致力于一个项目,以检测对应用程序的堆喷射攻击。为此,我一直在开发一个二元分类器来辨别两者之间的差异。为了从应用程序堆中获取功能,我使用了WinDbg和PYKD的组合(更多信息在这里:https://labs.mwrinfosecurity.com/blog/heap-tracing-with-windbg-and-python/)。它通过运行应用程序并将其附加到我的python脚本来收集功能。

问题在于检测恶意功能。使用二进制分类器,我需要提供数百个恶意堆喷射攻击示例。问题是我通过实际运行程序来收集功能。如何在不伤害计算机的情况下执行此操作?我意识到我可以使用虚拟机,但我不想为每个恶意功能测试创建一个新的虚拟机,因为这太简单了。

1 个答案:

答案 0 :(得分:1)

恕我直言,你有两个选择:

  • 避免攻击的恶意部分
  • 自动化VM"创建"过程

避免攻击的恶意部分

我对堆喷射攻击的理解包括两个阶段:

  1. 喷洒堆,例如对于浏览器,通过加载实际包含代码的图片
  2. 使用了漏洞利用程序,导致出现意外行为,导致IP(指令指针)指向喷涂堆的某处
  3. 我认为您希望在漏洞实际造成伤害之前检测堆喷涂阶段。

    您可以采取现有攻击并以某种方式修改代码。启动计算器而不是邪恶的EXE。例如,website you linked上发布的JS代码似乎是无害的。它使用了大量的NOP和字符串CORELAN,它们似乎不会导致有效的汇编。

    当然,这需要深入了解漏洞利用。你可能需要汇编语言知识来做到这一点。如果你需要100个例子,你可能希望为许多漏洞利用这个。

    另一方面,如果您在汇编程序级别上理解这一点,则可以从1次成功攻击中获得几个不同的示例。你可以开始记事本,你可以插入更多或更少的nop操作,你可以使用COM对象或ActiveX等。它可能会给你许多无害的例子。

    自动化虚拟机

    虚拟机具有称为快照的功能。可以在VM运行时拍摄这样的快照,因此它可以非常快速地进入已知状态。

    这个过程甚至可以自动化,即你可以为你编写一个

    的脚本
    • 将VM重置为已知状态
    • 将文件复制到VM
    • 在VM上运行程序(例如浏览器)
    • 在VM中运行远程调试器
    • ...

    看看vSphere Automation SDK。由于您在主机上运行此脚本,因此还可以包括其他步骤,例如

    • 启动调试器
    • 脚本调试器(例如使用PyKD)
    • 在有限的时间内运行所有内容,例如30秒
    • 收集结果(崩溃转储或类似)
    • 关闭VM

    请注意,某些病毒可能会突破VM,例如:通过那个你可以访问ring -1的SME bug。