{ "schemaVersion": 1, "summary": { "totalResults": 2398, "findingResults": 885, "environmentResults": 1513, "actionableFindings": 455, "notRunChecks": 169, "findingOutcomes": { "pass": 256, "fail": 450, "not_run": 169, "warning": 3, "execution_error": 2, "not_applicable": 4, "informational": 1 }, "findingSeverities": { "critical": 17, "high": 190, "medium": 200, "low": 42, "info": 23, "unknown": 413 }, "findingTools": { "purple-knight": 119, "maester": 318, "pingcastle": 37, "cis-cat": 411 }, "environmentStates": { "observed": 1416, "empty": 84, "license-restricted": 10, "explicitly-absent": 3 } }, "findings": [ { "id": "SI000055", "title": "Permission changes on AdminSDHolder object", "description": "This indicator checks for modifications on the access control list (ACL) of the AdminSDHolder object.", "recommendation": "
Organizations should investigate the permissions on the AdminSDHolder object if modified, and use attack path analysis software, such as Forest Druid, to analyze attack paths to privileged users in Active Directory.
Organizations, if changing the permissions on AdminSDHolder, should have an established process in place for awareness.
\nUnplanned changes to AdminSDHolder should be considered highly suspicious and must be investigated further. Unplanned changes to AdminSDHolder are a very strong indicator of compromise of Active Directory.
", "severity": "critical", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "purple-knight" }, { "id": "SI000096", "title": "Privileged Users with Weak Password Policy", "description": "This indicator looks for privileged users in each domain that don't have a strong password policy enforced, according to ANSSI framework. It checks both FGPP (Fine-Grained Password Policy) and the password policy applied to the domain. A strong password as defined by ANSSI is at least 8 characters long and updated no later than every 3 years.", "severity": "critical", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "purple-knight" }, { "id": "SI000157", "title": "Certificate templates that allow requesters to specify a subjectAltName", "description": "This indicator checks if certificate templates are enabling requesters to specify a subjectAltName in the CSR.", "recommendation": "Ensure that when a SAN is allowed on a certificate template it is absolutely required on the template, so that the certificate must specify a subjectAltName. If not absolutely required, it should be disabled. This configuration can be viewed under the "Supply in request" option in the "Subject Name" tab in certtmpl.msc. When an authentication EKU is also present on the certificate template this becomes very dangerous and action should be taken to disable SAN on it.
", "severity": "critical", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "purple-knight" }, { "id": "SI000077", "title": "Print spooler service is enabled on a DC", "description": "This indicator checks for Domain Controllers running the print spooler service.This indicator requires the local server to be running the print spooler service to function, or it will return Failed to run", "recommendation": "Print spooler services are enabled by default. If not absolutely required, disable the service on all domain controllers. If required, make sure the server is fully patched and follow Microsoft guidance here.", "severity": "critical", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "purple-knight" }, { "id": "SI000095", "title": "AD Certificate Authority with Web Enrollment - ESC8", "description": "This indicator attempts to identify AD CS servers in the domain that accept NTLM authentication to Web Enrollment Services. The script enumerates CAs in the Enrollment Services container, resolves their IP and attempts NTLM authentication to https://IP/certsrv and http://IP/certsrv. Note: This indicator currently does not identify EPA or other mitigations suggested by Microsoft.The indicator will return a Passed if an enrollment service is contacted, but NTLM authentication is denied (positive effect on the posture score) for any endpoint.The indicator will return an IoE Found if NTLM authentication is available on an enrollment service (negative effect on security posture) on any endpoint.The indicator will Fail to Run (no effect on security posture score) if one of the following is true for all endpoints:Cannot Resolve - Enrollment Service Certificate found in AD CS container, but address cannot be resolvedUnreachable - IP is resolved, but service cannot be reached", "severity": "critical", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "purple-knight" }, { "id": "SI000036", "title": "Zerologon vulnerability", "description": "This indicator checks for security vulnerability CVE-202-1472.", "severity": "critical", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "purple-knight" }, { "id": "CIS.M365.1.1.1", "title": "Ensure Administrative accounts are cloud-only", "description": "1.1.1 (L1) Ensure Administrative accounts are cloud-only Administrative accounts are special privileged accounts that could have varying levels of access to data, users, and settings. Regular user accounts should never be utilized for administrative tasks and care should be taken, in the case of a hybrid environment, to keep Administrative accounts separated from on-prem accounts. Administrative accounts should not have applications assigned so that they have no access to potentially vulnerable services (EX. email, Teams, SharePoint, etc.) and only access to perform tasks as needed for administrative purposes. #### Remediation action: To created licensed, separate Administrative accounts for Administrative users: 1. Navigate to Microsoft 365 admin center [https://admin.microsoft.com](https://admin.microsoft.com). 2. Click to expand **Users** select **Active users** 3. Click **Add a user**. 4. Fill out the appropriate fields for Name, user, etc. 5. When prompted to assign licenses select as needed **Microsoft Entra ID P1** or **Microsoft Entra ID P2**, then click **Next**. 6. Under the **Option settings** screen you may choose from several types of Administrative access roles. Choose **Admin center access** followed by the appropriate role then click **Next**. 7. Select **Finish adding**. #### Related links * [Microsoft 365 Admin Center](https://admin.microsoft.com) * [CIS Microsoft 365 Foundations Benchmark v 4.0.0 - Page 20](https://www.cisecurity.org/benchmark/microsoft_365)", "severity": "high", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "maester" }, { "id": "CIS.M365.1.1.3", "title": "Ensure that between two and four global admins are designated", "description": "1.1.3 (L1) Ensure that between two and four global admins are designated More than one global administrator should be designated so a single admin can be monitored and to provide redundancy should a single admin leave an organization. Additionally, there should be no more than four global admins set for any tenant. Ideally global administrators will have no licenses assigned to them. #### Remediation action: To correct the number of global tenant administrators: 1. Navigate to Microsoft 365 admin center [https://admin.microsoft.com](https://admin.microsoft.com). 2. Select **Users** > **Active Users**. 3. In the Search field enter the name of the user to be made a Global Administrator. 4. To create a new Global Admin: 1. Select the user's name. 2. A window will appear to the right. 3. Select **Manage roles**. 4. Select **Admin center access**. 5. Check **Global Administrator**. 6. Click Save changes. To remove Global Admins: 1. Select **User**. 2. Under Roles select **Manage roles**. 3. De-Select the appropriate role. 4. Click **Save changes**. #### Related links * [Microsoft 365 Admin Center](https://admin.microsoft.com) * [CIS Microsoft 365 Foundations Benchmark v5.0.0 - Page 28](https://www.cisecurity.org/benchmark/microsoft_365)", "severity": "high", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "maester" }, { "id": "CISA.MS.AAD.2.3", "title": "Sign-ins detected as high risk SHALL be blocked.", "description": "Sign-ins detected as high risk SHALL be blocked. Rationale: Blocking high-risk sign ins may prevent compromised sign-ins from accessing the tenant. This prevents compromised sign-ins from accessing the tenant. #### Remediation action: Create a Conditional Access policy blocking sign-ins determined high risk by the Identity Protection service. Configure the following policy settings in the new Conditional Access policy as per the values below: * Users > Include > **All users** * Target resources > Cloud apps > **All cloud apps** * Conditions > Sign-in risk > **High** * Access controls > Grant > **Block Access** Note: While CISA recommends blocking, the [Microsoft recommendation](https://learn.microsoft.com/entra/id-protection/howto-identity-protection-configure-risk-policies#microsofts-recommendation) is to require multi-factor authentication for high-risk sign-ins. #### Related links * [CISA Risk Based Policies - MS.AAD.2.3](https://github.com/cisagov/ScubaGear/blob/main/PowerShell/ScubaGear/baselines/aad.md#msaad23v1) * [CISA ScubaGear Rego Reference](https://github.com/cisagov/ScubaGear/blob/main/PowerShell/ScubaGear/Rego/AADConfig.rego#L138)", "severity": "high", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "maester" }, { "id": "MT.1024.applicationCredentialExpiry", "title": "Renew expiring application credentials.", "description": "Renewing an application’s credentials prior to their expiry date is crucial for maintaining uninterrupted operations and minimizing the risk of any downtime resulting from outdated credentials. #### Remediation action: 1. From the impacted resources table, click on “More details” to see and note the ID of the credential. 2. Click the “Update credential” link to navigate to the Application registration blade. 3. Navigate to the Certificates & Secrets section of the app registration. 4. Pick the credential type that you want to rotate and navigate to either Certificates or Client Secret tab and follow the prompts to add a new credential of that type. 5. Once the certificate or secret is successfully added, update the service code to ensure it works with the new credential. 6. Use the Microsoft Entra sign-in logs to validate that the Key ID of the credential matches the one that was recently added. 7. After validating the new credential, navigate back to App registrations > Certificates and Secrets for the app and remove the old credential. **Impact:** #### Related links: * [Renew expiring application credentials - Microsoft Entra admin center](https://entra.microsoft.com/#view/Microsoft_AAD_IAM/RecommendationDetails.ReactView/recommendationId/)", "severity": "high", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "maester" }, { "id": "MT.1024.mfaRegistrationV2", "title": "Ensure all users can complete multifactor authentication.", "description": "Multifactor authentication (MFA) helps protect devices and data that are accessible to these users. Adding more authentication methods, such as the Microsoft Authenticator app or a phone number, increases the level of protection if one factor is compromised. #### Remediation action: 1. We provide step-by-step guidance to select and enable the right MFA method for your organization in the Microsoft 365 admin center. [Go to the Microsoft 365 MFA wizard](https://admin.microsoft.com/adminportal/home?Q=SecureScore\" # \"/featureexplorer/security/ConditionalAccess). 2. If you would like to perform the implementation yourself, first check what Microsoft Entra ID license you have under “Prerequisites” in Microsoft Secure Score or [see your license type under \"Basic information\" in the Microsoft Entra ID Overview.](https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/Overview). 3. If you’ve invested in Microsoft Entra ID Premium P1 or P2 licenses, you can create a Conditional Access policy from scratch or by using a template. [Follow these steps to create a Conditional Access policy from scratch or by using a template](https://docs.microsoft.com/azure/active-directory/conditional-access/howto-conditional-access-policy-registration). 4. If you would like to perform the implementation yourself and you’re using Microsoft Entra ID Free, turn on security defaults. Note: Security defaults and Conditional Access can’t be used side by side. [Enable security defaults](https://docs.microsoft.com/azure/active-directory/fundamentals/concept-fundamentals-security-defaults). 5. Keep track of your user’s progress of registering authentication methods by going to Microsoft Entra ID > Security > Authentication methods > User registration details (requires Microsoft Entra ID Premium P1 or P2 licenses). [Go to User registration details](https://portal.azure.com/#view/Microsoft_AAD_IAM/AuthenticationMethodsMenuBlade/~/UserRegistrationDetails). 6. Use registration campaign to nudge users to set up specific authentication methods by going to Microsoft Entra ID > Protection > Authentication methods > Registration campaign. [Go to registration campaign](https://entra.microsoft.com/#view/Microsoft_AAD_IAM/AuthenticationMethodsMenuBlade/~/RegistrationCampaign/fromNav/Identity). **Impact:** After registering, users are prompted to authenticate with a second factor when accessing applications or other resources. #### Related links: * [Ensure all users can complete multifactor authentication - Microsoft Entra admin center](https://entra.microsoft.com/#view/Microsoft_AAD_IAM/RecommendationDetails.ReactView/recommendationId/)", "severity": "high", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "maester" }, { "id": "CISA.MS.AAD.3.1", "title": "Phishing-resistant MFA SHALL be enforced for all users.", "description": "Phishing-resistant MFA SHALL be enforced for all users. Rationale: Weaker forms of MFA do not protect against sophisticated phishing attacks. By enforcing methods resistant to phishing, those risks are minimized. #### Remediation action: Create a conditional access policy enforcing phishing-resistant MFA for all users. Configure the following policy settings in the new conditional access policy, per the values below: * Users > Include > **All users** * Target resources > Cloud apps > **All cloud apps** * Access controls > Grant > Grant Access > Require authentication strength > **Phishing-resistant MFA** #### Related links * [CISA Strong Authentication & Secure Registration - MS.AAD.3.1v1](https://github.com/cisagov/ScubaGear/blob/main/PowerShell/ScubaGear/baselines/aad.md#msaad31v1) * [CISA ScubaGear Rego Reference](https://github.com/cisagov/ScubaGear/blob/main/PowerShell/ScubaGear/Rego/AADConfig.rego#L181)", "severity": "high", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "maester" }, { "id": "MT.1024.signinRiskPolicy", "title": "Protect all users with a sign-in risk policy.", "description": "Turning on the sign-in risk policy ensures that suspicious sign-ins are challenged for multifactor authentication (MFA). #### Remediation action: 1. To implement this recommendation, you need Microsoft Entra ID Premium P2 licenses. Check what Microsoft Entra ID license you have under “Prerequisites” in Microsoft Secure Score or [see your license type under \"Basic information\" in the Microsoft Entra ID Overview.](https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/Overview). 2. If you’ve invested in Microsoft Entra ID Premium P2 licenses, you can create a Conditional Access policy from scratch or by using a template. [Follow these steps to create a Conditional Access policy from scratch or by using a template](https://docs.microsoft.com/azure/active-directory/conditional-access/howto-conditional-access-policy-risk-user). 3. If you’re not using Microsoft Entra ID Premium P2 licenses, we recommend you set this action to “Dismissed” or “Risk accepted”. **Impact:** When the policy triggers, the user will need MFA to access the account. If a user hasn't registered for MFA, they’re blocked from accessing their account. If account access is blocked, an admin would need to recover the account. #### Related links: * [Protect all users with a sign-in risk policy - Microsoft Entra admin center](https://entra.microsoft.com/#view/Microsoft_AAD_IAM/RecommendationDetails.ReactView/recommendationId/)", "severity": "high", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "maester" }, { "id": "MT.1024.userRiskPolicy", "title": "Protect all users with a user risk policy .", "description": "With the user risk policy turned on, Microsoft Entra ID 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 action: 1. To implement this recommendation, you need Microsoft Entra ID Premium P2 licenses. Check what Microsoft Entra ID license you have under “Prerequisites” in Microsoft Secure Score or [see your license type under \"Basic information\" in the Microsoft Entra ID Overview.](https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/Overview). 2. If you’ve invested in Microsoft Entra ID Premium P2 licenses, you can create a Conditional Access policy from scratch or by using a template. Note: Classic Conditional Access policies aren’t scored. Use the recommended steps to receive credit. [Follow these steps to create a Conditional Access policy from scratch or by using a template](https://docs.microsoft.com/azure/active-directory/conditional-access/howto-conditional-access-policy-risk-user). 3. If you’re not using Microsoft Entra ID Premium P2 licenses, we recommend you set the status for this action to “Dismissed” or “Risk accepted”. **Impact:** When the policy triggers, access to the account will either be blocked or the user will be required to use multifactor authentication and change their password. Users who haven't registered multifactor authentication (MFA) on their account will be blocked from accessing it. If account access is blocked, an admin would need to recover the account. Thus, it is important to configure the MFA registration policy for all users who are a part of the user risk policy to ensure that they have registered for MFA. #### Related links: * [Protect all users with a user risk policy - Microsoft Entra admin center](https://entra.microsoft.com/#view/Microsoft_AAD_IAM/RecommendationDetails.ReactView/recommendationId/)", "severity": "high", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "maester" }, { "id": "MT.1025", "title": "No external user with permanent role assignment on Control Plane.", "description": "Take attention on B2B collaboration user with Entra ID directory role assignments on ControlPlane. Verify the affected external users, the user source (e.g., MSSP/partner or managing tenant) and if the privileged accounts pass your requirements for Conditional Access, Lifecycle Workflow and Identity Protection. Learn more about the best practices for privileges users: - [Securing privileged access for hybrid and cloud deployments in Microsoft Entra ID](https://learn.microsoft.com/en-us/entra/identity/role-based-access-control/security-planning#ensure-separate-user-accounts-and-mail-forwarding-for-global-administrator-accounts)", "severity": "high", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "maester" }, { "id": "MT.1027", "title": "No Service Principal with Client Secret and permanent role assignment on Control Plane.", "description": "Review your Service Principals with Client Secrets and ControlPlane privileges. It's recommended to use certificates for Service Principals. Review if you can replace client secrets by certificates or use managed identities instead of a Service Principal. Learn more about the best practices for issuing certificates for Service Principals: - [Securing service principals in Microsoft Entra ID](https://learn.microsoft.com/en-us/entra/architecture/service-accounts-principal#service-principal-authentication) - [Best practices for all isolation architectures - Service Principal Credentials](https://learn.microsoft.com/en-us/entra/architecture/secure-best-practices#service-principals-credentials)", "severity": "high", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "maester" }, { "id": "MT.1028", "title": "No user with mailbox and permanent role assignment on Control Plane.", "description": "Take attention on mail-enabled administrative accounts with ControlPlane privileges. It's recommended to use mail forwarding to regular work account which allows to avoid direct mail access and phishing attacks on privileged user. Learn more about the best practices for securing privileged user accounts: - [Securing privileged access for hybrid and cloud deployments in Microsoft Entra ID](https://learn.microsoft.com/en-us/entra/identity/role-based-access-control/security-planning#ensure-separate-user-accounts-and-mail-forwarding-for-global-administrator-accounts)", "severity": "high", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "maester" }, { "id": "MT.1030", "title": "Eligible role assignments on Control Plane are in use by administrators.", "description": "**Security Impact** Users that have been assigned privileged roles they don't need increases the chance of an attack. It is also easier for attackers to remain unnoticed in accounts that are not actively being used. **Mitigation steps** Review the users in the list and remove them from privileged roles they do not need. **How to prevent** ·Assign privileged roles to users that have a business justification. ·Schedule regular access reviews to verify that users still need their access.", "severity": "high", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "maester" }, { "id": "MT.1032", "title": "Limited number of Global Admins are assigned.", "description": "**Security Impact** Global administrator is the highest privileged role. If a Global Administrator is compromised, the attacker gains access to all of their permissions, which puts your whole system at risk. **Mitigation steps** ·Review the users in the list and remove any that do not absolutely need the Global Administrator role. ·Assign lower privileged roles to these users instead. **How to prevent** Assign users the least privileged role they need.", "severity": "high", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "maester" }, { "id": "MT.1056", "title": "Ensure that no person has permanent access to all Azure subscriptions at the root scope", "description": "Ensure that no person has permanent access to Azure Subscriptions. User Access Administrator is a role that allows an Administrator to perform everything on an Azure Subscription. Global Administrators can gain this permission on the Root Scope in Entra ID, in the properties of the Entra ID tenant. These permissions should only be used in case of emergency and should not be assigned permanently. Ensure that no User Access Administrator permissions at the Root Scope are applied. #### Remediation action: To remove all Admins with Root Scope permissions, as a Global Admin: 1. Navigate to Microsoft Azure Portal [https://portal.azure.com](https://portal.azure.com). 2. Search for **Microsoft Entra ID** and select **Microsoft Entra ID**. 3. Expand the **Manage** menu and select **Properties**. 3. On the **Properties** page, go to the **Access management for Azure resources** section. 4. In the information bar, click **Manage elevated access users**. 5. Select all User Access Administrators and click **Remove**. 6. Also check other role assignments, as they need to be removed to pass the tests. To remove the admins through CLI: ```powershell az role assignment delete --role \"User Access Administrator\" --assignee [redacted-email] --scope \"/\" ``` #### Related links * [Manage who can create Microsoft 365 Groups](https://learn.microsoft.com/en-us/microsoft-365/solutions/manage-creation-of-groups?view=o365-worldwide)", "severity": "high", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "maester" }, { "id": "MT.1064", "title": "Ensure that write permissions are required to create new management groups", "description": "By default, all Entra ID security principals can create new management groups. This introduces governance and security risks, as it allows any user to create a new management group and link subscriptions to it without oversight. To prevent this, Azure provides a setting that enforces write permission requirements for the creation of new management groups. This ensures that only authorized users can manage the structure of your management group hierarchy. #### Remediation action: To enable the requirement for write permissions: 1. Navigate to the Microsoft Azure Portal: [https://portal.azure.com](https://portal.azure.com). 2. In the search bar, type **Management groups** and open the blade. 3. Select **Settings** in the left navigation menu. 4. Under **Permissions for creating new management groups**, enable the switch: **Require write permissions for creating new management groups**. #### Related links * [Organize your resources with management groups](https://learn.microsoft.com/en-us/azure/governance/management-groups/overview)", "severity": "high", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "maester" }, { "id": "CISA.MS.AAD.3.5", "title": "The authentication methods SMS, Voice Call, and Email One-Time Passcode (OTP) SHALL be disabled.", "description": "The authentication methods SMS, Voice Call, and Email One-Time Passcode (OTP) SHALL be disabled. Rationale: SMS, voice call, and email OTP are the weakest authenticators. This policy forces users to use stronger MFA methods. #### Remediation action: If phishing-resistant MFA has not been deployed yet and Microsoft Authenticator is in use, configure Authenticator to display context information to users when they log in. 1. In **Entra ID**, click **Security** > **[Authentication methods](https://entra.microsoft.com/#view/Microsoft_AAD_IAM/AuthenticationMethodsMenuBlade/~/AdminAuthMethods/fromNav/Identity)** 2. Click on the **SMS**, **Voice Call**, and **Email OTP** authentication methods and disable each of them. Their statuses should be **Enabled** > **No** on the **Authentication methods** > **Policies** page. #### Related links * [Entra admin portal - Authentication methods](https://entra.microsoft.com/#view/Microsoft_AAD_IAM/AuthenticationMethodsMenuBlade/~/AdminAuthMethods/fromNav/Identity) * [CISA Strong Authentication & Secure Registration - MS.AAD.3.5v1](https://github.com/cisagov/ScubaGear/blob/main/PowerShell/ScubaGear/baselines/aad.md#msaad35v1) * [CISA ScubaGear Rego Reference](https://github.com/cisagov/ScubaGear/blob/main/PowerShell/ScubaGear/Rego/AADConfig.rego#L307)", "severity": "high", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "maester" }, { "id": "CISA.MS.AAD.3.6", "title": "Phishing-resistant MFA SHALL be required for highly privileged roles.", "description": "Phishing-resistant MFA SHALL be required for highly privileged roles. Rationale: This is a backup security policy to help protect privileged access to the tenant if the conditional access policy, which requires MFA for all users, is disabled or misconfigured. #### Remediation action: Create a conditional access policy enforcing phishing-resistant MFA for highly privileged roles. Configure the following policy settings in the new conditional access policy, per the values below: 1. In **Entra** under **Protection** and **Conditional Access**, select **[Policies](https://entra.microsoft.com/#view/Microsoft_AAD_ConditionalAccess/ConditionalAccessBlade/~/Policies/fromNav/)**. 2. Click on **New policy** 3. Under **New Conditional Access policy**, configure the following policy settings in the new conditional access policy, per the values below: * Users > Include > Select users and groups > Directory roles > select each of the roles listed in the **[Highly Privileged Roles](https://github.com/cisagov/ScubaGear/blob/main/PowerShell/ScubaGear/baselines/aad.md#highly-privileged-roles)** listed. * Target resources > Cloud apps > **All cloud apps** * Access controls > Grant > Grant Access > Require authentication strength > **Phishing-resistant MFA** 4. Click **Save**. #### Related links * [Entra admin center - Conditional Access | Policies](https://entra.microsoft.com/#view/Microsoft_AAD_ConditionalAccess/ConditionalAccessBlade/~/Policies/fromNav/) * [CISA Strong Authentication & Secure Registration - MS.AAD.3.6v1](https://github.com/cisagov/ScubaGear/blob/main/PowerShell/ScubaGear/baselines/aad.md#msaad36v1) * [CISA ScubaGear Rego Reference](https://github.com/cisagov/ScubaGear/blob/main/PowerShell/ScubaGear/Rego/AADConfig.rego#L354) * [CISA ScubaGear Highly Privileged Roles](https://github.com/cisagov/ScubaGear/blob/main/PowerShell/ScubaGear/baselines/aad.md#highly-privileged-roles)", "severity": "high", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "maester" }, { "id": "CISA.MS.AAD.3.7", "title": "Managed devices SHOULD be required for authentication.", "description": "Managed devices SHOULD be required for authentication. Rationale: The security risk of an adversary authenticating to the tenant from their own device is reduced by requiring a managed device to authenticate. Managed devices are under the provisioning and control of the agency. [OMB-22-09](https://www.whitehouse.gov/wp-content/uploads/2022/01/M-22-09.pdf) states, \"When authorizing users to access resources, agencies must consider at least one device-level signal alongside identity information about the authenticated user.\" #### Remediation action: Create a conditional access policy requiring a user's device to be either Microsoft Entra hybrid joined or compliant during authentication. Configure the following policy settings in the new conditional access policy, per the values below: 1. In **Entra** under **Protection** and **Conditional Access**, select **[Policies](https://entra.microsoft.com/#view/Microsoft_AAD_ConditionalAccess/ConditionalAccessBlade/~/Policies/fromNav/)**. 2. Click on **New policy** 3. Under **New Conditional Access policy**, configure the following policy settings in the new conditional access policy, per the values below: * Users > Include > **All users** * Target resources > Cloud apps > **All cloud apps** * Access controls > Grant > Grant Access > **Require device to be marked as compliant** and **Require Microsoft Entra hybrid joined device** > For multiple controls > **Require one of the selected controls** 4. Click **Save**. #### Related links * [Entra admin center - Conditional Access | Policies](https://entra.microsoft.com/#view/Microsoft_AAD_ConditionalAccess/ConditionalAccessBlade/~/Policies/fromNav/) * [CISA Strong Authentication & Secure Registration - MS.AAD.3.7v1](https://github.com/cisagov/ScubaGear/blob/main/PowerShell/ScubaGear/baselines/aad.md#msaad37v1) * [CISA ScubaGear Rego Reference](https://github.com/cisagov/ScubaGear/blob/main/PowerShell/ScubaGear/Rego/AADConfig.rego#L397)", "severity": "high", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "maester" }, { "id": "CISA.MS.AAD.3.8", "title": "Managed Devices SHOULD be required to register MFA.", "description": "Managed Devices SHOULD be required to register MFA. Rationale: Reduce risk of an adversary using stolen user credentials and then registering their own MFA device to access the tenant by requiring a managed device provisioned and controlled by the agency to perform registration actions. This prevents the adversary from using their own unmanaged device to perform the registration. #### Remediation action: Create a conditional access policy requiring a user to be on a managed device when registering for MFA. 1. In **Entra** under **Protection** and **Conditional Access**, select **[Policies](https://entra.microsoft.com/#view/Microsoft_AAD_ConditionalAccess/ConditionalAccessBlade/~/Policies/fromNav/)**. 2. Click on **New policy** 3. Under **New Conditional Access policy**, configure the following policy settings in the new conditional access policy, per the values below: * Users > Include > **All users** * Target resources > User actions > **Register security information** * Access controls > Grant > Grant Access > **Require device to be marked as compliant** and **Require Microsoft Entra hybrid joined device** > For multiple controls > **Require one of the selected controls** 4. Click **Save**. #### Related links * [Entra admin center - Conditional Access | Policies](https://entra.microsoft.com/#view/Microsoft_AAD_ConditionalAccess/ConditionalAccessBlade/~/Policies/fromNav/) * [CISA Strong Authentication & Secure Registration - MS.AAD.3.8v1](https://github.com/cisagov/ScubaGear/blob/main/PowerShell/ScubaGear/baselines/aad.md#msaad38v1) * [CISA ScubaGear Rego Reference](https://github.com/cisagov/ScubaGear/blob/main/PowerShell/ScubaGear/Rego/AADConfig.rego#L431)", "severity": "high", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "maester" }, { "id": "CISA.MS.AAD.4.1", "title": "Security logs SHALL be sent to the agency's security operations center for monitoring.", "description": "Security logs SHALL be sent to the agency's security operations center for monitoring. Rationale: The security risk of not having visibility into cyber attacks is reduced by collecting logs in the agency’s centralized security detection infrastructure. This makes security events available for auditing, query, and incident response. Note: The following logs (configured in Entra diagnostic settings), are required: `AuditLogs`, `SignInLogs`, `RiskyUsers`, `UserRiskEvents`, `NonInteractiveUserSignInLogs`, `ServicePrincipalSignInLogs`, `ADFSSignInLogs`, `RiskyServicePrincipals`, `ServicePrincipalRiskEvents`, `EnrichedOffice365AuditLogs`, `MicrosoftGraphActivityLogs`. If managed identities are used for Azure resources, also send the `ManagedIdentitySignInLogs` log type. If the Entra ID Provisioning Service is used to provision users to software-as-a-service (SaaS) apps or other systems, also send the `ProvisioningLogs` log type. Note: Agencies can benefit from security detection capabilities offered by the CISA Cloud Log Aggregation Warehouse (CLAW) system. Agencies are urged to send the logs to CLAW. Contact CISA at [redacted-email] to request integration instructions. #### Remediation action: Follow the configuration instructions unique to the products and integration patterns at your organization to send the security logs to the security operations center for monitoring. #### Related links * [CISA 4. Centralized Log Collection - MS.AAD.4.1v1](https://github.com/cisagov/ScubaGear/blob/main/PowerShell/ScubaGear/baselines/aad.md#msaad41v1) * [CISA ScubaGear Rego Reference](https://github.com/cisagov/ScubaGear/blob/main/PowerShell/ScubaGear/Rego/AADConfig.rego#L523)", "severity": "high", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "maester" }, { "id": "MT.INV.001", "title": "Unusual sign-in activity detected for privileged accounts", "description": "This test checks for unusual sign-in patterns for accounts with privileged roles. Anomalies may indicate a potential compromise. #### Investigation steps: 1. Review the sign-in logs for the flagged accounts 2. Check if the sign-ins are from expected locations 3. Verify if the sign-in times match the user's normal working hours 4. Contact the user to confirm the activity #### Related links * [Microsoft Entra sign-in logs](https://portal.azure.com/#view/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/~/SignIns) * [Investigate risk in Identity Protection](https://learn.microsoft.com/entra/id-protection/howto-identity-protection-investigate-risk)", "severity": "high", "outcome": "warning", "resultType": "exposure_finding", "isIoe": false, "deviation": true, "tool": "maester" }, { "id": "CISA.MS.AAD.5.2", "title": "Only administrators SHALL be allowed to consent to applications.", "description": "Only administrators SHALL be allowed to consent to applications. Rationale: Limiting applications consent to only specific privileged users reduces risk of users giving insecure applications access to their data via [consent grant attacks](https://learn.microsoft.com/en-us/microsoft-365/security/office-365-security/detect-and-remediate-illicit-consent-grants?view=o365-worldwide). #### Remediation action: 1. In **Entra** under **Identity** and **Applications**, select **Enterprise applications**. 2. Under **Security**, select **Consent and permissions**. 3. Under **Manage**, select **[User consent settings](https://entra.microsoft.com/#view/Microsoft_AAD_IAM/ConsentPoliciesMenuBlade/~/UserSettings)**. 4. Under **User consent for applications**, select **Do not allow user consent**. 5. Click **Save**. #### Related links * [Entra admin center - Consent and permissions | User consent settings](https://entra.microsoft.com/#view/Microsoft_AAD_IAM/ConsentPoliciesMenuBlade/~/UserSettings) * [CISA Application Registration & Consent - MS.AAD.5.2v1](https://github.com/cisagov/ScubaGear/blob/main/PowerShell/ScubaGear/baselines/aad.md#msaad52v1) * [CISA ScubaGear Rego Reference](https://github.com/cisagov/ScubaGear/blob/main/PowerShell/ScubaGear/Rego/AADConfig.rego#L575)", "severity": "high", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "maester" }, { "id": "CISA.MS.AAD.5.3", "title": "An admin consent workflow SHALL be configured for applications.", "description": "An admin consent workflow SHALL be configured for applications. Rationale: Configuring an admin consent workflow reduces the risk of the previous policy by setting up a process for users to securely request access to applications necessary for business purposes. Administrators have the opportunity to review the permissions requested by new applications and approve or deny access based on a risk assessment. #### Remediation action: 1. In **Entra** create a new **Group** that contains admin users responsible for reviewing and adjudicating application consent requests. Group members will be notified when users request consent for new applications. 2. Then in **Entra** under **Identity** and **Applications**, select **Enterprise applications**. 3. Under **Security**, select **Consent and permissions**. 3. Under **Manage**, select **[Admin consent settings](https://entra.microsoft.com/#view/Microsoft_AAD_IAM/ConsentPoliciesMenuBlade/~/AdminConsentSettings)**. 5. Under **Admin consent requests** and **Users can request admin consent to apps they are unable to consent to** select **Yes**. 6. Under **Who can review admin consent requests**, select **+ Add groups** and select the **group** responsible for reviewing and adjudicating app requests **(created in step one above)**. 7. Click **Save**. #### Related links * [Entra admin center - Consent and permissions | Admin consent settings](https://entra.microsoft.com/#view/Microsoft_AAD_IAM/ConsentPoliciesMenuBlade/~/AdminConsentSettings) * [CISA Application Registration & Consent - MS.AAD.5.3v1](https://github.com/cisagov/ScubaGear/blob/main/PowerShell/ScubaGear/baselines/aad.md#msaad53v1) * [CISA ScubaGear Rego Reference](https://github.com/cisagov/ScubaGear/blob/main/PowerShell/ScubaGear/Rego/AADConfig.rego#L613)", "severity": "high", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "maester" }, { "id": "CISA.MS.AAD.7.1", "title": "A minimum of two users and a maximum of eight users SHALL be provisioned with the Global Administrator role.", "description": "A minimum of two users and a maximum of eight users SHALL be provisioned with the Global Administrator role. **Rationale:** The Global Administrator role provides unfettered access to the tenant (Azure and Microsoft 365). Limiting the number of users with this level of access makes tenant compromise more challenging. Microsoft recommends fewer than five users in the Global Administrator role. However, additional user accounts, up to eight, may be necessary to support emergency access and some operational scenarios. #### Remediation action: When counting the number of users assigned to the Global Administrator role, **count each user only once**. 1. In **Entra** under **Roles & adminis** and **[All roles](https://entra.microsoft.com/#view/Microsoft_AAD_IAM/RolesManagementMenuBlade/~/AllRoles)**, search for **Global Administrator** and click on it to go to the role and see who is assiged. Count users that are assigned directly to the role and users assigned via group membership. If you have **Entra ID PIM**, count both the **Eligible assignments** and **Active assignments**. If any of the groups assigned to Global Administrator are enrolled in **PIM for Groups**, also count the number of group members from the PIM for Groups portal **Eligible** assignments. 2. Validate that there are a total of two to eight users assigned to the Global Administrator role. #### Related links * [Entra admin center - Roles and administrators | All roles](https://entra.microsoft.com/#view/Microsoft_AAD_IAM/RolesManagementMenuBlade/~/AllRoles) * [CISA 7.1 Highly Privileged User Access - MS.AAD.7.1v1](https://github.com/cisagov/ScubaGear/blob/main/PowerShell/ScubaGear/baselines/aad.md#msaad71v1) * [CISA ScubaGear Rego Reference](https://github.com/cisagov/ScubaGear/blob/main/PowerShell/ScubaGear/Rego/AADConfig.rego#L761)", "severity": "high", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "maester" }, { "id": "MT.1084", "title": "Microsoft Entra seamless single sign-on should be disabled for all domains in EntraID Connect servers.", "description": "## Description Executes KQL function over IdentityLogonEvents data to retrieve information about domains with Seamless SSO usage. It enriches the data with device insights. ## Why This Matters Seamless Single Sign-On in Entra ID Connect should be disabled because: - **Lateral movement**: Allows for lateral movement between an on-premise domain and Entra ID when an Entra ID Connect server is compromised. - **Brute force**: Can be used for brute force attacks against Entra ID. Seamless Single Sign-On is used for passwordless access for domain-joined devices, end-user devices, or device versions that do not support Primary Refresh Tokens (Windows versions prior to Windows 10 for example). This scenario is becoming less common, meaning most organizations should be able to disable SSSO in Entra ID Connect. The output of the query should help you in identifying of SSSO usage is expected for the specific source device, based on device enrichment with MDE data. #### Remediation action There are two steps to disabling Seamless SSO, the first is to disable the configuration in Microsoft Entra Connect and the second is to tidy up Active Directory. To disable the feature from Microsoft Entra connect, follow these steps: 1. Log-in to the computer running Microsoft Entra Connect Sync. 2. Click **Configure**. 3. Select **Change User Sign In** and click Next. 4. On the User **Sign-In section**, uncheck the **Enable single sign-on** box, click **Next**, then **Configure**. Then to tidy up Active Directory you need to install and run the AzureADSSO PowerShell module, follow the steps below: 1. On an Active Directory management server, open PowerShell and run the following commands to install the AzureADSSO PowerShell module: ```powershell #Install the AzureAD Module install-module AzureAD #Import the AzureAD SSO module Import-Module \"C:\\program files\\Microsoft Azure Active Directory Connect\\AzureADSSO.psd1\" ``` 2. Then use the following commands to list all forests in your environment which have had Seamless SSO enabled: (if you have a single forest, you can move on to the next step). ```powershell #Create an authentication context object for Azure AD New-AzureADSSOAuthenticationContext #Get the SSO status and domains from Entra ID Get-AzureADSSOStatus ``` The output should contain `\"enable\":false` 3. Now you can tidy up your Active Directory by running the below commands to safely delete the AZUREADSSOACC if it is still present. ```powershell #Store domain admin credentials $creds = Get-Credential #Disable SSO in the forest Disable-AzureADSSOForest -OnPremCredentials $creds ``` To verify that Seamless SSO has been successfully disabled in your environment, start by signing in to the **Entra Admin portal** and expanding **Identity > Hybrid management** and select **Microsoft Entra Connect**. Then click **Connect Sync** and verify that Seamless single sign-on is set to Disabled. [You can also use this link to go to the Entra portal directly](https://entra.microsoft.com/#view/Microsoft_AAD_Connect_Provisioning/AADConnectMenuBlade/~/ConnectSync) #### Related links - [HybridBrothers hunting query](https://github.com/HybridBrothers/Hunting-Queries-Detection-Rules/blob/main/Entra%20ID/HuntDomainsWithSeamlessSsoEnabled.md) - [Finding Seamless SSO usage](https://nathanmcnulty.com/blog/2025/08/finding-seamless-sso-usage/#) - [Why you should disable Seamless SSO in Microsoft Entra Connect](https://ourcloudnetwork.com/why-you-should-disable-seamless-sso-in-microsoft-entra-connect/) - [Advanced Active Directory to Entra ID lateral movement techniques](https://media.defcon.org/DEF%20CON%2033/DEF%20CON%2033%20presentations/Dirk-jan%20Mollema%20-%20Advanced%20Active%20Directory%20to%20Entra%20ID%20lateral%20movement%20techniques.pdf)", "severity": "high", "outcome": "execution_error", "resultType": "exposure_finding", "isIoe": false, "deviation": false, "tool": "maester" }, { "id": "CISA.MS.AAD.7.2", "title": "Privileged users SHALL be provisioned with finer-grained roles instead of Global Administrator.", "description": "Privileged users SHALL be provisioned with finer-grained roles instead of Global Administrator. Rationale: Many privileged administrative users do not need unfettered access to the tenant to perform their duties. By assigning them to roles based on least privilege, the risks associated with having their accounts compromised are reduced. #### Remediation action: This policy is based on the ratio below: `X = (Number of users assigned to the Global Administrator role) / (Number of users assigned to other highly privileged roles)` 1. Follow the instructions for policy MS.AAD.7.1v1 above to get a count of users assigned to the Global Administrator role. 2. Follow the instructions for policy MS.AAD.7.1v1 above but get a count of users assigned to the other highly privileged roles (not Global Administrator). If a user is assigned to both Global Administrator and other roles, only count that user for the Global Administrator assignment. 3. Divide the value from step 2 from the value from step 1 to calculate X. If X is less than or equal to 1 then the tenant is compliant with the policy. #### Related links * [CISA 7.2 Highly Privileged User Access - MS.AAD.7.2v1](https://github.com/cisagov/ScubaGear/blob/main/PowerShell/ScubaGear/baselines/aad.md#msaad72v1) * [CISA ScubaGear Rego Reference](https://github.com/cisagov/ScubaGear/blob/main/PowerShell/ScubaGear/Rego/AADConfig.rego#L792)", "severity": "high", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "maester" }, { "id": "CISA.MS.AAD.7.3", "title": "Privileged users SHALL be provisioned cloud-only accounts separate from an on-premises directory or other federated identity providers.", "description": "Privileged users SHALL be provisioned cloud-only accounts separate from an on-premises directory or other federated identity providers. Rationale: Many privileged administrative users do not need unfettered access to the tenant to perform their duties. By assigning them to roles based on least privilege, the risks associated with having their accounts compromised are reduced. #### Remediation action: 1. Perform the steps below for each [highly privileged role](https://entra.microsoft.com/#view/Microsoft_AAD_IAM/RolesManagementMenuBlade/~/AllRoles). 2. Review the users listed that have an **OnPremisesImmutableId** and have **OnPremisesSyncEnabled** set. 3. Create a cloud only user account for that individual and remove their hybrid identity from privileged roles. #### Related links * [Entra admin center - Roles and administrators | All roles](https://entra.microsoft.com/#view/Microsoft_AAD_IAM/RolesManagementMenuBlade/~/AllRoles) * [CISA 7.3 Highly Privileged User Access - MS.AAD.7.3v1](https://github.com/cisagov/ScubaGear/blob/main/PowerShell/ScubaGear/baselines/aad.md#msaad73v1) * [CISA ScubaGear Rego Reference](https://github.com/cisagov/ScubaGear/blob/main/PowerShell/ScubaGear/Rego/AADConfig.rego#L833)", "severity": "high", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "maester" }, { "id": "CISA.MS.AAD.7.4", "title": "Permanent active role assignments SHALL NOT be allowed for highly privileged roles.", "description": "Permanent active role assignments SHALL NOT be allowed for highly privileged roles. Rationale: Instead of giving users permanent assignments to privileged roles, provisioning access just in time lessens exposure if those accounts become compromised. In Azure AD PIM or an alternative PAM system, just in time access can be provisioned by assigning users to roles as eligible instead of perpetually active. Note: Exceptions to this policy are: * **Emergency access** accounts that need **perpetual access** to the tenant in the rare event of system degradation or other scenarios. * Some types of **service accounts** that require a user account with privileged roles; since these accounts are used by software programs, they **cannot** perform role activation. #### Remediation action: 1. In **Entra admin center** select **Show more** and **Roles & Admins** and then **[All roles](https://entra.microsoft.com/#view/Microsoft_AAD_IAM/RolesManagementMenuBlade/~/AllRoles)**. Perform the steps below for each highly privileged role. We reference the Global Administrator role as an example. 2. Select the **Global administrator** role. 3. Under **Manage**, select **Assignments** and click the **Active assignments** tab. 4. Verify there are no users or groups with a value of **Permanent** in the **End time** column. If there are any, recreate those assignments to have an expiration date using Entra ID PIM or an alternative PAM system. If a group is identified and it is enrolled in PIM for Groups, see the exception cases below for details. #### Related links * [Entra admin center - Roles and administrators | All roles](https://entra.microsoft.com/#view/Microsoft_AAD_IAM/RolesManagementMenuBlade/~/AllRoles) * [CISA 7.4 Highly Privileged User Access - MS.AAD.7.4v1](https://github.com/cisagov/ScubaGear/blob/main/PowerShell/ScubaGear/baselines/aad.md#msaad74v1) * [CISA ScubaGear Rego Reference](https://github.com/cisagov/ScubaGear/blob/main/PowerShell/ScubaGear/Rego/AADConfig.rego#L856)", "severity": "high", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "maester" }, { "id": "CISA.MS.AAD.7.7", "title": "Eligible and Active highly privileged role assignments SHALL trigger an alert.", "description": "Eligible and Active highly privileged role assignments SHALL trigger an alert. Rationale: Closely monitor assignment of the highest privileged roles for signs of compromise. Send assignment alerts to enable the security monitoring team to detect compromise attempts. #### Remediation action: 1. In **Entra admin center** select **Identity governance** and **Privileged Identity Management**. 2. Under **Manage**, select **Microsoft Entra roles**. 3. Under **Manage**, select **[Roles](https://entra.microsoft.com/#view/Microsoft_Azure_PIMCommon/ResourceMenuBlade/~/roles/resourceId//resourceType/tenant/provider/aadroles)**. Perform the steps below for each highly privileged role. We reference the Global Administrator role as an example. 4. Click the **Global Administrator** role. 5. Click **Settings** and then click **Edit**. 6. Click the **Notifications** tab. 7. Under **Send notifications when members are assigned as eligible to this role**, in the **Role assignment alert** > **Additional recipients** textbox, enter the email address of the security monitoring mailbox configured to receive privileged role assignment alerts. 8. Under **Send notifications when members are assigned as active to this role**, in the **Role assignment alert** > **Additional recipients** textbox, enter the email address of the security monitoring mailbox configured to receive privileged role assignment alerts. 9. Click **Update**. 10. For each of the highly privileged roles, if they have any PIM groups actively assigned to them, then also apply the same configurations per the steps above to each PIM group's **Member** settings. #### Related links * [Entra admin center - Privileged Identity Management | Microsoft Entra roles](https://entra.microsoft.com/#view/Microsoft_Azure_PIMCommon/ResourceMenuBlade/~/roles/resourceId//resourceType/tenant/provider/aadroles) * [CISA 7.7 Highly Privileged User Access - MS.AAD.7.7v1](https://github.com/cisagov/ScubaGear/blob/main/PowerShell/ScubaGear/baselines/aad.md#msaad77v1) * [CISA ScubaGear Rego Reference](https://github.com/cisagov/ScubaGear/blob/main/PowerShell/ScubaGear/Rego/AADConfig.rego#L974)", "severity": "high", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "maester" }, { "id": "CISA.MS.AAD.7.9", "title": "User activation of other highly privileged roles SHOULD trigger an alert.", "description": "User activation of the Global Administrator role SHALL trigger an alert. Rationale: Closely monitor activation of the Global Administrator role for signs of compromise. Send activation alerts to enable the security monitoring team to detect compromise attempts. User activation of other highly privileged roles SHOULD trigger an alert. Rationale: Closely monitor activation of high-risk roles for signs of compromise. Send activation alerts to enable the security monitoring team to detect compromise attempts. In some environments, activating privileged roles can generate a significant number of alerts. #### Remediation action: 1. In **Entra admin center** select **Identity governance** and **Privileged Identity Management**. 2. Under **Manage**, select **Microsoft Entra roles**. 3. Under **Manage**, select **[Roles](https://entra.microsoft.com/#view/Microsoft_Azure_PIMCommon/ResourceMenuBlade/~/roles/resourceId//resourceType/tenant/provider/aadroles)**. 4. Search and click the **Global Administrator** role. For each of the highly privileged roles (other than Global Administrator), follow the same steps but enter a security monitoring mailbox different from the one used to monitor Global Administrator activations. 5. Click **Settings** and then click **Edit**. 6. Click the **Notifications** tab. 7. Under **Send notifications when eligible members activate this role**, in the **Role activation alert** > **Additional recipients** textbox, enter the email address of the security monitoring mailbox configured to receive role activation alerts. 8. Click **Update**. 9. If the role has any PIM groups actively assigned to it, then also apply the same configurations per the steps above to each PIM group's **Member** settings. #### Related links * [Entra admin center - Privileged Identity Management | Microsoft Entra roles](https://entra.microsoft.com/#view/Microsoft_Azure_PIMCommon/ResourceMenuBlade/~/roles/resourceId//resourceType/tenant/provider/aadroles) * [CISA 7.8 Highly Privileged User Access - MS.AAD.7.8v1](https://github.com/cisagov/ScubaGear/blob/main/PowerShell/ScubaGear/baselines/aad.md#msaad78v1) * [CISA ScubaGear Rego Reference](https://github.com/cisagov/ScubaGear/blob/main/PowerShell/ScubaGear/Rego/AADConfig.rego#L1022) * [CISA 7.9 Highly Privileged User Access - MS.AAD.7.9v1](https://github.com/cisagov/ScubaGear/blob/main/PowerShell/ScubaGear/baselines/aad.md#msaad78v1) * [CISA ScubaGear Rego Reference](https://github.com/cisagov/ScubaGear/blob/main/PowerShell/ScubaGear/Rego/AADConfig.rego#L1057)", "severity": "high", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "maester" }, { "id": "CISA.MS.AAD.8.2", "title": "Only users with the Guest Inviter role SHOULD be able to invite guest users.", "description": "Only users with the Guest Inviter role SHOULD be able to invite guest users. Rationale: By only allowing an authorized group of individuals to invite external users to create accounts in the tenant, an agency can enforce a guest user account approval process, reducing the risk of unauthorized account creation. #### Remediation action: 1. In **Entra ID** and **External Identities**, select **[External collaboration settings](https://entra.microsoft.com/#view/Microsoft_AAD_IAM/CompanyRelationshipsMenuBlade/~/Settings/menuId/Settings)**. 2. Under **Guest invite settings**, select **Only users assigned to specific admin roles can invite guest users** or **No one in the organization can invite guest users including admins (most restrictive)**. 3. Click **Save**. #### Related links * [Entra admin center - External Identities | External collaboration settings](https://entra.microsoft.com/#view/Microsoft_AAD_IAM/CompanyRelationshipsMenuBlade/~/Settings/menuId/Settings) * [CISA Guest User Access - MS.AAD.8.2v1](https://github.com/cisagov/ScubaGear/blob/main/PowerShell/ScubaGear/baselines/aad.md#msaad82v1) * [CISA ScubaGear Rego Reference](https://github.com/cisagov/ScubaGear/blob/main/PowerShell/ScubaGear/Rego/AADConfig.rego#L1157)", "severity": "high", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "maester" }, { "id": "CISA.MS.SHAREPOINT.1.3", "title": "External sharing SHALL be restricted to approved external domains and/or users in approved security groups per interagency collaboration needs.", "description": "External sharing SHALL be restricted to approved external domains and/or users in approved security groups per interagency collaboration needs. Rationale: By limiting sharing to domains or approved security groups used for interagency collaboration purposes, administrators help prevent sharing with unknown organizations and individuals. #### Remediation action: This policy is only applicable if the external sharing slider on the admin page is set to any value other than Only People in your organization. 1. Sign in to the [SharePoint admin center](https://go.microsoft.com/fwlink/?linkid=2185219). 2. Select Policies > Sharing. 3. Expand More external sharing settings. 4. Select Limit external sharing by domain. 5. Select Add domains. 6. Add each approved external domain users are allowed to share files with. 7. Select Manage security groups 8. Add each approved security group. Members of these groups will be allowed to share files externally. 9. Select Save. #### Related links * [CISA 1 External Sharing - MS.SHAREPOINT.1.3v1](https://github.com/cisagov/ScubaGear/blob/main/PowerShell/ScubaGear/baselines/sharepoint.md#mssharepoint13v1) * [CISA ScubaGear Rego Reference](https://github.com/cisagov/ScubaGear/blob/main/PowerShell/ScubaGear/Rego/SharepointConfig.rego#L130)", "severity": "high", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "maester" }, { "id": "EIDSCA.AF03", "title": "Authentication Method - FIDO2 security key - Enforce attestation.", "description": "Requires the FIDO security key metadata to be published and verified with the FIDO Alliance Metadata Service, and also pass Microsoft's additional set of validation testing. #### Test script ``` https://graph.microsoft.com/beta/policies/authenticationMethodsPolicy/authenticationMethodConfigurations('Fido2') .isAttestationEnforced -eq 'true' ``` #### Related links - [Open in Graph Explorer](https://developer.microsoft.com/en-us/graph/graph-explorer?request=policies/authenticationMethodsPolicy/authenticationMethodConfigurations('Fido2')&method=GET&version=beta&GraphUrl=https://graph.microsoft.com) - [fido2AuthenticationMethodConfiguration resource type - Microsoft Graph v1.0 | Microsoft Learn](https://learn.microsoft.com/en-us/graph/api/resources/fido2authenticationmethodconfiguration)", "severity": "high", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "maester" }, { "id": "EIDSCA.AF04", "title": "Authentication Method - FIDO2 security key - Enforce key restrictions.", "description": "Manages if registration of FIDO2 keys should be restricted. Restrict usage of FIDO2 from unauthorized vendors or platforms #### Test script ``` https://graph.microsoft.com/beta/policies/authenticationMethodsPolicy/authenticationMethodConfigurations('Fido2') .keyRestrictions.isEnforced -eq 'true' ``` #### Related links - [Open in Graph Explorer](https://developer.microsoft.com/en-us/graph/graph-explorer?request=policies/authenticationMethodsPolicy/authenticationMethodConfigurations('Fido2')&method=GET&version=beta&GraphUrl=https://graph.microsoft.com) - [fido2AuthenticationMethodConfiguration resource type - Microsoft Graph v1.0 | Microsoft Learn](https://learn.microsoft.com/en-us/graph/api/resources/fido2authenticationmethodconfiguration)", "severity": "high", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "maester" }, { "id": "EIDSCA.CR01", "title": "Consent Framework - Admin Consent Request - Policy to enable or disable admin consent request feature.", "description": "Defines if admin consent request feature is enabled or disabled #### Test script ``` https://graph.microsoft.com/beta/policies/adminConsentRequestPolicy .isEnabled -eq 'true' ``` #### Related links - [Open in Graph Explorer](https://developer.microsoft.com/en-us/graph/graph-explorer?request=policies/adminConsentRequestPolicy&method=GET&version=beta&GraphUrl=https://graph.microsoft.com) - [adminConsentRequestPolicy resource type - Microsoft Graph v1.0 | Microsoft Learn](https://learn.microsoft.com/en-us/graph/api/resources/adminconsentrequestpolicy) - [View in Microsoft Entra admin center](https://entra.microsoft.com/#view/Microsoft_AAD_IAM/ConsentPoliciesMenuBlade/~/AdminConsentSettings)", "severity": "high", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "maester" }, { "id": "CISA.MS.AAD.1.1", "title": "Legacy authentication SHALL be blocked.", "description": "Legacy authentication SHALL be blocked. Rationale: The security risk of allowing legacy authentication protocols is they do not support MFA. Blocking legacy protocols reduces the impact of user credential theft. #### Remediation action: Follow the guide below to create a conditional access policy that blocks legacy authentication. - [Block legacy authentication - Microsoft Learn](https://learn.microsoft.com/entra/identity/conditional-access/howto-conditional-access-policy-block-legacy#create-a-conditional-access-policy) #### Related links - [CISA Legacy Authentication - MS.AAD.1.1v1](https://github.com/cisagov/ScubaGear/blob/main/PowerShell/ScubaGear/baselines/aad.md#1-legacy-authentication) - [CISA ScubaGear Rego Reference](https://github.com/cisagov/ScubaGear/blob/main/PowerShell/ScubaGear/Rego/AADConfig.rego#L47)", "severity": "high", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "maester" }, { "id": "EIDSCA.PR01", "title": "Default Settings - Password Rule Settings - Password Protection - Mode.", "description": "If set to Enforce, users will be prevented from setting banned passwords and the attempt will be logged. If set to Audit, the attempt will only be logged. [Microsoft Entra Password Protection - Microsoft Entra ID - Microsoft Learn](https://learn.microsoft.com/en-us/azure/active-directory/authentication/concept-password-ban-bad-on-premises) #### Test script ``` https://graph.microsoft.com/beta/settings .values | where-object name -eq 'BannedPasswordCheckOnPremisesMode' | select-object -expand value -eq 'Enforce' ``` #### Related links - [Open in Graph Explorer](https://developer.microsoft.com/en-us/graph/graph-explorer?request=settings&method=GET&version=beta&GraphUrl=https://graph.microsoft.com) - [directorySetting resource type - Microsoft Graph beta | Microsoft Learn](https://learn.microsoft.com/en-us/graph/api/resources/directorysetting) - [View in Microsoft Entra admin center](https://entra.microsoft.com/#view/Microsoft_AAD_IAM/AuthenticationMethodsMenuBlade/~/PasswordProtection)", "severity": "high", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "maester" }, { "id": "MT.1005", "title": "All Conditional Access policies are configured to exclude at least one emergency/break glass account or group.", "description": "It is recommended to have at least one emergency/break glass account or account group excluded from all conditional access policies. This allows for emergency access to the tenant in case of a misconfiguration or other issues. See [Manage emergency access accounts in Microsoft Entra ID - Microsoft Learn](https://learn.microsoft.com/entra/identity/role-based-access-control/security-emergency-access)", "severity": "high", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "maester" }, { "id": "MT.1009", "title": "At least one Conditional Access policy is configured to block other legacy authentication.", "description": "Legacy authentication is an unsecure method to authenticate. This function checks if the tenant has at least one conditional access policy that blocks legacy authentication. See [Block legacy authentication - Microsoft Learn](https://learn.microsoft.com/entra/identity/conditional-access/howto-conditional-access-policy-block-legacy)", "severity": "high", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "maester" }, { "id": "MT.1010", "title": "At least one Conditional Access policy is configured to block legacy authentication for Exchange ActiveSync.", "description": "Legacy authentication is an unsecure method to authenticate. This function checks if the tenant has at least one conditional access policy that blocks legacy authentication. See [Block legacy authentication - Microsoft Learn](https://learn.microsoft.com/entra/identity/conditional-access/howto-conditional-access-policy-block-legacy)", "severity": "high", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "maester" }, { "id": "MT.1011", "title": "At least one Conditional Access policy is configured to secure security info registration only from a trusted location.", "description": "Checks if the tenant has at least one conditional access policy securing security info registration. See [Securing security info registration - Microsoft Learn](https://learn.microsoft.com/entra/identity/conditional-access/howto-conditional-access-policy-registration)", "severity": "high", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "maester" }, { "id": "MT.1012", "title": "At least one Conditional Access policy is configured to require MFA for risky sign-ins.", "description": "Checks if the tenant has at least one conditional access policy requiring multifactor authentication for risky sign-ins. See [Sign-in risk-based multifactor authentication - Microsoft Learn](https://learn.microsoft.com/entra/identity/conditional-access/howto-conditional-access-policy-risk)", "severity": "high", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "maester" }, { "id": "MT.1014", "title": "At least one Conditional Access policy is configured to require compliant or Entra hybrid joined devices for admins.", "description": "Microsoft recommends requiring device compliance for administrators that are members of the following roles: * Global administrator * Application administrator * Authentication Administrator * Billing administrator * Cloud application administrator * Conditional Access administrator * Exchange administrator * Helpdesk administrator * Password administrator * Privileged authentication administrator * Privileged Role Administrator * Security administrator * SharePoint administrator * User administrator See [Require compliant or Microsoft Entra hybrid joined device for administrators - Microsoft Learn](https://aka.ms/CATemplatesAdminDevices)", "severity": "high", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "maester" }, { "id": "MT.1017", "title": "At least one Conditional Access policy is configured to enforce non persistent browser session for non-corporate devices.", "description": "Microsoft recommends disabling browser persistence for users accessing the tenant from a unmanaged device. See [Require reauthentication and disable browser persistence - Microsoft Learn](https://aka.ms/CATemplatesBrowserSession)", "severity": "high", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "maester" }, { "id": "MT.1020", "title": "All Conditional Access policies are configured to exclude directory synchronization accounts or do not scope them.", "description": "It is recommended to exclude directory synchronization accounts from all conditional access policies scoped to all cloud apps.", "severity": "high", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "maester" }, { "id": "MT.1024.adminMFAV2", "title": "Require multifactor authentication for administrative roles.", "description": "Requiring multifactor authentication (MFA) for administrative roles makes it harder for attackers to access accounts. Administrative roles have higher permissions than typical users. If any of those accounts are compromised, your entire organization is exposed. At a minimum, protect the following roles: Global administrator, Authentication administrator, Billing administrator, Conditional Access administrator, Exchange administrator, Helpdesk administrator, Security administrator, SharePoint administrator, User administrator. #### Remediation action: 1. We provide step-by-step guidance to select and enable the right MFA method for your organization in the Microsoft 365 admin center. [Go to the Microsoft 365 MFA wizard](https://admin.microsoft.com/adminportal/home?Q=SecureScore#/featureexplorer/security/ConditionalAccess). 2. If you would like to perform the implementation yourself, first check what Microsoft Entra ID license you have under “Prerequisites” in Microsoft Secure Score or [see your license type under \"Basic information\" in the Microsoft Entra ID Overview.](https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/Overview). 3. If you’ve invested in Microsoft Entra ID Premium P1 or P2 licenses, you can create a Conditional Access policy from scratch or by using a template. [Follow these steps to create a Conditional Access policy from scratch or by using a template](https://docs.microsoft.com/azure/active-directory/conditional-access/howto-conditional-access-policy-admin-mfa). 4. If you would like to perform the implementation yourself and you’re using Microsoft Entra ID Free, turn on security defaults. Note: Security defaults and Conditional Access can’t be used side by side. [Enable security defaults](https://docs.microsoft.com/azure/active-directory/fundamentals/concept-fundamentals-security-defaults). 5. Keep track of your admin’s progress of registering authentication methods by going to Microsoft Entra ID > Security > Authentication methods > User registration details (requires Microsoft Entra ID Premium P1 or P2 licenses). [Go to User registration details](https://portal.azure.com/#view/Microsoft_AAD_IAM/AuthenticationMethodsMenuBlade/~/UserRegistrationDetails). **Impact:** First, users with administrative roles need to register for MFA. After each admin is registered, your policies then determine when they’re prompted for the additional authentication factors. #### Related links: * [Require multifactor authentication for administrative roles - Microsoft Entra admin center](https://entra.microsoft.com/#view/Microsoft_AAD_IAM/RecommendationDetails.ReactView/recommendationId/)", "severity": "high", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "maester" }, { "id": "SI000079", "title": "Write access to RBCD on DC", "description": "This indicator looks for Write access on RBCD for Domain Controllers to users who are not in Domain Admins, Enterprise Admins and Built-in Admins groups.", "severity": "high", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "purple-knight" }, { "id": "SI000080", "title": "Write access to RBCD on krbtgt account", "description": "This indicator looks for Write access on RBCD for the krbtgt account to users who are not in Domain Admins, Enterprise Admins and Built-in Admins groups.", "recommendation": "Review the list and ensure that there are no unnecessary principals who can set resource-based constrained delegation on krbtgt.", "severity": "high", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "purple-knight" }, { "id": "SI000151", "title": "RC4 or DES encryption type are supported by Domain Controllers", "description": "This indicator checks if RC4 or DES encryption is supported by Domain Controllers", "recommendation": "It is best practice to disable support for RC4 and DES on domain controllers. Proceed with caution, as this can cause clients that request RC4 encrypted kerberos tickets by default to fail.\n Disable it by adding the group policy Network security: Configure encryption types allowed for Kerberos and select only AES-128, AES-256 encryption types, to a GPO that affects the Domain Controllers container.\n The group policy path is Computer Configuration\\Windows Settings\\Security Settings\\Local Policies\\Security Options.", "severity": "high", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "purple-knight" }, { "id": "SI000351", "title": "Shadow Credentials on privileged objects", "description": "This indicator looks for users with write access to the msDS-KeyCredentialLink attribute of privileged users and DCs.", "recommendation": "Make sure these users should have this write access and that it is necessary, if it's not remove them.", "severity": "high", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "purple-knight" }, { "id": "SI000067", "title": "Privileged accounts with a password that never expires", "description": "This indicator identifies privileged accounts (adminCount attribute set to 1) where the Password Never Expires flag is set.", "recommendation": "Enforce that users with privileged access must change their passwords on a regular basis and ensure that those passwords are complex and ideally require MFA to authenticate.", "severity": "high", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "purple-knight" }, { "id": "SI000156", "title": "Certificate templates with 3 or more insecure configurations", "description": "This indicator checks if certificate templates in the forest have a minimum of three insecure configurations - Manager approval is disabled, No authorized signatures are required, SAN enabled, Authentication EKU present.", "recommendation": "Multiple actions can be taken to ensure certificate templates will be less vulnerable:\nMove any user accounts away from Password Never Expires by having a good password rotation scheme and ensure any accounts that require this flag have the least privileges required. If this is a service account, considering using Group Managed Service Accounts (gMSA).
", "severity": "info", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "purple-knight" }, { "id": "P-UnprotectedOU", "title": "OU without the accidental deletion protection have been found", "description": "The purpose is to ensure that Organizational Units (OUs) and Containers in Active Directory are protected to prevent accidental deletion, which could lead to data loss and disruptions in the network infrastructure.", "recommendation": "To safeguard against accidental deletions, it is essential to enable the \"Protect object from accidental deletion\" option for critical OUs and Containers. When this option is enabled, it adds an additional layer of security, preventing unintended deletions. To implement this protection: * Open the Active Directory Users and Computers management console. * Locate the OU or Container that requires protection. * Right-click on the OU or Container, select \"Properties.\" * In the \"Object\" tab, check the \"Protect object from accidental deletion\" option. * Click \"Apply\" and then \"OK\" to save the changes. You can list unprotected OU using the PowerShell command: Get-ADOrganizationalUnit -filter {name -like \"*\"} -Properties ProtectedFromAccidentalDeletion | format-table Name,ProtectedFromAccidentalDeletion and protect them using the command: Get-ADOrganizationalUnit -filter {name -like \"*\"} -Properties ProtectedFromAccidentalDeletion | where {$_.ProtectedFromAccidentalDeletion -eq $false} | Set-ADOrganizationalUnit -ProtectedFromAccidentalDeletion $true Note: only 10 will be listed below. Checkout the Delegations section for the complete list.", "severity": "info", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "pingcastle" }, { "id": "A-RootDseAnonBinding", "title": "Anonymous Binding to the rootDse is enabled", "description": "The purpose is to ensure that Anonymous Binding on RootDse is not enabled", "recommendation": "Edit the attribute msDS-Other-Settings of the object CN=Directory Service,CN=Windows NT,CN=Services,CN=Configuration. Add a new line with the content: DenyUnauthenticatedBind=1", "severity": "info", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "pingcastle" }, { "id": "A-PreWin2000AuthenticatedUsers", "title": "The PreWin2000 compatible group contains \"Authenticated Users\"", "description": "The purpose is checking if the \"Pre-Windows 2000 Compatible Access\" group contains \"Authenticated Users\"", "recommendation": "Remove \"Authenticated Users\" from the PreWin2000 group.", "severity": "info", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "pingcastle" }, { "id": "A-NoNetSessionHardening", "title": "No GPO has been found which implements NetCease", "description": "The purpose is to ensure that mitigations are in place against the Bloodhound tool", "recommendation": "If this mitigation is not part of the computer image, apply the following recommendations: Run the NetCease PowerShell script (referenced below) on a reference workstation. Open the Group Policy Management Console. Right-click the Group Policy object (GPO) that should contain the new preference item, and then click Edit . In the console tree under Computer Configuration, expand the Preferences folder, and then expand the Windows Settings folder. Right-click the Registry node, point to New, and select Registry Wizard. Select the reference workstation on which the desired registry settings exist, then click Next . Browse to HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\LanmanServer\\DefaultSecurity\\ and select the check box for “SrvsvcSessionInfo” from which you want to create a Registry preference item. Select the check box for a key only if you want to create a Registry item for the key rather than for a value within the key. Click Finish. The settings that you selected appear as preference items in the Registry Wizard Values collection", "severity": "info", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "pingcastle" }, { "id": "A-NoGPOLLMNR", "title": "No GPO has been found which disables LLMNR or at least one GPO does enable it explicitly", "description": "The purpose is to ensure that local name resolution protocol (LLMNR) cannot be used to collect credentials by performing a network attack", "recommendation": "Enable the GPO Turn off multicast name resolution and check that no GPO overrides this setting. (if it is the case, the policy involved will be displayed below)", "severity": "info", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "pingcastle" }, { "id": "A-DsHeuristicsLDAPSecurity", "title": "DsHeuristics has not been set to enable the mitigation for CVE-2021-42291", "description": "The purpose is to identify domains having mitigation for CVE-2021-42291 not set to enabled", "recommendation": "The easiest and fastest way to correct this issue is to replace the 28th and 29th character of the DsHeuristics attribute . The value of LDAPAddAutZVerifications and LDAPOwnerModify should be set to 1. Open the procedure embedded into the KB5008383 to apply this mitigation and change the DsHeuristics value. Note: You have to pay attention that there are control characters at the 10th and 20th position to avoid undesired changes of the DsHeuristics attribute. Typically if the DsHeuristics is empty, the expected new value is 00000000010000000002000000011", "severity": "info", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "pingcastle" }, { "id": "A-DnsZoneAUCreateChild", "title": "Authenticated Users can create DNS records", "description": "The purpose is to check if Authenticated Users has the right to create DNS records", "recommendation": "As of today, this rule is considered \"informative\" because the default configuration where Authenticated Users can create DNS records is considered safe. The reason for this classification is that no exploitation of that vulnerability has been reported. The proposed enhancement is to replace the identity who has been granted the right to create DNS Records (permission CreateChild) from Authenticated Users to Domain Computers. To perform this change, you have to edit the permission of the DNSZone whose object is located in the container CN=MicrosoftDNS,DC=DomainDnsZones. It should be noticed that if there is a privilege escalation on a computer, an attacker can impersonate the computer account and bypass this mitigation. The best mitigation is to create the DNS records manually as part as the domain join process and to revoke the permission granted to Authenticated Users.", "severity": "info", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "pingcastle" }, { "id": "A-DCLdapsProtocolAdvanced", "title": "At least one DC is using Tls1.0 or Tls1.1.", "description": "The purpose is to ensure that all DC are using the most advanced protocols when acting as server.", "recommendation": "Apply Windows updates and registry tweaks described in the documentation section to use Tls 1.2 and later.", "severity": "info", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "pingcastle" }, { "id": "A-AuditPowershell", "title": "The PowerShell audit configuration is not fully enabled.", "description": "The purpose is to ensure that PowerShell logging is enabled.", "recommendation": "Go to Computer Configuration -> Administrative Templates -> Windows Components -> Windows PowerShell And enable \"Turn on Module logging\" and \"Turn on PowerShell Script Block logging\" We recommend to set \"*\" as the module list.", "severity": "info", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "pingcastle" }, { "id": "A-NoServicePolicy", "title": "No password policy for service accounts found (MinimumPasswordLength>=20)", "description": "The purpose is to give information regarding a best practice for the Service Account password policy. Indeed, having a 20+ characters password for this account greatly helps reducing the risk of Kerberoasting attacks (offline cracking of the TGS tickets) Note: PSO (Password Settings Objects) will be visible only if the user, which collected the information, has the permission to view it.", "recommendation": "The recommended way to handle service accounts is to use \"Managed service accounts\" introduced since Windows Server 2008 R2 (search for \"msDS-ManagedServiceAccount\"). To solve the anomaly, you should implement a PSO or GPO password guarantying a 20+ length password.", "severity": "info", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "pingcastle" }, { "id": "S-FolderOptions", "title": "Some script extensions, used in phishing, can be directly run by double clicking on it", "description": "The objective is to ensure scripts do not automatically execute upon opening by default.", "recommendation": "Navigate to Computer Configuration > Preferences > Control Panel Settings > Folder Options. Create a new File Type with the \"Replace\" action for the extension you wish to secure. In \"Configure class settings\", add a new \"open\" action with Notepad as the default application: C:\\Windows\\System32\\notepad.exe.", "severity": "info", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "pingcastle" }, { "id": "S-DefenderASR", "title": "Not all possible Defender ASR mitigations are in Block or Warn mode", "description": "This rule confirms the activation of Defender ASR (Attack Surface Reduction) mitigations within a Group Policy Object (GPO).", "recommendation": "To apply an ASR mitigation, navigate to the GPO setting \"Configure Attack Surface Reduction rules\" found under Computer Configuration > Policies > Administrative Templates > Windows Components > Microsoft Defender Antivirus (formerly Windows Defender Antivirus) > Microsoft (Windows) Defender Exploit Guard > Attack Surface Reduction. Upon enabling this setting, select \"Set the state for each ASR rule\". Then, input the mitigation’s GUID as the Value name and assign 1 as the Value to enforce the rule in Block mode. Other configurable values include 2 for Audit mode and 6 for Warn mode. For instance, to block JavaScript or VBScript from executing downloaded executable content, use the GUID: d3e037e1-3eb8-44c8-a917-57927947596d. It is recommended to set Defender ASR rules as recommended in the article below. Prior to implementation, conduct an impact analysis to anticipate any potential disruptions, and utilize Audit mode to identify possible issues.", "severity": "info", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "pingcastle" }, { "id": "S-KerberosArmoring", "title": "Verify Kerberos Armoring is enabled on clients and the domain functional level is at least Windows Server 2012", "description": "The purpose is to ensure that clients support Kerberos armoring when domain functional level is at least Windows Server 2012", "recommendation": "To enable Kerberos armoring for client, edit the GPO and go to Computer Configuration > Administrative Templates > System > Kerberos then enable the policy \"Kerberos client support for claims, compound authentication and Kerberos armoring\".", "severity": "info", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "pingcastle" }, { "id": "S-KerberosArmoringDC", "title": "Verify Kerberos Armoring is enabled on DCs and the domain functional level is at least Windows Server 2012", "description": "The purpose is to ensure that DC supports Kerberos armoring when functional level is at least Windows Server 2012", "recommendation": "To enable Kerberos armoring for domain controllers, edit the GPO and go to Computer Configuration > Administrative Templates > System > KDC then enable the policy \"KDC support for claims, compound authentication and Kerberos armoring\". The policy should be set to at least \"Supported\". The safest settings is \"Fail authentication requests when Kerberos armoring is not available\" but it should be enabled only if the clients support Kerberos armoring.", "severity": "info", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "pingcastle" }, { "id": "S-FirewallScript", "title": "It is possible for scripts engine used by hackers to connect directly to the Internet", "description": "This rule verifies whether programs, such as script engines, are allowed to connect to the internet by default.", "recommendation": "1) Create Firewall Rules via GPO Configure the firewall rules under Computer Configuration / Policies / Windows Settings / Security Settings / Windows Defender Firewall with Advanced Security. Ensure the rules are applied on the Outbound side. Activate the rules. 2) Network Restrictions: We recommend setting the rules as active for the following IP address ranges to allow local network access: 0.0.0.0 to 9.255.255.255 11.0.0.0 to 126.255.255.255 128.0.0.1 to 172.15.255.255 172.32.0.0 to 192.167.255.255 192.169.0.0 to 255.255.255.255 Alternatively, you can choose to apply the rules to ALL IP addresses or add your internal proxy IP.", "severity": "info", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "pingcastle" }, { "id": "S-TerminalServicesGPO", "title": "The GPO are not pushing recommended configuration for Terminal Services", "description": "This rule verifies the recommended configuration for Terminal Services.", "recommendation": "The Terminal Services configuration can be found in Policies / Administrative Templates / Windows Components / Remote Desktop Services / Remote Desktop Session Host The details of this rule is located in Printer Redirection and Session Time Limits. PingCastle recommends to set the following Policy: Set time limit for disconnected sessions: 2h (aka MaxDisconnectionTime) Set time limit for active but idle Remote Desktop Services sessions: 8h (aka MaxIdleTime) Do not allow client printer redirection: Enabled (aka fDisableCpm) This rule is active if nothing is set or if the time limit is set to NEVER.", "severity": "info", "outcome": "fail", "resultType": "exposure_finding", "isIoe": true, "deviation": true, "tool": "pingcastle" }, { "id": "2.2.2", "title": "2.2.2 Ensure 'Access this computer from the network' is set to 'Administrators, Authenticated Users, ENTERPRISE DOMAIN CONTROLLERS' (DC only)", "description": "This policy setting allows other users on the network to connect to the computer and is required by various network protocols that include Server Message Block (SMB)-based protocols, NetBIOS, Common Internet File System (CIFS), and Component Object Model\nPlus (COM+).\n\nThe recommended state for this setting on Domain Controllers is: Administrators, Authenticated Users, ENTERPRISE DOMAIN CONTROLLERS.", "recommendation": "To establish the recommended configuration via GP, configure the following UI path to\nAdministrators, Authenticated Users, ENTERPRISE DOMAIN CONTROLLERS:\n\n```\nComputer Configuration\\Policies\\Windows Settings\\Security Settings\\Local Policies\\User Rights Assignment\\Access this computer from the network\n```\n\n### Impact\n\nIf you remove the\nAccess this computer from the network user right on Domain Controllers for all users, no one will be able to log on to the domain or use network resources. If you remove this user right on Member Servers, users will not be able to connect to those servers through the network. Successful negotiation of IPsec connections requires that the initiating machine has this right, therefore if using IPsec, it is recommended that it is assigned to the\nAuthenticated Users group. If you have installed optional components such as ASP.NET or Internet Information\nServices (IIS), you may need to assign this user right to additional accounts that are required by those components. It is important to verify that authorized users are assigned this user right for the computers they need to access the network.", "severity": "unknown", "outcome": "fail", "resultType": "compliance_check", "isIoe": false, "deviation": true, "tool": "cis-cat" }, { "id": "2.3.17.1", "title": "2.3.17.1 Ensure 'User Account Control: Admin Approval Mode for the Built-in Administrator account' is set to 'Enabled'", "description": "This policy setting controls the behavior of Admin Approval Mode for the built-in\nAdministrator account.\n\nThe recommended state for this setting is:\nEnabled.", "recommendation": "To establish the recommended configuration via GP, set the following UI path to\nEnabled:\n\n```\nComputer Configuration\\Policies\\Windows Settings\\Security Settings\\Local Policies\\Security Options\\User Account Control: Admin Approval Mode for the Built-in Administrator account\n```\n\n### Impact\n\nThe built-in Administrator account uses Admin Approval Mode. Users that log on using the local Administrator account will be prompted for consent whenever a program requests an elevation in privilege, just like any other user would.", "severity": "unknown", "outcome": "fail", "resultType": "compliance_check", "isIoe": false, "deviation": true, "tool": "cis-cat" }, { "id": "2.3.17.2", "title": "2.3.17.2 Ensure 'User Account Control: Behavior of the elevation prompt for administrators in Admin Approval Mode' is set to 'Prompt for consent on the secure desktop' or higher", "description": "This policy setting controls the behavior of the elevation prompt for administrators.\n\nThe recommended state for this setting is:\nPrompt for consent on the secure desktop. Configuring this setting to\nPrompt for credentials on the secure desktop also conforms to the benchmark.", "recommendation": "To establish the recommended configuration via GP, set the following UI path to\nPrompt for consent on the secure desktop or\nPrompt for credentials on the secure desktop:\n\n```\nComputer Configuration\\Policies\\Windows Settings\\Security Settings\\Local Policies\\Security Options\\User Account Control: Behavior of the elevation prompt for administrators in Admin Approval Mode\n```\n\n### Impact\n\nWhen an operation (including execution of a Windows binary) requires elevation of privilege, the user is prompted on the secure desktop to select either Permit or Deny.\nIf the user selects Permit, the operation continues with the user's highest available privilege.", "severity": "unknown", "outcome": "fail", "resultType": "compliance_check", "isIoe": false, "deviation": true, "tool": "cis-cat" }, { "id": "2.3.17.3", "title": "2.3.17.3 Ensure 'User Account Control: Behavior of the elevation prompt for standard users' is set to 'Automatically deny elevation requests'", "description": "This policy setting controls the behavior of the elevation prompt for standard users.\n\nThe recommended state for this setting is:\nAutomatically deny elevation requests.", "recommendation": "To establish the recommended configuration via GP, set the following UI path to\nAutomatically deny elevation requests:\n\n```\nComputer Configuration\\Policies\\Windows Settings\\Security Settings\\Local Policies\\Security Options\\User Account Control: Behavior of the elevation prompt for standard users\n```\n\n### Impact\n\nWhen an operation requires elevation of privilege, a configurable access denied error message is displayed. An enterprise that is running desktops as standard user may choose this setting to reduce help desk calls.\n\nNote:\n\nWith this setting configured as recommended, the default error message displayed when a user attempts to perform an operation or run a program requiring privilege elevation\n(without Administrator rights) is \"\nThis program will not run. This program is blocked by group policy. For more information, contact your system administrator.\n\n\" Some users who are not used to seeing this message may believe that the operation or program they attempted to run is specifically blocked by group policy, as that is what the message seems to imply. This message may therefore result in user questions as to why that specific operation/program is blocked, when in fact, the problem is that they need to perform the operation or run the program with an Administrative account (or \"Run as Administrator\" if it is already an Administrator account), and they are not doing that.", "severity": "unknown", "outcome": "fail", "resultType": "compliance_check", "isIoe": false, "deviation": true, "tool": "cis-cat" }, { "id": "5.1", "title": "5.1 Ensure 'Print Spooler (Spooler)' is set to 'Disabled' (DC only)", "description": "This service spools print jobs and handles interaction with printers.\n\nThe recommended state for this setting is:\nDisabled.", "recommendation": "To establish the recommended configuration via GP, set the following UI path to:\nDisabled:\n\n```\nComputer Configuration\\Policies\\Windows Settings\\Security Settings\\System Services\\Print Spooler\n```\n\n### Impact\n\nDomain Controllers will not be able to prune published printers from Active Directory.\nBy default, Domain Controllers prune printer objects from Active Directory if the computer that published them doesn't respond to contact requests.\n\nDomain Controllers will not be able to act as a print server, sharing printers for clients.\n\nApplications on and users logged in at Domain Controllers will not be able to print, including printing to files (such as Adobe Portable Document Format (PDF)) which uses the Print Spooler service.", "severity": "unknown", "outcome": "fail", "resultType": "compliance_check", "isIoe": false, "deviation": true, "tool": "cis-cat" }, { "id": "9.1.1", "title": "9.1.1 Ensure 'Windows Firewall: Domain: Firewall state' is set to 'On (recommended)'", "description": "This policy setting controls whether the built-in Domain Firewall state is enabled or disabled.\n\nThe recommended state for this setting is:\nOn (recommended).", "recommendation": "To establish the recommended configuration via GP, set the following UI path to\nOn (recommended):\n\n```\nComputer Configuration\\Policies\\Windows Settings\\Security Settings\\Windows Defender Firewall with Advanced Security\\Windows Defender Firewall with Advanced Security\\Windows Defender Firewall Properties\\Domain Profile\\Firewall state\n```\n\n### Impact\n\nNone - this is the default behavior.", "severity": "unknown", "outcome": "fail", "resultType": "compliance_check", "isIoe": false, "deviation": true, "tool": "cis-cat" }, { "id": "9.1.2", "title": "9.1.2 Ensure 'Windows Firewall: Domain: Inbound connections' is set to 'Block (default)'", "description": "This policy setting determines the behavior for inbound connections that do not match an inbound firewall rule.\n\nThe recommended state for this setting is:\nBlock (default).", "recommendation": "To establish the recommended configuration via GP, set the following UI path to\nBlock (default):\n\n```\nComputer Configuration\\Policies\\Windows Settings\\Security Settings\\Windows Defender Firewall with Advanced Security\\Windows Defender Firewall with Advanced Security\\Windows Defender Firewall Properties\\Domain Profile\\Inbound connections\n```\n\n### Impact\n\nNone - this is the default behavior.", "severity": "unknown", "outcome": "fail", "resultType": "compliance_check", "isIoe": false, "deviation": true, "tool": "cis-cat" }, { "id": "9.1.3", "title": "9.1.3 Ensure 'Windows Firewall: Domain: Settings: Display a notification' is set to 'No'", "description": "Select this option to have Windows Firewall with Advanced Security display notifications to the user when a program is blocked from receiving inbound connections.\n\nThe recommended state for this setting is:\nNo.\n\nNote:\n\nWhen the\nApply local firewall rules setting is configured to\nNo, it's recommended to also configure the\nDisplay a notification setting to No. Otherwise, users will continue to receive messages that ask if they want to unblock a restricted inbound connection, but the user's response will be ignored.", "recommendation": "To establish the recommended configuration via GP, set the following UI path to\nNo:\n\n```\nComputer Configuration\\Policies\\Windows Settings\\Security Settings\\Windows Defender Firewall with Advanced Security\\Windows Defender Firewall with Advanced Security\\Windows Defender Firewall Properties\\Domain Profile\\Settings Customize\\Display a notification\n```\n\n### Impact\n\nWindows Firewall will not display a notification when a program is blocked from receiving inbound connections.", "severity": "unknown", "outcome": "fail", "resultType": "compliance_check", "isIoe": false, "deviation": true, "tool": "cis-cat" }, { "id": "9.1.4", "title": "9.1.4 Ensure 'Windows Firewall: Domain: Logging: Name' is configured", "description": "This policy setting is used to specify the path and name of the file in which Windows\nFirewall will write its log information.\n\nThe recommended state for this setting is: configured.\n\nExample: %SystemRoot%\\System32\\logfiles\\firewall\\domainfw.log.", "recommendation": "To establish the recommended configuration via GP, set the following UI path to\n