File & folder access
$Secure:$SDS security descriptors
$Secure:$SDS cheat sheet: NTFS security descriptor store, $SDH and $SII indexes, Security ID in $SI, file owner SID and ACLs, collection and MFTECmd.
- Location
- C:\$Secure:$SDS
- Proves
- Which account owns a file and what permissions (ACL) applied to it
- Timestamps
- None in $SDS; date permission changes with the file $SI record-change time and USN SECURITY_CHANGE records, UTC
- Retention
- Descriptors are shared and kept while any file uses them; no user command clears $SDS, only reformatting the volume
- Access
- NTFS metadata, not readable through the Windows API: raw NTFS collection as administrator (KAPE or Velociraptor $SDS)
- Evidence of
- File & folder access
- Type
- File / file system
- Windows
- XPVista / 78 / 8.11011
- KAPE target
- $SDS
- Velociraptor
- Windows.Triage.Targets:$SDS
Tools
Compare all toolsWhat it is
Since NTFS 3.0 (Windows 2000), security descriptors are no longer stored in each file's MFT record. They are deduplicated into a single system file, $Secure (MFT record 9), and each file only stores a 32-bit Security ID in its $STANDARD_INFORMATION attribute. $Secure has three parts:
$SDS(data stream): the security descriptors themselves, each with its hash, Security ID and offset.$SII(index): maps a Security ID to the descriptor's offset and size in$SDS.$SDH(index): maps a descriptor hash to its offset, so NTFS can reuse an existing descriptor instead of storing a duplicate.
For an investigator, $SDS is how you answer "who owns this file and who could access it" from a disk image, without mounting the volume and asking Windows.
Location
| Windows version | Path | Notes |
|---|---|---|
| XP to 11 (every NTFS volume) | <volume root>\$Secure:$SDS | Named data stream of MFT record 9 |
| XP to 11 | <volume root>\$Secure:$SII, $Secure:$SDH | Index attributes (INDX records) of the same file |
$Secure is both a file (it has a $DATA stream) and a directory-like object (it has index attributes), which confuses some glob-based collectors. Collected copies are usually named $Secure_$SDS.
What it proves
- Ownership: the owner SID of any file whose Security ID you know from the $MFT. Resolve the SID to an account with the SAM or domain data.
- Permissions: the DACL (who may read, write, execute) and the SACL (auditing) that applied to the file.
- Unusual access control: files with explicit "Everyone full control" ACEs, or files owned by a user account in system folders.
- It does not prove that the owner created or opened the file. Ownership can be taken or changed, and files written by elevated or system processes are often owned by
AdministratorsorSYSTEMrather than the logged-on user. There are no timestamps in$SDS.
Key fields
| Field | Meaning |
|---|---|
| Hash | Hash of the security descriptor, used by $SDH |
| Security ID | Identifier referenced by the SecurityId field of $STANDARD_INFORMATION |
| Offset / size | Position and length of the entry in $SDS |
| Owner SID | Account or group that owns the object |
| Group SID | Primary group |
| Control flags | Which parts are present (DACL, SACL), inheritance and protection flags |
| DACL ACEs | Allow/deny entries with SIDs and access masks |
| SACL ACEs | Audit entries |
Timestamps
| Timestamp | Set when | Format | Pitfalls |
|---|---|---|---|
None in $SDS | - | - | Descriptors carry no time; use the file's $SI "record changed" time and the USN journal SECURITY_CHANGE (0x800) records to date permission changes |
Retention and clearing
- One descriptor serves every file with the same owner and ACL, so the stream holds far fewer entries than the volume has files.
- Changing a file's owner or ACL gives it a different Security ID (an existing matching descriptor or a new one); the old descriptor stays in the stream if other files still use it.
- A deleted file's MFT record keeps its Security ID, so you can still attempt to look up the owner from
$SDS. - There is no user command to clear
$SDS; it is rebuilt only by reformatting the volume.
Collection
- KAPE target:
$SDS(collects$Secure:$SDS; also part ofFileSystem) - Velociraptor (
Windows.Triage.Targets):$SDS. The dedicatedWindows.Triage.SDSartifact uploads the stream by reading MFT record 9 directly, which avoids the glob issue mentioned above. - Built-in:
$SDSis not readable through the Windows API. On a live system, Windows can still tell you the current owner and ACL of a given file, which is useful to compare with offline results:
Get-Acl C:\Users\Public\tool.exe | Format-List Owner,AccessToString
icacls C:\Users\Public\tool.exe
cmd /c dir /q C:\Users\Public
Parsing tools
- MFTECmd (Eric Zimmerman):
MFTECmd.exe -f E:\C\$Secure_$SDS --csv E:\outlists every descriptor withId, owner and group SIDs, control flags and ACE counts and types.--ds 0x100dumps one Security ID in full. Join theIdcolumn with theSecurityIdcolumn of the MFTECmd$MFToutput. - Velociraptor:
Windows.Triage.SDSto collect the stream from live endpoints for offline parsing.
Investigation tips
- For each suspicious file in the $MFT output, take its
SecurityId, look up the owner SID in the$SDSCSV, then map the SID to a user profile: a quick way to attribute dropped tools to an account. - Group files by Security ID: a malware folder where every file shares an unusual descriptor (for example owned by a standard user inside
C:\Windows) stands out. - Look for descriptors granting write access to
Everyone,UsersorAuthenticated Userson executables or service binaries: a sign of weakened permissions used for persistence or privilege escalation. - Date ACL tampering with
SECURITY_CHANGErecords in the USN journal. - USN journal records also carry a
SecurityId, so files seen only in the journal (already deleted, see $I30 slack for more names) can still be tied to an owner.
Related artifacts
- Master File Table ($MFT)$MFT cheat sheet: FILE records, $SI vs $FN timestamps, resident data, deleted records, sequence numbers, timestomping checks and MFTECmd parsing.
- USN Journal ($UsnJrnl:$J)USN journal cheat sheet: $UsnJrnl:$J and $Max, record fields, reason flags, parent references, default size, rollover, fsutil and MFTECmd parsing.
- SAM hive and user accountsSAM hive cheat sheet: local accounts, RIDs, last logon and password change times, logon counts, group membership, ProfileList, and account-related event IDs.
- $I30 index attributes$I30 cheat sheet: NTFS directory indexes ($INDEX_ROOT, $INDEX_ALLOCATION), INDX records, timestamps, slack entries of deleted files and parsers.
Glossary terms
- Security Identifier (SID)The unique value Windows uses to identify users, groups and computers, such as S-1-5-21-…-1001, found throughout registry, logs and file paths.
- NTFSNTFS (New Technology File System) is the default Windows file system; its metadata files such as $MFT, $LogFile and $UsnJrnl are core forensic sources.
- Master File Table (MFT)The NTFS metadata index, stored as `$MFT`, holding one record per file and directory on a volume.