windows系统权限工具(利用弱文件夹权限提升权限)

无论是通过锁定设置,阻止应用程序,禁用Windows服务,确保用户权限保持在最低限度等等,安全机器始终是持续进行的过程。如果我们不这样做,那么用户最终会安装非标准的软件,对系统进行更改,一旦遭到入侵就会造成更多的破坏等等。这篇文章是关于通过使用dll劫持漏洞导致特权提升的文件夹权限的弱点在Windows服务中。

什么是DLL劫持?

几年前,有相当多的炒作能够从当前工作目录远程或本地加载恶意DLL。微软文章[1]清楚地解释了它

“当应用程序动态加载动态链接库而未指定完全限定的路径名时,Windows会尝试通过以特定顺序搜索定义明确的目录集来查找DLL。如果攻击者获得了对DLL搜索路径上某个目录的控制权,它可以在该目录中放置DLL的恶意副本。这有时称为DLL预加载攻击或二元种植攻击。如果系统在搜索受损目录之前未找到合法的DLL副本,则会加载恶意DLL。如果应用程序以管理员权限运行,则攻击者可能会在本地权限提升中取得成功。“

因此,如果应用程序仅通过名称加载DLL,则会通过下面的搜索顺序(32位操作系统)来查找库

  1. 加载应用程序的目录

  2. 32位系统目录(C:\ Windows \ System32)

  3. 16位系统目录(C:\ Windows \ System)

  4. Windows目录(C:\ Windows)

  5. 当前工作目录(CWD)

  6. PATH环境变量中的目录(系统然后是用户)

我们在利用什么?

这里的目标是在机器上获得本地管理权限。为了达到这个目的,我们需要三件事来完成这项工作

  • Windows DLL搜索顺序

  • DLL劫持漏洞

  • 弱文件夹权限

Windows DLL搜索顺序

在Windows DLL搜索顺序中,路径环境变量的目录是以系统变量路径和用户变量路径开始的最后一次搜索。除非应用程序没有为其DLL使用完全限定的路径名,否则即使使用了某些缓解措施,它也会尝试通过搜索顺序查找DLL。

DLL劫持漏洞

找到DLL劫持漏洞的快速方法是启动Process Monitor,设置相关的过滤并执行一些操作。在这里,我们将利用Windows服务作为运行在SYSTEM特权上的大量服务,只需停止并启动服务并观察搜索模式即可。请记住,在SYSTEM下运行的服务不会搜索用户路径环境。在停止并启动服务后,发现了一些漏洞。

windows系统权限工具(利用弱文件夹权限提升权限)(1)

现在检查注册表以查看是否有任何服务dll被服务加载

windows系统权限工具(利用弱文件夹权限提升权限)(2)

我们可以将这些文件(svchost.exe和IKEEXT.DLL)复制到另一台机器上进行我们的静态分析。在IDA中加载后,只需搜索loadlibrary并跳转到调用将显示要加载的库。如果没有指定完全合格的路径,那么我们可能会很幸运。这里在IKEEXT.DLL LoadLibraryW将尝试加载“wlbsctrl.dll”

windows系统权限工具(利用弱文件夹权限提升权限)(3)

注意:并不总是像本例那样直截了当,因为被调用的dll可能使用完全限定的路径名,但在编译时与另一个dll链接,该dll将尝试在加载时加载此文件,这可能会因为在另一个文件夹或不可用。

最后,我们在系统上搜索库wlbsctrl.dll,看看它是否存在,如果有,请注意它的位置。

C:\> dir wlbsctrl.dll / s

在这种情况下,系统中不存在wlbsctrl.dll,因此它将通过整个搜索顺序。

弱文件夹权限

现在最重要的部分是“弱文件夹权限”。在根中创建新文件夹时,默认情况下它是可写入所有经过身份验证的用户的。在“NT AUTHORITY \ Authenticated用户:(I)(M)”被添加到其中M代表修改权限的文件夹。因此,任何安装在根上的应用程序都可能被非管理员用户篡改。如果二进制文件从此文件夹加载SYSTEM权限,则可能只是用您自己的二进制替换二进制文件。

当应用程序安装在根中并将其路径添加到系统路径环境时,它会变得很有趣。这现在为大量可能有DLL劫持漏洞的应用程序打开了攻击面。一种情况是软件被推到机器上,例如Marimba,Landesk等,它们使用运行系统特权的Windows服务来安装软件。由于它运行的系统权限软件被推送到诸如Perl,Python或Ruby之类的机器上,因此如果已经在软件包中设置了路径,并且默认情况下在根上安装了路径,它将添加到系统路径环境中。或者它可能是一个IT支持人员安装该软件与他们的管理员权限的用户。如果用户使用非管理员权限手动安装(如果可能),则可能会将其添加到用户路径环境中,然后将无法进行利用。我们可以使用icacls.exe来检查文件夹或文件夹属性安全选项卡的权限。

windows系统权限工具(利用弱文件夹权限提升权限)(4)

windows系统权限工具(利用弱文件夹权限提升权限)(5)

打开盒子

从我们以前的部分我们现在知道的是

  • 服务“IKE和AuthIP IPsec键控模块”加载服务DLL IKEEXT.DLL

  • IKEEXT.DLL将尝试加载wlbsctrl.dll

  • OS携带其搜索顺序来查找wlbsctrl.dll

  • 我们有一个可写文件夹C:\ Ruby200 \ bin,它位于搜索顺序中

我们现在要做的就是将我们的恶意制作的DLL wlbsctrl.dll放到C:\ Ruby200 \ bin中,重启机器,它将在SYSTEM权限下执行它的操作。请求Ruby,Perl等的用户可能是开发人员,并且无论如何都拥有权限,但是可能有其他软件安装在根目录中并添加到有限用户可能利用的系统路径中,并且这需要我们进行评估和在部署之前进行任何更改。

测试文件夹路径

我编写了一个简单的PowerShell脚本,您可以从这里下载这些脚本,以便快速检查易受攻击的路径文件夹。系统路径环境变量首先是用户路径环境变量。在管理员或非管理员用户的中等完整shell中运行它会得到相同的结果。

windows系统权限工具(利用弱文件夹权限提升权限)(6)

易受攻击的Windows服务

以下是Windows服务,这些服务被发现存在漏洞,可以在Windows 7(32/64)上被利用,

IKE和AuthIP IPsec键控模块(IKEEXT) - wlbsctrl.dll

Windows媒体中心接收器服务(ehRecvr) - ehETW.dll

Windows媒体中心计划程序服务(ehSched) - ehETW.dll

Windows媒体中心服务启动类型设置为手动且状态未启动,并且只会给我们提供网络服务权限,因此我无法看到它对于使用其特权有限的情况非常有用。但它可以通过某些计划任务暂时启动。

schtasks.exe / run / I / TN“\ Microsoft \ Windows \ Media Center \ mcupdate”

schtasks.exe / run / I / TN“\ Microsoft \ Windows \ Media Center \ MediaCenterRecoveryTask”

schtasks.exe / run / I / \ Microsoft \ Windows \ Media Center \ ActivateWindowsSearch“

对Windows XP的快速检查表明,这些服务非常脆弱

自动更新(wuauserv) - ifsproxy.dll

远程桌面帮助会话管理器(RDSessMgr) - SalemHook.dll

远程访问连接管理器(RasMan) - ipbootp.dll

Windows管理规范(winmgmt) - wbemcore.dll

其他可能安装的服务也很脆弱

音频服务(STacSV) - SFFXComm.dll SFCOM.DLL

英特尔(R)快速存储技术(IAStorDataMgrSvc) - DriverSim.dll

Juniper统一网络服务(JuniperAccessService) - dsLogService.dll

Encase企业代理 - SDDisk.dll

在Windows 8操作系统(64)的干净默认安装中找不到任何dll劫持漏洞,这是开始迁移到Windows 8的另一个很好的理由。

缓解

有许多缓解措施可以用来防止利用某些API,更改注册表设置,应用更新等来利用此漏洞。它开始让我们感到困惑,因为我们希望缓解这种情况,所以希望本节能够使它变得有点清晰。

CWDIllegalInDllSearch

此更新[2]当时引入了一个新的注册表项CWDIllegalInDllSearch,它允许用户控制DLL搜索路径算法。在完全打过补丁的Windows 7计算机上进行测试,此更新不再需要,因此它可能稍后会包含在某些安全更新中。一旦该补丁安装(如果适用),您将需要添加DWORD名称CWDIllegalInDllSearch与注册表项位置中的值

[HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Session Manager]

值数据可以是1,2或ffffffff。如果值名称CWDIllegalInDllSearch不存在或值数据为0,则机器仍然易受CWD攻击。请注意,值ffffffff可能会破坏某些应用程序。搜索顺序是相同的,但是这次如果恶意DLL位于当前工作目录中,库未加载。

  1. 加载应用程序的目录

  2. 32位系统目录(C:\ Windows \ System32)

  3. 16位系统目录(C:\ Windows \ System)

  4. Windows目录(C:\ Windows)

  5. 当前工作目录(CWD)[dlls not loaded]

  6. PATH环境变量中的目录(系统然后是用户)

以前我对CWDIllegalInDllSearch值进行了测试,您可以在我早期的博客文章中查看结果。

SetDllDirectory

在加载DLL时,此函数[3]从搜索顺序中删除当前工作目录(CWD)。例如,调用SetDllDirectory(“C:\\ program files \\ MyApp \\”)后的DLL搜索顺序变为:

  1. 加载应用程序的目录

  2. C:\ program files \ MyApp \ [新增]

  3. 32位系统目录(C:\ Windows \ System32)

  4. 16位系统目录(C:\ Windows \ System)

  5. Windows目录(C:\ Windows)

  6. 当前工作目录(CWD)[删除]

  7. PATH环境变量中的目录(系统然后是用户)

将空字符串传递给SetDllDirectory(“”),将从搜索顺序中删除当前工作目录(CWD)

  1. 加载应用程序的目录

  2. 32位系统目录(C:\ Windows \ System32)

  3. 16位系统目录(C:\ Windows \ System)

  4. Windows目录(C:\ Windows)

  5. 当前工作目录(CWD)[删除]

  6. PATH环境变量中的目录(系统然后是用户)

如果此参数为NULL,则该函数将恢复默认搜索顺序。

SafeDllSearchMode

安全DLL搜索模式[4]默认启用。要禁用此功能,我们可以创建一个值为0的DWORD名称SafeDllSearchMode

[HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Session Manager]

如果启用SafeDllSearchMode,则搜索顺序如下所示:

  1. 加载应用程序的目录

  2. 32位系统目录(C:\ Windows \ System32)

  3. 16位系统目录(C:\ Windows \ System)

  4. Windows目录(C:\ Windows)

  5. 当前工作目录(CWD)

  6. PATH环境变量中的目录(系统然后是用户)

如果SafeDllSearchMode被禁用,搜索顺序如下:

  1. 加载应用程序的目录

  2. 当前工作目录(CWD)[向上移动列表]

  3. 32位系统目录(C:\ Windows \ System32)

  4. 16位系统目录(C:\ Windows \ System)

  5. Windows目录(C:\ Windows)

  6. PATH环境变量中的目录(系统然后是用户)

调用SetDllDirectory(“”)或SetDllDirectory(“C:\\ program files \\ MyApp \\”)会禁用SafeDllSearchMode,并使用SetDllDirectory描述的搜索顺序。

LoadLibraryEx函数[5]采用另一个参数,其中可以设置一个标志来更改搜索顺序,但我没有轮到测试它。

开发人员的缓解措施

对于软件开发人员来说,他们可以采取许多措施

  • 使用SetEnvironmentVariable(TEXT(“PATH”),NULL)从其搜索顺序中删除路径环境变量的API

  • 将默认安装文件夹更改为C:\ Program Files

  • 加载DLL时使用完全限定路径,即LoadLibrary(“C:\\ program files \\ MyApp \\ mylibrary.dll”);

  • 使用SetDllDirectory(“”)API从搜索顺序中删除当前工作目录

针对IT专业人员的缓解措施

对于IT支持专业人员,还有一些可采取的措施

  • 通过部署工具(如Marimba,Landesk等)打包和部署软件或手动安装软件时,将安装文件夹更改为C:\ Program Files

  • 如果软件需要安装在根检查上,则没有需要SYSTEM权限的二进制文件

  • 如果需要SYSTEM权限,则更改该文件夹的ACL

  • 如果不需要,请从SYSTEM路径变量中删除路径条目

结论

这篇文章向我们展示了如何轻松提升特权。最终,解决方案很简单,只需确保所有软件都安装在C:\ Program Files文件夹中,然后固有文件夹就会更安全。恶意软件可以充分利用这一弱点,不仅可以获得系统权限,而且还可以自动加载恶意软件,从而更难确定其自动启动入口点。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页