Detection rules › Sigma

Potential Emotet Rundll32 Execution

Status
test
Severity
critical
Log source
product windows, category process_creation
Author
FPT.EagleEye
Source
github.com/SigmaHQ/sigma

Detecting Emotet DLL loading by looking for rundll32.exe processes with command lines ending in ,RunDLL or ,Control_RunDLL

MITRE ATT&CK coverage

Event coverage

ProviderEventTitle
SysmonEvent ID 1Process creation

Rule body yaml

title: Potential Emotet Rundll32 Execution
id: 54e57ce3-0672-46eb-a402-2c0948d5e3e9
status: test
description: Detecting Emotet DLL loading by looking for rundll32.exe processes with command lines ending in ,RunDLL or ,Control_RunDLL
references:
    - https://paste.cryptolaemus.com/emotet/2020/12/22/emotet-malware-IoCs_12-22-20.html
    - https://cyber.wtf/2021/11/15/guess-whos-back/
author: FPT.EagleEye
date: 2020-12-25
modified: 2023-02-21
tags:
    - attack.stealth
    - attack.t1218.011
    - detection.emerging-threats
logsource:
    category: process_creation
    product: windows
detection:
    selection_img:
        - Image|endswith: '\rundll32.exe'
        - OriginalFileName: 'RUNDLL32.EXE'
    selection_cli:
        CommandLine|endswith:
            - ',RunDLL'
            - ',Control_RunDLL'
            # - ',#1'  too generic - function load by ordinal is not Emotet specific
    filter_legitimate_dll:
        CommandLine|endswith:
            - '.dll,Control_RunDLL'
            - '.dll",Control_RunDLL'
            - '.dll'',Control_RunDLL'
    filter_ide:
        ParentImage|endswith: '\tracker.exe' # When Visual Studio compile NodeJS program, it might use MSBuild to create tracker.exe and then, the tracker.exe fork rundll32.exe
    condition: all of selection_* and not 1 of filter_*
falsepositives:
    - Unknown
level: critical

Stages and Predicates

Stage 0: condition

all of selection_* and not 1 of filter_*

Stage 1: selection_img

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

Stage 2: selection_cli

selection_cli:
    CommandLine|endswith:
        - ',RunDLL'
        - ',Control_RunDLL'

Stage 3: not filter_*

filter_legitimate_dll:
    CommandLine|endswith:
        - '.dll,Control_RunDLL'
        - '.dll",Control_RunDLL'
        - '.dll'',Control_RunDLL'
filter_ide:
    ParentImage|endswith: '\tracker.exe'

Exclusions

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

FieldKindExcluded values
CommandLineends_with.dll',Control_RunDLL
CommandLineends_with.dll,Control_RunDLL
CommandLineends_with.dll",Control_RunDLL
ParentImageends_with\tracker.exe

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