[Deprecated] Explicit MFA Deny
| Id | a22740ec-fc1e-4c91-8de6-c29c6450ad00 |
| Rulename | [Deprecated] Explicit MFA Deny |
| Description | User explicitly denies MFA push, indicating that login was not expected and the account’s password may be compromised. This rule is deprecated as of July-2024. Alternative rule with similar logic and contex from more data source is available at https://github.com/Azure/Azure-Sentinel/blob/master/Solutions/Microsoft%20Entra%20ID/Analytic%20Rules/MFARejectedbyUser.yaml |
| Severity | Medium |
| Tactics | CredentialAccess |
| Techniques | T1110 |
| Required data connectors | AzureActiveDirectory MicrosoftThreatProtection |
| Kind | Scheduled |
| Query frequency | 1h |
| Query period | 1h |
| Trigger threshold | 0 |
| Trigger operator | gt |
| Source Uri | https://github.com/Azure/Azure-Sentinel/blob/master/Solutions/Microsoft Entra ID/Analytic Rules/ExplicitMFADeny.yaml |
| Version | 1.0.7 |
| Arm template | a22740ec-fc1e-4c91-8de6-c29c6450ad00.json |
let aadFunc = (tableName: string) {
table(tableName)
| where ResultType == 500121
| where Status has "MFA Denied; user declined the authentication" or Status has "MFA denied; Phone App Reported Fraud"
| extend Type = Type, PublicIP = IPAddress
| extend
Name = tostring(split(UserPrincipalName, '@', 0)[0]),
UPNSuffix = tostring(split(UserPrincipalName, '@', 1)[0])
};
let aadSignin = aadFunc("SigninLogs");
let dvcInfo = DeviceInfo
| extend SensorHealthState = column_ifexists("SensorHealthState", "")
| where OnboardingStatus == "Onboarded" and SensorHealthState == "Active"
| project PublicIP, AadDeviceId;
let aadNonInt = aadFunc("AADNonInteractiveUserSignInLogs");
union isfuzzy=true aadSignin, aadNonInt
| join kind=leftouter dvcInfo on PublicIP
description: |
'User explicitly denies MFA push, indicating that login was not expected and the account's password may be compromised.
This rule is deprecated as of July-2024. Alternative rule with similar logic and contex from more data source
is available at https://github.com/Azure/Azure-Sentinel/blob/master/Solutions/Microsoft%20Entra%20ID/Analytic%20Rules/MFARejectedbyUser.yaml'
kind: Scheduled
tactics:
- CredentialAccess
requiredDataConnectors:
- connectorId: AzureActiveDirectory
dataTypes:
- SigninLogs
- connectorId: AzureActiveDirectory
dataTypes:
- AADNonInteractiveUserSignInLogs
- connectorId: MicrosoftThreatProtection
dataTypes:
- DeviceInfo
OriginalUri: https://github.com/Azure/Azure-Sentinel/blob/master/Solutions/Microsoft Entra ID/Analytic Rules/ExplicitMFADeny.yaml
severity: Medium
name: '[Deprecated] Explicit MFA Deny'
triggerThreshold: 0
queryPeriod: 1h
query: |
let aadFunc = (tableName: string) {
table(tableName)
| where ResultType == 500121
| where Status has "MFA Denied; user declined the authentication" or Status has "MFA denied; Phone App Reported Fraud"
| extend Type = Type, PublicIP = IPAddress
| extend
Name = tostring(split(UserPrincipalName, '@', 0)[0]),
UPNSuffix = tostring(split(UserPrincipalName, '@', 1)[0])
};
let aadSignin = aadFunc("SigninLogs");
let dvcInfo = DeviceInfo
| extend SensorHealthState = column_ifexists("SensorHealthState", "")
| where OnboardingStatus == "Onboarded" and SensorHealthState == "Active"
| project PublicIP, AadDeviceId;
let aadNonInt = aadFunc("AADNonInteractiveUserSignInLogs");
union isfuzzy=true aadSignin, aadNonInt
| join kind=leftouter dvcInfo on PublicIP
relevantTechniques:
- T1110
id: a22740ec-fc1e-4c91-8de6-c29c6450ad00
queryFrequency: 1h
status: Available
triggerOperator: gt
version: 1.0.7
entityMappings:
- entityType: Account
fieldMappings:
- columnName: UserPrincipalName
identifier: FullName
- columnName: Name
identifier: Name
- columnName: UPNSuffix
identifier: UPNSuffix
- entityType: IP
fieldMappings:
- columnName: PublicIP
identifier: Address
- entityType: AzureResource
fieldMappings:
- columnName: ResourceId
identifier: ResourceId
- entityType: CloudApplication
fieldMappings:
- columnName: AppDisplayName
identifier: Name
- columnName: AppId
identifier: AppId