The Security Descriptor Definition Language (SDDL) was introduced in Windows 2000 to provide a textual representation for security descriptors. Prior to its introduction, security descriptors were typically represented as hex bytes, which was not particularly readable or editable.
Although the only defined revision number is 1, there have actually been quite a few revisions to the Security Descriptor Definition Language, which makes you wonder what that version number was for. The fact that the version number hasn’t changed when the language changed means that if you call ConvertÂSecurityÂDescriptorÂToÂStringÂSecurityÂDescriptor
, you will get a string security descriptor that works on the version of Windows that generated it, but it may not work on older versions of Windows, because the older versions may not support some of the newer features.
Oops.
Okay, so here’s a history of the Security Descriptor Definition Language, in table form.
SDDL Component Tags
Code | Meaning Symbol |
Introduced |
---|---|---|
O | OwnerSDDL_OWNER OWNER_SECURITY_INFORMATION |
Windows 2000 |
G | GroupSDDL_GROUP GROUP_SECURITY_INFORMATION |
|
D | DACLSDDL_DACL DACL_SECURITY_INFORMATION |
|
S | SACLSDDL_SACL SACL_SECURITY_INFORMATION |
SDDL Security Descriptor Controls
Code | Meaning | Introduced |
---|---|---|
P | ProtectedSDDL_PROTECTED SE_DACL_PROTECTED SE_SACL_PROTECTED |
Windows 2000 |
AR | Auto inherit requestSDDL_AUTO_INHERIT_REQ SE_DACL_AUTO_INHERIT_REQ SE_SACL_AUTO_INHERIT_REQ |
|
AI | Auto inheritedSDDL_AUTO_INHERITED SE_DACL_AUTO_INHERITED SE_SACL_AUTO_INHERITED |
|
NO_ACCESS_CONTROL | Null ACLSDDL_NULL_ACL |
Windows 7 |
SDDL ACE Types
Code | Meaning | Introduced |
---|---|---|
A | Access allowedSDDL_ACCESS_ALLOWED ACCESS_ALLOWED_ACE_TYPE |
Windows 2000 |
D | Access deniedSDDL_ACCESS_DENIED ACCESS_DENIED_ACE_TYPE |
|
OA | Object access allowedSDDL_OBJECT_ACCESS_ALLOWED ACCESS_ALLOWED_OBJECT_ACE_TYPE |
|
OD | Object access deniedSDDL_OBJECT_ACCESS_DENIED ACCESS_DENIED_OBJECT_ACE_TYPE |
|
AU | AuditSDDL_AUDIT SYSTEM_AUDIT_ACE_TYPE |
|
AL | AlarmSDDL_ALARM SYSTEM_ALARM_ACE_TYPE |
|
OU | Object auditSDDL_OBJECT_AUDIT SYSTEM_AUDIT_OBJECT_ACE_TYPE |
|
OL | Object alarmSDDL_OBJECT_ALARM SYSTEM_ALARM_OBJECT_ACE_TYPE |
|
ML | Integrity labelSDDL_MANDATORY_LABEL SYSTEM_MANDATORY_LABEL_ACE_TYPE |
Windows Vista |
XA | Callback access allowedSDDL_CALLBACK_ACCESS_ALLOWED ACCESS_ALLOWED_CALLBACK_ACE_TYPE |
Windows 7 |
XD | Callback access deniedSDDL_CALLBACK_ACCESS_DENIED ACCESS_DENIED_CALLBACK_ACE_TYPE |
|
RA | Resource attributeSDDL_RESOURCE_ATTRIBUTE SYSTEM_RESOURCE_ATTRIBUTE_ACE_TYPE |
Windows 8 |
SP | Scoped policySDDL_SCOPED_POLICY_ID SYSTEM_SCOPED_POLICY_ID_ACE_TYPE |
|
XU | Callback auditSDDL_CALLBACK_AUDIT SYSTEM_AUDIT_CALLBACK_ACE_TYPE |
|
ZA | Callback object access allowedSDDL_CALLBACK_OBJECT_ACCESS_ALLOWED ACCESS_ALLOWED_CALLBACK_OBJECT_ACE_TYPE |
|
TL | Process trust labelSDDL_PROCESS_TRUST_LABEL SYSTEM_PROCESS_TRUST_LABEL_ACE_TYPE |
Windows 8.1 |
FL | Access filterSDDL_ACCESS_FILTER SYSTEM_ACCESS_FILTER_ACE_TYPE |
Windows 10 Version 1703 |
SDDL Resource attribute ACE data types
Code | Meaning | Introduced |
---|---|---|
TI | Signed integerSDDL_INT CLAIM_SECURITY_ATTRIBUTE_TYPE_INT64 |
Windows 8 |
TU | Unsigned integerSDDL_UINT CLAIM_SECURITY_ATTRIBUTE_TYPE_UINT64 |
|
TS | Wide stringSDDL_WSTRING CLAIM_SECURITY_ATTRIBUTE_TYPE_STRING |
|
TD | SIDSDDL_SID CLAIM_SECURITY_ATTRIBUTE_TYPE_SID |
|
TX | Octet stringSDDL_BLOB CLAIM_SECURITY_ATTRIBUTE_TYPE_OCTET_STRING |
|
TB | BooleanSDDL_BOOLEAN CLAIM_SECURITY_ATTRIBUTE_TYPE_BOOLEAN |
SDDL ACE flags
Code | Meaning | Introduced |
---|---|---|
CI | Container inheritSDDL_CONTAINER_INHERIT CONTAINER_INHERIT_ACE |
Windows 2000 |
OI | Object inheritSDDL_OBJECT_INHERIT OBJECT_INHERIT_ACE |
|
NP | Inherit no propagateSDDL_NO_PROPAGATE NO_PROPAGATE_INHERIT_ACE |
|
IO | Inherit onlySDDL_INHERIT_ONLY INHERIT_ONLY_ACE |
|
ID | InheritedSDDL_INHERITED INHERITED_ACE |
|
SA | Audit successSDDL_AUDIT_SUCCESS SUCCESSFUL_ACCESS_ACE_FLAG |
|
FA | Audit failureSDDL_AUDIT_FAILURE FAILED_ACCESS_ACE_FLAG |
|
TP | Trust protected filterSDDL_TRUST_PROTECTED_FILTER TRUST_PROTECTED_FILTER_ACE_FLAG |
Windows 10 Version 1703 |
CR | CriticalSDDL_CRITICAL CRITICAL_ACE_FLAG |
Windows 10 Version 1809 |
SDDL access rights
Code | Meaning | Applies to | Introduced |
---|---|---|---|
RP | ACTRL_DS_READ_PROP SDDL_READ_PROPERTY |
Directory services |
Windows 2000 |
WP | ACTRL_DS_WRITE_PROP SDDL_WRITE_PROPERTY |
||
CC | ACTRL_DS_CREATE_CHILD SDDL_CREATE_CHILD |
||
DC | ACTRL_DS_DELETE_CHILD SDDL_DELETE_CHILD |
||
LC | ACTRL_DS_LIST SDDL_LIST_CHILDREN |
||
SW | ACTRL_DS_SELF SDDL_SELF_WRITE |
||
LO | ACTRL_DS_LIST_OBJECT SDDL_LIST_OBJECT |
||
DT | ACTRL_DS_DELETE_TREE SDDL_DELETE_TREE |
||
CR | ACTRL_DS_CONTROL_ACCESS SDDL_CONTROL_ACCESS |
||
RC | READ_CONTROL SDDL_READ_CONTROL |
Anything | |
WD | WRITE_DAC SDDL_WRITE_DAC |
||
WO | WRITE_OWNER SDDL_WRITE_OWNER |
||
SD | DELETE SDDL_STANDARD_DELETE |
||
GA | GENERIC_ALL SDDL_GENERIC_ALL |
||
GR | GENERIC_READ SDDL_GENERIC_READ |
||
GW | GENERIC_WRITE SDDL_GENERIC_WRITE |
||
GX | GENERIC_EXECUTE SDDL_GENERIC_EXECUTE |
||
FA | FILE_ALL_ACCESS SDDL_FILE_ALL |
Files and folders |
|
FR | FILE_GENERIC_READ SDDL_FILE_READ |
||
FW | FILE_GENERIC_WRITE SDDL_FILE_WRITE |
||
FX | FILE_GENERIC_EXECUTE SDDL_FILE_EXECUTE |
||
KA | KEY_ALL_ACCESS SDDL_KEY_ALL |
Registry keys |
|
KR | KEY_READ SDDL_KEY_READ |
||
KW | KEY_WRITE SDDL_KEY_WRITE |
||
KX | KEY_EXECUTE SDDL_KEY_EXECUTE |
||
NW | SYSTEM_MANDATORY_LABEL_NO_WRITE_UP SDDL_NO_WRITE_UP |
Mandatory label ACE |
Windows 7 |
NR | SYSTEM_MANDATORY_LABEL_NO_READ_UP SDDL_NO_READ_UP |
||
NX | SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP SDDL_NO_EXECUTE_UP |
SDDL users and groups
Tag | Meaning | Introduced |
---|---|---|
DA | Domain adminsSDDL_DOMAIN_ADMINISTRATORS DOMAIN_GROUP_RID_ADMINS |
Windows 2000 |
DG | Domain guestsSDDL_DOMAIN_GUESTS DOMAIN_GROUP_RID_GUESTS |
|
DU | Domain usersSDDL_DOMAIN_USERS DOMAIN_GROUP_RID_USERS |
|
ED | Enterprise domain controllersSDDL_ENTERPRISE_DOMAIN_CONTROLLERS SECURITY_SERVER_LOGON_RID |
|
DD | Domain domain controllersSDDL_DOMAIN_DOMAIN_CONTROLLERS DOMAIN_GROUP_RID_CONTROLLERS |
|
DC | Domain computersSDDL_DOMAIN_COMPUTERS DOMAIN_GROUP_RID_COMPUTERS |
|
BA | Local administratorsSDDL_BUILTIN_ADMINISTRATORS DOMAIN_ALIAS_RID_ADMINS |
|
BG | Local guestsSDDL_BUILTIN_GUESTS DOMAIN_ALIAS_RID_GUESTS |
|
BU | Local usersSDDL_BUILTIN_USERS DOMAIN_ALIAS_RID_USERS |
|
LA | Local administrator accountSDDL_LOCAL_ADMIN DOMAIN_USER_RID_ADMIN |
|
LG | Local guest accountSDDL_LOCAL_GUEST DOMAIN_USER_RID_GUEST |
|
AO | Account operatorsSDDL_ACCOUNT_OPERATORS DOMAIN_ALIAS_RID_ACCOUNT_OPS |
|
BO | Backup operatorsSDDL_BACKUP_OPERATORS DOMAIN_ALIAS_RID_BACKUP_OPS |
|
PO | Printer operatorsSDDL_PRINTER_OPERATORS DOMAIN_ALIAS_RID_PRINT_OPS |
|
SO | Server operatorsSDDL_SERVER_OPERATORS DOMAIN_ALIAS_RID_SYSTEM_OPS |
|
AU | Authenticated usersSDDL_AUTHENTICATED_USERS SECURITY_AUTHENTICATED_USER_RID |
|
PS | Personal selfSDDL_PERSONAL_SELF SECURITY_PRINCIPAL_SELF_RID |
|
CO | Creator ownerSDDL_CREATOR_OWNER SECURITY_CREATOR_OWNER_RID |
|
CG | Creator groupSDDL_CREATOR_GROUP SECURITY_CREATOR_GROUP_RID |
|
SY | Local systemSDDL_LOCAL_SYSTEM SECURITY_LOCAL_SYSTEM_RID |
|
PU | Power usersSDDL_POWER_USERS DOMAIN_ALIAS_RID_POWER_USERS |
|
WD | Everyone (World)SDDL_EVERYONE SECURITY_WORLD_RID |
|
RE | ReplicatorSDDL_REPLICATOR DOMAIN_ALIAS_RID_REPLICATOR |
|
IU | Interactive logon userSDDL_INTERACTIVE SECURITY_INTERACTIVE_RID |
|
NU | Nework logon userSDDL_NETWORK SECURITY_NETWORK_RID |
|
SU | Service logon userSDDL_SERVICE SECURITY_SERVICE_RID |
|
RC | Restricted codeSDDL_RESTRICTED_CODE SECURITY_RESTRICTED_CODE_RID |
|
SA | Schema administratorsSDDL_SCHEMA_ADMINISTRATORS DOMAIN_GROUP_RID_SCHEMA_ADMINS |
|
CA | Certificate server administratorsSDDL_CERT_SERV_ADMINISTRATORS DOMAIN_GROUP_RID_CERT_ADMINS |
|
RS | RAS servers groupSDDL_RAS_SERVERS DOMAIN_ALIAS_RID_RAS_SERVERS |
|
EA | Enterprise administratorsSDDL_ENTERPRISE_ADMINS DOMAIN_GROUP_RID_ENTERPRISE_ADMINS |
|
PA | Group Policy administratorsSDDL_GROUP_POLICY_ADMINS DOMAIN_GROUP_RID_POLICY_ADMINS |
|
RU | Compatibility for pre-Windows 2000 accountsSDDL_ALIAS_PREW2KCOMPACC DOMAIN_ALIAS_RID_PREW2KCOMPACCESS |
|
AN | Anonymous logonSDDL_ANONYMOUS SECURITY_ANONYMOUS_LOGON_RID |
Windows XP |
LS | Local service accountSDDL_LOCAL_SERVICE SECURITY_LOCAL_SERVICE_RID |
|
NS | Network service accountSDDL_NETWORK_SERVICE SECURITY_NETWORK_SERVICE_RID |
|
RD | Remote desktop usersSDDL_REMOTE_DESKTOP DOMAIN_ALIAS_RID_REMOTE_DESKTOP_USERS |
|
NO | Network configuration operatorsSDDL_NETWORK_CONFIGURATION_OPS DOMAIN_ALIAS_RID_NETWORK_CONFIGURATION_OPS |
|
MU | Performance Monitor usersSDDL_PERFMON_USERS DOMAIN_ALIAS_RID_MONITORING_USERS |
|
LU | Performance Log usersSDDL_PERFLOG_USERS DOMAIN_ALIAS_RID_LOGGING_USERS |
|
WR | Write Restricted codeSDDL_WRITE_RESTRICTED_CODE SECURITY_WRITE_RESTRICTED_CODE_RID |
Windows Vista |
IS | Anonymous Internet usersSDDL_IIS_USERS DOMAIN_ALIAS_RID_IUSERS |
|
CY | Crypto operatorsSDDL_CRYPTO_OPERATORS DOMAIN_ALIAS_RID_CRYPTO_OPERATORS |
|
OW | Owner Rights SIDSDDL_OWNER_RIGHTS SECURITY_CREATOR_OWNER_RIGHTS_RID |
|
RM | RMS service operatorsSDDL_RMS_SERVICE_OPERATORS DOMAIN_ALIAS_RID_RMS_SERVICE_OPERATORS |
Windows Vista Removed in Win7 |
ER | Event log readersSDDL_EVENT_LOG_READERS DOMAIN_ALIAS_RID_EVENT_LOG_READERS_GROUP |
Windows 7 |
RO | Enterprise read-only domain controllersSDDL_ENTERPRISE_RO_DCs DOMAIN_GROUP_RID_ENTERPRISE_READONLY_DOMAIN_CONTROLLERS |
|
CD | Can connect to certification authorities using DCOMSDDL_CERTSVC_DCOM_ACCESS DOMAIN_ALIAS_RID_CERTSVC_DCOM_ACCESS_GROUP |
|
AC | All applications running in an app package contextSDDL_ALL_APP_PACKAGES SECURITY_BUILTIN_PACKAGE_ANY_PACKAGE |
Windows 8 |
RA | RDS remote access serversSDDL_RDS_REMOTE_ACCESS_SERVERS DOMAIN_ALIAS_RID_RDS_REMOTE_ACCESS_SERVERS |
|
ES | Endpoint serversSDDL_RDS_ENDPOINT_SERVERS DOMAIN_ALIAS_RID_RDS_ENDPOINT_SERVERS |
|
MS | Management serversSDDL_RDS_MANAGEMENT_SERVERS DOMAIN_ALIAS_RID_RDS_MANAGEMENT_SERVERS |
|
UD | User-mode driverSDDL_USER_MODE_DRIVERS SECURITY_USERMODEDRIVERHOST_ID_BASE_RID |
|
HA | Hyper-V administratorsSDDL_HYPER_V_ADMINS DOMAIN_ALIAS_RID_HYPER_V_ADMINS |
|
CN | Domain controllers which may be clonedSDDL_CLONEABLE_CONTROLLERS DOMAIN_GROUP_RID_CLONEABLE_CONTROLLERS |
|
AA | Access control assistant operatorsSDDL_ACCESS_CONTROL_ASSISTANCE_OPS DOMAIN_ALIAS_RID_ACCESS_CONTROL_ASSISTANCE_OPS |
|
RM | Remote management usersSDDL_REMOTE_MANAGEMENT_USERS DOMAIN_ALIAS_RID_REMOTE_MANAGEMENT_USERS |
|
AS | Authentication Authority AssertedSDDL_AUTHORITY_ASSERTED SECURITY_AUTHENTICATION_AUTHORITY_ASSERTED_RID |
|
SS | Authentication Service AssertedSDDL_SERVICE_ASSERTED SECURITY_AUTHENTICATION_SERVICE_ASSERTED_RID |
|
AP | Protected usersSDDL_PROTECTED_USERS DOMAIN_GROUP_RID_PROTECTED_USERS |
Windows 8.1 |
KA | Domain key credential administratorsSDDL_KEY_ADMINS DOMAIN_GROUP_RID_KEY_ADMINS |
Windows 10 |
EK | Enterprise key credential administratorsSDDL_ENTERPRISE_KEY_ADMINS DOMAIN_GROUP_RID_ENTERPRISE_KEY_ADMINS |
“RM” is the only case I can find of something being removed from SDDL.
SDDL integrity labels
Code | Meaning | Introduced |
---|---|---|
LW | Low mandatory levelSECURITY_MANDATORY_LOW_RID |
Windows Vista |
ME | Medium mandatory levelSECURITY_MANDATORY_MEDIUM_RID |
|
MP | Medium Plus mandatory levelSECURITY_MANDATORY_MEDIUM_PLUS_RID |
Windows 7 |
HI | High mandatory levelSECURITY_MANDATORY_HIGH_RID |
Windows Vista |
SI | System mandatory levelSECURITY_MANDATORY_SYSTEM_RID |
SDDL syntax elements
Syntax | Meaning | Introduced |
---|---|---|
semicolon | Separates elements inside an ACESDDL_SEPERATOR |
Windows 2000 |
colon | Delimits SD componentsSDDL_DELIMINATOR |
|
parentheses | Enclose an ACESDDL_ACE_BEGIN SDDL_ACE_END |
|
parentheses | Enclose a conditional ACE expressionSDDL_ACE_COND_BEGIN SDDL_ACE_COND_END |
Windows 7 |
curly braces | Enclose a comma-separated list of SIDsSDDL_ACE_COND_COMPOSITEVALUE_BEGIN SDDL_ACE_COND_COMPOSITEVALUE_SEPERATOR SDDL_ACE_COND_COMPOSITEVALUE_END |
|
number sign | Hexadecimal byte dataSDDL_ACE_COND_BLOB_PREFIX |
|
parentheses | Enclose a string SID in a SID listSDDL_ACE_COND_SID_BEGIN SDDL_ACE_COND_SID_END |
I like how “separator” and “delimiter” are misspelled.
Rumours that SDDL was inspired by the programming language Malbolge are… well, probably only slightly true.
removing a code between Vista and 7 seems like exactly the sort of situation that would demand a version change because a string may not be compatible with a newer windows version. Guessing someone decided that code changes don’t need a version change maybe they are being reserved for a more fundamental change of syntax but even then they changed in 7 too.
Without practce this information could induce line twists the next time I boot to the troubleshooting command prompt to temporarily get a piece of software out of my way to test some possible network comms etc issue haha.
Deliminator: http://www.catb.org/jargon/html/D/deliminator.html
(Apologies. My normal account it *not* working right now)
Am I the only one who finds it ironic that RM is the only thing that got ReMoved? It was almost like someone got to type “rm RM”