Windows DACL or ownership seized with a built-in permissions tool
AN1177 describes a five-stage chain — a permissions utility launches, its command line reveals intent, a 4670 DACL change follows, a 4663 access succeeds, and persistence follows that. Only the first two stages survive the Sigma subset this corpus models: the analytic's own TemporalCorrelationWindow knob asks for a 300-second join across three event ids, and lib/sigma has no aggregation, no timeframe and no near, so the correlation is simply absent here and a match means one command ran, not that any access actually changed hands. The rule therefore takes the process-creation leg and gates it twice — the tool must be a DACL editor and the command line must carry an access-changing switch — because those binaries are also the standard way to *read* an ACL, and an unqualified `icacls C:\path` is a query, not a modification. The two tool families need separate gates because their switch vocabularies do not overlap: icacls takes /grant, /deny, /setowner and /inheritance:r, while the older cacls and xcacls spell the same operations /g, /r, /p and /d, so one switch list checked against both would leave the legacy binaries permanently unmatched. attrib.exe, which the analytic also names, is deliberately out of scope: it sets file attributes rather than a DACL, and hiding a file with attrib +h is T1564.001. takeown.exe gets its own selection with no argument gate: it has no read-only mode, so every invocation is an ownership seizure. A third selection covers the .NET/PowerShell equivalents the analytic names, matched on the command line of any process, which catches only one-liners — an ACL rewritten inside a .ps1 body or by a compiled binary calling SetSecurityInfo directly produces no process-creation record at all and is invisible here. Two deployment caveats. The brief maps this leg to Security EventID 4688, so the rule is written in the Sysmon-shaped `process_creation` vocabulary (Image, CommandLine) that Sigma backends map onto NewProcessName and CommandLine for 4688; if 4688 is the feed, *Audit Process Creation* must be enabled AND the separate *Include command line in process creation events* policy must be on, or every CommandLine term below is blind and the rule returns zero rows while looking healthy. MITRE's SuspiciousCommandLinePatterns and SensitivePathWhitelist knobs name where the tuning goes; the switch list and the tool list below were assembled here, not taken from MITRE. UNVERIFIED — derived from MITRE ATT&CK DET0418 and never executed against logs.Full descriptionShow less
The detection
The 4 SIEM queries below are previews produced by Siemphony’s own translator, not pySigma, and none has been executed against a real backend — review before you deploy.
detection.yml
Sentinel · KQL
Run this as a search.
DeviceProcessEvents| where ((((FolderPath endswith "\\icacls.exe" and (ProcessCommandLine contains "/grant" or ProcessCommandLine contains "/deny" or ProcessCommandLine contains "/remove" or ProcessCommandLine contains "/setowner" or ProcessCommandLine contains "/inheritance:r" or ProcessCommandLine contains "/reset" or ProcessCommandLine contains "/setintegritylevel")) or ((FolderPath endswith "\\cacls.exe" or FolderPath endswith "\\xcacls.exe") and (ProcessCommandLine contains " /g " or ProcessCommandLine contains " /r " or ProcessCommandLine contains " /p " or ProcessCommandLine contains " /d "))) or FolderPath endswith "\\takeown.exe") or (ProcessCommandLine contains "Set-Acl" or ProcessCommandLine contains "SetAccessRule" or ProcessCommandLine contains "AddAccessRule" or ProcessCommandLine contains "SetAccessRuleProtection" or ProcessCommandLine contains "SetOwner"))
Splunk · SPL
Run this as a search.
index=* ((((Image="*\\icacls.exe" AND (CommandLine="*/grant*" OR CommandLine="*/deny*" OR CommandLine="*/remove*" OR CommandLine="*/setowner*" OR CommandLine="*/inheritance:r*" OR CommandLine="*/reset*" OR CommandLine="*/setintegritylevel*")) OR ((Image="*\\cacls.exe" OR Image="*\\xcacls.exe") AND (CommandLine="* /g *" OR CommandLine="* /r *" OR CommandLine="* /p *" OR CommandLine="* /d *"))) OR Image="*\\takeown.exe") OR (CommandLine="*Set-Acl*" OR CommandLine="*SetAccessRule*" OR CommandLine="*AddAccessRule*" OR CommandLine="*SetAccessRuleProtection*" OR CommandLine="*SetOwner*"))Elastic · ES|QL
Run this as a search.
FROM logs-*| WHERE ((((TO_LOWER(process.executable) LIKE "*\\\\icacls.exe" AND (TO_LOWER(process.command_line) LIKE "*/grant*" OR TO_LOWER(process.command_line) LIKE "*/deny*" OR TO_LOWER(process.command_line) LIKE "*/remove*" OR TO_LOWER(process.command_line) LIKE "*/setowner*" OR TO_LOWER(process.command_line) LIKE "*/inheritance:r*" OR TO_LOWER(process.command_line) LIKE "*/reset*" OR TO_LOWER(process.command_line) LIKE "*/setintegritylevel*")) OR ((TO_LOWER(process.executable) LIKE "*\\\\cacls.exe" OR TO_LOWER(process.executable) LIKE "*\\\\xcacls.exe") AND (TO_LOWER(process.command_line) LIKE "* /g *" OR TO_LOWER(process.command_line) LIKE "* /r *" OR TO_LOWER(process.command_line) LIKE "* /p *" OR TO_LOWER(process.command_line) LIKE "* /d *"))) OR TO_LOWER(process.executable) LIKE "*\\\\takeown.exe") OR (TO_LOWER(process.command_line) LIKE "*set-acl*" OR TO_LOWER(process.command_line) LIKE "*setaccessrule*" OR TO_LOWER(process.command_line) LIKE "*addaccessrule*" OR TO_LOWER(process.command_line) LIKE "*setaccessruleprotection*" OR TO_LOWER(process.command_line) LIKE "*setowner*"))
Wazuh · XML rule
Deploy to your manager — this is a rule, not a search.
<group name="sigma,windows,process_creation,"> <!-- Rule ids must be unique on your manager; 100000+ is the user range. --> <!-- 4 rules: the Sigma condition ORs across different fields, which one rule cannot express. Any one matching is a hit. --> <rule id="100000" level="7"> <!-- Set <if_sid> to the decoder/base rule for windows so this only evaluates relevant events. --> <field name="Image" type="pcre2">(?i)\\icacls\.exe$</field> <field name="CommandLine" type="pcre2">(?i)(/grant|/deny|/remove|/setowner|/inheritance:r|/reset|/setintegritylevel)</field> <description>Windows DACL or ownership seized with a built-in permissions tool (1/4)</description> <mitre> <id>T1222.001</id> </mitre> </rule> <rule id="100001" level="7"> <!-- Set <if_sid> to the decoder/base rule for windows so this only evaluates relevant events. --> <field name="Image" type="pcre2">(?i)(\\cacls\.exe$|\\xcacls\.exe$)</field> <field name="CommandLine" type="pcre2">(?i)( /g | /r | /p | /d )</field> <description>Windows DACL or ownership seized with a built-in permissions tool (2/4)</description> <mitre> <id>T1222.001</id> </mitre> </rule> <rule id="100002" level="7"> <!-- Set <if_sid> to the decoder/base rule for windows so this only evaluates relevant events. --> <field name="Image" type="pcre2">(?i)\\takeown\.exe$</field> <description>Windows DACL or ownership seized with a built-in permissions tool (3/4)</description> <mitre> <id>T1222.001</id> </mitre> </rule> <rule id="100003" level="7"> <!-- Set <if_sid> to the decoder/base rule for windows so this only evaluates relevant events. --> <field name="CommandLine" type="pcre2">(?i)(Set-Acl|SetAccessRule|AddAccessRule|SetAccessRuleProtection|SetOwner)</field> <description>Windows DACL or ownership seized with a built-in permissions tool (4/4)</description> <mitre> <id>T1222.001</id> </mitre> </rule></group>
Verdicts · reactions · comments
Community
Verdicts from engineers who actually deployed it, and the conversation around it.
Nobody has run this in a real environment and said what happened.
Verdicts from engineers who deployed it
0 castNo verdicts reported yet. The first one is worth more than the tenth — say what you ran it against.
Log in to report a verdict.
Log in to join the discussion.
No comments yet. Someone who deploys this will have something to say about it.