功能绕道包如何规避安全性

时间:2010-12-08 07:28:25

标签: detours windows-security

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

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

他们如何克服这个问题?

是否有人在企业生产环境中的任何应用程序中使用此类绕行程序包的经验?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

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