Control: 1.1.9 Enable Azure AD Identity Protection user risk policies
Description
Azure Active Directory Identity Protection user risk policies detect the probability that a user account has been compromised.
With the user risk policy turned on, Azure AD detects the probability that a user account has been compromised. As an administrator, you can configure a user risk conditional access policy to automatically respond to a specific user risk level. For example, you can block access to your resources or require a password change to get a user account back into a clean state.
Remediation
To configure a User risk policy, use the following steps:
- Log in to 
https://admin.microsoft.comas aGlobal Administrator. - Go to 
Admin centersand click onAzure Active Directory. - Select 
Azure Active DirectorythenSecurity. - Select 
Conditional Access. - Create a new policy by selecting 
New policy. - Set the following conditions within the policy.
- Under 
Users or workload identitieschooseAll users. - Under 
Cloud apps or actionschooseAll cloud apps. - Under 
ConditionschooseUser riskthenYesin the right pane followed by the appropriate level. - Under 
Access ControlsselectGrantthen in the right pane clickGrant accessthen selectRequire password change. 
 - Under 
 - Click 
Select. - You may opt to begin in a state of 
Report Onlyas you step through implementation however, the policy will need to be set toOnto be in effect. - Click 
Create. 
NOTE: For more information regarding risk levels refer to Microsoft's Identity Protection & Risk Doc.
Usage
Run the control in your terminal:
powerpipe control run microsoft365_compliance.control.cis_v150_1_1_9Snapshot and share results via Turbot Pipes:
powerpipe loginpowerpipe control run microsoft365_compliance.control.cis_v150_1_1_9 --shareSQL
This control uses a named query:
with block_legacy_authentication as (  select    tenant_id,    count(*)  from    azuread_conditional_access_policy  where    users->'includeUsers' ?& array['All']    and jsonb_array_length(users -> 'excludeUsers') = 0    and jsonb_array_length(user_risk_levels) != 0    and applications->'includeApplications' ?& array['All']    and jsonb_array_length(applications -> 'excludeApplications') = 0    and built_in_controls ?& array['passwordChange']  group by    tenant_id),tenant_list as (  select    distinct on (tenant_id) tenant_id,    _ctx  from    azuread_user)select  t.tenant_id as resource,  case    when (select count from block_legacy_authentication where tenant_id = t.tenant_id) > 0 then 'ok'    else 'alarm'  end as status,  case    when (select count from block_legacy_authentication where tenant_id = t.tenant_id) > 0 then t.tenant_id || ' has user risk policies enabled.'    else t.tenant_id || ' has user risk policies disabled.'  end as reason  , t.tenant_id as tenant_idfrom  tenant_list as t;