访问控制列表ACL学习

2023-12-13 10:55:20

ACL概念

ACL:

ACL 是 Access Control List(访问控制列表)的缩写。它是一种用于管理和控制访问权限的机制或数据结构。ACL 用于确定谁可以访问特定资源(例如文件、文件夹、网络资源等)以及他们可以执行的操作。ACL 通常由一系列访问控制条目组成,每个条目定义了一个用户、用户组或角色以及与其关联的权限。每个权限指定了对资源的特定操作,如读取、写入、执行或删除等。ACL 可以在操作系统、网络设备、数据库系统和应用程序等各种环境中使用。

**ACL 的主要目的是提供细粒度的访问控制,以确保只有授权的用户可以访问和操作资源,从而保护系统的安全性和完整性。**通过配置适当的 ACL,系统管理员可以限制用户的权限,根据需要授予不同级别的访问权限,并确保敏感数据和资源只能被授权的用户或角色使用。ACL 是许多操作系统和网络设备的基本安全功能之一,并在许多应用程序中用于实现细粒度的权限管理。它提供了一种灵活和可扩展的方法来管理访问控制,以满足组织对安全性和数据保护的需求。

访问控制列表 (ACL) 是访问控制条目 (ACE) 的列表。ACL 中的每个 ACE 都标识一个受托者,并为该受托者指定允许、拒绝或审计的访问权限。安全对象的安全描述符可以包含两种类型的 ACL:DACL 和 SACL。DACL 用于控制资源的访问权限,而 SACL 则用于记录和审核访问事件。

DACL:

DACL 是 Discretionary Access Control List(自由访问控制列表)的缩写。它是用于访问控制的一种权限机制,用于确定谁可以对资源进行访问以及他们可以执行的操作。DACL 是 Windows 操作系统中的一个重要概念,它是一种与对象(如文件、文件夹、注册表项等)关联的访问控制列表。DACL 包含了一系列访问控制条目(ACEs),每个条目指定了一个用户、用户组或角色以及与其关联的权限。

DACL 的特点是基于主体对资源的自由访问控制,即资源的所有者或管理员可以自由设定谁可以访问资源以及他们可以执行的操作。通过配置 DACL,可以限制或授予特定用户或用户组对资源的权限,例如读取、写入、执行、删除等。DACL 中的每个访问控制条目都包含一个身份(用户、用户组或角色)和一组权限。权限定义了允许或拒绝对资源执行的操作。当用户尝试访问资源时,操作系统会根据 DACL 中的条目来决定是否允许访问。需要注意的是,DACL 只是访问控制的一部分,它仅涵盖了资源的自由访问控制。在 Windows 操作系统中,还有其他类型的访问控制,如系统访问控制列表(SACL)用于审核和监视访问,以及对象所有者等。总而言之,DACL 是 Windows 操作系统中用于自由访问控制的权限机制,用于确定谁可以访问资源以及他们可以执行的操作。它提供了一种灵活的方式来定义和管理资源的访问权限,以满足安全性和数据保护的需求。

SACL:

SACL 是 System Access Control List(系统访问控制列表)的缩写。它是用于安全审计和监视的一种权限机制,用于跟踪对资源的访问和操作。SACL 是 Windows 操作系统中的一个重要概念,它是一个访问控制列表,与对象(如文件、文件夹、注册表项等)关联。SACL 包含了一系列访问控制条目(ACEs),每个条目指定一个用户、用户组或角色以及与其关联的安全审核设置。

SACL 的主要目的是启用安全审计功能,即记录对资源的访问和操作事件,以便管理员或安全审计员可以追踪和分析系统的安全情况。通过配置 SACL,可以指定哪些操作需要被审计,例如读取、写入、执行、删除等

当启用 SACL 并设置相应的安全审核设置时,系统会生成安全日志条目,记录与资源相关的访问和操作事件。这些安全日志可以用于监视和调查潜在的安全问题,了解系统中发生的活动,并满足合规性要求。需要注意的是,SACL 是一种高级的访问控制机制,通常在需要进行安全审计和监视的敏感资源上使用。

总结起来,SACL 是 Windows 操作系统中用于安全审计和监视的权限机制,用于记录对资源的访问和操作事件。它提供了一种机制,使管理员能够跟踪和分析系统的安全活动,并满足合规性要求。

如何查看ACL

ADSI编辑器

使用ADSI edit(adsiedit.msc)连接域后,可以看到某个域Object的acl,如下图。列表中的每一条即为ACE。代表以用户yokan为主体,描述哪些对象对yokan有什么样的权限。

连接方法:在域控中(普通域成员主机没有 ADSI 编辑器,本地安装域功能后会自带该工具,然后可以远程连接)执行 adsiedit.msc 打开 ADSI 编辑器,“操作” —> “连接”

image-20231206164603119

具体打开一条ace,看到域管组对用户yokan有一系列的权限:

image-20231206164812025

作为攻击者,我们对一些Active Directory对象权限和类型感兴趣:

  • GenericAll - 对对象拥有完全权限(添加用户到组或重置用户密码)
  • GenericWrite - 更新对象的属性(例如登录脚本)
  • WriteOwner - 将对象所有者更改为攻击者控制的用户,接管对象
  • WriteDACL - 修改对象的ACEs,并赋予攻击者对对象的完全控制权
  • AllExtendedRights - 能够将用户添加到组或重置密码
  • ForceChangePassword - 能够更改用户的密码
  • Self (Self-Membership) - 能够将自己添加到组中

Powerview

import-module .\powerview.ps1

Get-ObjectAcl -samAccountName yokan -ResolveGUIDs | ? {$_.ActiveDirectoryRights -eq "GenericAll"}

image-20231206174423939

访问控制列表(ACL)中的属性的解释:

PropagationFlags(传播标志):指定如何将访问权限传播到子对象。在这里,值为 "None" 表示权限不会传播到子对象。
InheritanceFlags(继承标志):指定是否允许对象的子对象继承访问权限。在这里,值为 "None" 表示不允许继承
ObjectType(对象类型):指定要应用访问权限的对象类型。在这里,值为 "All" 表示适用于所有对象类型。
AccessControlType(访问控制类型):指定访问权限的类型,是允许还是拒绝。在这里,值为 "Allow" 表示允许访问。
ObjectSID(对象安全标识符):指定对象的安全标识符(SID),用于唯一标识对象。
InheritedObjectType(继承的对象类型):指定继承访问权限的对象类型。在这里,值为 "All" 表示适用于所有继承对象。
IsInherited(是否继承):指示访问权限是否是继承自父对象的。
ObjectDN(对象的目录名称):指定对象在目录中的名称。
IdentityReference(标识引用):指定具有访问权限的用户或用户组的标识引用。
ObjectFlags(对象标志):指定对象的附加标志。
ActiveDirectoryRights(Active Directory 权限):指定访问权限的具体类型。在这里,值为 "GenericAll" 表示允许所有通用操作。
InheritanceType(继承类型):指定如何继承访问权限。在这里,值为 "None" 表示没有继承。

比如下图,表示YOKAN\Domain Adminis对yokan用户的所有对象具有GenericAll权限。

image-20231206175931774

Active Directory Module

安装:

import-module ActiveDirectory

使用:

(Get-Acl -Path "AD:CN=yokan,CN=Users,DC=yokan,DC=com").access

image-20231206170221232

dsacls

  • File Path: C:\Windows\system32\dsacls.exe
  • Description: DS Control ACLs Program

dsacls.exe结果比较简单,只能查询基础ACL,如GenericAll、WriteDAcl等,但胜在能远程查询,其他工具需要在域的上下文中使用:

dsacls "CN=yokan,CN=Users,DC=yokan,DC=com"

dsacls.exe "\\10.0.0.50\CN=yokan,CN=Users,DC=yokan,DC=com"

image-20231206175754900

不安全的ACEs

作为攻击者,我们对一些Active Directory对象权限和类型感兴趣

需要重点关注的ACE如下:

GenericAll:完全控制对象,包括更改密码、注册SPN、添加AD对象到目标组里面
 
GenericWrite:更新对象的属性(例如登录脚本)
 
WriteOwner:更新目标对象的所有者,可以更改为攻击者控制的用户,接管对象
 
WriteDACL:更新对面的DACL,将ACL写入对面实体,直接授予我们的账户对对象的完全控制权
 
AllExtendedRights:能够对目标对象执行与扩展 AD 权限相关的任何操作。例如,能够将用户添加到组或重置密码。

ForceChangePassword:强制改变当下的密码
 
AddMembers:可以对目标组添加用户(包括自己的账户)

Self (Self-Membership): 能够将自己添加到组中

这些权限可以帮助我们进行一定程度的提权,但一般我们选择对目标破坏性最小的一些方案。

具体利用

https://book.hacktricks.xyz/windows-hardening/active-directory-methodology/acl-persistence-abuse

https://mp.weixin.qq.com/s/r_bwyX2qj5VSqf3mVrnqGg

文章来源:https://blog.csdn.net/st3pby/article/details/134859815
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。