Detection rules › Kusto

Credential Dumping Tools - File Artifacts

Status
available
Severity
high
Time window
1h
Group by
Computer, EventID, Image, ProcessGuid, TargetFilename
Source
github.com/Azure/Azure-Sentinel

This query detects the creation of credential dumping tools files. Several credential dumping tools export files with hardcoded file names. Ref: https://jpcertcc.github.io/ToolAnalysisResultSheet/

MITRE ATT&CK coverage

TacticTechniques
Credential AccessT1003.001 OS Credential Dumping: LSASS Memory

Event coverage

ProviderEventTitle
SysmonEvent ID 11FileCreate

Rule body kusto

id: 32ffb19e-8ed8-40ed-87a0-1adb4746b7c4
name: Credential Dumping Tools - File Artifacts
description: |
   'This query detects the creation of credential dumping tools files. Several credential dumping tools export files with hardcoded file names.
   Ref: https://jpcertcc.github.io/ToolAnalysisResultSheet/'
severity: High
status: Available
requiredDataConnectors:
  - connectorId: SecurityEvents
    dataTypes:
      - Event
  - connectorId: WindowsSecurityEvents
    dataTypes:
      - Event
queryFrequency: 1h
queryPeriod: 1h
triggerOperator: gt
triggerThreshold: 0
tactics:
  - CredentialAccess
relevantTechniques:
  - T1003.001
query: |
  // Enter a reference list of malicious file artifacts
  let MaliciousFileArtifacts = dynamic (["lsass.dmp","test.pwd","lsremora.dll","lsremora64.dll","fgexec.exe","pwdump","kirbi","wce_ccache","wce_krbtkts","wceaux.dll","PwHashes","SAM.out","SECURITY.out","SYSTEM.out","NTDS.out" "DumpExt.dll","DumpSvc.exe","cachedump64.exe","cachedump.exe","pstgdump.exe","servpw64.exe","servpw.exe","pwdump.exe","fgdump-log"]);
  Event
  | where EventLog == "Microsoft-Windows-Sysmon/Operational" and EventID==11
  | parse EventData with * 'TargetFilename">' TargetFilename "<" *
  | where TargetFilename has_any (MaliciousFileArtifacts)
  | parse EventData with * 'ProcessGuid">' ProcessGuid "<" * 'Image">' Image "<" *
  | summarize StartTime = min(TimeGenerated), EndTime = max(TimeGenerated) by EventID, Computer, Image, ProcessGuid, TargetFilename
  | extend HostName = split(Computer, '.', 0)[0], DnsDomain = strcat_array(array_slice(split(Computer, '.'), 1, -1), '.')
entityMappings:
- entityType: File
  fieldMappings:
    - identifier: Name
      columnName: TargetFilename
- entityType: Host
  fieldMappings:
    - identifier: HostName
      columnName: HostName
    - identifier: DnsDomain
      columnName: DnsDomain
- entityType: Process
  fieldMappings:
    - identifier: CommandLine
      columnName: Image
version: 1.0.3
kind: Scheduled

Stages and Predicates

Let binding: MaliciousFileArtifacts

let MaliciousFileArtifacts = dynamic (["lsass.dmp","test.pwd","lsremora.dll","lsremora64.dll","fgexec.exe","pwdump","kirbi","wce_ccache","wce_krbtkts","wceaux.dll","PwHashes","SAM.out","SECURITY.out","SYSTEM.out","NTDS.out" "DumpExt.dll","DumpSvc.exe","cachedump64.exe","cachedump.exe","pstgdump.exe","servpw64.exe","servpw.exe","pwdump.exe","fgdump-log"]);

Stage 1: source

Event

Stage 2: where

| where EventLog == "Microsoft-Windows-Sysmon/Operational" and EventID==11

Stage 3: parse

| parse EventData with * 'TargetFilename">' TargetFilename "<" *

Stage 4: where

| where TargetFilename has_any (MaliciousFileArtifacts)

References MaliciousFileArtifacts (defined above).

Stage 5: parse

| parse EventData with * 'ProcessGuid">' ProcessGuid "<" * 'Image">' Image "<" *

Stage 6: summarize

| summarize StartTime = min(TimeGenerated), EndTime = max(TimeGenerated) by EventID, Computer, Image, ProcessGuid, TargetFilename

Stage 7: extend

| extend HostName = split(Computer, '.', 0)[0], DnsDomain = strcat_array(array_slice(split(Computer, '.'), 1, -1), '.')

Indicators

Each row is a field, operator, and value that the rule matches. The corpus column counts how many other rules in the catalog look for the same combination: high numbers point to widely-used, community-vetted indicators. Blank or 1 shows that the indicator is specific to this rule.

FieldKindValues
EventIDeq
  • 11 transforms: cased corpus 23 (splunk 21, kusto 2)
EventLogeq
  • Microsoft-Windows-Sysmon/Operational transforms: cased corpus 10 (kusto 10)
TargetFilenamematch
  • DumpExt.dll
  • DumpSvc.exe
  • NTDS.out
  • PwHashes
  • SAM.out
  • SECURITY.out
  • SYSTEM.out
  • cachedump.exe
  • cachedump64.exe
  • fgdump-log
  • fgexec.exe
  • kirbi
  • lsass.dmp
  • lsremora.dll
  • lsremora64.dll
  • pstgdump.exe
  • pwdump
  • pwdump.exe
  • servpw.exe
  • servpw64.exe
  • test.pwd
  • wce_ccache
  • wce_krbtkts
  • wceaux.dll

Output fields

Fields the rule emits when it matches. Chronicle authors list these in the outcome block; they appear on the detection and $risk_score drives alerting. Sentinel / Defender XDR rules build them up through project / summarize / extend stages. Sentinel maps these into alert fields via entityMappings and customDetails; Defender XDR custom detections surface them as alert fields directly.

FieldSource
Computersummarize
EndTimesummarize
EventIDsummarize
Imagesummarize
ProcessGuidsummarize
StartTimesummarize
TargetFilenamesummarize
DnsDomainextend
HostNameextend