Detection rules › YARA-L
Potential Credential Dumping Activity Via LSASS
Detects process access requests to the LSASS process with specific call trace calls and access masks. This behaviour is expressed by many credential dumping tools such as Mimikatz, NanoDump, Invoke-Mimikatz, Procdump and even the Taskmgr dumping feature.
Known false positives
- Unknown
MITRE ATT&CK coverage
| Tactic | Techniques |
|---|---|
| Credential Access |
References
Telemetry coverage
| Provider | Record / event type |
|---|---|
| Sysmon | Event ID 10: ProcessAccess |
Rule body
// Copyright 2025 Google LLC. Licensed under Apache-2.0.
rule potential_credential_dumping_activity_via_lsass {
meta:
author = "Samir Bousseaden, Michael Haag"
description = "Detects process access requests to the LSASS process with specific call trace calls and access masks. This behaviour is expressed by many credential dumping tools such as Mimikatz, NanoDump, Invoke-Mimikatz, Procdump and even the Taskmgr dumping feature."
reference = "https://github.com/SigmaHQ/sigma/blob/master/rules/windows/process_access/proc_access_win_lsass_memdump.yml"
license = "https://github.com/SigmaHQ/Detection-Rule-License/blob/main/LICENSE.Detection.Rules.md"
rule_name = "Potential Credential Dumping Activity Via LSASS"
sigma_uuid = "5ef9853e-4d0e-4a70-846f-a9ca37d876da"
sigma_status = "experimental"
rule_id = "mr_33474568-9a0a-4588-ba79-144ab7908f8e"
tactic = "TA0006"
technique = "T1003.001"
type = "Detection"
data_source = "Sysmon"
platform = "Windows"
severity = "Medium"
priority = "Medium"
false_positives = "Unknown"
events:
$process.metadata.event_type = "PROCESS_OPEN"
re.regex($process.target.process.file.full_path, `\\lsass\.exe$`) nocase
(
strings.contains(strings.to_lower($process.target.resource.name), "0x1038") or
strings.contains(strings.to_lower($process.target.resource.name), "0x1438") or
strings.contains(strings.to_lower($process.target.resource.name), "0x143a") or
strings.contains(strings.to_lower($process.target.resource.name), "0x1fffff") //questionable, this one and others have been filtered out due to FP
)
(
strings.contains(strings.to_lower($process.additional.fields["CallTrace"]), "dbgcore.dll") or
strings.contains(strings.to_lower($process.additional.fields["CallTrace"]), "dbghelp.dll") or
strings.contains(strings.to_lower($process.additional.fields["CallTrace"]), "kernel32.dll") or
strings.contains(strings.to_lower($process.additional.fields["CallTrace"]), "kernelbase.dll") or
strings.contains(strings.to_lower($process.additional.fields["CallTrace"]), "ntdll.dll")
)
NOT (
strings.contains($process.principal.administrative_domain, "AUTHORI") or
strings.contains($process.principal.administrative_domain, "AUTORI")
)
NOT (
strings.contains(strings.to_lower($process.additional.fields["CallTrace"]), ":\\windows\\temp\\asgard2-agent\\") and
strings.contains(strings.to_lower($process.additional.fields["CallTrace"]), "\\thor\\thor64.exe+") and
strings.contains(strings.to_upper($process.additional.fields["CallTrace"]), "|UNKNOWN(") and
$process.target.resource.name = "0x103800" nocase
)
NOT re.regex($process.principal.process.file.full_path, `:\\Windows\\Sysmon64\.exe$`) nocase
$process.principal.hostname = $hostname
match:
$hostname over 5m
outcome:
//example usage of specifying test hostname to adjust risk score
$risk_score = max(if($process.principal.hostname = "hostname", 0, 15))
$principal_process_pid = array_distinct($process.principal.process.pid)
$principal_process_command_line = array_distinct($process.principal.process.command_line)
$principal_process_file_sha256 = array_distinct($process.principal.process.file.sha256)
$principal_process_file_full_path = array_distinct($process.principal.process.file.full_path)
$principal_process_product_specfic_process_id = array_distinct($process.principal.process.product_specific_process_id)
$principal_process_parent_process_product_specfic_process_id = array_distinct($process.principal.process.parent_process.product_specific_process_id)
$target_process_pid = array_distinct($process.target.process.pid)
$target_process_command_line = array_distinct($process.target.process.command_line)
$target_process_file_sha256 = array_distinct($process.target.process.file.sha256)
$target_process_file_full_path = array_distinct($process.target.process.file.full_path)
$target_process_product_specfic_process_id = array_distinct($process.target.process.product_specific_process_id)
$log_type = array_distinct(strings.concat($process.metadata.log_type,"/",$process.metadata.product_event_type))
condition:
$process
}
YARA-L rule structure
Condition
Fires when at least one $process event in the 5m window.
Events
$process
target.process.file.full_path matches "\\lsass\.exe$"target.resource.name contains "0x1038"target.resource.name contains "0x1438"target.resource.name contains "0x143a"target.resource.name contains "0x1fffff"additional.fields["CallTrace"] contains "dbgcore.dll"additional.fields["CallTrace"] contains "dbghelp.dll"additional.fields["CallTrace"] contains "kernel32.dll"additional.fields["CallTrace"] contains "kernelbase.dll"additional.fields["CallTrace"] contains "ntdll.dll"principal.administrative_domain contains "AUTHORI"principal.administrative_domain contains "AUTORI"additional.fields["CallTrace"] contains ":\\windows\\temp\\asgard2-agent\\"additional.fields["CallTrace"] contains "\\thor\\thor64.exe+"additional.fields["CallTrace"] contains "|UNKNOWN("target.resource.name = "0x103800"principal.process.file.full_path matches ":\\Windows\\Sysmon64\.exe$"
Match and correlation
Outcome
Outcome variables add context to a detection. When the rule generates an alert, $risk_score is displayed with it.
| Field | Expression |
|---|---|
risk_score | max(if($process.principal.hostname = "hostname", 0, 15)) |
principal_process_pid | array_distinct($process.principal.process.pid) |
principal_process_command_line | array_distinct($process.principal.process.command_line) |
principal_process_file_sha256 | array_distinct($process.principal.process.file.sha256) |
principal_process_file_full_path | array_distinct($process.principal.process.file.full_path) |
principal_process_product_specfic_process_id | array_distinct($process.principal.process.product_specific_process_id) |
principal_process_parent_process_product_specfic_process_id | array_distinct($process.principal.process.parent_process.product_specific_process_id) |
target_process_pid | array_distinct($process.target.process.pid) |
target_process_command_line | array_distinct($process.target.process.command_line) |
target_process_file_sha256 | array_distinct($process.target.process.file.sha256) |
target_process_file_full_path | array_distinct($process.target.process.file.full_path) |
target_process_product_specfic_process_id | array_distinct($process.target.process.product_specific_process_id) |
log_type | array_distinct(strings.concat($process.metadata.log_type,"/",$process.metadata.product_event_type)) |