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

在过去的几周里,我一直在进行一个项目,旨在检测应用中的堆喷射攻击。为此,我开发了一个二元分类器来区分这两种情况。为了从应用程序的堆中获取特征,我使用了WinDbg和PYKD的组合(更多信息请见:https://labs.mwrinfosecurity.com/blog/heap-tracing-with-windbg-and-python/)。通过运行应用程序并将其附加到我的Python脚本中来收集特征。

问题在于检测恶意特征。使用二元分类器,我需要提供数百个恶意堆喷射攻击的例子。问题是我通过实际运行程序来收集特征。我如何在不损害我的计算机的情况下做到这一点?我意识到我可以使用虚拟机,但我不希望为每次测试恶意特征都创建一个新的虚拟机,因为这实在太繁琐了。


回答:

依我看,你有两个选择:

  • 避免攻击的恶意部分
  • 自动化虚拟机的“创建”过程

避免攻击的恶意部分

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

  1. 堆被喷射,例如通过加载实际上包含代码的图片来实现
  2. 使用一个漏洞利用,导致不希望的行为,使IP(指令指针)指向喷射的堆中的某个位置

我想你在漏洞利用实际造成损害之前就想检测到堆喷射阶段。

你可以拿一个现有的攻击并修改代码,例如,让它启动计算器而不是恶意的EXE。例如,你链接的网站上发布的JS代码似乎是无害的。它使用了大量的NOP和字符串CORELAN,这似乎不会产生有效的汇编代码。

当然,这需要对漏洞利用有深入的理解。你可能需要汇编语言知识来做到这一点。如果你需要数百个例子,你将需要对许多漏洞利用进行这样的操作。

另一方面,如果你在汇编级别上理解这一点,你可以从一个成功的攻击中推导出几个不同的例子。你可以启动记事本,你可以插入更多或更少的nop操作,你可以使用COM对象或ActiveX等。这可能会给你许多无害的例子。

自动化虚拟机

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

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

  • 将虚拟机重置到一个已知状态
  • 将文件复制到虚拟机中
  • 在虚拟机上运行程序(例如浏览器)
  • 在虚拟机中运行远程调试器

请查看vSphere Automation SDK。由于你在主机上运行这个脚本,你还可以包括其他步骤,例如

  • 启动调试器
  • 脚本化调试器(例如使用PyKD)
  • 运行一段有限的时间,例如30秒
  • 收集结果(崩溃转储或类似的东西)
  • 关闭虚拟机

请注意,一些病毒可能能够突破虚拟机,例如通过SME漏洞获得对环-1的访问权。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注