LoFP LoFP / users may register mfa methods legitimally, investigate and filter as needed.

Techniques

Sample rules

O365 New MFA Method Registered

Description

This analytic detects the registration of a new Multi-Factor Authentication (MFA) method associated with a user account within Office 365 by monitoring O365 audit logs and configurations. While adding a new MFA method can be a routine and legitimate action, it can also be indicative of an attacker’s attempt to maintain persistence on a compromised account. By registering a new MFA method, attackers can potentially bypass existing security measures, allowing them to authenticate using stolen credentials without raising alarms. Monitoring for such changes is crucial, especially if the addition is not preceded by a user request or if it deviates from typical user behavior. If an attacker successfully registers a new MFA method on a compromised account, they can solidify their access, making it harder for legitimate users to regain control. The attacker can then operate with the privileges of the compromised account, potentially accessing sensitive data, making unauthorized changes, or even escalating their privileges further. Immediate action would be required to verify the legitimacy of the MFA change and, if malicious, to remediate and secure the affected account.

Detection logic

`o365_management_activity` Workload=AzureActiveDirectory  Operation="Update user."  
| eval propertyName = mvindex('ModifiedProperties{}.Name', 0) 
| search propertyName = StrongAuthenticationMethod 
| eval oldvalue = mvindex('ModifiedProperties{}.OldValue',0) 
| eval newvalue = mvindex('ModifiedProperties{}.NewValue',0) 
| rex field=newvalue max_match=0 "(?i)(?<new_method_type>\"MethodType\")" 
| rex field=oldvalue max_match=0 "(?i)(?<old_method_type>\"MethodType\")" 
| eval count_new_method_type = coalesce(mvcount(new_method_type), 0) 
| eval count_old_method_type = coalesce(mvcount(old_method_type), 0) 
|  where count_new_method_type > count_old_method_type 
|  stats earliest(_time) as firstTime latest(_time) as lastTime values(propertyName) by user newvalue oldvalue 
| `security_content_ctime(firstTime)` 
| `security_content_ctime(lastTime)` 
| `o365_new_mfa_method_registered_filter`

Azure AD New MFA Method Registered

Description

This analytic detects the registration of a new Multi-Factor Authentication (MFA) method associated with a user account within Azure Active Directory by monitoring Azure AD audit logs and configurations. While adding a new MFA method can be a routine and legitimate action, it can also be indicative of an attacker’s attempt to maintain persistence on a compromised account. By registering a new MFA method, attackers can potentially bypass existing security measures, allowing them to authenticate using stolen credentials without raising alarms. Monitoring for such changes is crucial, especially if the addition is not preceded by a user request or if it deviates from typical user behavior. If an attacker successfully registers a new MFA method on a compromised account, they can solidify their access, making it harder for legitimate users to regain control. The attacker can then operate with the privileges of the compromised account, potentially accessing sensitive data, making unauthorized changes, or even escalating their privileges further. Immediate action would be required to verify the legitimacy of the MFA change and, if malicious, to remediate and secure the affected account.

Detection logic

`azure_monitor_aad`  operationName="Update user" 
| rename properties.* as *  
| eval propertyName = mvindex('targetResources{}.modifiedProperties{}.displayName', 0) 
| search propertyName = StrongAuthenticationMethod 
| eval oldvalue = mvindex('targetResources{}.modifiedProperties{}.oldValue',0) 
| eval newvalue = mvindex('targetResources{}.modifiedProperties{}.newValue',0) 
| rex field=newvalue max_match=0 "(?i)(?<new_method_type>\"MethodType\")" 
| rex field=oldvalue max_match=0 "(?i)(?<old_method_type>\"MethodType\")" 
| eval count_new_method_type = coalesce(mvcount(new_method_type), 0) 
| eval count_old_method_type = coalesce(mvcount(old_method_type), 0) 
| stats earliest(_time) as firstTime latest(_time) as lastTime values(propertyName) by user newvalue oldvalue 
| `security_content_ctime(firstTime)` 
| `security_content_ctime(lastTime)` 
| `azure_ad_new_mfa_method_registered_filter`