繁体   English   中英

DLL预加载攻击。 kernel32.dll从应用程序目录加载系统库

[英]DLL preloading attack. kernel32.dll loads system libraries from application directory

似乎是kernel32.dll并未使用其加载的某些DLL的完全限定路径,这就是为什么可以从应用程序目录(应用程序加载目录)加载它们的原因。 例如,这些DLL是:fltlib.dll,version.dll,dbghelp.dll

这确实很危险,这是一个安全问题,因为应用程序无法控制此加载。 不支持延迟加载Kernel32.dll,因此我们不能使用SetDefaultDllDirectories(LOAD_LIBRARY_SEARCH_SYSTEM32),因为所有操作都发生在用户代码之前! SetDllDirectory(“”)也无用,而且它仅排除当前目录,不排除应用程序目录。 CWDIllegalInDllSearch没有帮助,因为它也仅排除当前目录,而不排除应用程序目录。

因此,此信息:

  1. https://msdn.microsoft.com/zh-cn/library/windows/desktop/ff919712%28v=vs.85%29.aspx

  2. http://blogs.technet.com/b/srd/archive/2010/08/23/more-information-about-dll-preloading-remote-attack-vector.aspx

是无聊! 它没有给出任何实践答案,如何保护应用程序免受这种DLL预加载攻击。

当然,您可以说所有程序都在“ Program Files”目录中,并且只有管理员可以写入这些目录。 但是,并非所有应用程序都在“程序文件”目录中。 此外,所有人都知道用户经常拥有管理员帐户,这就是为什么将这些恶意软件DLL之一静默安装到某个应用程序的目录并获得对任何应用程序的静默控制非常简单的原因,因为该恶意软件DLL可以模拟( DLL)所有系统API功能(从真正的DLL到应用程序),因此应用程序永远不会知道它使用了恶意软件DLL! 除了这种方式,恶意软件DLL可以绕过防火墙! 例如,如果您将一些恶意软件DLL复制到浏览器目录(可以是Internet Explorer,FireFox,Chrome或其他任何文件),则某些恶意软件代码将充当浏览器,并且在防火墙设置中已经有允许规则,通常到端口80,443,53的传出连接。 这确实是一个潜在的漏洞!

当然,可以进行加载后检查,如果发现此类恶意软件DLL,则将其卸载并删除。 但这是一个错误的决定,因为如果恶意软件DLL已经加载到应用程序地址空间中,它就可以执行所需的任何操作,这就是为什么在加载后将其卸载和删除可能毫无用处!

这些DLL在这里不存在: HKEY_LOCAL_MACHINE \\ SYSTEM \\ CurrentControlSet \\ Control \\ Session Manager \\ KnownDLLs但是对于最终用户来说,建议不要将它们添加到此注册表项中。 此外,它们可以是多少? 我不知道。

决策:仅禁止从系统路径以外的其他路径(带有%windir%前缀)加载系统DLL。 因此,只需启用从它们所在的路径(%windir%\\ system32,%windir%\\ syswow64,%windir%\\ winsxs等)加载系统DLL。 真正奇怪的是,为什么主系统库(例如kernel32.dll)从应用程序目录加载它使用的系统库,而根据定义,系统目录是无法使用的! 所有系统DLL必须仅从具有前缀%windir%的路径或某些其他系统路径中加载,而不是从应用程序目录路径中加载,而不是从当前目录路径中加载,甚至不从PATH环境变量中列出的路径中加载。

重现步骤:第一种方式(简单,仅查看加载的DLL的路径)。 1.将以下DLL中的任何一个:fltlib.dll,version.dll,dbghelp.dll放入任何应用程序的应用程序目录(Internet Explorer或Windows Live Mail或其他任何文件)2.查看这些加载的DLL的路径是什么

第二种方式。 1.使用以下名称创建自己的DLL:fltlib.dll,version.dll,dbghelp.dll,然后将自己的代码添加到DLL_PROCESS_ATTACH中。这非常简单。 如果应用程序将从这些DLL中调用某些函数,则您可以模拟真实的API函数并执行一些代码! 2.将这些DLL中的任何一个放入任何应用程序的应用程序目录中(Internet Explorer或Windows Live Mail或其他任何文件)3.看看会发生什么)

我可以举一个这样的DLL的例子。 是工作! 我只是简单地显示一些消息,而不是一些恶意软件代码。

如何使Microsoft解决此问题?

我在这里尝试过: сonnect.microsoft.com/ VisualStudio / feedback / details / 1139089但是,沉默...

如果他们可以写入您的应用程序目录,则说明他们已经拥有您的系统。 当他们仅覆盖主应用程序的恶意版本时,为什么还要担心他们编写dbghelp.dll的恶意版本。

换句话说,如果您授予某人一定程度的控制权,那么他们可以使用更简单的方法来进行恶意操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM