Detection rules › Kusto

SpyCloud infostealer malware credential exposure

Severity
high
Time window
1d
Source
github.com/Azure/Azure-Sentinel

'Identifies credentials harvested by infostealer malware on a compromised device. This exposure may indicate an actively compromised endpoint with associated command-and-control risk.'

MITRE ATT&CK coverage

TacticTechniques
Credential Access
Command & Control

Rule body

id: ead4deed-9d48-4646-aee0-6b46c2dd1ae6
name: SpyCloud infostealer malware credential exposure
description: |
  'Identifies credentials harvested by infostealer malware on a compromised device. This
  exposure may indicate an actively compromised endpoint with associated command-and-control
  risk.'
severity: High
requiredDataConnectors:
  - connectorId: SpyCloudEnterpriseProtectionCCF
    dataTypes:
      - SpyCloudBreachWatchlistV2_CL
queryFrequency: 1h
queryPeriod: 1d
triggerOperator: gt
triggerThreshold: 0
tactics:
  - CredentialAccess
  - CommandAndControl
relevantTechniques:
  - T1555
  - T1071
query: |
  // Human-readable constant for the severity threshold used below
  let severityThreshold = 25;
  SpyCloudBreachWatchlistV2_CL
  | where Severity == severityThreshold
  | mv-expand IPAddress = IPAddresses to typeof(string)
  | extend AccountName = Username, AccountEmail = Email, HostName = UserHostName
  | project TimeGenerated, DocumentId, SourceId, SpyCloudPublishDate, AccountEmail,
      AccountName, HostName, InfectedMachineId, InfectedTime, UserOS, IPAddress
eventGroupingSettings:
  aggregationKind: SingleAlert
entityMappings:
  - entityType: Account
    fieldMappings:
      - identifier: Name
        columnName: AccountName
  - entityType: Host
    fieldMappings:
      - identifier: HostName
        columnName: HostName
  - entityType: IP
    fieldMappings:
      - identifier: Address
        columnName: IPAddress
version: 1.0.0
kind: scheduled

Stages and Predicates

Parameters

let severityThreshold = 25;

Stage 1: source

SpyCloudBreachWatchlistV2_CL

Stage 2: where

| where Severity == severityThreshold

Stage 3: mv-expand

| mv-expand IPAddress = IPAddresses to typeof(string)

Stage 4: extend

| extend AccountName = Username, AccountEmail = Email, HostName = UserHostName

Stage 5: project

| project TimeGenerated, DocumentId, SourceId, SpyCloudPublishDate, AccountEmail,
    AccountName, HostName, InfectedMachineId, InfectedTime, UserOS, IPAddress

Indicators

These rows show field, operator, and value matches.

Output fields

These fields are emitted when the rule matches.

FieldSource
AccountEmailproject
AccountNameproject
DocumentIdproject
HostNameproject
IPAddressproject
InfectedMachineIdproject
InfectedTimeproject
SourceIdproject
SpyCloudPublishDateproject
TimeGeneratedproject
UserOSproject