HKML\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs
KnownDLL 的用途是什么?(为了更快地加载某些 Dll?)
如果我有管理员令牌,我可以控制注册表值。
难道没有安全漏洞吗?
微软为何支持该功能?
KnownDLLs 唯一做的就是防止从应用程序文件夹中隐式加载 DLL。
出于安全原因,“KnownDll”唯一有效的文件夹是 c:\Windows\System32(或本地化的等效文件夹) - 该文件夹在搜索列表中位于进程文件夹之后的第二个文件夹。
本质上,它可以防止从应用程序文件夹加载系统 dll 的恶意副本(例如 kernel32.dll)。
它不会阻止应用程序使用完全限定路径加载 dll。它不会停止对路径的长时间搜索或在路径中发现系统 dll - 无论如何,总是在这些位置之前搜索 system32。
这允许忽略正常的DLL搜索路径,并加载指定的版本。
虽然本身不是安全漏洞(因为您已经需要拥有管理员权限才能更改该值),但可以通过流氓 DLL 重定向调用。
这是为了提高性能而添加的功能,因为无需扫描几个可能很大的目录来查找 DLL。
这是 Raymond Chen 所说的
位于这个密闭舱口的另一边的一个例子。
阻止安全漏洞。
通过将win32k.sys
声明为已知 dll,流氓恶意软件无法将其自己的
win32k.sys
放入您的应用程序文件夹中并诱骗您运行攻击者的代码。所有已知的 dll 只会从其正确的、受保护的位置加载。