From domain data to defensible identity security decisions.
This report provides visibility into the security posture of the organization's Active Directory environment, enabling stakeholders to identify risk, evaluate security controls, and prioritize remediation efforts.
At a Glance
A high-level read on where risk concentrates and where you can move the needle quickly.
Pass / Fail
Overall checks passed versus failed.
Findings by Risk Level
Distribution of findings by risk level.
Findings by Category
Distribution of findings by category, sorted by highest count.
Quick Wins
Highest-impact, lowest-effort remediations.
Top 10 Riskiest Findings
Highest-severity findings, ordered by impact.
Since Last Scan
How findings have shifted since the previous scan, and severity across recent runs.
Severity Trend Over Time
Critical / High / Moderate / Low across recent scans.
Change Highlights
How findings shifted since the previous scan (July 12, 2026).
Assessment Journey
Each milestone summarizes risk posture, changes, and key takeaways.
- Critical10
- High39
- Moderate25
- Low22
- Initial baseline established
- Use this scan as the starting point for measuring remediation progress, ownership, and risk reduction.
- Prioritize critical and high findings first before expanding effort to moderate and low exposure.
- Critical10
- High42
- Moderate26
- Low22
- Risk Score decreased (-3)
- Total findings increased (+4)
- Severity shift: High +3, Moderate +1
- Review newly introduced or worsened findings to determine root cause.
- Assign ownership for high-impact issues before the next scan to prevent the risk trend from continuing.
- Critical10
- High38
- Moderate24
- Low21
- Risk Score increased (+5)
- Total findings decreased (-7)
- Severity shift: High -4, Moderate -2, Low -1
- Continue the remediation approach that reduced risk and validate that fixes remain in place.
- Shift attention to persistent findings that have not changed across recent scans.
Findings
Every issue identified by the scan, grouped by category. Click any card for the description, attacker context, and remediation guidance.
Authentication and Authorization
18 findings
Accounts Vulnerable to Kerberoasting
Accounts Vulnerable to Kerberoasting
Accounts Vulnerable to Kerberoasting
Kerberoasting is an attack technique where attackers extract service account credentials from a Kerberos ticket. By requesting a service ticket for a target account, attackers can obtain the ticket and perform an offline brute-force attack to crack the password. This method exploits weak service account passwords and can lead to unauthorized access of critical systems and data. What increases the danger of this attack is that any AD user can request the tickets.
After obtaining access to a domain, kerberoasting is a popular first attack to perform privilege escalation. Attackers choose this path when they don’t have a privileged position in the environment and are looking to elevate privileges. Once password hashes are obtained, the attacker will leverage their favorite password lists and rulesets against the hashes until they are cracked. Kerberos hashes are large in comparison to many other hashes obtained during hacking activities, though the computational power of newer graphics cards make cracking password hashes significantly more effective.
Recommendation
Strengthen or rotate Kerberoastable service account passwords, migrate eligible accounts to gMSA, and validate updated password age and SPN ownership.
Prerequisites
- Domain Admin or Password Reset rights for service accounts in scope.
- Service owner identification and sign-off for each affected account.
- Inventory of services and applications dependent on each account's credentials.
- Change control approval obtained.
- Rollback plan prepared for service restart in case of disruption.
Remediation Objective
- Assign strong, complex passwords (25 characters or more) to all Kerberoastable service accounts.
- Migrate service accounts to Group Managed Service Accounts (gMSA) wherever the application supports it.
- Implement a regular password rotation policy for any service accounts that cannot use gMSA.
- Monitor for Kerberos service ticket requests targeting sensitive accounts.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Import the Active Directory module.
Import-Module ActiveDirectory
# Reset the password on a service account.
# Use a random 25+ character password from your
# password manager and save it there first.
# Replace <SamAccountName> with the target service account name.
$NewPassword = Read-Host -AsSecureString "New password for <SamAccountName>"
Set-ADAccountPassword -Identity "<SamAccountName>" -Reset -NewPassword $NewPassword
# Put the new password into every service and
# scheduled task that runs as this account, then
# restart them and confirm they start.# Import the Active Directory module.
Import-Module ActiveDirectory
# Import a reviewed list of service accounts to remediate.
# CSV must contain columns: SamAccountName
$Accounts = Import-Csv -Path ".\ApprovedServiceAccounts.csv"
# Reset each service account password. At each prompt,
# enter a random 25+ character password from your
# password manager and save it there.
foreach ($Account in $Accounts) {
$NewPassword = Read-Host -AsSecureString "New password for $($Account.SamAccountName)"
Set-ADAccountPassword -Identity $Account.SamAccountName -Reset -NewPassword $NewPassword -WhatIf
Write-Output "Processed: $($Account.SamAccountName)"
}
# Remove -WhatIf after the change has been reviewed and approved.
# Then put each new password into every service and
# scheduled task that runs as that account.Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open Active Directory Users and ComputersLaunch
dsa.mscfrom an administrative workstation. - Locate the affected service accountNavigate to the OU or container containing the service account identified in the report.
- Reset the passwordRight-click the account and select Reset Password. Enter a strong, complex password of at least 25 characters. Uncheck User must change password at next logon.
- Update the dependent serviceLog in to the server or application hosting the service using this account. Update the service logon credentials with the new password using
Services.mscor the application's configuration interface. - Restart the serviceRestart the dependent service to apply the new credentials and confirm it starts successfully.
Validation
- Confirm the password last set date has been updated: Get-ADUser -Identity <SamAccountName> -Properties PasswordLastSet.
- Verify the dependent service is running and authenticating successfully.
- Request a Kerberos service ticket for the account and confirm it requires significantly more computational effort to crack (validated by password strength).
- Run Insight Recon AD against the same scope to confirm the finding is resolved.
Exceptions
- Document the account dependency and business justification.
- Assign an owner and target remediation date.
- Apply compensating controls until remediation is complete.
Evidence
- Before-and-after export of PasswordLastSet attribute for affected accounts.
- Service health validation results confirming dependent services are running.
- Change ticket and approval record.
- PowerShell transcript of password reset commands.
Additional Guidance
Kerberoasting is an attack technique that cannot be fully prevented for accounts with SPNs, as any authenticated domain user can request service tickets. The most effective defense is to make the resulting hash computationally impractical to crack by using passwords of 25 characters or more. Organizations should prioritize migrating service accounts with SPNs to Group Managed Service Accounts, which use automatically managed, high-entropy passwords that are effectively immune to offline cracking.
Monitoring should be configured to alert on anomalous service ticket request patterns, such as a single account requesting tickets for a large number of SPNs in a short time period. While false positive rates can be high, these alerts are a valuable early warning mechanism for active Kerberoasting campaigns.
Accounts with Non-Expiring Passwords
Accounts with Non-Expiring Passwords
Accounts with Non-Expiring Passwords
Password expiration is not enforced on the reported accounts. The longer a password is in use, the longer attackers have to crack password hashes, actively control the account, or perform credential-based attacks against them. These accounts are often service accounts which typically have additional privileges and are targeted by attackers.
Account hashes are often obtained via network poisoning attacks or Kerberos-based attacks. Some of these attacks are difficult to detect, giving adversaries plenty of time to conduct password cracking. With today’s processing power, accounts without password rotation will eventually be compromised.
Recommendation
Remove the Password Never Expires flag from affected accounts, apply an approved rotation model, and document any business-approved exceptions.
Prerequisites
- Domain Admin or Account Operators rights to modify account attributes.
- Service owner identification and sign-off for all service accounts in scope.
- Inventory of services and applications dependent on each account.
- PAM solution enrollment considered as a preferred alternative for service accounts.
- Change control approval obtained.
Remediation Objective
- Enable password expiration for all accounts identified with the Password Never Expires flag.
- Coordinate with service owners to update service configurations after password resets.
- Enroll service accounts in a PAM solution or migrate to Group Managed Service Accounts (gMSA) where supported.
- Establish a password rotation schedule for accounts that cannot use gMSA.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Import the Active Directory module.
Import-Module ActiveDirectory
# Enable password expiration on a single account.
# Replace <SamAccountName> with the target account.
Set-ADUser -Identity "<SamAccountName>" -PasswordNeverExpires $false# Import the Active Directory module.
Import-Module ActiveDirectory
# Import a reviewed list of accounts to remediate.
# CSV must contain a column named SamAccountName.
$Accounts = Import-Csv -Path ".\ApprovedAccounts.csv"
foreach ($Account in $Accounts) {
Set-ADUser -Identity $Account.SamAccountName -PasswordNeverExpires $false -WhatIf
Write-Output "Processed: $($Account.SamAccountName)"
}
# Remove -WhatIf after reviewing.Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open Active Directory Users and ComputersLaunch
dsa.mscfrom an administrative workstation. - Locate the affected accountNavigate to the OU or container containing the account identified in the report.
- Open account propertiesDouble-click the account and navigate to the Account tab.
- Clear the password never expires optionIn the Account options list, uncheck the option Password never expires.
- Save changesClick OK or Apply. Coordinate with the service owner to update the service configuration before the password next expiration date.
Validation
- Confirm the PasswordNeverExpires attribute is False: Get-ADUser -Properties PasswordNeverExpires.
- Verify the account is subject to the domain password policy or a Fine-Grained Password Policy.
- Confirm dependent services are updated with a rotation plan in place.
- Run Insight Recon AD against the same scope to confirm the finding is resolved.
Exceptions
- Document the account dependency and business justification.
- Assign an owner and target remediation date.
- Apply compensating controls until remediation is complete.
Evidence
- Before-and-after PasswordNeverExpires attribute export.
- Service health validation confirming rotation plan is in place.
- Change ticket and approval record.
- Follow-up scan results showing finding resolved.
Additional Guidance
Non-expiring passwords should be limited to documented exceptions with compensating controls. Prioritize privileged, service, and externally exposed accounts, then move toward managed service accounts, vaulting, or PAM where long-lived credentials are currently required.
Accounts with Non-Standard Primary ID's
Accounts with Non-Standard Primary ID's
Accounts with Non-Standard Primary ID's
Accounts with non-standard Primary Group IDs (PGID), may indicate hidden or misconfigured group memberships. The Primary Group ID is typically set to default values, such as Users (513/514), Computers (514/515), and Domain Controllers (516/521). Attackers can exploit non-standard PGIDs to obscure privileged access or bypass membership audits, making it difficult to detect unauthorized access or escalation.
Accounts with non-standard PGIDs are easily discoverable with hacker toolsets and are regularly a first target. These accounts are frequently leveraged to compromise accounts that aren’t properly protected by expected GPOs or to bypass alerting of Domain Administrator additions.
Recommendation
Review accounts with non-standard primary group IDs, reset unnecessary deviations, and document any approved operational requirement.
Prerequisites
- Domain Admin rights to modify the primaryGroupID attribute.
- Investigation completed to determine whether the non-standard PGID was intentionally set.
- Change control approval obtained.
Remediation Objective
- Investigate each account to determine the reason for the non-standard Primary Group ID.
- Reset the Primary Group ID to the appropriate standard value (513 for domain users, 515 for computers, 516 for domain controllers).
- Confirm GPO application and group membership visibility are correct after the change.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Import the Active Directory module.
Import-Module ActiveDirectory
# Reset the Primary Group ID to the standard Domain Users value (513).
# Replace <SamAccountName> with the target account.
# Standard values: Domain Users = 513, Domain Computers = 515, Domain Controllers = 516
Set-ADUser -Identity "<SamAccountName>" -Replace @{primaryGroupID = 513}# Import the Active Directory module.
Import-Module ActiveDirectory
# Import a reviewed list of accounts to remediate.
# CSV must contain columns: SamAccountName, PrimaryGroupID
$Accounts = Import-Csv -Path ".\ApprovedAccounts.csv"
foreach ($Account in $Accounts) {
Set-ADUser -Identity $Account.SamAccountName -Replace @{primaryGroupID = [int]$Account.PrimaryGroupID} -WhatIf
Write-Output "Processed: $($Account.SamAccountName) -> PrimaryGroupID: $($Account.PrimaryGroupID)"
}
# Remove -WhatIf after reviewing.Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open ADSI EditLaunch
adsiedit.mscfrom an administrative workstation. - Connect to the domainRight-click ADSI Edit, select Connect to, and choose Default naming context.
- Locate the affected accountNavigate to the container holding the account and double-click the account object to open its attribute editor.
- Modify the primaryGroupID attributeLocate primaryGroupID in the attribute list. Double-click to edit and set the value to the appropriate standard (513 for domain users).
- Apply changesClick OK to save.
Validation
- Confirm the primaryGroupID attribute has been updated: Get-ADUser -Properties primaryGroupID.
- Verify GPO application is as expected using gpresult /r on a system the account logs into.
- Confirm group membership visibility in Active Directory tools is correct.
- Run Insight Recon AD against the same scope to confirm the finding is resolved.
Exceptions
- Document the account dependency and business justification.
- Assign an owner and target remediation date.
- Apply compensating controls until remediation is complete.
Evidence
- Before-and-after primaryGroupID attribute export.
- Change ticket and approval record.
- GPO application verification.
- Follow-up scan results showing finding resolved.
Additional Guidance
Align PGIDs with organizational standards, and investigate any deviations. Monitoring changes to PGIDs and group membership attributes can help prevent unauthorized privilege escalation. Some PAM and identity tools may not identify these accounts correctly if they rely on standard primary group assumptions. Some organizations choose to change the Primary Group ID of accounts to enforce or not enforce certain GPOs, so it’s suggested to review these accounts thoroughly to ensure they are properly protected as expected.
Accounts with No Password Requirement
Accounts with No Password Requirement
Accounts with No Password Requirement
Password requirement settings are not enforced on the reported accounts. While GPOs may override this setting, there are various scenarios where this may not be the case. For example, if the account had an empty password set before the policy was implemented. It’s a best practice to set it on the account as well as the GPO. You could audit this by supplying an empty password or looking at the password hashes from your domain controller as the hashes are not salted.
Password spraying via SMB with tools like CrackMapExec are commonly used to identify an account with an empty password. Accounts with empty passwords allow a malicious attacker an authenticated position in the network, provides lateral movement, and possibly privilege escalation. Many threat actors will save these accounts for later use to maintain persistence in the environment.
Recommendation
Remove the PASSWD_NOTREQD flag from affected accounts, set compliant passwords where needed, and validate that domain password policy applies.
Prerequisites
- Domain Admin or Account Operators rights to modify account attributes.
- Confirm whether affected accounts currently have empty passwords; if so, coordinate a password reset.
- Service owner notification for any service accounts in scope.
- Change control approval obtained.
Remediation Objective
- Remove the PASSWD_NOTREQD flag from all identified accounts.
- Set a strong password on any account that currently has an empty password.
- Ensure that the domain password policy applies to all accounts after the flag is cleared.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Import the Active Directory module.
Import-Module ActiveDirectory
# Remove the PASSWD_NOTREQD flag from a user account.
# Replace <SamAccountName> with the target account.
$Account = Get-ADUser -Identity "<SamAccountName>" -Properties UserAccountControl
$NewUAC = $Account.UserAccountControl -band -bnot 0x20
Set-ADUser -Identity "<SamAccountName>" -Replace @{UserAccountControl = $NewUAC}
# If the account has an empty password, reset it to a strong value.
Set-ADAccountPassword -Identity "<SamAccountName>" -Reset `
-NewPassword (Read-Host -AsSecureString "Enter new password")# Import the Active Directory module.
Import-Module ActiveDirectory
# Import a reviewed list of accounts to remediate.
# CSV must contain a column named SamAccountName.
$Accounts = Import-Csv -Path ".\ApprovedAccounts.csv"
foreach ($Account in $Accounts) {
$ADUser = Get-ADUser -Identity $Account.SamAccountName -Properties UserAccountControl
$NewUAC = $ADUser.UserAccountControl -band -bnot 0x20
Set-ADUser -Identity $Account.SamAccountName -Replace @{UserAccountControl = $NewUAC} -WhatIf
Write-Output "Processed: $($Account.SamAccountName)"
}
# Remove -WhatIf after reviewing.Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open Active Directory Users and ComputersLaunch
dsa.mscfrom an administrative workstation. - Locate the affected accountNavigate to the OU or container containing the account identified in the report.
- Open account propertiesDouble-click the account and navigate to the Account tab.
- Clear the no-password flagIn the Account options list, uncheck the option Password not required.
- Set a password if neededIf the account has an empty password, right-click the account and select Reset Password to assign a strong password.
- Save changesClick OK or Apply.
Validation
- Confirm the PASSWD_NOTREQD flag is cleared: Get-ADUser -Properties UserAccountControl and verify bit 0x20 is not set.
- Verify the account has a password set by checking the PasswordLastSet attribute.
- Run Insight Recon AD against the same scope to confirm the finding is resolved.
Exceptions
- Document the account dependency and business justification.
- Assign an owner and target remediation date.
- Apply compensating controls until remediation is complete.
Evidence
- Before-and-after UserAccountControl attribute export.
- PasswordLastSet attribute confirmation.
- Change ticket and approval record.
- Follow-up scan results showing finding resolved.
Additional Guidance
Accounts without password requirements represent a direct path to unauthenticated domain access. Even if a GPO enforces password requirements, the PASSWD_NOTREQD flag can bypass that enforcement in some scenarios.
Accounts with reversible passwords
Accounts with reversible passwords
Accounts with reversible passwords
Accounts with reversible passwords store their passwords in a format that can be easily decrypted to reveal the original plaintext password. Attackers can retrieve these passwords using methods like DCSync attacks, potentially gaining unauthorized access to systems and resources within the domain.
Attacker toolsets can easily detect these accounts and reverse the encryption, allowing for quick compromise. DCSync attacks and remote domain controller hash dumping is often leveraged for these accounts. These attacks typically occur once an attacker has an authenticated position within the network.
Recommendation
Disable reversible password storage on affected accounts, reset passwords, and validate the reversible encryption flag is cleared.
Prerequisites
- Domain Admin or Account Operators rights to modify account attributes.
- Review of affected accounts completed to locate any legacy application dependencies.
- Service owner notification for affected accounts.
- Change control approval obtained.
Remediation Objective
- Disable the Store password using reversible encryption flag on all identified accounts.
- Force a password reset on affected accounts to purge the stored reversible password from the database.
- Confirm no legitimate application dependency requires plaintext password access.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Import the Active Directory module.
Import-Module ActiveDirectory
# Disable reversible password encryption on a single account.
# Replace <SamAccountName> with the target account.
Set-ADUser -Identity "<SamAccountName>" -AllowReversiblePasswordEncryption $false
# Force a password reset to purge the stored reversible password.
Set-ADAccountPassword -Identity "<SamAccountName>" -Reset `
-NewPassword (Read-Host -AsSecureString "Enter new password")# Import the Active Directory module.
Import-Module ActiveDirectory
# Import a reviewed list of accounts to remediate.
# CSV must contain a column named SamAccountName.
$Accounts = Import-Csv -Path ".\ApprovedAccounts.csv"
foreach ($Account in $Accounts) {
Set-ADUser -Identity $Account.SamAccountName -AllowReversiblePasswordEncryption $false -WhatIf
Write-Output "Processed: $($Account.SamAccountName)"
}
# Remove -WhatIf after reviewing.
# Perform password resets for all affected accounts after flag removal.Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open Active Directory Users and ComputersLaunch
dsa.mscfrom an administrative workstation. - Locate the affected accountNavigate to the OU or container containing the account.
- Open account propertiesDouble-click the account and navigate to the Account tab.
- Clear the reversible encryption optionIn Account options, uncheck Store password using reversible encryption.
- Reset the passwordRight-click the account and select Reset Password to force a new password and purge the stored reversible value.
- Save changesClick OK.
Validation
- Confirm AllowReversiblePasswordEncryption is False: Get-ADUser -Properties AllowReversiblePasswordEncryption.
- Verify the account password has been reset to purge the reversible value.
- Run Insight Recon AD against the same scope to confirm the finding is resolved.
Exceptions
- Document the account dependency and business justification.
- Assign an owner and target remediation date.
- Apply compensating controls until remediation is complete.
Evidence
- Before-and-after AllowReversiblePasswordEncryption attribute export.
- Password reset confirmation.
- Change ticket and approval record.
- Follow-up scan results showing finding resolved.
Additional Guidance
Reversible password encryption stores a value that can be mathematically reversed to recover the original password, making it functionally equivalent to storing the password in plaintext. This setting exists solely for legacy protocol compatibility and should not be enabled in any modern environment.
Accounts with SPNs Not Supporting AES
Accounts with SPNs Not Supporting AES
Accounts with SPNs Not Supporting AES
One or more service accounts with service principal names do not support AES Kerberos encryption (msDS-SupportedEncryptionTypes lacks AES, or is unset). These accounts may receive service tickets encrypted with weaker algorithms such as RC4, which are more practical to crack offline. Service accounts should support AES and use strong, regularly managed passwords.
Service accounts with SPNs are common Kerberoasting targets. If they do not support AES encryption, service tickets may use weaker encryption that is more practical for attackers to crack offline. Weak encryption increases the value of any captured ticket and can expose the service account password.
Recommendation
Set service accounts to AES-only Kerberos encryption and reset their passwords to generate AES keys.
Prerequisites
- Rights to modify the service accounts.
- Confirm each service supports AES Kerberos encryption.
- Obtain change control approval.
Remediation Objective
- Set msDS-SupportedEncryptionTypes to AES-only (0x18) on the service accounts.
- Reset the account password so AES keys are generated.
- Confirm the service still authenticates.
Remediation Path 1: Command-Line
Use this path to set AES encryption types on the affected accounts.
# Set AES128 + AES256 (0x18 = 24) and regenerate keys by resetting the password.
Import-Module ActiveDirectory
Set-ADUser -Identity "<SamAccountName>" -Replace @{ "msDS-SupportedEncryptionTypes" = 24 }# Apply to approved service accounts (column: SamAccountName).
Import-Module ActiveDirectory
$Items = Import-Csv -Path ".\ApprovedObjects.csv"
foreach ($Item in $Items) {
Set-ADUser -Identity $Item.SamAccountName -Replace @{ "msDS-SupportedEncryptionTypes" = 24 } -WhatIf
}Remediation Path 2: GUI
Use this path when changing a small number of accounts.
- Open Active Directory Users and ComputersLaunch ADUC and enable Advanced Features from the View menu.
- Locate the service accountNavigate to the account identified in the report.
- Open the Attribute EditorRight-click the account, select Properties, and open the Attribute Editor tab.
- Set the encryption typesSet msDS-SupportedEncryptionTypes to 24 (AES128 + AES256), then click OK.
- Reset the passwordReset the account password so AES keys are generated, coordinating with the service owner.
Validation
- Confirm msDS-SupportedEncryptionTypes includes AES (and not RC4) on each account.
- Verify the service still authenticates after the password reset.
- Run a follow-up scan to confirm the finding is resolved.
Exceptions
- If a service genuinely requires RC4, document the dependency and compensating monitoring.
- Record owner and target date for any temporary delay.
- Track formal risk acceptance.
Evidence
- Encryption-type export before and after remediation.
- Confirmation the service still authenticates.
- Follow-up scan results confirming resolution.
Additional Guidance
Enforcing AES is a hardening step, not a substitute for strong service-account passwords; combine it with long, random passwords or migration to gMSAs, which both rotate and use AES.
Accounts With Stale Passwords
Accounts With Stale Passwords
Accounts With Stale Passwords
Stale passwords provide attackers with additional opportunities to perform credential-based attacks and can prolong access to systems if compromised.
Attackers use credential stuffing, password spraying, or brute-force attacks to crack weak or outdated passwords that remain unchanged for extended periods. Tools like Mimikatz, Impacket, or Kerbrute can help identify and exploit these accounts, especially if they have elevated privileges. Once compromised, attackers can use the account for lateral movement, persistence, and privilege escalation, often going undetected due to a lack of regular password audits.
Recommendation
Reset stale active account passwords, apply standard lifecycle controls, and document any approved exceptions.
Prerequisites
- Domain Administrator credentials required.
- Distinguish between user accounts and service accounts, as the remediation approach differs.
- Confirm with account owners or service teams whether each account is still in active use.
- Obtain change control approval.
Remediation Objective
- Reset passwords for active accounts that have not had a password change within the defined policy threshold.
- Disable accounts confirmed as inactive that have stale passwords.
- Ensure all active user accounts adhere to the organization's password change policy.
- Reduce the risk of credential compromise through aged passwords that may have been exposed in prior incidents.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Import the Active Directory module.
Import-Module ActiveDirectory
# Force a password reset on next logon for a stale account.
# Replace <SamAccountName> with the target account.
Set-ADUser -Identity "<SamAccountName>" -ChangePasswordAtLogon $true
# Or disable the account if confirmed inactive:
# Disable-ADAccount -Identity "<SamAccountName>"# Import the Active Directory module.
Import-Module ActiveDirectory
# Import a reviewed and approved list of accounts with stale passwords.
# Required CSV columns: SamAccountName, Action (Reset or Disable)
$Accounts = Import-Csv -Path ".\ApprovedAccounts.csv"
foreach ($Account in $Accounts) {
if ($Account.Action -eq "Reset") {
Set-ADUser -Identity $Account.SamAccountName -ChangePasswordAtLogon $true -WhatIf
} elseif ($Account.Action -eq "Disable") {
Disable-ADAccount -Identity $Account.SamAccountName -WhatIf
}
}
# Remove -WhatIf after reviewing output.Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open Active Directory Users and ComputersLaunch
dsa.msc. - Locate the affected accountNavigate to the OU containing the account.
- Force a password resetRight-click the account and select Reset Password. Set a temporary password and check 'User must change password at next logon'.
- Or disable the account if inactiveRight-click the account and select Disable Account.
- Repeat for approved affected accountsComplete the same GUI process for each account listed in the approved remediation plan.
Validation
- Confirm password last set date is updated: Get-ADUser -Identity <SamAccountName> -Properties PasswordLastSet
- Verify inactive accounts are disabled.
- Run a follow-up scan to confirm the finding is resolved.
Exceptions
- Document the account dependency and business justification.
- Assign an owner and target remediation date.
- Apply compensating controls until remediation is complete.
Evidence
- Export of PasswordLastSet values for affected accounts before remediation.
- Change ticket and approval record.
- PowerShell output confirming password resets or account disables.
- Follow-up scan results confirming finding resolution.
Additional Guidance
Threat actors frequently search for stale credentials as an easy entry point into Active Directory environments. These accounts often go unnoticed in security monitoring, making them valuable for long-term persistence. Once compromised, they can be leveraged to access sensitive resources or conduct further attacks while appearing as legitimate users. Many organizations find that utilizing a PAM (Privileged Access Management) tool helps to better manage domain-based credentials.
Constrained Delegation Detected
Constrained Delegation Detected
Constrained Delegation Detected
Constrained delegation allows services to impersonate users when accessing specific resources on their behalf, but misconfigured or decommissioned service accounts with constrained delegation pose a significant security risk. Attackers with the ability to modify Service Principal Names (SPNs) can exploit these configurations to escalate privileges and move laterally within the environment, gaining unauthorized access to sensitive resources.
These issues are often discovered through reconnaissance tools such as BloodHound. Constrained delegation attacks can occur in various forms, such as compromising user or computer accounts with pre-existing delegations or exploiting resource-based constrained delegation, which happens when accounts have excessive permissions to certain assets.
Recommendation
Review constrained delegation assignments, remove unjustified configurations, and validate only approved services retain delegation rights.
Prerequisites
- Domain Administrator credentials required.
- Locate all accounts with constrained delegation configured (msDS-AllowedToDelegateTo attribute).
- Determine whether each delegation entry has a documented operational purpose.
- Coordinate with application and service owners before modifying delegation settings.
- Back up current delegation configurations before making changes.
- Obtain change control approval.
Remediation Objective
- Review all constrained delegation configurations and remove any that are not operationally justified.
- Restrict constrained delegation to only the specific services required for documented workflows.
- Replace protocol transition (Trusted to Authenticate for Delegation) with resource-based constrained delegation (RBCD) where possible for improved security.
- Reduce the attack surface for Kerberos delegation abuse in the event of a service account compromise.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Import the Active Directory module.
Import-Module ActiveDirectory
# Review all accounts with constrained delegation configured.
Get-ADObject -Filter { msDS-AllowedToDelegateTo -like "*" } `
-Properties msDS-AllowedToDelegateTo, TrustedForDelegation, TrustedToAuthForDelegation `
| Select-Object Name, msDS-AllowedToDelegateTo, TrustedToAuthForDelegation
# Remove constrained delegation from a specific account.
# Replace <SamAccountName> with the target account.
Set-ADUser -Identity "<SamAccountName>" -Clear msDS-AllowedToDelegateTo
Set-ADAccountControl -Identity "<SamAccountName>" -TrustedToAuthForDelegation $false# Import the Active Directory module.
Import-Module ActiveDirectory
# Import a reviewed and approved list of accounts to remove delegation from.
# Required CSV columns: SamAccountName
$Accounts = Import-Csv -Path ".\ApprovedAccounts.csv"
foreach ($Account in $Accounts) {
Set-ADUser -Identity $Account.SamAccountName -Clear msDS-AllowedToDelegateTo -WhatIf
Set-ADAccountControl -Identity $Account.SamAccountName `
-TrustedToAuthForDelegation $false -WhatIf
}
# Remove -WhatIf after reviewing output.Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open Active Directory Users and ComputersLaunch
dsa.mscwith Advanced Features enabled. - Locate the affected accountNavigate to the account identified in the report.
- Open account propertiesRight-click and select Properties, then click the Delegation tab.
- Review delegation settingsConfirm whether the delegation is justified and what services are listed.
- Modify or remove delegationSelect 'Do not trust this computer for delegation' to remove delegation entirely, or update the service list to remove unjustified entries.
- Save and testClick OK and confirm that legitimate delegated services are unaffected.
Validation
- Confirm delegation settings have been updated: Get-ADUser -Identity <SamAccountName> -Properties msDS-AllowedToDelegateTo, TrustedToAuthForDelegation
- Verify that legitimate delegated services are still functioning.
- Run a follow-up scan to confirm the finding is resolved.
Exceptions
- Document the authentication dependency and business justification.
- Assign an owner and target remediation date.
- Apply compensating controls until remediation is complete.
Evidence
- Export of delegation configurations before changes.
- Service owner justification documentation for retained delegations.
- Change ticket and approval record.
- PowerShell output confirming delegation settings after changes.
- Service functionality confirmation.
- Follow-up scan results confirming finding resolution.
Additional Guidance
Constrained delegation can be appropriate when tightly scoped, but it should be reviewed for necessity and target restrictions. Validate each service dependency and monitor changes to delegation settings on service accounts and computers.
Guest Account Enabled
Guest Account Enabled
Guest Account Enabled
The Guest account is a well-known default account in Active Directory that allows access to the domain without a password. By default, this account has limited privileges. However, it can be used to gain initial access to your network and subsequently used as a launchpad to perform reconnaissance and privilege escalation attacks.
Attackers typically use the Guest account to pull Active Directory information down to enumerate misconfigurations and understand the environment. It is often paired with accessing open shares, which can lead to further attacks. This essentially gives an attacker an authenticated position in your domain, without setting any credentials.
Recommendation
Disable the Guest account, verify it cannot authenticate, and monitor for future reactivation.
Prerequisites
- Domain Admin or Account Operators rights to disable accounts.
- Confirm no systems or services use the Guest account for access.
- Change control approval obtained.
Remediation Objective
- Disable the Guest account in Active Directory.
- Confirm the Guest account is also disabled locally on domain controllers and member servers where applicable.
- Implement monitoring to alert if the Guest account is re-enabled.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Import the Active Directory module.
Import-Module ActiveDirectory
# Disable the Guest account in Active Directory.
Disable-ADAccount -Identity "Guest"
# Confirm the account is disabled.
Get-ADUser -Identity "Guest" -Properties Enabled | Select Name, EnabledRemediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open Active Directory Users and ComputersLaunch
dsa.mscfrom an administrative workstation. - Locate the Guest accountNavigate to the Users container (CN=Users) and locate the Guest account.
- Disable the accountRight-click the Guest account and select Disable Account.
- Confirm the changeVerify the account icon shows a downward arrow indicating it is disabled.
Validation
- Confirm the Guest account is disabled: Get-ADUser -Identity Guest -Properties Enabled should return Enabled: False.
- Verify no authentication events for the Guest account appear in domain controller security logs.
- Run Insight Recon AD against the same scope to confirm the finding is resolved.
Exceptions
- Document the account dependency and business justification.
- Assign an owner and target remediation date.
- Apply compensating controls until remediation is complete.
Evidence
- Before-and-after account status export showing Guest account is disabled.
- Change ticket and approval record.
- Event log review confirming no Guest account authentication activity.
- Follow-up scan results showing finding resolved.
Additional Guidance
The Guest account should remain disabled unless there is an approved and time-bound business requirement. Monitor for reactivation and ensure any exception includes compensating controls as this account can provide an unnecessary foothold for unauthorized access.
Kerberos Armoring Not Enabled
Kerberos Armoring Not Enabled
Kerberos Armoring Not Enabled
Not enabling Kerberos armoring leaves the Kerberos authentication process vulnerable to pre-authentication attacks, such as AS-REP Roasting. Kerberos armoring enhances the security of the protocol by protecting the pre-authentication steps and ensures stronger protection during authentication.
Ransomware groups utilize this tactic to obtain an authenticated position within Active Directory, which then leads to more advanced attacks. It's often one of the first attacks carried out once access to the internal network is obtained.
Recommendation
Enable Kerberos Armoring where supported, validate client and service compatibility, and document any systems that require exception.
Prerequisites
- Locate any legacy clients or services that may not support Kerberos Armoring before enabling enforcement.
- Back up affected GPO before modification.
- Obtain change control approval.
- Test in a pilot OU before broad deployment if legacy systems are present.
Remediation Objective
- Enable Kerberos Armoring (FAST) to protect Kerberos pre-authentication exchanges from offline attacks.
- Prevent downgrade attacks against Kerberos by enforcing armored ticket exchanges between clients and domain controllers.
- Reduce the attack surface for credential harvesting techniques that target Kerberos AS-REQ traffic.
- Align domain authentication configuration with current Microsoft Kerberos security guidance.
Remediation Path 1: Command-Line
Not applicable. A command-line remediation is not the preferred remediation method for this finding because Kerberos armoring should be enabled through Group Policy so KDC and client compatibility settings are scoped, tested, and rolled back through standard policy management.
Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open Group Policy Management ConsoleLaunch
gpmc.mscfrom an administrative workstation. - Edit or create the relevant GPORight-click the GPO linked to the Domain Controllers OU and select Edit.
- Navigate to Kerberos Armoring settingsGo to Computer Configuration > Administrative Templates > System > KDC.
- Enable Kerberos ArmoringOpen 'KDC support for claims, compound authentication and Kerberos armoring' and set it to Enabled. Select 'Supported' to enable without enforcing for legacy compatibility, or 'Always provide claims and fail unarmored authentication requests' for full enforcement.
- Configure client-side policyIn the same GPO or a client-targeted GPO, navigate to Computer Configuration > Administrative Templates > System > Kerberos. Enable 'Kerberos client support for claims, compound authentication and Kerberos armoring' and set to Supported or Required.
- Apply and testUse the organization-approved policy refresh process on a test domain controller and client. Confirm Kerberos authentication is successful.
Validation
- Confirm the KDC Kerberos Armoring GPO setting is applied on domain controllers using gpresult /r.
- Verify Kerberos Armoring is active by reviewing Kerberos authentication events on domain controllers (Event ID 4768).
- Confirm no authentication failures are occurring on clients after GPO application.
- Run a follow-up scan to confirm the finding is resolved.
Exceptions
- Document the authentication dependency and business justification.
- Assign an owner and target remediation date.
- Apply compensating controls until remediation is complete.
Evidence
- GPO backup before and after modification.
- gpresult output confirming GPO application on domain controllers and test clients.
- Kerberos authentication event log review confirming no failures.
- Change ticket and approval record.
- Follow-up scan results confirming finding resolution.
Additional Guidance
Kerberos Armoring, also known as FAST (Flexible Authentication Secure Tunneling), wraps Kerberos pre-authentication exchanges in a secure tunnel, preventing offline cracking of AS-REQ traffic and protecting against certain downgrade attacks. It is a supported feature in Windows Server 2012 and later environments and should be enabled in any modern domain.
Kerberos Pre-Authentication In Use
Kerberos Pre-Authentication In Use
Kerberos Pre-Authentication In Use
Kerberos Pre-Authentication is a critical security mechanism that prevents attackers from easily obtaining Kerberos ticket-granting information. When Pre-Authentication is disabled, attackers can exploit vulnerabilities like AS-REP Roasting, allowing them to perform offline brute-force attacks on passwords, increasing the risk of unauthorized access. Ensuring that all accounts, especially administrative ones, have Pre-Authentication enabled is essential to maintaining secure access controls within Active Directory environments.
Ransomware groups frequently exploit Kerberos Pre-Authentication to obtain an authenticated position within Active Directory. It's often one of the first attacks executed once access to the internal network is obtained and leads to more advanced attacks.
Recommendation
Enable Kerberos pre-authentication on affected accounts, validate the account flag is cleared, and document any approved exceptions.
Prerequisites
- Domain Admin or Account Operators rights to modify account attributes.
- Review of affected accounts completed to locate any legacy application dependencies that require pre-authentication to remain disabled.
- Change control approval obtained.
- Service owner notification for any service accounts in scope.
Remediation Objective
- Enable Kerberos pre-authentication on all identified accounts where it has been disabled.
- Confirm no legitimate application dependency requires pre-authentication to remain disabled.
- Implement monitoring for AS-REP responses to detect ongoing exploitation attempts.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Import the Active Directory module.
Import-Module ActiveDirectory
# Enable Kerberos pre-authentication on a single account.
# Replace <SamAccountName> with the target account's SAM account name.
$Account = Get-ADUser -Identity "<SamAccountName>" -Properties UserAccountControl
# Remove the DONT_REQUIRE_PREAUTH flag (0x400000) from the account control value.
$NewUAC = $Account.UserAccountControl -band -bnot 0x400000
Set-ADUser -Identity "<SamAccountName>" -Replace @{UserAccountControl = $NewUAC}# Import the Active Directory module.
Import-Module ActiveDirectory
# Import a reviewed list of accounts to remediate.
# CSV must contain a column named SamAccountName.
$Accounts = Import-Csv -Path ".\ApprovedAccounts.csv"
# Enable Kerberos pre-authentication on each account in the approved input file.
foreach ($Account in $Accounts) {
$ADUser = Get-ADUser -Identity $Account.SamAccountName -Properties UserAccountControl
$NewUAC = $ADUser.UserAccountControl -band -bnot 0x400000
Set-ADUser -Identity $Account.SamAccountName -Replace @{UserAccountControl = $NewUAC} -WhatIf
Write-Output "Processed: $($Account.SamAccountName)"
}
# Remove -WhatIf after the change has been reviewed and approved.Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open Active Directory Users and ComputersLaunch
dsa.mscfrom an administrative workstation. - Locate the affected accountNavigate to the OU or container containing the account identified in the report.
- Open account propertiesDouble-click the account to open its properties.
- Navigate to the Account tabSelect the Account tab and review the Account options list.
- Clear the pre-authentication flagUncheck the option labeled Do not require Kerberos preauthentication.
- Save changesClick OK or Apply to save the change.
Validation
- Confirm the DONT_REQUIRE_PREAUTH flag is cleared using Get-ADUser -Properties UserAccountControl.
- Attempt an AS-REP request against the account to verify it is no longer roastable (the request should fail or require authentication).
- Review domain controller security event logs for Event ID 4768 to confirm normal Kerberos ticket issuance.
- Run Insight Recon AD against the same scope to confirm the finding is resolved.
Exceptions
- Document the authentication dependency and business justification.
- Assign an owner and target remediation date.
- Apply compensating controls until remediation is complete.
Evidence
- Before-and-after export of UserAccountControl values for affected accounts.
- Change ticket and approval record.
- PowerShell transcript of remediation commands.
- Validation output confirming pre-authentication is enabled.
Additional Guidance
Kerberos pre-authentication is a critical control that prevents offline password cracking of account credentials without any prior interaction from the account owner. Disabling it should be treated as an exceptional configuration reserved only for demonstrably necessary legacy application integrations, with compensating controls in place.
Organizations should implement proactive monitoring for AS-REP Roasting activity by alerting on large volumes of Event ID 4768 responses with no pre-authentication required. Any new account configuration that disables pre-authentication should trigger an automated review workflow requiring documented justification before the change is permitted.
LM Hash in Use
LM Hash in Use
LM Hash in Use
The LM hash (LAN Manager hash) is an outdated and insecure password hashing algorithm that is easily cracked to reveal clear-text passwords. If LM hashes are in use, attackers can exploit this weakness to gain unauthorized access to systems.
Weak hashing embolden attackers and often leverage these settings to move laterally within the environment.
Recommendation
Disable LM hash storage, force password changes where required, and validate that new LM hashes are no longer created.
Prerequisites
- Domain Admin rights to modify Group Policy.
- Review of legacy systems completed to locate any that require LM authentication.
- Change control approval obtained.
- User communication plan prepared if a forced password reset is required to purge stored LM hashes.
Remediation Objective
- Disable LM hash storage through Group Policy to prevent new LM hashes from being created.
- Force a password reset for accounts with existing LM hashes to purge them from the directory.
- Disable LM authentication protocol responses in addition to disabling hash storage.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Disable LM hash storage via Group Policy using PowerShell.
# This sets the NoLMHash registry value on the target system.
$RegistryPath = "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa"
Set-ItemProperty -Path $RegistryPath -Name "NoLMHash" -Value 1 -Type DWord
Write-Output "LM hash storage disabled on $env:COMPUTERNAME"# Audit systems for LM hash storage configuration via registry.
# CSV must contain a column named ServerName.
$Servers = Import-Csv -Path ".\ApprovedServers.csv"
foreach ($Server in $Servers) {
$Result = Invoke-Command -ComputerName $Server.ServerName -ScriptBlock {
$Path = "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa"
$Val = Get-ItemProperty -Path $Path -Name "NoLMHash" -ErrorAction SilentlyContinue
if ($Val) { return $Val.NoLMHash } else { return "Not configured (LM hashing may be enabled)" }
}
Write-Output "$($Server.ServerName): NoLMHash = $Result"
}Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open Group Policy Management ConsoleLaunch
gpmc.mscfrom an administrative workstation. - Edit the Default Domain Policy or a baseline security GPORight-click the appropriate GPO and select Edit.
- Navigate to the LM hash settingGo to Computer Configuration > Windows Settings > Security Settings > Local Policies > Security Options.
- Disable LM hash storageLocate the policy Network security: Do not store LAN Manager hash value on next password change. Double-click and set it to Enabled.
- Apply the policyClose the editor. After normal Group Policy refresh occurs on test systems, confirm the policy applies correctly. Force a password reset for accounts with existing LM hashes to purge them.
Validation
- Confirm the NoLMHash registry value is set to 1 on domain controllers and member servers.
- Verify LM hash values are no longer present after accounts complete a password reset.
- Run Insight Recon AD against the same scope to confirm the finding is resolved.
Exceptions
- Document the authentication dependency and business justification.
- Assign an owner and target remediation date.
- Apply compensating controls until remediation is complete.
Evidence
- GPO backup showing NoLMHash policy enabled.
- Registry confirmation output from domain controllers.
- Change ticket and approval record.
- Follow-up scan results confirming no LM hashes present after password resets.
- Follow-up scan results showing finding resolved.
Additional Guidance
LM hashing uses a fundamentally broken algorithm that splits the password into two 7-character halves and hashes each independently. This design means an LM hash for a 14-character password is no harder to crack than one for a 7-character password. Any environment storing LM hashes should treat all affected account passwords as potentially compromised.
Disabling LM hash storage alone is not sufficient to remediate the risk if existing LM hashes are stored in the database. Organizations must force a password reset for all affected accounts after the policy is applied to purge the stored hashes. Disabling NTLMv1 authentication should be pursued in parallel, as NTLMv1 can use LM hashes for authentication.
Non-Expiring Passwords in Domain Admins Group
Non-Expiring Passwords in Domain Admins Group
Non-Expiring Passwords in Domain Admins Group
Non-expiring passwords in the Domain Admins group pose a risk, as these static credentials can be easily targeted by attackers with credential-based attacks. Passwords that are not rotated for long periods of time increase the likelihood for compromise and persistence.
Once attackers obtain password hashes, they use password lists and rulesets to crack them. Non-expiring passwords are especially risky, as modern graphics cards provide the computational power to crack hashes more easily.
Recommendation
Remove non-expiring password settings from Domain Admin accounts, rotate affected credentials, and document any approved break-glass exception.
Prerequisites
- Domain Admin rights to modify account attributes.
- All affected Domain Admins notified in advance.
- Service accounts in Domain Admins group (if any) coordinated with service owners.
- PAM solution enrollment prepared as a preferred alternative.
- Change control approval obtained.
Remediation Objective
- Enable password expiration for all Domain Admin accounts with the Password Never Expires flag set.
- Enroll Domain Admin accounts in a PAM solution or enforce a rotation schedule of 90 days or less.
- Coordinate with all affected administrators to ensure they are aware of and prepared for the upcoming expiration.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Import the Active Directory module.
Import-Module ActiveDirectory
# Enable password expiration on a Domain Admin account.
# Replace <SamAccountName> with the target admin account.
Set-ADUser -Identity "<SamAccountName>" -PasswordNeverExpires $false# Import the Active Directory module.
Import-Module ActiveDirectory
# Get all Domain Admins with non-expiring passwords.
$DomainAdmins = Get-ADGroupMember -Identity "Domain Admins" -Recursive |
Get-ADUser -Properties PasswordNeverExpires |
Where-Object { $_.PasswordNeverExpires -eq $true }
# Display the accounts identified.
$DomainAdmins | Select SamAccountName, PasswordNeverExpires
# Apply the change from an approved CSV.
# CSV must contain a column named SamAccountName.
$Accounts = Import-Csv -Path ".\ApprovedDomainAdmins.csv"
foreach ($Account in $Accounts) {
Set-ADUser -Identity $Account.SamAccountName -PasswordNeverExpires $false -WhatIf
Write-Output "Processed: $($Account.SamAccountName)"
}
# Remove -WhatIf after reviewing.Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open Active Directory Users and ComputersLaunch
dsa.mscfrom an administrative workstation. - Navigate to the Domain Admins groupLocate and open the Domain Admins group. Review the Members tab and locate accounts with non-expiring passwords.
- Update each accountOpen each account's properties, navigate to the Account tab, and uncheck Password never expires.
- Communicate to affected administratorsNotify each administrator of the change and the upcoming password expiration timeline.
Validation
- Confirm PasswordNeverExpires is False for all Domain Admin accounts: Get-ADGroupMember -Identity 'Domain Admins' | Get-ADUser -Properties PasswordNeverExpires.
- Verify administrators can authenticate and that no service disruptions occurred.
- Run Insight Recon AD against the same scope to confirm the finding is resolved.
Exceptions
- Document the privileged access dependency and justification.
- Assign an owner and target remediation date.
- Apply compensating controls and track risk acceptance.
Evidence
- Before-and-after PasswordNeverExpires attribute export for all Domain Admin accounts.
- Administrator notification records.
- Change ticket and approval record.
- Follow-up scan results showing finding resolved.
Additional Guidance
Enforce password expiration policies for all accounts in the Domain Admins group to ensure regular password updates and reduce the risk of long-term compromise. Review service accounts with non-expiring passwords, and where possible, replace them with managed service accounts (MSAs) or third-party applications such as Privileged Access Management (PAM) toolsets.
NTLMv1 or LM is Permitted
NTLMv1 or LM is Permitted
NTLMv1 or LM is Permitted
Allowing NTLMv1 or LM authentication on domain controllers poses a significant security risk, as these outdated protocols are vulnerable to cryptographic attacks. Attackers can capture and exploit NTLMv1 hashes to impersonate users and gain unauthorized access to critical systems, potentially compromising the entire domain through attacks like coerced authentication.
Using outdated protocols like NTLMv1 or LM authentication increases the risk of attacks, such as network poisoning, where attackers can capture hashes or force authentications from sensitive assets like domain controllers. These attacks can easily occur from an unauthenticated position within the domain.
Recommendation
Configure LAN Manager authentication to refuse LM and NTLMv1, validate client compatibility, and monitor for legacy authentication failures.
Prerequisites
- Domain Admin or Group Policy rights to configure GPOs.
- Inventory of systems and applications using NTLMv1 or LM authentication completed.
- Change control approval obtained.
- Testing performed in a non-production environment or limited pilot scope before domain-wide enforcement.
Remediation Objective
- Configure the Network security: LAN Manager authentication level GPO policy to Send NTLMv2 response only and refuse LM and NTLM.
- Deploy the policy change in phases, monitoring for authentication failures before enforcing broadly.
- Remediate or isolate legacy systems that cannot support NTLMv2.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Set the NTLM authentication level via registry on a single system.
# This is an alternative to GPO for standalone systems.
$RegistryPath = "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa"
Set-ItemProperty -Path $RegistryPath -Name "LmCompatibilityLevel" -Value 5 -Type DWord
# LmCompatibilityLevel values:
# 0 = Send LM and NTLM
# 1 = Send LM and NTLMv2
# 2 = Send NTLM only
# 3 = Send NTLMv2 only
# 4 = Send NTLMv2, refuse LM
# 5 = Send NTLMv2, refuse LM and NTLM (most secure)
Write-Output "NTLM level set to 5 on $env:COMPUTERNAME"Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open Group Policy Management ConsoleLaunch
gpmc.mscfrom an administrative workstation. - Create or edit a GPO linked to the domain or Domain Controllers OURight-click the appropriate location and edit or create a GPO.
- Navigate to the NTLM authentication level settingGo to Computer Configuration > Windows Settings > Security Settings > Local Policies > Security Options.
- Configure the NTLM levelLocate Network security: LAN Manager authentication level. Double-click and set the value to Send NTLMv2 response only. Refuse LM and NTLM.
- Deploy in phasesApply the GPO to a test OU first, monitor for authentication failures, and then extend the scope to the domain after validating compatibility.
Validation
- Confirm the LmCompatibilityLevel registry value is 5 on domain controllers.
- Monitor Event ID 4624 and 4625 for authentication failures after the policy is applied.
- Verify no legacy systems or applications are experiencing authentication failures.
- Run Insight Recon AD against the same scope to confirm the finding is resolved.
Exceptions
- Document the authentication dependency and business justification.
- Assign an owner and target remediation date.
- Apply compensating controls until remediation is complete.
Evidence
- Before-and-after LmCompatibilityLevel registry export from domain controllers.
- GPO backup showing the authentication level policy.
- Authentication event monitoring results confirming no unexpected failures.
- Change ticket and approval record.
Additional Guidance
NTLMv1 and LM authentication protocols are vulnerable to capture-and-relay attacks and offline cracking. An attacker who can intercept NTLMv1 authentication can use it to authenticate to other systems without cracking the password. Modern environments should operate exclusively on NTLMv2 at minimum, with Kerberos as the preferred protocol for all internal authentication.
Organizations should assess their broader NTLM usage and work toward reducing reliance on NTLM authentication entirely where Kerberos is available. Network monitoring should be configured to detect NTLMv1 authentication events and alert when they are observed, as this may indicate legacy systems or active downgrade attacks.
Privileged Users with Stale Passwords
Privileged Users with Stale Passwords
Privileged Users with Stale Passwords
Stale administrative passwords provide attackers with additional opportunities to perform credential-based attacks and if compromised, can prolong system access.
Organizations that properly tier and enforce best practices around privileged accounts typically take significantly more time to compromise. This forces the attacker to rely on other attack avenues such as network poisoning or social engineering.
Recommendation
Reset stale privileged account passwords, enforce appropriate rotation or lifecycle controls, and validate updated password timestamps.
Prerequisites
- Domain Admin or Password Reset rights for privileged accounts in scope.
- Notification sent to affected privileged users prior to password reset.
- Service owner identification and sign-off for any service accounts in scope.
- Change control approval obtained.
- PAM solution enrollment prepared if available.
Remediation Objective
- Reset passwords on all privileged accounts with stale credentials.
- Enforce a password rotation policy for privileged accounts, or enroll accounts in a PAM solution for automated credential management.
- Confirm dependent services are updated with new credentials where applicable.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Import the Active Directory module.
Import-Module ActiveDirectory
# Reset the password on a privileged user account.
# Replace <SamAccountName> with the target privileged account.
Set-ADAccountPassword -Identity "<SamAccountName>" -Reset -NewPassword (Read-Host -AsSecureString "Enter new password") -PassThru# Import the Active Directory module.
Import-Module ActiveDirectory
# Import a reviewed list of privileged accounts with stale passwords.
# CSV must contain a column named SamAccountName.
$Accounts = Import-Csv -Path ".\ApprovedPrivilegedAccounts.csv"
foreach ($Account in $Accounts) {
Set-ADAccountPassword -Identity $Account.SamAccountName -Reset `
-NewPassword (Read-Host -AsSecureString "New password for $($Account.SamAccountName)") -WhatIf
Write-Output "Processed: $($Account.SamAccountName)"
}
# Remove -WhatIf after reviewing.
# Get each new password to the account's owner securely.Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open Active Directory Users and ComputersLaunch
dsa.mscfrom an administrative workstation. - Locate the affected privileged accountNavigate to the OU containing the privileged account identified in the report.
- Reset the passwordRight-click the account and select Reset Password. Enter a strong password meeting complexity requirements. Uncheck User must change password at next logon for service accounts; check it for human user accounts where appropriate.
- Notify the account ownerContact the account owner through a secure channel to provide the new password or initiate a self-service reset flow.
- Update dependent servicesFor service accounts, update the service logon credentials on all dependent systems and restart the services as needed.
Validation
- Confirm the PasswordLastSet attribute has been updated for affected accounts.
- Verify that any dependent services are running and authenticating successfully.
- Confirm the account owner has successfully authenticated with the new credential.
- Run Insight Recon AD against the same scope to confirm the finding is resolved.
Exceptions
- Document the privileged access dependency and justification.
- Assign an owner and target remediation date.
- Apply compensating controls and track risk acceptance.
Evidence
- Before-and-after PasswordLastSet attribute export for affected accounts.
- Service health validation results.
- Change ticket and approval record.
- Follow-up scan results showing finding resolved.
Additional Guidance
Stale privileged passwords increase the value of old credential material and should be addressed through a privileged account lifecycle process. Use PAM, strong rotation standards, and periodic review to ensure administrative accounts do not retain long-lived secrets.
Resource-Based Constrained Delegation Configured
Resource-Based Constrained Delegation Configured
Resource-Based Constrained Delegation Configured
Resource-based constrained delegation allows designated principals to obtain Kerberos service tickets to an account on behalf of other users via the msDS-AllowedToActOnBehalfOfOtherIdentity attribute. An attacker who controls a listed principal, or who can write this attribute, can impersonate privileged users to the account and take it over. RBCD configured on a domain controller or the krbtgt account is equivalent to full domain compromise.
RBCD is a common lateral-movement and privilege-escalation technique. An attacker who can add a computer account or control any account with an SPN will often set that account in the target's msDS-AllowedToActOnBehalfOfOtherIdentity and then use S4U2self followed by S4U2proxy to request a ticket as any user, including a Domain Admin. Rubeus and Impacket automate this end to end. Because RBCD is a single writable attribute rather than a userAccountControl flag, it's easily overlooked by defenders.
Recommendation
Clear resource-based constrained delegation where it is not required and restrict it to specific trusted service accounts.
Prerequisites
- Domain Admin, or delegated write rights on the affected objects.
- Confirm the resource-based constrained delegation is not required by a supported application or service.
- Obtain change control approval.
Remediation Objective
- Clear the msDS-AllowedToActOnBehalfOfOtherIdentity attribute on accounts where RBCD is not required.
- Where RBCD is required, restrict it to a single trusted service account.
- Remove any RBCD configured on domain controllers or the krbtgt account, which should never carry it.
- Reduce MachineAccountQuota to zero to limit abuse of this primitive.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Import the Active Directory module.
Import-Module ActiveDirectory
# Clear resource-based constrained delegation from a single account.
# Replace <SamAccountName> with the target (computer accounts end with $).
Set-ADComputer -Identity "<SamAccountName>" -Clear "msDS-AllowedToActOnBehalfOfOtherIdentity"# Import the required module for the remediation.
Import-Module ActiveDirectory
# Import a reviewed and approved list of affected objects to remediate.
$Items = Import-Csv -Path ".\ApprovedObjects.csv"
# Update only the objects included in the approved input file.
foreach ($Item in $Items) {
# Replace the placeholder with the approved single-object command for Resource-Based Constrained Delegation.
# Use -WhatIf when supported before applying the change.
<Approved-Remediation-Command> -Identity $Item.SamAccountName -WhatIf
}Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open Active Directory Users and ComputersLaunch Active Directory Users and Computers from an administrative workstation and enable Advanced Features from the View menu.
- Locate the affected accountNavigate to the computer or user account identified in the report.
- Open the Attribute EditorRight-click the account, select Properties, and open the Attribute Editor tab.
- Clear the delegation attributeSelect msDS-AllowedToActOnBehalfOfOtherIdentity, click Clear, then click OK.
- Repeat for each objectRepeat the same process for every approved account listed in the remediation plan.
Validation
- Confirm the attribute is empty: Get-ADComputer <name> -Properties msDS-AllowedToActOnBehalfOfOtherIdentity
- Verify dependent services and applications still authenticate.
- Run a follow-up scan to confirm the finding is resolved.
Exceptions
- If RBCD is required, restrict it to a single trusted service account and document the dependency.
- Record the owner and target date for any temporary delay.
- Track formal risk acceptance until remediation is complete.
Evidence
- List of accounts with RBCD configured before remediation.
- PowerShell output confirming the attribute is cleared.
- Follow-up scan results confirming finding resolution.
Additional Guidance
Treat write access to msDS-AllowedToActOnBehalfOfOtherIdentity on a sensitive object as equivalent to control of that object. Reduce MachineAccountQuota to zero, monitor changes to this attribute on domain controllers and privileged accounts, and add those accounts to the Protected Users group to block the delegation that makes these tickets useful.
Stale krbtgt Account Password
Stale krbtgt Account Password
Stale krbtgt Account Password
The krbtgt account is a crucial component in the Kerberos authentication system in Active Directory, as its password is used to sign Kerberos tickets. A stale krbtgt password increases the risk of a “Golden Ticket” attack, where attackers can forge valid Kerberos tickets, granting unauthorized access to any resource in the domain.
Attackers will remotely dump domain controllers upon achieving domain administrator level access with toolsets like Impacket’s secretsdump.py. The krbtgt account is one of the most powerful accounts within Active Directory, and is one of the first hashes to be dumped. Attackers will then use this password hash to perform Golden Ticket attacks. It is particularly valuable for persistence, allowing attackers to stay in your environment even after remediation has occurred.
Recommendation
Rotate the krbtgt password using a controlled two-reset process and confirm domain controller replication.
Prerequisites
- Domain Admin or equivalent rights to reset the krbtgt account password.
- Confirm all writable domain controllers are healthy and replicating successfully.
- Download and review Microsoft’s published krbtgt reset script before execution.
- Obtain change approval and schedule a maintenance window for the reset.
Remediation Objective
- Rotate the krbtgt account password in a controlled manner to reduce Golden Ticket risk.
- Use the Microsoft-published script to validate domain controller reachability and replication.
- Perform two resets with the required wait period between resets to clear old keys from password history.
- Monitor authentication and replication health after each reset.
Remediation Path 1: Command-Line
Microsoft and the security community recommend using either New-KrbtgtKeys.ps1 or Reset-KrbTgt-Password-For-RWDCs-And-RODCs.ps1. Both scripts include health checks, simulation modes, replication monitoring, and RODC account handling.
Script repositories: https://github.com/microsoftarchive/New-KrbtgtKeys.ps1, https://github.com/zjorz/Public-AD-Scripts/blob/master/Reset-KrbTgt-Password-For-RWDCs-And-RODCs.ps1
# Instructions for New-KrbtgtKeys.ps1
# Review the script, test the informational/simulation modes, and run from an approved admin workstation.
# Example workflow:
# 1. Run informational mode to review writable domain controllers and krbtgt status.
# 2. Run simulation mode to validate replication before making changes.
# 3. Run the production reset mode for the first krbtgt reset.
# 4. Wait longer than the domain Kerberos ticket lifetime, then repeat production reset mode.
# 5. Save the script transcript and validate replication after each reset.
.\New-KrbtgtKeys.ps1Remediation Path 2: GUI
The scripted remediation path is preferred as it provides checks, features, and controls that make this change safer for most environments.
- Open Active Directory Users and ComputersOn an administrative workstation or writable domain controller, open Active Directory Users and Computers.
- Enable Advanced FeaturesSelect View, then select Advanced Features so the krbtgt account is visible and manageable.
- Locate the krbtgt accountExpand the domain container, select Users, and locate the krbtgt user account. Do not reset any RODC-specific krbtgt_number account unless separately instructed as part of an RODC recovery process.
- Reset the krbtgt passwordRight-click the krbtgt account and select Reset Password. Enter and confirm a new password, then click OK. The specific password entered is not significant because Windows generates the actual strong password value automatically.
- Allow ticket lifetime and replication delayWait at least 10 hours before performing the second reset, or longer if the domain uses a longer maximum lifetime for user or service tickets. Confirm replication health before proceeding.
- Reset the password a second timeRepeat the password reset on the krbtgt account after the waiting period. The second reset clears older krbtgt password material from history and helps invalidate previously issued Kerberos tickets.
- Monitor authenticationAfter each reset, monitor domain controller replication, Kerberos authentication, and service authentication for errors before closing the change.
Validation
- Confirm the script reports successful replication to all writable domain controllers.
- Review the krbtgt PasswordLastSet value after each reset.
- Run repadmin /replsummary and confirm replication is healthy.
- Review domain controller security event logs for Event IDs 4724 and 4738 to confirm both resets.
- Monitor domain controller and authentication logs for Kerberos or service failures.
- Run Insight Recon AD against the same scope to confirm the finding is resolved.
Exceptions
- There are no broadly accepted exceptions for this control that justifies indefinite deferral.
- Document the business reason for delaying krbtgt rotation.
- Assign an owner and target remediation date.
- Increase monitoring for Golden Ticket indicators until rotation is complete.
- Require formal risk acceptance for any extended deferral.
Evidence
- Script transcript or log showing informational, simulation, and reset execution.
- repadmin /replsummary output before and after each reset.
- krbtgt PasswordLastSet evidence captured after both resets.
- Change ticket, approval record, and maintenance window documentation.
- Follow-up scan results showing the finding resolved.
Additional Guidance
The krbtgt account is the foundation of Kerberos authentication in Active Directory. Its password hash is used to sign every Kerberos ticket issued in the domain, and its compromise enables a Golden Ticket attack that grants persistent, domain-wide administrative access. A forged ticket created from a compromised krbtgt hash remains valid until the password has been rotated twice, because the domain retains the two most recent password versions in its history. A single reset is not sufficient for full remediation.
Organizations should establish a formal rotation schedule at a cadence of at least every 180 days, and immediately following any domain controller compromise, privileged account compromise, or security incident in which domain credential exposure is possible. Routine rotations should be treated as planned maintenance events: confirm replication health, allow full convergence between resets, and notify the service desk.
User Accounts with DES Enabled
User Accounts with DES Enabled
User Accounts with DES Enabled
DES is an outdated and weak encryption algorithm that is easily cracked, due to its weak 56-bit key length. Attackers can exploit this weakness by cracking Kerberos tickets encrypted with DES, allowing them to steal user credentials and escalate privileges within the domain.
DES-enabled accounts are easily detected with hacker toolsets and once observed, typically result in a successful password crack.
Recommendation
Disable DES encryption on affected user accounts, confirm compatible Kerberos encryption settings, and validate authentication after the change.
Prerequisites
- Domain Admin or Account Operators rights to modify account attributes.
- Review of affected accounts completed to locate any legacy Kerberos application dependencies.
- Change control approval obtained.
Remediation Objective
- Disable DES encryption on all identified user accounts by clearing the Use DES encryption types for this account flag.
- Confirm accounts are configured to use AES or stronger encryption algorithms.
- Verify dependent services continue to function after the change.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Import the Active Directory module.
Import-Module ActiveDirectory
# Disable DES encryption on a single user account.
# Replace <SamAccountName> with the target account.
Set-ADUser -Identity "<SamAccountName>" -KerberosEncryptionType "RC4", "AES128", "AES256"
# Alternatively, clear the USE_DES_KEY_ONLY flag from UserAccountControl.
$Account = Get-ADUser -Identity "<SamAccountName>" -Properties UserAccountControl
$NewUAC = $Account.UserAccountControl -band -bnot 0x200000
Set-ADUser -Identity "<SamAccountName>" -Replace @{UserAccountControl = $NewUAC}# Import the Active Directory module.
Import-Module ActiveDirectory
# Import a reviewed list of accounts to remediate.
# CSV must contain a column named SamAccountName.
$Accounts = Import-Csv -Path ".\ApprovedAccounts.csv"
foreach ($Account in $Accounts) {
Set-ADUser -Identity $Account.SamAccountName -KerberosEncryptionType "RC4", "AES128", "AES256" -WhatIf
Write-Output "Processed: $($Account.SamAccountName)"
}
# Remove -WhatIf after reviewing.Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open Active Directory Users and ComputersLaunch
dsa.mscfrom an administrative workstation. - Locate the affected accountNavigate to the OU or container containing the account identified in the report.
- Open account propertiesDouble-click the account and navigate to the Account tab.
- Locate the DES optionIn the Account options list, uncheck the option Use DES encryption types for this account.
- Save changesClick OK or Apply.
Validation
- Confirm the USE_DES_KEY_ONLY flag is cleared: Get-ADUser -Properties UserAccountControl and verify bit 0x200000 is not set.
- Verify the account can authenticate successfully using Kerberos.
- Run Insight Recon AD against the same scope to confirm the finding is resolved.
Exceptions
- Document the authentication dependency and business justification.
- Assign an owner and target remediation date.
- Apply compensating controls until remediation is complete.
Evidence
- Before-and-after export of UserAccountControl and KerberosEncryptionType attributes.
- Change ticket and approval record.
- PowerShell transcript of remediation commands.
- Follow-up scan results showing finding resolved.
Additional Guidance
DES is a 56-bit symmetric encryption algorithm that is no longer considered secure for any purpose. Kerberos implementations using DES are vulnerable to practical brute-force attacks with modern hardware.
Directory Services Issues
13 findings
Accidental Deletion Protection Not On OUs
Accidental Deletion Protection Not On OUs
Accidental Deletion Protection Not On OUs
Organizational Units (OUs) in Active Directory that lack accidental deletion protection are vulnerable to unintentional deletion. This could lead to significant disruptions and data loss, as the deleting OUs can remove key objects and resources in the domain. Accidental deletion protection is a safeguard that prevents the deletion of OUs unless this protection is intentionally removed.
After compromising an organization and achieving their objectives, attackers may attempt to cover their tracks or cause disruption by deleting critical OUs. If they have gained Schema Admin-level access, the damage can be even more severe, as they often delete backups and render the OUs and schema inoperable.
Recommendation
Enable accidental deletion protection on organizational units and validate critical OU objects cannot be deleted without explicit protection removal.
Prerequisites
- Domain Administrator credentials required.
- Locate all OUs that do not currently have accidental deletion protection enabled.
- Obtain change control approval (low risk; typically included in routine hygiene work).
Remediation Objective
- Enable the 'Protect object from accidental deletion' setting on all Active Directory Organizational Units.
- Prevent inadvertent deletion of OUs that would cascade to all objects contained within them.
- Ensure OU structure integrity by requiring an explicit additional step before deletion is permitted.
- Apply consistent protection across all OUs in the domain.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Import the Active Directory module.
Import-Module ActiveDirectory
# Enable accidental deletion protection on a single OU.
# Replace <OUDN> with the DistinguishedName of the target OU.
Set-ADObject -Identity "<OUDN>" -ProtectedFromAccidentalDeletion $true# Import the required module for the remediation.
Import-Module ActiveDirectory
# Import a reviewed and approved list of affected objects to remediate.
$Items = Import-Csv -Path ".\ApprovedObjects.csv"
# Update only the objects included in the approved input file.
foreach ($Item in $Items) {
# Replace the placeholder command with the approved single-object remediation command for Accidental Deletion Protection Not On OU's.
# Use -WhatIf when supported before applying the change.
<Approved-Remediation-Command> -Identity $Item.DistinguishedName -WhatIf
}Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open Active Directory Users and ComputersLaunch Active Directory Users and Computers from an administrative workstation and enable Advanced Features from the View menu.
- Locate the affected OUNavigate to the OU identified in the report.
- Open OU propertiesRight-click the OU and select Properties.
- Enable deletion protectionSelect the Object tab and check Protect object from accidental deletion.
- Save the changeClick OK and repeat the same GUI process for each approved OU listed in the remediation plan.
Validation
- Confirm protection is enabled on all OUs: Get-ADOrganizationalUnit -Filter * | Select-Object Name, ProtectedFromAccidentalDeletion
- Run a follow-up scan to confirm the finding is resolved.
Exceptions
- Do not approve permanent exceptions for this condition.
- Document any temporary delay with owner and target date.
- Track formal risk acceptance until remediation is complete.
Evidence
- List of OUs without protection before remediation.
- PowerShell output confirming all OUs are protected.
- Follow-up scan results confirming finding resolution.
Additional Guidance
Accidental deletion protection should be enabled on important OUs to reduce the risk of disruptive administrative mistakes. Pair the setting with change control and periodic OU reviews so protection does not interfere with planned lifecycle management.
| Object | Type |
|---|---|
| TestComputers | Organizational unit |
| New-Computers | Organizational unit |
AES Not Enabled on Trust
AES Not Enabled on Trust
AES Not Enabled on Trust
If AES is not enabled on a trust, Kerberos tickets will default to the weaker RC4 encryption or fail, potentially falling back to NTLM, which is less secure. Ensuring that Kerberos authentication between trusted domains is using AES encryption for trust relationships provides more secure authentication.
An attacker could exploit AES-enabled trusts by attempting to crack or abuse the encryption keys used for trust relationships, potentially gaining access to encrypted authentication data. With this access, the attacker would typically attempt to impersonate trusted users or services across domains, enabling lateral movement within the organization.
Recommendation
Enable AES support on trust relationships, validate authentication compatibility, and rotate trust secrets where appropriate.
Prerequisites
- Domain Administrator credentials required in both the local and trusted domain.
- Confirm both domain controllers on either side of the trust are running Windows Server 2008 or later (required for AES trust support).
- Coordinate with the administrator of the trusted domain before making changes.
- Obtain change control approval.
Remediation Objective
- Enable AES encryption support on Active Directory trust relationships.
- Allow Kerberos to negotiate AES-encrypted tickets across the trust boundary.
- Reduce reliance on RC4 for cross-domain Kerberos ticket encryption.
- Align trust encryption configuration with current Microsoft security guidance.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Import the Active Directory module.
Import-Module ActiveDirectory
# Enable AES encryption on a trust.
# Replace <TrustedDomainName> with the DNS name of the trusted domain.
$Trust = Get-ADTrust -Filter { Target -eq "<TrustedDomainName>" }
Set-ADObject -Identity $Trust.DistinguishedName `
-Replace @{ "msDS-SupportedEncryptionTypes" = 28 }
# Value 28 = AES128 (8) + AES256 (16) + RC4 (4) for compatibility.
# To enforce AES only (value 24), confirm no legacy clients are using the trust.# Import the required module for the remediation.
Import-Module ActiveDirectory
# Import a reviewed and approved list of affected objects to remediate.
$Items = Import-Csv -Path ".\ApprovedObjects.csv"
# Update only the objects included in the approved input file.
foreach ($Item in $Items) {
# Replace the placeholder command with the approved single-object remediation command for AES Not Enabled on Trust.
# Use -WhatIf when supported before applying the change.
<Approved-Remediation-Command> -Identity $Item.DistinguishedName -WhatIf
}Remediation Path 2: GUI
Not applicable. A GUI-only remediation path is not the preferred method for this finding because updating the trust encryption attribute requires Active Directory trust attribute modification that is normally performed through PowerShell or command-line administration. The available GUI tools do not provide a complete, low-risk remediation workflow for this setting.
Validation
- Confirm the trust attribute has been updated: Get-ADTrust -Filter { Target -eq '<TrustedDomainName>' } | Select-Object msDS-SupportedEncryptionTypes
- Verify cross-domain Kerberos authentication is functioning normally.
- Use klist.exe on a client to confirm AES tickets are being issued for cross-domain authentication.
- Run a follow-up scan to confirm the finding is resolved.
Exceptions
- Document the trust dependency and business justification.
- Assign owners for each domain and a target remediation date.
- Apply compensating controls and track risk acceptance.
Evidence
- Export of trust configuration before changes.
- Change ticket and approval record.
- PowerShell output confirming msDS-SupportedEncryptionTypes value.
- klist output confirming AES ticket issuance for cross-domain authentication.
Additional Guidance
AD trusts that do not support AES encryption negotiate Kerberos tickets using RC4, which is a weaker algorithm subject to offline cracking. Enabling AES on the trust allows the domain controllers on both sides to negotiate stronger encryption for cross-domain Kerberos exchanges, reducing the risk of ticket interception and cracking. Both sides of the trust must be updated for AES negotiation to succeed.
| Object | Type |
|---|---|
| guiginosrestaurant.local | Trust |
Default OU Location Modified
Default OU Location Modified
Default OU Location Modified
The modification of the default OU location in Active Directory occurs when default organizational units (OUs) like CN=Computers or CN=Users are changed, potentially causing unexpected behavior in scripts, tooling, security audits, or policies that rely on these standard locations. This change can disrupt automated processes and pose a security risk if not properly controlled or documented.
When attackers identify modified default OUs, they focus on these accounts because they are often less secure than others within the domain.
Recommendation
Review and reset default user or computer containers to approved OUs with appropriate policies, monitoring, and ownership.
Prerequisites
- Domain Administrator credentials required.
- Locate the current default OU setting for new computers and users.
- Confirm with the directory services team what the correct target OU should be for new objects.
- Obtain change control approval.
Remediation Objective
- Reset the default container for new computer and user accounts to an appropriate, monitored OU.
- Prevent new accounts from landing in the CN=Computers or CN=Users default containers, which typically lack GPO coverage and security controls.
- Ensure all newly created accounts are subject to the appropriate Group Policy and monitoring from creation.
- Reduce the risk of ungoverned accounts being created outside of the normal OU structure.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Run from an elevated command prompt on an administrative workstation.
# Redirect the default computer account location.
# Replace <ComputersOUDistinguishedName> with the approved OU distinguished name.
redircmp "<ComputersOUDistinguishedName>"
# Redirect the default user account location.
# Replace <UsersOUDistinguishedName> with the approved OU distinguished name.
redirusr "<UsersOUDistinguishedName>"Remediation Path 2: GUI
Not applicable. A GUI-only remediation path is not the preferred method for this finding because changing the default user or computer creation container requires the redirusr or redircmp command-line utilities. Active Directory Users and Computers can move objects after creation, but it does not provide a GUI-only method to change the default container.
Validation
- Confirm default computer OU: (Get-ADDomain).ComputersContainer
- Confirm default user OU: (Get-ADDomain).UsersContainer
- Create a test account without specifying an OU and confirm placement in the target OU.
- Run a follow-up scan to confirm the finding is resolved.
Exceptions
- Do not approve permanent exceptions for this condition.
- Document any temporary delay with owner and target date.
- Track formal risk acceptance until remediation is complete.
Evidence
- Current default OU values before changes.
- Change ticket and approval record.
- Post-change Get-ADDomain output confirming new default OU values.
- Test account placement confirmation.
Additional Guidance
Modified default object locations should be documented and reflected in provisioning, security, and monitoring processes. Ensure the target OUs receive the expected policies and permissions so newly created users or computers are not missed by controls.
| Object | Type | Details |
|---|---|---|
| New-Computers | Organizational unit | Expected CN=Computers,DC=paddyspub,DC=local |
Domain Controller with Stale Update
Domain Controller with Stale Update
Domain Controller with Stale Update
A Domain Controller with a stale update indicates that the system has not been patched or rebooted in an extended period, leaving it vulnerable to known exploits and threats. Regular updates are crucial for securing Active Directory environments, as attackers can exploit unpatched vulnerabilities to gain unauthorized access or escalate privileges.
Attackers monitor the latest vulnerabilities and exploits, often checking system uptime to identify assets that may be vulnerable to recent disclosures. If domain controllers aren't updated, it signals poor patch management to attackers, encouraging them to strike more quickly.
Recommendation
Apply missing security updates to affected domain controllers, validate patch status, and confirm normal replication and authentication after maintenance.
Prerequisites
- Domain Admin or local administrator rights on the domain controller.
- Verify domain controller redundancy is in place before scheduling reboot.
- Change control approval and maintenance window scheduled.
- Notify affected users or service teams of the planned maintenance window.
- Confirm replication health before and after the update cycle.
Remediation Objective
- Apply all pending operating system updates to the affected domain controllers.
- Reboot domain controllers as required to complete patch installation.
- Verify replication health and domain controller functionality after each reboot.
- Implement a patch management schedule to ensure domain controllers are updated within 30 days of patch release.
Remediation Path 1: Command-Line
Not applicable. A command-line remediation is not the preferred remediation method for this finding because domain controller patching should be performed through the approved patch management platform, Windows Update workflow, or maintenance process rather than an ad hoc command. Command-line tools may be used for post-change health checks, but they are not the primary remediation path.
Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open Server ManagerLog in to the domain controller and open Server Manager.
- Navigate to Local ServerClick Local Server in the left pane and locate the Windows Update section.
- Check for updatesClick the Windows Update status link to open Windows Update settings. Click Check for updates.
- Install all available updatesClick Install now to apply all pending updates.
- Schedule a restartIf a restart is required, schedule it during the approved maintenance window. Confirm with the change control team before proceeding.
- Verify post-restart functionalityAfter the restart, confirm domain controller services are running and use the approved validation process to confirm replication health.
Validation
- Confirm the domain controller is no longer showing as stale by verifying the last update/reboot date.
- Run repadmin /replsummary to confirm replication is healthy after the restart.
- Verify domain controller services (NTDS, DNS, Kerberos) are running using Get-Service or the Services console.
- Run Insight Recon AD against the same scope to confirm the finding is resolved.
Exceptions
- Document the dependency and business justification.
- Assign a server owner and target remediation date.
- Apply compensating controls and track risk acceptance.
Evidence
- Windows Update history export confirming updates were applied.
- Reboot timestamp documentation.
- repadmin /replsummary output before and after.
- Change ticket and approval record.
Additional Guidance
Domain controllers must be kept current with operating system patches to protect against publicly known vulnerabilities that are actively exploited. A formal patch management process should include domain controllers in a dedicated patching ring with a maximum age threshold of 30 days after patch release. Replication health should be validated before and after every patch cycle.
Organizations should also monitor domain controller uptime and patch currency as ongoing operational metrics, with automated alerting when a domain controller exceeds the patching threshold. WSUS or a third-party patch management solution should be configured to target domain controllers specifically.
Inactive Domain Controllers
Inactive Domain Controllers
Inactive Domain Controllers
Domain Controllers are considered inactive if they have not authenticated or changed their passwords within the past 30 days, which is a default. Attackers can exploit inactive Domain Controllers to reset passwords or reintroduce unwanted changes into Active Directory, potentially leading to a domain compromise.
Attackers target an inactive domain controller, as they may be less secure or misconfigured, to extract sensitive data such as password hashes or replicate directory information. Some persistence techniques exist by reintroducing the attacker-controlled domain controller to the domain.
Recommendation
Demote and decommission inactive domain controllers, clean up metadata, and validate replication topology after removal.
Prerequisites
- Confirm each listed domain controller is truly inactive and no longer required.
- Verify FSMO roles, DNS records, Global Catalog status, and application dependencies before removal.
- Back up relevant AD metadata, DNS records, and server documentation.
- Obtain change approval and define the demotion or metadata cleanup approach.
Remediation Objective
- Properly demote and decommission inactive domain controllers from the Active Directory environment.
- Remove stale domain controller objects from Active Directory to prevent replication errors and misleading directory data.
- Ensure FSMO roles are transferred to active domain controllers before decommissioning.
- Reduce the attack surface by eliminating unmanaged domain controller endpoints.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Import the Active Directory module.
Import-Module ActiveDirectory
# Review last logon and replication data for a specific domain controller.
# Replace <DCName> with the name of the inactive domain controller.
Get-ADDomainController -Identity "<DCName>" | Select-Object Name, OperatingSystem, LastLogonDate
# Check FSMO roles held by the DC before decommissioning.
Get-ADDomain | Select-Object PDCEmulator, RIDMaster, InfrastructureMaster
Get-ADForest | Select-Object SchemaMaster, DomainNamingMaster
# If the DC is unreachable and cannot be cleanly demoted, use metadata cleanup:
# Remove-ADDomainController -Identity "<DCName>" -ForceRemoval# Import the required module for the remediation.
Import-Module ActiveDirectory
# Import a reviewed and approved list of affected objects to remediate.
$Items = Import-Csv -Path ".\ApprovedObjects.csv"
# Update only the objects included in the approved input file.
foreach ($Item in $Items) {
# Replace the placeholder command with the approved single-object remediation command for Inactive Domain Controllers.
# Use -WhatIf when supported before applying the change.
<Approved-Remediation-Command> -Identity $Item.DistinguishedName -WhatIf
}Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open Server Manager on the inactive domain controller if it is accessibleUse the Remove Roles and Features wizard to remove the Active Directory Domain Services role and complete the demotion workflow.
- Remove the domain controller computer objectOpen Active Directory Users and Computers and remove the retired domain controller computer object from the Domain Controllers OU after a clean demotion.
- Remove stale server referencesOpen Active Directory Sites and Services and remove stale server or NTDS Settings objects associated with the retired domain controller if they remain after demotion.
- Remove stale DNS recordsOpen DNS Manager and remove outdated A, CNAME, SRV, and other records that reference the retired domain controller.
- Review console healthUse Server Manager, Active Directory Sites and Services, DNS Manager, and Event Viewer to confirm the remaining domain controllers appear healthy and no stale references remain.
Validation
- Confirm the domain controller object is removed from the Domain Controllers OU in ADUC.
- Verify AD replication is healthy: repadmin /replsummary
- Confirm DNS records for the decommissioned DC are removed.
- Verify FSMO roles are held by active domain controllers: netdom query fsmo
- Run a follow-up scan to confirm the finding is resolved.
Exceptions
- Document the dependency and business justification.
- Assign a server owner and target remediation date.
- Apply compensating controls and track risk acceptance.
Evidence
- FSMO role inventory before changes.
- DNS record export before removal.
- Change ticket and approval record.
- repadmin /replsummary output before and after decommissioning.
- AD metadata cleanup log if forced removal was required.
- Follow-up scan results confirming finding resolution.
Additional Guidance
Inactive domain controllers represent unmanaged endpoints that may retain cached credentials, hold stale FSMO roles, or be used as a re-entry point by attackers. Domain controllers that are no longer in active use should be formally decommissioned rather than simply powered off, as abandoned domain controller objects can cause replication errors and mislead directory health assessments.
Note that some cloud based or Azure AD/Entra ID joined domain controllers may appear to be inactive or unreachable with this check.
Inactive Trust Detected
Inactive Trust Detected
Inactive Trust Detected
Trusts between domains use a shared secret that is regularly updated. If this update does not occur, it indicates that the remote domain may no longer be active, or the trust is no longer functioning correctly.
An inactive trust could allow adversaries to gain unauthorized access to a connected domain, bypassing standard security measures. Once inside, they can use this access to establish persistence, move laterally across domains, and escalate privileges.
Recommendation
Remove inactive or unnecessary trusts, validate business dependencies, and confirm trust relationships are limited to active requirements.
Prerequisites
- Domain Administrator credentials in both the local and trusted domain required.
- Confirm the trust is genuinely inactive and not currently used for any resource access, authentication.
- Obtain change control approval from both organizations if applicable.
- Plan a rollback procedure in case unexpected dependencies are discovered after removal.
Remediation Objective
- Remove inactive or unnecessary Active Directory trusts that are no longer required for business operations.
- Reduce the attack surface by eliminating trust paths that could be exploited for cross-domain privilege escalation.
- Prevent the use of orphaned trusts as lateral movement vectors in the event of a compromise in the trusted domain.
- Ensure all active AD trusts have documented business justifications and owners.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Import the Active Directory module.
Import-Module ActiveDirectory
# Review current trusts before removal.
Get-ADTrust -Filter *
# Remove the inactive trust.
# Replace <TrustedDomainName> with the DNS name of the trusted domain.
Remove-ADTrust -Identity "<TrustedDomainName>" -WhatIf
# Remove -WhatIf after reviewing the output and confirming no active dependencies.# Import the required module for the remediation.
Import-Module ActiveDirectory
# Import a reviewed and approved list of affected objects to remediate.
$Items = Import-Csv -Path ".\ApprovedObjects.csv"
# Update only the objects included in the approved input file.
foreach ($Item in $Items) {
# Replace the placeholder command with the approved single-object remediation command for Inactive Trust Detected.
# Use -WhatIf when supported before applying the change.
<Approved-Remediation-Command> -Identity $Item.DistinguishedName -WhatIf
}Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open Active Directory Domains and TrustsLaunch
domain.mscfrom an administrative workstation. - Navigate to the domainExpand the domain tree and right-click the local domain. Select Properties.
- Open the Trusts tabClick the Trusts tab and review both incoming and outgoing trusts.
- Locate and remove the inactive trustSelect the inactive trust and click Remove. You will be prompted to remove the trust from the trusted domain as well if you have credentials for it.
- ValidateClose the dialog and confirm the trust no longer appears in the Trusts tab.
Validation
- Confirm the trust has been removed: Get-ADTrust -Filter * (the removed trust should not appear).
- Verify that no authentication failures are occurring following the removal.
- Confirm DNS and name resolution for the previously trusted domain are no longer resolving through the trust.
- Run a follow-up scan to confirm the finding is resolved.
Exceptions
- Document the trust dependency and business justification.
- Assign owners for each domain and a target remediation date.
- Apply compensating controls and track risk acceptance.
Evidence
- Export of current trust configuration before removal.
- Change ticket and approval record from both organizations if applicable.
- PowerShell output confirming trust removal.
- Authentication event log review confirming no failures following removal.
- Follow-up scan results confirming finding resolution.
Additional Guidance
Inactive trusts should be reviewed with application and business owners before removal. Decommission unused trusts to reduce attack paths, and document any remaining trust relationships with ownership, purpose, and review cadence.
| Object | Type |
|---|---|
| sudzbar.local | Trust |
| guiginosrestaurant.local | Trust |
LDAPS Channel Binding Disabled
LDAPS Channel Binding Disabled
LDAPS Channel Binding Disabled
Disabling LDAPS channel binding creates a vulnerability where an attacker can perform relay attacks by intercepting and forwarding LDAP packets through an LDAPS connection without proper verification. Channel binding helps secure LDAPS by tying the TLS channel to the LDAP authentication process, preventing unauthorized packet relay.
This misconfiguration is typically attacked through network poisoning to elevate privileges. In some configurations it is possible to force authentication from critical assets which can then be relayed.
Recommendation
Enable LDAPS channel binding, test dependent LDAP clients, and validate domain controllers enforce the approved binding configuration.
Prerequisites
- Domain Admin or local admin rights on domain controllers.
- Review of LDAPS client applications to confirm they support channel binding.
- Change control approval obtained.
Remediation Objective
- Enable LDAPS channel binding on all domain controllers by setting the LdapEnforceChannelBinding registry value.
- Verify that all LDAPS clients support channel binding before enforcing.
- Confirm LDAPS connectivity is unaffected after the change.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Enable LDAPS channel binding on a domain controller.
$RegistryPath = "HKLM:\SYSTEM\CurrentControlSet\Services\NTDS\Parameters"
Set-ItemProperty -Path $RegistryPath -Name "LdapEnforceChannelBinding" -Value 2 -Type DWord
# Values: 0 = Disabled, 1 = Enabled when supported, 2 = Always required
Write-Output "LDAPS channel binding enforced on $env:COMPUTERNAME"# Apply LDAPS channel binding to multiple domain controllers.
# CSV must contain a column named ServerName.
$Servers = Import-Csv -Path ".\ApprovedDomainControllers.csv"
foreach ($Server in $Servers) {
Invoke-Command -ComputerName $Server.ServerName -ScriptBlock {
$Path = "HKLM:\SYSTEM\CurrentControlSet\Services\NTDS\Parameters"
Set-ItemProperty -Path $Path -Name "LdapEnforceChannelBinding" -Value 2 -Type DWord -WhatIf
Write-Output "Processed: $env:COMPUTERNAME"
}
}
# Remove -WhatIf after the change has been reviewed and approved.Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open Registry EditorLaunch regedit on the domain controller.
- Navigate to the NTDS Parameters keyGo to HKLM\SYSTEM\CurrentControlSet\Services\NTDS\Parameters.
- Create or modify LdapEnforceChannelBindingLocate or create the DWORD value LdapEnforceChannelBinding. Set it to 2 to enforce channel binding for all LDAPS connections.
- Apply the changeClose Registry Editor. A restart may be required. Monitor the Directory Service event log for any LDAPS connection failures after the change.
Validation
- Confirm LdapEnforceChannelBinding is set to 2 on all domain controllers.
- Test LDAPS connectivity from known applications to confirm no disruptions.
- Review Directory Service event logs for any channel binding failure events.
- Run Insight Recon AD against the same scope to confirm the finding is resolved.
Exceptions
- Document the authentication dependency and business justification.
- Assign an owner and target remediation date.
- Apply compensating controls until remediation is complete.
Evidence
- Registry export confirming LdapEnforceChannelBinding is set to 2.
- LDAPS connectivity test results.
- Event log review confirming no connection failures.
- Change ticket and approval record.
Additional Guidance
LDAPS channel binding ties the TLS negotiation to the LDAP authentication session, preventing an attacker who intercepts a TLS session from relaying it to a different LDAP session. This control, combined with LDAP signing, provides comprehensive protection against LDAP relay attacks. Microsoft began rolling out default channel binding requirements in 2020, and organizations should align with or exceed these defaults.
Enabling channel binding should be coordinated with the enforcement of LDAP signing, as the two controls work together to protect LDAP communications. Organizations should test both controls together in a pilot environment before enforcing domain-wide.
LDAP Signing Not Enforced on Domain Controllers
LDAP Signing Not Enforced on Domain Controllers
LDAP Signing Not Enforced on Domain Controllers
When LDAP signing is not enforced on domain controllers, the LDAP traffic is vulnerable to man-in-the-middle (MitM) attacks, where attackers can intercept and modify requests between clients and servers. This allows attackers to manipulate LDAP queries, potentially gaining unauthorized access or modifying sensitive directory data, such as adding users to privileged groups.
Malicious actors look to perform MitM attacks in this fashion to add themselves to the Domain Administrators group.
Recommendation
Identify clients using unsigned LDAP binds, enable LDAP signing enforcement, and validate that dependent applications continue to authenticate successfully.
Prerequisites
- Domain Admin or Group Policy rights to create and modify GPOs linked to domain controllers.
- LDAP event monitoring enabled (Event ID 2886, 2887, 2888, 2889) to locate unsigned LDAP clients before enforcing.
- Application and device owner review completed.
- Change control approval obtained.
- Rollback plan documented.
Remediation Objective
- Enable LDAP event logging on domain controllers to locate clients using unsigned or unencrypted LDAP binds.
- Remediate or update all identified clients before enforcing LDAP signing.
- Set the LDAP server signing requirements policy to Require signing on all domain controllers.
- Verify that all legitimate LDAP clients continue to function after enforcement.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Enable LDAP signing enforcement on domain controllers via registry.
# This is an alternative to GPO for individual domain controllers.
$RegistryPath = "HKLM:\SYSTEM\CurrentControlSet\Services\NTDS\Parameters"
Set-ItemProperty -Path $RegistryPath -Name "LDAPServerIntegrity" -Value 2 -Type DWord
Write-Output "LDAP signing set to Require on $env:COMPUTERNAME"
# Values: 0 = None, 1 = Negotiate signing, 2 = Require signingRemediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open Event ViewerOn domain controllers, open Event Viewer and review the Directory Service log for LDAP signing-related events collected during the approved monitoring period.
- Open Group Policy Management ConsoleLaunch Group Policy Management Console from an administrative workstation.
- Edit the domain controller policyRight-click the Default Domain Controllers Policy or the approved hardening GPO linked to the Domain Controllers OU and select Edit.
- Navigate to the LDAP signing settingGo to Computer Configuration > Windows Settings > Security Settings > Local Policies > Security Options.
- Require LDAP signingOpen Domain controller: LDAP server signing requirements, set it to Require signing, and save the setting.
- Review post-change eventsAfter normal policy refresh occurs, use Event Viewer to monitor the Directory Service log for rejected unsigned bind events and coordinate remediation for any affected applications.
Validation
- Confirm the LDAPServerIntegrity registry value is set to 2 on all domain controllers.
- Verify no Event ID 2889 (simple bind without SSL) entries appear in the Directory Service log after enforcement.
- Test LDAP connectivity from known applications to confirm they continue to function.
- Run Insight Recon AD against the same scope to confirm the finding is resolved.
Exceptions
- Document the dependency and business justification.
- Assign a server owner and target remediation date.
- Apply compensating controls and track risk acceptance.
Evidence
- LDAP event log review output showing no unsigned bind events after enforcement.
- GPO backup showing LDAP signing requirement.
- Application connectivity test results.
- Change ticket and approval record.
Additional Guidance
LDAP signing is a foundational control that ensures the integrity of directory queries and authentication exchanges between clients and domain controllers. Without it, an attacker in a network-adjacent position can intercept and modify LDAP traffic, potentially injecting privilege escalation commands or harvesting credentials. Microsoft has been progressively tightening default LDAP signing requirements, and organizations should align with current best practices.
The recommended approach is to enable LDAP diagnostic logging first, monitor for unsigned bind events over several weeks, remediate any non-compliant clients, and then enforce signing. This phased approach minimizes the risk of service disruption while ensuring full protection is achieved.
Legacy Operating System on Domain Controller
Legacy Operating System on Domain Controller
Legacy Operating System on Domain Controller
Deprecated, unsupported, or otherwise legacy operating systems often do not receive security patches and may have known exploits available. Many legacy operating systems are unable to support modern day security features which increase the difficulty of securing them.
Domain controllers running unsupported operating systems could allow for direct compromise of the domain.
Recommendation
Replace legacy domain controllers with supported systems, transfer required roles, and demote the outdated domain controller after replication is healthy.
Prerequisites
- Domain Admin and Enterprise Admin rights required for domain controller demotion and FSMO role transfer.
- A replacement server meeting hardware and OS requirements provisioned and tested.
- Change control approval and maintenance window scheduled.
- Full domain controller backup performed before demotion.
Remediation Objective
- Deploy a replacement domain controller running a supported operating system.
- Transfer all FSMO roles from the legacy domain controller to the replacement.
- Demote and decommission the legacy domain controller.
- Verify replication and DNS are healthy after the transition.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Transfer FSMO roles from the legacy domain controller to a replacement.
# Replace <TargetDCName> with the SAM account name of the replacement domain controller.
# Replace <LegacyDCName> with the name of the legacy domain controller being decommissioned.
Import-Module ActiveDirectory
# Transfer all FSMO roles to the target domain controller.
Move-ADDirectoryServerOperationMasterRole -Identity "<TargetDCName>" -OperationMasterRole `
SchemaMaster, DomainNamingMaster, RIDMaster, PDCEmulator, InfrastructureMaster -Force
# Demote the legacy domain controller.
# Run the following on the legacy domain controller itself.
Uninstall-ADDSDomainController `
-DemoteOperationMasterRole:$true `
-RemoveApplicationPartitions:$true `
-Force:$trueRemediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Provision the replacement domain controllerUsing Server Manager on a supported Windows Server host, add the Active Directory Domain Services role and complete the domain controller promotion wizard according to the approved design.
- Transfer FSMO roles using GUI toolsUse the appropriate Active Directory administrative consoles to transfer FSMO roles from the legacy domain controller to a supported domain controller. Use Active Directory Users and Computers for RID, PDC, and Infrastructure roles, Active Directory Domains and Trusts for the Domain Naming Master role, and the Active Directory Schema snap-in for the Schema Master role.
- Demote the legacy domain controllerOn the legacy domain controller, open Server Manager and use the Remove Roles and Features wizard to remove the Active Directory Domain Services role. Complete the demotion wizard and restart the server if prompted.
- Remove stale domain controller referencesUse Active Directory Users and Computers, Active Directory Sites and Services, and DNS Manager to remove stale computer objects, server objects, replication connection objects, and DNS records associated with the retired domain controller.
- Confirm administrative console healthReview Active Directory Sites and Services, DNS Manager, and Server Manager to confirm the retired domain controller is no longer referenced and that remaining domain controllers appear healthy.
Validation
- Confirm the legacy domain controller is no longer listed in AD Sites and Services.
- Run repadmin /replsummary to confirm healthy replication across remaining domain controllers.
- Verify FSMO roles are held by the intended replacement: netdom query fsmo.
- Confirm DNS records for the legacy domain controller have been removed.
- Run Insight Recon AD against the same scope to confirm the finding is resolved.
Exceptions
- Document the dependency and business justification.
- Assign a server owner and target remediation date.
- Apply compensating controls and track risk acceptance.
Evidence
- Before-and-after AD Sites and Services screenshot showing domain controller inventory.
- FSMO role transfer confirmation (netdom query fsmo output).
- repadmin /replsummary output before and after demotion.
- Change ticket and approval record.
- Follow-up scan results showing finding resolved.
Additional Guidance
A legacy domain controller should be prioritized for replacement because it affects one of the most sensitive roles in Active Directory. Plan migration carefully, validate FSMO roles and replication, and avoid in-place changes that could destabilize authentication services.
Stale AD Backup
Stale AD Backup
Stale AD Backup
Backups of the Active Directory database are not updated or maintained according to best practices. Outdated backups can fail to capture recent changes in the environment, making them unreliable for recovery or rollback in the event of a failure or security incident.
Stale AD backups signify poor security posture and embolden attackers, particularly relating to ransomware attacks.
Recommendation
Restore regular Active Directory backup coverage, confirm recent successful System State or full server backups, and retain evidence for recovery readiness.
Prerequisites
- Domain Admin or equivalent rights to access backup configuration on domain controllers.
- Access to the backup solution used for Active Directory (Windows Server Backup, third-party agent, or similar).
- Change control approval if modifying backup schedules in a production environment.
- Locate which domain controllers are included in the current backup scope.
Remediation Objective
- Ensure that Active Directory System State or full server backups are being performed for all domain controllers.
- Verify that backup jobs are completing successfully and that backup media is current.
- Establish or enforce a backup schedule that meets Microsoft's recommended standards (at minimum, daily backups).
- Configure alerting for failed or overdue backup jobs.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Run from an elevated command prompt or PowerShell session on the affected domain controller.
# Replace <BackupTargetVolumeOrShare> with the approved backup destination.
wbadmin start systemstatebackup -backupTarget:<BackupTargetVolumeOrShare> -quiet
# Optional: review backup versions after the job completes.
wbadmin get versionsRemediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open Windows Server BackupLaunch Windows Server Backup from Server Manager on the domain controller.
- Review the backup scheduleIn the Windows Server Backup console, click Backup Schedule and confirm that a scheduled backup job exists and is configured to include the System State or full server backup.
- Verify the last backup statusReview the backup job history to confirm that the most recent backup completed successfully and is within the acceptable window.
- Configure alertingIf your backup solution supports email or SIEM alerting, configure notifications for failed or overdue backup jobs.
- Document the backup configurationRecord the backup schedule, scope, retention period, and storage location in your change management or configuration documentation.
Validation
- Confirm the most recent backup timestamp using repadmin /showbackup or the backup solution console.
- Verify the last backup completed without errors by reviewing the backup job history.
- Confirm alerting is configured for failed backup jobs.
- Run Insight Recon AD against the same scope to confirm the finding is resolved.
Exceptions
- Document the business justification for any exception.
- Assign an owner and target remediation date.
- Apply compensating controls and track risk acceptance.
Evidence
- Backup job history export or screenshot confirming successful completion.
- repadmin /showbackup output captured before and after remediation.
- Change ticket and approval record for backup schedule modification.
- Alerting configuration documentation.
Additional Guidance
Active Directory backups should be treated as a critical recovery control, not just an infrastructure task. Review backup freshness, restore test results, and ownership regularly so the organization can recover from directory corruption, ransomware, or accidental administrative changes.
Stale Computer account passwords
Stale Computer account passwords
Stale Computer account passwords
Computer accounts rotate passwords every 30 days as per the Microsoft default. Threat actors could alter the password changing frequency for persistence into the environment.
Organizations with mature security programs are often still vulnerable to persistence techniques such as leveraging computer accounts with stale passwords.
Recommendation
Investigate stale computer account passwords, disable or repair inactive systems, and validate restored domain communication for retained computers.
Prerequisites
- Domain Admin or Computer Account management rights.
- Review of affected computer accounts to determine if they are active, decommissioned, or legitimately offline.
- Service or system owner confirmation for any accounts being disabled.
- Change control approval obtained.
Remediation Objective
- Locate the root cause of stale computer account passwords: decommissioned machines, offline appliances, or machines with broken domain communication.
- Disable or remove computer accounts for systems confirmed as decommissioned.
- Restore domain communication for systems that are active but not reaching the domain.
- Enable automatic password change policies and audit for systems where secure channel communication has failed.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Import the Active Directory module.
Import-Module ActiveDirectory
# Disable a stale computer account confirmed as decommissioned.
# Replace <ComputerName> with the computer's SAM account name (without the trailing $).
Disable-ADAccount -Identity "<ComputerName>$"
# Alternatively, reset the computer account password to force re-establishment
# of the secure channel on an active but out-of-sync machine.
Reset-ComputerMachinePassword -Credential (Get-Credential)# Import the Active Directory module.
Import-Module ActiveDirectory
# Import a reviewed list of stale computer accounts to disable.
# CSV must contain a column named ComputerName.
$Computers = Import-Csv -Path ".\ApprovedStaleComputers.csv"
foreach ($Computer in $Computers) {
Disable-ADAccount -Identity "$($Computer.ComputerName)$" -WhatIf
Write-Output "Processed: $($Computer.ComputerName)"
}
# Remove -WhatIf after reviewing.Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open Active Directory Users and ComputersLaunch
dsa.mscfrom an administrative workstation. - Locate the affected computer accountNavigate to the OU or container containing the stale computer account.
- Review the last logon and password detailsIn the attribute editor (Advanced Features required), check the pwdLastSet and lastLogonTimestamp attributes to confirm staleness.
- Disable or delete the accountFor decommissioned systems, right-click the computer account and select Disable Account or Delete. For active systems with broken secure channels, restore domain connectivity from the affected machine.
Validation
- Confirm the account is disabled or password has been reset.
- Verify the computer can successfully authenticate to the domain if it was active (check Event IDs 4768, 4769 on domain controllers).
- Run Insight Recon AD against the same scope to confirm the finding is resolved.
Exceptions
- Document the account dependency and business justification.
- Assign an owner and target remediation date.
- Apply compensating controls until remediation is complete.
Evidence
- Before-and-after computer account status export.
- Root cause determination documentation.
- Change ticket and approval record.
- Follow-up scan results showing finding resolved.
Additional Guidance
Passwords older than 45 days are considered stale. Administrators should enable automatic password changes and regularly audit for outdated computer account passwords. Stale accounts are often non-malicious and may simply result from decommissioned machines, appliances or proprietary operating systems, or connection issues to AD.
Trust Accounts with Stale Passwords
Trust Accounts with Stale Passwords
Trust Accounts with Stale Passwords
One or more trust accounts have passwords that have not rotated for an extended period, instead of the roughly every 30 days default. Stale trust passwords can weaken the security of the trust relationship and increase the value of any previously captured trust credentials. Trusts should be reviewed for continued business need and configured to maintain healthy password rotation.
Trust passwords protect the Kerberos relationship between domains or forests. If a trust password is stale, any previously exposed trust secret remains useful for a longer period. Attackers who obtain trust material may use it to forge or relay access across the trust boundary.
Recommendation
Validate or reset stale interdomain trusts so a fresh trust password is negotiated.
Prerequisites
- Administrative rights in both domains (or coordination with the other domain's admins).
- A maintenance window for cross-domain authentication.
- Obtain change control approval.
Remediation Objective
- Validate or reset the trust so a fresh trust password is negotiated.
- Confirm cross-domain authentication still works afterward.
- Confirm the trust password now rotates on schedule.
Remediation Path 1: Command-Line
Use this path to validate and reset the trust password from the command line.
REM Validate the trust; validation renegotiates the trust password on both sides.
netdom trust <TrustingDomain> /Domain:<TrustedDomain> /Verify /verbose /UserO:<admin> /PasswordO:*
REM If validation fails, reset the trust password (coordinate with both domains).
netdom trust <TrustingDomain> /Domain:<TrustedDomain> /Reset /UserO:<admin> /PasswordO:* /UserD:<remoteAdmin> /PasswordD:*# Review trusts and their password ages.
Import-Module ActiveDirectory
Get-ADObject -LDAPFilter "(userAccountControl:1.2.840.113556.1.4.803:=2048)" -Properties pwdLastSet, sAMAccountName |
Select-Object sAMAccountName, @{ N='PwdLastSet'; E={ [datetime]::FromFileTimeUtc($_.pwdLastSet) } }Remediation Path 2: GUI
Use this path to validate and reset the trust through the console.
- Open Active Directory Domains and TrustsLaunch domain.msc from an administrative workstation.
- Open the domain propertiesRight-click the local domain, select Properties, then the Trusts tab.
- Select the trustSelect the trust flagged with a stale password and click Properties.
- Validate the trustClick Validate; validation renegotiates the trust password on both sides.
- ConfirmConfirm validation succeeds and cross-domain authentication still works.
Validation
- Confirm pwdLastSet on the trust account is now recent.
- Verify cross-domain logons and resource access still work.
- Run a follow-up scan to confirm the finding is resolved.
Exceptions
- If a trust cannot be reset during the window, document the dependency and target date.
- Treat a long-stale trust key as potentially exposed.
- Track formal risk acceptance.
Evidence
- Trust password age before and after.
- Confirmation that cross-domain authentication functions.
- Follow-up scan results confirming resolution.
Additional Guidance
Where a trust is no longer needed, remove it entirely rather than maintaining it. For trusts that remain, enable SID filtering and selective authentication to limit what a compromised trusted domain can reach.
| Object | Type |
|---|---|
| GUIGINOS$ | Trust account |
Weak LDAP Encryption
Weak LDAP Encryption
Weak LDAP Encryption
Weak LDAP encryption occurs when outdated and vulnerable SSL protocols, such as SSLv2 or SSLv3, are used to secure LDAP traffic. These protocols are considered weak and can be exploited by attackers to intercept and decrypt sensitive directory information, potentially leading to unauthorized access or data manipulation.
This misconfiguration is typically attacked through network poisoning to elevate privileges or obtain an initial foothold within the domain.
Recommendation
Disable weak SSL protocols on domain controllers, enable modern TLS settings, and validate LDAPS connectivity from dependent applications.
Prerequisites
- Domain Admin or local admin rights on domain controllers.
- Inventory of applications and devices using LDAPS with weak protocols completed.
- Change control approval obtained.
- Rollback plan documented (re-enabling via registry if compatibility issues arise).
Remediation Objective
- Disable SSLv2 and SSLv3 on all domain controllers via Schannel registry settings.
- Ensure TLS 1.2 or higher is enabled and functioning.
- Verify LDAPS connectivity continues to work after the change.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
Operational caution: Disabling legacy protocols may affect older LDAPS clients. Test application compatibility before broad deployment.
# Configure Schannel protocol settings on one approved domain controller.
# Run during a maintenance window and restart the server after the change.
$ProtocolsPath = "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols"
$Settings = @(
@{ Path = "SSL 2.0\Server"; Enabled = 0; DisabledByDefault = 1 },
@{ Path = "SSL 3.0\Server"; Enabled = 0; DisabledByDefault = 1 },
@{ Path = "TLS 1.2\Server"; Enabled = 1; DisabledByDefault = 0 }
)
foreach ($Setting in $Settings) {
$Path = Join-Path $ProtocolsPath $Setting.Path
New-Item -Path $Path -Force | Out-Null
Set-ItemProperty -Path $Path -Name Enabled -Value $Setting.Enabled -Type DWord
Set-ItemProperty -Path $Path -Name DisabledByDefault -Value $Setting.DisabledByDefault -Type DWord
}# Import reviewed domain controllers for Schannel updates.
# CSV column: ServerName.
$Servers = Import-Csv -Path ".\ApprovedDomainControllers.csv"
foreach ($Server in $Servers) {
Invoke-Command -ComputerName $Server.ServerName -ScriptBlock {
$ProtocolsPath = "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols"
$Settings = @(
@{ Path = "SSL 2.0\Server"; Enabled = 0; DisabledByDefault = 1 },
@{ Path = "SSL 3.0\Server"; Enabled = 0; DisabledByDefault = 1 },
@{ Path = "TLS 1.2\Server"; Enabled = 1; DisabledByDefault = 0 }
)
foreach ($Setting in $Settings) {
$Path = Join-Path $ProtocolsPath $Setting.Path
if (-not (Test-Path $Path)) { New-Item -Path $Path -Force -WhatIf | Out-Null }
if (Test-Path $Path) {
Set-ItemProperty -Path $Path -Name Enabled -Value $Setting.Enabled -Type DWord -WhatIf
Set-ItemProperty -Path $Path -Name DisabledByDefault -Value $Setting.DisabledByDefault -Type DWord -WhatIf
}
}
}
}
# Remove every -WhatIf after the change has been reviewed and approved.
# In the dry run, keys that don't exist yet only show the New-Item step.Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open Registry EditorLaunch regedit on the domain controller with administrative rights.
- Navigate to Schannel ProtocolsGo to HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols.
- Disable SSLv2Create or navigate to the SSL 2.0\Server subkey. Set Enabled to 0 and DisabledByDefault to 1.
- Disable SSLv3Create or navigate to the SSL 3.0\Server subkey. Set Enabled to 0 and DisabledByDefault to 1.
- Enable TLS 1.2Create or navigate to the TLS 1.2\Server subkey. Set Enabled to 1 and DisabledByDefault to 0.
- Restart the serverA restart is required for Schannel changes to take effect. Schedule during a maintenance window.
Validation
- Confirm SSLv2 and SSLv3 are disabled by testing with an SSL scanner or using openssl s_client against the LDAPS port.
- Verify TLS 1.2 is functioning correctly by testing LDAPS connectivity from known applications.
- Run Insight Recon AD against the same scope to confirm the finding is resolved.
Exceptions
- Document the authentication dependency and business justification.
- Assign an owner and target remediation date.
- Apply compensating controls until remediation is complete.
Evidence
- Before-and-after Schannel registry export.
- SSL scanner output confirming weak protocols are disabled.
- LDAPS connectivity test results.
- Server restart documentation.
- Change ticket and approval record.
- Follow-up scan results showing finding resolved.
Additional Guidance
SSLv2 and SSLv3 contain fundamental cryptographic weaknesses that make them vulnerable to decryption attacks. Organizations should configure all domain controllers to support only TLS 1.2 or higher for LDAPS connections. IIS Crypto or similar tools can provide a convenient interface for managing Schannel settings across multiple servers.
Organizations should also review TLS cipher suite configuration to ensure that weak cipher suites are disabled alongside weak protocol versions. A comprehensive Schannel hardening exercise should cover protocol versions, cipher suites, and key exchange algorithms to ensure the LDAPS implementation meets current security standards.
Hybrid Identity
16 findings
Unauthorized Control Over AzureADKerberos Object
Unauthorized Control Over AzureADKerberos Object
Unauthorized Control Over AzureADKerberos Object
A principal outside the approved Tier 0 boundary can control the AzureADKerberos computer object or associated Kerberos trust objects used by Microsoft Entra cloud Kerberos trust. Risky rights include password reset, GenericAll, GenericWrite, WriteDACL, WriteOwner, delegation modification, and changes to password replication policy.
The AzureADKerberos object functions similarly to a krbtgt account for cloud-issued Kerberos tickets used in hybrid Windows Hello for Business sign-in, so a principal with Reset Password or WriteDACL on it can influence or forge tickets trusted for on-premises resource access originating from a cloud authentication event. Because cloud Kerberos trust is a newer feature than Seamless SSO, this object typically receives far less scrutiny in most environments, making an over-broad ACE here more likely to survive unnoticed.
Recommendation
Remove unauthorized control rights and restrict the AzureADKerberos trust objects to approved Tier 0 administrators and required system principals.
Prerequisites
- Domain Admin or equivalent delegated rights to review and modify the affected Active Directory object.
- Identify all AzureADKerberos-related objects and the organization’s approved Tier 0 administrative principals.
- Change control approval obtained before modifying production identity or synchronization settings.
- Service owner or identity platform owner confirmation of the affected dependency.
Remediation Objective
- Protect the Microsoft Entra Kerberos trust from unauthorized modification.
- Correct the configuration identified by Unauthorized Control Over AzureADKerberos Object.
- Reduce the associated hybrid identity attack path while preserving required business functionality.
- Document the final configuration and validation results.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Unauthorized Control Over AzureADKerberos Object
# Locate the object
Get-ADComputer 'AzureADKerberos' -Properties nTSecurityDescriptor,msDS-RevealOnDemandGroup,msDS-NeverRevealGroup
# Review the ACL
dsacls '<AzureADKerberos distinguished name>'Bulk remediation:
Export the affected objects from Insight Recon, validate each dependency and approved scope, then apply the same change through a reviewed PowerShell script. Use `-WhatIf` where supported and retain the transcript with the change record.
Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open the management consoleIn Active Directory Users and Computers, enable Advanced Features.
- Locate the affected objectLocate AzureADKerberos in the Domain Controllers OU, open Security > Advanced, and remove or narrow unauthorized rights at their source.
Validation
- Confirm only approved principals retain sensitive rights and the cloud Kerberos trust continues to function.
- Confirm the affected configuration now matches the approved standard.
- Run Insight Recon AD against the same scope to confirm the finding is resolved.
Exceptions
- Document any nonstandard administrative principal with its exact required right, owner, and review date.
- Assign an owner and target remediation date.
- Apply compensating controls and track risk acceptance.
Evidence
- ACL before and after remediation.
- Approved Tier 0 list.
- Successful cloud Kerberos trust test.
Additional Guidance
The AzureADKerberos object supports Microsoft Entra cloud Kerberos trust and should be administered as Tier 0 infrastructure. Unauthorized control over its ACL, ownership, password, delegation, or password replication policy can weaken the trust used for hybrid passwordless authentication.
Organizations should restrict administration of AzureADKerberos and related objects to approved Tier 0 principals and monitor all changes to them. Include the object, its associated krbtgt-style account, and the Domain Controllers OU in periodic privileged access reviews.
| Object | Type | Details |
|---|---|---|
| PADDYSPUB\Paddy Sync Admins | Group | holds WriteDACL over AzureADKerberos$ |
Recognized Entra Connect Account Is Privileged
Recognized Entra Connect Account Is Privileged
Recognized Entra Connect Account Is Privileged
A recognized Microsoft Entra synchronization account is directly or transitively privileged in Active Directory. The account is a member of a Tier 0 or built-in administrative group, or otherwise receives administrative authority through nested group membership.
MSOL_ and AAD_ prefixed accounts are recognizable to any attacker who has run even a basic LDAP enumeration pass, tools like BloodHound flag accounts matching these patterns automatically. Finding one nested in Domain Admins or another Tier 0 group turns a well-known, purpose-built account into an early checkbox in a privilege-escalation path, since compromising the sync account through NTLM relay, Kerberoasting, or its own weak permissions becomes functionally equivalent to compromising Domain Admins directly.
Recommendation
Remove the synchronization account from privileged groups and delegate only the specific directory permissions required for its approved function.
Prerequisites
- Domain Admin or equivalent delegated rights to review and modify the affected Active Directory object.
- Confirm the account is used by an active synchronization component and document the required permissions.
- Change control approval obtained before modifying production identity or synchronization settings.
- Service owner or identity platform owner confirmation of the affected dependency.
Remediation Objective
- Eliminate standing Tier 0 group membership from synchronization accounts.
- Correct the configuration identified by Recognized Entra Connect Account Is Privileged.
- Reduce the associated hybrid identity attack path while preserving required business functionality.
- Document the final configuration and validation results.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Recognized Entra Connect Account Is Privileged
# Review recursive group membership
Get-ADPrincipalGroupMembership '<Account>' | Select-Object Name,DistinguishedName
# Remove an unnecessary membership
Remove-ADGroupMember -Identity '<Privileged Group>' -Members '<Account>' -Confirm:$falseBulk remediation:
Export the affected objects from Insight Recon, validate each dependency and approved scope, then apply the same change through a reviewed PowerShell script. Use `-WhatIf` where supported and retain the transcript with the change record.
Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open the management consoleIn Active Directory Users and Computers, open the synchronization account > Member Of.
- Locate the affected objectRemove privileged memberships that are not explicitly required, then apply scoped delegation at the intended OU or object level.
Validation
- Confirm the account is no longer a direct or nested member of privileged groups and synchronization continues successfully.
- Confirm the affected configuration now matches the approved standard.
- Run Insight Recon AD against the same scope to confirm the finding is resolved.
Exceptions
- Avoid exceptions.
- If a vendor-supported design requires a privileged membership, document the exact requirement, account owner, and compensating controls.
- Assign an owner and target remediation date.
- Apply compensating controls and track risk acceptance.
Evidence
- Group membership before and after remediation.
- Permission design.
- Successful synchronization validation.
Additional Guidance
Microsoft Entra synchronization accounts should not hold standing membership in Domain Admins, Enterprise Admins, Administrators, or other Tier 0 groups. The connector should receive narrowly scoped directory permissions instead of broad administrative membership.
Organizations should regularly review direct and nested group memberships for synchronization identities and alert on any privileged group addition. Where possible, separate connector administration from ordinary domain administration and ensure that only dedicated Tier 0 operators can manage the account.
AzureADKerberos Password Replication Policy Exposes Privileged Accounts
AzureADKerberos Password Replication Policy Exposes Privileged Accounts
AzureADKerberos Password Replication Policy Exposes Privileged Accounts
The Password Replication Policy associated with AzureADKerberos permits one or more privileged or Tier 0 identities to use Microsoft Entra cloud Kerberos trust. Microsoft’s default policy blocks high-privilege accounts because relaxing it can create an attack path from Microsoft Entra ID to on-premises Active Directory.
This object's underlying mechanism is architecturally derived from the Read-Only Domain Controller model, where a Password Replication Policy governs which accounts' credential material can be cached, and a policy that permits Tier 0 accounts recreates the exact exposure RODC deployments are specifically hardened against. An attacker who controls or compromises the cloud Kerberos trust path can potentially obtain privileged credential material that Microsoft's default policy is explicitly designed to deny.
Recommendation
Restore the default restrictive Password Replication Policy and remove privileged identities from groups allowed to use the AzureADKerberos trust.
Prerequisites
- Domain Admin or equivalent delegated rights to review and modify the affected Active Directory object.
- Confirm the intended cloud Kerberos trust user population and identify any intentionally allowed administrative accounts.
- Change control approval obtained before modifying production identity or synchronization settings.
- Service owner or identity platform owner confirmation of the affected dependency.
Remediation Objective
- Prevent Tier 0 and high-privilege accounts from receiving on-premises Kerberos access through Microsoft Entra cloud trust.
- Correct the configuration identified by AzureADKerberos Password Replication Policy Exposes Privileged Accounts.
- Reduce the associated hybrid identity attack path while preserving required business functionality.
- Document the final configuration and validation results.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# AzureADKerberos Password Replication Policy Exposes Privileged Accounts
# Review policy-related attributes
Get-ADComputer 'AzureADKerberos' -Properties msDS-RevealOnDemandGroup,msDS-NeverRevealGroup
# Resolve membership of each allowed and denied group before making changes.Bulk remediation:
Export the affected objects from Insight Recon, validate each dependency and approved scope, then apply the same change through a reviewed PowerShell script. Use `-WhatIf` where supported and retain the transcript with the change record.
Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open the management consoleIn Active Directory Users and Computers, enable Advanced Features and review the AzureADKerberos object’s Password Replication Policy.
- Locate the affected objectRemove privileged identities from allowed groups and restore the expected denied groups.
Validation
- Confirm no Tier 0 or protected account is permitted by the policy and cloud Kerberos trust continues to work for approved users.
- Confirm the affected configuration now matches the approved standard.
- Run Insight Recon AD against the same scope to confirm the finding is resolved.
Exceptions
- Microsoft recommends against relaxing the policy for high-privilege accounts.
- Any exception requires explicit Tier 0 risk acceptance and strong compensating controls.
- Assign an owner and target remediation date.
- Apply compensating controls and track risk acceptance.
Evidence
- Policy attributes and group memberships before and after remediation.
- Affected account list.
- Authentication test for an approved user.
Additional Guidance
The AzureADKerberos Password Replication Policy is designed to prevent privileged credentials from being exposed through the cloud Kerberos trust. Allowing Tier 0 or protected accounts through this policy increases the impact of a compromised Microsoft Entra identity or authentication session.
Organizations should preserve Microsoft’s restrictive default behavior and evaluate nested membership in every allowed group. Administrative accounts that require on-premises access should use dedicated authentication paths rather than weakening the cloud trust policy.
| Object | Type | Details |
|---|---|---|
| AzureADKerberos$ | Computer | |
Dennis.Reynolds | Account | Exposed via Domain Admins |
Frank.Reynolds | Account | Exposed via Domain Admins |
Non-Privileged Principal Controls Synchronization Account
Non-Privileged Principal Controls Synchronization Account
Non-Privileged Principal Controls Synchronization Account
A non-Tier 0 principal can control a recognized synchronization account through password reset, GenericAll, GenericWrite, WriteDACL, WriteOwner, or another sensitive object right.
A help-desk or delegated OU-admin account with Reset Password or WriteDACL on the sync account is a shadow path to everything the sync account itself can touch, including DCSync rights if the related permissions finding is also present. An attacker only needs to compromise the lower-tier principal, reset the sync account's password, and inherit its full privilege, no direct attack on Tier 0 required. This kind of indirect path is exactly what attack-path tools like BloodHound are built to surface, and exactly what a group-membership-only review misses.
Recommendation
Remove non-Tier 0 control over the synchronization account and narrow any inherited account-management delegation that created the exposure.
Prerequisites
- Identify the approved administrators for synchronization identities and trace inherited rights to their source.
- Change control approval obtained before modifying production identity or synchronization settings.
- Service owner or identity platform owner confirmation of the affected dependency.
Remediation Objective
- Restrict administrative control of synchronization accounts to approved Tier 0 principals.
- Correct the configuration identified by Non-Privileged Principal Controls Synchronization Account.
- Reduce the associated hybrid identity attack path while preserving required business functionality.
- Document the final configuration and validation results.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Non-Privileged Principal Controls Synchronization Account
dsacls '<Synchronization account distinguished name>'
# Review the parent OU when the reported ACE is inherited.Bulk remediation:
Export the affected objects from Insight Recon, validate each dependency and approved scope, then apply the same change through a reviewed PowerShell script. Use `-WhatIf` where supported and retain the transcript with the change record.
Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open the management consoleOpen the synchronization account in Active Directory Users and Computers > Security > Advanced.
- Locate the affected objectRemove or narrow the risky ACE at its source, including the parent OU when inherited.
Validation
- Confirm no non-Tier 0 principal retains sensitive control rights and re-run Insight Recon.
- Confirm the affected configuration now matches the approved standard.
- Run Insight Recon AD against the same scope to confirm the finding is resolved.
Exceptions
- Document any delegated operator with the exact required rights, scope, owner, and review date.
- Avoid broad help desk or account-operator delegation.
- Assign an owner and target remediation date.
- Apply compensating controls and track risk acceptance.
Evidence
- ACL exports before and after remediation.
- Approved administrative group list.
- Change record.
Additional Guidance
A synchronization account inherits the security posture of every principal that can control it. Reset Password, GenericAll, GenericWrite, WriteDACL, or WriteOwner granted to a lower-tier administrator can provide indirect access to all replication or writeback rights held by the connector identity.
Organizations should evaluate effective control paths, not only the account’s direct permissions and group memberships. Help desk, server administration, and delegated account-management groups should not be able to manage synchronization identities unless they are formally included in the Tier 0 administrative boundary.
| Object | Type | Details |
|---|---|---|
| PADDYSPUB\Paddy Sync Admins | Group | full control (GenericAll) over synchronization account MSOL_a7f3c92e1b04 |
Unauthorized Control Over the Entra Seamless SSO Account
Unauthorized Control Over the Entra Seamless SSO Account
Unauthorized Control Over the Entra Seamless SSO Account
A principal outside the approved Tier 0 administrative boundary can control AZUREADSSOACC$. Risky rights include password reset, GenericAll, GenericWrite, WriteDACL, WriteOwner, SPN modification, delegation modification, and writes to Kerberos encryption settings.
A principal with Reset Password or WriteDACL on AZUREADSSOACC$ is functionally in control of the Seamless SSO trust itself, able to rotate its key, add delegation, or otherwise manipulate the account at will. This object doesn't look privileged by name, so over-broad delegation here is far more likely to go unnoticed than the same exposure on a domain controller or an obviously named admin account.
Recommendation
Remove unauthorized control rights from AZUREADSSOACC$ and its parent container, leaving only approved system and Tier 0 principals with administrative access.
Prerequisites
- Domain Admin or equivalent delegated rights to review and modify the affected Active Directory object.
- Identify approved Tier 0 principals and determine whether the exposure is direct or inherited.
- Change control approval obtained before modifying production identity or synchronization settings.
- Service owner or identity platform owner confirmation of the affected dependency.
Remediation Objective
- Restrict control of the Seamless SSO trust account to authorized Tier 0 administrators and required system principals.
- Correct the configuration identified by Unauthorized Control Over the Entra Seamless SSO Account.
- Reduce the associated hybrid identity attack path while preserving required business functionality.
- Document the final configuration and validation results.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Unauthorized Control Over the Entra Seamless SSO Account
# Review the object ACL
dsacls '<AZUREADSSOACC distinguished name>'
# Review the parent container when rights are inherited
dsacls '<Parent container distinguished name>'Bulk remediation:
Export the affected objects from Insight Recon, validate each dependency and approved scope, then apply the same change through a reviewed PowerShell script. Use `-WhatIf` where supported and retain the transcript with the change record.
Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open the management consoleIn Active Directory Users and Computers, enable Advanced Features.
- Locate the affected objectOpen AZUREADSSOACC$ > Security > Advanced, identify the risky ACE and its inheritance source, then remove or narrow the grant at the source.
Validation
- Confirm only approved principals retain sensitive rights and that no risky rights are inherited from the parent container.
- Re-run Insight Recon.
- Confirm the affected configuration now matches the approved standard.
- Run Insight Recon AD against the same scope to confirm the finding is resolved.
Exceptions
- An exception must identify the principal, exact required right, business owner, scope, and review date.
- Broad computer-management delegation is not sufficient justification.
- Assign an owner and target remediation date.
- Apply compensating controls and track risk acceptance.
Evidence
- ACL export before and after remediation.
- Approved Tier 0 principal list.
- Change record.
Additional Guidance
The AZUREADSSOACC$ account should be administered as a Tier 0 identity because control of the object can affect the hybrid authentication trust between Active Directory and Microsoft Entra ID. Password reset, SPN modification, delegation changes, ownership changes, and ACL control should be limited to tightly controlled administrative principals.
Organizations should include this object in privileged access reviews and alert on changes to its owner, security descriptor, password, SPNs, encryption settings, or delegation attributes. Broad computer-management delegation inherited from the parent container should be corrected at the source rather than only on the individual object.
| Object | Type | Details |
|---|---|---|
| PADDYSPUB\Paddy Helpdesk | Group | holds full control (GenericAll) over AZUREADSSOACC$ |
Entra Seamless SSO Account Is Not Protected from Delegation
Entra Seamless SSO Account Is Not Protected from Delegation
Entra Seamless SSO Account Is Not Protected from Delegation
The AZUREADSSOACC$ computer account is not marked as sensitive and cannot be delegated. This protection reduces the chance that credentials or authentication context associated with the account can be forwarded through Kerberos delegation.
Without the 'sensitive and cannot be delegated' flag, a captured ticket for AZUREADSSOACC$ can be forwarded and reused by any other system in the domain that is configured for unconstrained delegation, a far more common misconfiguration than one on this account itself. An attacker doesn't need to touch AZUREADSSOACC$ directly; they only need to compromise one of those other systems and wait for it to authenticate. This flag is the one control standing between the account and a delegation path it never chose.
Recommendation
Enable the Account is sensitive and cannot be delegated option on AZUREADSSOACC$.
Prerequisites
- Domain Admin or equivalent delegated rights to review and modify the affected Active Directory object.
- Confirm the account is the Microsoft Entra Seamless SSO account and review existing delegation settings.
- Change control approval obtained before modifying production identity or synchronization settings.
- Service owner or identity platform owner confirmation of the affected dependency.
Remediation Objective
- Prevent AZUREADSSOACC$ from being used through Kerberos delegation.
- Correct the configuration identified by Entra Seamless SSO Account Is Not Protected from Delegation.
- Reduce the associated hybrid identity attack path while preserving required business functionality.
- Document the final configuration and validation results.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Entra Seamless SSO Account Is Not Protected from Delegation
Set-ADAccountControl -Identity 'AZUREADSSOACC$' -AccountNotDelegated $trueBulk remediation:
Export the affected objects from Insight Recon, validate each dependency and approved scope, then apply the same change through a reviewed PowerShell script. Use `-WhatIf` where supported and retain the transcript with the change record.
Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open the management consoleIn Active Directory Users and Computers, open AZUREADSSOACC$ > Account and enable Account is sensitive and cannot be delegated.
Validation
- Confirm ACCOUNT_NOT_DELEGATED is set and no dangerous delegation attributes are configured.
- Confirm the affected configuration now matches the approved standard.
- Run Insight Recon AD against the same scope to confirm the finding is resolved.
Exceptions
- None expected unless Microsoft documents a specific dependency for the environment.
- Assign an owner and target remediation date.
- Apply compensating controls and track risk acceptance.
Evidence
- Account control flags before and after remediation.
- Change record.
- Change ticket and approval record.
- Follow-up Insight Recon scan results showing the finding resolved.
Additional Guidance
Marking AZUREADSSOACC$ as sensitive and not delegatable provides defense in depth against Kerberos credential forwarding. This setting does not replace removal of explicit delegation, but it reduces the likelihood that the account’s authentication context can be reused through another delegation path.
Organizations should enforce the protection flag as part of the standard Seamless SSO account baseline and alert if it is removed. Review the account together with unconstrained, constrained, and resource-based constrained delegation findings so all delegation exposure is addressed consistently.
Entra Seamless SSO Account Supports Weak Kerberos Encryption
Entra Seamless SSO Account Supports Weak Kerberos Encryption
Entra Seamless SSO Account Supports Weak Kerberos Encryption
The AZUREADSSOACC$ computer account used by Microsoft Entra seamless single sign-on permits RC4 or DES Kerberos encryption. Microsoft recommends moving this account to AES-based encryption and rotating its Kerberos decryption key as part of the change.
RC4-encrypted tickets derive their key directly from the account's NTLM hash, which is comparatively cheap to crack offline with Hashcat compared to AES. An attacker who captures an RC4 service ticket for AZUREADSSOACC$ through Kerberoasting or a network capture gains a materially easier path to recovering the account's password than AES-only encryption would allow, on an account that already sits at a sensitive trust boundary.
Recommendation
Rotate the Seamless SSO Kerberos decryption key and configure AZUREADSSOACC$ to use supported AES encryption.
Prerequisites
- Domain Admin or equivalent delegated rights to review and modify the affected Active Directory object.
- Confirm domain controllers and dependent clients support AES Kerberos encryption.
- Plan a Seamless SSO maintenance window.
- Change control approval obtained before modifying production identity or synchronization settings.
- Service owner or identity platform owner confirmation of the affected dependency.
Remediation Objective
- Remove DES and RC4 support from the Microsoft Entra Seamless SSO trust account.
- Correct the configuration identified by Entra Seamless SSO Account Supports Weak Kerberos Encryption.
- Reduce the associated hybrid identity attack path while preserving required business functionality.
- Document the final configuration and validation results.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Entra Seamless SSO Account Supports Weak Kerberos Encryption
# Review the current encryption setting
Get-ADComputer 'AZUREADSSOACC' -Properties msDS-SupportedEncryptionTypes,pwdLastSet
# Follow Microsoft guidance to roll over the Seamless SSO key before enforcing AES.Bulk remediation:
Export the affected objects from Insight Recon, validate each dependency and approved scope, then apply the same change through a reviewed PowerShell script. Use `-WhatIf` where supported and retain the transcript with the change record.
Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open the management consoleUse Microsoft’s Seamless SSO key rollover procedure.
- Locate the affected objectAfter rollover, review AZUREADSSOACC$ in Active Directory Users and Computers with Advanced Features enabled and confirm the encryption attribute permits only approved AES types.
Validation
- Confirm the account permits the approved AES encryption types and that Seamless SSO authentication succeeds after the key rollover.
- Confirm the affected configuration now matches the approved standard.
- Run Insight Recon AD against the same scope to confirm the finding is resolved.
Exceptions
- A temporary exception may be necessary where unsupported legacy domain controllers or clients prevent AES use.
- Document the dependency and a dated remediation plan.
- Assign an owner and target remediation date.
- Apply compensating controls and track risk acceptance.
Evidence
- Encryption setting before and after remediation.
- Key rollover record.
- Successful Seamless SSO test.
Additional Guidance
The AZUREADSSOACC$ account is a hybrid trust object used by Microsoft Entra seamless single sign-on and should be protected with current Kerberos encryption. RC4 and DES increase exposure to offline cracking and ticket-forging techniques compared with AES-based encryption.
Organizations should pair encryption hardening with the Microsoft-supported Seamless SSO key rollover process. Review the account’s encryption settings and password age regularly, and monitor for unauthorized changes to msDS-SupportedEncryptionTypes or other Kerberos-related attributes.
Unexpected Owner of the Entra Seamless SSO Account
Unexpected Owner of the Entra Seamless SSO Account
Unexpected Owner of the Entra Seamless SSO Account
The owner of AZUREADSSOACC$ is not an approved Tier 0 or built-in system principal. An object owner can typically modify the object’s permissions, even when no explicit administrative ACE is present.
Object ownership carries an implicit right to rewrite the ACL that most permission audits never check, since tools like BloodHound and manual dsacls reviews focus on explicit ACEs rather than the Owner field. An attacker who controls the owner account can grant themselves full control of AZUREADSSOACC$ at will, even after every visible permission looks clean. Ownership drift is also easy to create quietly: whoever created or last touched the object during a migration or troubleshooting session may still be the owner years later.
Recommendation
Assign ownership of AZUREADSSOACC$ to the organization’s approved Tier 0 administrative group or expected built-in system principal.
Prerequisites
- Domain Admin or equivalent delegated rights to review and modify the affected Active Directory object.
- Confirm the organization’s approved owner for Tier 0 computer objects.
- Change control approval obtained before modifying production identity or synchronization settings.
Remediation Objective
- Ensure ownership cannot be used to bypass the account’s explicit ACL protections.
- Correct the configuration identified by Unexpected Owner of the Entra Seamless SSO Account.
- Reduce the associated hybrid identity attack path while preserving required business functionality.
- Document the final configuration and validation results.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Unexpected Owner of the Entra Seamless SSO Account
# Review the owner
dsacls '<AZUREADSSOACC distinguished name>'
# Set the approved owner using an authorized ACL management method.Bulk remediation:
Export the affected objects from Insight Recon, validate each dependency and approved scope, then apply the same change through a reviewed PowerShell script. Use `-WhatIf` where supported and retain the transcript with the change record.
Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open the management consoleIn Active Directory Users and Computers, enable Advanced Features.
- Locate the affected objectOpen AZUREADSSOACC$ > Security > Advanced > Owner and assign the approved Tier 0 owner.
Validation
- Confirm the owner matches the approved baseline and review the ACL for rights added by the previous owner.
- Confirm the affected configuration now matches the approved standard.
- Run Insight Recon AD against the same scope to confirm the finding is resolved.
Exceptions
- Document nonstandard ownership only when it is required by a formally approved Tier 0 administration model.
- Assign an owner and target remediation date.
- Apply compensating controls and track risk acceptance.
Evidence
- Owner and ACL before and after remediation.
- Approval record.
- Change ticket and approval record.
- Follow-up Insight Recon scan results showing the finding resolved.
Additional Guidance
Object ownership is a powerful form of control because the owner can typically change the object’s permissions even when no explicit administrative ACE is present. Ownership of AZUREADSSOACC$ should therefore remain with an approved Tier 0 or built-in system principal.
Organizations should include ownership validation in regular reviews of hybrid identity objects and monitor for ownership changes. Correcting the owner should be followed by a full ACL review because the previous owner may have granted additional permissions before ownership was restored.
Resource-Based Constrained Delegation on Entra Seamless SSO Account
Resource-Based Constrained Delegation on Entra Seamless SSO Account
Resource-Based Constrained Delegation on Entra Seamless SSO Account
Resource-based constrained delegation is configured on the AZUREADSSOACC$ computer account through msDS-AllowedToActOnBehalfOfOtherIdentity. Microsoft Entra seamless single sign-on does not require this configuration.
RBCD is a single writable attribute rather than a userAccountControl flag, so it's easy for defenders to overlook and easy for an attacker who controls any principal with write access to configure. Once set, the attacker uses S4U2self followed by S4U2proxy to request a ticket as any user, including a Domain Admin, against this trust anchor. Tools like Rubeus and Impacket automate the entire sequence.
Recommendation
Investigate the origin of the delegation entry, clear the RBCD configuration, and restrict modification of the attribute to authorized Tier 0 administrators.
Prerequisites
- Domain Admin or equivalent delegated rights to review and modify the affected Active Directory object.
- Preserve the current attribute and ACL values for investigation before making changes.
- Change control approval obtained before modifying production identity or synchronization settings.
- Service owner or identity platform owner confirmation of the affected dependency.
Remediation Objective
- Remove unauthorized delegation and prevent it from being reintroduced.
- Correct the configuration identified by Resource-Based Constrained Delegation on Entra Seamless SSO Account.
- Reduce the associated hybrid identity attack path while preserving required business functionality.
- Document the final configuration and validation results.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Resource-Based Constrained Delegation on Entra Seamless SSO Account
# Review RBCD
Get-ADComputer 'AZUREADSSOACC' -Properties PrincipalsAllowedToDelegateToAccount,msDS-AllowedToActOnBehalfOfOtherIdentity
# Clear RBCD after investigation
Set-ADComputer 'AZUREADSSOACC' -Clear 'msDS-AllowedToActOnBehalfOfOtherIdentity'Bulk remediation:
Export the affected objects from Insight Recon, validate each dependency and approved scope, then apply the same change through a reviewed PowerShell script. Use `-WhatIf` where supported and retain the transcript with the change record.
Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open the management consoleIn Active Directory Users and Computers, enable Advanced Features and open AZUREADSSOACC$.
- Locate the affected objectUse Attribute Editor to review and clear msDS-AllowedToActOnBehalfOfOtherIdentity.
- Review the current configurationReview Security > Advanced to remove unauthorized rights that can write the attribute.
Validation
- Confirm the attribute is empty and no unauthorized principal can modify it.
- Re-run Insight Recon.
- Confirm the affected configuration now matches the approved standard.
- Run Insight Recon AD against the same scope to confirm the finding is resolved.
Exceptions
- None expected for a standard Microsoft Entra Seamless SSO deployment.
- Assign an owner and target remediation date.
- Apply compensating controls and track risk acceptance.
Evidence
- Attribute and ACL export before remediation.
- Investigation notes.
- Clean post-remediation scan.
Additional Guidance
Resource-based constrained delegation should not be configured on the AZUREADSSOACC$ account in a standard Microsoft Entra seamless single sign-on deployment. Its presence can create an impersonation path and may indicate an unauthorized or malicious modification to a sensitive hybrid trust object.
Organizations should investigate how the RBCD entry was introduced before clearing it. Enable auditing for changes to msDS-AllowedToActOnBehalfOfOtherIdentity and review the account’s ACL to ensure that only approved Tier 0 principals can modify delegation-related attributes.
Synchronization Account Has Unexpected DCSync Rights
Synchronization Account Has Unexpected DCSync Rights
Synchronization Account Has Unexpected DCSync Rights
A recognized synchronization account has directory replication rights on a domain naming context. These rights can be expected when Password Hash Synchronization is used, but Active Directory alone cannot confirm whether that feature is currently enabled. The finding identifies the DCSync-capable account and its scope for validation.
Replicating Directory Changes All is the exact right DCSync abuses to pull every account's password hash straight from a domain controller, tools like Mimikatz and Impacket's secretsdump automate the process end to end. A sync account holding this right when Password Hash Synchronization isn't even enabled is pure unused attack surface: compromise the account once, and an attacker walks away with the entire domain's credential material in a single request.
Recommendation
Confirm whether Password Hash Synchronization requires the replication rights. Remove unnecessary grants or restrict them to the correct domain scope.
Prerequisites
- Domain Admin or equivalent delegated rights to review and modify the affected Active Directory object.
- Confirm the active connector account and whether Password Hash Synchronization is enabled for the affected domain.
- Change control approval obtained before modifying production identity or synchronization settings.
- Service owner or identity platform owner confirmation of the affected dependency.
Remediation Objective
- Ensure replication rights exist only for active synchronization accounts that require them and only at the intended domain scope.
- Correct the configuration identified by Synchronization Account Has Unexpected DCSync Rights.
- Reduce the associated hybrid identity attack path while preserving required business functionality.
- Document the final configuration and validation results.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Synchronization Account Has Unexpected DCSync Rights
# Review replication-related ACEs on the domain root
dsacls '<Domain DN>' | Select-String 'Replicating Directory Changes'
# Confirm the account SID and effective scope
Get-ADUser '<Account>' -Properties SID,EnabledBulk remediation:
Export the affected objects from Insight Recon, validate each dependency and approved scope, then apply the same change through a reviewed PowerShell script. Use `-WhatIf` where supported and retain the transcript with the change record.
Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open the management consoleIn Active Directory Users and Computers, enable Advanced Features.
- Locate the affected objectOpen the domain root object, select Security > Advanced, and review replication extended rights granted to the synchronization account.
- Review the current configurationRemove them only after confirming they are not required for Password Hash Synchronization.
Validation
- Confirm the account has only the replication rights required for the intended domain.
- Run synchronization validation and re-run Insight Recon.
- Confirm the affected configuration now matches the approved standard.
- Run Insight Recon AD against the same scope to confirm the finding is resolved.
Exceptions
- Replication rights are expected when the account is the active AD DS Connector account for Password Hash Synchronization.
- The exception must document the feature, account, domain scope, and owner.
- Assign an owner and target remediation date.
- Apply compensating controls and track risk acceptance.
Evidence
- Domain-root ACL before and after remediation.
- Confirmation of Password Hash Synchronization status.
- Successful synchronization results.
Additional Guidance
Directory replication rights are highly sensitive because they allow an account to retrieve password-related data from domain controllers through normal replication interfaces. Password Hash Synchronization may legitimately require these rights, but they should never be granted more broadly than the intended domain scope or retained by inactive connector accounts.
Organizations should validate each synchronization account with DCSync-capable rights against the current Microsoft Entra Connect configuration. Monitor for unexpected replication activity from non-domain-controller systems and review any new assignment of Replicating Directory Changes permissions as a privileged access event.
Synchronization Account Is Delegatable
Synchronization Account Is Delegatable
Synchronization Account Is Delegatable
A recognized synchronization account can participate in Kerberos delegation because it is not protected from delegation or has unconstrained, constrained, or resource-based constrained delegation configured.
A delegatable sync account extends the same Kerberos ticket-forwarding risk described for AZUREADSSOACC$ to an account that, in many environments, holds even broader AD rights than the SSO account. An attacker who compromises a system this account is configured to delegate to, or one configured to delegate to it, can request a ticket as any user through S4U2self and S4U2proxy without ever touching the sync account's own credential directly.
Recommendation
Remove unnecessary delegation configuration and mark the synchronization account as sensitive and cannot be delegated where supported.
Prerequisites
- Domain Admin or equivalent delegated rights to review and modify the affected Active Directory object.
- Confirm the synchronization product and service design do not require delegation for the affected account.
- Change control approval obtained before modifying production identity or synchronization settings.
- Service owner or identity platform owner confirmation of the affected dependency.
Remediation Objective
- Prevent synchronization credentials from being forwarded or impersonated through Kerberos delegation.
- Correct the configuration identified by Synchronization Account Is Delegatable.
- Reduce the associated hybrid identity attack path while preserving required business functionality.
- Document the final configuration and validation results.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Synchronization Account Is Delegatable
# Review delegation settings
Get-ADUser '<Account>' -Properties AccountNotDelegated,TrustedForDelegation,TrustedToAuthForDelegation,msDS-AllowedToDelegateTo,msDS-AllowedToActOnBehalfOfOtherIdentity
# Apply delegation protection
Set-ADAccountControl '<Account>' -AccountNotDelegated $trueBulk remediation:
Export the affected objects from Insight Recon, validate each dependency and approved scope, then apply the same change through a reviewed PowerShell script. Use `-WhatIf` where supported and retain the transcript with the change record.
Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open the management consoleIn Active Directory Users and Computers, open the account > Account and enable Account is sensitive and cannot be delegated.
- Locate the affected objectRemove unsupported delegation entries after confirming service requirements.
Validation
- Confirm delegation attributes are clear or approved, ACCOUNT_NOT_DELEGATED is set where supported, and synchronization continues normally.
- Confirm the affected configuration now matches the approved standard.
- Run Insight Recon AD against the same scope to confirm the finding is resolved.
Exceptions
- Document a delegation requirement only when it is explicitly required by the supported connector design and tightly scoped.
- Assign an owner and target remediation date.
- Apply compensating controls and track risk acceptance.
Evidence
- Delegation settings before and after remediation.
- Service-owner confirmation.
- Successful synchronization validation.
Additional Guidance
Synchronization accounts often hold broad directory access and should not be exposed through Kerberos delegation. Unconstrained, constrained, or resource-based constrained delegation can allow another system or principal to impersonate the account and inherit its synchronization permissions.
Organizations should mark eligible connector identities as sensitive and cannot be delegated, remove unsupported delegation entries, and monitor delegation-related attribute changes. Exceptions should be limited to documented, vendor-supported designs and treated as privileged access risks.
Synchronization Account Has Excessive AD Permissions
Synchronization Account Has Excessive AD Permissions
Synchronization Account Has Excessive AD Permissions
A recognized synchronization account has privileged group membership or broad Active Directory rights that can affect objects beyond its expected synchronization scope. This check evaluates group membership and effective permissions visible in Active Directory, including Full Control, GenericWrite, WriteDACL, WriteOwner, password reset, group membership modification, and object creation or deletion rights.
Entra Connect's installer has historically requested broader rights than many enabled features actually need, and an attacker who compromises the sync account inherits whatever excess was left in place. Depending on what's granted, that can mean resetting passwords, modifying group membership, or altering ACLs on objects the sync engine was never meant to reach, all without needing Domain Admin credentials directly.
Recommendation
Remove privileged group memberships and reduce delegated rights to the minimum required by the synchronization features in use.
Prerequisites
- Domain Admin or equivalent delegated rights to review and modify the affected Active Directory object.
- Confirm the active AD DS Connector account and document the synchronization and writeback features currently enabled.
- Change control approval obtained before modifying production identity or synchronization settings.
- Service owner or identity platform owner confirmation of the affected dependency.
Remediation Objective
- Limit the synchronization account to the minimum permissions required for its approved function.
- Correct the configuration identified by Synchronization Account Has Excessive AD Permissions.
- Reduce the associated hybrid identity attack path while preserving required business functionality.
- Document the final configuration and validation results.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Synchronization Account Has Excessive AD Permissions
# Review group membership
Get-ADUser '<Account>' -Properties memberOf | Select-Object -ExpandProperty memberOf
# Review permissions on a target scope
dsacls '<Target DN>'
# Remove an unnecessary privileged membership
Remove-ADGroupMember -Identity '<Privileged Group>' -Members '<Account>' -Confirm:$falseBulk remediation:
Export the affected objects from Insight Recon, validate each dependency and approved scope, then apply the same change through a reviewed PowerShell script. Use `-WhatIf` where supported and retain the transcript with the change record.
Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open the management consoleReview the account’s group memberships in Active Directory Users and Computers.
- Locate the affected objectOn each affected domain, OU, or object, open Security > Advanced and remove rights that are not required by the documented synchronization design.
- Review the current configurationTest changes in stages.
Validation
- Run an approved synchronization cycle and confirm that imports, exports, password synchronization, and any enabled writeback functions continue successfully.
- Re-run Insight Recon to verify that excess rights are removed.
- Confirm the affected configuration now matches the approved standard.
- Run Insight Recon AD against the same scope to confirm the finding is resolved.
Exceptions
- Retain a permission only when it is explicitly required by an enabled feature and scoped to the intended objects.
- Document the feature, scope, owner, and supporting Microsoft guidance.
- Assign an owner and target remediation date.
- Apply compensating controls and track risk acceptance.
Evidence
- Before and after group membership.
- ACL exports.
- Permission-to-feature mapping.
- Successful synchronization validation.
Additional Guidance
Synchronization accounts should be granted only the permissions required for the specific synchronization and writeback features in use. Broad rights such as Full Control, WriteDACL, WriteOwner, password reset, or privileged group membership can turn compromise of a connector identity into direct control of large portions of Active Directory.
Organizations should document the permission baseline for each connector account and review it after upgrades, topology changes, and feature enablement. Permission reductions should be tested in stages because overly aggressive changes can interrupt synchronization, password writeback, group writeback, or Exchange hybrid functionality.
| Object | Type | Details |
|---|---|---|
| Staff | Organizational unit | synchronization account MSOL_a7f3c92e1b04 holds full control (GenericAll) (granted directly) |
| Domain Admins | Group | synchronization account MSOL_a7f3c92e1b04 holds write access to the group member attribute (granted directly) |
| Administrators | Group | synchronization account MSOL_a7f3c92e1b04 holds write access to the group member attribute (granted directly) |
Synchronization Account Password Is Stale
Synchronization Account Password Is Stale
Synchronization Account Password Is Stale
A recognized synchronization account has a stale password. Password age alone does not prove the account is unused or insecure, and some Microsoft Entra Connect account types are managed differently. The finding is intended to trigger ownership and lifecycle review.
A synchronization account's credential is normally rotated automatically by Entra Connect on a defined schedule, so staleness here often signals that rotation has silently stopped, not just that nobody's paying attention. Any hash or Kerberos key captured from this account before rotation lapsed, whether from a memory dump, an NTDS.dit extraction, or Kerberoasting, remains valid for as long as the staleness persists, quietly extending the usable life of whatever an attacker already obtained.
Recommendation
Confirm how the synchronization account credential is managed. Rotate it only through the supported product procedure, or retire the account if it is no longer required.
Prerequisites
- Domain Admin or equivalent delegated rights to review and modify the affected Active Directory object.
- Identify the connector or service that uses the account and review the Microsoft guidance for that account type before changing its password.
- Change control approval obtained before modifying production identity or synchronization settings.
- Service owner or identity platform owner confirmation of the affected dependency.
Remediation Objective
- Ensure synchronization credentials follow a supported lifecycle and are not left unchanged without ownership or review.
- Correct the configuration identified by Synchronization Account Password Is Stale.
- Reduce the associated hybrid identity attack path while preserving required business functionality.
- Document the final configuration and validation results.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Synchronization Account Password Is Stale
# Review password metadata
Get-ADUser '<Account>' -Properties pwdLastSet,PasswordNeverExpires,Enabled | Select-Object Name,Enabled,PasswordNeverExpires,@{N='PasswordLastSet';E={[datetime]::FromFileTime($_.pwdLastSet)}}
# Use the product-supported credential rotation procedure for the confirmed account type.Bulk remediation:
Export the affected objects from Insight Recon, validate each dependency and approved scope, then apply the same change through a reviewed PowerShell script. Use `-WhatIf` where supported and retain the transcript with the change record.
Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open the management consoleReview the account in Active Directory Users and Computers, but do not reset the password until the dependent synchronization service and supported rotation process are confirmed.
Validation
- Confirm synchronization remains healthy after an approved rotation, the password date is updated, and the account remains limited to required permissions.
- Confirm the affected configuration now matches the approved standard.
- Run Insight Recon AD against the same scope to confirm the finding is resolved.
Exceptions
- Document accounts whose passwords are managed automatically or whose supported product design does not use routine manual rotation.
- Include the owner and review date.
- Assign an owner and target remediation date.
- Apply compensating controls and track risk acceptance.
Evidence
- Account type confirmation.
- Password metadata.
- Approved rotation record.
- Successful synchronization result.
Additional Guidance
Password age for synchronization accounts should be evaluated in the context of the account type and the supported credential-management process. Some connector identities use automatically managed credentials, while others require a documented rotation procedure coordinated with the synchronization service.
Organizations should not reset a connector password solely because it exceeds a generic age threshold. Confirm ownership, account type, and product dependencies first, then rotate the credential using the supported process and validate synchronization health immediately afterward.
Synchronization Account Can Modify Privileged Groups
Synchronization Account Can Modify Privileged Groups
Synchronization Account Can Modify Privileged Groups
A recognized synchronization account can change membership or exercise administrative control over a Tier 0 or otherwise privileged group. Relevant rights include WriteProperty on member, GenericWrite, GenericAll, WriteDACL, WriteOwner, and group creation or deletion within a privileged scope.
An attacker who compromises the sync account and finds it holds WriteProperty or GenericWrite on Domain Admins can add themselves to the group directly, no group writeback feature or cloud-side action required. Because the sync account isn't itself a group member, this path doesn't surface in a standard privileged-group membership review and is only visible to an ACL-level check like this one.
Recommendation
Remove group-management and object-control rights from privileged groups and their parent containers. Scope any required group writeback permissions to dedicated nonprivileged OUs.
Prerequisites
- Domain Admin or equivalent delegated rights to review and modify the affected Active Directory object.
- Confirm the active connector account and intended group writeback scope.
- Change control approval obtained before modifying production identity or synchronization settings.
- Service owner or identity platform owner confirmation of the affected dependency.
Remediation Objective
- Prevent synchronization identities from modifying Tier 0 group membership or control.
- Correct the configuration identified by Synchronization Account Can Modify Privileged Groups.
- Reduce the associated hybrid identity attack path while preserving required business functionality.
- Document the final configuration and validation results.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Synchronization Account Can Modify Privileged Groups
# Review the affected group ACL
dsacls '<Privileged group DN>'
# Review group membership after remediation
Get-ADGroupMember '<Privileged Group>'Bulk remediation:
Export the affected objects from Insight Recon, validate each dependency and approved scope, then apply the same change through a reviewed PowerShell script. Use `-WhatIf` where supported and retain the transcript with the change record.
Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open the management consoleOpen the reported group or parent OU in Active Directory Users and Computers > Security > Advanced.
- Locate the affected objectRemove the synchronization account’s membership-write or administrative ACE and narrow writeback permissions to the approved scope.
Validation
- Confirm the synchronization account cannot modify the privileged group and approved synchronization functions continue normally.
- Confirm the affected configuration now matches the approved standard.
- Run Insight Recon AD against the same scope to confirm the finding is resolved.
Exceptions
- No routine synchronization or group writeback requirement should include Tier 0 groups.
- Require explicit risk acceptance for any exception.
- Assign an owner and target remediation date.
- Apply compensating controls and track risk acceptance.
Evidence
- ACL before and after remediation.
- Affected group list.
- Successful test in an approved nonprivileged writeback scope.
Additional Guidance
A synchronization account that can modify privileged group membership can elevate an attacker-controlled identity without needing Domain Admin membership. Group writeback and other automated group-management permissions should be isolated from Tier 0 groups and privileged administrative containers.
Organizations should review both direct rights on privileged groups and inherited rights from parent OUs. Monitor membership changes to Tier 0 groups and alert when the initiating identity is a synchronization or provisioning account.
| Object | Type | Details |
|---|---|---|
| Domain Admins | Group | synchronization account MSOL_a7f3c92e1b04 holds write access to the group member attribute (granted directly) |
| Administrators | Group | synchronization account MSOL_a7f3c92e1b04 holds write access to the group member attribute (granted directly) |
Synchronization Principal Can Control Tier 0 Objects
Synchronization Principal Can Control Tier 0 Objects
Synchronization Principal Can Control Tier 0 Objects
A recognized synchronization principal, or a principal that can control it, has a direct or indirect Active Directory permission path to a Tier 0 object. Paths may include password reset, group modification, ownership, DACL modification, delegation, object creation, or control of another intermediary principal.
This is the finding that catches what the individually scoped checks miss in combination: a chain of unremarkable-looking permissions, sync account to nested group to GPO to the Domain Controllers OU, can add up to full Tier 0 control even when no single hop looks alarming on its own. Attack-path tools like BloodHound are built specifically to find and exploit exactly this kind of multi-hop chain, which is why an aggregate check like this one matters as much as the individual permission findings it's built from.
Recommendation
Break the shortest and highest-impact control paths by removing excessive rights, nested privilege, unsafe ownership, and lower-tier control of synchronization identities.
Prerequisites
- Domain Admin or equivalent delegated rights to review and modify the affected Active Directory object.
- Validate the attack-path calculation and identify the business owner for each permission edge before making changes.
- Change control approval obtained before modifying production identity or synchronization settings.
Remediation Objective
- Ensure synchronization principals and their administrators cannot reach Tier 0 through direct or transitive control.
- Correct the configuration identified by Synchronization Principal Can Control Tier 0 Objects.
- Reduce the associated hybrid identity attack path while preserving required business functionality.
- Document the final configuration and validation results.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Synchronization Principal Can Control Tier 0 Objects
# Review each reported path edge using the relevant object ACL and group membership cmdlets.
Get-ADPrincipalGroupMembership '<Principal>'
dsacls '<Target DN>'Bulk remediation:
Export the affected objects from Insight Recon, validate each dependency and approved scope, then apply the same change through a reviewed PowerShell script. Use `-WhatIf` where supported and retain the transcript with the change record.
Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open the management consoleFollow the reported path from the synchronization principal to the Tier 0 target.
- Locate the affected objectAt each object, review group membership and Security > Advanced, then remove the least disruptive permission edge that breaks the path.
Validation
- Recalculate the attack path and confirm no synchronization principal or controlling non-Tier 0 principal can reach the reported Tier 0 object.
- Confirm the affected configuration now matches the approved standard.
- Run Insight Recon AD against the same scope to confirm the finding is resolved.
Exceptions
- Document only unavoidable paths with named owners, least-privilege justification, monitoring, and formal Tier 0 risk acceptance.
- Assign an owner and target remediation date.
- Apply compensating controls and track risk acceptance.
Evidence
- Attack path before and after remediation.
- ACL and membership changes.
- Owner approvals.
Additional Guidance
Hybrid identity risk often results from a chain of individually overlooked permissions rather than a single obvious administrative grant. A synchronization account, or a lower-tier principal that controls it, should not have a direct or transitive path to domain controllers, privileged groups, AD CS authorities, or other Tier 0 assets.
Organizations should use attack-path reviews to validate the complete administrative boundary around synchronization identities. Break the shortest and highest-impact paths first, then monitor for new ACL, ownership, delegation, and nested group changes that could recreate the route.
| Object | Type | Details |
|---|---|---|
| PADDYSPUB\Paddy Sync Admins | Group | full control (GenericAll) over synchronization account MSOL_a7f3c92e1b04, which holds Replicating Directory Changes, Replicating Directory Changes All on the domain root; holds write access to the group member attribute on 2 protected groups; is a member of Domain Admins |
Stale "AzureAD SSO" Account Password
Stale "AzureAD SSO" Account Password
Stale "AzureAD SSO" Account Password
A stale password for the AzureAD SSO account (AZUREADSSOACC) poses a significant security risk, as this account is critical for converting Kerberos tickets into SAML tokens for Azure AD single sign-on. If the password is not rotated regularly, attackers could extract it and use it to impersonate users, potentially compromising the entire Azure AD environment.
Stale passwords signify poor security posture and embolden attackers, particularly relating to ransomware attacks.
Recommendation
Rotate the AzureADSSOACC password using the supported Azure AD Connect process and validate Seamless SSO functionality after rotation.
Prerequisites
- Azure AD Connect administrator rights.
- Azure AD Global Administrator or Hybrid Identity Administrator rights.
- Confirm Azure AD Connect is healthy and synchronization is working before proceeding.
- Change control approval obtained.
- User communication plan prepared for potential brief SSO disruption during rotation.
- Rollback plan documented.
Remediation Objective
- Rotate the AZUREADSSOACC computer account password using the Azure AD Connect PowerShell module.
- Verify that Seamless SSO is functioning correctly after the rotation.
- Confirm the default 30-day automatic rotation schedule is operational.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
Operational caution: Seamless SSO changes can affect authentication behavior. Perform the change during an approved maintenance window and validate sign-in afterward.
# Rotate the Seamless SSO Kerberos decryption key for the approved tenant.
# Run from an administrative workstation with the required Azure AD Connect permissions.
Import-Module AzureADSSO
New-AzureADSSOAuthenticationContext
Update-AzureADSSOForest -OnPremCredentials (Get-Credential)Remediation Path 2: GUI
Not applicable. A GUI-only remediation path is not the preferred method for this finding because rotating the AzureADSSO account password is normally performed with the Microsoft Entra Connect PowerShell module from the Entra Connect server. The GUI can support post-change synchronization review, but it does not provide a complete GUI-only remediation path.
Validation
- Confirm the AZUREADSSOACC account's password was updated by checking its PasswordLastSet attribute in Active Directory.
- Verify Seamless SSO is functioning by testing authentication from a domain-joined machine to an Azure AD application.
- Confirm Azure AD Connect synchronization completed successfully after the rotation.
- Run Insight Recon AD against the same scope to confirm the finding is resolved.
Exceptions
- Document the account dependency and business justification.
- Assign an owner and target remediation date.
- Apply compensating controls until remediation is complete.
Evidence
- Before-and-after PasswordLastSet attribute for AZUREADSSOACC.
- Azure AD Connect sync cycle confirmation screenshot.
- Change ticket and approval record.
- Seamless SSO functionality test results.
- Follow-up scan results showing finding resolved.
Additional Guidance
The AZUREADSSOACC account holds the Kerberos decryption key used to convert domain Kerberos tickets into Azure AD SAML tokens for Seamless SSO. If this account's password is not regularly rotated, a compromise of the domain could allow an attacker to forge Seamless SSO tokens and gain unauthorized access to Azure AD resources. By default, Azure AD Connect rotates this password automatically every 30 days, and organizations should verify this automatic rotation is functioning correctly.
Any significant domain security incident, particularly one involving domain controller compromise, should trigger an immediate out-of-cycle rotation of the AZUREADSSOACC password as part of the incident response process.
| Object | Type |
|---|---|
| AZUREADSSOACC | Computer |
Policy and Configuration Management
24 findings
Unencrypted Certificate Authority RPC Enrollment in ADCS (ESC11)
Unencrypted Certificate Authority RPC Enrollment in ADCS (ESC11)
Unencrypted Certificate Authority RPC Enrollment in ADCS (ESC11)
A certificate authority's RPC enrollment interface does not require packet encryption (the IF_ENFORCEENCRYPTICERTREQUEST flag is not set). An attacker who can relay NTLM authentication can relay a victim machine or user to the CA over the RPC certificate-request interface and obtain a certificate as that victim, similar to ESC8 but over RPC instead of web enrollment.
ESC11 extends NTLM relay to the CA RPC interface. When the CA does not enforce RPC encryption, an attacker coerces authentication from a privileged machine account, for example with a printer-bug or PetitPotam style coercion, and relays it to the CA's ICertPassage endpoint, requesting an authentication certificate for the relayed identity. The resulting certificate is then used for PKINIT, yielding the privileges of the relayed account.
Recommendation
Enforce RPC encryption on the certificate authority enrollment interface.
Prerequisites
- Local administrator on the certificate authority host.
- Confirm enrollment clients support encrypted RPC (modern Windows does).
- Obtain change control approval.
Remediation Objective
- Enable the IF_ENFORCEENCRYPTICERTREQUEST interface flag on the CA.
- Restart the CA service to apply the change.
- Combine with broader NTLM-relay mitigations.
Remediation Path 1: Command-Line
Use this path on the CA host to set the flag and restart the service.
# Run with administrative rights on the CA host.
certutil -setreg CA\InterfaceFlags +IF_ENFORCEENCRYPTICERTREQUEST
# Restart the CA service to apply.
net stop certsvc && net start certsvc
# Confirm the flag is set.
certutil -getreg CA\InterfaceFlags# Apply to approved CA hosts (column: CaHost).
$Items = Import-Csv -Path ".\ApprovedObjects.csv"
foreach ($Item in $Items) {
Invoke-Command -ComputerName $Item.CaHost -ScriptBlock {
certutil -setreg CA\InterfaceFlags +IF_ENFORCEENCRYPTICERTREQUEST
Restart-Service certsvc
}
}Remediation Path 2: GUI
Use this path when an administrator prefers to restart the service through the console.
- Log on to the CA hostSign in to the certificate authority with administrative rights.
- Set the flagOpen an elevated command prompt and run certutil -setreg CA\InterfaceFlags +IF_ENFORCEENCRYPTICERTREQUEST.
- Open the Certification Authority consoleRun certsrv.msc.
- Restart the CA serviceRight-click the CA, choose All Tasks, then Stop Service, and again to Start Service.
- VerifyConfirm with certutil -getreg CA\InterfaceFlags that the flag is set.
Validation
- certutil -getreg CA\InterfaceFlags shows IF_ENFORCEENCRYPTICERTREQUEST set.
- Verify enrollment still succeeds for legitimate clients.
- Run a follow-up scan to confirm the finding is resolved.
Exceptions
- Document any legacy client that cannot use encrypted RPC, with owner and target date.
- Apply compensating relay controls while the exception stands.
- Track formal risk acceptance.
Evidence
- Registry export of CA\InterfaceFlags after remediation.
- Confirmation that enrollment still functions.
- Follow-up scan results confirming resolution.
Additional Guidance
ESC11 and ESC8 are both NTLM-relay-to-CA paths; address them together. Disabling web enrollment where it is not needed (ESC8) and enforcing RPC encryption (ESC11) close the two main relay surfaces of AD CS. Pair with required SMB and LDAP signing and Extended Protection for Authentication.
| Object | Type |
|---|---|
| paddyspub-RODC-CA | Certificate authority |
DES/RC4 Support Enabled
DES/RC4 Support Enabled
DES/RC4 Support Enabled
Outdated and insecure encryption algorithms, such as DES (Data Encryption Standard) and RC4, are still supported within the domain. These algorithms are vulnerable to cryptographic attacks, allowing attackers to exploit weaknesses in Kerberos authentication or intercept and decrypt sensitive data. Modern cryptographic standards should be used to prevent such vulnerabilities.
Attackers leverage weak encryption algorithms like DES or RC4 to intercept and decrypt sensitive data, such as authentication traffic. By cracking or manipulating these outdated encryption methods, they could gain unauthorized access to the network, escalate privileges, and maintain persistence within the organization.
Recommendation
Disable DES and RC4 encryption support where possible, update dependent services, and validate Kerberos uses stronger encryption.
Prerequisites
- Inventory affected accounts, service principals, and legacy clients that may rely on DES or RC4.
- Confirm AES keys are available for service accounts before disabling weak encryption.
- Coordinate testing with application and service owners in a pilot OU or controlled scope.
- Back up relevant GPOs and obtain change approval before production enforcement.
Remediation Objective
- Disable DES and RC4 Kerberos encryption types for user and service accounts.
- Enforce AES-128 and AES-256 as the only permitted Kerberos encryption algorithms.
- Reduce exposure to Kerberoasting and offline hash cracking techniques that target RC4-encrypted tickets.
- Align domain encryption configuration with current Microsoft security guidance.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Import the Active Directory module.
Import-Module ActiveDirectory
# Set Kerberos encryption type to AES only for a single account.
# Replace <SamAccountName> with the target account name.
Set-ADUser -Identity "<SamAccountName>" -KerberosEncryptionType AES128,AES256
# For computer accounts:
# Set-ADComputer -Identity "<ComputerName>" -KerberosEncryptionType AES128,AES256# Import the Active Directory module.
Import-Module ActiveDirectory
# Import a reviewed and approved list of accounts to update.
# Required CSV columns: SamAccountName, AccountType (User or Computer)
$Accounts = Import-Csv -Path ".\ApprovedAccounts.csv"
# Set AES-only Kerberos encryption for each listed account.
foreach ($Account in $Accounts) {
if ($Account.AccountType -eq "User") {
Set-ADUser -Identity $Account.SamAccountName `
-KerberosEncryptionType AES128,AES256 -WhatIf
} elseif ($Account.AccountType -eq "Computer") {
Set-ADComputer -Identity $Account.SamAccountName `
-KerberosEncryptionType AES128,AES256 -WhatIf
}
}
# Remove -WhatIf after reviewing output and confirming no service impact.Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open Group Policy Management ConsoleLaunch
gpmc.mscfrom an administrative workstation. - Edit the relevant GPORight-click the GPO linked to the Domain Controllers OU or the domain and select Edit.
- Navigate to Kerberos encryption settingsGo to Computer Configuration > Windows Settings > Security Settings > Local Policies > Security Options.
- Configure permitted encryption typesOpen 'Network security: Configure encryption types allowed for Kerberos' and enable only AES128_HMAC_SHA1 and AES256_HMAC_SHA1. Uncheck DES_CBC_CRC, DES_CBC_MD5, and RC4_HMAC_MD5.
- Apply the GPOClose the editor and Use the organization-approved policy refresh process on domain controllers after testing.
- ValidateConfirm that Kerberos tickets are issued using AES encryption only.
Validation
- Verify account-level encryption types: Get-ADUser -Identity <SamAccountName> -Properties KerberosEncryptionType
- Confirm Kerberos tickets are using AES: use klist.exe on a test client.
- Monitor domain controller authentication event logs (Event ID 4769) for any failures following the change.
- Confirm all dependent services are authenticating successfully.
- Run a follow-up scan to confirm the finding is resolved.
Exceptions
- Document the authentication dependency and business justification.
- Assign an owner and target remediation date.
- Apply compensating controls until remediation is complete.
Evidence
- Before/after export of account KerberosEncryptionType values.
- GPO backup before and after modification.
- Change ticket and approval record.
- klist output confirming AES ticket issuance.
- Event ID 4769 review confirming no authentication failures.
- Follow-up scan results confirming finding resolution.
Additional Guidance
DES and RC4 Kerberos encryption types are cryptographically weak and are primary targets for Kerberoasting attacks, where an attacker requests service tickets encrypted with the weaker algorithm and cracks them offline. Enforcing AES-128 and AES-256 eliminates this attack vector for accounts that are properly configured. Organizations should treat this change as part of a broader Kerberos hardening initiative alongside disabling NTLM and enforcing Kerberos pre-authentication.
Domain Controller with SMB Signing Not Required
Domain Controller with SMB Signing Not Required
Domain Controller with SMB Signing Not Required
SMB signing is not required on one or more domain controllers (the RequireSecuritySignature setting is zero). Without required SMB signing, an attacker who can intercept or coerce SMB authentication can relay it to the domain controller and act as the authenticating account. Domain controllers should require SMB signing to protect sensitive authentication and administrative traffic.
SMB signing is a primary defense against NTLM relay. When a domain controller does not require it, an attacker coerces authentication, for example with a printer-bug or PetitPotam style trigger, and relays that authentication over SMB to the domain controller, performing actions as the relayed identity.
Recommendation
Require SMB signing on all domain controllers via the Default Domain Controllers Policy.
Prerequisites
- Domain Admin rights to edit the Default Domain Controllers Policy.
- Confirm no legacy systems depend on unsigned SMB to the domain controllers.
- Obtain change control approval.
Remediation Objective
- Require SMB signing on all domain controllers (RequireSecuritySignature = 1).
- Enforce the setting through Group Policy so new domain controllers inherit it.
- Pair with required LDAP signing and channel binding to close the NTLM relay surface.
Remediation Path 1: Command-Line
Use this path to set the policy and confirm the effective value on each domain controller.
# The setting maps to the Default Domain Controllers Policy security option
# "Microsoft network server: Digitally sign communications (always)".
# Confirm the effective value on a domain controller:
Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanManServer\Parameters" -Name RequireSecuritySignature
# Expected after remediation: RequireSecuritySignature = 1# Check every domain controller for required SMB signing.
Import-Module ActiveDirectory
foreach ($dc in (Get-ADDomainController -Filter *)) {
Invoke-Command -ComputerName $dc.HostName -ScriptBlock {
(Get-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Services\LanManServer\Parameters').RequireSecuritySignature
}
}Remediation Path 2: GUI
Use this path to configure the policy through the Group Policy Management Console.
- Open Group Policy ManagementOn a domain controller or RSAT workstation, open gpmc.msc.
- Edit the Default Domain Controllers PolicyRight-click Default Domain Controllers Policy and select Edit.
- Navigate to Security OptionsComputer Configuration > Policies > Windows Settings > Security Settings > Local Policies > Security Options.
- Enable the settingSet "Microsoft network server: Digitally sign communications (always)" to Enabled.
- Apply the policyClose the editor and run gpupdate /force on the domain controllers, or wait for the next refresh.
Validation
- Confirm RequireSecuritySignature = 1 on each domain controller.
- Verify file and authentication services still function.
- Run a follow-up scan to confirm the finding is resolved.
Exceptions
- Document any legacy dependency that prevents enforcement, with owner and target date.
- Apply compensating controls such as network segmentation while the exception stands.
- Track formal risk acceptance.
Evidence
- Policy export showing the setting Enabled.
- Per-domain-controller RequireSecuritySignature values after remediation.
- Follow-up scan results confirming resolution.
Additional Guidance
Required SMB signing, required LDAP signing, and LDAP channel binding together form the core NTLM-relay posture for domain controllers. Enforce all three through Group Policy so new domain controllers inherit them automatically.
Domain Controllers with SMBv1 Enabled
Domain Controllers with SMBv1 Enabled
Domain Controllers with SMBv1 Enabled
SMBv1 is a legacy protocol that lacks modern security features and is considered weak and susceptible to downgrade attacks. Allowing SMBv1 support on domain controllers introduces integrity issues on critical assets.
SMBv1 enablement is easy to detect with open-source hacker toolsets. Once identified, it’s usually paired with network poisoning attacks to elevate privileges. This type of setting signals to the hacker that your environment is not hardened and there are likely multiple avenues for compromise.
Recommendation
Disable SMBv1 on domain controllers, confirm the feature is removed or disabled, and validate that any dependent legacy systems are addressed.
Prerequisites
- Domain Admin or local administrator rights on the domain controller.
- Inventory of systems and applications that may rely on SMBv1 completed before disabling.
- Change control approval obtained.
- Rollback plan documented (re-enabling SMBv1 via registry if compatibility issues arise).
Remediation Objective
- Disable SMBv1 on all domain controllers to eliminate the risk of exploitation via known SMBv1 vulnerabilities.
- Confirm no legacy application or printer requires SMBv1 before disabling.
- Verify domain controller functionality after the change.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Disable SMBv1 on a domain controller.
# This takes effect without a restart.
# Disable the SMBv1 server.
Set-SmbServerConfiguration -EnableSMB1Protocol $false -Force# Disable SMBv1 on multiple domain controllers remotely.
# CSV must contain a column named ServerName.
$Servers = Import-Csv -Path ".\ApprovedDomainControllers.csv"
foreach ($Server in $Servers) {
Invoke-Command -ComputerName $Server.ServerName -ScriptBlock {
Set-SmbServerConfiguration -EnableSMB1Protocol $false -Force -WhatIf
Write-Output "Processed: $env:COMPUTERNAME"
}
}
# Remove -WhatIf after the change has been reviewed and approved.Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Disable SMBv1 through Server ManagerOpen Server Manager, click Manage, then Remove Roles and Features. Navigate to Features and locate SMB 1.0/CIFS File Sharing Support. Clear the feature and complete the wizard.
- Restart during the maintenance windowRestart the domain controller during the approved maintenance window so the change takes effect.
- Review service healthAfter restart, use Server Manager and Event Viewer to confirm the server is healthy and that no SMBv1-dependent service issues are present.
Validation
- Confirm SMBv1 is disabled: Get-SmbServerConfiguration | Select EnableSMB1Protocol should return False.
- Verify domain controller services are operating normally after the restart.
- Test SMB connectivity from known client systems to confirm no disruption to authorized file sharing.
- Run Insight Recon AD against the same scope to confirm the finding is resolved.
Exceptions
- Document the dependency and business justification.
- Assign a server owner and target remediation date.
- Apply compensating controls and track risk acceptance.
Evidence
- Before-and-after Get-SmbServerConfiguration output.
- Change ticket and approval record.
- Server restart documentation.
- Post-restart service health confirmation.
- Follow-up scan results showing finding resolved.
Additional Guidance
SMBv1 has been deprecated by Microsoft since 2014 and is the protocol that enabled the WannaCry and NotPetya ransomware campaigns to propagate rapidly across enterprise networks. Organizations should treat SMBv1 disablement as a baseline hardening requirement for all Windows servers, starting with domain controllers.
Long-term, organizations should maintain an inventory of SMBv1-dependent devices and track them through a formal decommission or upgrade process. Network monitoring should be configured to alert on SMBv1 protocol usage to detect any undiscovered dependencies or exploitation attempts.
Exchange Not Hardened
Exchange Not Hardened
Exchange Not Hardened
An unhardened Microsoft Exchange installation, whether active or legacy, can introduce privilege escalation vulnerabilities by altering domain permissions. Attackers can exploit these misconfigurations to modify permissions, enabling them to perform DCSync attacks, which can extract credential hashes and potentially lead to full domain compromise.
Attackers use readily available tools like Mimikatz, PowerShell Empire, Cobalt Strike, or the Impacket toolset to exploit unhardened Exchange installations and perform DCSync attacks. This technique tricks domain controllers into replicating sensitive credential data, such as password hashes. Adversaries can either attempt to crack these hashes or pass them to move laterally within the network, particularly targeting the krbtgt account to execute Golden Ticket attacks.
Recommendation
Apply the identified Exchange hardening changes, validate secure configuration, and confirm mail services remain operational.
Prerequisites
- Exchange Administrator and Domain Administrator credentials required.
- Review the specific Exchange hardening issues identified from the report (e.g., RBAC misconfigurations.
- Back up current Exchange configuration and related AD permissions before modifications.
- Plan a maintenance window for changes that may affect mail flow or client connectivity.
Remediation Objective
- Remediate specific Exchange hardening deficiencies identified in the report.
- Remove overly permissive Exchange-related AD permissions (e.g., Exchange Windows Permissions WriteDACL on the domain object).
- Disable unnecessary legacy protocols (e.g., Basic Auth, NTLM on client access, SMTP open relay).
- Reduce the Exchange attack surface and eliminate known privilege escalation paths via Exchange AD permissions.
Remediation Path 1: Command-Line
Not applicable. A command-line remediation is not the preferred remediation method for this finding because Exchange hardening is version-specific and should follow the supported Exchange administrative tools, security baseline, and change plan rather than a generic command-line remediation.
Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open the Exchange Administrative CenterSign in to the Exchange Administrative Center with an approved Exchange administrator account.
- Review virtual directory authenticationNavigate to Servers > Virtual Directories and review authentication settings. Disable legacy authentication methods where they are not required and approved.
- Review receive connectorsNavigate to Mail Flow > Receive Connectors and confirm relay settings are restricted to approved systems and networks only.
- Review Exchange role groupsNavigate to Permissions > Admin Roles and remove unnecessary accounts from Exchange role groups.
- Review related Active Directory permissionsUse the approved Active Directory permission management console for the environment to review and remove overly permissive Exchange-related delegated permissions after service owner approval.
- Save and validateApply approved changes and confirm mail flow, administrative access, and required application integrations continue to function.
Validation
- Confirm overly permissive Exchange AD permissions have been removed from the domain object ACL.
- Verify legacy protocols are disabled on the intended virtual directories.
- Test mail flow and client connectivity after each change.
- Run a follow-up scan to confirm the finding is resolved.
Exceptions
- Document the business justification for any exception.
- Assign an owner and target remediation date.
- Apply compensating controls and track risk acceptance.
Evidence
- Exchange and AD configuration export before changes.
- Change ticket and approval record.
- Post-change ACL and configuration review confirming hardening is applied.
- Mail flow and client connectivity test results.
- Follow-up scan results confirming finding resolution.
Additional Guidance
Exchange Server has historically introduced several well-known privilege escalation paths in Active Directory, most notably the PrivExchange vulnerability which allowed a user with a mailbox to escalate to Domain Admin through Exchange's overly permissive WriteDACL rights on the domain object. Even in patched environments, Exchange AD permissions and protocol configurations require ongoing hardening attention. Organizations should follow Microsoft's Exchange security hardening guidance and apply all relevant mitigations regardless of patch status.
| Object | Type | Details |
|---|---|---|
| paddyspub.local | DomainRoot | |
PADDYSPUB\Exchange Windows Permissions | Group | WriteDacl on domain root |
Hardened UNC Paths Not Enforced
Hardened UNC Paths Not Enforced
Hardened UNC Paths Not Enforced
Hardened UNC paths are not enforced for SYSVOL and NETLOGON through Group Policy. Without these protections, clients may be more exposed to tampering or interception when retrieving Group Policy and logon script content from domain controllers. Hardened UNC path settings should require mutual authentication and integrity for these critical shares.
SYSVOL and NETLOGON are trusted sources for Group Policy and logon content across the domain. Without hardened UNC path requirements, attackers who can interfere with network traffic (fore example through ARP, LLMNR, or DNS spoofing) may have more opportunity to tamper with or impersonate these paths. This can affect many domain-joined systems because they routinely retrieve policy from these shares.
Recommendation
Enforce Hardened UNC Paths for SYSVOL and NETLOGON via domain-wide Group Policy.
Prerequisites
- Rights to edit and link a domain-level GPO.
- Confirmation that domain controllers support the required SMB features (all supported Windows Server versions do).
- Obtain change control approval.
Remediation Objective
- Configure Hardened UNC Paths for \\*\SYSVOL and \\*\NETLOGON requiring mutual authentication and integrity.
- Link the GPO so it applies to all domain-joined computers.
- Confirm clients receive and apply the setting.
Remediation Path 1: Command-Line
Hardened UNC Paths are a Group Policy setting; configure them centrally rather than per machine.
# Hardened UNC Paths are normally set via Group Policy (see the GUI steps). They write these registry
# values under HKLM, which a GPO should deploy to every machine rather than setting them host-by-host.
$Key = "HKLM:\Software\Policies\Microsoft\Windows\NetworkProvider\HardenedPaths"
New-Item -Path $Key -Force | Out-Null
New-ItemProperty -Path $Key -Name "\\*\SYSVOL" -Value "RequireMutualAuthentication=1, RequireIntegrity=1" -PropertyType String -Force
New-ItemProperty -Path $Key -Name "\\*\NETLOGON" -Value "RequireMutualAuthentication=1, RequireIntegrity=1" -PropertyType String -Force# Confirm the policy is present on a domain-joined machine.
Get-Item "HKLM:\Software\Policies\Microsoft\Windows\NetworkProvider\HardenedPaths" |
Select-Object -ExpandProperty PropertyRemediation Path 2: GUI
Use this path to configure the setting in Group Policy so it applies domain-wide.
- Open the Group Policy Management ConsoleLaunch gpmc.msc and edit (or create) a GPO linked at the domain.
- Navigate to Hardened UNC PathsGo to Computer Configuration > Policies > Administrative Templates > Network > Network Provider > Hardened UNC Paths.
- Enable the policySet the policy to Enabled.
- Add the SYSVOL and NETLOGON pathsAdd \\*\SYSVOL and \\*\NETLOGON, each with the value RequireMutualAuthentication=1, RequireIntegrity=1.
- Link and confirmEnsure the GPO is linked so all domain-joined computers receive it, then run gpupdate on a client to confirm.
Validation
- Confirm the Hardened UNC Paths policy is applied (gpresult or the registry key on a client).
- Verify clients still access SYSVOL and NETLOGON normally.
- Run a follow-up scan to confirm the finding is resolved.
Exceptions
- If a legacy client cannot meet the requirement, scope the exception narrowly and document it.
- Record owner and target date for any deferral.
- Track formal risk acceptance.
Evidence
- GPO settings report and a client-side registry/gpresult capture.
- Confirmation that policy and script delivery still function.
- Follow-up scan results confirming resolution.
Additional Guidance
Hardened UNC paths defend the delivery channel; also enable SMB signing domain-wide and reduce name-resolution spoofing by disabling LLMNR and NBT-NS, which are the usual ways an attacker gets into a position to man-in-the-middle SYSVOL traffic.
Insufficient Domain Controller Logging
Insufficient Domain Controller Logging
Insufficient Domain Controller Logging
Insufficient Domain Controller logging weakens the ability to detect, investigate, and respond to attacks on Active Directory. Without comprehensive logging, critical events, such as unauthorized access attempts or changes to privileged accounts, may go unnoticed, leaving the domain vulnerable to compromise. Furthermore, domain controller logs are essential for post-incident analysis, helping to assess the scope of a compromise and informing remediation efforts.
As organizations increasingly rely on Endpoint Detection and Response (EDR) tools, attacks on Active Directory are expected to rise. It is crucial to ensure that proper logging from domain controllers is sent to a SIEM and alerting is in place.
Recommendation
Enable comprehensive domain controller audit policies, confirm security event generation, and forward logs to centralized monitoring.
Prerequisites
- Domain Admin or Group Policy rights to configure audit policies.
- SIEM log collection capacity assessed.
- Change control approval obtained.
Remediation Objective
- Configure comprehensive advanced audit policies on domain controllers covering logon events, account management, privilege use, and directory service changes.
- Forward domain controller security event logs to a SIEM.
- Configure alerting for high-priority events such as Domain Admin logons and privileged account changes.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Enable key domain controller audit subcategories on the affected domain controller.
# Run from an elevated command prompt or PowerShell session.
auditpol /set /subcategory:"Directory Service Access" /success:enable /failure:enable
auditpol /set /subcategory:"Directory Service Changes" /success:enable /failure:enable
auditpol /set /subcategory:"Account Management" /success:enable /failure:enable
auditpol /set /subcategory:"Logon" /success:enable /failure:enable
# Optional: confirm the updated audit policy.
auditpol /get /category:*Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open Group Policy Management ConsoleLaunch
gpmc.mscfrom an administrative workstation. - Edit the Default Domain Controllers PolicyRight-click the Default Domain Controllers Policy and select Edit.
- Navigate to Advanced Audit Policy ConfigurationGo to Computer Configuration > Windows Settings > Security Settings > Advanced Audit Policy Configuration > Audit Policies.
- Configure key audit categoriesEnable success and failure auditing for: Account Logon, Account Management, DS Access, Logon/Logoff, Privilege Use, and Policy Change.
- Apply and forwardClose the editor. Configure Windows Event Forwarding or SIEM agents to collect Security event logs from domain controllers.
Validation
- Run auditpol /get /category:* on domain controllers to confirm audit policies are correctly configured.
- Verify Event IDs 4624, 4625, 4768, 4769, 4776, 4720, 4732 are being generated and forwarded to the SIEM.
- Confirm alerting is configured for high-priority events.
- Run Insight Recon AD against the same scope to confirm the finding is resolved.
Exceptions
- Document the dependency and business justification.
- Assign a server owner and target remediation date.
- Apply compensating controls and track risk acceptance.
Evidence
- auditpol /get output before and after confirming policy changes.
- GPO backup showing audit policy settings.
- SIEM log collection confirmation.
- Sample high-priority event log entries.
Additional Guidance
Comprehensive domain controller logging is the foundation of Active Directory incident detection and response. Without adequate logging, attackers can operate within the domain for extended periods without triggering any detectable evidence. Organizations should treat domain controller audit policy configuration as a baseline security requirement, not an optional enhancement.
Beyond enabling the policies, organizations must ensure that logs are forwarded to a SIEM and that alerting is configured for the events most indicative of attack activity. Log retention should be configured to retain domain controller security logs for at least 90 days to support incident investigations and forensic analysis.
Misconfigured enrollment agent templates in ADCS (ESC3)
Misconfigured enrollment agent templates in ADCS (ESC3)
Misconfigured enrollment agent templates in ADCS (ESC3)
Offering misconfigured certificate templates could permit attackers to request certificates on behalf of other users, allowing them to impersonate high-privileged accounts without needing their credentials. This vulnerability arises when certificate templates have overly permissive configurations that enable users to request certificates with an alternate identity, effectively granting unauthorized access.
Adversaries leverage this early in a compromise to impersonate higher-privileged accounts within a domain to quickly escalate their access. Using tools like Certipy or Certify, they identify vulnerable templates, request certificates with alternate identities, and use these certificates to authenticate as the impersonated users. This method provides a covert path to high-privilege access and control over domain resources, often evading detection due to the legitimate appearance of certificate-based authentication.
Recommendation
Restrict enrollment agent templates to approved PKI administrators, require appropriate controls, and validate unauthorized enrollment is blocked.
Prerequisites
- Locate the specific enrollment agent template and the overly permissive enrollment rights.
- Determine which accounts legitimately require enrollment agent certificate rights.
- Coordinate with the PKI team before modifying template permissions.
- Back up template configuration before changes.
Remediation Objective
- Restrict enrollment agent certificate template permissions to authorized PKI administrators only.
- Prevent unauthorized accounts from obtaining enrollment agent certificates that can be used to enroll on behalf of other users.
- Eliminate the ESC3 attack vector where a low-privileged user obtains an enrollment agent certificate and uses it to request certificates on behalf of privileged accounts.
- Ensure enrollment agent templates are accessible only to documented, authorized personnel.
Remediation Path 1: Command-Line
Not applicable. A command-line remediation is not the preferred remediation method for this finding because enrollment agent template remediation should be performed through the Certificate Templates Console and PKI governance process because improper command-line changes can disrupt certificate issuance workflows.
Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open Certificate Templates ConsoleRun
certtmpl.msc. - Locate the enrollment agent templateFind the template identified in the report (e.g., Enrollment Agent or a custom equivalent).
- Open template propertiesRight-click the template and select Properties.
- Restrict enrollment permissionsClick the Security tab. Remove Enroll rights from any accounts or groups that are not authorized enrollment agents. Add only the specific PKI administrator accounts or group that require enrollment agent rights.
- Configure CA enrollment agent restrictionsIn the Certification Authority console (
certsrv.msc), right-click the CA and select Properties. Click the Enrollment Agents tab and configure restrictions on which agents can enroll for which certificate templates and on behalf of which users. - Save and validateTest that authorized enrollment agents can still function and unauthorized accounts cannot obtain enrollment agent certificates.
Validation
- Confirm enrollment agent template permissions are restricted: review the Security tab in certtmpl.msc.
- Verify CA enrollment agent restrictions are configured: review the Enrollment Agents tab in certsrv.msc.
- Test that an unauthorized account cannot request an enrollment agent certificate.
- Run a follow-up scan to confirm the ESC3 finding is resolved.
Exceptions
- Document the certificate dependency and business justification.
- Assign a PKI owner and target remediation date.
- Restrict enrollment or access until remediation is complete.
Evidence
- Enrollment agent template configuration export before changes.
- Change ticket and approval record.
- certtmpl.msc and certsrv.msc configuration screenshots confirming restrictions.
- Test confirming unauthorized account cannot request an enrollment agent certificate.
- Follow-up scan results confirming finding resolution.
Additional Guidance
Limit enrollment permissions on certificate templates, enforce strict EKU restrictions to control usage, and regularly audit templates for misconfigurations. Monitoring certificate requests and minimizing permissions help to quickly detect and respond to any abuse. As multiple conditions must align for this vulnerability to be exploited, disrupting any one of these conditions may effectively prevent this escalation attack.
• Low-Privileged Enrollment Rights: The Certificate Authority (CA) permits enrollment requests from low-privileged groups, such as "Authenticated Users" or "Domain Users," which broadens the potential for misuse. • Lack of Approval Mechanisms: When certificates are issued without requiring manager approval or authorized signatures, the process lacks oversight, allowing unauthorized users to request high-privilege certificates without detection. • Loose EKU Settings: If a certificate template is configured with Certificate Request Agent OID (1.3.6.1.4.1.311.20.2.1), it allows requests on behalf of other users.
| Object | Type | Details |
|---|---|---|
| Wolf Cola Enroll | Certificate template | |
NT AUTHORITY\Authenticated Users | Group | Enroll |
Net Session Enumeration Allowed
Net Session Enumeration Allowed
Net Session Enumeration Allowed
When net session enumeration is allowed, any authenticated user is able to enumerate network sessions on Windows systems, including Domain Controllers. This can expose critical information, such as where administrative accounts are logged in, which attackers can leverage to map the network and target credentials using tools like BloodHound.
Once an authenticated stance has been achieved within the network, tools like BloodHound are used to identify exploitation pathways to increase their chances of elevating privileges and detecting misconfigurations.
Recommendation
Restrict NetSessionEnum access through policy, validate anonymous and low-privilege enumeration is blocked, and monitor for reconnaissance attempts.
Prerequisites
- Domain Admin or Group Policy rights to modify GPOs.
- Review of monitoring and administration tools that may use net session enumeration.
- Change control approval obtained.
Remediation Objective
- Configure the Restrict access to the pipe and share named NetSessionEnum policy to restrict anonymous and unauthenticated session enumeration.
- Restrict enumeration to administrators and system accounts only.
- Verify monitoring tools continue to function after the change.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Import the Group Policy module.
Import-Module GroupPolicy
# Replace <GPOName> with the approved workstation or server security baseline GPO.
# Disable anonymous enumeration of SAM accounts and shares.
Set-GPRegistryValue -Name "<GPOName>" `
-Key "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" `
-ValueName "RestrictAnonymousSAM" `
-Type DWord `
-Value 1
# Disable Everyone permissions applying to anonymous users.
Set-GPRegistryValue -Name "<GPOName>" `
-Key "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" `
-ValueName "EveryoneIncludesAnonymous" `
-Type DWord `
-Value 0
# Optional supporting command after the GPO is approved and linked.
gpupdate /forceRemediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open Group Policy Management ConsoleLaunch Group Policy Management Console from an administrative workstation.
- Edit the domain controller hardening GPOCreate or edit the approved GPO linked to the Domain Controllers OU.
- Navigate to the SAM remote call restrictionGo to Computer Configuration > Windows Settings > Security Settings > Local Policies > Security Options.
- Configure remote SAM accessOpen Network access: Restrict clients allowed to make remote calls to SAM and configure the setting so only approved administrative principals are allowed.
- Save and link the GPOClose the editor, confirm the GPO is linked to the intended OU, and confirm security filtering is scoped to the approved targets.
- Confirm policy application through GUI toolsUse Group Policy Management Console and Event Viewer to confirm the policy is applied and to monitor for application access issues.
Validation
- Confirm the restriction is applied by attempting net session enumeration from a non-administrative account (access should be denied).
- Verify monitoring tools continue to function correctly.
- Run a BloodHound collection and confirm session data is no longer exposed from domain controllers.
- Run Insight Recon AD against the same scope to confirm the finding is resolved.
Exceptions
- Document the business justification for any exception.
- Assign an owner and target remediation date.
- Apply compensating controls and track risk acceptance.
Evidence
- Registry or GPO configuration backup confirming the restriction is applied.
- BloodHound collection output before and after showing reduced session exposure.
- Change ticket and approval record.
- Follow-up scan results showing finding resolved.
Additional Guidance
Disabling net session enumeration is a low-impact change, as its only real function is to allow session information querying. It’s suggested that organizations run tools like BloodHound both before and after remediation to map the environment. By doing so, organizations can view the full picture of their privilege escalation pathways and see what a potential attacker would see. Organizations can then prioritize pathways the attacker is able to enumerate or resolve root cause issues. This exercise is a great opportunity to introduce honeypots and other defensive measures.
Risky GPO Assignment to Local Groups
Risky GPO Assignment to Local Groups
Risky GPO Assignment to Local Groups
Assigning Group Policy Objects (GPOs) to broad groups like "Everyone," "Authenticated Users," or "Domain Users" and granting access to privileged local groups, such as local administrators, can result in over-privileged access. This misconfiguration allows users with minimal permissions to perform actions typically reserved for administrators.
Attackers exploit this misconfiguration to elevate privileges and gain access to sensitive systems. This often leads to delegation and credential harvesting attacks, enabling lateral movement across the domain.
Recommendation
Remove broad or unauthorized GPO-based local group assignments and validate endpoint local administrators reflect approved membership.
Prerequisites
- Domain Administrator or GPO Administrator credentials required.
- Locate the specific GPO and the Restricted Groups or Local Users.
- Coordinate with the GPO owner and infrastructure teams before modifying.
- Back up affected GPO before making changes.
Remediation Objective
- Remove or restrict GPO-based assignments that place overly broad or unauthorized accounts in sensitive local groups on endpoints.
- Prevent non-administrative or risky accounts from being added to the local Administrators group on domain-joined systems via GPO.
- Ensure local group membership on endpoints reflects the principle of least privilege.
- Reduce the risk of lateral movement via compromised accounts with local administrator access on multiple systems.
Remediation Path 1: Command-Line
Not applicable. A command-line remediation is not the preferred remediation method for this finding because local group assignment changes should be made through Group Policy Management so the affected GPO, item-level targeting, and rollback behavior are controlled through the policy workflow.
Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open Group Policy Management ConsoleLaunch Group Policy Management Console from an administrative workstation.
- Locate and edit the affected GPORight-click the GPO identified in the report and select Edit.
- Navigate to local group assignment settingsFor Restricted Groups, go to Computer Configuration > Windows Settings > Security Settings > Restricted Groups. For Group Policy Preferences, go to Computer Configuration > Preferences > Control Panel Settings > Local Users and Groups.
- Open the affected local group assignmentSelect the entry that assigns accounts or groups to a sensitive local group, such as Administrators.
- Remove or correct the risky assignmentDelete the unauthorized entry or modify the membership so only approved principals are assigned.
- Save and confirm scopeClose the editor and confirm the GPO link, security filtering, and OU scope match the approved remediation plan.
Validation
- Confirm the GPO setting has been updated: review the GPO in GPMC.
- Run gpupdate /force on a test endpoint and verify the local group no longer contains the risky account: Get-LocalGroupMember -Group 'Administrators'
- Monitor for any access failures on affected endpoints following the change.
- Run a follow-up scan to confirm the finding is resolved.
Exceptions
- Document the policy dependency and business justification.
- Assign a policy owner and target remediation date.
- Apply compensating controls until the policy is corrected.
Evidence
- GPO backup before changes.
- Change ticket and approval record.
- Post-change GPMC configuration review confirming the risky assignment is removed.
- Local group membership test on a representative endpoint.
- Follow-up scan results confirming finding resolution.
Additional Guidance
GPO-based local group assignments via Restricted Groups or Local Users and Groups preferences are a powerful mechanism that can inadvertently grant widespread local administrator access across large numbers of endpoints. An overly broad assignment adds every account in a specified domain group to the local Administrators group on all computers in the GPO scope, dramatically expanding the lateral movement surface if any of those accounts is compromised.
To prevent recurrence, include local group assignment GPO settings in the periodic GPO security review. Establish a policy requiring formal approval and documented business justification for any GPO that assigns accounts to the local Administrators group. Use Microsoft LAPS or Windows LAPS to manage local administrator accounts rather than shared or broadly assigned local admin credentials.
| Object | Type |
|---|---|
| Default Domain Policy | Group policy |
Risky GPO Control Permissions
Risky GPO Control Permissions
Risky GPO Control Permissions
One or more Group Policy Objects grant edit or control permissions to non-standard principals. A user who can modify a GPO can change settings, scripts, or scheduled tasks that apply to systems and users within the GPO scope. GPO permissions should be reviewed carefully, especially for policies linked to domain controllers or broad organizational units.
GPO control is a powerful escalation path because policy can apply settings, scripts, scheduled tasks, and local rights across many systems. If a non-standard principal can edit or control a GPO, they may be able to affect every user or computer within scope. Broadly linked GPOs and domain controller policies are especially sensitive.
Recommendation
Remove GPO edit rights from non-default principals and restrict editing to authorized administrators.
Prerequisites
- Rights to modify GPO delegation.
- Knowledge of who legitimately administers each GPO.
- Obtain change control approval.
Remediation Objective
- Remove edit permissions from non-default principals on each affected GPO.
- Restrict GPO editing to authorized administrators.
- Investigate how the delegation was granted.
Remediation Path 1: Command-Line
Use this path to review and correct GPO delegation.
Import-Module GroupPolicy
# Review delegation on the GPO.
Get-GPPermission -Name "<GPO Display Name>" -All
# Remove a non-default principal's permissions.
Set-GPPermission -Name "<GPO Display Name>" -TargetName "CONTOSO\suspectAccount" -TargetType User -PermissionLevel None -Replace# List non-standard editors across all GPOs for review.
Import-Module GroupPolicy
Get-GPO -All | ForEach-Object {
$name = $_.DisplayName
Get-GPPermission -Name $name -All |
Where-Object { $_.Permission -match 'Edit|GpoEditDeleteModifySecurity' } |
Select-Object @{N='Gpo';E={$name}}, Trustee, Permission
}Remediation Path 2: GUI
Use this path to correct delegation through the console.
- Open the Group Policy Management ConsoleLaunch gpmc.msc from an administrative workstation.
- Locate the GPOSelect the GPO identified in the report.
- Open the Delegation tabClick the Delegation tab to see who has edit rights.
- Remove or lower the principalRemove the non-default principal, or set its permission to Read where only visibility is needed.
- ConfirmVerify only authorized administrators retain edit rights.
Validation
- Confirm only authorized administrators can edit each GPO.
- Verify legitimate GPO administration still functions.
- Run a follow-up scan to confirm the finding is resolved.
Exceptions
- If a team legitimately edits a GPO, scope the delegation to that GPO only and document it.
- Investigate any unexplained delegation as a potential compromise.
- Track formal risk acceptance.
Evidence
- GPO delegation export before and after.
- Investigation notes on how the delegation was granted.
- Follow-up scan results confirming resolution.
Additional Guidance
Prioritize GPOs linked to domain controllers or wide scopes, since those grant the broadest reach. Establish a small set of GPO administrators and review GPO delegation on the same cadence as privileged group membership.
| Object | Type |
|---|---|
| DeployFile | Group policy |
Risky GPO Login Script Permissions
Risky GPO Login Script Permissions
Risky GPO Login Script Permissions
Risky GPO login script permissions occur when low-privileged users, such as Authenticated Users or Everyone, have the ability to modify login scripts. This misconfiguration can allow attackers to insert or alter scripts that execute during user logins, potentially leading to remote code execution and persistence.
Attackers can modify login scripts with malicious code, allowing them to execute their payloads on multiple machines during user logins. Using tools like PowerShell or Group Policy Management Editor, the attacker could inject scripts that install malware, steal credentials, or establish persistent backdoors.
Recommendation
Restrict SYSVOL login script write permissions to approved administrators and validate standard users cannot modify deployed scripts.
Prerequisites
- Domain Administrator or GPO Administrator credentials required.
- Locate the specific login scripts referenced in affected GPOs and their file paths in SYSVOL.
- Determine which accounts legitimately require write access to the script files.
- Review the current NTFS ACLs on the script files.
- Coordinate with GPO and infrastructure teams before modifying permissions.
- Back up the script files and current ACL configuration before making changes.
- Obtain change control approval.
Remediation Objective
- Restrict write and modify permissions on GPO login script files in SYSVOL to authorized administrators only.
- Prevent non-administrative accounts from modifying login scripts that execute in user or computer security contexts.
- Eliminate the risk of script tampering leading to code execution on endpoints during logon.
- Align SYSVOL script file permissions with the principle of least privilege.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
Operational caution: Login script permission changes can affect user logon behavior. Test with a pilot user before broad rollout.
# Preview and apply an approved ACL change for one login script.
$ScriptPath = "<ScriptPath>"
$PrincipalName = "<PrincipalName>"
$ApprovedGroup = "<ApprovedGroup>"
Write-Output "Preview: remove $PrincipalName from $ScriptPath"
Write-Output "Preview: grant read and execute to $ApprovedGroup on $ScriptPath"
icacls $ScriptPath /remove:g $PrincipalName
icacls $ScriptPath /grant:r "$($ApprovedGroup):(RX)"# Import reviewed and approved login script ACL changes.
# CSV columns: ScriptPath, PrincipalName, ApprovedGroup.
$Scripts = Import-Csv -Path ".\ApprovedLoginScriptAclChanges.csv"
$PreviewOnly = $true
foreach ($Script in $Scripts) {
if ($PreviewOnly) {
Write-Output "Preview: remove $($Script.PrincipalName) from $($Script.ScriptPath)"
Write-Output "Preview: grant read and execute to $($Script.ApprovedGroup) on $($Script.ScriptPath)"
}
else {
icacls $Script.ScriptPath /remove:g $Script.PrincipalName
icacls $Script.ScriptPath /grant:r "$($Script.ApprovedGroup):(RX)"
}
}
# Set $PreviewOnly to $false only after the CSV has been reviewed and approved.Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open the approved file management interface or the SYSVOL shareNavigate to \\<DomainName>\SYSVOL\<DomainName>\scripts\ or the specific GPO script folder.
- Locate the affected script fileRight-click the file and select Properties.
- Review SecurityClick the Security tab, then Advanced to see all ACEs.
- Remove unauthorized write accessSelect the unauthorized entry that grants write or modify permissions and click Remove.
- Save and testClick OK. Test that the login script executes correctly from a test client workstation.
Validation
- Confirm the ACL on the script file no longer grants write access to unauthorized accounts: Get-Acl -Path <ScriptPath>
- Test login script execution on a test workstation to confirm the script still runs correctly.
- Run a follow-up scan to confirm the finding is resolved.
Exceptions
- Document the policy dependency and business justification.
- Assign a policy owner and target remediation date.
- Apply compensating controls until the policy is corrected.
Evidence
- ACL export for affected script files before changes.
- Change ticket and approval record.
- Post-change ACL review confirming unauthorized write access is removed.
- Login script execution test confirming normal operation.
- Follow-up scan results confirming finding resolution.
Additional Guidance
Ensure that only trusted administrative accounts have the necessary permissions to modify login scripts and their parent folders. Regularly audit GPO settings to identify and correct any improper permissions on login scripts. Additionally, monitoring for changes in script paths or permissions can help detect early signs of abuse or unauthorized access attempts.
| Object | Type | Details |
|---|---|---|
| DeployFile | Group policy | map-bar-drives.bat writable by NT AUTHORITY\Authenticated Users (full control) |
Computer with SMB Signing Not Required
Computer with SMB Signing Not Required
Computer with SMB Signing Not Required
No applied Group Policy requires SMB signing for domain-joined computers or servers. Member machines do not require SMB signing by default, so without an enforcing policy an attackers may be able to relay SMB authentication and perform actions as the authenticating user, especially where the user has local administrative rights. This finding is based on effective Group Policy; individual machines may still be configured locally.
SMB relay against workstations and servers is a common internal attack path. An attacker poisons name resolution or coerces a privileged account to authenticate, then relays that NTLM authentication over SMB to a server or workstation that does not require signing. If the relayed account is a local administrator on the target, the attacker runs code as SYSTEM. Because member devices default to not requiring signing, the absence of an enforcing GPO commonly leaves hosts vulnerable.
Recommendation
Require SMB signing for member servers and workstations via Group Policy.
Prerequisites
- Rights to create or edit a GPO linked to the member-device OUs.
- Confirm no legacy systems depend on unsigned SMB.
- Obtain change control approval.
Remediation Objective
- Require SMB signing for member servers and workstations (server and client RequireSecuritySignature = 1).
- Link the policy to the OUs that contain member machines, or the domain root excluding any documented incompatibility.
- Pair with required LDAP signing and channel binding.
Remediation Path 1: Command-Line
Use this path to confirm the effective setting on member devices.
# Confirm whether a member device requires SMB signing.
Get-SmbServerConfiguration | Select-Object RequireSecuritySignature
Get-SmbClientConfiguration | Select-Object RequireSecuritySignature
# Expected after remediation: both True.# Check required SMB signing across approved member devices (column: ComputerName).
$Items = Import-Csv -Path ".\ApprovedObjects.csv"
foreach ($Item in $Items) {
Invoke-Command -ComputerName $Item.ComputerName -ScriptBlock {
[pscustomobject]@{
Server = (Get-SmbServerConfiguration).RequireSecuritySignature
Client = (Get-SmbClientConfiguration).RequireSecuritySignature
}
}
}Remediation Path 2: GUI
Use this path to configure the policy through the Group Policy Management Console.
- Open Group Policy ManagementOn a domain controller or RSAT workstation, open gpmc.msc.
- Create or edit a GPOCreate a GPO (or edit an existing one) linked to the OUs that contain member servers and workstations.
- Navigate to Security OptionsComputer Configuration > Policies > Windows Settings > Security Settings > Local Policies > Security Options.
- Enable both settingsSet "Microsoft network server: Digitally sign communications (always)" and "Microsoft network client: Digitally sign communications (always)" to Enabled.
- Apply the policyRun gpupdate /force on sample devices or wait for the next refresh, then confirm.
Validation
- Confirm RequireSecuritySignature is True on sampled member servers and workstations.
- Verify file and authentication services still function.
- Run a follow-up scan to confirm the finding is resolved.
Exceptions
- Document any legacy dependency that prevents enforcement, with owner and target date.
- Apply compensating controls such as segmentation while the exception stands.
- Track formal risk acceptance.
Evidence
- Policy export showing both settings Enabled.
- Sampled member-device RequireSecuritySignature values after remediation.
- Follow-up scan results confirming resolution.
Additional Guidance
This check evaluates effective Group Policy, so it reflects intended configuration rather than the live state of each device; machines outside the GPO scope or with local overrides are not individually verified. Pair required SMB signing with required LDAP signing, LDAP channel binding, and Extended Protection for Authentication to close the main NTLM relay paths.
Unencrypted Certificate Enrollment in ADCS (ESC8)
Unencrypted Certificate Enrollment in ADCS (ESC8)
Unencrypted Certificate Enrollment in ADCS (ESC8)
Unencrypted Certificate Enrollment occurs when the certificate enrollment interface is accessible over HTTP instead of HTTPS. This exposes sensitive data, including certificate requests, to potential interception by attackers.
Adversaries exploit unencrypted certificate enrollment by relaying privileged credentials to gain control over the domain, commonly in combination with network poisoning attacks. Vulnerabilities like PetitPotam, which have become popular among ransomware groups, are frequently used to facilitate these attacks.
Recommendation
Require HTTPS for ADCS enrollment endpoints, validate certificate trust, and confirm enrollment traffic is no longer exposed in plaintext.
Prerequisites
- Enterprise Administrator or PKI Administrator credentials required, along with IIS Administrator access.
- Coordinate with the PKI and endpoint teams before making changes.
- Obtain change control approval.
- Plan a maintenance window to avoid disrupting active enrollment operations.
Remediation Objective
- Enforce HTTPS for the ADCS Certificate Enrollment Web Service and Certificate Enrollment Policy Web Service endpoints.
- Prevent certificate enrollment credentials and request data from being transmitted in plaintext over HTTP.
- Eliminate the ESC8 attack vector, which allows an attacker to relay NTLM authentication to the HTTP enrollment endpoint to obtain certificates on behalf of other accounts.
- Align ADCS web enrollment configuration with current Microsoft PKI security guidance.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Run on the ADCS/IIS server with administrative privileges.
# Confirm that an SSL certificate is bound to the CES/CEP IIS site before enforcing HTTPS.
# List current IIS site bindings:
Get-WebBinding -Name "Default Web Site"
# Require SSL on the CertSrv virtual directory:
Set-WebConfiguration -Filter "system.webServer/security/access" `
-PSPath "IIS:\Sites\Default Web Site\CertSrv" `
-Value @{ sslFlags = "Ssl" }# Import the required module for the remediation.
Import-Module ActiveDirectory
# Import a reviewed and approved list of affected objects to remediate.
$Items = Import-Csv -Path ".\ApprovedObjects.csv"
# Update only the objects included in the approved input file.
foreach ($Item in $Items) {
# Replace the placeholder command with the approved single-object remediation command for Unencrypted Certificate Enrollment in ADCS (ESC8).
# Use -WhatIf when supported before applying the change.
<Approved-Remediation-Command> -Identity $Item.DistinguishedName -WhatIf
}Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Bind an SSL certificate to the IIS siteOn the CA server, open the web server management console (inetmgr). Select the site hosting the enrollment endpoint (typically Default Web Site). Click Bindings, add an HTTPS binding on port 443, and select the provisioned SSL certificate.
- Require SSL on the CertSrv virtual directoryIn the web server management console, expand the site and select the CertSrv virtual directory. Double-click SSL Settings and check 'Require SSL'. Set client certificates to Ignore or Accept as appropriate.
- Update enrollment URLsIn the Certification Authority console (
certsrv.msc), go to Properties > Enrollment Agents or update Group Policy enrollment URLs to reference the HTTPS endpoint. - Test enrollmentAttempt a manual certificate enrollment from a test client using the HTTPS URL to confirm it succeeds.
- Revoke HTTP accessConsider disabling or removing the HTTP binding from the IIS site after confirming HTTPS enrollment is functional.
Validation
- Confirm the enrollment endpoint is accessible only via HTTPS: attempt to connect via http:// and confirm it redirects or is blocked.
- Verify the SSL certificate is valid and trusted by domain clients.
- Test a manual enrollment via the HTTPS URL to confirm successful operation.
- Run a follow-up scan to confirm the ESC8 finding is resolved.
Exceptions
- Document the certificate dependency and business justification.
- Assign a PKI owner and target remediation date.
- Restrict enrollment or access until remediation is complete.
Evidence
- IIS configuration backup before changes.
- SSL certificate details (thumbprint, expiry, issuing CA).
- Change ticket and approval record.
- IIS SSL Settings screenshot confirming Require SSL is enabled.
- Test enrollment confirmation via HTTPS.
- Follow-up scan results confirming finding resolution.
Additional Guidance
It's essential to enforce HTTPS for all certificate-related communications to protect sensitive credential exchanges. Regular audits should ensure that certificate enrollment services are secure, particularly those handling domain controller certificates, which are critical for domain security.
| Object | Type |
|---|---|
| paddyspub-RODC-CA | Certificate authority |
Unrestricted certificate template modification rights in ADCS (ESC4)
Unrestricted certificate template modification rights in ADCS (ESC4)
Unrestricted certificate template modification rights in ADCS (ESC4)
Certificate templates with over-permissioned write settings allow low-level users to modify template properties that can make them vulnerable to various privilege escalation attacks. This misuse could allow an attacker to create a certificate for any user, effectively impersonating them within the network and gaining unauthorized access.
Attackers typically exploit this to modify permissions on certificate templates to make them vulnerable to ESC1, which allows the attacker to perform privilege escalation to that of a domain administrator. This method is stealthy, as certificate-based authentication blends into normal operations, providing attackers with a hidden and resilient path for privilege escalation and persistence.
Recommendation
Remove unauthorized template modification rights, validate ownership and ACLs, and monitor for future certificate template permission drift.
Prerequisites
- Locate which accounts or groups have write, full control, or other modification rights on affected templ.
- Determine which accounts legitimately require template modification rights.
- Back up template ACL configuration before changes.
- Obtain change control approval.
Remediation Objective
- Remove unauthorized write and modification permissions from Active Directory Certificate Services certificate templates.
- Restrict template modification rights to authorized PKI administrators only.
- Prevent low-privileged accounts from modifying certificate templates to introduce ESC1, ESC2, or other misconfigurations.
- Eliminate the ESC4 attack vector where a low-privileged user with write access to a template can modify it to allow certificate-based privilege escalation.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Run from an elevated command prompt on an administrative workstation with RSAT installed.
# Replace <TemplateName> and <PrincipalName> with reviewed values.
dsacls "CN=<TemplateName>,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,<ForestRootDN>" /R "<PrincipalName>"
# Optional: grant approved read or enroll permissions only when required by the change plan.
# Replace <ApprovedGroup> with the approved security group.
dsacls "CN=<TemplateName>,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,<ForestRootDN>" /G "<ApprovedGroup>:GR"Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open Certificate Templates ConsoleRun
certtmpl.msc. - Locate the affected templateFind the template identified in the report.
- Open template propertiesRight-click the template and select Properties.
- Review SecurityClick the Security tab, then Advanced to see all ACEs.
- Remove unauthorized write permissionsLocate entries granting Write, Full Control, or WriteDACL to accounts that are not authorized PKI administrators. Select and remove each unauthorized entry.
- Save and validateClick OK. Confirm that authorized PKI administrators can still modify the template and that unauthorized accounts cannot.
Validation
- Confirm the updated template ACL via the Security tab in certtmpl.msc.
- Verify that an unauthorized account cannot modify the template (test with a non-admin account).
- Run a follow-up scan to confirm the ESC4 finding is resolved.
Exceptions
- Document the certificate dependency and business justification.
- Assign a PKI owner and target remediation date.
- Restrict enrollment or access until remediation is complete.
Evidence
- Template ACL export before changes.
- Change ticket and approval record.
- Post-change ACL review confirming unauthorized write permissions are removed.
- Test confirming unauthorized account cannot modify the template.
- Follow-up scan results confirming finding resolution.
Additional Guidance
Ensuring proper permissions are set by following least privilege principles. Regularly auditing these permissions and ensuring only trusted principals have write capabilities on certificate templates is essential. Additionally, monitoring certificate issuance for unusual activity can serve as an early indicator of potential compromise. Pay special attention to the following permissions: Owner, FullControl, WriteOwner, WriteDacl, WriteProperty. Having values such as “Domain Users, Domain Computers, Everyone, or Authenticated Users” is considered risky.
| Object | Type | Details |
|---|---|---|
| paddyspub-RODC-CA | Certificate authority | |
| Fight Milk Any Purpose | Certificate template | |
PADDYSPUB\Domain Users | Group | Full control |
| Wolf Cola Enroll | Certificate template | |
PADDYSPUB\Domain Users | Group | Write DACL |
Unrestricted certificate template with any purpose in ADCS (ESC2)
Unrestricted certificate template with any purpose in ADCS (ESC2)
Unrestricted certificate template with any purpose in ADCS (ESC2)
Permissive certificate templates in Active Directory Certificate Services (ADCS) can allow low-privileged users to request certificates with elevated permissions, potentially enabling them to impersonate high-privileged accounts, like domain administrators. This often occurs when templates are configured with the "Any Purpose" Extended Key Usage (EKU) or without any EKU at all.
Attackers could exploit this vulnerability in several ways. For instance, if they can specify a Subject Alternative Name (SAN), they may perform attacks similar to ESC1, where they generate certificates impersonating other accounts. This also allows them to request certificates on behalf of other users, as seen in ESC3. In rarer cases, the "Any Purpose" value has been leveraged to target applications like SAML and ADFS, enabling misuse in code signing and server authentication scenarios.
Recommendation
Remove Any Purpose or SubCA EKUs from vulnerable templates, restrict enrollment, and validate templates cannot issue broadly usable certificates.
Prerequisites
- Locate all services and clients consuming certificates issued from affected template.
- Coordinate with application and service owners before modifying the template.
- Back up the certificate template configuration before changes.
- Obtain change control approval.
Remediation Objective
- Remove the Any Purpose EKU or SubCA EKU from the affected certificate template.
- Restrict the template to specific, required EKUs that reflect its intended use.
- Prevent the template from being used to issue certificates that can be used for any purpose, including code signing and smart card logon.
- Eliminate the ESC2 attack vector where any authenticated user can request an unrestricted certificate.
Remediation Path 1: Command-Line
Not applicable. A command-line remediation is not the preferred remediation method for this finding because certificate template EKU and issuance changes should be made through the Certificate Templates Console or a documented PKI change process to reduce certificate issuance and compatibility risk.
Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open Certificate Templates ConsoleRun
certtmpl.msc. - Duplicate the template (if built-in)Right-click the affected template and select Duplicate Template.
- Open template propertiesRight-click the duplicated template and select Properties.
- Update EKU settingsClick the Extensions tab, select Application Policies, and click Edit. Remove the Any Purpose entry and add only the specific EKU(s) required for the template's intended use.
- Restrict enrollment permissionsOn the Security tab, confirm that enrollment rights are limited to the required principals.
- Publish the updated templateIn
certsrv.msc, add the new template to the CA and remove the old unrestricted template. - Trigger re-enrollmentConfigure autoenrollment via Group Policy to re-enroll consuming services.
Validation
- Confirm the updated template no longer includes Any Purpose EKU: certutil -template <TemplateName>
- Verify newly issued certificates have only the specific required EKUs.
- Confirm consuming services have re-enrolled successfully.
- Run a follow-up scan to confirm the ESC2 finding is resolved.
Exceptions
- Document the certificate dependency and business justification.
- Assign a PKI owner and target remediation date.
- Restrict enrollment or access until remediation is complete.
Evidence
- Template configuration export before changes.
- Change ticket and approval record.
- certutil output confirming updated EKU settings.
- Re-enrollment confirmation from consuming services.
- Follow-up scan results confirming finding resolution.
Additional Guidance
Configure certificate templates to limit permissions and specify purpose-specific EKUs. Regular audits of template permissions and close monitoring of certificate requests are essential for maintaining secure certificate issuance. As multiple conditions must align for this vulnerability to be exploited, disrupting any one of these conditions effectively prevents this escalation attack. • Low-Privileged Enrollment Rights: The Certificate Authority (CA) permits enrollment requests from low-privileged groups, such as "Authenticated Users" or "Domain Users," which broadens the potential for misuse. • Lack of Approval Mechanisms: When certificates are issued without requiring manager approval or authorized signatures, the process lacks oversight, allowing unauthorized users to request high-privilege certificates without detection. • Unrestricted EKU Settings: If a certificate template is configured with "Any Purpose" as the Extended Key Usage (EKU) or lacks an EKU designation, it allows users to request certificates without restriction, which can be exploited to gain escalated access.
| Object | Type | Details |
|---|---|---|
| Fight Milk Any Purpose | Certificate template | |
NT AUTHORITY\Authenticated Users | Group | Enroll |
PADDYSPUB\Domain Users | Account | Owner |
PADDYSPUB\Domain Users | Group | Full control |
Vulnerable PKI Object Access Control in ADCS (ESC5)
Vulnerable PKI Object Access Control in ADCS (ESC5)
Vulnerable PKI Object Access Control in ADCS (ESC5)
One or more PKI objects grant a non-default principal dangerous control (full control, write, write-permissions, or take-ownership). The affected objects include certificate authority objects and the Public Key Services containers, including NTAuthCertificates and the Certification Authorities store. Control over these objects lets an attacker alter the PKI itself, for example by publishing a rogue CA certificate into NTAuthCertificates so that certificates it issues are trusted for domain authentication.
An attacker who can write the NTAuthCertificates object adds an attacker-controlled CA certificate, after which any certificate that CA issues authenticates as any user. Control over the CA object, the Enrollment Services container, or the OID container similarly lets the attacker publish templates, link policies, or change CA settings.
Recommendation
Restrict write and control permissions on PKI objects to default privileged principals only.
Prerequisites
- Enterprise Admin rights (PKI objects live in the configuration partition).
- Identify the dangerous access control entries from the report.
- Obtain change control approval.
Remediation Objective
- Remove non-default full-control, write, write-DACL, and write-owner entries from the flagged PKI objects.
- Leave only SYSTEM, Administrators, Domain Admins, and Enterprise Admins.
- Pay special attention to NTAuthCertificates, whose contents are trusted for domain authentication forest-wide.
Remediation Path 1: Command-Line
Use this path to review and correct the ACL on each flagged PKI object.
# Review the ACL on a PKI object (configuration partition).
dsacls "<PkiObjectDN>"
# Remove a non-default principal's access.
dsacls "<PkiObjectDN>" /R "<DOMAIN\Principal>"# Remediate approved PKI objects (columns: PkiObjectDN, Principal).
$Items = Import-Csv -Path ".\ApprovedObjects.csv"
foreach ($Item in $Items) {
<Approved-Remediation-Command> $Item.PkiObjectDN /R $Item.Principal
}Remediation Path 2: GUI
Use this path to review the PKI object ACLs visually.
- Open ADSI EditRun adsiedit.msc and connect to the Configuration naming context.
- Locate Public Key ServicesBrowse to CN=Public Key Services, CN=Services.
- Open the object's SecurityRight-click the flagged object (for example NTAuthCertificates or a CA object), select Properties, and open the Security tab.
- Remove non-default entriesRemove any principal other than SYSTEM, Administrators, Domain Admins, and Enterprise Admins that holds full control, write, write-DACL, or write-owner.
- Save and repeatClick OK and repeat for each flagged PKI object.
Validation
- Re-review each object's ACL and confirm only default principals remain.
- Confirm enrollment and PKI operations still function.
- Run a follow-up scan to confirm the finding is resolved.
Exceptions
- If a principal legitimately administers PKI, scope its rights to the minimum required and document it.
- Record owner and target date for any temporary delay.
- Track formal risk acceptance.
Evidence
- ACL export for each PKI object before and after remediation.
- Confirmation that PKI enrollment still functions.
- Follow-up scan results confirming resolution.
Additional Guidance
Treat the entire Public Key Services branch of the configuration partition as Tier 0. Monitor changes to NTAuthCertificates and the CA objects, and review delegations granted to PKI operators over time.
| Object | Type |
|---|---|
| paddyspub-RODC-CA | Certificate authority |
Weak Certificate Encryption or Signing
Weak Certificate Encryption or Signing
Weak Certificate Encryption or Signing
Certificates should not use outdated or insufficiently strong encryption algorithms, such as RSA keys under 2048 bits. Certificates with weak encryption can be exploited by attackers, compromising the security of the systems that rely on them. RSA keys below 1024 bits are especially vulnerable.
Attackers exploit this by breaking weaker cryptographic protections to impersonate trusted services or decrypt sensitive data. Using tools like RsaCtfTool or John the Ripper, they can factorize short RSA keys, allowing them to forge signatures or eavesdrop on encrypted communications. This enables them to compromise secure channels, intercept confidential information, and gain unauthorized access to critical systems.
Recommendation
Update certificate templates to require strong algorithms and key sizes, then reissue certificates where weak cryptography remains in use.
Prerequisites
- Inventory all services, devices, and users consuming certificates issued from affected templates.
- Coordinate with application and service owners before modifying templates.
- Back up certificate template configurations before making changes.
- Obtain change control approval.
Remediation Objective
- Update ADCS certificate templates to require strong cryptographic algorithms (SHA-256 or higher, RSA 2048-bit minimum or equivalent).
- Revoke or phase out certificates issued under weak cryptographic settings.
- Ensure all new certificate issuances use templates configured with current algorithm standards.
- Reduce exposure to certificate forgery and signature weakness attacks.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Run from an elevated command prompt on the issuing Certification Authority.
# Configure the CA to use SHA256 for certificate signing where supported.
certutil -setreg CA\CSP\CNGHashAlgorithm SHA256
# Restart Certificate Services to apply the change.
net stop certsvc
net start certsvcRemediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open Certificate Templates ConsoleRun
certtmpl.mscfrom an administrative workstation. - Locate the affected templateFind the template identified in the report.
- Duplicate if neededIf the template is a built-in template, right-click and select Duplicate Template before making changes.
- Open template propertiesRight-click the template (or its duplicate) and select Properties.
- Update cryptographic settingsClick the Cryptography tab. Set the Minimum key size to 2048 or higher. Set the Request hash to SHA256 or stronger. Select an appropriate CSP or Key Storage Provider that supports strong algorithms.
- Publish the updated templateIn the Certification Authority console (
certsrv.msc), right-click Certificate Templates, select New > Certificate Template to Issue, and publish the updated template. - Trigger re-enrollmentConfigure autoenrollment via Group Policy or manually re-enroll consuming services.
Validation
- Confirm updated template settings using certutil -template <TemplateName>.
- Verify newly issued certificates use SHA-256 and meet minimum key size requirements.
- Confirm consuming services have re-enrolled and are using updated certificates.
- Run a follow-up scan to confirm the finding is resolved.
Exceptions
- Document the certificate dependency and business justification.
- Assign a PKI owner and target remediation date.
- Restrict enrollment or access until remediation is complete.
Evidence
- Certificate template configuration export before changes.
- Change ticket and approval record.
- certutil output confirming updated template cryptographic settings.
- Sample certificate inspection confirming new issuances use strong algorithms.
- Re-enrollment confirmation from consuming services.
- Follow-up scan results confirming finding resolution.
Additional Guidance
Weak certificate encryption increases the risk of certificate forgery or interception, which can undermine authentication and data integrity. Regularly audit certificates for strong encryption standards and replace any with weak algorithms, particularly in critical systems. Update certificates to use modern cryptographic standards, such as 2048-bit RSA or higher. Administrators should monitor upcoming security guidelines for future-proofing encryption practices.
| Object | Type | Details |
|---|---|---|
| CN=paddyspub-RODC-CA, DC=paddyspub, DC=local | Trusted root certificate | RSA 2048-bit key valid past 2031 (expires 2035-07-13) (Certification Authorities store) |
Weak Certificate Mapping Write Access in ADCS (ESC14)
Weak Certificate Mapping Write Access in ADCS (ESC14)
Weak Certificate Mapping Write Access in ADCS (ESC14)
One or more privileged objects allow non-standard principals to modify the altSecurityIdentities attribute. This attribute can define explicit certificate mappings for account authentication. Unauthorized write access may allow an attacker to map a certificate they control to a privileged account and authenticate as that account.
altSecurityIdentities maps a certificate to an account for authentication. Write access to it on a privileged object is a direct impersonation path: the attacker adds a mapping to a certificate they hold and logs in as the privileged user, with no password and no group change. It is a quiet escalation that ACL reviews focused on group membership routinely miss.
Recommendation
Remove non-default write access to altSecurityIdentities on privileged objects and audit for rogue mappings.
Prerequisites
- Domain Admin rights to modify the ACLs of the affected objects.
- Knowledge of any legitimate process that manages certificate mappings.
- Obtain change control approval.
Remediation Objective
- Remove write access to altSecurityIdentities from non-default principals on each privileged object.
- Audit altSecurityIdentities for unexpected mappings that may already have been added.
- Move toward strong (SID-based) certificate mapping.
Remediation Path 1: Command-Line
Use this path to review existing mappings and remove the dangerous write access.
REM Review the existing certificate mappings on the object.
dsacls "CN=<Object>,CN=Users,DC=contoso,DC=com"
REM Remove a non-default principal's ACEs (including write to altSecurityIdentities) from the object.
dsacls "CN=<Object>,CN=Users,DC=contoso,DC=com" /R "CONTOSO\suspectAccount"# Inspect altSecurityIdentities on a privileged object for unexpected certificate mappings.
Import-Module ActiveDirectory
Get-ADUser -Identity "<SamAccountName>" -Properties altSecurityIdentities |
Select-Object -ExpandProperty altSecurityIdentitiesRemediation Path 2: GUI
Use this path to remove the write access through the console.
- Open Active Directory Users and ComputersLaunch ADUC and enable Advanced Features from the View menu.
- Locate the privileged objectNavigate to the object identified in the report.
- Open Security > AdvancedRight-click the object, select Properties, open the Security tab, then Advanced.
- Remove the write permissionRemove the non-default principal, or remove its Write permission on the altSecurityIdentities attribute.
- Audit existing mappingsCheck the object's altSecurityIdentities value (Attribute Editor) for any mapping you did not create.
Validation
- Confirm the non-default principal can no longer write altSecurityIdentities.
- Confirm no unexpected certificate mappings remain on the object.
- Run a follow-up scan to confirm the finding is resolved.
Exceptions
- If a legitimate process manages certificate mappings, scope its rights to only the intended objects and document it.
- Investigate any unexpected mapping as a potential compromise.
- Track formal risk acceptance.
Evidence
- Security-descriptor export of each object before and after.
- The altSecurityIdentities value reviewed for rogue mappings.
- Follow-up scan results confirming resolution.
Additional Guidance
Enable strong certificate mapping (the SID security extension and the StrongCertificateBindingEnforcement registry setting on domain controllers) so that even an added explicit mapping cannot be used for weak-binding impersonation. Audit altSecurityIdentities changes on privileged objects as an early warning.
Weak Hashing Algorithm In Use
Weak Hashing Algorithm In Use
Weak Hashing Algorithm In Use
The use of weak hashing algorithms, such as MD2, MD4, or MD5, exposes systems to security risks, as these outdated algorithms have vulnerabilities that allow attackers to generate hash collisions more easily than with brute-force methods. This compromises the integrity of the system, making it easier for attackers to impersonate or tamper with data.
Attackers exploit weak hashing algorithms like MD2 and MD5 on intermediate and root certificates by creating forged certificates that appear valid, enabling man-in-the-middle (MitM) attacks and unauthorized data decryption. Using tools like Hashcat, they can crack these weak hashes to impersonate trusted entities, intercept sensitive communications, or issue fraudulent certificates. This compromise allows attackers to infiltrate secure channels and compromise the integrity of encrypted data across the organization.
Recommendation
Disable weak hashing or Kerberos encryption algorithms, rotate affected credentials where required, and validate supported authentication paths.
Prerequisites
- Inventory accounts, services, and legacy systems that may depend on MD5, RC4, or legacy Kerberos settings.
- Coordinate with application and service owners before enforcing stronger encryption.
- Confirm AES support for affected services in a pilot OU or non-production scope.
- Back up relevant GPOs and obtain change approval before production deployment.
Remediation Objective
- Disable or deprecate weak hashing algorithms (MD5, RC4-HMAC) used in Kerberos or NTLM authentication.
- Enforce stronger hashing algorithms such as AES-128 and AES-256 across the domain.
- Ensure Kerberos encryption types are explicitly configured to exclude weak algorithms.
- Reduce exposure to offline hash cracking and pass-the-hash attack techniques.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Import the Active Directory module.
Import-Module ActiveDirectory
# Set supported Kerberos encryption types for a single account, removing weak algorithms.
# Replace <SamAccountName> with the target account name.
Set-ADUser -Identity "<SamAccountName>" `
-KerberosEncryptionType AES128,AES256# Import the Active Directory module.
Import-Module ActiveDirectory
# Import a reviewed and approved list of accounts to remediate.
# Required CSV columns: SamAccountName
$Accounts = Import-Csv -Path ".\ApprovedAccounts.csv"
# Update supported Kerberos encryption types to AES only for each account.
foreach ($Account in $Accounts) {
Set-ADUser -Identity $Account.SamAccountName `
-KerberosEncryptionType AES128,AES256 -WhatIf
}
# Remove -WhatIf after reviewing the output and confirming no service impact.Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open Group Policy Management ConsoleLaunch
gpmc.mscfrom an administrative workstation. - Edit or create the relevant GPORight-click the GPO linked to domain controllers or the target OU and select Edit.
- Navigate to Kerberos encryption settingsGo to Computer Configuration > Windows Settings > Security Settings > Local Policies > Security Options.
- Configure the encryption type policyLocate 'Network security: Configure encryption types allowed for Kerberos' and enable only AES128_HMAC_SHA1 and AES256_HMAC_SHA1. Uncheck DES and RC4 options.
- Apply and save the GPOClose the editor and Use the organization-approved policy refresh process on targeted systems after testing.
- VerifyConfirm that affected accounts have KerberosEncryptionType set to AES values.
Validation
- Run a follow-up assessment scan to confirm the finding no longer appears.
- Verify targeted accounts have KerberosEncryptionType updated: Get-ADUser -Identity <SamAccountName> -Properties KerberosEncryptionType
- Confirm Kerberos tickets are being issued with AES encryption using klist.exe on a test workstation.
- Monitor authentication event logs on domain controllers (Event ID 4769) for any failures following the change.
- Validate that dependent services are authenticating successfully after enforcement.
Exceptions
- Document the authentication dependency and business justification.
- Assign an owner and target remediation date.
- Apply compensating controls until remediation is complete.
Evidence
- Before/after export of affected account KerberosEncryptionType values.
- GPO backup prior to any policy modification.
- Change ticket and approval record.
- PowerShell transcript of remediation commands.
- Results of klist verification and Event ID 4769 review.
- Validation output confirming AES encryption type enforcement.
- Follow-up scan results confirming finding resolution.
Additional Guidance
Weak hashing algorithms such as MD5 and RC4 expose authentication traffic to offline cracking and downgrade attacks. Organizations should enforce AES-128 and AES-256 as the only permitted Kerberos encryption types through Group Policy and validate that all accounts, services, and applications support these algorithms before enforcement. Legacy systems that cannot support AES should be prioritized for upgrade or decommission.
To prevent recurrence, include Kerberos encryption type requirements in account provisioning standards and service onboarding checklists. Review encryption type settings during periodic reviews and ensure new service accounts are never configured with RC4 or DES support.
| Object | Type | Details |
|---|---|---|
| Default Domain Policy | Group policy | CN=Paddy's Pub Legacy Code Signing, DC=paddyspub, DC=local uses sha1RSA |
Weak PowerShell Logging
Weak PowerShell Logging
Weak PowerShell Logging
Enabling PowerShell logging offers comprehensive insights into executed commands, the parameters used, and their execution context. This level of detail is critical for detecting malicious actions like security control bypasses, privilege escalations, and data exfiltration. Additionally, PowerShell logs are often essential for post-incident analysis, aiding in understanding the scope of a compromise and guiding appropriate remediation efforts.
PowerShell has become highly popular among hackers due to its extensive functionality, leading to the creation of numerous tools that leverage it. It is commonly used by malicious attackers as part of their toolkit.
Recommendation
Enable PowerShell Script Block Logging and related audit settings, forward events to monitoring, and validate command execution visibility.
Prerequisites
- Domain Admin or Group Policy rights to create and modify GPOs.
- SIEM or log collection capacity assessed to accommodate increased log volume.
- Change control approval obtained.
Remediation Objective
- Enable PowerShell Script Block Logging to capture the content of all executed scripts and commands.
- Enable PowerShell Module Logging to record pipeline execution details.
- Enable Protected Event Logging to protect script block log content from tampering.
- Forward PowerShell event logs to a SIEM and configure alerting for suspicious patterns.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Enable PowerShell logging via registry on a single system.
# The GPO method is preferred for domain-wide enforcement.
$PSLoggingPath = "HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell"
# Enable Script Block Logging.
$SBLPath = "$PSLoggingPath\ScriptBlockLogging"
New-Item -Path $SBLPath -Force | Out-Null
Set-ItemProperty -Path $SBLPath -Name "EnableScriptBlockLogging" -Value 1 -Type DWord
# Enable Module Logging.
$MLPath = "$PSLoggingPath\ModuleLogging"
New-Item -Path $MLPath -Force | Out-Null
Set-ItemProperty -Path $MLPath -Name "EnableModuleLogging" -Value 1 -Type DWord
Write-Output "PowerShell logging enabled on $env:COMPUTERNAME"Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open Group Policy Management ConsoleLaunch
gpmc.mscfrom an administrative workstation. - Create or edit a GPORight-click the domain or target OU and create or edit a security baseline GPO.
- Navigate to PowerShell logging settingsGo to Computer Configuration > Administrative Templates > Windows Components > Windows PowerShell.
- Enable Script Block LoggingDouble-click Turn on PowerShell Script Block Logging and set it to Enabled.
- Enable Module LoggingDouble-click Turn on Module Logging, set it to Enabled, and specify the approved module logging scope.
- Link and validate the GPOLink the GPO to the approved scope and confirm the settings appear in Group Policy Results.
Validation
- Confirm PowerShell Script Block Logging is enabled: check HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging\EnableScriptBlockLogging.
- Verify Event ID 4104 events are being generated in the Microsoft-Windows-PowerShell/Operational log.
- Confirm events are being forwarded to the SIEM.
- Run Insight Recon AD against the same scope to confirm the finding is resolved.
Exceptions
- Document the authentication dependency and business justification.
- Assign an owner and target remediation date.
- Apply compensating controls until remediation is complete.
Evidence
- GPO backup showing PowerShell logging settings.
- Sample Event ID 4104 output confirming script block logging is active.
- SIEM ingestion confirmation.
- Change ticket and approval record.
- Follow-up scan results showing finding resolved.
Additional Guidance
PowerShell logging is a foundational detective control for identifying malicious activity, as PowerShell is one of the most commonly used tools in post-exploitation attack chains. Script Block Logging captures the decoded content of all executed PowerShell commands, making it far more useful than basic command history and enabling detection of obfuscated or encoded scripts. Organizations should ensure PowerShell event logs are forwarded to a centralized SIEM with alerting configured for known malicious patterns, such as encoded command execution, AMSI bypass attempts, and offensive tooling signatures.
| Object | Type |
|---|---|
| Default Domain Policy | Group policy |
| Disable LLMNR | Group policy |
| KA | Group policy |
| KA-Computers | Group policy |
WSUS Certificate Pinning Disabled
WSUS Certificate Pinning Disabled
WSUS Certificate Pinning Disabled
When WSUS certificate pinning is disabled, the integrity of WSUS updates can be compromised, even if HTTPS is used. Attackers or proxies could intercept WSUS traffic, sign responses with their own certificates, and potentially inject malicious updates. Certificate pinning ensures that only trusted certificates from the WSUS server are accepted, preventing such attacks.
Attackers who can poison updates can rapidly move laterally within the domain and establish a strong persistence foothold.
Recommendation
Enable WSUS certificate pinning or equivalent trust validation and confirm clients reject untrusted update endpoints.
Prerequisites
- Server Administrator credentials on the WSUS server required.
- WSUS must already be configured to use HTTPS before certificate pinning can be meaningful.
- Confirm the WSUS SSL certificate is valid, trusted, and not expiring imminently.
- Obtain change control approval.
- No backup is strictly required, but document the current registry state before modification.
Remediation Objective
- Enable certificate pinning for WSUS update delivery to prevent man-in-the-middle attacks against the update channel.
- Ensure WSUS clients validate the server certificate before accepting updates.
- Reduce the risk of rogue update servers or tampered update packages being accepted by clients.
- Align WSUS configuration with Microsoft-recommended hardening guidance.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Run on the WSUS server or deploy via GPO to client systems.
# Enable certificate pinning for Windows Update by setting the required registry value.
# This enforces certificate validation for Windows Update communications.
Set-ItemProperty -Path "HKLM:\Software\Policies\Microsoft\Windows\WindowsUpdate" `
-Name "PinPolicyCertificateSubjectName" -Value "<CertificateSubjectName>" -Type String# Import the required module for the remediation.
Import-Module ActiveDirectory
# Import a reviewed and approved list of affected objects to remediate.
$Items = Import-Csv -Path ".\ApprovedObjects.csv"
# Update only the objects included in the approved input file.
foreach ($Item in $Items) {
# Replace the placeholder command with the approved single-object remediation command for WSUS Certificate Pinning Disabled.
# Use -WhatIf when supported before applying the change.
<Approved-Remediation-Command> -Identity $Item.DistinguishedName -WhatIf
}Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open Group Policy Management ConsoleLaunch
gpmc.mscfrom an administrative workstation. - Edit the relevant client GPORight-click the GPO linked to the OU containing WSUS clients and select Edit.
- Navigate to Windows Update policy settingsGo to Computer Configuration > Administrative Templates > Windows Components > Windows Update.
- Configure certificate pinningLocate the setting 'Allow signed updates from an intranet Microsoft update service location' and enable it. Additionally, configure the 'Specify the certificates to use for Windows Update' setting if available in your environment.
- Apply and testUse the organization-approved policy refresh process on a test client and confirm WSUS connectivity is maintained.
- Verify registry value on test clientConfirm the pinning registry key is present under HKLM:\Software\Policies\Microsoft\Windows\WindowsUpdate.
Validation
- Confirm the registry value for certificate pinning is present on test clients after GPO application.
- Verify WSUS client connectivity is unaffected: check Windows Update event logs for successful synchronization.
- Run gpresult /r on a test client to confirm the relevant GPO is applied.
- Run a follow-up scan to confirm the finding is resolved.
- Review Windows Update client logs for any certificate validation errors following the change.
Exceptions
- Document the certificate dependency and business justification.
- Assign a PKI owner and target remediation date.
- Restrict enrollment or access until remediation is complete.
Evidence
- Registry state export before and after change.
- GPO backup after modification.
- Change ticket and approval record.
- gpresult output confirming GPO application on test clients.
Additional Guidance
Certificate pinning for WSUS ensures that clients validate the WSUS server certificate before accepting any update package, preventing attackers from redirecting update traffic to a rogue server. This control is most effective when combined with HTTPS enforcement and is a recommended component of the Microsoft WSUS hardening guidance.
To prevent recurrence, include WSUS certificate pinning validation in the patch management configuration baseline and review certificate expiry proactively. Automate certificate renewal through the internal CA and update the pinning configuration as part of the renewal process to prevent authentication failures.
| Object | Type |
|---|---|
| Default Domain Policy | Group policy |
WSUS Configured With User Proxy
WSUS Configured With User Proxy
WSUS Configured With User Proxy
When WSUS (Windows Server Update Services) is configured to allow user proxies, unprivileged users may route update traffic through their own proxy settings, potentially exposing update requests to interception or manipulation. While modern updates restrict this behavior by default, certain Group Policy settings, such as SetProxyBehaviorForUpdateDetection, can re-enable user proxy usage. This misconfiguration could allow attackers to redirect or tamper with update traffic, leading to security bypasses or the injection of malicious updates.
Attackers exploit this configuration by intercepting or manipulating Windows Update traffic to deliver malicious updates or execute man-in-the-middle (MitM) attacks. Using tools like ntlmrelayx from Impacket, they can relay authentication requests and gain unauthorized access to systems by hijacking update communications. This misconfiguration allows attackers to inject malicious payloads into legitimate update processes, potentially leading to remote code execution, privilege escalation, and persistent access within the organization's network.
Recommendation
Reconfigure WSUS proxy settings to avoid user-context credentials and validate update synchronization succeeds with the approved configuration.
Prerequisites
- WSUS Administrator credentials required.
- Locate the current proxy configuration in the WSUS console.
- Determine the correct system-level proxy settings for the WSUS server's network environment.
- Coordinate with the network team to confirm the correct proxy address and port.
- Obtain change control approval.
Remediation Objective
- Reconfigure WSUS to use system-level or anonymous proxy settings instead of user-context credentials.
- Prevent WSUS from storing or using user account credentials for proxy authentication.
- Reduce the risk of proxy credential exposure through the WSUS configuration.
- Ensure WSUS proxy configuration follows the principle of least privilege.
Remediation Path 1: Command-Line
Not applicable. A command-line remediation is not the preferred remediation method for this finding because WSUS proxy remediation is environment-specific and should be performed through the WSUS console or approved server configuration management process to avoid disrupting synchronization.
Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open the WSUS administrative consoleLaunch the WSUS console from Server Manager or Start Menu.
- Navigate to OptionsIn the left pane, click Options.
- Open Update Source and Proxy ServerClick 'Update Source and Proxy Server' and select the Proxy Server tab.
- Review and update proxy settingsIf user credentials are configured, remove them. If the proxy supports anonymous or system-level authentication, clear the username and password fields.
- Test synchronizationClick OK and trigger a manual synchronization to confirm WSUS can still reach the upstream update server.
Validation
- Confirm proxy credentials are no longer stored in WSUS configuration.
- Verify WSUS upstream synchronization succeeds after the change.
- Run a follow-up scan to confirm the finding is resolved.
Exceptions
- Document the WSUS dependency and business justification.
- Assign a WSUS owner and target remediation date.
- Restrict access and monitor activity until remediation is complete.
Evidence
- WSUS proxy configuration export before changes.
- Change ticket and approval record.
- WSUS synchronization test confirming upstream connectivity.
- Follow-up scan results confirming finding resolution.
Additional Guidance
Threat actors can exploit misconfigured WSUS proxies to manipulate update distribution, potentially injecting malicious payloads into trusted update channels. This attack vector is particularly dangerous in environments where HTTP-based WSUS servers are used, as it increases the risk of man-in-the-middle (MitM) attacks. Organizations should restrict WSUS clients to system-level proxies and disable user-defined proxy settings to maintain the integrity of software updates. Continuous monitoring of WSUS configurations and update traffic can help detect anomalies before they become security threats.
| Object | Type |
|---|---|
| Default Domain Policy | Group policy |
WSUS Using HTTP
WSUS Using HTTP
WSUS Using HTTP
When WSUS is configured to use HTTP instead of HTTPS, update communications are vulnerable to interception and manipulation by attackers. Specialized toolsets exist that can exploit HTTP traffic to inject malicious updates, allowing attackers to compromise multiple systems across the network.
Attackers who can poison updates can rapidly move laterally within the domain and establish a strong persistence foothold.
Recommendation
Reconfigure WSUS to use HTTPS, deploy a trusted certificate, and validate clients receive updates over the secured channel.
Prerequisites
- Confirm the WSUS server FQDN, IIS site, ports, and current client GPO configuration.
- Provision a trusted SSL certificate for the WSUS IIS binding.
- Back up IIS configuration and WSUS-related GPO settings before changes.
- Coordinate with endpoint and patch management owners and use a maintenance window.
Remediation Objective
- Reconfigure the WSUS server to serve updates exclusively over HTTPS.
- Update all client Group Policy settings to reference the WSUS server using its HTTPS URL.
- Ensure the SSL certificate is trusted by all domain-joined clients.
- Eliminate the risk of WSUS traffic interception and update tampering via HTTP.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Run from an elevated command prompt on the WSUS server after the IIS SSL certificate binding is configured.
# Replace <WsusServerFqdn> with the approved WSUS server FQDN.
wsusutil.exe configuressl <WsusServerFqdn>
# Restart IIS after WSUS SSL configuration.
iisreset
# Optional: reset WSUS content metadata after configuration if required by the change plan.
wsusutil.exe resetRemediation Path 2: GUI
Not applicable. A GUI-only remediation path is not the preferred method for this finding because fully enabling HTTPS for WSUS commonly requires WSUS server configuration commands in addition to IIS, WSUS, and Group Policy console changes. Because the remediation is not complete through GUI tools alone, the command-line path should be used with change control.
Validation
- Confirm the WSUS IIS site is responding on port 8531 with a valid certificate: Test-NetConnection -ComputerName <WSUSServer> -Port 8531
- Verify the SSL certificate is trusted and not expired.
- Run gpupdate /force on a test client and confirm Windows Update agent contacts WSUS via HTTPS.
- Review WSUS server synchronization logs for errors after SSL enablement.
- Run a follow-up scan to confirm the finding is resolved.
- Monitor Windows Update client event logs (Event ID 16016) for connection errors.
Exceptions
- Document the WSUS dependency and business justification.
- Assign a WSUS owner and target remediation date.
- Restrict access and monitor activity until remediation is complete.
Evidence
- IIS configuration backup prior to changes.
- Screenshot or export of original WSUS HTTP URL in GPO settings.
- SSL certificate details (thumbprint, expiry, issuing CA).
- GPO backup after updating WSUS URL.
- Change ticket and approval record.
- Validation output confirming HTTPS connectivity.
- Test client Windows Update log confirming successful HTTPS communication.
- Follow-up scan results confirming finding resolution.
Additional Guidance
Enforcing HTTPS ensures update integrity and confidentiality in transit. Organizations should provision a certificate from an internal CA trusted by all domain clients and bind it to the WSUS IIS site before enabling SSL. To prevent recurrence, include WSUS TLS configuration in the server hardening baseline and validate HTTPS enforcement during periodic patch management audits. When deploying new WSUS infrastructure, require HTTPS as part of the build checklist and automate certificate renewal through the internal CA to avoid expiry-related outages.
| Object | Type |
|---|---|
| Default Domain Policy | Group policy |
Privileged Access Management
22 findings
Administrator Accounts May Not Practice Least Privilege
Administrator Accounts May Not Practice Least Privilege
Administrator Accounts May Not Practice Least Privilege
Administrator accounts that don’t adhere to the principle of least privilege (has an email address assigned) may be at risk of performing both routine and administrative tasks under the same account, increasing exposure to attacks. Without proper separation of privileges, a compromised admin account could lead to unauthorized access, lateral movement, or privilege escalation within the domain.
Attackers target privileged users to intercept credentials during routine tasks, such as browsing or email, using methods like phishing or pass-the-hash attacks. Compromising these users bypasses the need for further privilege escalation, as they already possess elevated access. Attackers specifically seek these users in configurations vulnerable to delegation attacks, which leave credentials at higher risk.
Recommendation
Reduce administrator account privileges to role-required access, remove unnecessary group memberships, and enforce recurring access reviews.
Prerequisites
- Determine the actual administrative role and minimum required access for each account.
- Coordinate with team leads and managers before modifying access.
- Assess whether role-based tiered administration or PAM tooling is feasible.
- Obtain change control approval for any access changes.
Remediation Objective
- Reduce privileged group membership for administrator accounts to the minimum required for their defined role.
- Separate day-to-day user accounts from privileged administrative accounts.
- Implement tiered administration where possible to limit the scope of any single account compromise.
- Ensure administrator accounts are used only for administrative tasks, not for browsing or email.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Import the Active Directory module.
Import-Module ActiveDirectory
# Review current members of Domain Admins.
Get-ADGroupMember -Identity "Domain Admins" -Recursive | Select-Object Name, SamAccountName, ObjectClass
# Remove an account from Domain Admins where a less privileged alternative is available.
# Replace <SamAccountName> with the account to remove.
Remove-ADGroupMember -Identity "Domain Admins" -Members "<SamAccountName>" -Confirm:$false -WhatIf
# Remove -WhatIf after confirming with the account owner and implementing alternatives.# Import the Active Directory module.
Import-Module ActiveDirectory
# Import a reviewed and approved list of accounts to remove from privileged groups.
# Required CSV columns: SamAccountName, GroupName
$Removals = Import-Csv -Path ".\ApprovedRemovals.csv"
foreach ($Removal in $Removals) {
Remove-ADGroupMember -Identity $Removal.GroupName `
-Members $Removal.SamAccountName -Confirm:$false -WhatIf
}
# Remove -WhatIf after reviewing output and confirming alternatives are in place.Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open Active Directory Users and ComputersLaunch
dsa.msc. - Review privileged group membershipNavigate to the relevant privileged groups (Domain Admins, Enterprise Admins, etc.) and review the Members tab.
- Locate over-privileged accountsFor each member, confirm their role and whether Domain Admin-level access is genuinely required.
- Remove unnecessary membershipFor accounts that do not require full Domain Admin access, click Remove on the Members tab after confirming appropriate alternatives are in place.
- Create role-specific alternatives if neededDelegate appropriate OU-level or role-specific permissions to replace Domain Admin where possible.
Validation
- Confirm updated group membership: Get-ADGroupMember -Identity 'Domain Admins'
- Verify that removed accounts can still perform their required administrative tasks via delegated access.
- Monitor for any service or task failures following the change.
- Run a follow-up scan to confirm the finding is resolved.
Exceptions
- Document the privileged access dependency and justification.
- Assign an owner and target remediation date.
- Apply compensating controls and track risk acceptance.
Evidence
- Privileged group membership export before changes.
- Role justification documentation for each account reviewed.
- Change ticket and approval record.
- PowerShell output confirming updated group membership.
- Confirmation from administrators that required tasks are still functional.
- Follow-up scan results confirming finding resolution.
Additional Guidance
Administrative users should separate day-to-day activity from privileged operations. Review accounts with email or routine-use indicators, enforce dedicated admin accounts, and monitor privileged account usage for interactive or non-administrative behavior.
Computer Account Detected in Privileged Group
Computer Account Detected in Privileged Group
Computer Account Detected in Privileged Group
Computer Account Detected in Privileged Group indicates that a computer account has been granted membership in a domain privileged group, such as Domain Admins. This poses a significant security risk, as compromising the computer account could allow an attacker to gain elevated privileges and control over critical domain resources. Normally, computer accounts should not have such elevated access.
Attackers often target computer accounts because they are typically less secure than user accounts, making them easier to compromise and maintain long-term persistence. Organizations frequently overlook securing these accounts, increasing the chances of a successful attack.
Recommendation
Remove computer accounts from privileged groups unless explicitly required, validate delegated access, and document any approved exception.
Prerequisites
- Domain Administrator or equivalent credentials required.
- Locate the computer account and the privileged group it is a member of.
- Determine whether the membership serves a legitimate operational purpose (e.g., backup software running as a service that requires domain-level access).
- Coordinate with the system owner or application team before removing membership.
- Obtain change control approval.
Remediation Objective
- Remove computer accounts from privileged AD groups where the membership is not operationally justified.
- Eliminate implicit elevated access for all services running on the affected computer.
- Reduce the risk of privilege escalation in the event the computer is compromised.
- Ensure privileged group membership is restricted to named user accounts with documented justification.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Import the Active Directory module.
Import-Module ActiveDirectory
# Remove a computer account from a privileged group.
# Replace <ComputerName> with the computer account name (without $).
# Replace <GroupName> with the privileged group name.
Remove-ADGroupMember -Identity "<GroupName>" -Members "<ComputerName>$" -Confirm:$false -WhatIf
# Remove -WhatIf after reviewing the output and confirming no service dependency.# Import the Active Directory module.
Import-Module ActiveDirectory
# Import a reviewed and approved list of computer accounts to remove from privileged groups.
# Required CSV columns: ComputerName, GroupName
$Removals = Import-Csv -Path ".\ApprovedRemovals.csv"
# Remove each computer account from its respective privileged group.
foreach ($Removal in $Removals) {
Remove-ADGroupMember -Identity $Removal.GroupName `
-Members ($Removal.ComputerName + "$") -Confirm:$false -WhatIf
}
# Remove -WhatIf after reviewing output.Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open Active Directory Users and ComputersLaunch
dsa.mscfrom an administrative workstation. - Locate the privileged groupNavigate to the container holding the privileged group identified in the report and open its Properties.
- Review the Members tabClick the Members tab and locate the computer account.
- Remove the computer accountSelect the computer account and click Remove.
- Save and validateClick OK. Confirm with the system owner that services on the affected computer are functioning normally.
Validation
- Confirm the computer account has been removed from the privileged group: Get-ADGroupMember -Identity '<GroupName>'
- Monitor services on the affected computer for any failures following the removal.
- Run a follow-up scan to confirm the finding is resolved.
Exceptions
- Document the privileged access dependency and justification.
- Assign an owner and target remediation date.
- Apply compensating controls and track risk acceptance.
Evidence
- Export of privileged group membership before changes.
- Change ticket and approval record.
- PowerShell output confirming computer account removal.
- Service monitoring confirming no failures on affected computer.
Additional Guidance
Computer accounts in privileged groups should be reviewed carefully because they can expand machine-level access in unexpected ways. Confirm the business purpose, remove unnecessary membership, and monitor privileged groups for non-user principals.
Custom "Pre-Windows 2000 Compatible Access" Group Membership
Custom "Pre-Windows 2000 Compatible Access" Group Membership
Custom "Pre-Windows 2000 Compatible Access" Group Membership
The "Pre-Windows 2000 Compatible Access" group grants access to certain legacy calls, which can expose vulnerabilities if improperly configured. Custom membership in this group, particularly the addition of accounts beyond the default settings, can increase the risk of unauthorized access to sensitive domain resources by exploiting legacy protocols.
Attackers leverage the "Pre-Windows 2000 Compatible Access" group to gain broad read access to directory information, including user and group details. They use this access to gather intelligence on the organization’s structure and potentially escalate privileges or craft targeted attacks.
Recently tools have been released focusing on exploiting Pre-Windows 2000 computer accounts, making it a common technique for gaining an initial foothold in a network. These accounts can sometimes obtain an authenticated domain account, as their default password is defaulted to the hostname in all lowercase letters. If these accounts were created but never used, they are likely still configured with this default setting.
Recommendation
Review custom Pre-Windows 2000 Compatible Access membership, remove unjustified entries, and document any approved legacy dependency.
Prerequisites
- Review the current membership of the Pre-Windows 2000 Compatible Access group to locate non-default or c.
- Consult with application and service owners to determine whether each custom member has a legitimate ope.
- Back up current group membership before making changes.
- Plan a rollback if application authentication failures occur after membership changes.
Remediation Objective
- Remove custom or non-default members from the Pre-Windows 2000 Compatible Access group that do not have a documented business justification.
- Prevent unauthorized or undocumented accounts from retaining broad AD read access via this legacy group.
- Ensure group membership reflects only operationally justified entries with documented approval.
- Reduce the risk of AD enumeration and unauthorized information gathering by limiting this group's effective membership.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Import the Active Directory module.
Import-Module ActiveDirectory
# Remove a custom member from the Pre-Windows 2000 Compatible Access group.
# Replace <MemberName> with the account or group to remove.
Remove-ADGroupMember -Identity "Pre-Windows 2000 Compatible Access" `
-Members "<MemberName>" -Confirm:$false -WhatIf
# Remove -WhatIf after reviewing output and confirming no application dependency.# Import the Active Directory module.
Import-Module ActiveDirectory
# Import a reviewed and approved list of custom members to remove.
# Required CSV columns: MemberName
$Members = Import-Csv -Path ".\ApprovedRemovals.csv"
# Remove each custom member from the Pre-Windows 2000 Compatible Access group.
foreach ($Member in $Members) {
Remove-ADGroupMember -Identity "Pre-Windows 2000 Compatible Access" `
-Members $Member.MemberName -Confirm:$false -WhatIf
}
# Remove -WhatIf after reviewing output.Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open Active Directory Users and ComputersLaunch
dsa.mscfrom an administrative workstation. - Locate the groupNavigate to Builtin and find the 'Pre-Windows 2000 Compatible Access' group.
- Open group propertiesRight-click the group and select Properties, then click the Members tab.
- Locate custom membersReview the membership list for any non-default or custom accounts or groups that are not operationally justified.
- Remove unjustified custom membersSelect the member and click Remove for each custom entry that lacks documented justification.
- Save and testClick OK. Monitor for application authentication failures following the change.
Validation
- Confirm updated group membership: Get-ADGroupMember -Identity 'Pre-Windows 2000 Compatible Access'
- Monitor application and service logs for authentication failures.
- Verify no new custom members have been added to the group after remediation.
- Run a follow-up scan to confirm the finding is resolved.
Exceptions
- Document the account dependency and business justification.
- Assign an owner and target remediation date.
- Apply compensating controls until remediation is complete.
Evidence
- Export of Pre-Windows 2000 Compatible Access group membership before changes.
- Change ticket and approval record.
- PowerShell output confirming updated membership after changes.
- Application and service monitoring confirming no authentication failures.
- Follow-up scan results confirming finding resolution.
Additional Guidance
Custom membership in the Pre-Windows 2000 Compatible Access group is frequently introduced without documented justification and can persist for years after the original need has passed. Each custom member retains the broad AD read access that this group provides, including the ability to enumerate user, computer, and group attributes that would otherwise require authenticated access. Organizations should treat this group as a zero-membership target and require formal justification for any entry.
| Object | Type |
|---|---|
| Pre-Windows 2000 Compatible Access | Group |
Dangerous Control Over Privileged Objects
Dangerous Control Over Privileged Objects
Dangerous Control Over Privileged Objects
One or more non-standard principals have dangerous control over privileged Active Directory objects. Permissions such as full control, ownership, password reset, or permission modification can provide administrative influence without visible privileged group membership. These hidden control paths, often referred to as "shadow admins" should be treated as privileged access and removed unless explicitly required.
Shadow admins are a favorite attacker foothold. A help-desk account with WriteDacl on Domain Admins, or the right to reset a Domain Admin's password, is functionally a Domain Admin yet appears in no privileged group listing. One ACL edit and they own the domain.
Recommendation
Remove admin-equivalent ACL access held by non-default principals over Tier 0 objects.
Prerequisites
- Domain Admin rights to modify the ACLs of Tier 0 objects.
- Knowledge of any legitimate delegation so it is not removed by mistake.
- Obtain change control approval.
Remediation Objective
- Remove the dangerous ACE for each non-default principal from the affected Tier 0 object.
- Restore the object to its default, AdminSDHolder-protected permissions.
- Investigate how the access was granted and whether it was abused.
Remediation Path 1: Command-Line
Use this path to review and remove the dangerous access.
REM Review who holds rights on a privileged object (example: Domain Admins).
dsacls "CN=Domain Admins,CN=Users,DC=contoso,DC=com"
REM Remove all ACEs for the non-default principal from that object.
dsacls "CN=Domain Admins,CN=Users,DC=contoso,DC=com" /R "CONTOSO\suspectAccount"# Inspect the security descriptor of a privileged object before editing it.
Import-Module ActiveDirectory
(Get-Acl "AD:CN=Domain Admins,CN=Users,DC=contoso,DC=com").Access |
Where-Object { $_.AccessControlType -eq 'Allow' } |
Select-Object IdentityReference, ActiveDirectoryRights, ObjectTypeRemediation Path 2: GUI
Use this path to remove the access through the console.
- Open Active Directory Users and ComputersLaunch ADUC and enable Advanced Features from the View menu.
- Locate the privileged objectNavigate to the Tier 0 object identified in the report.
- Open the Security tabRight-click the object, select Properties, and open the Security tab.
- Remove the non-default principalSelect the flagged principal and remove it, or remove only the dangerous permissions it holds.
- Confirm protectionVerify the object's permissions match the AdminSDHolder template and save.
Validation
- Confirm the non-default principal no longer holds control over the object.
- Verify legitimate administration still functions.
- Run a follow-up scan to confirm the finding is resolved.
Exceptions
- If the access is legitimate delegation, document the business reason and scope it as tightly as possible.
- Investigate any unexplained access as a potential compromise.
- Track formal risk acceptance.
Evidence
- Security-descriptor export of each object before and after.
- Investigation notes on how the access was granted.
- Follow-up scan results confirming resolution.
Additional Guidance
AdminSDHolder and the SDProp process re-stamp the ACLs of protected objects roughly every hour. After cleaning up an object, confirm it is covered by AdminSDHolder, and audit the AdminSDHolder object itself, since access granted there propagates to every privileged object.
| Object | Type |
|---|---|
| PADDYSPUB\Exchange Windows Permissions | Group |
| PADDYSPUB\Terminal Server License Servers | Group |
| PADDYSPUB\Cert Publishers | Group |
DCShadow Activity
DCShadow Activity
DCShadow Activity
DCShadow attacks allow adversaries with privileged domain access to register rogue domain controllers and push unauthorized changes into Active Directory. By doing so, attackers can inject malicious modifications while bypassing traditional logging and security monitoring. This technique enables them to create persistent backdoors, manipulate security settings, and stealthily escalate privileges without triggering standard detection mechanisms.
DCShadow is used to stealthily inject malicious changes into Active Directory by impersonating a domain controller. Attackers use tools like Mimikatz to register a rogue DC and push unauthorized modifications, such as adding privileged accounts or altering group memberships, without generating standard event logs. This technique allows attackers to maintain persistence, escalate privileges, and manipulate directory objects while bypassing traditional security monitoring.
Recommendation
Investigate suspected DCShadow activity, identify modified objects, remove rogue replication artifacts, and validate domain controller metadata integrity.
Prerequisites
- Treat the finding as a potential domain compromise and activate the incident response process.
- Ensure Domain Administrator or Enterprise Administrator access is available for containment actions.
- Preserve event logs, replication logs, SIEM data, and directory evidence before cleanup.
- Coordinate containment, credential rotation, and recovery steps with security operations and directory services.
Remediation Objective
- Detect and confirm DCShadow activity and locate all objects potentially modified by the rogue domain controller.
- Reset krbtgt and all privileged account passwords to invalidate any Kerberos tickets issued or manipulated during the attack window.
- Remove unauthorized replication ACEs from the AD schema and domain objects.
- Harden the environment to prevent future DCShadow attacks by restricting who can register a domain controller in Active Directory.
Remediation Path 1: Command-Line
Not applicable. Command-line remediation is not the preferred remediation method for this finding because DCShadow activity indicates potential compromise or unauthorized directory replication behavior. Remediation should follow the incident response process, including containment, credential rotation, forensic review, and controlled cleanup rather than a generic command-line change.
Remediation Path 2: GUI
Not applicable. A GUI-only remediation path is not the preferred method for this finding because DCShadow activity indicates potential Active Directory compromise and requires incident response, forensic review, password rotation, replication analysis, and controlled directory recovery. ADSI Edit may be used for a specific cleanup action, but it is not a complete GUI-only remediation path.
Validation
- Confirm no unauthorized nTDSDSA objects remain in the Configuration naming context.
- Verify krbtgt password has been reset twice and Kerberos tickets are re-issued correctly.
- Confirm all privileged account passwords have been reset.
- Review AD replication event logs for any ongoing unauthorized replication activity.
- Run a follow-up scan to confirm the finding is resolved.
Exceptions
- Do not approve operational exceptions for DCShadow indicators.
- Document any response delay with owner and target containment date.
- Track emergency risk acceptance until containment is complete.
Evidence
- Preserved forensic evidence (event logs, replication logs, SIEM exports) before remediation.
- nTDSDSA object review before and after cleanup.
- krbtgt password reset records (both resets).
- Privileged account password reset records.
- ACL review confirming no unauthorized DCSync or replication rights remain.
- Incident response report documenting the scope and timeline of the attack.
- Follow-up scan results confirming finding resolution.
Additional Guidance
DCShadow activity should be handled as an Active Directory compromise indicator rather than a routine configuration issue. Response should prioritize containment, evidence preservation, privileged credential rotation, replication review, and controlled cleanup of unauthorized directory changes.
To reduce recurrence, restrict who can create domain controller-related objects, monitor for new nTDSDSA objects, and alert on unexpected replication configuration changes. Any future domain controller deployment should follow a documented change process with directory services approval.
Disabled Privileged Accounts
Disabled Privileged Accounts
Disabled Privileged Accounts
Disabled privileged accounts present a security risk when they retain group memberships that grant elevated access. Attackers who gain control of such accounts can re-enable them and immediately inherit their previous privileges, bypassing normal escalation processes. Since disabled accounts are often overlooked in security monitoring, they are prime targets for exploitation, allowing adversaries to operate with high-level access while evading detection.
Attackers can exploit disabled privileged accounts by reactivating them or extracting their credentials for unauthorized access. Using tools like Mimikatz or BloodHound, they identify disabled accounts with historical administrative privileges and attempt to reset their passwords, modify account attributes, or leverage cached credentials for authentication. If security monitoring overlooks disabled accounts, attackers can use them for stealthy privilege escalation, lateral movement, and persistent access within the organization.
Recommendation
Remove privileged group memberships from disabled accounts and validate disabled objects no longer retain standing administrative access.
Prerequisites
- Domain Administrator credentials required.
- Confirm each disabled account is genuinely inactive and not held for retention or compliance purposes.
- Verify that no services, scheduled tasks, or applications reference the disabled accounts.
- Coordinate with HR or the account owner if the account was associated with a departed employee.
- Obtain change control approval before deleting accounts (less required for group membership removal only).
Remediation Objective
- Remove privileged group memberships from disabled accounts.
- Delete disabled privileged accounts that are confirmed as no longer required.
- Eliminate the risk of disabled privileged accounts being re-enabled and used for unauthorized access.
- Ensure the privileged group membership inventory reflects only active, operationally justified accounts.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Import the Active Directory module.
Import-Module ActiveDirectory
# Remove all privileged group memberships from a disabled account.
# Replace <SamAccountName> with the disabled account name.
$Account = Get-ADUser -Identity "<SamAccountName>" -Properties MemberOf
foreach ($Group in $Account.MemberOf) {
Remove-ADGroupMember -Identity $Group -Members "<SamAccountName>" -Confirm:$false -WhatIf
}
# Optionally delete the account after removing memberships:
# Remove-ADUser -Identity "<SamAccountName>" -Confirm:$false -WhatIf
# Remove -WhatIf after reviewing output and confirming with relevant stakeholders.# Import the Active Directory module.
Import-Module ActiveDirectory
# Import a reviewed and approved list of disabled privileged accounts.
# Required CSV columns: SamAccountName
$Accounts = Import-Csv -Path ".\ApprovedAccounts.csv"
foreach ($Account in $Accounts) {
$ADAccount = Get-ADUser -Identity $Account.SamAccountName -Properties MemberOf
foreach ($Group in $ADAccount.MemberOf) {
Remove-ADGroupMember -Identity $Group `
-Members $Account.SamAccountName -Confirm:$false -WhatIf
}
}
# Remove -WhatIf after reviewing output.Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open Active Directory Users and ComputersLaunch
dsa.msc. - Locate the disabled privileged accountNavigate to the OU containing the account.
- Review group membershipRight-click the account, select Properties, and click the Member Of tab. Remove all privileged group memberships.
- Delete the account if appropriateAfter removing memberships, right-click the account and select Delete if it is confirmed as no longer needed.
- Repeat for approved affected accountsComplete the same GUI process for each account listed in the approved remediation plan.
Validation
- Confirm privileged group memberships have been removed: Get-ADUser -Identity <SamAccountName> -Properties MemberOf
- Confirm accounts are deleted or remain disabled with no group memberships.
- Run a follow-up scan to confirm the finding is resolved.
Exceptions
- Document the privileged access dependency and justification.
- Assign an owner and target remediation date.
- Apply compensating controls and track risk acceptance.
Evidence
- Export of disabled privileged account group memberships before changes.
- Change ticket and approval record.
- PowerShell output confirming group memberships removed.
- Follow-up scan results confirming finding resolution.
Additional Guidance
Threat actors actively seek out disabled privileged accounts as a means of gaining privileged access within Active Directory. Once re-enabled, these accounts provide an immediate pathway to critical systems, often without triggering the same level of scrutiny as active privileged users. Organizations should maintain visibility over disabled accounts, especially those with administrative access, as they can become a silent entry point for attackers. Identify suspicious activity before it leads to a full domain compromise by performing regular audits and setting up automated alerts for privilege changes.
gMSA Not In Use
gMSA Not In Use
gMSA Not In Use
No group managed service accounts were identified in the domain. This may indicate that services continue to rely on traditional service accounts with static passwords, which are often difficult to rotate and protect. Group managed service accounts rotate their own passwords automatically and cannot be used for interactive logon. gMSAs should be considered for eligible services to reduce password management and credential theft risk.
Static service-account passwords are a perennial weak point: they are often weak, shared, embedded in scripts, and never rotated, which makes them ideal Kerberoasting targets and lateral-movement credentials.
Recommendation
Adopt group managed service accounts for service accounts so passwords rotate automatically.
Prerequisites
- Domain Admin (or delegated) rights to create the KDS root key and service accounts.
- An inventory of services running under static-password accounts.
- Obtain change control approval.
Remediation Objective
- Create the KDS root key for the forest (one-time).
- Create gMSAs and authorize only the hosts that run each service.
- Migrate services from static-password accounts to gMSAs.
Remediation Path 1: Command-Line
Use this path to enable gMSAs and create the first service accounts.
Import-Module ActiveDirectory
# One-time per forest. In production the key needs ~10 hours to replicate before use.
Add-KdsRootKey -EffectiveImmediately
# Create a gMSA and authorize the hosts that may retrieve its password (computer accounts end with $).
New-ADServiceAccount -Name "svc-example" -DNSHostName "svc-example.contoso.com" -PrincipalsAllowedToRetrieveManagedPassword "Host1$","Host2$"# Create gMSAs from an approved list (columns: Name, DnsHostName, AllowedHosts as semicolon-separated $ accounts).
Import-Module ActiveDirectory
$Items = Import-Csv -Path ".\ApprovedObjects.csv"
foreach ($Item in $Items) {
$hosts = $Item.AllowedHosts -split ';'
New-ADServiceAccount -Name $Item.Name -DNSHostName $Item.DnsHostName -PrincipalsAllowedToRetrieveManagedPassword $hosts -WhatIf
}Remediation Path 2: GUI
Use this path to create gMSAs through the management console.
- Create the KDS root keyOn a domain controller, run Add-KdsRootKey once for the forest (PowerShell; there is no console step for this).
- Open Active Directory Administrative CenterLaunch dsac.exe and browse to the Managed Service Accounts container.
- Create a new gMSACreate a group managed service account and set the hosts allowed to retrieve its password.
- Install on the service hostsOn each host, run Install-ADServiceAccount for the new gMSA.
- Migrate the serviceReconfigure the service to run as the gMSA (DOMAIN\svc-example$ with no password).
Validation
- Confirm gMSAs exist and services run under them.
- Confirm the static-password accounts they replaced are disabled or removed.
- Run a follow-up scan to confirm the finding is resolved.
Exceptions
- If a service cannot use a gMSA (no AES, non-Windows host), document it and use a long random password with periodic rotation.
- Record owner and target date for the migration.
- Track formal risk acceptance.
Evidence
- Inventory of gMSAs created and services migrated.
- Confirmation that static-password accounts were retired.
- Follow-up scan results confirming resolution.
Additional Guidance
Group managed service accounts are the standard remediation for static service-account passwords. Prioritize migrating privileged or internet-reachable service accounts first, and authorize each gMSA to only the specific hosts that run the service.
High Number of Privileged Users
High Number of Privileged Users
High Number of Privileged Users
Each privileged user account increases the attack surface. Organizations are urged to follow best practices such as least privilege, particularly involving administrative accounts.
Organizations that have fewer administrative accounts are more resistant to privilege escalation attacks such as token impersonation and pass-the-hash. When there are a multitude of privileged accounts, it’s easier to blend in with normal day-to-day operations, which allows for stealthier attacks and persistence.
Recommendation
Recertify privileged group membership, remove unnecessary administrative access, and establish recurring privileged access reviews.
Prerequisites
- Domain Admin rights to modify group memberships.
- Access recertification process initiated with business and IT stakeholders.
- Inventory of privileged group memberships and business justifications prepared.
- Change control approval obtained for each removal action.
- Rollback plan documented for any access removals that cause operational issues.
Remediation Objective
- Conduct a formal access recertification to locate accounts with unnecessary privileged group memberships.
- Remove accounts from privileged groups where membership is not justified by current role requirements.
- Implement a tiered administration model to isolate privileged access from daily user activity.
- Enforce just-in-time (JIT) access or PAM-managed shared accounts where possible.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Import the Active Directory module.
Import-Module ActiveDirectory
# Remove a user from a privileged group.
# Replace <SamAccountName> with the target account.
# Replace <GroupName> with the privileged group name (e.g., Domain Admins).
Remove-ADGroupMember -Identity "<GroupName>" -Members "<SamAccountName>" -Confirm:$false# Import the Active Directory module.
Import-Module ActiveDirectory
# Import a reviewed list of accounts to remove from privileged groups.
# CSV must contain columns: SamAccountName, GroupName
$Members = Import-Csv -Path ".\ApprovedRemovals.csv"
foreach ($Member in $Members) {
Remove-ADGroupMember -Identity $Member.GroupName -Members $Member.SamAccountName -Confirm:$false -WhatIf
Write-Output "Processed removal: $($Member.SamAccountName) from $($Member.GroupName)"
}
# Remove -WhatIf after reviewing.Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open Active Directory Users and ComputersLaunch
dsa.mscfrom an administrative workstation. - Locate the privileged groupNavigate to the appropriate container (typically CN=Users or a dedicated admin OU) and open the privileged group's properties.
- Review the Members tabLocate accounts whose membership is not justified by a current business or operational requirement.
- Remove unjustified membersSelect the accounts to remove and click Remove.
- Document each removalRecord each removal in the change management system with the approving manager's acknowledgment.
Validation
- Confirm group membership has been updated: Get-ADGroupMember -Identity <GroupName>.
- Verify removed users retain the access necessary for their role through appropriate non-privileged accounts.
- Run Insight Recon AD against the same scope to confirm the finding is resolved.
Exceptions
- Document the privileged access dependency and justification.
- Assign an owner and target remediation date.
- Apply compensating controls and track risk acceptance.
Evidence
- Before-and-after privileged group membership export.
- Access recertification sign-off records.
- Change ticket and approval record for each removal.
- Follow-up scan results showing finding resolved.
Additional Guidance
Restrict the number of privileged users, granting only essential personnel elevated rights. Implementing a tiered administration model can further protect these accounts by isolating their use and reducing the impact of compromise. Perform regular audits to review privileged accounts and ensure their necessity in the environment. Many organizations choose to practice Just-In-Time (JIT) provisioning or leverage PAM (Privileged Access Management) toolsets to manage shared or limited administrative accounts.
Non-administrative users can add computer accounts
Non-administrative users can add computer accounts
Non-administrative users can add computer accounts
By default, non-administrative users can add up to 10 computer accounts to the domain. This capability allows basic users to introduce uncontrolled machines into the domain, which can be exploited by attackers to gain unauthorized access or launch additional attacks.
Organizations are often over reliant on EDR (endpoint detection and response) tools which attackers can bypass by adding a malicious computer to the domain. These attacks often are conducted by adding a virtual machine to the environment and performing Kerberos-based attacks. These attacks become even more effective if they can poison network traffic and direct it to the malicious device.
Recommendation
Set MachineAccountQuota to zero, move computer joins into an approved process, and validate that non-administrators can no longer create computer accounts.
Prerequisites
- Domain Admin rights to modify the ms-DS-MachineAccountQuota attribute and Group Policy.
- Confirm that existing computer joining processes use administrative accounts and will not be impacted.
- Change control approval obtained.
Remediation Objective
- Set the ms-DS-MachineAccountQuota attribute on the domain root to 0 to prevent non-administrative users from adding computers.
- Configure Group Policy to restrict the Add workstations to domain privilege (SeMachineAccountPrivilege) to authorized administrators only.
- Confirm the change does not impact legitimate computer provisioning processes.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Import the Active Directory module.
Import-Module ActiveDirectory
# Set the ms-DS-MachineAccountQuota attribute to 0 on the domain root.
# Replace <DomainDN> with your domain distinguished name (e.g., DC=contoso,DC=com).
Set-ADDomain -Identity "<DomainDN>" -Replace @{"ms-DS-MachineAccountQuota" = "0"}Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open ADSI EditLaunch
adsiedit.mscfrom an administrative workstation. - Connect to the domain naming contextRight-click ADSI Edit, select Connect to, and choose Default naming context.
- Locate the domain root objectExpand the domain naming context and right-click the domain root object (e.g., DC=contoso,DC=com). Select Properties.
- Modify the ms-DS-MachineAccountQuota attributeScroll to ms-DS-MachineAccountQuota in the attribute list. Double-click to edit and set the value to 0. Click OK.
- Configure GPO to restrict SeMachineAccountPrivilegeOpen
gpmc.msc, create or edit a GPO linked to the domain. Navigate to Computer Configuration > Windows Settings > Security Settings > Local Policies > User Rights Assignment. Locate Add workstations to domain and configure it to include only Domain Admins or the appropriate administrative group.
Validation
- Confirm the ms-DS-MachineAccountQuota value is 0 using Get-ADDomain | Select AllowedDNSSuffixes or Get-ADObject.
- Attempt to join a computer to the domain with a non-administrative account to confirm the change is effective (access should be denied).
- Verify legitimate computer provisioning processes still function correctly.
- Run Insight Recon AD against the same scope to confirm the finding is resolved.
Exceptions
- Document the privileged access dependency and justification.
- Assign an owner and target remediation date.
- Apply compensating controls and track risk acceptance.
Evidence
- Before-and-after export of ms-DS-MachineAccountQuota attribute value.
- GPO backup and settings report for SeMachineAccountPrivilege.
- Change ticket and approval record.
- Validation test output confirming non-admin join is blocked.
Additional Guidance
Allowing non-administrative users to add computer accounts to the domain enables low-effort attack techniques that can bypass endpoint protections and be used as a foothold for further compromise. This capability should be restricted to dedicated administrative accounts as a baseline hardening measure.
Organizations should also monitor for anomalous computer account creation events (Event ID 4741) to detect any attempts to exploit this capability before it is fully restricted. Computer provisioning workflows should be reviewed to ensure they use dedicated administrative accounts with appropriately scoped permissions rather than broad domain admin rights.
Operator Groups In Use
Operator Groups In Use
Operator Groups In Use
Default Microsoft operator groups, such as "Account Operators" and "Server Operators," have elevated permissions that provide access to critical domain resources. Misuse of these groups can introduce privilege escalation pathways, allowing attackers to make unauthorized changes that compromise the security and stability of the domain.
Insider threats or malicious attackers who compromise accounts within operator groups often find it easy to escalate privileges that result in a full domain takeover.
Recommendation
Remove unnecessary accounts from built-in operator groups and replace standing membership with role-based or temporary administrative access.
Prerequisites
- Locate current members of built-in operator groups (Account Operators, Backup Operators, Print Operators.
- Coordinate with team leads and service owners to determine whether each member has a legitimate operatio.
- Back up current group membership before making changes.
- Obtain change control approval.
Remediation Objective
- Remove unnecessary accounts from built-in AD operator groups (Account Operators, Backup Operators, Print Operators, Server Operators).
- Eliminate implicit privileged access to domain controllers and AD objects granted by operator group membership.
- Replace operator group assignments with purpose-specific delegated permissions or role-based access where possible.
- Reduce the attack surface for privilege escalation through compromised operator group members.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Import the Active Directory module.
Import-Module ActiveDirectory
# Remove a specific member from an operator group.
# Replace <GroupName> with the operator group (e.g., "Account Operators", "Backup Operators").
# Replace <MemberName> with the account to remove.
Remove-ADGroupMember -Identity "<GroupName>" -Members "<MemberName>" -Confirm:$false -WhatIf
# Remove -WhatIf after reviewing output and confirming no operational dependency.# Import the Active Directory module.
Import-Module ActiveDirectory
# Import a reviewed and approved list of group membership removals.
# Required CSV columns: GroupName, MemberName
$Removals = Import-Csv -Path ".\ApprovedRemovals.csv"
# Remove each member from the specified operator group.
foreach ($Removal in $Removals) {
Remove-ADGroupMember -Identity $Removal.GroupName `
-Members $Removal.MemberName -Confirm:$false -WhatIf
}
# Remove -WhatIf after reviewing output.Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open Active Directory Users and ComputersLaunch
dsa.mscfrom an administrative workstation. - Navigate to the Builtin containerExpand the domain and select the Builtin OU.
- Open the operator groupRight-click the relevant operator group (e.g., Account Operators) and select Properties.
- Review Members tabClick Members and review current membership for accounts that do not require this level of access.
- Remove unnecessary membersSelect the account and click Remove for each member that lacks a documented operational justification.
- Repeat for each operator groupProcess all operator groups identified in the report.
- Save and validateClick OK and confirm with team leads that operational tasks are unaffected.
Validation
- Confirm updated membership for each operator group: Get-ADGroupMember -Identity '<GroupName>'
- Verify that removed accounts retain only the access required for their operational role.
- Monitor event logs for any access failures or complaints following the change.
- Run a follow-up scan to confirm the finding is resolved.
Exceptions
- Document the privileged access dependency and justification.
- Assign an owner and target remediation date.
- Apply compensating controls and track risk acceptance.
Evidence
- Export of operator group membership before changes.
- Change ticket and approval record.
- PowerShell output confirming updated membership after changes.
- Confirmation from team leads that operational tasks are unaffected.
- Follow-up scan results confirming finding resolution.
Additional Guidance
Built-in AD operator groups such as Account Operators, Backup Operators, Print Operators, and Server Operators carry implicit permissions that are often broader than expected, including the ability to manage accounts, perform privileged operations on domain controllers, and in some cases elevate to Domain Admin through indirect paths. These groups are frequently populated with accounts that no longer require this level of access or that were added without a formal review. Consider setting appropriate permissions over OUs or specific areas versus leveraging default Operator groups.
| Object | Type |
|---|---|
| Account Operators | Group |
| Print Operators | Group |
Over permissioned "Pre-Windows 2000 Compatible Access" Group
Over permissioned "Pre-Windows 2000 Compatible Access" Group
Over permissioned "Pre-Windows 2000 Compatible Access" Group
The "Pre-Windows 2000 Compatible Access" group grants access to certain legacy protocols and services. If this group includes "Authenticated Users," it increases the risk of exploitation through vulnerabilities in outdated protocols, potentially allowing unauthorized access to sensitive resources within the domain.
The "Pre-Windows 2000 Compatible Access" group is typically leveraged to gain broad read access to directory information, including user and group details. With access, attackers can gather intelligence on the organization’s structure and potentially escalate privileges, or craft targeted attacks, such as spear phishing or password attacks.
Recently, tools have been released to exploit Pre-Windows 2000 computer accounts, making it a common technique for gaining an initial foothold in a network. These accounts can sometimes be used to obtain an authenticated domain account, as their default password is defaulted to the hostname in all lowercase letters. If these accounts were created but never used, they are likely still configured with this default setting.
Recommendation
Remove unnecessary members from Pre-Windows 2000 Compatible Access and validate that legacy application access is not dependent on broad directory visibility.
Prerequisites
- Review the current membership of the Pre-Windows 2000 Compatible Access group.
- Locate any applications, services, or systems that may rely on the permissions granted by this group.
- Coordinate with application owners before removing membership.
- Plan a rollback if application authentication failures occur after membership changes.
Remediation Objective
- Remove unnecessary members from the Pre-Windows 2000 Compatible Access built-in group.
- Eliminate overly broad read access to Active Directory attributes granted by membership in this group.
- Reduce the risk of unauthenticated or low-privileged enumeration of AD objects.
- Align group membership with the principle of least privilege.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Import the Active Directory module.
Import-Module ActiveDirectory
# Remove a specific member from the Pre-Windows 2000 Compatible Access group.
# Replace <MemberName> with the account or group to remove.
Remove-ADGroupMember -Identity "Pre-Windows 2000 Compatible Access" `
-Members "<MemberName>" -Confirm:$false -WhatIf
# Remove -WhatIf after reviewing the output and confirming no application dependency.# Import the Active Directory module.
Import-Module ActiveDirectory
# Import a reviewed and approved list of members to remove.
# Required CSV columns: MemberName
$Members = Import-Csv -Path ".\ApprovedRemovals.csv"
# Remove each member from the Pre-Windows 2000 Compatible Access group.
foreach ($Member in $Members) {
Remove-ADGroupMember -Identity "Pre-Windows 2000 Compatible Access" `
-Members $Member.MemberName -Confirm:$false -WhatIf
}
# Remove -WhatIf after reviewing output.Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open Active Directory Users and ComputersLaunch
dsa.mscfrom an administrative workstation. - Locate the groupNavigate to Builtin and find the 'Pre-Windows 2000 Compatible Access' group.
- Open group propertiesRight-click the group and select Properties.
- Review Members tabClick the Members tab and review all listed members.
- Remove unnecessary membersSelect members that are not required for operational purposes and click Remove.
- Save and testClick OK. Validate that no dependent applications experience authentication failures following the change.
Validation
- Confirm updated group membership: Get-ADGroupMember -Identity 'Pre-Windows 2000 Compatible Access'
- Monitor application and service authentication logs for failures following the change.
- Verify that no new members have been added to the group following remediation.
- Run a follow-up scan to confirm the finding is resolved.
Exceptions
- Document the account dependency and business justification.
- Assign an owner and target remediation date.
- Apply compensating controls until remediation is complete.
Evidence
- Export of Pre-Windows 2000 Compatible Access group membership before changes.
- Change ticket and approval record.
- PowerShell output confirming updated membership after changes.
- Application and service monitoring results confirming no authentication failures.
- Follow-up scan results confirming finding resolution.
Additional Guidance
Review and restrict the membership of the "Pre-Windows 2000 Compatible Access" group, ensuring that unnecessary users, such as "Authenticated Users," are removed. While removing members can enhance security, be aware that it may impact legacy applications relying on this group. Conduct thorough testing before making changes to avoid disruptions to services.
| Object | Type |
|---|---|
| Pre-Windows 2000 Compatible Access | Group |
Privileged Users Allowed to Be Delegated
Privileged Users Allowed to Be Delegated
Privileged Users Allowed to Be Delegated
One or more privileged accounts are not protected from Kerberos delegation as they lack the "Account is sensitive and cannot be delegated" flag or not members of the Protected Users group. When these accounts authenticate to a service trusted for delegation, that service may be able to obtain and reuse their Kerberos tickets. For highly privileged accounts such as Domain Admins, compromise of a delegated service can lead to full domain compromise.
An attacker who controls, or can configure delegation on, a service that a privileged account authenticates to captures that account's forwarded ticket and replays it as the privileged user. Unconstrained delegation makes this trivial; resource-based and constrained delegation make it targeted.
Recommendation
Mark all privileged accounts as sensitive and cannot be delegated, or add them to Protected Users.
Prerequisites
- Rights to modify the privileged accounts.
- Confirm no privileged account legitimately requires delegation.
- Obtain change control approval.
Remediation Objective
- Set "Account is sensitive and cannot be delegated" on every privileged account.
- Where supported, add privileged accounts to the Protected Users group, which also blocks delegation.
- Verify the accounts are excluded from delegation.
Remediation Path 1: Command-Line
Use this path to mark accounts as sensitive across the privileged population.
Import-Module ActiveDirectory
Set-ADUser -Identity "<SamAccountName>" -AccountNotDelegated $true# Mark all members of a privileged group as sensitive (review membership first).
Import-Module ActiveDirectory
Get-ADGroupMember -Identity "Domain Admins" -Recursive |
Where-Object { $_.objectClass -eq 'user' } |
ForEach-Object { Set-ADUser -Identity $_.SID -AccountNotDelegated $true -WhatIf }Remediation Path 2: GUI
Use this path when changing a small number of accounts.
- Open Active Directory Users and ComputersLaunch ADUC from an administrative workstation.
- Locate the privileged accountNavigate to the account identified in the report.
- Open the Account tabRight-click the account, select Properties, and open the Account tab.
- Set the sensitive flagUnder Account options, check "Account is sensitive and cannot be delegated".
- Save the changeClick OK and repeat for each privileged account.
Validation
- Confirm AccountNotDelegated is true (or the account is in Protected Users).
- Verify the account still authenticates to required services.
- Run a follow-up scan to confirm the finding is resolved.
Exceptions
- If an account genuinely requires delegation, scope the delegation tightly and document the dependency.
- Record owner and target date for any temporary delay.
- Track formal risk acceptance.
Evidence
- Export of AccountNotDelegated / Protected Users membership before and after.
- Confirmation that authentication still works.
- Follow-up scan results confirming resolution.
Additional Guidance
Add privileged accounts to the Protected Users group where compatible (it blocks delegation, NTLM, and weak Kerberos ciphers), and keep the sensitive flag set on every Tier 0 account as a baseline.
Protected Users Group Not Utilized
Protected Users Group Not Utilized
Protected Users Group Not Utilized
The Protected Users group is designed to provide enhanced security for privileged accounts by limiting the use of vulnerable authentication methods like NTLM and reducing exposure to credential theft attacks. If privileged accounts are not members of this group, they remain susceptible to common attacks such as credential caching, Kerberos delegation, and weaker encryption algorithms.
Organizations that properly tier their environments and enforce best practices, like using the Protected Users group, are generally more difficult and time-consuming to compromise. This forces attackers to rely on alternative methods, such as social engineering.
Recommendation
Enroll appropriate privileged accounts in the Protected Users group, validate authentication compatibility, and document accounts that require exception.
Prerequisites
- Domain Admin rights to modify group membership.
- Review of all candidate accounts to confirm they are human user accounts and not service accounts.
- Testing environment available to validate no service disruptions.
- Notification to affected privileged users.
- Change control approval obtained.
Remediation Objective
- Locate privileged user accounts that should be enrolled in the Protected Users group.
- Exclude service accounts, accounts running services, and any account used for non-interactive authentication.
- Add the reviewed and approved accounts to the Protected Users group.
- Monitor for authentication issues after enrollment and document any service impacts.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Import the Active Directory module.
Import-Module ActiveDirectory
# Add a privileged user account to the Protected Users group.
# Replace <SamAccountName> with the target account.
Add-ADGroupMember -Identity "Protected Users" -Members "<SamAccountName>"# Import the Active Directory module.
Import-Module ActiveDirectory
# Import a reviewed list of privileged accounts to add to Protected Users.
# CSV must contain a column named SamAccountName.
# IMPORTANT: Only include human user accounts. Exclude service accounts.
$Accounts = Import-Csv -Path ".\ApprovedProtectedUsers.csv"
foreach ($Account in $Accounts) {
Add-ADGroupMember -Identity "Protected Users" -Members $Account.SamAccountName -WhatIf
Write-Output "Processed: $($Account.SamAccountName)"
}
# Remove -WhatIf after reviewing.Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open Active Directory Users and ComputersLaunch
dsa.mscfrom an administrative workstation. - Locate the Protected Users groupNavigate to CN=Users in the domain and open the Protected Users group.
- Add membersClick the Members tab and click Add. Enter the names of the privileged accounts to enroll.
- Save and monitorClick OK. Monitor the affected accounts for authentication issues in the days following enrollment.
Validation
- Confirm Protected Users group membership: Get-ADGroupMember -Identity 'Protected Users'.
- Verify affected accounts can authenticate via Kerberos and that no service disruptions occurred.
- Confirm NTLM authentication is blocked for Protected Users members by testing with an NTLM-only authentication attempt.
- Run Insight Recon AD against the same scope to confirm the finding is resolved.
Exceptions
- Document the privileged access dependency and justification.
- Assign an owner and target remediation date.
- Apply compensating controls and track risk acceptance.
Evidence
- Before-and-after Protected Users group membership export.
- Authentication test results confirming no service disruptions.
- Change ticket and approval record.
- Follow-up scan results showing finding resolved.
Additional Guidance
The Protected Users group is one of the most effective credential protection controls available in Active Directory, automatically blocking NTLM authentication, Kerberos delegation, DES and RC4 encryption. These protections significantly raise the cost of credential theft for the covered accounts. Do not add service accounts without testing, as Protected Users restrictions will likely disrupt service authentication. Prioritize human or user-related accounts when implementing this group as the impact should be lessened.
Risky AdminSDHolder Permissions
Risky AdminSDHolder Permissions
Risky AdminSDHolder Permissions
The AdminSDHolder object has non-standard permissions that grant dangerous control to one or more principals. Because AdminSDHolder permissions are periodically applied to protected administrative accounts and groups, improper access can propagate across privileged objects. This condition can create both privilege escalation and persistence risk within the domain.
AdminSDHolder is a classic persistence mechanism. An attacker with write access adds an access control entry granting themselves full control; within about an hour SDProp copies that entry onto Domain Admins, Administrators, and every other protected object. Even after defenders remove the access from those groups, SDProp re-adds it on the next cycle, so the backdoor survives cleanup until the AdminSDHolder ACL itself is fixed.
Recommendation
Restrict the AdminSDHolder ACL to default privileged principals only.
Prerequisites
- Domain Admin rights.
- Identify the non-default access control entries from the report.
- Obtain change control approval.
Remediation Objective
- Remove non-default full-control, write, write-DACL, and write-owner entries from the AdminSDHolder object.
- Leave only SYSTEM, Administrators, Domain Admins, and Enterprise Admins.
- Inspect current privileged accounts and groups for the same entry that SDProp may already have propagated.
Remediation Path 1: Command-Line
Use this path when remediating multiple entries or when changes need to be executed, exported, and tracked.
# Review the AdminSDHolder ACL.
dsacls "CN=AdminSDHolder,CN=System,<DomainDN>"
# Remove a non-default principal's permissions.
dsacls "CN=AdminSDHolder,CN=System,<DomainDN>" /R "<DOMAIN\Principal>"# Remove approved principals (column: Principal) from AdminSDHolder.
$Items = Import-Csv -Path ".\ApprovedObjects.csv"
foreach ($Item in $Items) {
<Approved-Remediation-Command> "CN=AdminSDHolder,CN=System,<DomainDN>" /R $Item.Principal
}Remediation Path 2: GUI
Use this path to review and correct the AdminSDHolder ACL visually.
- Open ADSI EditRun adsiedit.msc and connect to the Default naming context.
- Locate AdminSDHolderBrowse to CN=System, then CN=AdminSDHolder.
- Open SecurityRight-click AdminSDHolder, select Properties, and open the Security tab.
- Remove non-default entriesRemove any principal other than SYSTEM, Administrators, Domain Admins, and Enterprise Admins that holds full control, write, write-DACL, or write-owner.
- Save the changeClick OK; SDProp will propagate the corrected descriptor on its next cycle.
Validation
- Re-review the AdminSDHolder ACL and confirm only default principals remain.
- Inspect protected accounts and groups for the unwanted entry and remove it where propagated.
- Run a follow-up scan to confirm the finding is resolved.
Exceptions
- Do not approve permanent exceptions for write access by non-default principals.
- Document any temporary delay with owner and target date.
- Track formal risk acceptance until remediation is complete.
Evidence
- AdminSDHolder ACL export before and after remediation.
- List of protected objects checked for propagated entries.
- Follow-up scan results confirming resolution.
Additional Guidance
Because SDProp propagation makes AdminSDHolder a single point of control for all privileged objects, treat its ACL as Tier 0 and monitor it for change. Auditing directory service changes on the AdminSDHolder object detects both the initial tampering and ongoing persistence attempts.
| Object | Type |
|---|---|
| PADDYSPUB\Terminal Server License Servers | Group |
| PADDYSPUB\Cert Publishers | Group |
Risky DCSync Permissions
Risky DCSync Permissions
Risky DCSync Permissions
Non-standard users with DCSync permissions pose a significant security risk, as they can replicate credentials for any account within the domain, including domain administrators. Attackers who obtain these privileges can execute a DCSync attack, extracting NTLM password hashes and Kerberos keys without triggering typical authentication-based alerts. This access enables adversaries to conduct credential theft attacks such as Golden Ticket and Silver Ticket attacks, granting long-term control over Active Directory.
Accounts with DCSync permissions are highly sought after by attackers as they have the ability to impersonate a domain controller. Attackers use tools like Mimikatz or Impacket to perform a DCSync attack, tricking the domain controller into replicating password hashes. With these hashes, they can escalate privileges, create Golden Tickets, and maintain persistent control over the entire Active Directory environment. Once access is obtained, domain controller hashes can be remotely dumped, rendering many EDR defenses ineffective.
Recommendation
Remove unauthorized DCSync rights from the domain root and validate only approved replication principals can request directory replication data.
Prerequisites
- Domain Administrator or Enterprise Administrator credentials required.
- Locate all accounts or groups with Replicating Directory Changes and Replicating Directory Changes All rights on the domain object.
- Confirm which accounts legitimately require these rights (e.g., Azure AD Connect sync account, specific replication tools).
- Coordinate with the directory services team before removing any ACEs.
- Back up the domain object ACL before making any changes.
- Obtain change control approval.
Remediation Objective
- Remove unauthorized accounts or groups from the DCSync permission set (Replicating Directory Changes and Replicating Directory Changes All) on the Active Directory domain object.
- Ensure these rights are held only by domain controllers, the Azure AD Connect sync account (if applicable), and other explicitly authorized replication accounts.
- Eliminate the risk of credential harvesting via DCSync attacks by accounts that should not hold replication rights.
- Reduce the domain's exposure to full credential database extraction.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Import the Active Directory module.
Import-Module ActiveDirectory
# Remove approved unauthorized DCSync extended rights from the domain root object.
# Replace <DOMAIN\AccountOrGroup> with the account or group approved for removal.
$DomainDN = (Get-ADDomain).DistinguishedName
$Principal = "<DOMAIN\AccountOrGroup>"
$DCSyncRightGuids = @(
[Guid]"1131f6aa-9c07-11d1-f79f-00c04fc2dcd2",
[Guid]"1131f6ab-9c07-11d1-f79f-00c04fc2dcd2",
[Guid]"89e95b76-444d-4c62-991a-0facbeda640c"
)
$Acl = Get-Acl -Path ("AD:\" + $DomainDN)
$RulesToRemove = $Acl.Access | Where-Object {
$_.IdentityReference -eq $Principal -and $DCSyncRightGuids -contains $_.ObjectType
}
foreach ($Rule in $RulesToRemove) {
[void]$Acl.RemoveAccessRuleSpecific($Rule)
}
Set-Acl -Path ("AD:\" + $DomainDN) -AclObject $Acl# Import the Active Directory module.
Import-Module ActiveDirectory
# Import a reviewed and approved list of principals to remove from DCSync rights.
# Required CSV column: Principal
$Principals = Import-Csv -Path ".\ApprovedDCSyncRemovals.csv"
$DomainDN = (Get-ADDomain).DistinguishedName
$DCSyncRightGuids = @(
[Guid]"1131f6aa-9c07-11d1-f79f-00c04fc2dcd2",
[Guid]"1131f6ab-9c07-11d1-f79f-00c04fc2dcd2",
[Guid]"89e95b76-444d-4c62-991a-0facbeda640c"
)
foreach ($Item in $Principals) {
$Acl = Get-Acl -Path ("AD:\" + $DomainDN)
$RulesToRemove = $Acl.Access | Where-Object {
$_.IdentityReference -eq $Item.Principal -and $DCSyncRightGuids -contains $_.ObjectType
}
foreach ($Rule in $RulesToRemove) {
[void]$Acl.RemoveAccessRuleSpecific($Rule)
}
# Preview the affected principal before applying the ACL update.
Write-Output "Prepared DCSync permission removal for $($Item.Principal)"
# Remove the comment on the next line only after approval.
# Set-Acl -Path ("AD:\" + $DomainDN) -AclObject $Acl
}Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open ADSI EditLaunch
adsiedit.mscconnected to the Default Naming Context. - Locate the domain objectRight-click the domain root object (DC=<domain>,DC=<tld>) and select Properties.
- Review SecurityClick the Security tab, then Advanced to see all ACEs.
- Locate unauthorized DCSync entriesLook for entries with 'Replicating Directory Changes' or 'Replicating Directory Changes All' extended rights. Confirm each entry against the list of authorized replication accounts.
- Remove unauthorized entriesSelect the unauthorized ACE and click Remove.
- Save and validateClick OK. Monitor replication health after changes.
Validation
- Confirm unauthorized DCSync ACEs have been removed from the domain object ACL.
- Verify AD replication is healthy after changes: repadmin /replsummary
- Confirm Azure AD Connect or other sync tools are still functioning if applicable.
- Run a follow-up scan to confirm the finding is resolved.
Exceptions
- Document the dependency and business justification.
- Assign a server owner and target remediation date.
- Apply compensating controls and track risk acceptance.
Evidence
- Domain object ACL export before changes.
- Change ticket and approval record.
- Post-change ACL review confirming unauthorized DCSync ACEs are removed.
- repadmin /replsummary output confirming replication health.
- Azure AD Connect sync validation if applicable.
- Follow-up scan results confirming finding resolution.
Additional Guidance
DCSync rights should be restricted to domain controllers and explicitly approved replication or directory synchronization accounts. An account with these rights can request password data from the domain, which can expose krbtgt and privileged account hashes without interactive access to a domain controller.
Review DCSync permissions during privileged access reviews and after any directory synchronization, backup, or monitoring tool deployment. Treat new or unexpected DCSync permissions as a high-priority access governance event that requires owner approval, documented justification, and follow-up validation.
| Object | Type |
|---|---|
| PADDYSPUB\Exchange Windows Permissions | Group |
RODC Privileged Group Not Protected
RODC Privileged Group Not Protected
RODC Privileged Group Not Protected
When the RODC Privileged Group is not protected, privileged credentials can be replicated to Read-Only Domain Controllers (RODCs), increasing the risk of credential theft. RODCs are often deployed in less secure environments, making them more vulnerable to attacks. If privileged accounts are allowed in the Password Replication Policy, attackers can steal these credentials and gain elevated access to the domain.
Adversaries often target Read-Only Domain Controllers (RODCs) because they are frequently misconfigured or poorly maintained. A common attack method is to gain access and dump memory to retrieve account information, which can then be used to elevate privileges.
Recommendation
Add privileged groups to the denied RODC password replication policy and validate that privileged credentials cannot be cached.
Prerequisites
- Domain Administrator or equivalent credentials required.
- Locate which privileged groups (e.g., Domain Admins, Enterprise Admins, Schema Admins) are not currently listed in the RODC Denied Password Replication Policy.
- Review any RODC-specific password replication group configurations in use.
- Obtain change control approval.
- No service impact is expected, but validate with the directory services team before modifying RODC password replication settings.
Remediation Objective
- Add all privileged groups and sensitive accounts to the Denied RODC Password Replication Policy.
- Prevent privileged credentials from being cached on Read-Only Domain Controllers.
- Reduce the risk of privileged credential theft from physically compromised or remote RODCs.
- Align RODC password replication policy with the principle of least privilege.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Import the Active Directory module.
Import-Module ActiveDirectory
# Add a privileged group to the Denied Password Replication Policy on the RODC.
# Replace <RODCName> with the RODC computer account name.
# Replace <GroupName> with the privileged group to deny.
Set-ADAccountControl -Identity "<RODCName>" -DoesNotRequirePreAuth $false
# Use the RODC password replication policy cmdlet.
# Add a group to the Denied list on the RODC.
Add-ADGroupMember -Identity "Denied RODC Password Replication Group" -Members "<GroupName>"# Import the Active Directory module.
Import-Module ActiveDirectory
# Import a reviewed and approved list of groups to add to the Denied RODC Password Replication Policy.
# Required CSV columns: GroupName
$Groups = Import-Csv -Path ".\ApprovedGroups.csv"
# Add each group to the Denied RODC Password Replication Group.
foreach ($Group in $Groups) {
Add-ADGroupMember -Identity "Denied RODC Password Replication Group" `
-Members $Group.GroupName -WhatIf
}
# Remove -WhatIf after reviewing the output.Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open Active Directory Users and ComputersLaunch
dsa.mscfrom an administrative workstation. - Locate the RODC computer accountNavigate to the Domain Controllers OU and right-click the affected RODC. Select Properties.
- Open the Password Replication Policy tabClick the Password Replication Policy tab.
- Review the Denied listConfirm that all privileged groups (Domain Admins, Enterprise Admins, Schema Admins, Group Policy Creator Owners, and equivalent) are listed in the Denied section.
- Add missing groupsClick Add, select Deny, and add any privileged groups not already listed.
- Save and closeClick OK to apply the changes.
Validation
- Confirm privileged groups appear in the Denied RODC Password Replication Policy via ADUC (Properties > Password Replication Policy on the RODC).
- Verify via PowerShell: Get-ADDomainController -Identity <RODCName> | Select-Object -ExpandProperty DeniedPasswordReplicationPolicy
- Confirm no privileged credentials are cached on the RODC: review the Revealed Passwords tab in ADUC for the RODC.
- Run a follow-up scan to confirm the finding is resolved.
Exceptions
- Document the dependency and business justification.
- Assign a server owner and target remediation date.
- Apply compensating controls and track risk acceptance.
Evidence
- Export of RODC Password Replication Policy before and after changes.
- Change ticket and approval record.
- PowerShell output confirming denied group membership.
- Revealed Passwords tab review confirming no privileged credentials are cached.
Additional Guidance
RODCs are commonly deployed in locations where physical security cannot be guaranteed, such as branch offices. If privileged credentials are permitted to cache on an RODC, an attacker with physical access to the device can extract those hashes and use them to compromise privileged accounts across the domain. Adding all privileged groups to the Denied RODC Password Replication Policy is a foundational RODC security control.
RODC Privileged Groups Can Be Exposed
RODC Privileged Groups Can Be Exposed
RODC Privileged Groups Can Be Exposed
RODCs (Read-Only Domain Controllers) should not have the ability to retrieve credentials for privileged groups. Privileged groups have RIDs lower than 1000, and if these accounts can be exposed on an RODC, it increases the risk of credential theft or impersonation.
Attackers commonly use tools like Mimikatz or DCSync to exploit privileged users stored within a RODC and extract their cached credentials.
Recommendation
Explicitly deny privileged groups in the RODC password replication policy and validate that protected credentials cannot be cached.
Prerequisites
- Domain Administrator credentials required.
- Locate which privileged groups are not currently in the Denied RODC Password Replication Policy for the affected RODC.
- Confirm the list of groups to be denied with the directory services team.
- Obtain change control approval.
Remediation Objective
- Ensure all privileged groups are explicitly listed in the Denied RODC Password Replication Policy to prevent their credentials from ever being cached on the RODC.
- Reduce the risk of privileged credential exposure if the RODC is physically or logically compromised.
- Ensure RODC credential caching policy reflects least privilege for the location and risk profile of the RODC.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Import the Active Directory module.
Import-Module ActiveDirectory
# Add a privileged group to the domain-wide Denied RODC Password Replication Group.
# Replace <GroupName> with the privileged group to deny.
Add-ADGroupMember -Identity "Denied RODC Password Replication Group" `
-Members "<GroupName>" -WhatIf
# Remove -WhatIf after reviewing output.
# For RODC-specific denied lists, use:
# Set-ADDomainController -Identity <RODCName> -DeniedPasswordReplicationPolicy @{Add="<GroupName>"}# Import the Active Directory module.
Import-Module ActiveDirectory
# Import a reviewed and approved list of groups to add to the denied policy.
# Required CSV columns: GroupName
$Groups = Import-Csv -Path ".\ApprovedGroups.csv"
foreach ($Group in $Groups) {
Add-ADGroupMember -Identity "Denied RODC Password Replication Group" `
-Members $Group.GroupName -WhatIf
}
# Remove -WhatIf after reviewing output.Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open Active Directory Users and ComputersLaunch
dsa.msc. - Locate the RODC in the Domain Controllers OURight-click the RODC and select Properties.
- Open Password Replication Policy tabClick Password Replication Policy.
- Review the Denied listConfirm all privileged groups are present. Click Add, select Deny, and add any missing groups.
- Save and confirmClick OK.
Validation
- Confirm denied group list on the RODC: Get-ADDomainController -Identity <RODCName> | Select-Object -ExpandProperty DeniedPasswordReplicationPolicy
- Verify no privileged credentials are in the Revealed Passwords list.
- Run a follow-up scan to confirm the finding is resolved.
Exceptions
- Do not approve permanent exceptions for this condition.
- Document any temporary delay with owner and target date.
- Track formal risk acceptance until remediation is complete.
Evidence
- Export of RODC Password Replication Policy before and after changes.
- Change ticket and approval record.
- PowerShell output confirming denied group list.
- Revealed Passwords tab review confirming no privileged credential cache.
Additional Guidance
RODC configurations should prevent privileged credentials from being cached at remote or less trusted locations. Review password replication policies, site placement, and delegated administration to limit exposure if an RODC is compromised.
RODC Privileged Users Exposed
RODC Privileged Users Exposed
RODC Privileged Users Exposed
RODCs (Read-Only Domain Controllers) may expose privileged user credentials by caching them. The attribute msDS-RevealedUsers tracks users whose credentials have been revealed to the RODC. If a privileged user’s credentials are cached, it poses a risk, as RODCs are often deployed in less secure environments.
Attackers commonly use tools like Mimikatz or DCSync to exploit privileged users stored within a RODC and extract their cached credentials.
Recommendation
Remove cached privileged credentials from RODCs, reset exposed account passwords, and validate the password replication policy blocks recurrence.
Prerequisites
- Domain Administrator credentials required.
- Locate which privileged accounts have credentials currently cached on the RODC (Revealed Passwords).
- Confirm which accounts need to be removed from the cache and from the Allowed replication list.
- Consider resetting the passwords of any privileged accounts whose credentials were revealed on the RODC.
- Obtain change control approval.
Remediation Objective
- Remove cached privileged credentials from the RODC password replication cache.
- Move affected privileged accounts from the Allowed to the Denied RODC Password Replication Policy.
- Reset passwords for any privileged accounts whose credentials were exposed on the RODC as a precautionary measure.
- Ensure the RODC no longer caches any privileged account credentials.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Import the Active Directory module.
Import-Module ActiveDirectory
# Reset the password of a privileged account whose credentials were cached on the RODC.
# Replace <SamAccountName> with the affected account.
$NewPass = Read-Host "Enter new password" -AsSecureString
Set-ADAccountPassword -Identity "<SamAccountName>" -NewPassword $NewPass -Reset
# Move the account to the Denied RODC Password Replication Group.
Add-ADGroupMember -Identity "Denied RODC Password Replication Group" `
-Members "<SamAccountName>"
# To remove a specific account from the RODC cache, use the ADUC GUI
# (Revealed Passwords > Remove account from cache).# Import the Active Directory module.
Import-Module ActiveDirectory
# Import a reviewed and approved list of privileged accounts to remediate.
# Required CSV columns: SamAccountName
$Accounts = Import-Csv -Path ".\ApprovedAccounts.csv"
foreach ($Account in $Accounts) {
# Move each account to the Denied RODC Password Replication Group.
Add-ADGroupMember -Identity "Denied RODC Password Replication Group" `
-Members $Account.SamAccountName -WhatIf
}
# Remove -WhatIf after reviewing output.
# Reset passwords separately via the single remediation above for each affected account.Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open Active Directory Users and ComputersLaunch
dsa.msc. - Locate the RODC in the Domain Controllers OURight-click the RODC and select Properties.
- Open Password Replication Policy tabClick Password Replication Policy, then click the Advanced button.
- Review Revealed PasswordsSelect 'Accounts whose passwords are stored on this Read-only Domain Controller' to view cached credentials.
- Remove cached credentialsSelect each privileged account and click 'Remove account from cache'.
- Update Denied policyReturn to the Password Replication Policy tab and add each affected account to the Denied list.
- Reset account passwordsReset passwords for any privileged accounts that were revealed on the RODC.
Validation
- Confirm no privileged credentials remain in the Revealed Passwords list on the RODC.
- Verify affected accounts are in the Denied Password Replication Policy.
- Confirm passwords have been reset for accounts whose credentials were exposed.
- Run a follow-up scan to confirm the finding is resolved.
Exceptions
- Do not approve permanent exceptions for this condition.
- Document any temporary delay with owner and target date.
- Track formal risk acceptance until remediation is complete.
Evidence
- Revealed Passwords list export before remediation.
- Change ticket and approval record.
- Confirmation that cache was cleared and policy updated.
- Password reset records for affected privileged accounts.
Additional Guidance
Regularly audit RODC-revealed users to ensure no privileged accounts are exposed. Review the Password Replication Policy to prevent privileged user credentials from being cached on RODCs. Consider placing RODCs in more secure locations or strengthening physical security around them to assist in mitigating risk.
Schema Admins Group Not Empty
Schema Admins Group Not Empty
Schema Admins Group Not Empty
The "Schema Admins" group allows members to modify the Active Directory schema, which defines the structure of AD objects. These changes are permanent and can have far-reaching consequences. For security, this group should remain empty unless a schema update is necessary, and membership should be strictly controlled.
Schema group members are a prime target for attackers, specifically if they are looking to cause denial of service attacks.
Recommendation
Remove standing membership from Schema Admins, use temporary access for approved schema changes, and validate the group remains empty afterward.
Prerequisites
- Domain Administrator or Enterprise Administrator credentials required.
- Confirm that no active schema extension operations are in progress before removing members.
- Locate each current member and confirm with the account owner that the membership is no longer required.
- Obtain change control approval.
Remediation Objective
- Remove all accounts from the Schema Admins group when schema modification operations are not actively in progress.
- Ensure the Schema Admins group is empty except during planned, approved schema extension projects.
- Reduce the risk of unauthorized or accidental schema changes that could affect the entire forest.
- Apply the principle of just-in-time access for schema modification privileges.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Import the Active Directory module.
Import-Module ActiveDirectory
# Remove a specific member from Schema Admins.
# Replace <MemberName> with the account to remove.
Remove-ADGroupMember -Identity "Schema Admins" -Members "<MemberName>" -Confirm:$false -WhatIf
# Remove -WhatIf after reviewing output and confirming no active schema operation.# Import the required module for the remediation.
Import-Module ActiveDirectory
# Import a reviewed and approved list of affected objects to remediate.
$Items = Import-Csv -Path ".\ApprovedObjects.csv"
# Update only the objects included in the approved input file.
foreach ($Item in $Items) {
# Replace the placeholder command with the approved single-object remediation command for Schema Admins Group Not Empty.
# Use -WhatIf when supported before applying the change.
<Approved-Remediation-Command> -Identity $Item.DistinguishedName -WhatIf
}Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open Active Directory Users and ComputersLaunch
dsa.mscfrom an administrative workstation. - Navigate to the Users containerLocate the Schema Admins group.
- Open group propertiesRight-click Schema Admins and select Properties, then click the Members tab.
- Remove all membersSelect each member and click Remove.
- Save and validateClick OK. Confirm the group is empty.
Validation
- Confirm Schema Admins is empty: Get-ADGroupMember -Identity 'Schema Admins'
- Verify no authentication or directory operation failures occur following the change.
- Run a follow-up scan to confirm the finding is resolved.
Exceptions
- Do not approve permanent exceptions for this condition.
- Document any temporary delay with owner and target date.
- Track formal risk acceptance until remediation is complete.
Evidence
- Export of Schema Admins membership before changes.
- Change ticket and approval record.
- PowerShell output confirming empty group membership.
- Follow-up scan results confirming finding resolution.
Additional Guidance
Schema Admins should normally remain empty except during approved schema changes. Remove standing membership, use time-bound access for schema updates, and monitor the group for unexpected additions.
Shadow Credential Write Access on Privileged Objects
Shadow Credential Write Access on Privileged Objects
Shadow Credential Write Access on Privileged Objects
One or more privileged objects allow a non-standard principal to write shadow credential data through the msDS-KeyCredentialLink attribute or equivalent control permissions. This access can allow a user to add alternate authentication material and authenticate as the target account without knowing its password. When the affected object is privileged, this can create a direct path to domain compromise.
Shadow credentials abuse the Key Trust model. An attacker who can write msDS-KeyCredentialLink on a victim adds a public key under their control, requests a Kerberos ticket-granting ticket for the victim via PKINIT, and recovers the victim's NTLM hash from the PAC. Whisker, pyWhisker, and Certipy perform the sequence in seconds and clean up afterward.
Recommendation
Remove non-administrative write access to msDS-KeyCredentialLink on domain controllers and privileged accounts.
Prerequisites
- Domain Admin, or rights to modify the object's security descriptor.
- The DSInternals module to inspect existing key credentials.
- Obtain change control approval.
Remediation Objective
- Remove write access to msDS-KeyCredentialLink (and broad GenericAll / WriteDacl / WriteOwner) from non-default principals on the flagged objects.
- Inspect and clear any unexpected key credentials already present.
- Enable directory service change auditing for msDS-KeyCredentialLink.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Inspect existing key credentials on the object (requires the DSInternals module).
Import-Module DSInternals
Get-ADReplAccount -SamAccountName "<SamAccountName>" -Server "<DomainController>" | Select-Object -ExpandProperty KeyCredentials
# Review the object's ACL, then remove a non-default principal's access.
dsacls "<ObjectDN>"
dsacls "<ObjectDN>" /R "<DOMAIN\Principal>"# Remediate approved objects (columns: ObjectDN, Principal).
$Items = Import-Csv -Path ".\ApprovedObjects.csv"
foreach ($Item in $Items) {
# Review first; this removes the principal's access from the object.
<Approved-Remediation-Command> $Item.ObjectDN /R $Item.Principal
}Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open Active Directory Users and ComputersLaunch ADUC and enable Advanced Features from the View menu.
- Locate the flagged objectNavigate to the privileged account or domain controller identified in the report.
- Open the security editorRight-click the object, select Properties, open the Security tab, and click Advanced.
- Remove the dangerous entryFind the non-default principal with Write to msDS-KeyCredentialLink or full control, select it, and click Remove.
- Save and repeatApply the change and repeat for each approved object.
Validation
- Confirm the principal no longer has write access to the object.
- Inspect msDS-KeyCredentialLink for unexpected entries and remove them.
- Run a follow-up scan to confirm the finding is resolved.
Exceptions
- If a principal legitimately manages the object, replace broad rights with the minimum required.
- Document any retained delegation with owner and justification.
- Track formal risk acceptance.
Evidence
- ACL export for each object before and after remediation.
- Output of any key credentials found and removed.
- Follow-up scan results confirming resolution.
Additional Guidance
Protect Tier 0 objects by minimizing who can modify their attributes, and audit delegated permissions on the AdminSDHolder object since its ACL propagates to all protected accounts. Enabling change auditing for msDS-KeyCredentialLink detects shadow credential additions, and the Protected Users group reduces the impact of credential theft.
| Object | Type | Details |
|---|---|---|
| PADDYSPUB\Paddy Helpdesk | Group | |
PADDY-DC01.paddyspub.local | Domain controller | Write msDS-KeyCredentialLink |
PADDY-DC02.paddyspub.local | Domain controller | Write msDS-KeyCredentialLink |
ROPADDY-DC01.paddyspub.local | Domain controller | Write msDS-KeyCredentialLink |
Unconstrained Delegations Detected
Unconstrained Delegations Detected
Unconstrained Delegations Detected
Unconstrained delegation allows a service or account to impersonate any user that interacts with it by caching their Kerberos ticket-granting tickets (TGT). This creates a significant security risk, as attackers who compromise a service trusted for unconstrained delegation can extract these TGTs and impersonate privileged accounts, leading to domain take over.
Unconstrained delegation is often combined with network poisoning attacks and endpoint configuration abuse to force communication from sensitive assets such as domain controllers. The attack path typically involves immediately dumping the domain controller of hashes which can be passed or cracked offline.
Recommendation
Remove unconstrained delegations or replace it with constrained delegation where required.
Prerequisites
- Domain Admin rights to modify delegation settings on accounts and computers.
- Service owner identification and sign-off for each affected account.
- Testing environment available to validate service functionality after delegation change.
- Change control approval obtained.
- Rollback plan documented.
Remediation Objective
- Remove unconstrained delegation from all non-domain controller accounts and computers where it is identified.
- Replace unconstrained delegation with constrained delegation scoped to the minimum required services.
- Confirm affected services continue to function correctly after the change.
- Implement monitoring for TGT requests from accounts with delegation enabled.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Import the Active Directory module.
Import-Module ActiveDirectory
# Remove unconstrained delegation from a specific user or computer account.
# Replace <SamAccountName> with the target account.
# For a computer account, append $ to the name (e.g., SERVER01$).
# Disable unconstrained delegation by setting TrustedForDelegation to $false.
Set-ADAccountControl -Identity "<SamAccountName>" -TrustedForDelegation $false# Import the Active Directory module.
Import-Module ActiveDirectory
# Import a reviewed list of accounts with unconstrained delegation to remediate.
# CSV must contain a column named SamAccountName.
$Accounts = Import-Csv -Path ".\ApprovedDelegationAccounts.csv"
# Remove unconstrained delegation from each account in the approved input file.
foreach ($Account in $Accounts) {
Set-ADAccountControl -Identity $Account.SamAccountName -TrustedForDelegation $false -WhatIf
Write-Output "Processed: $($Account.SamAccountName)"
}
# Remove -WhatIf after the change has been reviewed and approved.Remediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open Active Directory Users and ComputersLaunch
dsa.mscfrom an administrative workstation. Enable Advanced Features under the View menu. - Locate the affected accountNavigate to the OU or container containing the account identified in the report.
- Open account propertiesDouble-click the account to open its properties.
- Navigate to the Delegation tabSelect the Delegation tab.
- Remove unconstrained delegationSelect Do not trust this computer for delegation, or select Use Kerberos only constrained delegation if the service requires delegation to specific services.
- Configure constrained delegation (if required)If the service requires delegation, select Use Kerberos only and add the specific SPNs to the Services to which this account can present delegated credentials list.
- Save changesClick OK or Apply.
Validation
- Confirm unconstrained delegation is removed using Get-ADUser or Get-ADComputer with -Properties TrustedForDelegation.
- Verify that affected services are functioning correctly after the change.
- Confirm no new TGT caching is occurring for the account by reviewing Kerberos event logs.
- Run Insight Recon AD against the same scope to confirm the finding is resolved.
Exceptions
- Document the privileged access dependency and justification.
- Assign an owner and target remediation date.
- Apply compensating controls and track risk acceptance.
Evidence
- Before-and-after export of delegation settings for affected accounts.
- Service validation test results confirming functionality after change.
- Change ticket and approval record.
- PowerShell transcript of remediation commands.
Additional Guidance
Unconstrained delegation is a dangerous configuration that should be avoided in most environments due to its susceptibility to Kerberos-based attacks. Conduct regular audits to detect and remove any accounts with unconstrained delegation and implement monitoring to detect suspicious activity related to TGT requests. If a delegation must be kept, consider moving to a “constrained delegation” which will restrict which services can be delegated to. If choosing this option, ensure additional monitoring and alerting is configured for this service. Any unconstrained or constrained delegated account should be treated as a domain administrator or equivalent.
User-controlled certificate template subject in ADCS (ESC1)
User-controlled certificate template subject in ADCS (ESC1)
User-controlled certificate template subject in ADCS (ESC1)
This is a critical security issue where low-level users can exploit certificate request settings to impersonate higher-privileged accounts, like domain administrators. This occurs when certificate templates are configured with weak permissions that allow users to input key identity details themselves. If these conditions align, users can request certificates that allow them to assume the identity of others.
This misconfiguration is highly sought after by attackers, as it requires minimal skill to exploit and has a high success rate for privilege escalation. Once authenticated, attackers use tools like Certipy, Certify, or Rubeus, to identify vulnerable certificate templates, generate a certificate as a domain administrator, and retrieve the user’s NT hash. This hash can then be used in Pass-the-Hash attacks or cracked offline. Attackers may then employ tools like CrackMapExec or Impacket’s secretsdump.py to remotely extract hashes from the domain controller.
Recommendation
Remove enrollee-supplied subject settings from vulnerable templates, restrict enrollment, and validate that authentication certificates cannot be requested for arbitrary identities.
Prerequisites
- Enterprise Admin or CA Administrator rights to modify certificate templates.
- Inventory of services and applications using affected certificate template.
- Testing environment available to validate template changes.
- Change control approval obtained.
Remediation Objective
- Remove or restrict the Supply in Request (SAN) flag from vulnerable certificate templates.
- Require manager approval for certificate issuance on sensitive templates.
- Restrict enrollment rights to remove low-privileged groups such as Authenticated Users or Domain Users.
- Ensure that at least one of the ESC1 enabling conditions is broken to prevent exploitation.
Remediation Path 1: Command-Line
Use this path when remediating multiple objects or when changes need to be executed, exported, and tracked.
# Disable the Supply in Request flag on a vulnerable certificate template.
# This must be run with Enterprise Admin or CA Administrator rights.
# Load the PSPKI module (install if not present).
Install-Module -Name PSPKI -Force -AllowClobber
Import-Module PSPKI
# Retrieve the certificate template by name.
# Replace <TemplateName> with the display name of the vulnerable template.
$Template = Get-CertificateTemplate -Name "<TemplateName>"
# Remove the CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT flag (0x1) from the template.
# This prevents users from specifying a Subject Alternative Name in their request.
$Flags = $Template.pKIDefaultKeySpec
Set-CertificateTemplateAcl -Template $TemplateRemediation Path 2: GUI
Use this path when changing a small number of objects or when an administrator prefers a visual confirmation flow.
- Open Certificate Templates ConsoleRun
certtmpl.mscfrom an administrative workstation with Enterprise Admin rights. - Locate the affected templateLocate the certificate template named in the report. Right-click the template and select Duplicate Template to create a test copy, or Properties to modify directly.
- Review the Subject Name tabSelect the Subject Name tab. If Supply in the request is selected, change this to Build from this Active Directory information to prevent users from supplying their own SAN.
- Review the Security tabOn the Security tab, remove Authenticated Users or Domain Users from the enrollment permissions if they are present. Restrict enrollment to specific groups with a documented business need.
- Enable manager approvalOn the Issuance Requirements tab, check CA certificate manager approval to require manual approval of certificate requests.
- Apply changes and republishClick OK to save the template changes. In the Certification Authority console (
certsrv.msc), right-click Certificate Templates and reissue the updated template.
Validation
- Confirm the ENROLLEE_SUPPLIES_SUBJECT flag is no longer set on the template using Get-CertificateTemplate or certutil -v -dump.
- Attempt to enroll a certificate with a custom SAN using a low-privileged account to confirm the vulnerability is no longer exploitable.
- Verify that legitimate enrollment processes continue to function correctly.
- Run Insight Recon AD against the same scope to confirm the finding is resolved.
Exceptions
- Document the certificate dependency and business justification.
- Assign a PKI owner and target remediation date.
- Restrict enrollment or access until remediation is complete.
Evidence
- CA database backup confirmation prior to template changes.
- Before-and-after certutil output showing template flag changes.
- Certificate enrollment test results.
- Change ticket and approval record.
- Follow-up scan results showing finding resolved.
Additional Guidance
ESC1 is one of the most commonly exploited ADCS vulnerabilities because it requires minimal skill to exploit and reliably results in domain administrator-level compromise. The vulnerability exists at the intersection of multiple template configuration weaknesses, and organizations can break the attack chain by correcting any single condition. The highest-priority change is removing the ability for low-privileged users to supply a Subject Alternative Name in certificate requests.
Organizations operating an Active Directory Certificate Services infrastructure should conduct a regular PKI security review that includes assessment of all certificate template configurations. Template permissions should be reviewed quarterly, and any new template should be subject to a formal security review before publication to the CA.
For this vulnerability to be exploitable, several conditions must be met: 1. Enrollment Rights for Low-Privileged Users 2. No Manager Approval or Authorized Signatures 3. Overly Permissive Security Descriptors 4. Authentication-Enabled EKUs 5. User-Specified Subject Alternative Name (SAN)
| Object | Type | Details |
|---|---|---|
| Fight Milk Any Purpose | Certificate template | |
NT AUTHORITY\Authenticated Users | Group | Enroll |
PADDYSPUB\Domain Users | Account | Owner |
PADDYSPUB\Domain Users | Group | Full control |
Environment Overview
Scope and inventory of the Active Directory tenant scanned. Use this to confirm the right environment was assessed and quickly spot foundational gaps.
Domain Configuration
Forest, schema, and naming details.
Infrastructure Status
Health checks across core AD services.
Accounts & Groups
Accounts, privileged groups, and special service identities.
Privileged Groups
High-level overview of privileged groups and their membership.
| Name | Count | Enabled | Disabled | Inactive | Password Never Expires | Service Accounts | Can be Delegated | Protected Users | External Users |
|---|---|---|---|---|---|---|---|---|---|
| Account Operators | 1 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 |
| Administrators | 3 | 3 | 0 | 0 | 1 | 0 | 1 | 0 | 2 |
| Backup Operators | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Domain Admins | 10 | 9 | 1 | 1 | 6 | 1 | 9 | 0 | 1 |
| Enterprise Admins | 2 | 2 | 0 | 0 | 2 | 0 | 2 | 0 | 0 |
| Print Operators | 1 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 |
| Schema Admins | 1 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 |
| Server Operators | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Account Operators Count: 1
| Name | Risk | Enabled | Active | Password Never Expires | Locked | Service Account | Can be Delegated | In Protected Users | Creation Date | Last Login | Last Password Change | DN |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Liam.McPoyle | 38.7High | Yes | Yes | Yes | No | No | Yes | No | 2025-04-04 | Never | 2025-04-04 | CN=Liam McPoyle,CN=Users,DC=paddyspub,DC=local |
Administrators Count: 3
| Name | Risk | Enabled | Active | Password Never Expires | Locked | Service Account | Can be Delegated | In Protected Users | Creation Date | Last Login | Last Password Change | DN |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Administrator | 47.8Critical | Yes | Yes | Yes | No | No | Yes | No | 2021-06-30 | 2025-05-23 11:18 | 2025-04-14 | CN=Administrator,CN=Users,DC=paddyspub,DC=local |
| Domain Admins | — | Yes | No | No | No | No | No | No | CN=Domain Admins,CN=Users,DC=paddyspub,DC=local | |||
| Enterprise Admins | — | Yes | No | No | No | No | No | No | CN=Enterprise Admins,CN=Users,DC=paddyspub,DC=local |
Backup Operators Count: 0
| Name | Risk | Enabled | Active | Password Never Expires | Locked | Service Account | Can be Delegated | In Protected Users | Creation Date | Last Login | Last Password Change | DN |
|---|
Domain Admins Count: 10
| Name | Risk | Enabled | Active | Password Never Expires | Locked | Service Account | Can be Delegated | In Protected Users | Creation Date | Last Login | Last Password Change | DN |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Administrator | 47.8Critical | Yes | Yes | Yes | No | No | Yes | No | 2021-06-30 | 2025-05-23 11:18 | 2025-04-14 | CN=Administrator,CN=Users,DC=paddyspub,DC=local |
| Artemis.Dubois | 41.1High | Yes | Yes | No | No | No | Yes | No | 2025-05-23 | 2025-05-23 11:18 | 2025-05-23 | CN=Artemis Dubois,CN=Users,DC=paddyspub,DC=local |
| Bill.Ponderosa | 31.6High | No | No | No | No | No | Yes | No | 2025-04-04 | Never | 2025-04-04 | CN=Bill Ponderosa,CN=Users,DC=paddyspub,DC=local |
| Charlie.Kelly | 56.2Critical | Yes | Yes | Yes | No | No | Yes | No | 2025-05-19 | Never | 2025-05-19 | CN=Charlie Kelly,CN=Users,DC=paddyspub,DC=local |
| DEE-PC01$ | — | Yes | No | No | No | No | No | No | CN=DEE-PC01,OU=TestComputers,DC=paddyspub,DC=local | |||
| Dee.Reynolds | 57.9Critical | Yes | Yes | Yes | No | No | Yes | No | 2025-05-19 | Never | 2025-05-19 | CN=Dee Reynolds,CN=Users,DC=paddyspub,DC=local |
| Dennis.Reynolds | 66.0Critical | Yes | Yes | Yes | No | Yes | Yes | No | 2025-04-11 | Never | 2025-04-11 | CN=Dennis Reynolds,CN=Users,DC=paddyspub,DC=local |
| Frank.Reynolds | 61.1Critical | Yes | Yes | Yes | No | No | Yes | No | 2021-06-30 | 2026-07-13 10:18 | 2025-04-03 | CN=Frank Reynolds,CN=Users,DC=paddyspub,DC=local |
| Ronald.McDonald | 47.8Critical | Yes | Yes | Yes | No | No | Yes | No | 2025-06-10 | 2025-06-10 11:18 | 2025-06-10 | CN=Ronald McDonald,CN=Users,DC=paddyspub,DC=local |
| Waitress | 46.7Critical | Yes | Yes | No | No | No | Yes | No | 2025-05-08 | Never | 2025-05-08 | CN=The Waitress,CN=Users,DC=paddyspub,DC=local |
Enterprise Admins Count: 2
| Name | Risk | Enabled | Active | Password Never Expires | Locked | Service Account | Can be Delegated | In Protected Users | Creation Date | Last Login | Last Password Change | DN |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Administrator | 47.8Critical | Yes | Yes | Yes | No | No | Yes | No | 2021-06-30 | 2025-05-23 11:18 | 2025-04-14 | CN=Administrator,CN=Users,DC=paddyspub,DC=local |
| Frank.Reynolds | 61.1Critical | Yes | Yes | Yes | No | No | Yes | No | 2021-06-30 | 2026-07-13 10:18 | 2025-04-03 | CN=Frank Reynolds,CN=Users,DC=paddyspub,DC=local |
Print Operators Count: 1
| Name | Risk | Enabled | Active | Password Never Expires | Locked | Service Account | Can be Delegated | In Protected Users | Creation Date | Last Login | Last Password Change | DN |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Rickety.Cricket | 39.2High | Yes | Yes | Yes | No | No | Yes | No | 2025-07-02 | Never | 2025-07-02 | CN=Rickety Cricket,CN=Users,DC=paddyspub,DC=local |
Schema Admins Count: 1
| Name | Risk | Enabled | Active | Password Never Expires | Locked | Service Account | Can be Delegated | In Protected Users | Creation Date | Last Login | Last Password Change | DN |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Frank.Reynolds | 61.1Critical | Yes | Yes | Yes | No | No | Yes | No | 2021-06-30 | 2026-07-13 10:18 | 2025-04-03 | CN=Frank Reynolds,CN=Users,DC=paddyspub,DC=local |
Server Operators Count: 0
| Name | Risk | Enabled | Active | Password Never Expires | Locked | Service Account | Can be Delegated | In Protected Users | Creation Date | Last Login | Last Password Change | DN |
|---|
User Accounts
Detailed information about user accounts in the environment.
User Accounts User Accounts: 75
Computer Accounts
Detailed information about computer accounts in the environment.
Computer Accounts Computer Accounts: 20
Infrastructure & Cloud
Cloud sync, endpoint management, and update services. Detached or misconfigured here usually means slower patching and weaker visibility.
Cloud Services
Hybrid sync to Microsoft Entra (Azure AD).
Entra ID Sync Enabled
Entra Connect Enabled
Management Tools
Overview and configuration status of management and update tools.
SCCM / Endpoint Config Manager Servers: 1 Configured
| Server | Code | Hierarchy Type | Role | Site Version | Client Version | Cloud Attach | Entra ID Tenant ID | Entra Tenant Name |
|---|---|---|---|---|---|---|---|---|
| PADDY-ECM01.paddyspub.local | PAD | — | — | 5.00.9128.1000 | — | — | — | — |
WSUS Servers Servers: 2 Configured
| GPO Name | GPO Link | Update Source | Server URL | Install Mode | Suppress Auto-Reboot | Allow Non-Admins |
|---|---|---|---|---|---|---|
| Default Domain Policy | Yes | WSUS | http://paddy-wsus01.paddyspub.local:8530 | — | No | No |
| Default Domain Policy | Yes | WSUS | http://paddy-wsus02.paddyspub.local:8530 | — | No | No |
Trusts
Active Directory trust relationships with external domains and forests.
Trusts Trusts: 2
| Domain | Type | Direction | Activity State | SID Filtering | TGT Delegation | Encryption Type | Creation |
|---|---|---|---|---|---|---|---|
| guiginosrestaurant.local | External | Outbound | Inactive | Enabled | No | RC4 (Legacy) | Aug 4, 2022 |
| sudzbar.local | Forest | Bidirectional | Active | Disabled | Yes | AES | Oct 28, 2021 |
PKI & Certificates
Overview and configuration status of PKI infrastructure and certificates.
Certificate Authorities
Certificate authority infrastructure and issued certificate counts.
Certificate Authorities CAs: 1 Certificates: 2
| CA Name | DNS Hostname | Certificates |
|---|---|---|
| paddyspub-RODC-CA | ROPADDY-DC01.paddyspub.local | 2 |
Certificate Templates
Certificate template configuration and enrollment risk indicators. Flags highlight enrollment misconfigurations associated with ADCS escalation paths.
Certificate Templates Templates: 35
| Name | Destination | Manager Approval | Enrollee Can Supply Subject | Issuance Requirements | Vulnerable ACL | Everyone Can Enroll | Agent Template | Any Purpose | For Authentication |
|---|---|---|---|---|---|---|---|---|---|
| Administrator | User | No | No | No | No | No | No | No | Yes |
| Authenticated Session | User | No | No | No | No | Yes | No | No | Yes |
| Basic EFS | User | No | No | No | No | Yes | No | No | No |
| CA Exchange | Computer | No | No | No | No | No | No | No | No |
| CEP Encryption | Computer | No | No | No | No | No | Yes | No | No |
| Code Signing | User | No | No | No | No | No | No | No | No |
| Computer | Computer | No | No | No | No | Yes | No | No | Yes |
| Cross Certification Authority | User | No | No | No | No | No | No | Yes | Yes |
| Directory Email Replication | User | No | No | No | No | No | No | No | No |
| Domain Controller | Computer | No | No | No | No | No | No | No | Yes |
| Domain Controller Authentication | Computer | No | No | No | No | No | No | No | Yes |
| EFS Recovery Agent | User | No | No | No | No | No | No | No | No |
| Enrollment Agent | User | No | No | No | No | No | Yes | No | No |
| Enrollment Agent (Computer) | Computer | No | No | No | No | No | Yes | No | No |
| Exchange Enrollment Agent (Offline request) | User | No | No | No | No | No | Yes | No | No |
| Exchange Signature Only | User | No | No | No | No | No | No | No | No |
| Exchange User | User | No | No | No | No | No | No | No | No |
| Fight Milk Any Purpose | Computer | No | Yes | No | Yes | Yes | No | Yes | Yes |
| IPSec | Computer | No | No | No | No | Yes | No | No | No |
| IPSec (Offline request) | Computer | No | No | No | No | No | No | No | No |
| Kerberos Authentication | Computer | No | No | No | No | No | No | No | Yes |
| Key Recovery Agent | User | Yes | No | Yes | No | No | No | No | No |
| OCSP Response Signing | Computer | No | No | No | No | No | No | No | No |
| RAS and IAS Server | Computer | No | No | No | No | No | No | No | Yes |
| Root Certification Authority | Computer | No | No | No | No | No | No | Yes | Yes |
| Router (Offline request) | Computer | No | No | No | No | No | No | No | Yes |
| Smartcard Logon | User | No | No | No | No | No | No | No | Yes |
| Smartcard User | User | No | No | No | No | No | No | No | Yes |
| Subordinate Certification Authority | Computer | No | No | No | No | No | No | Yes | Yes |
| Trust List Signing | User | No | No | No | No | No | No | No | No |
| User | User | No | No | No | No | Yes | No | No | Yes |
| User Signature Only | User | No | No | No | No | Yes | No | No | Yes |
| Web Server | Computer | No | No | No | No | No | No | No | No |
| Wolf Cola Enroll | Computer | No | No | No | Yes | Yes | Yes | No | No |
| Workstation Authentication | Computer | No | No | No | No | Yes | No | No | Yes |
Trusted Certificates
Enterprise trusted certificate stores and authentication-related certificates.
Trusted Certificates Certificates: 3
| Source | Store | Subject | Issuer | Valid From | Valid Until | Key Length | Signature Algorithm | Smart Card Logon |
|---|---|---|---|---|---|---|---|---|
| Enterprise Root | Certification Authorities | CN=paddyspub-RODC-CA, DC=paddyspub, DC=local | CN=paddyspub-RODC-CA, DC=paddyspub, DC=local | Apr 9, 2025 | Jul 13, 2035 | 2048 | sha256RSA | Disabled |
| Enterprise AIA | AIA | CN=paddyspub-RODC-CA, DC=paddyspub, DC=local | CN=paddyspub-RODC-CA, DC=paddyspub, DC=local | Apr 9, 2025 | Jul 13, 2035 | 2048 | sha256RSA | Disabled |
| Enterprise NTAuth | NTAuthCertificates | CN=paddyspub-RODC-CA, DC=paddyspub, DC=local | CN=paddyspub-RODC-CA, DC=paddyspub, DC=local | Apr 9, 2025 | Jul 13, 2035 | 2048 | sha256RSA | Disabled |
Group Policy
Overview and configuration status of domain group policies.
Password Policies
Domain password and account lockout policy configuration.
Password Policies Policies: 1
| Policy Name | Policy Type | Password Complexity Enabled | Maximum Password Age | Minimum Password Length | Password History Length | Reversible Encryption | Account Lockout Threshold | Account Lockout Duration |
|---|---|---|---|---|---|---|---|---|
| Default Domain Policy | Default | Yes | 42 days | 8 | 24 | Disabled | — | 30 minutes |
Screensaver Policies
Screen lock and inactivity timeout settings applied through Group Policy.
Local Administrator Group Management Policies
Policies that manage local administrator group membership on domain-joined systems.
Local Administrator Group Management Policies: 1
| GPO Name | Configuration Method | Target Local Group | Enforcement Mode | Members Defined | GPO Linked | Applies To |
|---|---|---|---|---|---|---|
| Default Domain Policy | GP Preferences | Remote Desktop Users (built-in) | Update | 1 members | Yes | DC=paddyspub,DC=local; OU=Staff,DC=paddyspub,DC=local; OU=TestComputers,DC=paddyspub,DC=local |
Firewall Policies
Windows Firewall policy settings and inbound access controls.
Group Policy Objects
7 GPO(s) in the domain.
| Name | Enabled | Modified |
|---|---|---|
| Default Domain Controllers Policy | Yes | Jul 3, 2025 |
| Default Domain Policy | Yes | Jul 3, 2025 |
| DeployFile | Yes | Jul 3, 2025 |
| Disable LLMNR | Yes | Jul 3, 2025 |
| KA | Yes | Jul 3, 2025 |
| KA-Computers | Yes | Jul 3, 2025 |
| NetSession | Yes | Jul 3, 2025 |