Windows PowerShell Script Block Matches Common Reflection and Injection Keywords

Alerts on PowerShell script block text containing reflection, dynamic assembly loading, and injection-related keywords.

FreeReviewedSigma · Medium · v2
Product
windows
Category
ps_script
Author
Florian Roth (Nextron Systems), Perez Diego (@darkquassar), Tuan Le (NCSGroup) (SigmaHQ), DRL 1.1
Published
2019-02-11
Updated
2026-07-31
title: Windows PowerShell Script Block Matches Common Reflection and Injection Keywords
id: b1c55a72-8de9-496e-b3ff-bf427b3b46d5
status: test
description: This rule flags PowerShell script block content containing specific .NET reflection, assembly loading, interop, and injection-related keywords often seen in exploitation frameworks. Attackers may use these constructs to load assemblies dynamically, resolve unmanaged functions, or perform execution and process manipulation within PowerShell. It relies on telemetry that captures PowerShell script block text, such as Script Block Logging, and matches on substring presence for the listed patterns.
references:
  - https://posts.specterops.io/entering-a-covenant-net-command-and-control-e11038bcf462
  - https://github.com/PowerShellMafia/PowerSploit/blob/d943001a7defb5e0d1657085a77a0e78609be58f/CodeExecution/Invoke-ReflectivePEInjection.ps1
  - https://github.com/hlldz/Phant0m/blob/30c2935d8cf4aafda17ee2fab7cd0c4aa9a607c2/old/Invoke-Phant0m.ps1
  - https://gist.github.com/MHaggis/0dbe00ad401daa7137c81c99c268cfb7
  - https://github.com/SigmaHQ/sigma/blob/master/rules/windows/powershell/powershell_script/posh_ps_susp_keywords.yml
author: Florian Roth (Nextron Systems), Perez Diego (@darkquassar), Tuan Le (NCSGroup), Huntrule Team
date: 2019-02-11
modified: 2023-04-21
tags:
  - attack.execution
  - attack.t1059.001
logsource:
  product: windows
  category: ps_script
  definition: "Requirements: Script Block Logging must be enabled"
detection:
  selection:
    ScriptBlockText|contains:
      - System.Reflection.Assembly.Load($
      - "[System.Reflection.Assembly]::Load($"
      - "[Reflection.Assembly]::Load($"
      - System.Reflection.AssemblyName
      - Reflection.Emit.AssemblyBuilderAccess
      - Reflection.Emit.CustomAttributeBuilder
      - Runtime.InteropServices.UnmanagedType
      - Runtime.InteropServices.DllImportAttribute
      - SuspendThread
      - rundll32
  condition: selection
falsepositives:
  - Unknown
level: medium
license: DRL-1.1
related:
  - id: 1f49f2ab-26bc-48b3-96cc-dcffbc93eadf
    type: derived