Files
splunk-security_content/detections/cloud/o365_disable_mfa.yml

71 lines
3.0 KiB
YAML

name: O365 Disable MFA
id: c783dd98-c703-4252-9e8a-f19d9f5c949e
version: 7
date: '2025-05-02'
author: Rod Soto, Splunk
status: production
type: TTP
description: The following analytic identifies instances where Multi-Factor Authentication
(MFA) is disabled for a user within the Office 365 environment. It leverages O365
audit logs, specifically focusing on events related to MFA settings. Disabling MFA
removes a critical security layer, making accounts more vulnerable to unauthorized
access. If confirmed malicious, this activity could indicate an attacker attempting
to maintain persistence or an insider threat, significantly increasing the risk
of unauthorized access. Immediate investigation is required to validate the reason
for disabling MFA, potentially re-enable it, and assess any other suspicious activities
related to the affected account.
data_source:
- O365 Disable Strong Authentication.
search: '`o365_management_activity` Operation="Disable Strong Authentication."
| rename UserId as user object as src_user
| fillnull
| stats count min(_time) as firstTime max(_time) as lastTime by signature dest user src vendor_account vendor_product src_user
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
| `o365_disable_mfa_filter`'
how_to_implement: You must install the Splunk Microsoft Office 365 add-on. This search
works with o365:management:activity
known_false_positives: Unless it is a special case, it is uncommon to disable MFA
or Strong Authentication
references:
- https://attack.mitre.org/techniques/T1556/
drilldown_searches:
- name: View the detection results for - "$user$"
search: '%original_detection_search% | search user = "$user$"'
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
- name: View risk events for the last 7 days for - "$user$"
search: '| from datamodel Risk.All_Risk | search normalized_risk_object IN ("$user$")
starthoursago=168 | stats count min(_time) as firstTime max(_time) as lastTime
values(search_name) as "Search Name" values(risk_message) as "Risk Message" values(analyticstories)
as "Analytic Stories" values(annotations._all) as "Annotations" values(annotations.mitre_attack.mitre_tactic)
as "ATT&CK Tactics" by normalized_risk_object | `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`'
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
rba:
message: User $src_user$ has executed an operation $signature$ for user $user$
risk_objects:
- field: user
type: user
score: 64
threat_objects: []
tags:
analytic_story:
- Office 365 Persistence Mechanisms
asset_type: O365 Tenant
mitre_attack_id:
- T1556
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
security_domain: threat
tests:
- name: True Positive Test
attack_data:
- data:
https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1556/o365_disable_mfa/o365_disable_mfa.json
sourcetype: o365:management:activity
source: o365