Public reference

Detection Logic Catalog

This page documents all current ITDR built-in detections from the live rule engine so your incident response team can review trigger logic, thresholds, grouping, and evidence expectations.

Total rules: 28Directory audit: 5Sign-in: 11O365 Mgmt: 4Attack chain: 8

View mode

Technical mode exposes full trigger logic, conditions, evidence fields, and grouping keys.

Detection coverage model

Rule behavior is validated against live Microsoft telemetry, then alerts are grouped into incidents through the same investigation workflow used in the platform.

Office 365 Management telemetry supports both native mailbox-rule detections and mapped SecurityCompliance/threat signals.

Office 365 Management coverage model

This catalog includes built-in Exchange mailbox-rule detections. In addition, the platform ingests Office 365 Management content types (`Audit.AzureActiveDirectory`, `Audit.Exchange`, `Audit.SharePoint`, `Audit.General`, `DLP.All`) and maps SecurityCompliance/threat-related records into alerts with source `o365_management`.

Subscription-level failures are warning-classified. If one content type is unavailable (for example `DLP.All`), other enabled content types can still ingest.

Licensing realism

This matrix reflects current platform behavior and production observations as of April 22, 2026. Microsoft licensing and tenant entitlements can change; this page is an operational guide, not a legal licensing contract.

Microsoft references: Business Premium security overview | Entra risk detection licensing | Entra log retention by tier

Operational expectations

Prevent vs detect vs contain (realistic positioning)

Prevent initial login

Identity platform controls

Conditional Access, phishing-resistant auth, device compliance, and browser/DNS controls stop many attacks before account session establishment.

Detect compromise patterns

ITDR detections (this catalog)

The rules on this page detect suspicious identity and workload behavior from Graph telemetry and correlated context; provider-originated Office 365 alerts are mapped separately.

Contain and respond

Platform response workflow

Capability-aware actions, verification, and immutable action history reduce dwell time after a suspicious event is observed.

Latency reality: detection speed depends on Microsoft log publication and ingestion windows. ITDR can be fast after events are queryable, but it is not an inline authentication gate.

Licensing matrix

Detection coverage by Microsoft license tier

SupportedPartialNot expected
DetectionBusiness Premium (includes P1)Entra ID P1 / M365 E3 baselineEntra ID P2 / M365 E5 baselinePractical notes
High-risk app permission or governance change
high_risk_app_change
SupportedSupportedSupportedUses directory audit + workload identity correlation. Main blockers are permissions and connector health, not P2.
Possible rogue high-privilege new workload identity
rogue_application_high_privilege_new_sp
SupportedSupportedSupportedUses directory audit + workload identity correlation. Main blockers are permissions and connector health, not P2.
Ownerless privileged workload identity change
rogue_application_ownerless_privileged
SupportedSupportedSupportedUses directory audit + workload identity correlation. Main blockers are permissions and connector health, not P2.
Possible rogue application consent burst
rogue_application_consent_burst
SupportedSupportedSupportedUses directory audit + workload identity correlation. Main blockers are permissions and connector health, not P2.
Repeated failed sign-ins for identity
repeated_failed_signins
SupportedSupportedSupportedRequires sign-in log ingestion from Graph. Not tied to P2-specific risk APIs.
Workload app retrying with expired client secret
expired_credential_secret
SupportedSupportedSupportedRequires sign-in log ingestion from Graph. Not tied to P2-specific risk APIs.
Adversary-in-the-middle token replay from distinct device
aitm_token_replay_distinct_device
SupportedSupportedSupportedRequires sign-in log ingestion from Graph. Not tied to P2-specific risk APIs.
Risky successful sign-in
risky_signin_success
PartialPartialSupportedDepends on Microsoft sign-in risk fields. On non-P2 tenants this rule can be sparse or generic.
Successful sign-in after repeated failures
success_after_failed_signins
SupportedSupportedSupportedRequires sign-in log ingestion from Graph. Not tied to P2-specific risk APIs.
Rapid location change across successful sign-ins
rapid_location_change
SupportedSupportedSupportedRequires sign-in log ingestion from Graph. Not tied to P2-specific risk APIs.
Possible non-interactive token replay
non_interactive_token_replay
SupportedSupportedSupportedRequires sign-in log ingestion from Graph. Not tied to P2-specific risk APIs.
Suspicious non-interactive sign-in
non_interactive_signin_anomaly
SupportedSupportedSupportedRequires sign-in log ingestion from Graph. Not tied to P2-specific risk APIs.
Credential theft pattern across identities
credential_theft_detection
SupportedSupportedSupportedRequires sign-in log ingestion from Graph. Not tied to P2-specific risk APIs.
Malicious datacenter utilization pattern
malicious_datacenter_utilization
SupportedSupportedSupportedRequires sign-in log ingestion from Graph. Not tied to P2-specific risk APIs.
Malicious Inbox Rule Detection
malicious_inbox_rule_detection
SupportedSupportedSupportedRequires Office 365 Management Activity ingestion and Exchange operation visibility.
Suspicious Email Filter Hiding Generic Account and Security Notifications
suspicious_email_filter_hiding_generic_security_notifications
SupportedSupportedSupportedRequires Office 365 Management Activity ingestion and Exchange operation visibility.
Suspicious Email Filter Hiding Finance and BEC Keywords
suspicious_email_filter_hiding_finance_bec_keywords
SupportedSupportedSupportedRequires Office 365 Management Activity ingestion and Exchange operation visibility.
Suspicious Email Filter Hiding External Account Security Notifications
suspicious_email_filter_hiding_external_security_notifications
SupportedSupportedSupportedRequires Office 365 Management Activity ingestion and Exchange operation visibility.
Attack chain: risky login to MFA change to inbox rule
itdr_chain_risky_login_mfa_change_inbox_rule
SupportedSupportedSupportedRequires base detections and correlation windows; this is sequence analytics over existing signals.
Attack chain: password spray to success to lateral movement
itdr_chain_spray_success_lateral
SupportedSupportedSupportedRequires base detections and correlation windows; this is sequence analytics over existing signals.
Attack chain: token replay across multiple identities
itdr_chain_token_replay_multi_identity
SupportedSupportedSupportedRequires base detections and correlation windows; this is sequence analytics over existing signals.
MFA denied challenge followed by successful sign-in
mfa_denied_then_success
SupportedSupportedSupportedRequires sign-in log ingestion from Graph. Not tied to P2-specific risk APIs.
Authentication method change after risky sign-in
auth_method_change_after_risky_signin
SupportedSupportedSupportedRequires base detections and correlation windows; this is sequence analytics over existing signals.
Password reset after risky sign-in
password_reset_after_risky_signin
SupportedSupportedSupportedRequires base detections and correlation windows; this is sequence analytics over existing signals.
OAuth consent activity after risky sign-in
oauth_consent_from_risky_session
SupportedSupportedSupportedRequires base detections and correlation windows; this is sequence analytics over existing signals.
MFA method weakened after risky sign-in
mfa_method_weakened
SupportedSupportedSupportedRequires base detections and correlation windows; this is sequence analytics over existing signals.
Privileged role assignment by risky actor
privileged_role_assignment_risky_actor
SupportedSupportedSupportedRequires base detections and correlation windows; this is sequence analytics over existing signals.
Likely dormant workload identity suddenly active
unused_workload_identity_suddenly_active
SupportedSupportedSupportedUses directory audit + workload identity correlation. Main blockers are permissions and connector health, not P2.

Feed-level expectations

Why non-P2 tenants can still show connector warnings

Microsoft feedUsed forBusiness Premium (includes P1)Entra ID P1 / M365 E3 baselineEntra ID P2 / M365 E5 baselineNotes
auditLogs/signIns (v1.0)Core signal feed for sign-in detections and chain correlation.SupportedSupportedSupportedRequires Graph permissions and role assignment. Without this feed, sign-in detections cannot trigger regardless of license.
Office 365 Management Activity APIExchange mailbox-rule detections (rules 13-16) plus provider-originated SecurityCompliance/threat alert mapping.SupportedSupportedSupportedRequires Office 365 Management API app permissions (`ActivityFeed.Read`; `ActivityFeed.ReadDlp` for DLP). Missing one subscription does not block all others.
identityProtection/riskDetectionsOptional enrichment and connector warning context.PartialPartialSupportedNon-P2 tenants can return generic/limited risk context. This feed is enrichment; core detections still run without it.
identityProtection/riskyUsersOptional user risk enrichment and investigation context.PartialPartialSupportedCoverage varies by tenant entitlement and permissions. P2 generally gives full risk detail; lower tiers can be partial.
identityProtection/riskyServicePrincipalsOptional workload identity risk enrichment.Not expectedNot expectedPartialCommonly blocked without premium workload-identity risk entitlements. Treat as optional enrichment, not a core dependency.
#RuleRule TypeCategoryFamilySeverity
1High-risk app permission or governance changehigh_risk_app_changeconsent_or_config_changedirectory_audithigh
2Possible rogue high-privilege new workload identityrogue_application_high_privilege_new_sprogue_application_high_privilege_new_spdirectory_auditcritical
3Ownerless privileged workload identity changerogue_application_ownerless_privilegedrogue_application_ownerless_privilegeddirectory_auditcritical
4Possible rogue application consent burstrogue_application_consent_burstrogue_application_consent_burstdirectory_audithigh
5Repeated failed sign-ins for identityrepeated_failed_signinsfailed_signin_patternsign_inmedium
27Workload app retrying with expired client secretexpired_credential_secretexpired_credential_secretsign_inmedium
28Adversary-in-the-middle token replay from distinct deviceaitm_token_replay_distinct_deviceaitm_token_replay_distinct_devicesign_inhigh
6Risky successful sign-inrisky_signin_successrisky_signin_successsign_inhigh
7Successful sign-in after repeated failuressuccess_after_failed_signinssuccessful_signin_after_failuressign_inhigh
8Rapid location change across successful sign-insrapid_location_changesign_in_anomalysign_inhigh
9Possible non-interactive token replaynon_interactive_token_replaynon_interactive_token_replaysign_inhigh
10Suspicious non-interactive sign-innon_interactive_signin_anomalynon_interactive_signin_anomalysign_inhigh
11Credential theft pattern across identitiescredential_theft_detectioncredential_theft_detectionsign_inhigh
12Malicious datacenter utilization patternmalicious_datacenter_utilizationmalicious_datacenter_utilizationsign_inhigh
13Malicious Inbox Rule Detectionmalicious_inbox_rule_detectionmalicious_inbox_rule_detectiono365_managementhigh
14Suspicious Email Filter Hiding Generic Account and Security Notificationssuspicious_email_filter_hiding_generic_security_notificationssuspicious_email_filter_hiding_generic_security_notificationso365_managementhigh
15Suspicious Email Filter Hiding Finance and BEC Keywordssuspicious_email_filter_hiding_finance_bec_keywordssuspicious_email_filter_hiding_finance_bec_keywordso365_managementcritical
16Suspicious Email Filter Hiding External Account Security Notificationssuspicious_email_filter_hiding_external_security_notificationssuspicious_email_filter_hiding_external_security_notificationso365_managementhigh
17Attack chain: risky login to MFA change to inbox ruleitdr_chain_risky_login_mfa_change_inbox_ruleitdr_chain_risky_login_mfa_change_inbox_ruleattack_chaincritical
18Attack chain: password spray to success to lateral movementitdr_chain_spray_success_lateralitdr_chain_spray_success_lateralattack_chaincritical
19Attack chain: token replay across multiple identitiesitdr_chain_token_replay_multi_identityitdr_chain_token_replay_multi_identityattack_chainhigh
20MFA denied challenge followed by successful sign-inmfa_denied_then_successmfa_denied_then_successsign_inhigh
21Authentication method change after risky sign-inauth_method_change_after_risky_signinauth_method_change_after_risky_signinattack_chainhigh
22Password reset after risky sign-inpassword_reset_after_risky_signinpassword_reset_after_risky_signinattack_chainhigh
23OAuth consent activity after risky sign-inoauth_consent_from_risky_sessionoauth_consent_from_risky_sessionattack_chainhigh
24MFA method weakened after risky sign-inmfa_method_weakenedmfa_method_weakenedattack_chaincritical
25Privileged role assignment by risky actorprivileged_role_assignment_risky_actorprivileged_role_assignment_risky_actorattack_chaincritical
26Likely dormant workload identity suddenly activeunused_workload_identity_suddenly_activeunused_workload_identity_suddenly_activedirectory_audithigh
Severity
Family

28 rules

1. High-risk app permission or governance change

high_risk_app_change | consent_or_config_change

directory audithigh

Trigger logic

  1. Inspect directory audit events and match sensitive governance keywords.
  2. Resolve a primary workload entity through correlation (application/service principal).
  3. Suppress events where the initiator is "Microsoft Online Services" AND the target is a Microsoft first-party SPN (app_owner_organization_id = f8cdef31-…). This is Microsoft refreshing its own apps and is not a tenant-actionable signal.
  4. Suppress events where the target SPN is the tenant's own connector principal (sp.app_id = connectors.client_id). This is the platform calling Microsoft Graph as itself.
  5. Alert only when at least one risk amplifier is present: high-risk permissions, linked open posture findings, or ownerless identity. Microsoft first-party SPNs and connector-principal SPNs are never treated as ownerless.
  6. Create or update grouped incident story for that workload identity.

Scoring and severity

  • - Base model: detection_severity_weight=18, permission_criticality_weight=20 (if high risk), owner_missing_weight=10 (if ownerless), plus source finding severity.
  • - Severity is score-driven (critical >= 55, high >= 40, medium >= 25, else low). Sign-in and directory-audit rules add context weights for permissions, findings, and behavior.

Rule conditions

{
  "event_source": "directory_audit",
  "keywords": [
    "consent",
    "permission grant",
    "credential",
    "certificate",
    "secret",
    "owner",
    "service principal",
    "application"
  ],
  "threshold": 1,
  "suppress_microsoft_self_update": true,
  "suppress_platform_connector_principal": true
}

Evidence emitted

  • - directory_audit_event id/source_log_id/activity_display_name/activity_date_time
  • - linked entity refs (application/service_principal)
  • - linked finding refs from posture context

Alert and incident keys

Source ID: directory_audit_change:{event_id}

Grouping key: {tenant_id}:consent_or_config_change:{entity_type}:{entity_id}

Recommended next actions

  • - Review audit event and approval context.
  • - Inspect workload permissions and linked posture findings.

2. Possible rogue high-privilege new workload identity

rogue_application_high_privilege_new_sp | rogue_application_high_privilege_new_sp

directory auditcritical

Trigger logic

  1. Start from sensitive audit candidates.
  2. Require high-risk permissions and creation/bootstrap keyword match.
  3. Require the entity to be recent (created within 14 days of event time).
  4. Escalate score with additional new identity bootstrap weight.

Scoring and severity

  • - Directory-audit base scoring + new_workload_identity_weight=15.
  • - Severity is score-driven (critical >= 55, high >= 40, medium >= 25, else low). Sign-in and directory-audit rules add context weights for permissions, findings, and behavior.

Rule conditions

{
  "event_source": "directory_audit",
  "keywords": [
    "add service principal",
    "add application",
    "add app role assignment",
    "add delegated permission grant"
  ],
  "entity_age_days": 14,
  "requires_high_risk_permissions": true,
  "threshold": 1
}

Evidence emitted

  • - single triggering directory audit event reference
  • - linked workload entity and optional linked findings

Alert and incident keys

Source ID: rogue_new_high_privilege:{event_id}

Grouping key: {tenant_id}:rogue_application_high_privilege_new_sp:{entity_type}:{entity_id}

Recommended next actions

  • - Validate onboarding approval and ownership.
  • - Remove unnecessary high-risk grants.
  • - Disable/quarantine workload identity if unauthorized.

3. Ownerless privileged workload identity change

rogue_application_ownerless_privileged | rogue_application_ownerless_privileged

directory auditcritical

Trigger logic

  1. Start from sensitive audit candidates.
  2. Require entity to be both high-risk privileged and ownerless.
  3. Require credential/governance keyword match.
  4. Escalate score with ownerless privileged change weight.

Scoring and severity

  • - Directory-audit base scoring + ownerless_privileged_change_weight=18.
  • - Severity is score-driven (critical >= 55, high >= 40, medium >= 25, else low). Sign-in and directory-audit rules add context weights for permissions, findings, and behavior.

Rule conditions

{
  "event_source": "directory_audit",
  "keywords": [
    "add password credential",
    "add key credential",
    "certificates and secrets",
    "update application",
    "credential",
    "secret",
    "certificate"
  ],
  "requires_high_risk_permissions": true,
  "requires_ownerless": true,
  "threshold": 1
}

Evidence emitted

  • - single triggering directory audit event reference
  • - ownerless=true/high_risk_permissions=true metadata
  • - linked workload entity and posture findings

Alert and incident keys

Source ID: rogue_ownerless_privileged:{event_id}

Grouping key: {tenant_id}:rogue_application_ownerless_privileged:{entity_type}:{entity_id}

Recommended next actions

  • - Assign accountable owner(s) immediately.
  • - Rotate credentials and remove unneeded high-risk permissions.
  • - Contain workload identity if approval/ownership cannot be verified.

5. Repeated failed sign-ins for identity

repeated_failed_signins | failed_signin_pattern

sign inmedium

Trigger logic

  1. Group failed sign-ins by identity and app context.
  2. Use 30-minute sliding window and require at least 5 failures.
  3. Source_id is stable per (identity, app), so subsequent bursts update the same alert in place rather than being dropped because the latest event id differs. Once an alert moves out of NEW (SOC has triaged), the rule stops mutating it.
  4. Re-notify on growth: when the failure count grows by +5 since the previous notification, fire a fresh notification so on-call sees the burst continued.

Scoring and severity

  • - Sign-in base scoring (base_detection_weight=15, activity_recency_weight=15) with repeated_event_weight=min(20, max(10, count*2)).
  • - Severity is score-driven (critical >= 55, high >= 40, medium >= 25, else low). Sign-in and directory-audit rules add context weights for permissions, findings, and behavior.

Rule conditions

{
  "event_source": "signin",
  "status": "failure",
  "threshold": 5,
  "window_minutes": 30,
  "renotify_delta": 5,
  "stable_source_id_per_identity_app": true
}

Evidence emitted

  • - all failed sign-in events in the qualifying window
  • - status_error_code is preserved per event
  • - app and IP context on latest event
  • - notified_at_count records the count at the most recent notification for re-notify gating

Alert and incident keys

Source ID: failed_signins:{identity_id}:{app_key}

Grouping key: {tenant_id}:failed_signin_pattern:identity:{identity_id}:{app_key}

Recommended next actions

  • - Validate if failures are expected.
  • - Revoke sessions if unauthorized.
  • - Disable account if compromise/spray is likely.

Automatic reconciliation trims non-failure evidence and can auto-close stale failed-signin alerts/incidents if fewer than 5 valid failures remain.

27. Workload app retrying with expired client secret

expired_credential_secret | expired_credential_secret

sign inmedium

Trigger logic

  1. Group service principal sign-in events by app_id.
  2. Filter to status_error_code == 7000222 (AADSTS7000222 — expired client secret).
  3. Emit a MEDIUM operational incident when >= 50 such failures land in a 24-hour window for the same app.
  4. Source_id includes a daily bucket so a single alert tracks the day; tomorrow gets a fresh alert if the integration is still broken.

Scoring and severity

  • - Operational scoring: base_operational_weight=40 + failure_volume_weight=min(30, failure_count // 50).
  • - Severity is score-driven (critical >= 55, high >= 40, medium >= 25, else low). Sign-in and directory-audit rules add context weights for permissions, findings, and behavior.

Rule conditions

{
  "event_source": "signin",
  "status_error_code": "7000222",
  "threshold": 50,
  "window_hours": 24,
  "renotify_delta": 50
}

Evidence emitted

  • - app_id and display name
  • - failure count over the 24-hour window
  • - latest sign-in event id and timestamp
  • - linked SPN inventory id when known

Alert and incident keys

Source ID: expired_credential_secret:{app_id}:{day_bucket}

Grouping key: {tenant_id}:expired_credential_secret:application:{app_id}

Recommended next actions

  • - Confirm with the application owner whether this integration is still in use.
  • - If in use, rotate the expired client secret in the Azure AD app registration and update the application configuration.
  • - If retired, delete or disable the application so the failure retries stop.

This is an operational, not security, signal — the broken-customer-integration pattern. Inspired by 24X7Soc where one app accumulated 855 retries in 24h on an expired secret.

28. Adversary-in-the-middle token replay from distinct device

aitm_token_replay_distinct_device | aitm_token_replay_distinct_device

sign inhigh

Trigger logic

  1. Pair each successful INTERACTIVE sign-in with successful NON-INTERACTIVE sign-ins for the same identity within the next 30 minutes.
  2. Extract a device fingerprint from each event (deviceDetail.deviceId preferred; falls back to operatingSystem + browser only when neither side has a deviceId).
  3. Fire when the two events have differing fingerprints — meaning the post-MFA session is being exercised from a device that did not complete the interactive challenge.
  4. Skip when fingerprint data is missing on either side — no signal is better than a noisy guess.
  5. One alert per interactive sign-in event so further replays from the captured token do not produce duplicates.

Scoring and severity

  • - Sign-in base scoring (base_detection_weight=30) + location_change_weight=12 + aitm_distinct_device_weight=10.
  • - Severity is score-driven (critical >= 55, high >= 40, medium >= 25, else low). Sign-in and directory-audit rules add context weights for permissions, findings, and behavior.

Rule conditions

{
  "event_source": "signin",
  "interactive_status": "success",
  "non_interactive_status": "success",
  "window_minutes": 30,
  "require_distinct_device_fingerprint": true
}

Evidence emitted

  • - interactive_sign_in_event_id and non_interactive_sign_in_event_id
  • - interactive and non-interactive device fingerprints (deviceId / OS / browser)
  • - both IPs and location summaries
  • - time delta in minutes between the two events

Alert and incident keys

Source ID: aitm_token_replay_distinct_device:{identity_id}:{interactive_event_id}

Grouping key: {tenant_id}:aitm_token_replay_distinct_device:identity:{identity_id}

Recommended next actions

  • - Revoke active sessions for the identity to invalidate any captured tokens.
  • - Reset the user's password and require re-registration of MFA methods.
  • - Investigate the interactive sign-in source for phishing infrastructure indicators.
  • - Review any actions performed by the non-interactive session (consent grants, mailbox rules, role changes).

MITRE T1557 (Adversary-in-the-Middle) + T1550.001 (Application Access Token) + T1539 (Steal Web Session Cookie). Designed to catch Evilginx-style AiTM phishing kits where the proxy captures the post-MFA session cookie and the attacker replays the token from their own device.

Suppressed when both events share a deviceId or when neither side has fingerprint data — keeps noise down on legacy/legacy-OS sign-ins.

6. Risky successful sign-in

risky_signin_success | risky_signin_success

sign inhigh

Trigger logic

  1. Require successful sign-in.
  2. Require Microsoft risk signal: risk_level medium/high, risk_state atRisk/confirmedCompromised, or non-trivial risk_detail.
  3. Emit one detection per risky successful sign-in event.

Scoring and severity

  • - Sign-in base scoring (base_detection_weight=18) + id_protection_risk_weight (high/atRisk/confirmedCompromised => 20, medium => 14, specific risk_detail => 10).
  • - Severity is score-driven (critical >= 55, high >= 40, medium >= 25, else low). Sign-in and directory-audit rules add context weights for permissions, findings, and behavior.

Rule conditions

{
  "event_source": "signin",
  "status": "success",
  "risk_level": [
    "medium",
    "high"
  ],
  "risk_state": [
    "atRisk",
    "confirmedCompromised"
  ],
  "threshold": 1,
  "window_minutes": 60
}

Evidence emitted

  • - risky sign-in event id/source_log_id/time/ip/location
  • - risk_level/risk_state/risk_detail fields
  • - linked entities and posture findings context

Alert and incident keys

Source ID: risky_signin_success:{event_id}

Grouping key: {tenant_id}:risky_signin_success:identity:{identity_id}

Recommended next actions

  • - Validate user intent and device/session context.
  • - Revoke sessions and force reauth if unauthorized.
  • - Reset credentials and start compromise response if needed.

7. Successful sign-in after repeated failures

success_after_failed_signins | successful_signin_after_failures

sign inhigh

Trigger logic

  1. Start from successful sign-ins.
  2. Look back 30 minutes for same identity + same app key failures.
  3. Require failure count >= configured threshold (default 5).
  4. Require latest failure to be within 10 minutes before success.

Scoring and severity

  • - Sign-in base scoring (base_detection_weight=20) with repeated_event_weight=min(25, max(12, failures*2)).
  • - Severity is score-driven (critical >= 55, high >= 40, medium >= 25, else low). Sign-in and directory-audit rules add context weights for permissions, findings, and behavior.

Rule conditions

{
  "event_source": "signin",
  "status": "success_after_failure",
  "threshold": 5,
  "window_minutes": 30,
  "success_after_minutes": 10
}

Evidence emitted

  • - all qualifying failure events plus the successful event
  • - minutes_since_latest_failure
  • - app and IP context

Alert and incident keys

Source ID: success_after_failures:{success_event_id}

Grouping key: {tenant_id}:successful_signin_after_failures:identity:{identity_id}:{app_key}

Recommended next actions

  • - Validate if success was expected after failure burst.
  • - Revoke sessions if spray/replay pattern suspected.
  • - Disable account and validate user if unexplained.

8. Rapid location change across successful sign-ins

rapid_location_change | sign_in_anomaly

sign inhigh

Trigger logic

  1. Start from successful interactive sign-ins with normalized location.
  2. Look back 60 minutes for prior successful interactive sign-in for same identity.
  3. Require different normalized location and different IP.
  4. Use prior/current sign-in pair as evidence.

Scoring and severity

  • - Sign-in base scoring (base_detection_weight=18) + location_change_weight=15.
  • - Severity is score-driven (critical >= 55, high >= 40, medium >= 25, else low). Sign-in and directory-audit rules add context weights for permissions, findings, and behavior.

Rule conditions

{
  "event_source": "signin",
  "status": "success",
  "requires_interactive": true,
  "window_minutes": 60,
  "distinct_location": true,
  "distinct_ip": true,
  "threshold": 1
}

Evidence emitted

  • - prior and current successful interactive sign-in event refs
  • - time_delta_minutes
  • - prior/current location and IP context

Alert and incident keys

Source ID: rapid_location_change:{prior_event_id}:{current_event_id}

Grouping key: {tenant_id}:sign_in_anomaly:identity:{identity_id}

Recommended next actions

  • - Validate user travel legitimacy.
  • - Revoke sessions if activity is unexplained.
  • - Disable account and investigate token misuse if impossible travel suspected.

9. Possible non-interactive token replay

non_interactive_token_replay | non_interactive_token_replay

sign inhigh

Trigger logic

  1. Group successful non-interactive sign-ins by identity and app key.
  2. Use 20-minute sliding window and require at least 3 events.
  3. Require at least 2 distinct IPs and at least 2 distinct normalized locations.
  4. Use entire qualifying replay-like window as evidence.

Scoring and severity

  • - Sign-in base scoring (base_detection_weight=22) + repeated_event_weight=min(20, max(12, count*3)) + location_change_weight=18 + session_replay_indicator_weight=10.
  • - Severity is score-driven (critical >= 55, high >= 40, medium >= 25, else low). Sign-in and directory-audit rules add context weights for permissions, findings, and behavior.

Rule conditions

{
  "event_source": "signin",
  "status": "success",
  "is_interactive": false,
  "threshold": 3,
  "window_minutes": 20,
  "distinct_ip_min": 2,
  "distinct_location_min": 2
}

Evidence emitted

  • - all non-interactive events in qualifying replay window
  • - distinct IP and distinct normalized location lists
  • - time_window_minutes and app context

Alert and incident keys

Source ID: non_interactive_token_replay:{identity_id}:{app_key}:{first_event_id}:{latest_event_id}

Grouping key: {tenant_id}:non_interactive_token_replay:identity:{identity_id}:{app_key}

Recommended next actions

  • - Validate expected automation/background token usage.
  • - Revoke sessions/refresh tokens if unauthorized.
  • - Disable account and investigate token theft if unexplained.

10. Suspicious non-interactive sign-in

non_interactive_signin_anomaly | non_interactive_signin_anomaly

sign inhigh

Trigger logic

  1. Start from successful non-interactive sign-ins.
  2. Look back 24 hours for prior successful events for same identity.
  3. Skip if there is a recent matching non-interactive event (same location/IP/client app) baseline.
  4. Otherwise require a prior interactive success within 60 minutes from a different location/IP.
  5. Use interactive->non-interactive pair as evidence.

Scoring and severity

  • - Sign-in base scoring (base_detection_weight=20) + location_change_weight=18.
  • - Severity is score-driven (critical >= 55, high >= 40, medium >= 25, else low). Sign-in and directory-audit rules add context weights for permissions, findings, and behavior.

Rule conditions

{
  "event_source": "signin",
  "status": "success",
  "is_interactive": false,
  "window_minutes": 60,
  "baseline_minutes": 1440,
  "threshold": 1
}

Evidence emitted

  • - prior interactive success and current non-interactive success refs
  • - delta minutes and location comparison
  • - client_app_used context

Alert and incident keys

Source ID: non_interactive_signin_anomaly:{prior_interactive_id}:{current_non_interactive_id}

Grouping key: {tenant_id}:non_interactive_signin_anomaly:identity:{identity_id}

Recommended next actions

  • - Validate session/token context for expected automation.
  • - Revoke sessions if unexpected non-interactive usage appears.
  • - Disable account and investigate token misuse if unauthorized.

11. Credential theft pattern across identities

credential_theft_detection | credential_theft_detection

sign inhigh

Trigger logic

  1. Group failed sign-ins by public source IP address.
  2. Use a 20-minute sliding window and require at least 6 failures targeting at least 4 distinct identities.
  3. Emit one grouped detection keyed to source IP and event window.
  4. Create/update a single incident story for the source IP spray pattern.

Scoring and severity

  • - Sign-in base scoring (base_detection_weight=16, activity_recency_weight=15) + repeated_event_weight + multi_identity_failure_burst_weight=12.
  • - Severity is score-driven (critical >= 55, high >= 40, medium >= 25, else low). Sign-in and directory-audit rules add context weights for permissions, findings, and behavior.

Rule conditions

{
  "event_source": "signin",
  "status": "failure",
  "threshold": 6,
  "window_minutes": 20,
  "distinct_identity_min": 4,
  "group_by": "ip_address"
}

Evidence emitted

  • - all failed sign-in events in the qualifying IP window
  • - public source IP, distinct identity count, and distinct app count
  • - first/latest sign-in event ids for grouped story anchoring

Alert and incident keys

Source ID: credential_theft_detection:{public_ip}:{first_event_id}:{latest_event_id}

Grouping key: {tenant_id}:credential_theft_detection:ip:{public_ip}

Recommended next actions

  • - Treat as password spray or credential stuffing until disproven.
  • - Block/challenge source IP and validate conditional access behavior.
  • - Revoke sessions and reset credentials for impacted users when needed.

12. Malicious datacenter utilization pattern

malicious_datacenter_utilization | malicious_datacenter_utilization

sign inhigh

Trigger logic

  1. Group successful sign-ins by public source IP address.
  2. Use a 30-minute sliding window and require at least 5 successes across at least 4 identities.
  3. Require either datacenter/proxy risk indicators or a strong non-interactive fan-out pattern.
  4. Emit one grouped detection keyed to source IP and event window.

Scoring and severity

  • - Sign-in base scoring (base_detection_weight=18, activity_recency_weight=15) + repeated_event_weight + location_change_weight + datacenter_indicator_weight.
  • - Severity is score-driven (critical >= 55, high >= 40, medium >= 25, else low). Sign-in and directory-audit rules add context weights for permissions, findings, and behavior.

Rule conditions

{
  "event_source": "signin",
  "status": "success",
  "threshold": 5,
  "window_minutes": 30,
  "distinct_identity_min": 4,
  "requires_datacenter_signal_or_non_interactive_burst": true,
  "group_by": "ip_address"
}

Evidence emitted

  • - all successful sign-in events in the qualifying IP window
  • - datacenter/proxy signal counts and non-interactive counts
  • - distinct identities/apps/locations with first/latest event anchors

Alert and incident keys

Source ID: malicious_datacenter_utilization:{public_ip}:{first_event_id}:{latest_event_id}

Grouping key: {tenant_id}:malicious_datacenter_utilization:ip:{public_ip}

Recommended next actions

  • - Validate whether the source infrastructure is approved.
  • - Investigate affected users for token misuse or session theft patterns.
  • - Contain impacted identities when activity is unauthorized.

This is a behavior-based heuristic for currently ingested logs, not a third-party datacenter-intel feed match.

13. Malicious Inbox Rule Detection

malicious_inbox_rule_detection | malicious_inbox_rule_detection

o365 managementhigh

Trigger logic

  1. Inspect Office 365 Management Exchange events for inbox-rule operations.
  2. Require suspicious rule actions (forward/redirect/delete/hide behaviors).
  3. Emit detection when action profile indicates likely mailbox persistence or notification suppression.

Scoring and severity

  • - Fixed high-severity mailbox abuse score model for suspicious rule operation + action combinations.
  • - Severity is score-driven (critical >= 55, high >= 40, medium >= 25, else low). Sign-in and directory-audit rules add context weights for permissions, findings, and behavior.

Rule conditions

{
  "event_source": "o365_management",
  "workload": "exchange",
  "requires_inbox_rule_operation": true,
  "requires_suspicious_rule_actions": true
}

Evidence emitted

  • - o365_management source log id and operation/workload metadata
  • - matched inbox rule operation markers and suspicious action markers
  • - mailbox actor context where present

Alert and incident keys

Source ID: malicious_inbox_rule_detection:{source_log_id}

Grouping key: {tenant_id}:malicious_inbox_rule_detection:mailbox:{actor_or_source}

Recommended next actions

  • - Review and disable suspicious inbox rules.
  • - Inspect forwarding/redirect settings and mailbox access history.
  • - Contain impacted identity if unauthorized changes are confirmed.

14. Suspicious Email Filter Hiding Generic Account and Security Notifications

suspicious_email_filter_hiding_generic_security_notifications | suspicious_email_filter_hiding_generic_security_notifications

o365 managementhigh

Trigger logic

  1. Start from suspicious Exchange inbox-rule manipulation.
  2. Require keyword overlap with generic account/security notification terms.
  3. Emit detection when filter terms suggest suppression of security notices.

Scoring and severity

  • - Fixed high-severity rule for likely suppression of user/account security notifications.
  • - Severity is score-driven (critical >= 55, high >= 40, medium >= 25, else low). Sign-in and directory-audit rules add context weights for permissions, findings, and behavior.

Rule conditions

{
  "event_source": "o365_management",
  "workload": "exchange",
  "requires_filter_terms": [
    "account",
    "security",
    "alert",
    "notification"
  ],
  "minimum_filter_term_matches": 3
}

Evidence emitted

  • - same evidence base as inbox-rule detector plus matched keyword list
  • - mailbox actor and operation context

Alert and incident keys

Source ID: suspicious_email_filter_hiding_generic_security_notifications:{source_log_id}

Grouping key: {tenant_id}:suspicious_email_filter_hiding_generic_security_notifications:mailbox:{actor_or_source}

Recommended next actions

  • - Remove or disable suspicious mailbox filter rules immediately.
  • - Validate whether user received/acted on concurrent phishing content.
  • - Reset credentials and review MFA posture if compromise indicators exist.

15. Suspicious Email Filter Hiding Finance and BEC Keywords

suspicious_email_filter_hiding_finance_bec_keywords | suspicious_email_filter_hiding_finance_bec_keywords

o365 managementcritical

Trigger logic

  1. Start from suspicious Exchange inbox-rule manipulation.
  2. Require finance/BEC keyword suppression terms (invoice/wire/payment/etc).
  3. Escalate as critical due to likely business email compromise monetization path.

Scoring and severity

  • - Critical mailbox-abuse scoring path for finance/BEC suppression indicators.
  • - Severity is score-driven (critical >= 55, high >= 40, medium >= 25, else low). Sign-in and directory-audit rules add context weights for permissions, findings, and behavior.

Rule conditions

{
  "event_source": "o365_management",
  "workload": "exchange",
  "requires_filter_terms": [
    "finance",
    "invoice",
    "wire",
    "payment",
    "vendor"
  ],
  "minimum_filter_term_matches": 2
}

Evidence emitted

  • - matched finance/BEC keyword set
  • - suspicious inbox-rule action profile and actor context
  • - source log references for forensic triage

Alert and incident keys

Source ID: suspicious_email_filter_hiding_finance_bec_keywords:{source_log_id}

Grouping key: {tenant_id}:suspicious_email_filter_hiding_finance_bec_keywords:mailbox:{actor_or_source}

Recommended next actions

  • - Treat as potential active BEC attempt and isolate mailbox quickly.
  • - Review recent sent/forwarded/deleted finance communications.
  • - Coordinate with finance and IR stakeholders for transaction verification.

16. Suspicious Email Filter Hiding External Account Security Notifications

suspicious_email_filter_hiding_external_security_notifications | suspicious_email_filter_hiding_external_security_notifications

o365 managementhigh

Trigger logic

  1. Start from suspicious Exchange inbox-rule manipulation.
  2. Require external-account security notification keyword overlap observed in Exchange inbox-rule terms (for example Google/Gmail notifications seen in mailbox content).
  3. Emit detection for likely cross-platform credential-theft suppression behavior using O365 inbox-rule telemetry.

Scoring and severity

  • - High-severity mailbox-abuse scoring for cross-platform security-notification suppression.
  • - Severity is score-driven (critical >= 55, high >= 40, medium >= 25, else low). Sign-in and directory-audit rules add context weights for permissions, findings, and behavior.

Rule conditions

{
  "event_source": "o365_management",
  "workload": "exchange",
  "requires_filter_terms": [
    "google",
    "gmail",
    "security alert",
    "verification code"
  ],
  "minimum_filter_term_matches": 2
}

Evidence emitted

  • - matched external security-notification keyword markers
  • - rule action markers and mailbox actor metadata
  • - source log references for incident story

Alert and incident keys

Source ID: suspicious_email_filter_hiding_external_security_notifications:{source_log_id}

Grouping key: {tenant_id}:suspicious_email_filter_hiding_external_security_notifications:mailbox:{actor_or_source}

Recommended next actions

  • - Remove suspicious rules and inspect account for phishing foothold indicators.
  • - Check for linked identity changes and suspicious OAuth grants.
  • - Reset affected credentials and enforce step-up authentication.

17. Attack chain: risky login to MFA change to inbox rule

itdr_chain_risky_login_mfa_change_inbox_rule | itdr_chain_risky_login_mfa_change_inbox_rule

attack chaincritical

Trigger logic

  1. Correlate risky sign-in detection with authentication-method change event on same identity.
  2. Require subsequent suspicious inbox-rule detection for same mailbox context.
  3. Trigger when full chain occurs within 24 hours.

Scoring and severity

  • - Critical chain score based on multi-stage compromise progression across identity + mailbox telemetry.
  • - Severity is score-driven (critical >= 55, high >= 40, medium >= 25, else low). Sign-in and directory-audit rules add context weights for permissions, findings, and behavior.

Rule conditions

{
  "sequence": [
    "risky_signin_success",
    "authentication_method_change",
    "mailbox_rule_manipulation"
  ],
  "window_hours": 24,
  "scope": "same_identity"
}

Evidence emitted

  • - risky sign-in alert id
  • - directory audit MFA-change event id
  • - inbox-rule detection alert id

Alert and incident keys

Source ID: itdr_chain_risky_login_mfa_change_inbox_rule:{risky_alert_id}:{mfa_event_id}:{inbox_alert_id}

Grouping key: {tenant_id}:itdr_chain_risky_login_mfa_change_inbox_rule:identity:{identity}

Recommended next actions

  • - Contain identity immediately (revoke sessions, reset credentials, validate MFA methods).
  • - Remove mailbox persistence and investigate scope of compromise.
  • - Escalate incident as active account takeover sequence.

18. Attack chain: password spray to success to lateral movement

itdr_chain_spray_success_lateral | itdr_chain_spray_success_lateral

attack chaincritical

Trigger logic

  1. Start from credential theft spray alert keyed to source IP.
  2. Require successful sign-in detections from same source IP shortly after spray.
  3. Require successful multi-identity access from same source IP within 120 minutes.

Scoring and severity

  • - Critical chain score prioritizing spray-to-compromise progression plus observed lateral movement.
  • - Severity is score-driven (critical >= 55, high >= 40, medium >= 25, else low). Sign-in and directory-audit rules add context weights for permissions, findings, and behavior.

Rule conditions

{
  "sequence": [
    "credential_theft_detection",
    "successful_signin_after_failures_or_risky_success",
    "multi_identity_same_ip_access"
  ],
  "window_minutes": 120,
  "scope": "source_ip"
}

Evidence emitted

  • - spray alert id and matched successful sign-in alert ids
  • - shared source IP
  • - latest successful sign-in event demonstrating multi-identity access

Alert and incident keys

Source ID: itdr_chain_spray_success_lateral:{spray_alert_id}:{first_success_alert_id}:{latest_signin_id}

Grouping key: {tenant_id}:itdr_chain_spray_success_lateral:ip:{public_source_ip}

Recommended next actions

  • - Block/challenge source infrastructure and enforce step-up controls.
  • - Contain impacted identities and review additional persistence attempts.
  • - Investigate for follow-on mailbox/OAuth/data-access abuse.

19. Attack chain: token replay across multiple identities

itdr_chain_token_replay_multi_identity | itdr_chain_token_replay_multi_identity

attack chainhigh

Trigger logic

  1. Aggregate non-interactive token replay alerts by shared source IP.
  2. Require replay detections spanning at least two identities.
  3. Trigger chain when shared infrastructure is reused across identities within 24 hours.

Scoring and severity

  • - High-severity chain score emphasizing cross-identity session compromise pattern.
  • - Severity is score-driven (critical >= 55, high >= 40, medium >= 25, else low). Sign-in and directory-audit rules add context weights for permissions, findings, and behavior.

Rule conditions

{
  "sequence": [
    "non_interactive_token_replay",
    "shared_source_ip",
    "multiple_identities"
  ],
  "window_hours": 24,
  "group_by": "source_ip"
}

Evidence emitted

  • - token replay alert ids tied to shared source IP
  • - distinct identity count and identity refs
  • - shared source infrastructure marker

Alert and incident keys

Source ID: itdr_chain_token_replay_multi_identity:{source_ip}:{first_alert_id}:{latest_alert_id}

Grouping key: {tenant_id}:itdr_chain_token_replay_multi_identity:ip:{shared_source_ip}

Recommended next actions

  • - Treat as possible token theft campaign spanning multiple identities.
  • - Revoke active sessions/tokens across affected identities.
  • - Investigate workload, mailbox, and API activity from shared infrastructure.

20. MFA denied challenge followed by successful sign-in

mfa_denied_then_success | mfa_denied_then_success

sign inhigh

Trigger logic

  1. Start from successful sign-ins and look back for prior failures on the same identity and app context.
  2. Require at least 2 preceding MFA-denied failures within a 30-minute window.
  3. Require the latest denied challenge to be close to the later success (default 15 minutes).
  4. Emit one detection keyed to the successful sign-in event.

Scoring and severity

  • - Sign-in base scoring (base_detection_weight=21) + repeated_event_weight + mfa_challenge_bypass_weight=8.
  • - Severity is score-driven (critical >= 55, high >= 40, medium >= 25, else low). Sign-in and directory-audit rules add context weights for permissions, findings, and behavior.

Rule conditions

{
  "event_source": "signin",
  "status": "mfa_denied_then_success",
  "threshold": 2,
  "window_minutes": 30,
  "success_after_minutes": 15
}

Evidence emitted

  • - preceding MFA-denied sign-in event refs plus successful sign-in event ref
  • - mfa_denied_count and minutes_since_latest_mfa_denied
  • - app and IP context on the successful sign-in

Alert and incident keys

Source ID: mfa_denied_then_success:{success_event_id}

Grouping key: {tenant_id}:mfa_denied_then_success:identity:{identity_id}:{app_key}

Recommended next actions

  • - Treat this as potential MFA push-fatigue/challenge manipulation until user intent is verified.
  • - Revoke sessions and require reauthentication if legitimacy is unclear.
  • - Review MFA methods/registration and reset credentials when compromise indicators persist.

21. Authentication method change after risky sign-in

auth_method_change_after_risky_signin | auth_method_change_after_risky_signin

attack chainhigh

Trigger logic

  1. Start from risky successful sign-in detections for an identity.
  2. Require a correlated authentication-method change event for the same identity within 24 hours.
  3. Emit an alert even when no mailbox-rule manipulation is seen yet.
  4. Use this as an early warning stage before deeper persistence indicators appear.

Scoring and severity

  • - High-severity chain scoring (sequence_steps_weight + time_proximity_weight + auth_control_change_weight).
  • - Severity is score-driven (critical >= 55, high >= 40, medium >= 25, else low). Sign-in and directory-audit rules add context weights for permissions, findings, and behavior.

Rule conditions

{
  "sequence": [
    "risky_signin_success",
    "authentication_method_change"
  ],
  "window_hours": 24,
  "scope": "same_identity"
}

Evidence emitted

  • - risky sign-in alert id
  • - directory audit authentication-method change event id
  • - identity markers and 24-hour chain window context

Alert and incident keys

Source ID: auth_method_change_after_risky_signin:{risky_alert_id}:{mfa_event_id}

Grouping key: {tenant_id}:auth_method_change_after_risky_signin:identity:{identity}

Recommended next actions

  • - Validate whether the authentication-method change was expected and approved by the user.
  • - Revoke sessions and reset credentials if sign-in legitimacy is uncertain.
  • - Review MFA registration changes and monitor for follow-on abuse attempts.

22. Password reset after risky sign-in

password_reset_after_risky_signin | password_reset_after_risky_signin

attack chainhigh

Trigger logic

  1. Start from risky successful sign-in detections for an identity.
  2. Require a correlated password reset/change directory-audit event for the same identity within 24 hours.
  3. Emit an alert even when no mailbox or MFA-manipulation signal is present.
  4. Use this as a persistence/credential-manipulation warning stage after suspicious access.

Scoring and severity

  • - High-severity chain scoring (sequence_steps_weight + time_proximity_weight + credential_manipulation_weight).
  • - Severity is score-driven (critical >= 55, high >= 40, medium >= 25, else low). Sign-in and directory-audit rules add context weights for permissions, findings, and behavior.

Rule conditions

{
  "sequence": [
    "risky_signin_success",
    "password_reset"
  ],
  "window_hours": 24,
  "scope": "same_identity"
}

Evidence emitted

  • - risky sign-in alert id
  • - directory audit password reset event id
  • - identity markers and 24-hour chain window context

Alert and incident keys

Source ID: password_reset_after_risky_signin:{risky_alert_id}:{password_event_id}

Grouping key: {tenant_id}:password_reset_after_risky_signin:identity:{identity}

Recommended next actions

  • - Validate whether the password reset/change was initiated by the legitimate user.
  • - Revoke sessions and force secure credential reset if legitimacy is uncertain.
  • - Review follow-on OAuth/app consent and mailbox activity for persistence attempts.

24. MFA method weakened after risky sign-in

mfa_method_weakened | mfa_method_weakened

attack chaincritical

Trigger logic

  1. Start from risky successful sign-in detections for an identity.
  2. Require a correlated authentication-method change event indicating weaker MFA posture within 24 hours.
  3. Prioritize method removals/default changes or weak-method indicators.
  4. Escalate as active persistence/MFA-bypass risk until intent is verified.

Scoring and severity

  • - Critical chain scoring (sequence_steps_weight + time_proximity_weight + mfa_assurance_reduction_weight).
  • - Severity is score-driven (critical >= 55, high >= 40, medium >= 25, else low). Sign-in and directory-audit rules add context weights for permissions, findings, and behavior.

Rule conditions

{
  "sequence": [
    "risky_signin_success",
    "mfa_method_weakened"
  ],
  "window_hours": 24,
  "scope": "same_identity"
}

Evidence emitted

  • - risky sign-in alert id
  • - directory audit MFA-weakened event id
  • - identity markers and chain window context

Alert and incident keys

Source ID: mfa_method_weakened:{risky_alert_id}:{mfa_weakened_event_id}

Grouping key: {tenant_id}:mfa_method_weakened:identity:{identity}

Recommended next actions

  • - Treat as potential MFA-bypass persistence and validate user intent immediately.
  • - Revoke sessions and require strong MFA method re-registration.
  • - Audit role/consent/mailbox changes in the same window for follow-on abuse.

25. Privileged role assignment by risky actor

privileged_role_assignment_risky_actor | privileged_role_assignment_risky_actor

attack chaincritical

Trigger logic

  1. Start from risky successful sign-in detections for an identity.
  2. Require a correlated privileged role assignment event by the same actor within 24 hours.
  3. Treat this as likely privilege-escalation behavior until disproven.
  4. Escalate incident early to reduce blast radius.

Scoring and severity

  • - Critical chain scoring (sequence_steps_weight + time_proximity_weight + privilege_escalation_weight).
  • - Severity is score-driven (critical >= 55, high >= 40, medium >= 25, else low). Sign-in and directory-audit rules add context weights for permissions, findings, and behavior.

Rule conditions

{
  "sequence": [
    "risky_signin_success",
    "privileged_role_assignment"
  ],
  "window_hours": 24,
  "scope": "same_identity"
}

Evidence emitted

  • - risky sign-in alert id
  • - directory audit privileged role assignment event id
  • - identity actor markers and chain window context

Alert and incident keys

Source ID: privileged_role_assignment_risky_actor:{risky_alert_id}:{role_event_id}

Grouping key: {tenant_id}:privileged_role_assignment_risky_actor:identity:{identity}

Recommended next actions

  • - Revoke newly assigned privileged roles until approval context is confirmed.
  • - Contain actor identity and invalidate active sessions/tokens.
  • - Review all admin actions from the same session window.

26. Likely dormant workload identity suddenly active

unused_workload_identity_suddenly_active | unused_workload_identity_suddenly_active

directory audithigh

Trigger logic

  1. Evaluate older workload identities (service principals) for newly observed recent sign-in activity.
  2. Require concurrent sensitive governance change context from directory audit in the same period.
  3. Prioritize identities with high-risk permissions, owner gaps, or linked open findings. Microsoft first-party SPNs and connector-principal SPNs are excluded from the ownerless signal.
  4. Bucket the activation timestamp into 6-hour windows so multiple sign-ins from the same dormant SPN within a window collapse into one alert (regression guard for incident #19 with 163 alerts).
  5. Emit incident-scoped alert keyed to service principal and the 6-hour bucket.

Scoring and severity

  • - High-severity scoring from workload risk context + dormant-age/reactivation/governance-change weights.
  • - Severity is score-driven (critical >= 55, high >= 40, medium >= 25, else low). Sign-in and directory-audit rules add context weights for permissions, findings, and behavior.

Rule conditions

{
  "event_source": "workload_identity_activity",
  "min_age_days": 90,
  "recent_signin_window_hours": 24,
  "requires_sensitive_change_context": true,
  "activation_bucket_hours": 6
}

Evidence emitted

  • - service principal id and last sign-in timestamp
  • - linked sensitive directory-audit change event
  • - workload age/risk context and linked findings

Alert and incident keys

Source ID: unused_workload_identity_suddenly_active:{service_principal_id}:{6h_activation_bucket_epoch}

Grouping key: {tenant_id}:unused_workload_identity_suddenly_active:service_principal:{service_principal_id}

Recommended next actions

  • - Validate ownership/business intent for this workload identity activation.
  • - Review and roll back unauthorized credential/permission changes.
  • - Disable or quarantine workload identity when activation cannot be justified.
Go to sign inPlatform value overviewWhy we built ITDRDetection validationLicense coverageFAQ