Entra sign-in frequency weakened

Severity criticalCloud & SaaSSingle eventstablecloud.identity.entra_signin_frequency_weakened · v1.0.0

A Conditional Access policy's SIGN-IN FREQUENCY was changed.

What it detects

A Conditional Access policy's SIGN-IN FREQUENCY was changed.

Sign-in frequency is what puts an expiry on a stolen token. With it set to a day, a session lifted from a browser dies within a day whatever else the attacker does; set to never, the same token is a permanent credential that no password reset touches, because it is not a password.

This is the quietest possible privilege escalation. Nothing is granted, no account is created, no role changes — an existing policy stays in place and keeps reporting as enabled, while the control it was bought for stops applying. A tenant reviewing its CA posture sees a green policy list.

The pack already alerts on CA policies created, changed or deleted BY CMDLET. This covers the directory-side spelling — Update policy., one of the commonest operations in any tenant — which the cmdlet list does not reach and which cannot be alerted on wholesale.

It reads ModifiedProperties directly rather than the message. The message folds audit properties for grepping, and a JSON-object value is deliberately elided there as <changed> to keep it readable, so the policy body — the only place the session control appears — is reachable only through ext:.

MITRE ATT&CK mapping

  • T1556Modify Authentication Process· Persistence
  • T1484Domain or Tenant Policy Modification· Privilege Escalation
  • T1550.001Use Alternate Authentication Material: Application Access Token· Defense Evasion

False positives and triage

Identity teams tune sign-in frequency deliberately, usually loosening it after users complain about re-authentication. That makes the WHO and the DIRECTION the question, not the event. A change by a named identity admin, during hours, with a ticket, that TIGHTENS the interval is housekeeping. Escalate a change that lengthens or removes the interval, one made by an account that has not touched Conditional Access before, or one that lands close to other identity findings on the same actor — the sequence "sign in, weaken the policy, keep the token" is the whole technique. Pull the policy's previous value from the same record: the before/after is in ModifiedProperties and answers the direction question outright.

The rule

Declarative YAML read by the detection engine — data, never executed. Confidence 70%. Source: rules/cloud/entra_signin_frequency_weakened.yaml, licensed under the Apache License 2.0.

id: cloud.identity.entra_signin_frequency_weakened
version: 1.0.0
status: stable
severity: critical
confidence: 0.7
platforms: [application]
mitre_techniques: [T1556, T1484, T1550.001]
description: |
  A Conditional Access policy's SIGN-IN FREQUENCY was changed.

  Sign-in frequency is what puts an expiry on a stolen token. With it set to a day,
  a session lifted from a browser dies within a day whatever else the attacker
  does; set to never, the same token is a permanent credential that no password
  reset touches, because it is not a password.

  This is the quietest possible privilege escalation. Nothing is granted, no
  account is created, no role changes — an existing policy stays in place and
  keeps reporting as enabled, while the control it was bought for stops applying.
  A tenant reviewing its CA posture sees a green policy list.

  The pack already alerts on CA policies created, changed or deleted BY CMDLET.
  This covers the directory-side spelling — `Update policy.`, one of the commonest
  operations in any tenant — which the cmdlet list does not reach and which cannot
  be alerted on wholesale.

  It reads `ModifiedProperties` directly rather than the message. The message folds
  audit properties for grepping, and a JSON-object value is deliberately elided
  there as `<changed>` to keep it readable, so the policy body — the only place the
  session control appears — is reachable only through `ext:`.
match:
  provider_any: [Office365, AzureAD]
  event_action_contains_any:
    - "Update policy"
    - "Add policy"
  ext:ModifiedProperties_contains_any:
    - "SignInFrequency"
    - "signInFrequency"
    - "sessionControls"
    - "persistentBrowser"
correlation_keys: [user_name]
false_positive_guidance: |
  Identity teams tune sign-in frequency deliberately, usually loosening it after
  users complain about re-authentication. That makes the WHO and the DIRECTION the
  question, not the event. A change by a named identity admin, during hours, with a
  ticket, that TIGHTENS the interval is housekeeping. Escalate a change that
  lengthens or removes the interval, one made by an account that has not touched
  Conditional Access before, or one that lands close to other identity findings on
  the same actor — the sequence "sign in, weaken the policy, keep the token" is the
  whole technique. Pull the policy's previous value from the same record: the
  before/after is in `ModifiedProperties` and answers the direction question
  outright.

Related detections

Run this rule on your own logs — offline

KIROSEC runs this rule and the rest of the library over Windows, Linux, macOS and cloud audit logs on the analyst's own machine. Every alert links to the events that raised it, and nothing leaves the device.

Browse all detections