天天看点

【技术好文】你需要知道的DLL劫持都在这里了DLL劫持加入社群

DLL劫持

概念

首先来理解DLL在Windows系统中的作用,DLL全称Dynamic Link Library,称为动态连接库,在Windows系统中,大多数程序并不是一个单独的可执行文件,而是有一些单独的存放动态链接库在系统中,当需要某些功能时,通过DLL执行相应的功能,即DLL调用。

那么既然程序执行某些功能时,可能会通过DLL调用,从利用角度来看,如果替换了这个DLL文件,或者导出了原DLL的导出函数并恶意构造,在原程序调用正常DLL前调用了我们预先构造好的恶意DLL,那么就达到了劫持的效果。

所以手法可以有多种,比如替换原DLL文件,黑DLL放置最先路径,DLL转发等。

【技术好文】你需要知道的DLL劫持都在这里了DLL劫持加入社群

DLL搜索顺序

  1. 进程对应的应用程序所在目录;
  2. 当前目录(Current Directory);
  3. 系统目录(通过 GetSystemDirectory 获取);
  4. 16 位的系统目录(即 Windows 目录中的 System 目录);
  5. Windows目录(通过 GetWindowsDirectory 获取);
  6. PATH环境变量中的各个目录;

例如:对于文件系统,如Doc文档打开会被应用程序Office打开,而Office运行的时候会加载系统的一个DLL文件,如果我们用恶意的DLL来替换系统的DLL文件,就是将DLL和Doc文档放在一起,运行的时候就会在当前目录中找到DLL,从而优先系统目录下的DLL而被执行。

更详细的参考文档可以在官方文档中查看:

https://docs.microsoft.com/zh-cn/windows/win32/dlls/dynamic-link-library-search-order

防御思路

  1. 调用第三方DLL时,使用绝对路径
  2. 调用API SetDllDirectory()将当前目录从DLL加载顺序中移除
  3. 在开发阶段,就使用工具对系统进行测试

DLL劫持漏洞的检测软件

文末查看软件下载地址

  1. Ratter
  2. ChkDllHijack
  3. Process Explorer
  4. DLL Hijack Auditor

加入社群

继续阅读