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

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

最佳答案

恕我直言,您有2个选择:


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


避免攻击的恶意部分

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


堆被喷洒,例如通过加载实际包含代码的图片为浏览器
使用了漏洞利用程序,导致不良行为,使IP(指令指针)指向已喷射堆的某个位置


我认为您想在漏洞真正造成危害之前检测堆喷涂阶段。

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

当然,这需要对漏洞利用有深刻的理解。您可能需要汇编语言知识才能做到这一点。如果您需要数百个示例,那么您可能想对许多漏洞利用都这样做。

另一方面,如果您在汇编程序级别理解这一点,则可以从一次成功的攻击中得出几个不同的示例。您可以改为启动记事本,可以插入或多或少的nop操作,可以使用COM对象或ActiveX等。它可以提供许多无害的示例。

自动化虚拟机

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

这个过程甚至可以实现自动化,即您可以为您编写一个脚本


将虚拟机重置为已知状态
将文件复制到VM
在VM(例如浏览器)上执行程式
在VM中运行远程调试器
...


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


启动调试器
编写调试器脚本(例如使用PyKD)
在有限的时间内运行所有内容,例如30秒
收集结果(故障转储或类似结果)
关闭虚拟机


请注意,某些病毒可能能够从VM中爆发,例如通过您可以访问环-1的SME错误。

关于machine-learning - 如何在虚拟机中运行堆喷涂分析,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47128703/

10-12 20:50