Detection rules › Elastic

Suspicious ImageLoad from an ISO Mounted Device

Time window
1m
Sequence by
process.entity_id
Source
github.com/elastic/protections-artifacts

Identifies instances of RunDLL32, Regsvr32 or Odbcconf loading a DLL from a mounted ISO device. Adversaries may deliver a malicious payload via an ISO file and execute it via rundll32.exe, regsvr32 or Odbcconf.

MITRE ATT&CK coverage

Rule body

[rule]
description = """
Identifies instances of RunDLL32, Regsvr32 or Odbcconf loading a DLL from a mounted ISO device. Adversaries may deliver
a malicious payload via an ISO file and execute it via rundll32.exe, regsvr32 or Odbcconf.
"""
id = "779b9502-7912-4773-95a1-51cd702a71c8"
license = "Elastic License v2"
name = "Suspicious ImageLoad from an ISO Mounted Device"
os_list = ["windows"]
reference = [
    "https://www.elastic.co/security-labs/Hunting-for-Suspicious-Windows-Libraries-for-Execution-and-Evasion",
]
version = "1.0.29"

query = '''
sequence by process.entity_id with maxspan=1m
 [process where event.action == "start" and
  process.name : ("rundll32.exe", "regsvr32.exe", "odbcconf.exe", "certoc.exe") and
  process.parent.name : ("cmd.exe", "explorer.exe", "powershell.exe", "winrar.exe", "7zFM.exe")]
 [library where process.name : ("rundll32.exe", "regsvr32.exe", "odbcconf.exe", "certoc.exe") and
  not dll.code_signature.trusted == true and not user.id : ("S-1-5-18", "S-1-5-19", "S-1-5-20") and

  /* loading dll from a mounted device */
  (dll.path : "\\Device\\CdRom*" or dll.path regex """[d-zD-Z]:\\[0-9a-zA-Z\.]+""")]
'''

min_endpoint_version = "7.16.0"
optional_actions = []
[[actions]]
action = "kill_process"
field = "process.entity_id"
state = 0

[[threat]]
framework = "MITRE ATT&CK"
[[threat.technique]]
id = "T1218"
name = "System Binary Proxy Execution"
reference = "https://attack.mitre.org/techniques/T1218/"
[[threat.technique.subtechnique]]
id = "T1218.010"
name = "Regsvr32"
reference = "https://attack.mitre.org/techniques/T1218/010/"

[[threat.technique.subtechnique]]
id = "T1218.011"
name = "Rundll32"
reference = "https://attack.mitre.org/techniques/T1218/011/"



[threat.tactic]
id = "TA0005"
name = "Defense Evasion"
reference = "https://attack.mitre.org/tactics/TA0005/"

[internal]
min_endpoint_version = "7.16.0"

Stages and Predicates

Ordered sequence: each step below must occur in order within 1m, correlated by process.entity_id.

Stage 1: process

[process where event.action == "start" and
  process.name : ("rundll32.exe", "regsvr32.exe", "odbcconf.exe", "certoc.exe") and
  process.parent.name : ("cmd.exe", "explorer.exe", "powershell.exe", "winrar.exe", "7zFM.exe")]

Stage 2: library

[library where process.name : ("rundll32.exe", "regsvr32.exe", "odbcconf.exe", "certoc.exe") and
  not dll.code_signature.trusted == true and not user.id : ("S-1-5-18", "S-1-5-19", "S-1-5-20") and
  (dll.path : "\\Device\\CdRom*" or dll.path regex """[d-zD-Z]:\\[0-9a-zA-Z\.]+""")]

Exclusions

The rule actively suppresses these predicates.

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
dll.pathregex_match
  • [d-zD-Z]:\[0-9a-zA-Z.]+
field:"ImageLoaded" kind:regex_match value:"[d-zD-Z]:\[0-9a-zA-Z.]+"
dll.pathwildcard
  • \Device\CdRom*
field:"ImageLoaded" kind:wildcard value:"\Device\CdRom*"
event.actioneq
  • start corpus 391 (elastic 391)
field:"EventType" kind:eq value:"start"
process.namewildcard
  • certoc.exe corpus 3 (elastic 3)
  • odbcconf.exe corpus 14 (elastic 11, splunk 3)
  • regsvr32.exe corpus 73 (elastic 68, splunk 5)
  • rundll32.exe corpus 126 (elastic 100, splunk 26)
field:"process_name" kind:wildcard
process.parent.namewildcard
  • 7zFM.exe corpus 12 (elastic 12)
  • cmd.exe corpus 36 (elastic 31, splunk 4, kusto 1)
  • explorer.exe corpus 51 (elastic 50, splunk 1)
  • powershell.exe corpus 39 (elastic 36, kusto 2, splunk 1)
  • winrar.exe corpus 15 (elastic 14, splunk 1)
field:"parent_process_name" kind:wildcard