dll劫持和dll注入有什么区别

信息安全 视窗 恶意软件
2021-09-08 18:36:08

我想知道 DLL Hijacking 和 DLL Injection 是相同的还是不同的。我知道一些恶意软件使用它来做恶意的事情。

3个回答

DLL劫持是指您滥用库搜索顺序以在进程中获得执行。能够写入可执行文件所在的目录使恶意行为者能够删除与可执行文件将通过 LoadLibrary 请求的名称相同的 dll。当可执行文件尝试加载预期的库时,它们将改为加载恶意库。

  • DLL 劫持的合法用途可能是向不直接支持插件的第三方工具添加功能。

  • MSDN 在LoadLibrary条目中解释了更详细的细节。

  • 另请参阅此SO 问题

另一方面,DLL注入是操作正在运行的进程以加载所需库的地方。MSDN 通过SetWindowsHookEx详细介绍了一种无需直接接触该过程的方法另一种方法是打开一个进程,将所需的库名称写入其内存空间,然后在进程中创建一个线程以使用该名称作为缓冲区调用 LoadLibrary。第二种方式包含在SO Question

Windows 按以下顺序搜索 dll:

  1. 它检查请求的 dll 是否在 KnownDlls(在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs 中指定的 dll 列表)中,如果不是
  2. 它遵循 MSDN here定义的 Microsoft dll 搜索顺序。

Dll Hijacking:也称为加载顺序劫持,仅影响不在系统目录中尝试从系统目录访问 dll 且不在 KnownDlls 列表中的可执行文件,它通过创建一个同名的恶意 dll 来工作请求的 dll 并将其放在第一位、第二位或第三位 windows 在 dll 搜索顺序中搜索,因此当调用 LoadLibrary 时,它将加载恶意库而不是实际库。

Dll Injection:恶意软件启动器通过在进程内存中写入其名称,然后创建一个加载恶意库的线程来强制受害者进程加载恶意库。

还有直接Dll注入方法,恶意软件作者不需要将恶意代码写入单独的dll然后将其加载到受害者进程中,而是使用VirtualAllocEx和WriteProcessMemory将代码直接写入受害者进程的内存空间两次。

我将解释 DLL 劫持和 DLL 注入。

  • DLL 劫持是攻击者在您的系统上运行不需要的代码的一种方式。这意味着,如果攻击者可以在您的系统上获取文件/程序(通过社会工程、远程控制等),则可以在用户运行易受 DLL 劫持的应用程序时执行该文件。
  • DLL 注入是一种通过强制加载动态链接库来在另一个进程的地址空间内运行代码的方法。外部程序经常使用 DLL 注入来操纵另一个程序的性能,其创建者没有预料到或不打算这样做。