Skip to content

NTFS Permissions, Share Permissions and ACLs: The Windows Authorization Model

The Windows securable object model relies on Security Descriptors attached to every file, directory, registry key, and service:

  • Owner SID: Holds default legal control over the object and can always rewrite the DACL via WRITE_DAC.
  • Primary Group SID: Maintained for POSIX subsystem compatibility.
  • DACL (Discretionary Access Control List): An ordered list of Access Control Entries (ACEs) establishing who is permitted (Allow) or forbidden (Deny) to execute operations.
  • SACL (System Access Control List): Directs the security event log generation for access successes or failures.

Auditing NTFS permissions and SMB shares answers critical intrusion questions:

  1. Establishing Exfiltration Scope: Prove definitively whether a compromised user account possessed the authorization to read target repositories.
  2. Reconstructing Ransomware Execution: Reconstruct which account deposited encrypted extensions and modified files on central file servers.
  3. Identifying DACL Tampering for Persistence: Threat actors modify object DACLs (e.g., adding an Allow GenericAll ACE for a low-privilege user on a service binary or the AdminSDHolder container).

The Security Reference Monitor (SRM) evaluates ACEs from top to bottom:

[Access Request: Read + Write]
β”‚
β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ 1. Explicit ACE : DENY Write (Interns Group) β”‚ ──► Immediate Write Denial!
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ 2. Explicit ACE : ALLOW Read (jdoe) β”‚ ──► Read Access Granted!
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ 3. Inherited ACE: ALLOW Write (Users Group) β”‚ ──► Ignored due to prior explicit deny
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Canonical ACE Order:

  1. Explicit Deny
  2. Explicit Allow
  3. Inherited Deny
  4. Inherited Allow

If an explicit Deny matching the caller is encountered, access is immediately denied. When all requested access bits are satisfied by Allow ACEs, the check succeeds. If the end of the DACL is reached with unsatisfied access bits, access is denied by default.

Network (SMB) ──► [Share Permissions] ──► [NTFS Permissions] ──► File on Disk
Share PermissionNTFS PermissionEffective Network AccessEffective Local Console Access
Everyone : ReadEveryone : Full ControlRead OnlyFull Control
Everyone : Full ControlEveryone : ReadRead OnlyRead Only
Domain Users : ChangeDomain Users : ModifyModify (Write)Modify (Write)
Everyone : Full Controljdoe : Deny WriteWrite Denied for jdoeWrite Denied for jdoe

  • Being Owner Without Read Rights: An owner stripped of Read permissions cannot read the file immediately, but holds WRITE_DAC authority to grant themselves access.
  • Bypassing DACLs via SeBackupPrivilege: Backup utilities (and adversaries holding this right) open files with FILE_FLAG_BACKUP_SEMANTICS, instructing the kernel to bypass DACL checks.
  • Administrative Hidden Shares: Appending $ (e.g., C$, ADMIN$) hides the share from browser enumeration but enforces standard ACL checks.

  • Overriding an Explicit Deny via Group Membership: If user jdoe is in Domain Admins (Allow), but an explicit ACE sets jdoe: Deny, access is denied.
  • Network Writes Through Read-Only Shares: Even Domain Admins cannot write through a share restricted to Read.

EventID: 5140 # Network Share Object Was Accessed
ShareName: \\*\Finance
IpAddress: 192.168.1.105
SubjectUserName: jdoe
EventID: 5145 # Network Share Object Check (Detailed Triage)
ShareName: \\*\Finance
RelativeTargetName: Invoices\salaries_2026.xlsx
AccessMask: 0x120089 # ReadData, ReadEA, ReadAttributes, ReadControl
SubjectUserName: jdoe
SubjectUserSid: S-1-5-21-111111111-222222222-333333333-1105

  1. Network access is bounded by the most restrictive setting between Share and NTFS.
  2. Explicit Deny ACEs take precedence over all Allow ACEs.
  3. The Owner of an object can always modify its DACL.
  4. Event ID 5145 documents specific file targets and the requested AccessMask.