2. SDDL

安全描述符定义语言

安全描述符定义语言(SDDL)定义了ConvertSecurityDescriptorToStringSecurityDescriptorConvertStringSecurityDescriptorToSecurityDescriptor函数用来将安全描述符描述为文本字符串的字符串格式。该语言还定义了字符串元素,用于描述安全描述符的组成部分中的信息。

针对本章节的学习建议使用AccessChk工具,该工具可以直接展示出指定对象的权限信息,并且能从SDDL到已解析的权限全面覆盖。

常用参数有:

  1. -L,即展示SDDL;

  2. -l显示解析后的安全描述符;

  3. 不使用参数为展示通用的权限格式;

  4. -v展示详细信息

展示SDDL
展示安全描述符
展示权限

安全描述符字符串格式

安全描述符字符串格式是一种文本格式,用于在安全描述符中存储或传输信息。 ConvertSecurityDescriptorToStringSecurityDescriptorConvertStringSecurityDescriptorToSecurityDescriptor函数使用此格式。

格式是一个以空值(null)结尾的字符串,带有令牌(tiken),用于指示安全描述符的四个主要组成部分:所有者(O :),主要组(G :),DACL(D :)和SACL(S :)。

owner_sid : 标识对象所有者的SID字符串。

group_sid : 一个SID字符串,用于标识对象的主要组。

dacl_flags : 适用于DACL的安全描述符控制标志。有关这些控制标志的说明,请参见SetSecurityDescriptorControl函数。 dacl_flags字符串可以是零个或多个以下字符串的串联。

Control

Constant in Sddl.h

Meaning

"P"

SDDL_PROTECTED

The SE_DACL_PROTECTED flag is set.

"AR"

SDDL_AUTO_INHERIT_REQ

The SE_DACL_AUTO_INHERIT_REQ flag is set.

"AI"

SDDL_AUTO_INHERITED

The SE_DACL_AUTO_INHERITED flag is set.

"NO_ACCESS_CONTROL"

SSDL_NULL_ACL

The ACL is null.

sacl_flags : 适用于SACL的安全描述符控制标志。 sacl_flags字符串使用与dacl_flags字符串相同的控制位字符串。

string_ace : 在安全描述符的DACL或SACL中描述ACE的字符串。有关ACE字符串格式的说明,可参考本章第二节的ACE字符串。每个ACE字符串都括在括号(())中。

可以从安全描述符字符串中省略不需要的组件。例如,如果未在输入安全描述符中设置SE_DACL_PRESENT标志,则ConvertSecurityDescriptorToStringSecurityDescriptor在输出字符串中不包含D:组件。您还可以使用SECURITY_INFORMATION位标志来指示要包含在安全描述符字符串中的组件。

安全描述符字符串格式不支持NULL ACL。

为了表示一个空的ACL,安全描述符字符串包括D:或S:令牌,没有其他字符串信息。

安全描述符字符串以不同的方式存储“安全描述符控制”位。SE_DACL_PRESENTSE_SACL_PRESENT位由字符串中D:或S:令牌的存在指示。适用于DACL或SACL的其他位存储在dacl_flagssacl_flags中。 SE_OWNER_DEFAULTEDSE_GROUP_DEFAULTEDSE_DACL_DEFAULTEDSE_SACL_DEFAULTED位未存储在安全描述符字符串中。 SE_SELF_RELATIVE位未存储在字符串中,但是ConvertStringSecurityDescriptorToSecurityDescriptor始终在输出安全描述符中设置此位。

以下示例显示了安全描述符字符串和关联的安全描述符中的信息。

O: SY代表该对象的Owner为System(类似O这样的表达为SID表达的可以在SID字符串章节找到对应的参考信息)

SYSTEM

D:AI代表SDDL_AUTO_INHERITED为权限继承,之后的内容为ACE(ACE的具体解释在后面的小节逐一介绍)

另外一些例子如下:

安全描述符1:

字符串 2:

安全描述符2:

最后更新于

这有帮助吗?