Unusual Network Connection via RunDLL32

edit

Identifies unusual instances of rundll32.exe making outbound network connections. This may indicate adversarial Command and Control activity.

Rule type: eql

Rule indices:

  • winlogbeat-*
  • logs-endpoint.events.*
  • logs-windows.*

Severity: medium

Risk score: 47

Runs every: 5 minutes

Searches indices from: now-9m (Date Math format, see also Additional look-back time)

Maximum alerts per execution: 100

References:

Tags:

  • Elastic
  • Host
  • Windows
  • Threat Detection
  • Defense Evasion
  • has_guide

Version: 101 (version history)

Added (Elastic Stack release): 7.6.0

Last modified (Elastic Stack release): 8.5.0

Rule authors: Elastic

Rule license: Elastic License v2

Investigation guide

edit
## Triage and analysis

### Investigating Unusual Network Connection via RunDLL32

RunDLL32 is a built-in Windows utility and also a vital component used by the operating system itself. The functionality
provided by RunDLL32 to execute Dynamic Link Libraries (DLLs) is widely abused by attackers, because it makes it hard to
differentiate malicious activity from normal operations.

This rule looks for external network connections established using RunDLL32 when the utility is being executed with no
arguments, which can potentially indicate command and control activity.

#### Possible investigation steps

- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files
for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.
- Investigate other alerts associated with the user/host during the past 48 hours.
- Investigate the target host that RunDLL32 is communicating with.
  - Check if the domain is newly registered or unexpected.
  - Check the reputation of the domain or IP address.
- Identify the target computer and its role in the IT environment.
- Assess whether this behavior is prevalent in the environment by looking for similar occurrences across hosts.

### False positive analysis

- This activity is unlikely to happen legitimately. Benign true positives (B-TPs) can be added as exceptions if necessary.

### Response and remediation

- Initiate the incident response process based on the outcome of the triage.
- Isolate the involved hosts to prevent further post-compromise behavior.
- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are
identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business
systems, and web services.
- Run a full scan using the antimalware tool in place. This scan can reveal additional artifacts left in the system,
persistence mechanisms, and malware components.
- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.
- Review the privileges assigned to the user to ensure that the least privilege principle is being followed.
- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the
mean time to respond (MTTR).

Rule query

edit
sequence by host.id, process.entity_id with maxspan=1m [process
where event.type == "start" and process.name : "rundll32.exe" and
process.args_count == 1] [network where process.name :
"rundll32.exe" and not cidrmatch(destination.ip, "10.0.0.0/8",
"127.0.0.0/8", "169.254.0.0/16", "172.16.0.0/12", "192.0.0.0/24",
"192.0.0.0/29", "192.0.0.8/32", "192.0.0.9/32", "192.0.0.10/32",
"192.0.0.170/32", "192.0.0.171/32", "192.0.2.0/24",
"192.31.196.0/24", "192.52.193.0/24", "192.168.0.0/16",
"192.88.99.0/24", "224.0.0.0/4", "100.64.0.0/10",
"192.175.48.0/24","198.18.0.0/15", "198.51.100.0/24",
"203.0.113.0/24", "240.0.0.0/4", "::1", "FE80::/10",
"FF00::/8")]

Threat mapping

edit

Framework: MITRE ATT&CKTM

Rule version history

edit
Version 101 (8.5.0 release)
  • Updated query, changed from:

    sequence by host.id, process.entity_id with maxspan=1m [process
    where event.type in ("start", "process_started") and process.name :
    "rundll32.exe" and process.args_count == 1] [network where
    process.name : "rundll32.exe" and not cidrmatch(destination.ip,
    "10.0.0.0/8", "127.0.0.0/8", "169.254.0.0/16", "172.16.0.0/12",
    "192.0.0.0/24", "192.0.0.0/29", "192.0.0.8/32", "192.0.0.9/32",
    "192.0.0.10/32", "192.0.0.170/32", "192.0.0.171/32",
    "192.0.2.0/24", "192.31.196.0/24", "192.52.193.0/24",
    "192.168.0.0/16", "192.88.99.0/24", "224.0.0.0/4",
    "100.64.0.0/10", "192.175.48.0/24","198.18.0.0/15", "198.51.100.0/24",
    "203.0.113.0/24", "240.0.0.0/4", "::1", "FE80::/10",
    "FF00::/8")]
Version 12 (8.4.0 release)
  • Formatting only
Version 10 (7.14.0 release)
  • Updated query, changed from:

    sequence by host.id, process.entity_id with maxspan=1m [process
    where event.type in ("start", "process_started") and process.name :
    "rundll32.exe" and process.args_count == 1] [network where
    process.name : "rundll32.exe" and not cidrmatch(destination.ip,
    "10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16", "127.0.0.0/8",
    "FE80::/10", "::1/128")]
Version 9 (7.13.0 release)
  • Updated query, changed from:

    sequence by host.id, process.entity_id with maxspan=1m [process
    where event.type in ("start", "process_started", "info") and
    process.name : "rundll32.exe" and process.args_count == 1] [network
    where process.name : "rundll32.exe" and network.protocol != "dns" and
    network.direction == "outgoing" and not cidrmatch(destination.ip,
    "10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16", "127.0.0.0/8")]
Version 8 (7.12.0 release)
  • Formatting only
Version 7 (7.11.0 release)
  • Updated query, changed from:

    sequence by process.entity_id [process where process.name :
    "rundll32.exe" and event.type == "start"] [network where
    process.name : "rundll32.exe" and not cidrmatch(destination.ip,
    "10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16", "127.0.0.0/8")]
Version 6 (7.10.0 release)
  • Updated query, changed from:

    event.category:network and event.type:connection and
    process.name:rundll32.exe and not destination.ip:(10.0.0.0/8 or
    172.16.0.0/12 or 192.168.0.0/16 or 127.0.0.0/8)
Version 5 (7.9.1 release)
  • Formatting only
Version 4 (7.9.0 release)
  • Updated query, changed from:

    process.name:rundll32.exe and event.action:"Network connection
    detected (rule: NetworkConnect)" and not destination.ip:(10.0.0.0/8 or
    172.16.0.0/12 or 192.168.0.0/16 or 127.0.0.0/8)
Version 3 (7.8.0 release)
  • Updated query, changed from:

    process.name:rundll32.exe and event.action:"Network connection
    detected (rule: NetworkConnect)" and not destination.ip:(10.0.0.0/8 or
    172.16.0.0/12 or 192.168.0.0/16)
Version 2 (7.7.0 release)
  • Updated query, changed from:

    process.name:rundll32.exe and event.action:"Network connection
    detected (rule: NetworkConnect)" and not destination.ip:10.0.0.0/8 and
    not destination.ip:172.16.0.0/12 and not destination.ip:192.168.0.0/16