Detection rules › Sigma

Rundll32 Execution With Uncommon DLL Extension

Status
test
Severity
medium
Log source
product windows, category process_creation
Author
Tim Shelton, Florian Roth (Nextron Systems), Yassine Oukessou
Source
github.com/SigmaHQ/sigma

Detects the execution of rundll32 with a command line that doesn't contain a common extension

MITRE ATT&CK coverage

Event coverage

ProviderEventTitle
SysmonEvent ID 1Process creation

Rule body yaml

title: Rundll32 Execution With Uncommon DLL Extension
id: c3a99af4-35a9-4668-879e-c09aeb4f2bdf
status: test
description: Detects the execution of rundll32 with a command line that doesn't contain a common extension
references:
    - https://twitter.com/mrd0x/status/1481630810495139841?s=12
author: Tim Shelton, Florian Roth (Nextron Systems), Yassine Oukessou
date: 2022-01-13
modified: 2024-04-04
tags:
    - attack.stealth
    - attack.t1218.011
logsource:
    category: process_creation
    product: windows
detection:
    selection:
        - Image|endswith: '\rundll32.exe'
        - OriginalFileName: 'RUNDLL32.EXE'
    filter_main_null:
        CommandLine: null
    filter_main_empty:
        CommandLine: ''
    filter_main_known_extension:
        - CommandLine|contains:
              # Note: This aims to cover: single and double quotes in addition to spaces and comma "," usage.
              - '.cpl '
              - '.cpl,'
              - '.cpl"'
              - ".cpl'"
              - '.dll '
              - '.dll,'
              - '.dll"'
              - ".dll'"
              - '.inf '
              - '.inf,'
              - '.inf"'
              - ".inf'"
        - CommandLine|endswith:
              # Note: This aims to cover: single and double quotes in addition to spaces and comma "," usage.
              - '.cpl'
              - '.dll'
              - '.inf'
    filter_main_localserver:
        CommandLine|contains: ' -localserver '
    filter_main_zzzzInvokeManagedCustomActionOutOfProc:
        ParentImage|endswith: '\msiexec.exe'
        CommandLine|contains|all:
            - ':\Windows\Installer\'
            - '.tmp'
            - 'zzzzInvokeManagedCustomActionOutOfProc'
    filter_optional_EdgeUpdate:
        ParentCommandLine|contains|all:
            - ':\Users\'
            - '\AppData\Local\Microsoft\EdgeUpdate\Install\{'
            - '\EDGEMITMP_'
            - '.tmp\setup.exe'
            - '--install-archive='
            - '--previous-version='
            - '--msedgewebview --verbose-logging --do-not-launch-msedge --user-level'
    condition: selection and not 1 of filter_main_* and not 1 of filter_optional_*
falsepositives:
    - Unknown
level: medium

Stages and Predicates

Stage 0: condition

selection and not 1 of filter_main_* and not 1 of filter_optional_*

Stage 1: selection

selection:
    - Image|endswith: '\rundll32.exe'
    - OriginalFileName: 'RUNDLL32.EXE'

Stage 2: not filter_main_*

filter_main_null:
    CommandLine: null
filter_main_empty:
    CommandLine: ''
filter_main_known_extension:
    - CommandLine|contains:
          - '.cpl '
          - '.cpl,'
          - '.cpl"'
          - ".cpl'"
          - '.dll '
          - '.dll,'
          - '.dll"'
          - ".dll'"
          - '.inf '
          - '.inf,'
          - '.inf"'
          - ".inf'"
    - CommandLine|endswith:
          - '.cpl'
          - '.dll'
          - '.inf'
filter_main_localserver:
    CommandLine|contains: ' -localserver '
filter_main_zzzzInvokeManagedCustomActionOutOfProc:
    ParentImage|endswith: '\msiexec.exe'
    CommandLine|contains|all:
        - ':\Windows\Installer\'
        - '.tmp'
        - 'zzzzInvokeManagedCustomActionOutOfProc'

Stage 3: not filter_optional_EdgeUpdate

filter_optional_EdgeUpdate:
    ParentCommandLine|contains|all:
        - ':\Users\'
        - '\AppData\Local\Microsoft\EdgeUpdate\Install\{'
        - '\EDGEMITMP_'
        - '.tmp\setup.exe'
        - '--install-archive='
        - '--previous-version='
        - '--msedgewebview --verbose-logging --do-not-launch-msedge --user-level'

Exclusions

Top-level NOT(...) conjuncts: predicates this rule actively suppresses.

FieldKindExcluded values
CommandLinematch.tmp
CommandLinematch:\Windows\Installer\
CommandLinematchzzzzInvokeManagedCustomActionOutOfProc
ParentImageends_with\msiexec.exe
CommandLineends_with.cpl
CommandLineends_with.dll
CommandLineends_with.inf
CommandLineis_null(no value, null check)
CommandLinematch -localserver
CommandLinematch.cpl
CommandLinematch.cpl'
CommandLinematch.cpl,
CommandLinematch.cpl"
CommandLinematch.dll
CommandLinematch.dll'
CommandLinematch.dll,
CommandLinematch.dll"
CommandLinematch.inf
CommandLinematch.inf'
CommandLinematch.inf,
CommandLinematch.inf"
ParentCommandLinematch--install-archive=
ParentCommandLinematch--msedgewebview --verbose-logging --do-not-launch-msedge --user-level
ParentCommandLinematch--previous-version=
ParentCommandLinematch.tmp\setup.exe
ParentCommandLinematch:\Users\
ParentCommandLinematch\AppData\Local\Microsoft\EdgeUpdate\Install\{
ParentCommandLinematch\EDGEMITMP_

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
Imageends_with
  • \rundll32.exe corpus 95 (sigma 95)
OriginalFileNameeq
  • RUNDLL32.EXE corpus 62 (sigma 35, splunk 21, elastic 6)