Windows PowerShell: Silence EmpireDNSAgent script matches DNS tunnel and remote shutdown/restart activity

Flags PowerShell ScriptBlockText that combines Empire process-control indicators with dnscat DNS tunneling commands.

FreeReviewedSigma · Critical · v2
Product
windows
Category
ps_script
Author
Alina Stepchenkova, Group-IB, oscd.community (SigmaHQ), DRL 1.1
Published
2019-11-01
Updated
2026-07-31
title: "Windows PowerShell: Silence EmpireDNSAgent script matches DNS tunnel and remote shutdown/restart activity"
id: 4b3cdd2c-db7a-492c-a439-8e5e45e19f2c
status: test
description: This rule flags PowerShell script block logging where the script contains both Empire-like process control indicators (e.g., Stop-Computer/Restart-Computer and exception handling) and DNS tunneling behavior associated with Dnscat2 (including nslookup command execution and specific tunnel/session fields). The combined pattern matters because it can indicate coordinated remote command/control and host impact using a DNS-based channel. It relies on Windows PowerShell Script Block Logging telemetry to capture ScriptBlockText content for matching.
references:
  - https://www.group-ib.com/resources/threat-research/silence_2.0.going_global.pdf
  - https://github.com/SigmaHQ/sigma/blob/master/rules/windows/powershell/powershell_script/posh_ps_apt_silence_eda.yml
author: Alina Stepchenkova, Group-IB, oscd.community, Huntrule Team
date: 2019-11-01
modified: 2023-04-03
tags:
  - attack.execution
  - attack.t1059.001
  - attack.command-and-control
  - attack.t1071.004
  - attack.t1572
  - attack.impact
  - attack.t1529
  - attack.g0091
  - attack.s0363
logsource:
  product: windows
  category: ps_script
  definition: "Requirements: Script Block Logging must be enabled"
detection:
  empire:
    ScriptBlockText|contains|all:
      - System.Diagnostics.Process
      - Stop-Computer
      - Restart-Computer
      - Exception in execution
      - $cmdargs
      - Close-Dnscat2Tunnel
  dnscat:
    ScriptBlockText|contains|all:
      - set type=$LookupType`nserver
      - $Command | nslookup 2>&1 | Out-String
      - New-RandomDNSField
      - "[Convert]::ToString($SYNOptions, 16)"
      - $Session.Dead = $True
      - $Session["Driver"] -eq
  condition: empire and dnscat
falsepositives:
  - Unknown
level: critical
license: DRL-1.1
related:
  - id: 3ceb2083-a27f-449a-be33-14ec1b7cc973
    type: derived