771be70c38
* [Rule Tuning] Windows High-Severity Rules Revamp - 6 * ++
198 lines
10 KiB
TOML
198 lines
10 KiB
TOML
[metadata]
|
|
creation_date = "2021/11/27"
|
|
integration = ["windows", "system"]
|
|
maturity = "production"
|
|
updated_date = "2026/04/27"
|
|
|
|
[rule]
|
|
author = ["Elastic"]
|
|
description = """
|
|
Identifies the creation of an LSASS process clone via PssCaptureSnapShot where the parent process is the initial LSASS
|
|
process instance. This may indicate an attempt to evade detection and dump LSASS memory for credential access.
|
|
"""
|
|
from = "now-9m"
|
|
index = ["logs-system.security*", "logs-windows.forwarded*", "winlogbeat-*"]
|
|
language = "eql"
|
|
license = "Elastic License v2"
|
|
name = "Potential LSASS Clone Creation via PssCaptureSnapShot"
|
|
references = [
|
|
"https://www.matteomalvica.com/blog/2019/12/02/win-defender-atp-cred-bypass/",
|
|
"https://medium.com/@Achilles8284/the-birth-of-a-process-part-2-97c6fb9c42a2",
|
|
]
|
|
risk_score = 73
|
|
rule_id = "a16612dd-b30e-4d41-86a0-ebe70974ec00"
|
|
severity = "high"
|
|
tags = [
|
|
"Domain: Endpoint",
|
|
"OS: Windows",
|
|
"Use Case: Threat Detection",
|
|
"Tactic: Credential Access",
|
|
"Data Source: Windows Security Event Logs",
|
|
"Resources: Investigation Guide",
|
|
]
|
|
timestamp_override = "event.ingested"
|
|
type = "eql"
|
|
|
|
query = '''
|
|
process where host.os.type == "windows" and event.code:"4688" and
|
|
process.executable : "?:\\Windows\\System32\\lsass.exe" and
|
|
process.parent.executable : "?:\\Windows\\System32\\lsass.exe"
|
|
'''
|
|
|
|
note = """## Triage and analysis
|
|
|
|
### Investigating Potential LSASS Clone Creation via PssCaptureSnapShot
|
|
|
|
#### Possible investigation steps
|
|
|
|
- Does the alert-local 4688 event show the LSASS-clone pattern?
|
|
- Focus: `event.code`, `process.executable`, `process.parent.executable`, `host.id`, `@timestamp`.
|
|
- Implication: treat the alert as clone creation when both paths resolve to lsass.exe on one host; lower suspicion only when the tuple maps to stable EDR, forensic, or debugging workflow.
|
|
- Hint: pivot with `host.id` plus `process.entity_id`; if absent, use `host.id`, `process.pid`, and a tight alert-time window.
|
|
|
|
- Do surrounding 4688 events reveal the setup or dump-conversion chain?
|
|
- Focus: same-host 4688 around `@timestamp`, especially `process.executable`, `process.command_line`, `process.parent.executable`, `user.id`, and terms such as "PssCaptureSnapshot", "MiniDumpWriteDump", "comsvcs", "rundll32", "WerFault", "procdump", "createdump", archive utilities, or cleanup commands. $investigate_0
|
|
- Implication: escalate when shells, PowerShell, dump helpers, archive tools, cleanup, or remote-admin launchers appear without the same recognized collection workflow; absence of helpers leaves the clone unresolved, not benign.
|
|
|
|
- If file telemetry exists, did the clone create dumps, archives, or renamed outputs?
|
|
- Focus: same-host file or child-process telemetry for `file.path`, `file.Ext.original.path` matching ".dmp", ".zip", ".7z", or renamed outputs. $investigate_1. If unavailable, use surrounding 4688 commands with output files or archive utilities.
|
|
- Implication: escalate when dump paths, archive names, or cleanup commands appear around clone creation. Missing file telemetry is unresolved, not benign.
|
|
|
|
- Do authentication events show follow-on remote use, explicit credentials, or unusual logons?
|
|
- Why: clone creation often precedes credential use; later auth can show post-dump pivoting.
|
|
- Focus: same-host 4624, 4648, and 4625 around `@timestamp`, using `winlog.event_data.TargetUserName`, `winlog.logon.type`, and `source.ip`. $investigate_2
|
|
- Implication: escalate when the host or user quickly shows new remote-interactive, service, or explicit-credential logons from unusual sources. If auth telemetry is missing, record the gap and keep the finding unresolved.
|
|
|
|
- Does same-user or same-host activity repeat the evidence pattern?
|
|
- Focus: same-user 48h alerts for helper commands, dump/archive names, or post-clone authentication. $investigate_3
|
|
- Hint: if user scope is sparse or the host is shared, review same-host alerts for process, output, and authentication evidence. $investigate_4
|
|
- Implication: broaden scope when helper-command, output, or authentication patterns repeat around clone windows; no repeat keeps response local but does not clear the clone.
|
|
|
|
- Escalate for unauthorized LSASS clone creation, dump preparation, post-clone credential use, or clone creation on domain controllers, jump hosts, or privileged admin systems; close only when the alert tuple and recovery evidence bind to one recognized EDR, forensic, or debugging workflow with no conflicting dump-conversion, output, or authentication evidence; preserve artifacts and escalate when answers are mixed or visibility is incomplete.
|
|
|
|
### False positive analysis
|
|
|
|
- Recognized EDR/forensic collection or bounded lab validation can create snapshot-based clones. Require the alert tuple, helper command line, `user.id`, `host.id`, dump-output pattern, and no unexpected 4624 or 4648 activity inside that workflow; use records only to corroborate unresolved telemetry.
|
|
- Before creating an exception, validate that the same `host.id` and `user.id` cohort repeats the same process identity, helper-command, output-path, and authentication pattern across prior alerts from this rule. Avoid exceptions on "lsass.exe", `event.code`, or `host.id` alone.
|
|
|
|
### Response and remediation
|
|
|
|
- If confirmed benign, reverse temporary containment and document the collection workflow identity, launcher path, actor, host scope, dump-output pattern, and follow-on authentication pattern. Create an exception only if that pattern recurs across prior alerts.
|
|
- If suspicious but unconfirmed, preserve the alert 4688 event, surrounding helper-process events, command lines, dump/archive paths, rename evidence, affected identities, and post-clone authentication records before containment. Apply reversible containment first, such as heightened monitoring or temporary restrictions on remote admin access; escalate to host isolation only when dump artifacts or post-clone authentication confirm likely credential exposure and the host role can tolerate interruption.
|
|
- If confirmed malicious, preserve the alert event, helper-process chain, dump/archive paths, rename evidence, and affected identities before containment. Then isolate the host through endpoint response; if unavailable, escalate with preserved evidence. Block confirmed remote-auth or transfer sources before cleanup.
|
|
- On domain controllers, jump hosts, or privileged admin systems, scope which local, cached, service, or domain credentials may have been exposed, then reset or rotate affected credentials before removing collected artifacts.
|
|
- Before eradication, review related hosts and users for the same helper-process pattern, dump path, `winlog.logon.type`, or `source.ip` indicators. Then remove dump files, archives, helper tools, and persistence, and remediate the access or privilege path that enabled clone creation.
|
|
- Post-incident hardening: restrict memory-acquisition and dump tooling to recognized admin cohorts, retain supplemental file telemetry where its absence limited the case, and document the confirmed workflow or malicious pattern for future triage.
|
|
"""
|
|
|
|
setup = """## Setup
|
|
|
|
Audit Process Creation and Command Line must be enabled to generate the events used by this rule.
|
|
Setup instructions: https://ela.st/audit-process-creation
|
|
"""
|
|
|
|
[rule.investigation_fields]
|
|
field_names = [
|
|
"@timestamp",
|
|
"host.name",
|
|
"host.id",
|
|
"user.name",
|
|
"user.id",
|
|
"user.domain",
|
|
"process.entity_id",
|
|
"process.pid",
|
|
"process.executable",
|
|
"process.command_line",
|
|
"process.parent.entity_id",
|
|
"process.parent.pid",
|
|
"process.parent.name",
|
|
"process.parent.executable",
|
|
"process.parent.command_line",
|
|
]
|
|
|
|
[transform]
|
|
|
|
[[transform.investigate]]
|
|
label = "Same-host 4688 process creation events"
|
|
description = ""
|
|
providers = [
|
|
[
|
|
{ excluded = false, field = "host.id", queryType = "phrase", value = "{{host.id}}", valueType = "string" },
|
|
{ excluded = false, field = "event.code", queryType = "phrase", value = "4688", valueType = "string" }
|
|
]
|
|
]
|
|
relativeFrom = "now-1h"
|
|
relativeTo = "now"
|
|
|
|
[[transform.investigate]]
|
|
label = "File activity on the affected host"
|
|
description = ""
|
|
providers = [
|
|
[
|
|
{ excluded = false, field = "host.id", queryType = "phrase", value = "{{host.id}}", valueType = "string" },
|
|
{ excluded = false, field = "event.category", queryType = "phrase", value = "file", valueType = "string" }
|
|
]
|
|
]
|
|
relativeFrom = "now-1h"
|
|
relativeTo = "now"
|
|
|
|
[[transform.investigate]]
|
|
label = "Authentication events on the affected host"
|
|
description = ""
|
|
providers = [
|
|
[
|
|
{ excluded = false, field = "host.id", queryType = "phrase", value = "{{host.id}}", valueType = "string" },
|
|
{ excluded = false, field = "event.code", queryType = "phrase", value = "4624", valueType = "string" }
|
|
],
|
|
[
|
|
{ excluded = false, field = "host.id", queryType = "phrase", value = "{{host.id}}", valueType = "string" },
|
|
{ excluded = false, field = "event.code", queryType = "phrase", value = "4648", valueType = "string" }
|
|
],
|
|
[
|
|
{ excluded = false, field = "host.id", queryType = "phrase", value = "{{host.id}}", valueType = "string" },
|
|
{ excluded = false, field = "event.code", queryType = "phrase", value = "4625", valueType = "string" }
|
|
]
|
|
]
|
|
relativeFrom = "now-1h"
|
|
relativeTo = "now"
|
|
|
|
[[transform.investigate]]
|
|
label = "Alerts associated with the user"
|
|
description = ""
|
|
providers = [
|
|
[
|
|
{ excluded = false, field = "event.kind", queryType = "phrase", value = "signal", valueType = "string" },
|
|
{ excluded = false, field = "user.id", queryType = "phrase", value = "{{user.id}}", valueType = "string" }
|
|
]
|
|
]
|
|
relativeFrom = "now-48h/h"
|
|
relativeTo = "now"
|
|
|
|
[[transform.investigate]]
|
|
label = "Alerts associated with the host"
|
|
description = ""
|
|
providers = [
|
|
[
|
|
{ excluded = false, field = "event.kind", queryType = "phrase", value = "signal", valueType = "string" },
|
|
{ excluded = false, field = "host.id", queryType = "phrase", value = "{{host.id}}", valueType = "string" }
|
|
]
|
|
]
|
|
relativeFrom = "now-48h/h"
|
|
relativeTo = "now"
|
|
|
|
[[rule.threat]]
|
|
framework = "MITRE ATT&CK"
|
|
[[rule.threat.technique]]
|
|
id = "T1003"
|
|
name = "OS Credential Dumping"
|
|
reference = "https://attack.mitre.org/techniques/T1003/"
|
|
[[rule.threat.technique.subtechnique]]
|
|
id = "T1003.001"
|
|
name = "LSASS Memory"
|
|
reference = "https://attack.mitre.org/techniques/T1003/001/"
|
|
|
|
[rule.threat.tactic]
|
|
id = "TA0006"
|
|
name = "Credential Access"
|
|
reference = "https://attack.mitre.org/tactics/TA0006/"
|