Detection rules › Sigma

Potential WinAPI Calls Via PowerShell Scripts

Status
test
Severity
high
Log source
category ps_script, product windows
Author
Nasreddine Bencherchali (Nextron Systems), Nikita Nazarov, oscd.community
Source
github.com/SigmaHQ/sigma

Detects usage of WinAPI functions in PowerShell scripts. It may indicate attempts to perform actions such as process injection, token stealing, or other malicious activities that leverage Windows API calls. These techniques are commonly used to evade traditional file-based detections by loading and executing code directly in memory.

MITRE ATT&CK coverage

Telemetry coverage

Rule body

title: Potential WinAPI Calls Via PowerShell Scripts
id: 03d83090-8cba-44a0-b02f-0b756a050306
related:
    - id: ba3f5c1b-6272-4119-9dbd-0bc8d21c2702
      type: similar
status: test
description: |
    Detects usage of WinAPI functions in PowerShell scripts.
    It may indicate attempts to perform actions such as process injection, token stealing, or other malicious activities that leverage Windows API calls.
    These techniques are commonly used to evade traditional file-based detections by loading and executing code directly in memory.
references:
    - https://speakerdeck.com/heirhabarov/hunting-for-powershell-abuse
    - https://github.com/PowerShellMafia/PowerSploit/blob/1980f403ee78234eae4d93b50890d02f827a099f/CodeExecution/Invoke-Shellcode.ps1
    - https://thedfirreport.com/2021/08/29/cobalt-strike-a-defenders-guide/
author: Nasreddine Bencherchali (Nextron Systems), Nikita Nazarov, oscd.community
date: 2020-10-06
modified: 2026-04-29
tags:
    - attack.execution
    - attack.t1059.001
    - attack.t1106
    - attack.stealth
    - attack.t1620
logsource:
    product: windows
    category: ps_script
    definition: 'Requirements: Script Block Logging must be enabled'
detection:
    # Note: Add more suspicious combinations in the form of different selections
    selection_injection:
        ScriptBlockText|contains|all:
            - 'VirtualAlloc'
            - 'OpenProcess'
            - 'WriteProcessMemory'
            - 'CreateRemoteThread'
    selection_token_steal:
        ScriptBlockText|contains|all:
            - 'OpenProcessToken'
            - 'LookupPrivilegeValue'
            - 'AdjustTokenPrivileges'
    selection_duplicate_token:
        ScriptBlockText|contains|all:
            - 'OpenProcessToken'
            - 'DuplicateTokenEx'
            - 'CloseHandle'
    selection_process_write_read:
        ScriptBlockText|contains|all:
            - 'WriteProcessMemory'
            - 'VirtualAlloc'
            - 'ReadProcessMemory'
            - 'VirtualFree'
    selection_local_shellcode_injection:
        ScriptBlockText|contains|all:
            - 'VirtualAlloc'
            - 'GetDelegateForFunctionPointer'
            - 'Marshal.Copy'
    condition: 1 of selection_*
falsepositives:
    - Unknown
level: high

Stages and Predicates

Stage 0: condition

1 of selection_*

Stage 1: selection_injection

selection_injection:
    ScriptBlockText|contains|all:
        - 'VirtualAlloc'
        - 'OpenProcess'
        - 'WriteProcessMemory'
        - 'CreateRemoteThread'

Stage 2: selection_token_steal

selection_token_steal:
    ScriptBlockText|contains|all:
        - 'OpenProcessToken'
        - 'LookupPrivilegeValue'
        - 'AdjustTokenPrivileges'

Stage 3: selection_duplicate_token

selection_duplicate_token:
    ScriptBlockText|contains|all:
        - 'OpenProcessToken'
        - 'DuplicateTokenEx'
        - 'CloseHandle'

Stage 4: selection_process_write_read

selection_process_write_read:
    ScriptBlockText|contains|all:
        - 'WriteProcessMemory'
        - 'VirtualAlloc'
        - 'ReadProcessMemory'
        - 'VirtualFree'

Stage 5: selection_local_shellcode_injection

selection_local_shellcode_injection:
    ScriptBlockText|contains|all:
        - 'VirtualAlloc'
        - 'GetDelegateForFunctionPointer'
        - 'Marshal.Copy'

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
ScriptBlockTextmatch
  • AdjustTokenPrivileges corpus 3 (sigma 3)
  • CloseHandle corpus 2 (sigma 2)
  • CreateRemoteThread corpus 2 (sigma 2)
  • DuplicateTokenEx corpus 2 (sigma 2)
  • GetDelegateForFunctionPointer corpus 3 (sigma 3)
  • LookupPrivilegeValue
  • Marshal.Copy
  • OpenProcess corpus 2 (sigma 2)
  • OpenProcessToken corpus 2 (sigma 2)
  • ReadProcessMemory corpus 2 (sigma 2)
  • VirtualAlloc corpus 2 (sigma 2)
  • VirtualFree corpus 2 (sigma 2)
  • WriteProcessMemory corpus 2 (sigma 2)
field:"ScriptBlockText" kind:match