Detection rules › Sigma

Potential WinAPI Calls Via PowerShell Scripts

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

Detects use of WinAPI functions in PowerShell scripts

MITRE ATT&CK coverage

Event coverage

Rule body yaml

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 use of WinAPI functions in PowerShell scripts
references:
    - https://speakerdeck.com/heirhabarov/hunting-for-powershell-abuse
author: Nasreddine Bencherchali (Nextron Systems), Nikita Nazarov, oscd.community
date: 2020-10-06
modified: 2023-06-20
tags:
    - attack.execution
    - attack.t1059.001
    - attack.t1106
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'
    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'

Indicators

Each row is a field, operator, and value that the rule matches. The corpus column counts how many other rules in the catalog look for the same combination: high numbers point to widely-used, community-vetted indicators. Blank or 1 shows that the indicator is specific to this rule.

FieldKindValues
ScriptBlockTextmatch
  • AdjustTokenPrivileges corpus 3 (sigma 3)
  • CloseHandle corpus 2 (sigma 2)
  • CreateRemoteThread corpus 2 (sigma 2)
  • DuplicateTokenEx corpus 2 (sigma 2)
  • LookupPrivilegeValue
  • 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)