简介
ACL是Access Control List的缩写,是一种用于控制对对象(如文件、文件夹、注册表项等)访问权限的机制。在内网渗透中,ACL通常指代Windows环境下的访问控制列表,它由一系列访问控制条目(ACE)组成,用于定义用户或用户组对对象的访问权限。
ACM
Windows访问控制模型(Access Control Model、ACM)是Windows操作系统中用于管理和控制资源访问权限的基础组件。
它由访问令牌(Access Token)和安全描述符(Security Descriptor)组成:
- 访问令牌:标识了用户或进程的身份(User SID,Group SIDS)、权限。
- 安全描述符:被访问的安全对象(如文件、文件夹、注册表项等)的安全属性和访问规则。
通过ACL(Access Control List)和ACE(Access Control Entry),Windows访问控制模型允许管理员灵活地配置和管理资源的访问权限,以确保系统的安全性和完整性。
用通俗一点的话来说 ACM 就是一个判断你在一个档案馆(在这里可以理解为整个域)里是否有权限打开某个档案抽屉(用户对象、用户组对象、Computer对象),并且是否能在这个档案抽屉中取走、存放、修改档案(读、写、修改)的一个模型。
访问流程
对象A来访问B:
- A会出示自己的Access Token,其中包含自己的用户sid,自己所在的组的sid,以及特权列表。
- B首先判断是不是需要特权才能访问,如果需要特权,则查看A的Access Token是否有特权。
- B通过A的Access Token,判断A的用户sid以及组sids,跟自己的ACL做比对,来判断是否让A进行访问。
ACL
主要有2个作用:
- 权限访问控制:一个用户能不能访问安全对象
- 日志记录功能:访问成功与否
根据2个作用,ACL分为DACL和SACL:
- DACL(Discretionary Access Control List):这种类型的ACL控制对象的访问权限,它决定了哪些用户或组对对象具有何种类型的访问权限。
- SACL(System Access Control List):这种类型的ACL用于审计目的。SACL允许您跟踪对对象的访问尝试,以便在安全事件发生时生成安全日志。
ACE
DACL和SACL都是由一条条的ACE(Access Control Entry)构成,上面红色框中每一项都是一条ACE,ACE定义了针对特定用户或组的权限授予或拒绝的配置结构。
一条ACE可以分为4个关键点:
- 谁拥有权限:确定哪些用户或组具有访问权限。
- 允许或拒绝访问:确定是否允许访问。
- 权限的继承:指示权限是否可以被子对象继承。
- 授予了什么权限:指定允许的访问类型。
SDDL
SDDL(Security Descriptor Definition Language)是一种文本格式,用于描述Windows系统中对象的安全描述符,它是 nTSecurityDescriptor
的一种可读形式。在内网渗透中,SDDL常用于描述权限和访问控制列表(ACL),以便于理解和修改系统对象的安全设置。渗透测试人员可能会使用SDDL来分析系统的权限配置,以发现潜在的安全漏洞或提升权限的机会。
nTSecurityDescriptor 是在Windows Active Directory(AD)中存储对象安全描述符的属性。它包含了对象的安全性信息,例如访问控制列表(ACL),定义了谁可以对对象执行哪些操作。
使用adfind查看sddl
AdFind.exe -b "CN=DESKTOP-9CAT508,CN=Computers,DC=org,DC=gm7" nTSecurityDescriptor -rawsddl
可以看到阅读难度还是蛮大的,其中一个括号就代表一条ACE。
优化adfind查询结果(+越多越容易阅读,网上说最多3个,但我这里最多只能2个)
AdFind.exe -b "CN=DESKTOP-9CAT508,CN=Computers,DC=org,DC=gm7" nTSecurityDescriptor -sddl++