浅析黑猫勒索软件中的UAC绕过提权技术
downn 发表于 美国 二进制安全 854浏览 · 2024-07-26 09:17

UAC原理

UAC(User Account Control)简称用户帐户控制,是微软在Windows Vista以后的版本引入的一种安全机制。通过 UAC,任何需要管理员访问令牌权限执行的操作都必须提示用户同意(UAC弹窗),UAC 可以阻止未经授权的应用程序自动进行安装,并防止无意中更改系统设置。

UAC通过访问令牌来识别用户类型,当标准用户登录时,系统会生成一个访问令牌(只包含有限的权限);管理原用户登录时,系统会生成一个标准用户令牌和一个具有完全权限的管理员令牌。

启动UAC后,即使登录的是管理员账户,默认情况下也会使用标准用户来运行所有应用程序。当一个操作需要管理员权限时,UAC会弹出一个对话框请求用户许可。这样能够避免恶意软件自动获取管理员权限进行系统级操作。

BlackCat

BlackCat也称ALPHV,是一个勒索软件家族,首次出现于2021年。采用双重勒索模式,不仅涉及加密系统,还窃取受害者的敏感文件。它是一个用Rust编写的勒索软件,以命令行工具的形式出现,可以使用不同的参数运行。其主要功能之一就是能够绕过用户账户控制UAC提升权限。

UAC绕过和权限提升

BlackCat通过滥用 Microsoft COM(组件对象模型)和 CMSTP(连接管理器配置文件安装程序)来绕过 UAC。这一攻击涉及使用 COM 对象的 CMSTPLUA 接口来提升权限并执行恶意操作。

  • CMSTP是一个合法的命令行工具,用于安装和配置CMS文件,它可以执行任何命令(包括调用和注册COM对象)。
  • CMSTPLUA是一个系统组件,该组件被设计成可以在没有 UAC 提示的情况下提升权限。

这里将CLSID{3E5FC7F9-9A51-4367-9063-A120244FBEC7}(特殊的COM对象标识符)关联到CMSTPLUA接口上,之后BlackCat调用CoGetObject函数将自身注册成该CLSID以提升的权限执行程序。

完成权限提升后,BlackCat使用和之前相同的参数,在新线程中以提升的权限运行自身

使用CoUninitialize来反初始化COM库清理资源,但是反初始化并不会撤销已提升的权限。

之后,BlackCat会使用LookupPrivilegeValueW 函数来获取指定权限的本地标识符(LUID),将这些权限添加到进程的权限列表中,从而允许进程执行系统级操作。

然后使用AdjustTokenPriveleges函数授予自己执行系统级操作所需的权限。

其它COM接口ByPass UAC

ICMLuaUtil接口中的ShellExec方法也是一个常见的Bypass UAC的方法。ICMLuaUtil 接口是一个内部接口,可以用于执行和提升权限相关的操作,该接口包含一个ShellExec方法可以用于执行命令并创建进程。

shellExec原型:

HRESULT ShellExec(
    LPCWSTR lpFile,
    LPCWSTR lpParameters,
    LPCWSTR lpDirectory,
    ULONG fMask,
    INT nShowCmd
);

该技术需要使用CoCreateInstanceAsAdmin函数,该函数是一个常用于提升权限创建 COM 对象的函数。

HRESULT CoCreateInstanceAsAdmin(HWND hwnd, REFCLSID rclsid, REFIID riid, __out void ** ppv)
{
    BIND_OPTS3 bo;
    WCHAR  wszCLSID[50];
    WCHAR  wszMonikerName[300];

    StringFromGUID2(rclsid, wszCLSID, sizeof(wszCLSID)/sizeof(wszCLSID[0])); 
    HRESULT hr = StringCchPrintf(wszMonikerName, sizeof(wszMonikerName)/sizeof(wszMonikerName[0]), L"Elevation:Administrator!new:%s", wszCLSID);
    if (FAILED(hr))
        return hr;
    memset(&bo, 0, sizeof(bo));
    bo.cbStruct = sizeof(bo);
    bo.hwnd = hwnd;
    bo.dwClassContext  = CLSCTX_LOCAL_SERVER;
    return CoGetObject(wszMonikerName, &bo, riid, ppv);
}

调用该函数使用提升的权限创建 ICMLuaUtil COM 对象后,直接调用ShellExec方法创建指定进程,从而完成Bypass UAC。

Windows自身权限漏洞ByPass UAC

默认情况下,UAC 提示在一个被称为 Secure Desktop 的单独桌面上显示。这些提示由 consent.exe 进程生成,该进程以 NT AUTHORITY\SYSTEM 权限运行,并具有 System 完整性级别。

CVE-2019-1388 是一个 Windows UAC 绕过漏洞,存在于 consent.exe 的处理过程中。该漏洞允许攻击者利用特定的路径处理不当,达到绕过 UAC 提权的目的。具体来说,这个漏洞利用了 UAC 提示生成过程中的一些不安全的操作,使攻击者能够在 UAC 提示出现时执行恶意代码。

在UAC提示中选择"显示详细信息"后点击"显示有关此发布者的证书信息",点击"颁发者"的超链接,关闭UAC提示:

在打开的页面里选择"另存为",点击确定:

打开cmd,输入whoami可以发现是系统级权限。

漏洞原理

该漏洞与UAC自身的机制有关,如上所述:默认情况下,Windows 在一个单独的桌面(称为 "安全桌面")上显示所有的 UAC 提示。UAC 提示由名为 consent.exe 的可执行文件生成,该文件以 NT AUTHORITY\SYSTEM 身份运行,且具有最高的 System 完整性级别。

由于用户可以与这个安全桌面的 UI 进行交互,若 UI 控件不加限制,低权限用户可能通过这些控件绕过 UAC,获得系统权限。特别是证书对话框中的超链接未被禁用,这使得攻击者可以在点击该超链接后,利用 consent.exe 以 SYSTEM 权限打开浏览器并访问链接。

在利用该漏洞时,攻击者可以在 UAC 提示中点击 "显示有关此发布者的证书的信息" 超链接,这会触发 consent.exe 以 SYSTEM 权限打开浏览器。虽然浏览器以 SYSTEM 权限运行,但它会显示在普通桌面上,直到用户关闭所有 UAC 对话框。攻击者可以利用这一点,保存浏览器中打开的页面,并在资源管理器中打开 cmd.exe,继承浏览器的 SYSTEM 权限,从而实现从普通用户到 SYSTEM 权限的提权。

0 条评论
某人
表情
可输入 255