当任何进程(包括恶意软件)都可以使用 VirtualProtect 时,它的意义何在?

Posted

技术标签:

【中文标题】当任何进程(包括恶意软件)都可以使用 VirtualProtect 时,它的意义何在?【英文标题】:What is the point of VirtualProtect when any process, including malware, can use it? 【发布时间】:2015-05-04 14:06:43 【问题描述】:

我了解VirtualProtect 函数毫无疑问地更改了内存中页面的权限。当任何正在运行的进程都可以使用它时,这肯定会没有直接的目的吗?

例如,有人可以轻松编写一段恶意软件,该恶意软件使用VirtualProtectEx 函数来绕过指令并造成严重破坏。另一方面,用户可能有正当理由允许进程修改内存(即游戏作弊)。

【问题讨论】:

假设攻击者可以在他们正在攻击的系统上运行代码,VirtualProtect 试图阻止。 Windows 在没有恶意软件运行时受到保护,并且没有允许恶意软件运行的漏洞。如果我们从“恶意软件已经在运行”的前提出发,那么我们很容易得出“恶意软件会造成严重破坏”的结论。但前提是错误的。 【参考方案1】:

有人可以轻松编写该恶意软件,但他们如何让目标执行它?

VirtualProtect 允许我有选择地使内存可执行。这意味着我可以将存储不受信任数据的缓冲区标记为不可执行,并且我拥有的允许不受信任的用户修改我的函数的返回地址的安全漏洞无法跳转到该缓冲区并在那里执行代码,从而停止攻击者自己执行 VirtualProtect。

它还允许我将内存设为只读。这意味着我可以将不受信任缓冲区旁边的区域标记为只读,并且缓冲区溢出无法覆盖更多重要数据。因此,我的应用程序中没有远程代码,攻击者没有 VirtualProtect。

一旦攻击者以某种方式获得了对系统的访问权限,他就可以使用 VirtualProtect 移除对处于相同安全级别的进程的保护,但此时你已经失去了。

【讨论】:

谢谢,非常有趣。我不明白为什么其他人认为我的问题问得不好。哦,好吧! @Mgetz 这个问题也适用于其他领域,例如注入游戏作弊。用户可能想要修改游戏的内存,但游戏本身并不想作弊。我想说的是,在类似情况下,安全性对用户来说可能不是问题。 @Mhmk 作弊预防不在 VirtualProtect 的范围内。事实上,什么都不是,因为完全防止作弊的唯一方法是删除对机器的物理访问。现在的游戏尝试检测作弊行为,然后据此采取行动(通常是暂停游戏帐户)。 @RickHenderson 可能是这样,但与“为什么 VirtualProtect 本身不是一个安全漏洞?”相比,这是一个非常不同、更广泛的问题【参考方案2】:

我使用VirtualProtect 来帮助追踪不正确的内存访问。

我分配了一个内存页面,对其进行了初始化,然后将其标记为不可读/不可写,然后我们的巨型单体程序中的另一个组件不正确地访问了我的指针。一旦该组件尝试写入不可写页面,我们就会看到访问冲突,并且我们知道违规方是谁。

(在此之前,我们只知道内存被覆盖了......但我们不知道是哪个组件在做这件事)。

【讨论】:

【参考方案3】:

主要是为了防止攻击并允许 JIT 等。如果没有VirtualProtect,您将无法将页面标记为不可写和可执行,反之亦然。也就是说,如果系统上已经存在恶意软件,那么问题就是already past the airtight door。在理想情况下,进程还可以使用 ACL 来防止另一个进程检查其内存或更改其内存保护。这就是安全播放的工作原理。

如果系统上已经存在恶意软件,那么您所做的任何事情都不会起作用,因为恶意软件可能处于内核模式。在这种情况下,它已经可以为所欲为。

【讨论】:

以上是关于当任何进程(包括恶意软件)都可以使用 VirtualProtect 时,它的意义何在?的主要内容,如果未能解决你的问题,请参考以下文章

常见的网络安全漏洞都有哪些

HTTPS与在线安全

微软推出免费的Linux取证和Rootkit恶意软件检测服务

网络攻击的类型

探测电磁波就能揪出恶意软件,网友:搁这给电脑把脉呢?

这几招技术,病毒木马经常用!