0ab70f13a4
* [Rule Tuning] Add Initial SentinelOne Compatibility
* updated definitions.py; updated tags; fixed unit tests
* added prerelease versions for s1 integration; updated build CLI commands to allow prerelease; bumped min-stacks
* updating manifests and integrations
* fixing flake errors
* min_stack
---------
Co-authored-by: Terrance DeJesus <99630311+terrancedejesus@users.noreply.github.com>
Co-authored-by: terrancedejesus <terrance.dejesus@elastic.co>
Co-authored-by: Samirbous <64742097+Samirbous@users.noreply.github.com>
(cherry picked from commit d023ad66b1)
71 lines
2.8 KiB
TOML
71 lines
2.8 KiB
TOML
[metadata]
|
|
creation_date = "2020/08/13"
|
|
integration = ["endpoint", "windows", "sentinel_one_cloud_funnel"]
|
|
maturity = "production"
|
|
min_stack_comments = "SentinelOne integration package minimum version for validation."
|
|
min_stack_version = "8.11.0"
|
|
updated_date = "2024/05/16"
|
|
|
|
[rule]
|
|
author = ["Elastic"]
|
|
description = """
|
|
Identifies the creation or modification of Domain Backup private keys. Adversaries may extract the Data Protection API
|
|
(DPAPI) domain backup key from a Domain Controller (DC) to be able to decrypt any domain user master key file.
|
|
"""
|
|
from = "now-9m"
|
|
index = ["winlogbeat-*", "logs-endpoint.events.file-*", "logs-windows.sysmon_operational-*", "endgame-*", "logs-sentinel_one_cloud_funnel.*"]
|
|
language = "eql"
|
|
license = "Elastic License v2"
|
|
name = "Creation or Modification of Domain Backup DPAPI private key"
|
|
note = """## Triage and analysis
|
|
|
|
Domain DPAPI Backup keys are stored on domain controllers and can be dumped remotely with tools such as Mimikatz. The resulting .pvk private key can be used to decrypt ANY domain user masterkeys, which then can be used to decrypt any secrets protected by those keys.
|
|
"""
|
|
references = [
|
|
"https://www.dsinternals.com/en/retrieving-dpapi-backup-keys-from-active-directory/",
|
|
"https://posts.specterops.io/operational-guidance-for-offensive-user-dpapi-abuse-1fb7fac8b107",
|
|
]
|
|
risk_score = 73
|
|
rule_id = "b83a7e96-2eb3-4edf-8346-427b6858d3bd"
|
|
setup = """## 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 version 8.2.
|
|
Hence for this rule to work effectively, users will need to add a custom ingest pipeline to populate
|
|
`event.ingested` to @timestamp.
|
|
For more details on adding a custom ingest pipeline refer - https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html
|
|
"""
|
|
severity = "high"
|
|
tags = ["Domain: Endpoint", "OS: Windows", "Use Case: Threat Detection", "Tactic: Credential Access", "Data Source: Elastic Endgame", "Data Source: Elastic Defend", "Data Source: Sysmon", "Data Source: SentinelOne"]
|
|
timestamp_override = "event.ingested"
|
|
type = "eql"
|
|
|
|
query = '''
|
|
file where host.os.type == "windows" and event.type != "deletion" and file.name : ("ntds_capi_*.pfx", "ntds_capi_*.pvk")
|
|
'''
|
|
|
|
|
|
[[rule.threat]]
|
|
framework = "MITRE ATT&CK"
|
|
[[rule.threat.technique]]
|
|
id = "T1552"
|
|
name = "Unsecured Credentials"
|
|
reference = "https://attack.mitre.org/techniques/T1552/"
|
|
[[rule.threat.technique.subtechnique]]
|
|
id = "T1552.004"
|
|
name = "Private Keys"
|
|
reference = "https://attack.mitre.org/techniques/T1552/004/"
|
|
|
|
|
|
[[rule.threat.technique]]
|
|
id = "T1555"
|
|
name = "Credentials from Password Stores"
|
|
reference = "https://attack.mitre.org/techniques/T1555/"
|
|
|
|
|
|
[rule.threat.tactic]
|
|
id = "TA0006"
|
|
name = "Credential Access"
|
|
reference = "https://attack.mitre.org/tactics/TA0006/"
|
|
|