0

我正在查看一些使用名为 DetourXS 的函数 detour 包的代码。我的应用程序针对 Microsoft Server 操作系统。Microsoft Research 也有一个 Detours 包,他们有一篇关于它如何工作的文章。他们修补加载到内存中的机器代码,并将无条件跳转到新注入的代码中的代码插入。

如果此代码通过在运行时修改机器代码来工作,则它们应该面临操作系统的安全限制。这将是操作系统上的一个严重安全漏洞,因为我可以修改任何关键的 DLL,如 kernel32 来做任何我想做的事情。我的理解是,如果用户进程试图修改已加载到内存中的 dll 的代码,它应该被操作系统停止。Widows Server OS 中是否有启用/禁用此检查的设置?

他们如何克服这一点?

有没有人有在企业生产环境中的任何应用程序中使用这种 detour 包的经验?

4

2 回答 2

1

尽管它的名字,kernel32.dll实际上不是内核;它包含 Win32 API 函数的入口点,这些函数实现 Win32 对 NT 系统调用的接口。

此外,Windows(与任何现代操作系统一样)支持写时复制,因此如果您使用绕道来修补共享 DLL kernel32.dll,操作系统将首先为您的进程制作一个私有副本并对其进行修补。NT 内核本身是完全安全的。

于 2011-03-04T00:29:56.267 回答
1

第一个重要的事情是,你可以通过弯路修改你自己流程的指令。在你的进程中 - 你可以做任何你想做的事,你甚至不必绕道任何事情,从操作系统的角度来看用户空间代码(例如,你的 DLL 中的代码和加载到你的进程中的系统 kernel32.dll 中的代码)正是从安全的角度来看也是如此。原因很简单——入侵操作系统的安全性与在用户空间中更改进程的某些代码不同。操作系统通过不给您的进程太多权力来保护自己(除非您以管理员身份运行)。出于安全目的,如何修改另一个进程的代码(以实现其权限或有趣的数据,如密码)更有趣,但这是一个不同讨论的主题。

其次,detouring被认为是一种实现热补丁的方式,即即时修补关键系统服务,无需重新启动。我不知道微软当前是否使用/支持它(根据谷歌它是),但标准 prolog 的长度为 5 个字节并非偶然(是的,它非常适合放置您的jmp指令)。

于 2011-03-04T00:26:36.107 回答