PowerShell script block suppresses errors around a download or exec cmdlet
AN0182 describes PowerShell invoked with parameters that suppress errors or interrupts so a command keeps running through failures that would otherwise stop it. `-ErrorAction SilentlyContinue` alone is far too common to gate on — it is defensive-programming boilerplate in a huge share of legitimate scripts — so this rule requires it to appear in the same script block as one of MITRE's `MonitoredCmdlets` examples (`Invoke-Expression`, `Invoke-WebRequest`) plus the other primitives that make up the same download-and-run pattern (`Invoke-RestMethod`, `Net.WebClient`, `DownloadString`, `Start-BitsTransfer`). The idea is that an adversary chaining a retrieval or execution step behind silenced errors is trying to keep a cradle running past a blocked request or a killed connection, which is a narrower claim than "a script suppressed an error somewhere." This rule does not attempt AN0182's `ErrorActionThreshold` knob — a frequency count across a time window is not expressible against a single event in lib/sigma — so it fires on the first block that matches rather than a repeated pattern. PowerShell Script Block Logging is off by default and is not enabled by the Microsoft or CIS baselines, so without the *Turn on PowerShell Script Block Logging* policy this rule returns zero rows because the host is blind, not because nothing happened. The brief's other Windows leg (Sysmon EventID 1 `process_creation`) is not combined here: it carries `CommandLine` but not the full script text, so it cannot see an `-ErrorAction` flag set inside a script rather than on the command line, and AN0181/AN0183's Linux `nohup`/macOS `disown` legs are a different logsource entirely and are not covered by this rule. UNVERIFIED AS AUTHORED — derived from MITRE ATT&CK DET0067, not hand-written and not tested by its author. Any lab result is on this rule's own page.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.
Event| where ((EventID == 4104 and (ScriptBlockText contains "-ErrorAction SilentlyContinue" or ScriptBlockText contains "-ErrorAction Ignore" or ScriptBlockText contains "-EA SilentlyContinue" or ScriptBlockText contains "-EA Ignore")) and (ScriptBlockText contains "Invoke-Expression" or ScriptBlockText contains "Invoke-WebRequest" or ScriptBlockText contains "Invoke-RestMethod" or ScriptBlockText contains "Net.WebClient" or ScriptBlockText contains "DownloadString" or ScriptBlockText contains "Start-BitsTransfer"))
Splunk · SPL
Run this as a search.
index=* ((EventID="4104" AND (ScriptBlockText="*-ErrorAction SilentlyContinue*" OR ScriptBlockText="*-ErrorAction Ignore*" OR ScriptBlockText="*-EA SilentlyContinue*" OR ScriptBlockText="*-EA Ignore*")) AND (ScriptBlockText="*Invoke-Expression*" OR ScriptBlockText="*Invoke-WebRequest*" OR ScriptBlockText="*Invoke-RestMethod*" OR ScriptBlockText="*Net.WebClient*" OR ScriptBlockText="*DownloadString*" OR ScriptBlockText="*Start-BitsTransfer*"))Elastic · ES|QL
Run this as a search.
FROM logs-*| WHERE ((event.code == 4104 AND (TO_LOWER(powershell.file.script_block_text) LIKE "*-erroraction silentlycontinue*" OR TO_LOWER(powershell.file.script_block_text) LIKE "*-erroraction ignore*" OR TO_LOWER(powershell.file.script_block_text) LIKE "*-ea silentlycontinue*" OR TO_LOWER(powershell.file.script_block_text) LIKE "*-ea ignore*")) AND (TO_LOWER(powershell.file.script_block_text) LIKE "*invoke-expression*" OR TO_LOWER(powershell.file.script_block_text) LIKE "*invoke-webrequest*" OR TO_LOWER(powershell.file.script_block_text) LIKE "*invoke-restmethod*" OR TO_LOWER(powershell.file.script_block_text) LIKE "*net.webclient*" OR TO_LOWER(powershell.file.script_block_text) LIKE "*downloadstring*" OR TO_LOWER(powershell.file.script_block_text) LIKE "*start-bitstransfer*"))
Wazuh · XML rule
Deploy to your manager — this is a rule, not a search.
<group name="sigma,windows,"> <!-- Rule ids must be unique on your manager; 100000+ is the user range. --> <rule id="100000" level="5"> <!-- Set <if_sid> to the decoder/base rule for windows so this only evaluates relevant events. --> <field name="EventID" type="pcre2">(?i)^4104$</field> <field name="ScriptBlockText" type="pcre2">(?i)(-ErrorAction SilentlyContinue|-ErrorAction Ignore|-EA SilentlyContinue|-EA Ignore)</field> <field name="ScriptBlockText" type="pcre2">(?i)(Invoke-Expression|Invoke-WebRequest|Invoke-RestMethod|Net\.WebClient|DownloadString|Start-BitsTransfer)</field> <description>PowerShell script block suppresses errors around a download or exec cmdlet</description> <mitre> <id>T1564.011</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.