Detection rules › Kusto

Jira - User's password changed multiple times

Status
available
Severity
high
Time window
30m
Source
github.com/Azure/Azure-Sentinel

'Detects when user's password was changed multiple times from different IP addresses.'

MITRE ATT&CK coverage

TacticTechniques
PersistenceT1078 Valid Accounts

Rule body kusto

id: 943176e8-b979-45c0-8ad3-58ba6cfd41f0
name: Jira - User's password changed multiple times
description: |
  'Detects when user's password was changed multiple times from different IP addresses.'
severity: High
status: Available
requiredDataConnectors:
  - connectorId: JiraAuditAPI
    dataTypes:
      - JiraAudit
queryFrequency: 1h
queryPeriod: 1h
triggerOperator: gt
triggerThreshold: 0
tactics:
  - Persistence
relevantTechniques:
  - T1078
query: |
  JiraAudit
  | where EventMessage =~ "User's password changed"
  | extend user = todynamic(AssociatedItems)[0]['name']
  | summarize ip_list = makeset(SrcIpAddr) by tostring(user), bin(TimeGenerated, 30m)
  | where array_length(ip_list) > 1
  | extend AccountCustomEntity = user, IPCustomEntity = ip_list
entityMappings:
  - entityType: Account
    fieldMappings:
      - identifier: Name
        columnName: AccountCustomEntity
  - entityType: IP
    fieldMappings:
      - identifier: Address
        columnName: IPCustomEntity
version: 1.0.1
kind: Scheduled

Stages and Predicates

Stage 1: source

JiraAudit

Stage 2: where

| where EventMessage =~ "User's password changed"

Stage 3: extend

| extend user = todynamic(AssociatedItems)[0]['name']

Stage 4: summarize

| summarize ip_list = makeset(SrcIpAddr) by tostring(user), bin(TimeGenerated, 30m)

Stage 5: where

| where array_length(ip_list) > 1

Stage 6: extend

| extend AccountCustomEntity = user, IPCustomEntity = ip_list

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
EventMessageeq
  • User's password changed
ip_listgt
  • 1 transforms: array_length

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
ip_listsummarize
AccountCustomEntityextend
IPCustomEntityextend