Suspicious Explorer Child Process

Identifies a suspicious Windows explorer child process. Explorer.exe can be abused to launch malicious scripts or executables from a trusted parent process.

Elastic rule (View on GitHub)

 1[metadata]
 2creation_date = "2020/10/29"
 3integration = ["endpoint", "windows"]
 4maturity = "production"
 5min_stack_comments = "New fields added: required_fields, related_integrations, setup"
 6min_stack_version = "8.3.0"
 7updated_date = "2023/06/22"
 8
 9[rule]
10author = ["Elastic"]
11description = """
12Identifies a suspicious Windows explorer child process. Explorer.exe can be abused to launch malicious scripts or
13executables from a trusted parent process.
14"""
15from = "now-9m"
16index = ["logs-endpoint.events.*", "winlogbeat-*", "logs-windows.*", "endgame-*"]
17language = "eql"
18license = "Elastic License v2"
19name = "Suspicious Explorer Child Process"
20note = """## Setup
21
22If enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2, events will not define `event.ingested` and default fallback for EQL rules was not added until 8.2, so you will need to add a custom pipeline to populate `event.ingested` to @timestamp for this rule to work.
23"""
24risk_score = 47
25rule_id = "9a5b4e31-6cde-4295-9ff7-6be1b8567e1b"
26severity = "medium"
27tags = ["Domain: Endpoint", "OS: Windows", "Use Case: Threat Detection", "Tactic: Initial Access", "Data Source: Elastic Endgame", "Data Source: Elastic Defend"]
28timestamp_override = "event.ingested"
29type = "eql"
30
31query = '''
32process where host.os.type == "windows" and event.type == "start" and
33  (
34   process.name : ("cscript.exe", "wscript.exe", "powershell.exe", "rundll32.exe", "cmd.exe", "mshta.exe", "regsvr32.exe") or
35   process.pe.original_file_name in ("cscript.exe", "wscript.exe", "PowerShell.EXE", "RUNDLL32.EXE", "Cmd.Exe", "MSHTA.EXE", "REGSVR32.EXE")
36  ) and
37  /* Explorer started via DCOM */
38  process.parent.name : "explorer.exe" and process.parent.args : "-Embedding" and
39  not process.parent.args:
40          (
41            /* Noisy CLSID_SeparateSingleProcessExplorerHost Explorer COM Class IDs   */
42            "/factory,{5BD95610-9434-43C2-886C-57852CC8A120}",
43            "/factory,{ceff45ee-c862-41de-aee2-a022c81eda92}"
44          )
45'''
46
47
48[[rule.threat]]
49framework = "MITRE ATT&CK"
50[[rule.threat.technique]]
51id = "T1566"
52name = "Phishing"
53reference = "https://attack.mitre.org/techniques/T1566/"
54[[rule.threat.technique.subtechnique]]
55id = "T1566.001"
56name = "Spearphishing Attachment"
57reference = "https://attack.mitre.org/techniques/T1566/001/"
58
59[[rule.threat.technique.subtechnique]]
60id = "T1566.002"
61name = "Spearphishing Link"
62reference = "https://attack.mitre.org/techniques/T1566/002/"
63
64
65
66[rule.threat.tactic]
67id = "TA0001"
68name = "Initial Access"
69reference = "https://attack.mitre.org/tactics/TA0001/"

Setup

If enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2, events will not define event.ingested and default fallback for EQL rules was not added until 8.2, so you will need to add a custom pipeline to populate event.ingested to @timestamp for this rule to work.

Related rules

to-top