PrivEsc:滥用服务控制管理器实现隐秘且持久的 LPE

admin 2024年11月23日00:15:34评论9 views字数 2829阅读9分25秒阅读模式

PrivEsc:滥用服务控制管理器实现隐秘且持久的 LPE

Living off the Land

本周早些时候, Grzegorz Tworek发布了一种非常酷的方法来建立持久的 LPE,这是我以前从未在野外见过的。从(受损的)特权帐户,我们可以滥用服务控制管理器,通过使用sdset将过于宽松的 ACL 提供给服务控制管理器,允许任意非管理用户在计算机上永久拥有完整的系统权限。

一些背景知识

要了解此攻击的作用,需要对sdset以及 Microsoft 的安全描述符定义语言( SDDL ) 进行一些简单的阅读。但是……为您总结这两篇文章,我们只需要知道安全描述符字符串的格式,其中包含标记来指示安全描述符的四个主要组成部分中的每一个:所有者(O:)、主要组(G:)、 DACL (D:)、 SACL (S:) 以及访问控制实体的令牌。安全描述符可以包含这些令牌的任意组合,但并非所有令牌都是必需的,正如我们将在下面演示的那样。

根据推文,我们只需要运行 sc.exe sdset scmanager D:(A;;KA;;;WD) 来自提升的 Windows shell(即具有本地管理权限的东西)。在演示整个攻击之前,让我们进一步分解一下。

D:(A;;KA;;;WD) … wat. D:

如果您像我一样,对这些 Microsoft SDDL 令牌如何工作或每个部分代表什么了解非常有限,我们应该花一些时间来了解更多。(你知道,学习一些新东西和所有jazz)

那么这个字符串实际上代表什么?让我们分解每个部分。首先,我们应该了解一般的访问控制条目语法:

ace_type;ace_flags;rights;object_guid;inherit_object_guid;account_sid;(resource_attribute)

  • D:自由访问控制列表 (DACL)

  • DACL 标识允许或拒绝访问某个对象的用户和组。

  • A;允许访问(ace_type)

  • 第一段表示访问控制条目 ( ACE ) 的开头。ACL 包含 ACE 列表。ACE 定义特定用户或组对对象的访问权限,或定义生成系统管理消息或警报的访问类型。用户或组由安全标识符 (SID) 标识。

  • ace_flags为空

  • KA;密钥全部访问(rights)

  • 如果在 SID 上下文中使用,此令牌还可以指代域密钥凭据管理员,这一点也不令人困惑。我们只需知道,这可以访问与 SDDL 相关的所有注册表项。

  • object_guid为空

  • inherit_object_guid为空

  • WD - 所有人的安全主体 ( account_sid)

  • 下面您将看到我们可以在 SDDL 字符串中引用的一些常见安全主体的表格。

ACE 安全原则

Abbreviation Security Principal
AU 已认证用户
BA 内置管理员
SY 本地系统
BU 内置用户
WD 每个人

总结

这里的 TL;DR 是,此命令授予服务控制管理器上的everyone、all权限。这意味着,我可以(作为非特权用户)创建一个服务,该服务将允许我像SYSTEM一样执行任意命令,因为以SYSTEMscmanager上下文运行。如果您想要更多技术参考,您可以阅读上百万篇类似这篇文章的文章。

攻击流程示例

# 检查我们的普通用户的权限。

首先,我们将使用非特权帐户并输出用户信息。这里我只是简单地演示我们将从中授予特权的帐户没有管理权限。

PrivEsc:滥用服务控制管理器实现隐秘且持久的 LPE

# 通过SDSET修改SCMANAGER的权限

接下来,我们从提升的命令提示符执行命令来修改scmanagerACL。这必须使用管理帐户(已被入侵的帐户)来完成:

PrivEsc:滥用服务控制管理器实现隐秘且持久的 LPE

检测机会 - 应严格审查对服务控制管理器的 ACL 的修改。以下是用于检测此博客的 POC 行为的示例 sigma 规则:

title: DACL Modification of Service Control Manager via sdset
id: 8998782b-66de-44e7-8335-305e2dd431b3
status: experimental
description: This rule detects usage of sdset to modify the DACL of the service-control manager service, scmanager.
references:
    - https://twitter.com/0gtweet/status/1628720819537936386?cxt=HHwWhIC87Ze9sJotAAAA
tags:
    - attack.persistence
    - attack.privilege_escalation
author: Gabriel De Jesus (0xv1n)
date: 2023/02/28
logsource:
    product: windows
    category: process_creation
detection:
    selection:
        Image|endswith:
            - 'sc.exe'
        CommandLine|contains|all:
            - ' sdset '
            - ' scmanager '
            - ' D:(A;;KA;;;WD) '
    condition: selection
fields:
    - Image
    - CommandLine
falsepositives:
    - Unknown
level: high

# 确认已发生变更

根据操作系统返回的反馈,我们知道命令成功了,但如果我们想检查服务的安全描述符,我们可以使用sdshow <service_name>。在这种情况下,我们确认scmanager确实具有新的安全描述符。

PrivEsc:滥用服务控制管理器实现隐秘且持久的 LPE

此外(感谢 Grzegorz!),我们可以运行sc.exe sdshow scmanager showrights来枚举服务的权限。这实际上将令牌映射到其安全描述符,并使我们能够更轻松地了解特定服务拥有的权限:

PrivEsc:滥用服务控制管理器实现隐秘且持久的 LPE

# 创建恶意服务以实现持久性 LPE

我们现在可以从非特权帐户创建一个服务,将我们的帐户添加到此机器的本地管理员组:

sc create LPE displayName= "LPE" binPath= "C:WindowsSystem32net.exe localgroup Administrators nonpriv-user /add" start= auto

PrivEsc:滥用服务控制管理器实现隐秘且持久的 LPE

# 重启机器

此时,我们需要做的就是重新启动机器并允许服务控制管理器以SYSTEM权限执行我们的新服务。一旦恢复在线,我们应该看到我们的帐户现在已添加到本地管理员。

PrivEsc:滥用服务控制管理器实现隐秘且持久的 LPE

这种机制最好的部分是,即使聪明的管理员删除了帐户的本地管理员权限,我们仍然拥有该服务。如果管理员删除了该服务,我们仍然可以创建新服务。这种持久性的补救措施是将 DACL 恢复到scmanager强化状态。

# 持续的本地权限提升

现在,无论何时,我们都可以生成具有管理员权限的任意进程:

PrivEsc:滥用服务控制管理器实现隐秘且持久的 LPE

希望这有帮助!

原文始发于微信公众号(Ots安全):PrivEsc:滥用服务控制管理器实现隐秘且持久的 LPE

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年11月23日00:15:34
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   PrivEsc:滥用服务控制管理器实现隐秘且持久的 LPEhttp://cn-sec.com/archives/3426657.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息