Healthcheck analysis

Date: 2026-02-02 - Engine version: 3.5.0.31

This report has been generated with the Enterprise Edition of PingCastle .
You are not using a supported version of PingCastle.

This section focuses on the core security indicators.
Locate the sub-process determining the score and fix some rules in that area to get a score improvement.

Indicators

050100

Domain Risk Level: 100 / 100

It is the maximum score of the 4 indicators and one score cannot be higher than 100. The lower the better

050100

Stale Object : 53 /100

It is about operations related to user or computer objects

14 rules matched

050100

Trusts : 61 /100

It is about connections between two Active Directories

3 rules matched

050100

Privileged Accounts : 100 /100

It is about administrators of the Active Directory

14 rules matched

050100

Anomalies : 100 /100

It is about specific security control points

24 rules matched

Risk model

Left-click on the headlines in the boxes for more details

Stale ObjectsPrivileged accountsTrustsAnomalies
Inactive user or computer
Account take over
Old trust protocol
Audit
Network topography
ACL Check
SID Filtering
Backup
Object configuration
Admin control
SIDHistory
Certificate take over
Obsolete OS
Control paths
Trust impermeability
Golden ticket
Old authentication protocols
Delegation Check
Trust inactive
Local group vulnerability
Provisioning
Irreversible change
Trust with Entra
Network sniffing
Replication
Privilege control
Pass-the-credential
Vulnerability management
Read-Only Domain Controllers
Password retrieval
Reconnaissance
Temporary admins
Weak password
Legend:
  score is 0 - no risk identified
  score is 0 - no risk identified but some improvements detected
  score between 1 and 10 - a few actions have been identified
  score between 10 and 30 - rules should be looked with attention
  score higher than 30 - major risks identified

This section represents the maturity score (inspired from ANSSI).

Maturity Level:

12345

Maturity levels:

  • 1 Critical weaknesses and misconfigurations pose an immediate threat to all hosted resources. Corrective actions should be taken as soon as possible;
  • 2 Configuration and management weaknesses put all hosted resources at risk of a short-term compromise. Corrective actions should be carefully planned and implemented shortly;
  • 3 The Active Directory infrastructure does not appear to have been weakened from what default installation settings provide;
  • 4 The Active Directory infrastructure exhibits an enhanced level of security and management;
  • 5 The Active Directory infrastructure correctly implements the latest state-of-the-art administrative model and security features.
Level 1

8 rule(s) matched

Level 2

12 rule(s) matched

Level 3

20 rule(s) matched

Level 4

10 rule(s) matched

Level 5

5 rule(s) matched

To reach Level 2 you need to fix the following rules:

+ 25 Point(s)

Check if there is a control path involving everyone-like groups.

Rule ID:

P-ControlPathIndirectEveryone

Description:

The purpose is to ensure that there is no control path involving everyone.

Technical explanation:


If you have access to a key server and the helpdesk can reset your password, then the helpdesk has access to the key server.
This is the kind of logic used by hackers to take control of the domain using key infrastructure objects (domain root, ...) or groups (domain administrators, ...).
Permissions are collected and analyzed to produce a control paths analysis.
Only write permissions (and specific ones) are used for this analysis.
Then the program identifies which users or computers, that are not members of known groups, can take control of this object.
To be fast, some tradeoffs have been selected. For example, logged on users on servers are ignored.
The program may also select paths which are not exploitable and ignore paths if it cannot read every permissions.
[Everyone] includes the user groups Anonymous, Everyone, Authenticated Users, Domain Users, Domain Computers and Builtin.

Advised solution:

You should analyze the chart and determine which underlying object is involved and grants write permissions to everyone.
Then edit the permissions and locate the write permission involved.
Then delete it or replace it according to your delegation model.

Points:

25 points if present

Documentation:

https://github.com/BloodHoundAD/BloodHound
https://github.com/ANSSI-FR/AD-control-paths
[MITRE]T1069.002 Permission Groups Discovery: Domain Groups

Details:

The detail can be found in Control Paths Analysis

Group
Certificate Publishers
Domain Controllers
Read Only Domain Controllers
+ 15 Point(s)

Critical DNS zones allow anonymous updates

Rule ID:

A-DnsZoneUpdate1

Description:

Critical DNS zones (domain zone and RootDNSServers) are configured to accept anonymous updates, allowing any device to modify DNS records without authentication.

Technical explanation:

Active Directory-integrated DNS zones can be configured to accept three types of updates: no updates (static), secure updates only (authenticated), or nonsecure and secure updates. This rule examines your most critical DNS zones to determine if they allow nonsecure updates.

The zones checked by this rule are the foundation of Active Directory operations: your primary domain DNS zone (e.g., contoso.com), the RootDNSServers zone, and _msdcs zones. The _msdcs zones are particularly critical as they contain the global catalog and domain controller locator records used by the entire Active Directory forest for authentication and replication.

When nonsecure updates are enabled (ZONE_UPDATE_UNSECURE), any device on the network can create or modify DNS records without authentication. For these critical zones, this means an attacker could redirect domain controller lookups, hijack global catalog queries, or impersonate critical AD services. The impact extends beyond a single domain - compromising _msdcs affects forest-wide operations.

The rule searches across all DNS storage locations in Active Directory: the DomainDnsZones partition (replicated domain-wide), the ForestDnsZones partition (replicated forest-wide), and the legacy storage in the domain naming context. It automatically filters out replication conflicts (CNF objects) and in-progress replication objects to avoid false positives.

This rule (A-DnsZoneUpdate1) focuses on these critical infrastructure zones. Its companion rule (A-DnsZoneUpdate2) examines all other zones in your environment.

Advised solution:

To fix this vulnerability, configure the zone for secure-only updates:

GUI Method:
1. Open DNS Manager (dnsmgmt.msc)
2. Navigate to the affected zone
3. Right-click the zone → Properties → General tab
4. Change "Dynamic updates" from "Nonsecure and secure" to "Secure only"

PowerShell Method:

# Find all zones with insecure updates
Get-DnsServerZone | Where-Object {$_.DynamicUpdate -eq "NonsecureAndSecure"}

# Fix a specific zone
Set-DnsServerPrimaryZone -Name "contoso.com" -DynamicUpdate Secure -ComputerName DC01

# Fix all insecure zones
Get-DnsServerZone | Where-Object {$_.DynamicUpdate -eq "NonsecureAndSecure"} | ForEach-Object {
Set-DnsServerPrimaryZone -Name $_.ZoneName -DynamicUpdate Secure -ComputerName DC01
}


Command Line Method:

# Local server
dnscmd /Config <ZoneName> /AllowUpdate 2

# Remote server
dnscmd <ServerName> /Config <ZoneName> /AllowUpdate 2

# Example
dnscmd DC01 /Config contoso.com /AllowUpdate 2

Points:

15 points if present

Documentation:

https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-dnsp/f97756c9-3783-428b-9451-b376f877319a
https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/dnscmd
[FR]ANSSI - Misconfigured DNS zones (vuln1_dnszone_bad_prop)1
[MITRE]T1557 Man-in-the-Middle

Details:
ZoneDomainDNPartition
domain.local domain.local DC=domain.local,CN=MicrosoftDNS,DC=DomainDnsZones,DC=domain,DC=local DomainDnsZones
_msdcs.domain.local domain.local DC=_msdcs.domain.local,CN=MicrosoftDNS,DC=ForestDnsZones,DC=domain,DC=local ForestDnsZones
+ 15 Point(s)

Check if admin accounts are vulnerable to the Kerberoast attack.

Rule ID:

P-Kerberoasting

Description:

The purpose is to ensure that the password of admin accounts cannot be retrieved using the Kerberoast attack.

Technical explanation:

To access a service using Kerberos, a user requests a ticket (named TGS) to the DC specific to the service.
This ticket is encrypted using a derivative of the service password, but can be brute-forced to retrieve the original password.
Any account having the attribute SPN populated is considered as a service account.
Given that any user can request a ticket for a service account, these accounts can have their password retrieved.
In addition, services are known to have their password not changed at a regular basis and to use well-known words.

Please note that this program ignores service accounts that had their password changed in the last 40 days ago to support using password rotation as a mitigation.

Advised solution:

If the account is a service account, the service should be removed from the privileged group or have a process to change its password at a regular basis.
If the user is a person, the SPN attribute of the account should be removed.

Points:

5 points per discovery

Documentation:

https://adsecurity.org/?p=3466
[FR]ANSSI - Privileged accounts with SPN (vuln1_spn_priv)1
[MITRE]T1558.003 Steal or Forge Kerberos Tickets: Kerberoasting

Details:

The detail can be found in Admin Groups

UserGroupsSPNs
Administrator Administrators
Domain Administrators
Enterprise Administrators
Schema Administrators
http/administrator
TestUser_DA Administrators
Domain Administrators
Enterprise Administrators
Schema Administrators
http/tda123
http/tda11
cifs/tda1
http/tda111
TestUser_EA Administrators
Domain Administrators
Enterprise Administrators
Schema Administrators
http/
http/tea4.domain.local
http/tea3
http/tea2
http/tea1
+ 15 Point(s)

Check for ESC1: Vulnerable Subject Control in Certificate Templates

Reduced confidence
Use privilege mode for accuracy 

Rule ID:

A-CertTempCustomSubject

Description:

This check verifies if certificate templates in Active Directory Certificate Services (AD CS) allow user-controlled subject information and meet other common criteria associated with the ESC1 vulnerability.

Technical explanation:

ESC1 is a vulnerability in Active Directory Certificate Services (AD CS) that occurs when certificate templates allow users to control the Subject Name as well as meet other criteria, such as:

  • User-Controlled Subject Name: Requesters can define the subject, enabling impersonation of any account in the domain.
  • Excessive Enrollment Permissions: Large groups such as Domain Users and Authenticated Users have enrollment rights on vulnerable templates as well as the certificate authority.
  • Authentication-based: Templates support Extended Key Usage (EKU) that allows the template to be used for Kerberos authentication.
  • No Approval Requirements: Certificates can be issued without requiring manager approval and no authorized signatures are required.

This misconfiguration can enable attackers to forge certificates, escalate privileges, and compromise the Active Directory environment.

Advised solution:

To mitigate ESC1, use one or more of the options below:

Option 1: Modify Certificate Template Settings in ADCS

  • Open Certificate Authority (certsrv.msc) on the CA server.
  • Right-click on Certificate Templates and select Manage.
  • Navigate to and right-click the vulnerable template and select Properties.
  • Go to the Subject Name tab:
    • Ensure "Supply in the request" is unchecked.
  • Click OK to save changes.

Option 2: Restrict Enrollment Permissions
Note: Restricting enrollment permissions mitigates some of the risk but all users with enrollment permissions can still impersonate any account. As such, accounts with enrollment permissions for these certificates should be closely monitored and not be on non-privileged accounts.

  • Open Certificate Authority (certsrv.msc) on the CA server.
  • Right-click on Certificate Templates and select Manage.
  • Navigate to and right-click the vulnerable template and select Properties.
  • Go to the Security tab:
    • Remove well-known low-privileged groups such as Authenticated Users, Everyone from enrollment permissions.
    • Assign only the required accounts and groups permission to request these certificates.
  • Click OK to save changes.

Option 3: Remove the CA Certificate from NTAuthCertificates
Note: Only do this if you are sure you do not use and do not want to use certificate-based authentication.

NTAuthCertificates CaCertificate attribute stores the certificate authority certificates that are authorized to be used for authentication. Removing the Certificate Authorities certificate from here stops all authentication-based attacks.
If you're not using certificate-based authentication for this CA:
  • Open Active Directory Sites and Services (dssite.msc).
  • From the top menu, click View and select Show Services Node.
  • Navigate to Services > Public Key Services > NTAuthCertificates.
  • Right-click the CACertificate attribute and select Properties.
    • Review the listed certificates.
    • Remove the entry for the affected CA by selecting it and clicking Remove.
  • Click OK to apply the changes.

Points:

15 points if present

Documentation:

Certified-PreOwned https://specterops.io/wp-content/uploads/sites/3/2022/06/Certified_Pre-Owned.pdf
[FR]ANSSI - Dangerous enrollment permission on authentication certificate templates (vuln1_adcs_template_auth_enroll_with_name)1
[MITRE]T1558 Steal or Forge Kerberos Tickets

Details:

The detail can be found in Certificate Templates

NameCAEnrollmentPrincipalsLastModified
ESC1  DC.domain.local\Enterprise CA  Authenticated Users 21/07/2025 11:00:16
+ 15 Point(s)

Check if Service Accounts (aka accounts with never expiring password) are domain administrators

Rule ID:

P-ServiceDomainAdmin

Description:

The purpose is to check for accounts with non-expiring passwords in the "Domain Administrator" group

Technical explanation:

PingCastle is checking accounts with never expiring password, that are mostly used as service accounts.
"Service Accounts" can imply a high security risk as their password are stored in clear text in the LSA database, which can then be easily exploited using Mimikatz or Cain&Abel for instance. In addition, their passwords don't change and can be used in Kerberoast attacks.

Advised solution:

Accounts with never expiring passwords are mostly service accounts.
To mitigate the security risk, it is strongly advised to lower the privileges of the "Service Accounts", meaning that they should be removed from the "Domain Administrator" group, while ensuring that the password of each and every "Service Account" is longer than 20 characters

Points:

15 points if the occurence is greater than or equals than 2

Documentation:

[US]STIG V-36432 - Membership to the Domain Admins group must be restricted to accounts used only to manage the Active Directory domain and domain controllers.
[FR]ANSSI - Recommandations de sécurité relatives à Active Directory - R11 [subsection.2.5]
[FR]ANSSI - Privileged accounts with never-expiring passwords (vuln1_dont_expire_priv)1
[MITRE]Mitre Att&ck - Mitigation - Privileged Account Management
[MITRE]T1003.004 OS Credential Dumping: LSA Secrets

Details:

The detail can be found in Admin Groups

DN
CN=srv_AA,OU=Admin,DC=domain,DC=local
CN=srv_recover,OU=Admin,DC=domain,DC=local
CN=srv_na_col,OU=Admin,DC=domain,DC=local
CN=srv_sd,OU=Admin,DC=domain,DC=local
CN=srv_1secure,OU=Admin,DC=domain,DC=local
CN=TestUser_DA,OU=Testing,DC=domain,DC=local
CN=TestUser_EA,OU=Testing,DC=domain,DC=local
CN=DA,CN=Users,DC=domain,DC=local
CN=NestedDA,OU=People,DC=domain,DC=local
+ 15 Point(s)

Check for ESC2: Vulnerable EKU Configurations in Certificate Templates

Reduced confidence
Use privilege mode for accuracy 

Rule ID:

A-CertTempAnyPurpose

Description:

This check verifies whether certificate templates in Active Directory Certificate Services (AD CS) have the "Any Purpose" Enhanced Key Usage (EKU) or lack an EKU entirely, potentially enabling privilege escalation or misuse.

Technical explanation:

Enhanced Key Usage (EKU) defines the intended purpose of a certificate. ESC2 arises when the following EKUs are defined along with other vulnerable criteria that enable low privileged users to request the certificate with no oversight.

  • "Any Purpose" EKU is enabled: This allows the certificate to be used for any purpose, including unintended ones such as authentication or code signing.
  • No EKU defined: Certificates without an EKU are treated as having "Any Purpose," making them similarly vulnerable.

ESC2 is detected when all the following criteria are true:

  • The certificate template has a vulnerable EKU as described above
  • The certificate template allows excessive enrollment permissions
  • The CA allows excessive enrollment permissions
  • The certificate template does not require manager approval
  • The certificate template does not have any authorised signatures

These configurations can be exploited by attackers to obtain certificates that enable unauthorized access, impersonate users, or escalate privileges within the domain.

Advised solution:

There are multiple ways in which remediation of this issue can be completed. It involves restricting the template in one or more ways using the instructions below.

  1. Open Certificate Authority (certsrv.msc) and connect to the CA
  2. Navigate to Certificate Templates, right-click and select Manage
  3. Right-click the vulnerable template, and select Properties

Option 1 - Restrict Enrolment Permissions
Note: This option is the best option to reduce the attack surface.

  • Go to the Security tab
  • Remove excessive enrolment permissions (e.g., Domain Users or Authenticated Users)
  • Grant permissions only to necessary accounts/groups

Option 2 - Implement Management Approval
Note: This option will require manual approval for each certificate by a PKI Admin.

  • Go to the Issuance Requirements tab
  • Tick the “CA certificate manager approval” option

Option 3 – Restrict the Certificate to Specific Type
Note: This option can be completed if the certificate is of the incorrect type. For example, it only needs Server Authentication rather than Any Purpose.

  • Go to the Extensions tab
  • Click on Application Policies and select Edit
  • Add the required application policies
  • Remove the Any Purpose usage if present
  • Click OK

Click OK to save the changes to the template

Points:

15 points if present

Documentation:

https://posts.specterops.io/certified-pre-owned-d95910965cd2
https://www.riskinsight-wavestone.com/en/2021/06/microsoft-adcs-abusing-pki-in-active-directory-environment/
[FR]ANSSI - Dangerous enrollment permission on authentication certificate templates (vuln1_adcs_template_auth_enroll_with_name)1
[MITRE]T1558 Steal or Forge Kerberos Tickets

Details:

The detail can be found in Certificate Templates

NameCAEnrollmentPrincipalsLastModified
ESC2  DC.domain.local\Enterprise CA  Authenticated Users 11/09/2025 10:57:01
+ 15 Point(s)

Check the permission of agent certificate templates

Rule ID:

A-CertTempAgent

Description:

The purpose of this rule is to ensure that there is no agent certificate that can be requested by anyone

Technical explanation:

An Agent certificate is a special certificate used to request certificates on behalf of other users.
A template has been detected with the agent EKU and that can be enrolled by a large number of users.

Advised solution:

Review the permissions that allow a wide enrollment of this certificate template

Points:

15 points if present

Documentation:

https://posts.specterops.io/certified-pre-owned-d95910965cd2
https://www.riskinsight-wavestone.com/en/2021/06/microsoft-adcs-abusing-pki-in-active-directory-environment/
[FR]ANSSI - Dangerous enrollment permission on authentication certificate templates (vuln1_adcs_template_auth_enroll_with_name)1
[MITRE]T1558 Steal or Forge Kerberos Tickets

Details:

The detail can be found in Certificate Templates

Name
ESC3-Enrollment
+ 10 Point(s)

Ensure that custom Display Specifiers are stored in SYSVOL

Rule ID:

P-DisplaySpecifier

Description:

The purpose is to ensure that scripts used for the customization of admin UI are stored safely

Technical explanation:

DisplaySpecifier are Active Directory objects stored in the DisplaySpecifier container of the Configuration naming context.
They are used to customize the user interface.
Specifically the attribute adminContextMenu is used to customize administration actions, where COM objects or scripts can be called.
If the script is stored outside the SYSVOL directory, it can be used to execute custom actions and it is run under the administrator context.

Advised solution:

The scripts identified by this rule should be moved to the SYSVOL and properly secured.

Points:

10 points if present

Documentation:

https://www.semperis.com/blog/active-directory-security-abusing-display-specifiers/
https://learn.microsoft.com/en-us/windows/win32/ad/display-specifiers
[FR]ANSSI - Dangerous Display Specifiers (vuln1_display_specifier)1
[MITRE]T1569 System Services

Details:
DNPathChanged
CN=domainDNS-Display,CN=407,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=407,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=414,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=414,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=404,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=404,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=40E,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=40E,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=419,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=419,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=408,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=408,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=413,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=413,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=409,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=409,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=410,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=410,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=41D,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=41D,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=C0A,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=C0A,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=415,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=415,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=405,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=405,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=411,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=411,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=41F,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=41F,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=40B,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=40B,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=416,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=416,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=406,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=406,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=412,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=412,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=804,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=804,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=40C,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=40C,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=816,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=816,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z

To reach Level 3 you need to fix the following rules:

+ 15 Point(s)

Ensure that the NTLMv1 and old LM protocols are banned

Rule ID:

S-OldNtlm

Description:

The purpose is to check if NTLMv1 or LM can be used by DC

Technical explanation:

NTLMv1 is an old protocol which is known to be vulnerable to cryptographic attacks.
It is typically used when a hacker sniffs the network and tries to retrieve NTLM hashes which can then be used to impersonate users.

This attack can be combined with coerced authentication attacks - a hacker forces the DC to connect to a controlled host.
In this case, NTLMv1 can be specified so the hacker can retrieve the NTLM hash of the DC, impersonates it and then take control of the domain.
This attack is still possible with NTLMv2 but this is more difficult.

Windows has default security settings regarding LM/NTLM. Windows XP: Send LM & NTLM responses, Windows Server 2003: Send NTLM response only, Vista/2008: Win7/2008 R2: Send NTLMv2 response only.

However Domain Controllers have relaxed default settings to accept the connection of older operating systems.
That means that by default, NTLMv1 is accepted on domain controllers.
If no GPO defines the LAN Manager Authentication Level, the DC fall back to the non secure default.

Advised solution:

After an audit of NTLMv1 usage (see the links below), you need to raise the LAN Manager Authentication Level to "Send NTLMv2 response only. Refuse LM & NTLM".
This can be done by editing the policy "Network security: LAN Manager authentication level" which can be accessed in Computer Configuration\Windows Settings\Security Settings\Local Policies\Security Options
The policy will be applied after a computer reboot.

Beware that you may break software which is not compatible with Ntlmv2 such as very old Linux stacks or very old Windows before Windows Vista.
But please note that Ntlmv2 can be activited on all Windows starting Windows 95 and other operating systems.

Points:

15 points if present

Documentation:

https://learn.microsoft.com/en-us/troubleshoot/windows-server/windows-security/audit-domain-controller-ntlmv1
https://learn.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/network-security-restrict-ntlm-ntlm-authentication-in-this-domain
https://learn.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/network-security-lan-manager-authentication-level
https://learn.microsoft.com/en-us/troubleshoot/windows-client/windows-security/enable-ntlm-2-authentication
[MITRE]T1557.001 Man-in-the-Middle: LLMNR/NBT-NS Poisoning and SMB Relay
[FR]ANSSI - Recommandations de sécurité relatives à Active Directory - R37 [paragraph.3.6.2.1]

Details:

The detail can be found in Security settings

GPOValue
Windows default without an active GPO 3
+ 15 Point(s)

Ensure that GPO items cannot be modified by any user

Rule ID:

P-DelegationGPOData

Description:

The purpose is to ensure that standard users cannot modify GPO

Technical explanation:

When the group Authenticated Users, Everyone or any similar groups have permission to modify a GPO, it can be abused to take control of the accounts where this GPO applies. It can potentially lead to the compromise of the domain

Advised solution:

Edit the Access Control List (ACL) of the GPO object or the directory where the items is located. Then remove any write permission given to the group.

Points:

15 points per discovery

Documentation:

[FR]ANSSI - Recommandations de sécurité relatives à Active Directory - R18 [subsubsection.3.3.2]
[US]STIG V-2370 - The access control permissions for the directory service site group policy must be configured to use the required access permissions.
[MITRE]Mitre Att&ck - Mitigation - Active Directory Configuration

Details:
GPOItemAccountRight
NTLM Block \\DC2.domain.local\sysvol\domain.local\Policies\{E018745D-AF45-473D-B5F2-31169FA435C2} Authenticated Users FullControl
+ 10 Point(s)

Ensure that no accounts are subject to unconstrained delegation

Rule ID:

P-UnconstrainedDelegation

Description:

This rule identifies accounts configured with Kerberos unconstrained delegation, a high-risk setting that allows a compromised service to impersonate any domain user and potentially lead to full domain compromise.

Technical explanation:

Kerberos unconstrained delegation allows a service to reuse a user’s Ticket Granting Ticket (TGT) to authenticate to any service in the domain. If the delegated account is compromised, cached TGTs can be extracted and used to impersonate any authenticating user.
If a privileged account or a Domain Controller authenticates to such a service, potentially via forced authentication techniques, the attacker can escalate privileges and compromise the entire domain. Disabling the account does not remove this risk, as delegation settings persist and become active again if the account is re-enabled.

Advised solution:

Kerberos unconstrained delegation should be removed wherever it is configured. If delegation is required, it must be replaced with Kerberos constrained delegation.

Step 1: Remove Unconstrained Delegation
Remove the ability for the account to delegate credentials to any service.

Computer accounts
Set-ADComputer -Identity -TrustedForDelegation $false

User accounts
Set-ADUser -Identity -TrustedForDelegation $false

Step 2: Configure Constrained Delegation (Only If Required)

If an application requires delegation:
1. Open Active Directory Users and Computers
2. Open the account properties
3. Go to the Delegation tab
4. Select “Trust this computer for delegation to specified services only”
5. Select “Use Kerberos only”
6. Add only the specific services that are required for the application

Do not enable delegation if it is not strictly necessary.

Points:

5 points per discovery

Documentation:

https://learn.microsoft.com/en-us/archive/blogs/389thoughts/get-rid-of-accounts-that-use-kerberos-unconstrained-delegation
https://adsecurity.org/?p=1667
[FR]ANSSI - Recommandations de sécurité relatives à Active Directory - R18 [subsubsection.3.3.2]
[FR]ANSSI - Unconstrained authentication delegation (vuln2_delegation_t4d)2
[MITRE]T1187 Forced Authentication
[MITRE]Mitre Att&ck - Mitigation - Active Directory Configuration

Details:

The detail can be found in User information and Computer information

DNName
CN=kerbdeleg1,OU=Admin,DC=domain,DC=local kerbdeleg1
CN=kerbdeleg3,OU=Admin,DC=domain,DC=local kerbdeleg3
+ 10 Point(s)

Check if dangerous SID are stored in the SIDHistory attribute.

Rule ID:

T-SIDHistoryDangerous

Description:

The purpose is to ensure that the dangerous SID are not stored in the SIDHistory attribute.

Technical explanation:

SID History is an attribute used in migration to link with a former account.
This rule checks for SID not coming from a former domain (such as SYSTEM) or from a former domain but having a RID (the last part of the SID) lower than 1000.
Indeed, native privileged accounts have a SID lower than 1000.
A list of Well Known SID is referenced in the documentation below.

Advised solution:


Identify the account, computer or group having these dangerous SID set in SID History, then clean it up by editing directly the SIDHistory attribute of the underlying AD object.

To remove the SIDHistory from a user account, run:
Get-ADUser USERNAME -properties sidhistory | foreach {Set-ADUser $_ -remove @{sidhistory=$_.sidhistory.value}}
For a group, run:
Get-ADGroup GROUPNAME -properties sidhistory | foreach {Set-ADGroup $_ -remove @{sidhistory=$_.sidhistory.value}}
For all users in a OU:
Get-ADUser -SearchBase "OU=Accounts,DC=mydomain,DC=com" -Filter {sidhistory -like '*'} -properties sidhistory | foreach {Set-ADUser $_ -remove @{sidhistory=$_.sidhistory.value}}

Points:

10 points if present

Documentation:

https://learn.microsoft.com/en-us/windows-server/identity/ad-ds/manage/understand-security-identifiers
[FR]ANSSI - Recommandations de sécurité relatives à Active Directory - R15 [paragraph.3.3.1.5]
[FR]ANSSI - Accounts or groups with unexpected SID history (vuln2_sidhistory_dangerous)2
[MITRE]Mitre Att&ck - Mitigation - Active Directory Configuration
[MITRE]T1134.005 Access Token Manipulation: SID-History Injection

Details:

The SIDHistory detail can be found in User information and Computer information and a quick summary in SID History

Domain
domain.local
+ 10 Point(s)

Check for short password length in password policy

Rule ID:

A-MinPwdLen

Description:

The purpose is to verify if the password policy of the domain enforces users to have at least 8 characters in their password

Technical explanation:

A check is performed to identify if the GPO regarding password policy allows less than 8 characters password. Short passwords represent a high risk because they can fairly easily be brute-forced or password sprayed. Most CERT and agencies advise for at least 8 characters (and often this number goes up to 12)

Advised solution:

To solve the issue, the best way is to either remove the GPO enabling short password, or to modify it in order to increase the password length to at least 8 characters

Points:

10 points if present

Documentation:

https://www.microsoft.com/en-us/research/publication/password-guidance/
[FR]ANSSI - Privileged group members with weak password policy (vuln2_privileged_members_password)2
[MITRE]T1201 Password Policy Discovery

Details:

The detail can be found in Password policies

GPO
Default Domain Policy
+ 10 Point(s)

Ensure that the Print Spooler service cannot be abused to get the DC credentials

Rule ID:

A-DC-Spooler

Description:

The purpose is to ensure that credentials cannot be extracted from the DC via its Print Spooler service

Technical explanation:

When there's an account with unconstrained delegation configured (which is fairly common) and the Print Spooler service running on a computer, you can get that computers credentials sent to the system with unconstrained delegation as a user. With a domain controller, the TGT of the DC can be extracted allowing an attacker to reuse it with a DCSync attack and obtain all user hashes and impersonate them.

Advised solution:

The Print Spooler service should be deactivated on domain controllers. Please note as a consequence that the Printer Pruning functionality (rarely used) will be unavailable.

Points:

10 points if present

Documentation:

https://adsecurity.org/?p=4056
https://www.slideshare.net/harmj0y/derbycon-the-unintended-risks-of-trusting-active-directory
[MITRE]T1187 Forced Authentication

Details:

The detail can be found in Domain controllers

Domain controller
DC
DC2
RODC
+ 5 Point(s)

Obsolete OS (Windows 10 or Windows 11)

Rule ID:

S-OS-W10

Description:

The purpose is to ensure that there is no use of non-supported version of Windows 10 or Windows 11 within the domain

Technical explanation:

Some versions of Windows 10 and Windows 11 OS are no longer supported, and may be vulnerable to exploits that are not patched anymore.

Advised solution:

In order to solve this security issue, you should upgrade all the Windows 10 or Windows 11 to a more recent version.
Use PingCastle.exe and select export on the main menu. Then choose to export computers. PingCastle will produce a list of all your computers with the OS version in a csv file. You can then use Excel to filter them.
Do note that you can get the full details regarding the OS used with the following PowerShell command: Get-ADComputer -Filter {(Enabled -eq $true) -and (OperatingSystem -Like "*Windows 10*")} -Property Name,OperatingSystem,OperatingSystemServicePack,OperatingSystemVersion | format-table Name,OperatingSystem,OperatingSystemServicePack,OperatingSystemVersion -Wrap -Auto

Points:

15 points if the occurence is greater than or equals than 15
then 10 points if the occurence is greater than or equals than 6
then 5 points if present

Documentation:

https://learn.microsoft.com/en-us/windows/release-health/release-information
[FR]ANSSI CERTFR-2005-INF-003
[MITRE]Mitre Att&ck - Mitigation - Update Software

Details:

The detail can be found in Operating Systems

VersionNumberActive
Windows 10 22H2 1 0
Windows 11 22H2 1 1
+ 5 Point(s)

Check if privileged users have been revealed on RODC

Rule ID:

P-RODCAdminRevealed

Description:

The purpose is to check if privileged users have already been revealed

Technical explanation:

On Active Directory, all users revealed to a RODC are tracked by an attribute set on the computer object of the RODC named msDS-RevealedUsers.
The program checks on the list of revealed users if one of them is known as a privileged user.
Indeed, the RODC is caching the authentication secrets related of this user, which can then be used to impersonate it.
In addition to that, RODC are placed in general on more riskier environment.

Advised solution:

The admin account should have its secrets change (a password reset) and be sure that the account will not be revealed anymore.

Points:

5 points per discovery

Documentation:

https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/8dfc81be-7461-48f2-8caf-07402bccb0ea
[FR]ANSSI - Privileged users revealed on RODC (vuln2_rodc_priv_revealed)2
[MITRE]Mitre Att&ck - Mitigation - Active Directory Configuration

Details:

The detail can be found in Domain controllers

Domain controllerUser
RODC CN=DA,CN=Users,DC=domain,DC=local
+ 5 Point(s)

Check for GPO granting access to the domain without any account

Rule ID:

A-AnonymousAuthorizedGPO

Description:

The purpose is to identify domains having a GPO which allows access to the domain without any account

Technical explanation:

It is possible that domains are set to authorize connection without any account, which represents a security breach. It allows potential attackers to enumerate all the users and computers belonging to a domain, in order to identify very efficiently future weak targets.
It is possible to verify the results provided by the PingCastle solution by using a Kali Linux distribution. You should run [rpcclient -U '' -N target_ip_address] to finally type [enumdomusers].

Advised solution:

In order to remove the anonymous access, we advise to identify the GPO indicated by the program and change the setting restrictanonymous and restrictanonymoussam

Points:

5 points if present

Documentation:

https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-2000-server/cc963223%28v%3dtechnet.10%29
https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/jj852184(v=ws.11%29
[US]STIG V-14798 - Directory data (outside the root DSE) of a non-public directory must be configured to prevent anonymous access.
[MITRE]T1110.003 Brute Force: Password Spraying

Details:

The detail can be found in Security settings

GPO
Anonymous Stuff
+ 5 Point(s)

Hardened Paths weakness

Rule ID:

A-HardenedPaths

Description:

The purpose is to ensure that there is no weakness related to hardened paths

Technical explanation:

Two vulnerabilities have been reported in 2015 (MS15-011 and MS15-014) which allows a domain takeover via GPO modifications done with a man-in-the-middle attack.
To mitigate these vulnerabilites, Microsoft has designed a workaround named "Hardened Paths". It forces connection settings to enforce Integrity, Mutual Authentication or Privacy.
By default if this policy is empty, if will enforce Integrity and Mutual Authentication on the SYSVOL or NETLOGON shares.
This rule checks if there have been any overwrite to disable this protection.

Advised solution:

You have to edit the Hardened Path section in the GPO.
This section is located in Computer Configuration/Policies/Administrative Templates/Network/Network Provider.
Check each value reported here and make sure that entries containing SYSVOL or NETLOGON have RequireIntegrity and RequireMutualAuthentication set to 1.
In addition to that, check entries having the pattern \\DCName\* and apply the same solution.

Points:

5 points if present

Documentation:


https://labs.withsecure.com/publications/how-to-own-any-windows-network-with-group-policy-hijacking-attacks
https://talubu.wordpress.com/2018/02/28/configuring-unc-hardened-access-through-group-policy/
https://adsecurity.org/?p=1405
https://support.microsoft.com/en-us/topic/ms15-011-vulnerability-in-group-policy-could-allow-remote-code-execution-february-10-2015-91b4bda2-945d-455b-ebbb-01d1ec191328
[US]STIG V-63577 - Hardened UNC Paths must be defined to require mutual authentication and integrity for at least the \\*\SYSVOL and \\*\NETLOGON shares.
[MITRE]T1557.001 Man-in-the-Middle: LLMNR/NBT-NS Poisoning and SMB Relay

Details:

The detail can be found in the Hardened Paths configuration section.

GPOKeyRequireIntegrityRequireMutualAuthenticationRequirePrivacy
No GPO Found NETLOGON Not Set Not Set Not Set
No GPO Found SYSVOL Not Set Not Set Not Set
+ 2 Point(s)

Obsolete OS (Windows Server 2012)

Rule ID:

S-OS-2012

Description:

The purpose is to ensure that there is no use of the obsolete and vulnerable OS Windows Server 2012 for the workstations within the domain

Technical explanation:

The Windows Server 2012 OS is no longer supported, as it is vulnerable to many publicly known exploits: Administrator's credentials can be captured, security protocols are weak, etc.

Advised solution:

In order to solve this security issue, you should upgrade all the servers to a more recent version of Windows, starting from Windows Server 2012.
Use PingCastle.exe and select export on the main menu. Then choose to export computers. PingCastle will produce a list of all your computers with the OS version in a csv file. You can then use Excel to filter them.
Do note that you can get the full details regarding the OS used with the following PowerShell command: Get-ADComputer -Filter {(Enabled -eq $true) -and (OperatingSystem -Like "*Server 2012*")} -Property Name,OperatingSystem,OperatingSystemServicePack,OperatingSystemVersion | format-table Name,OperatingSystem,OperatingSystemServicePack,OperatingSystemVersion -Wrap -Auto

Points:

10 points if the occurence is greater than or equals than 15
then 5 points if the occurence is greater than or equals than 6
then 2 points if present

Documentation:

https://learn.microsoft.com/en-US/lifecycle/products/windows-server-2012-r2
[FR]ANSSI CERTFR-2005-INF-003
[MITRE]Mitre Att&ck - Mitigation - Update Software

Details:

The detail can be found in Operating Systems

+ 1 Point(s)

Check that there is no account with never-expiring passwords

Rule ID:

S-PwdNeverExpires

Description:

The purpose is to ensure that every account has a password which is compliant with password expiration policies

Technical explanation:

Some accounts have passwords which never expire. Should an attacker compromise one of these accounts, he would be able to maintain long-term access to the Active Directory domain.

We have noted that some Linux servers, domain joined, are configured with a password which never expires.
This is a misconfiguration because a password change can be configured. It was however not the default on some plateform.
See one of the link below for more information.

Advised solution:

In order to make Active Directory enforce periodic password change, accounts must not have the "Password never expires" flag set in the "Account" tab of the user properties. Their passwords should then be rolled immediately.
For service accounts, Windows provides the "managed service accounts" and "group managed service accounts" features to facilitate the automatic change of passwords.
Please note that there is a document in the section below which references solutions for service accounts of well known products.
Also Linux servers should be configured with automatic machine account change.

Points:

1 points if present

Documentation:

https://adsecurity.org/?p=4115
https://access.redhat.com/discussions/1283873
[FR]ANSSI - Accounts with never-expiring passwords (vuln2_dont_expire)2
[MITRE]Mitre Att&ck - Mitigation - Active Directory Configuration

Details:

The detail can be found in User information

DN
CN=DA,CN=Users,DC=domain,DC=local
CN=NestedUser1,OU=Admin,DC=domain,DC=local
CN=TestUser1,OU=Admin,DC=domain,DC=local
CN=TestUser2,OU=Test1,OU=Testing,DC=domain,DC=local
CN=ShouldNotShow,OU=Test1,OU=Testing,DC=domain,DC=local
CN=TestUser3,OU=Testing,DC=domain,DC=local
CN=TestUser_EA,OU=Testing,DC=domain,DC=local
CN=TestUser_DA,OU=Testing,DC=domain,DC=local
CN=TestUser1_BadSuc,OU=TestSubjects,OU=VulnerableTest-20250619-160707,OU=Testing,DC=domain,DC=local
CN=TestUser1_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
CN=TestUser2_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
CN=TestUser3_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
CN=TestUser4_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
CN=TestUser5_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
CN=TestUser6_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
CN=TestUser7_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
CN=TestUser8_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
CN=TestUser9_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
CN=TestUser10_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
CN=TestUser11_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
CN=TestUser12_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
CN=TestUser13_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
CN=TestUser14_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
CN=TestUser15_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
CN=TestUser16_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
CN=TestUser_NEA,OU=Testing,DC=domain,DC=local
CN=TestUser17_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
CN=TestUser18_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
CN=srv_1secure,OU=Admin,DC=domain,DC=local
CN=MSOL_c92a2de74d9c,OU=Admin,DC=domain,DC=local
CN=Entra1,OU=Users,OU=Entra,DC=domain,DC=local
CN=PermTest1,OU=Admin,DC=domain,DC=local
CN=srv_si,OU=Admin,DC=domain,DC=local
CN=srv_sd,OU=Admin,DC=domain,DC=local
CN=srv_certsvc,OU=Admin,DC=domain,DC=local
CN=KerbRoast1,OU=Admin,DC=domain,DC=local
CN=AdminEmail,OU=Admin,DC=domain,DC=local
CN=Demo NoPriv,OU=Admin,DC=domain,DC=local
CN=domain user,OU=Admin,DC=domain,DC=local
CN=srv_na,OU=Admin,DC=domain,DC=local
CN=srv_na_col,OU=Admin,DC=domain,DC=local
CN=kerbdeleg3,OU=Admin,DC=domain,DC=local
CN=srv_recover,OU=Admin,DC=domain,DC=local
CN=NestedDA,OU=People,DC=domain,DC=local
CN=srv_AA,OU=Admin,DC=domain,DC=local
CN=AdminKerb1,OU=Admin,DC=domain,DC=local

To reach Level 4 you need to fix the following rules:

+ 50 Point(s)

Check for local backdoor stored in SID History

Rule ID:

T-SIDHistorySameDomain

Description:

The purpose is to ensure that accounts are not linked for more privileged accounts in the same domain

Technical explanation:

SID History is an attribute used in migration to link with a former account. It is not possible to have an account linked with an account belonging to the same domain. This can be analyzed by comparing the domain part of the SID History with the domain SID.

Advised solution:

It is not possible to have this occurrence except if a user from domain A has been migrated to domain B and then migrated again to domain A. This should be strongly investigated as it may be linked to a compromise of the domain.

To remove the SIDHistory from a user account, run:
Get-ADUser USERNAME -properties sidhistory | foreach {Set-ADUser $_ -remove @{sidhistory=$_.sidhistory.value}}
For a group, run:
Get-ADGroup GROUPNAME -properties sidhistory | foreach {Set-ADGroup $_ -remove @{sidhistory=$_.sidhistory.value}}
For all users in a OU:
Get-ADUser -SearchBase "OU=Accounts,DC=mydomain,DC=com" -Filter {sidhistory -like '*'} -properties sidhistory | foreach {Set-ADUser $_ -remove @{sidhistory=$_.sidhistory.value}}

Points:

50 points if present

Documentation:

[FR]ANSSI - Recommandations de sécurité relatives à Active Directory - R15 [paragraph.3.3.1.5]
[FR]ANSSI - Accounts or groups with SID history set (vuln3_sidhistory_present)3
[MITRE]Mitre Att&ck - Mitigation - Active Directory Configuration
[MITRE]T1134.005 Access Token Manipulation: SID-History Injection

Details:

The SIDHistory detail can be found in User information and Computer information and a quick summary in SID History

+ 20 Point(s)

At least one administrator account can be delegated

Rule ID:

P-Delegated

Description:

The purpose is to ensure that all Administrator Accounts have the configuration flag "this account is sensitive and cannot be delegated" (or are members of the built-in group "Protected Users" when your domain functional level is at least Windows Server 2012 R2).

Technical explanation:

Without the flag "This account is sensitive and cannot be delegated" any account can be impersonated by some service account. It is a best practice to enforce this flag on administrators accounts.

Advised solution:

To correct the situation, you should make sure that all your Administrator Accounts have the check-box "This account is sensitive and cannot be delegated" active or add your Administrator Accounts to the built-in group "Protected Users" if your domain functional level is at least Windows Server 2012 R2 (some functionalities may not work properly afterwards, you should check the official documentation).
If you want to enable the check-box "This account is sensitive and cannot be delegated" but this is not possible because the box is not present (typically for GMSA accounts), you can add the flag manually by adding the number 1048576 to the attribute useraccountcontrol of the account.
Please note that there is a section below in this report named "Admin Groups" which gives more information.

Points:

20 points if present

Documentation:

[US]STIG V-36435 - Delegation of privileged accounts must be prohibited.
[MITRE]Mitre Att&ck - Mitigation - Active Directory Configuration

Details:

The detail can be found in Admin Groups

DNReason
CN=srv_certsvc,OU=Admin,DC=domain,DC=local Not a protected user
CN=Administrator,CN=Users,DC=domain,DC=local Not a protected user
CN=srv_na_col,OU=Admin,DC=domain,DC=local Not a protected user
CN=TestUser_DA,OU=Testing,DC=domain,DC=local Not a protected user
CN=TestUser_EA,OU=Testing,DC=domain,DC=local Not a protected user
CN=DA,CN=Users,DC=domain,DC=local Not a protected user
CN=AdminKerb1,OU=Admin,DC=domain,DC=local Not a protected user
CN=srv_AA,OU=Admin,DC=domain,DC=local Not a protected user
CN=srv_recover,OU=Admin,DC=domain,DC=local Not a protected user
CN=srv_sd,OU=Admin,DC=domain,DC=local Not a protected user
CN=srv_1secure,OU=Admin,DC=domain,DC=local Not a protected user
CN=ED_MERRILL,OU=People,DC=domain,DC=local Not a protected user
CN=TestUser_NEA,OU=Testing,DC=domain,DC=local Not a protected user
CN=NestedDA,OU=People,DC=domain,DC=local Not a protected user
CN=RUPERT_COMPTON,OU=ESM,OU=People,DC=domain,DC=local Not a protected user
+ 15 Point(s)

Check for hidden group membership for user accounts

Rule ID:

S-PrimaryGroup

Description:

The purpose is to check for unusual values in the primarygroupid attribute used to store group memberships

Technical explanation:

In Active Directory, group membership is stored on the "members" attribute and on the "primarygroupid" attribute. The default primary group value is "Domain Users" for the users, "Domain Computers" for the computers and "Domain Controllers" for the domain controllers. The primarygroupid contains the RID (last digits of a SID) of the group targeted. It can be used to store hidden membership as this attribute is not often analyzed.

Advised solution:

Unless strongly justified, change the primary group id to its default: 513 or 514 for users, 516 or 521 for domain controllers, 514 or 515 for computers. The primary group can be edited in a friendly manner by editing the account with the "Active Directory Users and Computers" and after selecting the "Member Of" tab, "set primary group".
You can use the following script to list Users with a primary group id different from domain users:
$DomainUsersSid = New-Object System.Security.Principal.SecurityIdentifier ([System.Security.Principal.WellKnownSidType]::AccountDomainUsersSid,(Get-ADDomain).DomainSID)

Get-ADUser -Filter * -Properties PrimaryGroup | Where-Object { $_.PrimaryGroup -ne (Get-ADGroup -Filter {SID -eq $DomainUsersSid} ).DistinguishedName } | Select-Object UserPrincipalName,PrimaryGroup

Points:

15 points if present

Documentation:

[FR]ANSSI - Accounts with modified PrimaryGroupID (vuln3_primary_group_id_nochange)3
[MITRE]Mitre Att&ck - Mitigation - Active Directory Configuration

Details:

The detail can be found in User information and Computer information

DN
CN=CLARK_PEREZ,OU=GOO,OU=People,DC=domain,DC=local
CN=JANELL_ODONNELL,OU=Admin,DC=domain,DC=local
+ 15 Point(s)

Check for the last backup date according to Microsoft standard

Rule ID:

A-BackupMetadata

Description:

The purpose is to check if the backups are actually up to date in case they are needed. The alert can be triggered when a domain is backed up using non-recommended methods

Technical explanation:

A verification is done on the backups, ensuring that the backup is performed according to Microsoft standards. Indeed, at each backup the DIT Database Partition Backup Signature is updated. If for any reasons, backups are needed to perform a rollback (rebuild a domain) or to track past changes, the backups will actually be up to date. This check is equivalent to a REPADMIN /showbackup *.

Advised solution:

Plan AD backups based on Microsoft standards. These standards depend on the Operating System. For example with the wbadmin utility: wbadmin start systemstatebackup -backuptarget:d:

Points:

15 points if the occurence is greater than or equals than 7

Documentation:

https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/jj130668(v=ws.10)
[US]STIG V-25385 - Active Directory data must be backed up daily for systems with a Risk Management Framework categorization for Availability of moderate or high. Systems with a categorization of low must be backed up weekly.
[MITRE]Mitre Att&ck - Mitigation - Data Backup

Details:

The detail can be found in Backup

+ 10 Point(s)

Check if there is the expected audit policy on domain controllers.

Rule ID:

A-AuditDC

Description:

The purpose is to ensure that the audit policy on domain controllers collects the right set of events.

Technical explanation:

To detect and mitigate an attack, the right set of events need to be collected.
The audit policy is a compromise between too much and too few events to collect.
To solve this problem, the suggested audit policy from adsecurity.org is checked against the audit policy in place.

Advised solution:

Identify the Audit settings to apply and fix them.
Be aware that there are two places for audit settings.
For "Simple" audit configuration:
in Computer Configuration -> Policies -> Windows Settings -> Security Settings -> Local Policies -> Audit Policies
For "Advanced" audit configuration:
in Computer Configuration -> Policies -> Windows Settings -> Security Settings -> Advanced Audit Policy Configuration
Also be sure that the audit GPO is applied to all domain controllers, as the underlying object may be in a OU where the GPO is not applied.

Points:

10 points if present

Documentation:

https://adsecurity.org/?p=3299
https://adsecurity.org/?p=3377
[MITRE]Mitre Att&ck - Mitigation - Audit

Details:

The detail can be found in Audit settings
The table below shows the settings that were not found as configured in a GPO for a given domain controller.

TypeAuditProblemRationaleDomain controller
Advanced Policy Change / Authentication Policy Change No GPO check for audit success Collect events 4713, 4716, 4739, 4867, to track trust modifications DC
Advanced Detailed Tracking / DPAPI Activity No GPO check for audit success Collect event 4692 to track the export of DPAPI backup key DC
Advanced Detailed Tracking / Process Creation No GPO check for audit success Collect event 4688 to get the history of executed programs DC
Advanced System / Security System Extension No GPO check for audit success Collect events 4610, 4697 to track lsass security packages and services DC
Advanced Privilege Use / Sensitive Privilege Use No GPO check for audit success Collect events 4672, 4673, 4674 for privileges tracking such as the debug one DC
Advanced Logon/Logoff / Special Logon No GPO check for audit success Collect event 4964 for special group attributed at logon DC
Advanced Policy Change / Authentication Policy Change No GPO check for audit success Collect events 4713, 4716, 4739, 4867, to track trust modifications DC2
Advanced Detailed Tracking / DPAPI Activity No GPO check for audit success Collect event 4692 to track the export of DPAPI backup key DC2
Advanced Detailed Tracking / Process Creation No GPO check for audit success Collect event 4688 to get the history of executed programs DC2
Advanced System / Security System Extension No GPO check for audit success Collect events 4610, 4697 to track lsass security packages and services DC2
Advanced Privilege Use / Sensitive Privilege Use No GPO check for audit success Collect events 4672, 4673, 4674 for privileges tracking such as the debug one DC2
Advanced Logon/Logoff / Special Logon No GPO check for audit success Collect event 4964 for special group attributed at logon DC2
Advanced Policy Change / Authentication Policy Change No GPO check for audit success Collect events 4713, 4716, 4739, 4867, to track trust modifications RODC
Advanced Detailed Tracking / DPAPI Activity No GPO check for audit success Collect event 4692 to track the export of DPAPI backup key RODC
Advanced Detailed Tracking / Process Creation No GPO check for audit success Collect event 4688 to get the history of executed programs RODC
Advanced System / Security System Extension No GPO check for audit success Collect events 4610, 4697 to track lsass security packages and services RODC
Advanced Privilege Use / Sensitive Privilege Use No GPO check for audit success Collect events 4672, 4673, 4674 for privileges tracking such as the debug one RODC
Advanced Logon/Logoff / Special Logon No GPO check for audit success Collect event 4964 for special group attributed at logon RODC
+ 10 Point(s)

RPC interfaces potentially vulnerable to Coerce attacks

Rule ID:

A-DC-Coerce

Description:

The objective is to assess the vulnerability of the Domain Controller (DC) to Coerce attacks.

Technical explanation:

Coerce attacks are a category of attacks which aims to forcing domain controllers to authenticate to a device controlled by the attacker for the purpose to relay this authentication to gain privileges.
This category of attacks is usually mitigated by applying patch (PetitPotam), disabling services (Spooler), added RPC filter (EDR or firewall) or ensuring integrity (SMB integrity).
Because each of these protections can be individually bypassed (NTLM integrity is disabled on LDAPS), the aim of this scan is to detect proactively if vulnerable RPC services are exposed.

PingCastle estimates that Coerceable interfaces are protected if:
- the GPO "Network security: Restrict NTLM: Outgoing NTLM traffic to remote servers" is applied through a GPO to DC
- or if RPC interfaces are not reachable

Because these interfaces need to be tested from a computer controlled by the attacker, PingCastle cannot do this test with reliability.
Instead, it sends a malformed RPC packet to try to trigger an error such as "Permission denied" or "RPC interface unavailable".
If the error RPC_X_BAD_STUB_DATA (1783) is triggered, PingCastle considers that the interface is available.
A report that a vulnerable interface is online may not be accurate because its full exploitation is not tested.

Also to avoid EDR alerts or to not perform the scan, you can run PingCastle with the flag --skip-dc-rpc

Advised solution:

To effectively mitigate the vulnerability, consider one of the following approaches:

1. Apply Group Policy Object (GPO) - "Network security: Restrict NTLM: Outgoing NTLM traffic to remote servers":
Apply this GPO specifically to the Organizational Unit (OU) "Domain Controllers".
Caution: Enabling this GPO might impact services dependent on NTLM such as files copy Backups.
Consider setting the GPO in "Audit mode" initially to identify and assess the impact on affected services.

2. Enable RPC Filters in Windows Firewall:
Configure Windows Firewall to block specific Interface IDs associated with vulnerable RPC interfaces.
This is done using the netsh command. See the documentation links for more information.
Exercise caution: This method filters the entire interface, not specific Operation Numbers (OpNum).
Adjust exceptions for necessary services to ensure critical functionality.

3. Implement External Filters (e.g., EDR, Firewalls):
Leverage third-party solutions, such as Endpoint Detection and Response (EDR) tools or firewalls.
Notable project: rpcfirewall https://github.com/zeronetworks/rpcfirewall, offering logical filtering at the OpNum level.
Be cautious of potential impact and ensure compatibility with existing infrastructure.

Points:

10 points if present

Documentation:

https://github.com/p0dalirius/Coercer
https://learn.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/network-security-restrict-ntlm-outgoing-ntlm-traffic-to-remote-servers
https://blog.nviso.eu/2023/12/08/rpc-or-not-here-we-log-preventing-exploitation-and-abuse-with-rpc-firewall/
[MITRE]T1187 Forced Authentication

Details:

The detail can be found in Domain controllers

DCNameIPInterfaceFunctionOpNum
DC 10.0.0.10 12345678-1234-abcd-ef00-0123456789ab RpcRemoteFindFirstPrinterChangeNotification 62
DC 10.0.0.10 12345678-1234-abcd-ef00-0123456789ab RpcRemoteFindFirstPrinterChangeNotificationEx 65
DC 10.0.1.10 12345678-1234-abcd-ef00-0123456789ab RpcRemoteFindFirstPrinterChangeNotification 62
DC 10.0.1.10 12345678-1234-abcd-ef00-0123456789ab RpcRemoteFindFirstPrinterChangeNotificationEx 65
DC 192.168.1.145 12345678-1234-abcd-ef00-0123456789ab RpcRemoteFindFirstPrinterChangeNotification 62
DC 192.168.1.145 12345678-1234-abcd-ef00-0123456789ab RpcRemoteFindFirstPrinterChangeNotificationEx 65
DC2 10.0.0.11 12345678-1234-abcd-ef00-0123456789ab RpcRemoteFindFirstPrinterChangeNotification 62
DC2 10.0.0.11 12345678-1234-abcd-ef00-0123456789ab RpcRemoteFindFirstPrinterChangeNotificationEx 65
RODC 10.0.0.56 12345678-1234-abcd-ef00-0123456789ab RpcRemoteFindFirstPrinterChangeNotification 62
RODC 10.0.0.56 12345678-1234-abcd-ef00-0123456789ab RpcRemoteFindFirstPrinterChangeNotificationEx 65
+ 10 Point(s)

Check if all privileged accounts are in the special group Protected Users.

Rule ID:

P-ProtectedUsers

Description:

The purpose is to ensure that all privileged accounts are in the Protected User security group

Technical explanation:

The Protected User group is a special security group which automatically applies protections to minimize credential exposure. Starting with Windows 8.1. Older Operating System must be updated to take this protection in account such as the Windows 7 KB2871997 patch.
For admins, it:
- Disables NTLM authentication
- Reduces Kerberos ticket lifetime
- Mandates strong encryption algorithms, such as AES
- Prevents password caching on workstations
- Prevents any type of Kerberos delegation

Please also note that a few links (see below) recommends that at least one account is kept outside of the group Protected Users in case there is a permission problem.
That's why this rule is not triggered if only one account is not protected.

Advised solution:

After having reviewed the potential impact on adding users to this group, add the missing privileged accounts to this group.

Points:

10 points if the occurence is greater than or equals than 2

Documentation:

https://learn.microsoft.com/en-us/windows-server/security/credentials-protection-and-management/protected-users-security-group
https://blog.netwrix.com/2015/02/20/add-sensitive-user-accounts-to-active-directory-protected-users-group/
https://dirteam.com/sander/2014/11/25/ten-things-you-need-to-be-aware-of-before-using-the-protected-users-group/
https://blog.andreas-schreiner.de/2018/09/07/active-directory-sicherheit-teil-1-privilegierte-benutzer/
[US]STIG V-78131 - Accounts with domain level administrative privileges must be members of the Protected Users group in domains with a domain functional level of Windows 2012 R2 or higher.
[FR]ANSSI CERTFR-2017-ALE-012
[FR]ANSSI - Privileged accounts outside of the Protected Users group (vuln3_protected_users)3
[MITRE]Mitre Att&ck - Mitigation - Privileged Process Integrity

Details:

The detail can be found in Admin Groups

User
srv_certsvc
Administrator
srv_na_col
TestUser_DA
TestUser_EA
DA
AdminKerb1
srv_AA
srv_recover
srv_sd
srv_1secure
ED_MERRILL
TestUser_NEA
NestedDA
RUPERT_COMPTON
+ 10 Point(s)

Avoid unexpected schema modifications which could result in domain rebuild

Rule ID:

P-SchemaAdmin

Description:

The purpose is to ensure that no account can make unexpected modifications to the schema

Technical explanation:

The group "Schema Admins" is used to give permissions to alter the schema. Once a modification is performed on the schema such as new objects, it cannot be undone. This can result in a rebuild of the domain. The best practice is to have this group empty and to add an administrator when a schema update is required, then remove this group membership.

Advised solution:

Remove the accounts or groups belonging to the "schema administrators" group.

Points:

10 points if present

Documentation:

[US]STIG V-72835 - Membership to the Schema Admins group must be limited
[FR]ANSSI - Recommandations de sécurité relatives à Active Directory - R13 [subsection.3.2]
[MITRE]Mitre Att&ck - Mitigation - Privileged Account Management

Details:

The detail can be found in Admin Groups

+ 5 Point(s)

Check the Allowed RODC Password Replication Group group

Rule ID:

P-RODCAllowedGroup

Description:

The purpose is to ensure that the Allowed RODC Password Replication Group group is empty.

Technical explanation:

Accounts belonging to the Allowed RODC Password Replication Group group have their password hashes revealed on all RODCs.

Advised solution:

This group should be emptied, and dedicated groups should only be added to the Password Replication Policy of each relevant RODC.

Points:

5 points if present

Documentation:

[FR]ANSSI - Dangerous configuration of replication groups for read-only domain controllers (RODCs) (allow) (vuln3_rodc_allowed_group)3
[MITRE]Mitre Att&ck - Mitigation - Active Directory Configuration

Details:
Member
CN=TestUser_DA,OU=Testing,DC=domain,DC=local
CN=Admins,OU=Admin,DC=domain,DC=local
CN=DA,CN=Users,DC=domain,DC=local
+ 5 Point(s)

Check if the protection against revealing privileged group is active

Rule ID:

P-RODCNeverReveal

Description:

The purpose is to ensure that the protection against revealing privileged group is active

Technical explanation:

In addition to the group Denied RODC Password Replication Group there is a custom setting set for RODC in an attribute named msDS-NeverRevealGroup.
This rule checks the current value against the default one.

Advised solution:

Check the value of the attribute msDS-NeverRevealGroup and the presence of the following expected groups:
- Administrators;
- Server Operators;
- Account Operators;
- Backup Operators;
- Denied RODC Password Replication Group

This can be managed in the Password Replication Policy tab of the computer object in the Active Directory Users and Computers console.

Points:

5 points if present

Documentation:

https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/8dfc81be-7461-48f2-8caf-07402bccb0ea
[FR]ANSSI - Dangerous configuration of read-only domain controllers (RODC) (neverReveal) (vuln3_rodc_never_reveal)3
[MITRE]Mitre Att&ck - Mitigation - Active Directory Configuration

Details:

The detail can be found in Domain controllers

Domain controllerGroup
RODC Administrators
RODC Server Operators
RODC Account Operators
RODC Backup Operators
RODC Denied RODC Password Replication Group
+ 5 Point(s)

Check if signing is really required for LDAP

Rule ID:

A-DCLdapSign

Description:

The purpose is to check if signing is really required for LDAP

Technical explanation:

If the the request for signing of each LDAP request is not enforced, a man in the middle can be performed on an LDAP connection.
For example to add a user to the admin group.

This test is made by ignoring the local computer security policies.
Signature enforcement is done by setting the flag ISC_REQ_INTEGRITY when initializig the Negotiate / NTLM / Kerberos authentication.
The opposite test is made with the flag ISC_REQ_NO_INTEGRITY set.

PingCastle is testing if this setting is in place by performing a LDAP authentication with and without signature enforcement.
False positives may exists if the PingCastle program is run on the server tested. That's why, if PingCastle is run on a DC, the DC will not be tested.

Advised solution:

You have to make sure that ALL LDAP clients are compatible with LDAP signature.
All versions of Windows since XP support this and also most of the Unix clients.

You have to follow the Microsoft article quoted in reference to enable LDAP signing.
This includes auditing the clients which are not compatible and instructions on how to enforce this policy.

Points:

5 points if present

Documentation:

https://learn.microsoft.com/en-US/troubleshoot/windows-server/identity/enable-ldap-signing-in-windows-server
https://support.microsoft.com/en-us/topic/2020-2023-and-2024-ldap-channel-binding-and-ldap-signing-requirements-for-windows-kb4520412-ef185fb8-00f7-167d-744c-f299a66fc00a
https://github.com/zyn3rgy/LdapRelayScan
[MITRE]T1557 Man-in-the-Middle

Details:
Domain controller
DC
DC2
RODC
+ 5 Point(s)

Check for completeness of network declaration

Rule ID:

S-DC-SubnetMissing

Description:

The purpose is to ensure that the minimum set of subnet(s) has been configured in the domain

Technical explanation:

When multiple sites are created in a domain, networks should be declared in the domain in order to optimize processes such as DC attribution. In addition, PingCastle can collect the information to be able to build a network map. This rule has been triggered because at least one domain controller has an IP address which was not found in subnet declaration. These IP addresses have been collected by querying the DC FQDN IP address in both IPv6 and IPv4 format.

Advised solution:

Locate the IP address which was found as not being part of declared subnet, then add this subnet to the "Active Directory Sites" tool. If you have found IPv6 addresses and it was not expected, you should disable the IPv6 protocol on the network card.

Points:

5 points if present

Documentation:

[MITRE]Mitre Att&ck - Mitigation - Active Directory Configuration

Details:

The detail can be found in Domain controllers

Domain controllerip
DC 192.168.1.145
+ 5 Point(s)

Check if certificate enrollment can be done with HTTP

Rule ID:

A-CertEnrollHttp

Description:

The purpose is to check if HTTP can be used to access the certificate enrollment interface

Technical explanation:

The Windows PKI, also named Active Directory Certificate Services (ADCS), can be used to request certificates.
Two services can be used: Certification Authority Web Enrollment (WebEnrollment) and Certificate Enrollment Web Service (CES).
The certificates provided by these services can be used with Kerberos to login.

Because this service can deliver certificates for Domain Controllers, it can be considered as part of Tier 0.
As a legacy service, the mechanisms to prohibit credential relay are not enforced by default.
If an attacker is able to relay privileged credentials (for example with the PetitPotam attack), it can be used to take control of the domain.

PingCastle is looking for enrollment servers registered in the Active Directory (pKIEnrollmentService objects).
It then connects to the special page http://xxx/certsrv/certrqxt.asp and http://xxx/yyy_CES_Kerberos/services.svc and tries to access the page with authentication.

If the authentication succeed and no error is returned,the program considers the interface accessible.

False positives may exists if the PingCastle program is run on the server tested. That's why, if PingCastle is run on the server, the server will not be tested.

Advised solution:

The access to certificate enrollment with HTTP should be disabled.

This can be achieved by opening the IIS console on the enrollment server.
If the service quoted in detail is WebEnrollment, the url is certsrv, else it is ending by CES_Keberos.

In the Binding setting (link at the right), keep the HTTPS binding and remove the HTTP binding.
See the link to KB5005413 in references for more information.

Note: By default, the CES service is not accessible by HTTP.

Points:

5 points if present

Documentation:

https://support.microsoft.com/en-us/topic/kb5005413-mitigating-ntlm-relay-attacks-on-active-directory-certificate-services-ad-cs-3612b773-4043-4aa9-b23d-b87910cd3429
https://dirkjanm.io/ntlm-relaying-to-ad-certificate-services/
https://www.riskinsight-wavestone.com/en/2021/06/microsoft-adcs-abusing-pki-in-active-directory-environment/
https://www.vkernel.ro/blog/installing-and-configuring-cep-and-ces-for-certificate-enrolling-on-non-domain-joined-computers
[MITRE]T1557 Man-in-the-Middle

Details:
ServerService
DC.domain.local WebEnrollment
+ 5 Point(s)

Check if Extended Protection is in place for certificate requests

Rule ID:

A-CertEnrollChannelBinding

Description:

The purpose is to check if the Extended protection for HTTPS access to the certificate enrollment interface is in place

Technical explanation:

The Windows PKI, also named Active Directory Certificate Services (ADCS), can be used to request certificates.
Two services can be used: Certification Authority Web Enrollment (WebEnrollment) and Certificate Enrollment Web Service (CES).
The certificates provided by these services can be used with Kerberos to login.

Because this service can deliver certificates for Domain Controller, it can be considered as part of Tier 0.
As a legacy service, the mechanisms to prohibit credential relay are not enforced by default.
If an attacker is able to relay privileged credentials (for example with the PetitPotam attack), it can be used to take control of the domain.

To avoid this attack with HTTPS, a feature named Channel Binding exists. It consists of passing to the authentication layer a property of the TLS channel (typically a hash of the server certificate) to bind the outer channel (TLS) and the inner channel (HTTP).
This protection is also called "Extended Protection". See rfc5929 for more details.

PingCastle is looking for enrollment servers registered in the Active Directory.
It then connect to the special page https://xxx/certsrv/certrqxt.asp and https://xxx/yyy_CES_Kerberos/service.svc
An authentication is attempted with and without Channel Binding.

False positives may exists if the PingCastle program is run on the server tested. That's why, if PingCastle is run on the server, the server will not be tested.

Advised solution:

The Extended Protection for Authentication (EPA, also called Channel Binding) should be activated on the enrollment server.

This can be achieved by opening the IIS console on the enrollment server.
In the Authentcation settings, open the Advanced Settings for the Windows Authentication.
Set "Extended Protection" to "Required".

Do this operation for the Certification Authority Web Enrollment (WebEnrollment) and Certificate Enrollment Web Service (CES).

See the link to KB5005413 below for more information. This KB also suggest to restrict the authentication to Kerberos only.

Points:

5 points if present

Documentation:

https://support.microsoft.com/en-us/topic/kb5005413-mitigating-ntlm-relay-attacks-on-active-directory-certificate-services-ad-cs-3612b773-4043-4aa9-b23d-b87910cd3429
https://dirkjanm.io/ntlm-relaying-to-ad-certificate-services/
https://www.riskinsight-wavestone.com/en/2021/06/microsoft-adcs-abusing-pki-in-active-directory-environment/
[MITRE]T1557 Man-in-the-Middle

Details:
ServerService
DC.domain.local WebEnrollment
+ 2 Point(s)

Check that the "Pre-Windows 2000 Compatible Access" group has not been modified from its default

Rule ID:

A-PreWin2000Other

Description:

The purpose is checking that no additional account has been added to the "Pre-Windows 2000 Compatible Access" group

Technical explanation:

The pre-Windows 2000 compatible access group grants access to some RPC calls which should not be available to users or computers.

Advised solution:

Remove the members from the PreWin2000 group while making sure that the group "Authenticated Users" is present. Then reboot each DC.

Points:

2 points if present

Documentation:

https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/7a76a403-ed8d-4c39-adb7-a3255cab82c5
[FR]ANSSI - Use of the "Pre-Windows 2000 Compatible Access" group (vuln3_compatible_2000_not_default)3
[MITRE]T1110.003 Brute Force: Password Spraying

Details:
DN
CN=DEVELOPMENT2026,CN=Computers,DC=domain,DC=local
CN=PC,CN=Computers,DC=domain,DC=local
CN=DC,OU=Domain Controllers,DC=domain,DC=local
+ 1 Point(s)

Additional DNS zones allow anonymous updates

Rule ID:

A-DnsZoneUpdate2

Description:

DNS zones other than the primary domain zone are configured to accept anonymous updates, allowing any device to modify DNS records without authentication.

Technical explanation:

Beyond the critical infrastructure zones checked by A-DnsZoneUpdate1, Active Directory typically hosts numerous additional DNS zones including reverse lookup zones (like 10.0.0.in-addr.arpa), application-specific zones, and subdomain zones. This rule examines all these secondary zones to identify those configured to accept nonsecure updates.

While these zones might seem less critical than your domain and _msdcs zones, they still present significant security risks when configured for nonsecure updates. Reverse lookup zones can be manipulated to bypass security controls that rely on PTR record validation. Application zones often contain service endpoints that, if hijacked, could redirect users to malicious services. Subdomain zones may host departmental or regional services that attackers could compromise.

The vulnerability exists when these zones are set to accept "nonsecure and secure" updates, meaning any network-connected device can modify records without proving its identity. This opens the door to DNS poisoning attacks, service hijacking, and reconnaissance activities that help attackers map your infrastructure.

Like its companion rule A-DnsZoneUpdate1, this check examines zones across all Active Directory partitions and filters out replication artifacts. Together, these two rules ensure complete coverage of your DNS security posture - with A-DnsZoneUpdate1 covering critical AD infrastructure and A-DnsZoneUpdate2 covering everything else.

Advised solution:

To fix this vulnerability, configure all zones for secure-only updates:

GUI Method:
1. Open DNS Manager (dnsmgmt.msc)
2. Navigate to the affected zone
3. Right-click the zone → Properties → General tab
4. Change "Dynamic updates" from "Nonsecure and secure" to "Secure only"

PowerShell Method:

# Find all zones with insecure updates
Get-DnsServerZone | Where-Object {$_.DynamicUpdate -eq "NonsecureAndSecure"}

# Fix a specific zone
Set-DnsServerPrimaryZone -Name "10.0.0.in-addr.arpa" -DynamicUpdate Secure -ComputerName DC01

# Fix all insecure zones
Get-DnsServerZone | Where-Object {$_.DynamicUpdate -eq "NonsecureAndSecure"} | ForEach-Object {
Set-DnsServerPrimaryZone -Name $_.ZoneName -DynamicUpdate Secure -ComputerName DC01
}


Command Line Method:

# Local server
dnscmd /Config <ZoneName> /AllowUpdate 2

# Remote server
dnscmd <ServerName> /Config <ZoneName> /AllowUpdate 2

# Example
dnscmd DC01 /Config contoso.com /AllowUpdate 2


Note: Some zones may require nonsecure updates for DHCP or legacy systems. Document any exceptions.

Points:

1 points if present

Documentation:

https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-dnsp/f97756c9-3783-428b-9451-b376f877319a
https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/dnscmd
[FR]ANSSI - Misconfigured DNS zones (vuln3_dnszone_bad_prop)3
[MITRE]T1557 Man-in-the-Middle

Details:
ZoneDomainDNPartition
0.0.10.in-addr.arpa domain.local DC=0.0.10.in-addr.arpa,CN=MicrosoftDNS,DC=DomainDnsZones,DC=domain,DC=local DomainDnsZones
Forest-Test.local domain.local DC=Forest-Test.local,CN=MicrosoftDNS,DC=ForestDnsZones,DC=domain,DC=local ForestDnsZones
test3.local domain.local DC=test3.local,CN=MicrosoftDNS,CN=System,DC=domain,DC=local DefaultNamingContext
Informative rule

Check if PowerShell logging is enabled.

Rule ID:

A-AuditPowershell

Description:

The purpose is to ensure that PowerShell logging is enabled.

Technical explanation:

PowerShell is a powerful language, also used by hackers because of this quality. Hackers are able to run programs such as mimikatz in memory using obfuscated commands such as Invoke-Mimikatz.
Because there is no artefact on the disk, the incident response task is difficult for the forensic analysts.
For this reason, we recommend to enable PowerShell logging via a group policy, despite the fact that these security settings may be part of the workstation or server images.

Advised solution:

Go to Computer Configuration -> Administrative Templates -> Windows Components -> Windows PowerShell
And enable "Turn on Module logging" and "Turn on PowerShell Script Block logging"
We recommend to set "*" as the module list.

Points:

Informative rule (0 point)

Documentation:

https://adsecurity.org/?p=2604
https://learn.microsoft.com/en-us/powershell/scripting/wmf/whats-new/script-logging?view=powershell-6
[US]STIG V-68819 - PowerShell script block logging must be enabled
[MITRE]Mitre Att&ck - Mitigation - Audit

Details:

The detail can be found in Security settings

Informative rule

Check if the mitigation for CVE-2021-42291 has been enabled

Rule ID:

A-DsHeuristicsLDAPSecurity

Description:

The purpose is to identify domains having mitigation for CVE-2021-42291 not set to enabled

Technical explanation:

The way an Active Directory behaves can be controlled via the attribute DsHeuristics of CN=Directory Service,CN=Windows NT,CN=Services,CN=Configuration.
A parameter stored in its attribute and whose value is LDAPAddAutZVerifications and LDAPOwnerModify can be set to modify the mitigatation of CVE-2021-42291.
The KB5008383 has introduced changes to default security descriptor of Computer containers to add audit and limit computer creation without being admin.
Indeed, it is recommended to not let anyone create computer accounts as they can be used to abuse Kerberos or to perform relay attacks.

Mitigations in CVE-2021-42291 consist of 3 choices to be set on 2 settings.
They are named LDAPAddAutZVerifications and LDAPOwnerModify and are respectively the 28th and 29th character of this string.
For the expected values:
- With the value 0 (the default), it enables an additional audit mechanism
- With the value 1 (recommended), it enforces new security permissions, especially to require an action of the domain admin when unusual actions are performed
- With the value 2 (not recommended), it disables the audit mechanism that has been added by default and do not enable the new security permissions

Advised solution:

The easiest and fastest way to correct this issue is to replace the 28th and 29th character of the DsHeuristics attribute.
The value of LDAPAddAutZVerifications and LDAPOwnerModify should be set to 1.

Open the procedure embedded into the KB5008383 to apply this mitigation and change the DsHeuristics value.

Note: You have to pay attention that there are control characters at the 10th and 20th position to avoid undesired changes of the DsHeuristics attribute.
Typically if the DsHeuristics is empty, the expected new value is 00000000010000000002000000011

Points:

Informative rule (0 point)

Documentation:

https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/e5899be4-862e-496f-9a38-33950617d2c5
https://support.microsoft.com/en-au/topic/kb5008383-active-directory-permissions-updates-cve-2021-42291-536d5555-ffba-4248-a60e-d6cbc849cde1
[FR]ANSSI - Dangerous dsHeuristics settings (vuln3_dsheuristics_bad)3
[MITRE]T1187 Forced Authentication

Details:
SettingPositionValue
LDAPAddAuthZVerifications 28th Not Set
LDAPOwnerModify 29th Not Set
Informative rule

Check the use of Kerberos on services accounts without AES support

Rule ID:

S-AesNotEnabled

Description:

The purpose is to verify that AES is enabled for service accounts.

Technical explanation:

The default encryption algorithm used by Kerberos is RC4, which directly utilizes the NTLM hash of the user’s password.
However, due to the rapid advancements in computing power, it’s recommended to transition from RC4 to the more secure AES algorithm.

Before disabling RC4, the first step is to enable AES.
It’s important to note that service accounts and user accounts with the ‘serviceprincipalname’ attribute (also known as SPN) need to be configured to support AES.
Without this configuration, AES will not be fully operational.

Accounts are listed if :
1) no password changed occured after the first DC Win 2008 install to initate AES secrets or
2) they have a SPN and the account is not flaged to use AES for encryption with msDS-SupportedEncryptionTypes

Also be advised that other checks must be performed before disabling RC4 (such as trust accounts, ...). A dedicated section in this report explores AES compatibility.

Advised solution:

It is recommended to enable AES as an encryption algorithm in the user configuration dialog or in the "msDSSupportedEncryptionTypes" attribute at LDAP level.
It has to be enabled in the property of an account by checking all the boxes "This account supports Keberos AES XXX encryption".

For GMSA account, you have to manually edit the property msDS-SupportedEncryptionTypes

Points:

Informative rule (0 point)

Documentation:

https://learn.microsoft.com/en-us/archive/blogs/openspecification/msds-supportedencryptiontypes-episode-1-computer-accounts
[FR]ANSSI - Service accounts supported encryption algorithms (vuln3_kerberos_properties_encryption)3
[MITRE]T1558.004 Steal or Forge Kerberos Tickets: AS-REP Roasting

Details:

The detail can be found in User information and Computer information

Informative rule

Check if LLMNR can be used to steal credentials

Rule ID:

A-NoGPOLLMNR

Description:

The purpose is to ensure that local name resolution protocol (LLMNR) cannot be used to collect credentials by performing a network attack

Technical explanation:

LLMNR is a protocol which translates names such as foo.bar.com into an ip address. LLMNR has been designed to translate name locally in case the default protocol DNS is not available.
Regarding Active Directory, DNS is mandatory which makes LLMNR useless.
LLMNR exploits typo mistakes or faster response time to redirect users to a specially designed share, server or website.
Being trusted, this service will trigger the single sign on procedure which can be abused to retrieve the user credentials.

LLMNR is enabled by default on all OS except starting from Windows 10 v1903 and Windows Server v1903 where it is disabled.

Advised solution:

Enable the GPO Turn off multicast name resolution and check that no GPO overrides this setting.
(if it is the case, the policy involved will be displayed below)

Points:

Informative rule (0 point)

Documentation:

https://youtu.be/Fg2gvk0qgjM
[MITRE]T1557.001 Man-in-the-Middle: LLMNR/NBT-NS Poisoning and SMB Relay

Details:

The detail can be found in Security settings

To reach Level 5 you need to fix the following rules:

+ 10 Point(s)

Check the process of registration of computers to the domain

Rule ID:

S-ADRegistration

Description:

The purpose is to ensure that basic users cannot register extra computers in the domain

Technical explanation:

By default, a basic user can register up to 10 computers within the domain. This default configuration represents a security issue as basic users shouldn't be able to create such accounts and this task should be handled by administrators.

If the value of the attribute ms-DS-MachineAccountQuota is not set (the program see this as "Infinite"), there is no limit to computer addition.

Note: this program checks also the GPO for SeMachineAccountPrivilege assignment. This assignment can be used to restrict the impact of the key ms-DS-MachineAccountQuota.

Advised solution:

To solve the issue, limit the number of extra computers that can be registered by a basic user. It can be reduced by modifying the value of ms-DS-MachineAccountQuota to zero (0). Another solution can be to remove the "Authenticated Users" group in the domain controllers policy altogether. Do note, that if you need to set delegation to an account, so it can add computers to the domain, it can be done through 2 methods: Delegation in the OU or by assigning the SeMachineAccountPrivilege to a special group

Points:

10 points if present

Documentation:

https://learn.microsoft.com/troubleshoot/windows-server/identity/default-workstation-numbers-join-domain
http://prajwaldesai.com/allow-domain-user-to-add-computer-to-domain/
http://blog.backslasher.net/preventing-users-from-adding-computers-to-a-domain.html
[MITRE]Mitre Att&ck - Mitigation - User Account Management
[FR]ANSSI - Unrestricted domain join (vuln4_user_accounts_machineaccountquota)4

+ 1 Point(s)

Check if there is a policy preventing administrators to connect to lower tier systems.

Rule ID:

P-LogonDenied

Description:

The purpose is to ensure that there is a tier isolation.

Technical explanation:

A way to collect an administrator credential is to take control of a workstation or server in the unsecured tiers and expect that an administrator will connect to it.
An attack such as credential theft or Kerberos delegation is then performed.
To reduce the impact of such compromise, the best practice is to isolate components (such as admins, DC) in tiers.
Typically, a domain admin should not be allowed to connect to any workstation or lower tier server but login only to perform highly privileged operations on tier 0 systems.

To check for this policy, PingCastle looks at all GPOs and checks, if there is a GPO denying logon (SeDenyRemoteInteractiveLogonRight, SeDenyInteractiveLogonRight) of admins (Domain Admins or Administrators) to a specific scope.

False positives can occurs for this rule:
* if the expected GPO is hidden due to ACL checks
* if the targeted group is not "checked" when saving the GPO. Indeed, the group will be saved as is without a conversion to its technical name and it will prohibit a match if there are groups internationalized, aka renamed given a specific language.

As a consequence, only one deny policy on one group will fulfill this requirements. The program also does not check if the GPO is applied on an Organizational Unit or a Container.
Also this rule is enforced only if there are more than 200 users and 200 computers.

Advised solution:

You should add a GPO to prohibit the logon of specific groups Domain Admins and Administrators.

The setting is located in Computer Policy -> Computer Configuration -> Windows Settings -> Security Settings -> Local Policies -> User Rights Assignment.
Then "Deny" logon locally and "Deny" logon through Remote Desktop Services.

Points:

1 points if present

Documentation:

https://learn.microsoft.com/en-us/windows-server/identity/ad-ds/plan/security-best-practices/appendix-f--securing-domain-admins-groups-in-active-directory
[MITRE]Mitre Att&ck - Mitigation - Privileged Account Management

Details:

The detail can be found in GPO Login

+ 1 Point(s)

Check if AES is enabled on trusts

Rule ID:

T-AlgsAES

Description:

The purpose is to check if AES can be used with Kerberos on trusts

Technical explanation:

By default, RC4 is used as the signature algorithm on Kerberos tickets.
If AES is enabled on a domain and AES is not enabled on trust, AES tickets will not be usable on the trust. The Kerberos tickets sent to the trust will fail or the trusted domain will fallback to NTLM.

The encryption algorithms allowed for a trust are stored in an attribute named msDS-SupportedEncryptionTypes.
If this attribute is not set (or has a value of zero), RC4 will be applied by default.
Else, it defines the algorithm to use for Kerberos signature.

Advised solution:

Enable AES on the domain.

Beware: there is a checkbox in the trust properties named "The other domain supports Kerberos AES Encryption".
If you enable this setting, AES will be enabled but RC4 will also be disabled.

The recommended way is to enable both RC4 and AES as a transition. It can be done by running the command:
ksetup /setenctypeattr mytrust.com RC4-HMAC-MD5 AES128-CTS-HMAC-SHA1-96 AES256-CTS-HMAC-SHA1-96

This way, the attribute msDS-SupportedEncryptionTypes of the trust will be modified to support both RC4 and AES.

Points:

1 points if present

Documentation:

https://techcommunity.microsoft.com/t5/itops-talk-blog/tough-questions-answered-can-i-disable-rc4-etype-for-kerberos-on/ba-p/382718
https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-kile/6cfc7b50-11ed-4b4d-846d-6f08f0812919
https://techcommunity.microsoft.com/t5/core-infrastructure-and-security/decrypting-the-selection-of-supported-kerberos-encryption-types/ba-p/1628797
[MITRE]Mitre Att&ck - Mitigation - Active Directory Configuration

Details:
TrustReason
child.domain.local Not Configured
Informative rule

Check if default OU location has been changed within the domain.

Rule ID:

S-DefaultOUChanged

Description:

The purpose is to ensure that the default location of computers and user OU has not been changed.

Technical explanation:

Default OU such as CN=Computers or CN=Users are stored within the wellKnownObjects attribute of the Domain object.
There are 12 default locations officialy defined.
They can be changed using the program redircmp.
Changing these default can alter the behavior of programs (such as security audit programs) as they may not check the modified objects.

Advised solution:

You have to use redircmp to set the value back to normal. See documentation for more details

Points:

Informative rule (0 point)

Documentation:

https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/5a00c890-6be5-4575-93c4-8bf8be0ca8d8
https://rickardnobel.se/verify-redirected-computers-container-in-active-directory/
[MITRE]Mitre Att&ck - Mitigation - User Account Management

Details:
ExpectedFound
CN=Users,DC=domain,DC=local OU=Admin,DC=domain,DC=local
Informative rule

Check if Authenticated Users can create DNS records

Rule ID:

A-DnsZoneAUCreateChild

Description:

The purpose is to check if Authenticated Users has the right to create DNS records

Technical explanation:

When a computer is joined to a domain, a DNS record is created in the DnsZone to allow the computer to update its DNS settings.
By design, Microsoft choose to grant to the group Authenticated Users (aka every computers and users) the right to create DNS records.
Once created, only the owner keeps the right to edit the new object.

The vulnerability is that specific DNS records can be created to perform man-in-the-middle attacks.
One example is to create a wildcard record (a record with the name "*"), a failover DNS record or anticipating the creation of a DNS record with the right permissions.

Advised solution:

As of today, this rule is considered "informative" because the default configuration where Authenticated Users can create DNS records is considered safe.
The reason for this classification is that no exploitation of that vulnerability has been reported.

The proposed enhancement is to replace the identity who has been granted the right to create DNS Records (permission CreateChild) from Authenticated Users to Domain Computers.
To perform this change, you have to edit the permission of the DNSZone whose object is located in the container CN=MicrosoftDNS,DC=DomainDnsZones.

It should be noticed that if there is a privilege escalation on a computer, an attacker can impersonate the computer account and bypass this mitigation.

The best mitigation is to create the DNS records manually as part as the domain join process and to revoke the permission granted to Authenticated Users.

Points:

Informative rule (0 point)

Documentation:

https://www.ws-its.de/gegenmassnahme-zum-angriff-dns-wildcard/
https://www.netspi.com/blog/technical/network-penetration-testing/exploiting-adidns/
[MITRE]T1557 Man-in-the-Middle

Details:
DNSZone
domain.local
0.0.10.in-addr.arpa
_msdcs.domain.local
Forest-Test.local
test3.local
Informative rule

Check if OUs and Containers are protected from accidental deletion.

Rule ID:

P-UnprotectedOU

Description:

The purpose is to ensure that Organizational Units (OUs) and Containers in Active Directory are protected to prevent accidental deletion, which could lead to data loss and disruptions in the network infrastructure.

Technical explanation:

In Active Directory, Organizational Units can be protected from accidental deletion (reads: using the del key in the wrong place at the wrong time).
This way these objects cannot be deleted, unless the protection is removed. This Active Directory feature was first introduced in Windows Server 2008.

This protection consists of a Deny ACE added to the NTSecurityDescriptor attribute applied to Everyone with the flag set to Delete and DeleteTree.

Advised solution:

To safeguard against accidental deletions, it is essential to enable the "Protect object from accidental deletion" option for critical OUs and Containers.
When this option is enabled, it adds an additional layer of security, preventing unintended deletions.
To implement this protection:

* Open the Active Directory Users and Computers management console.
* Locate the OU or Container that requires protection.
* Right-click on the OU or Container, select "Properties."
* In the "Object" tab, check the "Protect object from accidental deletion" option.
* Click "Apply" and then "OK" to save the changes.

You can list unprotected OU using the PowerShell command:
Get-ADOrganizationalUnit -filter {name -like "*"} -Properties ProtectedFromAccidentalDeletion | format-table Name,ProtectedFromAccidentalDeletion
and protect them using the command:
Get-ADOrganizationalUnit -filter {name -like "*"} -Properties ProtectedFromAccidentalDeletion | where {$_.ProtectedFromAccidentalDeletion -eq $false} | Set-ADOrganizationalUnit -ProtectedFromAccidentalDeletion $true

Note: only 10 will be listed below. Checkout the Delegations section for the complete list.

Points:

Informative rule (0 point)

Documentation:

https://dirteam.com/sander/2011/07/13/preventing-ous-and-containers-from-accidental-deletion/
[MITRE]Mitre Att&ck - Mitigation - Active Directory Configuration

Details:

The detail can be found in Delegations

OU
OU=Domain Controllers,DC=domain,DC=local
OU=GPOTest,DC=domain,DC=local
OU=Systems,DC=domain,DC=local
OU=Clients,OU=Systems,DC=domain,DC=local
OU=Servers,OU=Systems,DC=domain,DC=local
Informative rule

Verify Terminal Services configuration best practices in GPO

Rule ID:

S-TerminalServicesGPO

Description:

This rule verifies the recommended configuration for Terminal Services.

Technical explanation:

It is a common practice for hackers to look for open sessions on remote servers.
This can be done by attempting to open the user registry and checking if there is an access denied error or if the registry hive is not available at all.
If found, the hacker can exploit this information by targeting this computer, or if the session is still active, hijack it and impact the client computer.
Indeed, you can access the local drive by default and push a malicious file such as a login script in the start menu of the remote user.
Another alternative is if the session is not secure, to capture the credentials in memory.

The printer redirection has no known attack pattern.
However due to past vulnerabilites with the Printer spooler, the complexity of the underlying protocol, the relative absence of need to this feature, we recommend to block it.
It can also be a bypass for copy / paste restriction and it is recommended to deny it in most admin bastion.

Advised solution:

The Terminal Services configuration can be found in Policies / Administrative Templates / Windows Components / Remote Desktop Services / Remote Desktop Session Host
The details of this rule is located in Printer Redirection and Session Time Limits.

PingCastle recommends to set the following Policy:
Set time limit for disconnected sessions: 2h (aka MaxDisconnectionTime)
Set time limit for active but idle Remote Desktop Services sessions: 8h (aka MaxIdleTime)
Do not allow client printer redirection: Enabled (aka fDisableCpm)

This rule is active if nothing is set or if the time limit is set to NEVER.

Points:

Informative rule (0 point)

Documentation:

https://woshub.com/remote-desktop-session-time-limit/
https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-tsts/ce70794f-2138-43e8-bf6c-2c147887d6a2
https://community.spiceworks.com/t/are-redirected-printers-a-security-risk/826344/27
[MITRE]Mitre Att&ck - Mitigation - Active Directory Configuration

Details:
GPOReason
Windows default without an active GPO MaxIdleTime is not set
Windows default without an active GPO MaxDisconnectionTime is not set
Windows default without an active GPO fDisableCpm is not set
Informative rule

Ensure that DC supports Kerberos armoring when functional level is at least Windows Server 2012

Rule ID:

S-KerberosArmoringDC

Description:

The purpose is to ensure that DC supports Kerberos armoring when functional level is at least Windows Server 2012

Technical explanation:

Kerberos Armoring is an optimization of the Kerberos protocol. It avoids the pre-authentication steps and thereby prevents pre-authentication attacks.
It is supported only starting Windows Server 2012 DC and Windows 8 workstations.
If Kerberos Armoring is requested for other operating systems (such as Windows 7 or Linux), the Kerberos authentication protocol may refuse to work.

Advised solution:

To enable Kerberos armoring for domain controllers, edit the GPO and go to Computer Configuration > Administrative Templates > System > KDC
then enable the policy "KDC support for claims, compound authentication and Kerberos armoring".
The policy should be set to at least "Supported".

The safest settings is "Fail authentication requests when Kerberos armoring is not available" but it should be enabled only if the clients support Kerberos armoring.

Points:

Informative rule (0 point)

Documentation:

https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/hh831747(v=ws.11)
https://pupuweb.com/solved-how-enable-kerberos-armoring-eap-fast-ad/
[MITRE]T1558 Steal or Forge Kerberos Tickets

Details:

If activated, the detail can be found in Security settings

Informative rule

Check if NetCease has been put in place to mitigate Bloodhound

Rule ID:

A-NoNetSessionHardening

Description:

The purpose is to ensure that mitigations are in place against the Bloodhound tool

Technical explanation:

By default, Windows computers allow any authenticated user to enumerate network sessions to it.
This means an attacker could enumerate network sessions to a file share hosting home directories or a Domain Controller to see who's connected to SYSVOL (to apply Group Policy) and determine which workstations each user and admin account is logged into.
Bloodhound uses this capability extensively to map out credentials in the network.

Disabling Net Session Enumeration removes the capability for any user to enumerate net session info (Recon).

Advised solution:

If this mitigation is not part of the computer image, apply the following recommendations:
Run the NetCease PowerShell script (referenced below) on a reference workstation.
Open the Group Policy Management Console. Right-click the Group Policy object (GPO) that should contain the new preference item, and then click Edit .
In the console tree under Computer Configuration, expand the Preferences folder, and then expand the Windows Settings folder.
Right-click the Registry node, point to New, and select Registry Wizard.
Select the reference workstation on which the desired registry settings exist, then click Next .
Browse to HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\DefaultSecurity\
and select the check box for “SrvsvcSessionInfo” from which you want to create a Registry preference item. Select the check box for a key only if you want to create a Registry item for the key rather than for a value within the key.
Click Finish.
The settings that you selected appear as preference items in the Registry Wizard Values collection

Points:

Informative rule (0 point)

Documentation:

https://github.com/p0w3rsh3ll/NetCease
https://adsecurity.org/?p=3299
[MITRE]T1087.001 Account Discovery: Local Account

Details:

The detail can be found in Security settings

Informative rule

Check the Password Policy for Service Accounts (Information)

Rule ID:

A-NoServicePolicy

Description:

The purpose is to give information regarding a best practice for the Service Account password policy. Indeed, having a 20+ characters password for this account greatly helps reducing the risk of Kerberoasting attacks (offline cracking of the TGS tickets)
Note: PSO (Password Settings Objects) will be visible only if the user, which collected the information, has the permission to view it.

Technical explanation:

The rule is purely informative, as it gives insights regarding a best practice. It verifies if there is a GPO or PSO enforcing a 20+ characters password for the Service Accounts.

Advised solution:

The recommended way to handle service accounts is to use "Managed service accounts" introduced since Windows Server 2008 R2 (search for "msDS-ManagedServiceAccount").
To solve the anomaly, you should implement a PSO or GPO password guarantying a 20+ length password.

Points:

Informative rule (0 point)

Documentation:

https://www.microsoft.com/en-us/research/publication/password-guidance/
[MITRE]T1201 Password Policy Discovery

Details:

The detail can be found in Password Policies

To reach the maximum level you need to fix the following rules:

Informative rule

Verify if there are restrictions for internet connectivity of script engines

Rule ID:

S-FirewallScript

Description:

This rule verifies whether programs, such as script engines, are allowed to connect to the internet by default.

Technical explanation:

Malicious scripts, often distributed via phishing emails, frequently attempt to connect to the internet to propagate their infection.
To mitigate this risk, we recommend implementing a set of firewall rules through Group Policy Objects (GPOs).
These rules will prohibit direct internet connections for specific programs.

The current list of programs to restrict includes: wscript.exe, mshta.exe, cscript.exe, conhost.exe, and runScriptHelper.exe.

Advised solution:

1) Create Firewall Rules via GPO

Configure the firewall rules under Computer Configuration / Policies / Windows Settings / Security Settings / Windows Defender Firewall with Advanced Security.
Ensure the rules are applied on the Outbound side.
Activate the rules.

2) Network Restrictions:
We recommend setting the rules as active for the following IP address ranges to allow local network access:
0.0.0.0 to 9.255.255.255
11.0.0.0 to 126.255.255.255
128.0.0.1 to 172.15.255.255
172.32.0.0 to 192.167.255.255
192.169.0.0 to 255.255.255.255

Alternatively, you can choose to apply the rules to ALL IP addresses or add your internal proxy IP.

Points:

Informative rule (0 point)

Documentation:

https://medium.com/@cryps1s/endpoint-isolation-with-the-windows-firewall-462a795f4cfb
[MITRE]Mitre Att&ck - Mitigation - Active Directory Configuration

Details:

The detail can be found in Firewall configuration

ProgramReason
wscript.exe No Firewall rules found
mshta.exe No Firewall rules found
cscript.exe No Firewall rules found
conhost.exe No Firewall rules found
runScriptHelper.exe No Firewall rules found
Informative rule

Verify that Defender ASR mitigations are in place

Rule ID:

S-DefenderASR

Description:

This rule confirms the activation of Defender ASR (Attack Surface Reduction) mitigations within a Group Policy Object (GPO).

Technical explanation:

Microsoft Defender, the default antivirus included with Windows, activates automatically on systems without a pre-installed alternative.
Defender’s ASR features, designed to minimize vulnerability to attacks, are available even in the standard version.
These protections have been part of Windows since the release of Windows 10 version 1710 and are also applicable to Windows Server 2012 R2.

Note: Windows 11 may enable in some conditions those 3 ASR rules: Block abuse of exploited vulnerable signed drivers, Block credential stealing from the Windows local security authority subsystem (lsass.exe), Block persistence through WMI event subscription

Advised solution:

To apply an ASR mitigation, navigate to the GPO setting "Configure Attack Surface Reduction rules" found under Computer Configuration > Policies > Administrative Templates > Windows Components > Microsoft Defender Antivirus (formerly Windows Defender Antivirus) > Microsoft (Windows) Defender Exploit Guard > Attack Surface Reduction.
Upon enabling this setting, select "Set the state for each ASR rule".
Then, input the mitigation’s GUID as the Value name and assign 1 as the Value to enforce the rule in Block mode.
Other configurable values include 2 for Audit mode and 6 for Warn mode.
For instance, to block JavaScript or VBScript from executing downloaded executable content, use the GUID: d3e037e1-3eb8-44c8-a917-57927947596d.
It is recommended to set Defender ASR rules as recommended in the article below.


Prior to implementation, conduct an impact analysis to anticipate any potential disruptions, and utilize Audit mode to identify possible issues.

Points:

Informative rule (0 point)

Documentation:

https://learn.microsoft.com/en-us/defender-endpoint/attack-surface-reduction-rules-reference?view=o365-worldwide#per-asr-rule-alert-and-notification-details
https://blog.palantir.com/microsoft-defender-attack-surface-reduction-recommendations-a5c7d41c3cf8
[MITRE]Mitre Att&ck - Mitigation - Active Directory Configuration

Details:

The detail can be found in Defender ASR

GuidLabelReason
7674ba52-37eb-4a4f-a9a1-f0f9a1619a2c Block Adobe Reader from creating child processes Not found - Block or Warn recommended
9e6c4e1f-7d60-472f-ba1a-a39ef669e4b2 Block credential stealing from the Windows local security authority subsystem (lsass.exe) Not found - Block or Warn recommended
be9ba2d9-53ea-4cdc-84e5-9b1eeee46550 Block executable content from email client and webmail Not found - Block or Warn recommended
d3e037e1-3eb8-44c8-a917-57927947596d Block JavaScript or VBScript from launching downloaded executable content Not found - Block or Warn recommended
3b576869-a4ec-4529-8536-b80a7769e899 Block Office applications from creating executable content Not found - Block or Warn recommended
e6db77e5-3df2-4cf1-b95a-636979351e5b Block persistence through WMI event subscription Not found - Block or Warn recommended
b2b3f03d-6a65-4f7b-a9c7-1c7ef74a9ba4 Block untrusted and unsigned processes that run from USB Not found - Block or Warn recommended
56a863a9-875e-4185-98a7-b882c64b5ce5 Block abuse of exploited vulnerable signed drivers Not found - Block or Warn recommended
75668c1f-73b5-4cf0-bb93-3ecf5cb7cc84 Block Office applications from injecting code into other processes Not found - Audit recommended
92e97fa1-2edf-4476-bdd6-9dd0b4dddc7b Block Win32 API calls from Office macros Not found - Audit recommended
d4f940ab-401b-4efc-aadc-ad5f3c50688a Block all Office applications from creating child processes Not found - Audit recommended
5beb7efe-fd9a-4556-801d-275e5ffc04cc Block execution of potentially obfuscated scripts Not found - Audit recommended
01443614-cd74-433a-b99e-2ecdc07bfc25 Block executable files from running unless they meet a prevalence, age, or trusted list criterion Not found - Audit recommended
c1db55ab-c21a-4637-bb3f-a12568109d35 Use advanced protection against ransomware Not found - Audit recommended
d1e49aac-8f56-4280-b9ba-993a6d77406c Block process creations originating from PSExec and WMI commands Not found - Audit recommended
26190899-1602-49e8-8b27-eb1d0a1ce869 Block Office communication application from creating child processes Not found - Audit recommended
33ddedf1-c6e0-47cb-833e-de6133960387 Block rebooting machine in Safe Mode (preview) Not found - Audit recommended
c0033c00-d16d-4114-a5a0-dc9b3a7d2ceb Block use of copied or impersonated system tools (preview) Not found - Audit recommended
Informative rule

Verify the Default Application for Script File Execution

Rule ID:

S-FolderOptions

Description:

The objective is to ensure scripts do not automatically execute upon opening by default.

Technical explanation:

By default, PowerShell scripts (.ps1) open in Notepad, which blocks these extensions from being exploited in phishing attacks that evade email filters through multi-layered archives.
However, several legacy script extensions (.js, .jse, .vbs, .vbe, .vb, .wsh, .wsf) still execute with their respective engines.
While .js and .jse files are commonly associated with web content and handled by browsers, it’s crucial to recognize their potential for harm when executed directly in Windows.
Redirecting these files to open in Notepad safeguards against inadvertent execution without affecting web browsing.
The browser navigation is not impacted by this recommendation.
Review is recommended for other script files before implementing this security measure.

Note: Javascript execution can be mitigated by an "Attack surface reduction rule" named "Impede JavaScript and VBScript to launch executables" available since Windows 10, version 1709.
But we still recommend to apply the folder options mitigation as it is more effective.

Advised solution:

Navigate to Computer Configuration > Preferences > Control Panel Settings > Folder Options.
Create a new File Type with the "Replace" action for the extension you wish to secure.
In "Configure class settings", add a new "open" action with Notepad as the default application: C:\Windows\System32\notepad.exe.

Points:

Informative rule (0 point)

Documentation:

https://isc.sans.edu/diary/Controlling+JavaScript+Malware+Before+it+Runs/21171
[MITRE]Mitre Att&ck - Mitigation - Active Directory Configuration

Details:

The detail can be found in Folder Options

ExtensionReason
js Not found in Folder Options
vbs Not found in Folder Options
vbe Not found in Folder Options
vb Not found in Folder Options
wsh Not found in Folder Options
wsf Not found in Folder Options
Informative rule

Check if LDAPS is using Tls 1.0 or Tls 1.1.

Rule ID:

A-DCLdapsProtocolAdvanced

Description:

The purpose is to ensure that all DC are using the most advanced protocols when acting as server.

Technical explanation:

TLS 1.0 and TLS 1.1 are no longer recommended to use, even if there is no pratical attack to could lead to an immediate compromise of the DC.
The SChannel component needs to be tuned in order to not propose these protocols. Many guidelines to handle this problem issued by Microsoft do not talk about SChannel but rather IIS. These guidlines are quoted in the documentation section below.

PingCastle is able to check the SSL version if LDAPS is exposed. LDAPS is automatically exposed once a certificate is available for the DC and the service restarted.
Please note that PingCastle is using the native .Net SSL stack to perform this test. .Net begins to ignore these weak protocols starting the version 4.7 of the framework and as a consequence, PingCasle may miss some weak protocol detection.

To test for these protocols, you can use a version of openssl with the deprecated protocols still compiled in, e.g. openssl-unsafe from Kali Linux, with the following commands:
openssl-unsafe s_client -connect dc.domain.local:636 -tls1
openssl-unsafe s_client -connect dc.domain.local:636 -tls1_1

Advised solution:

Apply Windows updates and registry tweaks described in the documentation section to use Tls 1.2 and later.

Points:

Informative rule (0 point)

Documentation:

https://support.microsoft.com/en-us/topic/kb5017811-manage-transport-layer-security-tls-1-0-and-1-1-after-default-behavior-change-on-september-20-2022-e95b1b47-9c7c-4d64-9baf-610604a64c3e
https://learn.microsoft.com/en-us/dotnet/framework/network-programming/tls#configuring-schannel-protocols-in-the-windows-registry
[MITRE]T1600.001 Weaken Encryption: Reduce Key Space

Details:

The detail can be found in Domain controllers

DCProtocol
DC Tls
DC Tls11
DC2 Tls
RODC Tls
RODC Tls11
Informative rule

Ensure that the rootDse Anonymous Binding is disabled

Rule ID:

A-RootDseAnonBinding

Description:

The purpose is to ensure that Anonymous Binding on RootDse is not enabled

Technical explanation:

The rootDse is a special object that enables clients to discover the functionalities of the server, such as LDAP version or support for special processing.
On Windows, it can be accessed by default without binding, which allows everyone to access this data.
There is no confidential data in this attribute, only the Operating System version and the name of the domain.
Since Windows 2019, the rootDse access can be set to require authentication.
You can test the anonymous access of the rootDse object by launching ldp.exe and selecting 'Connect' on the Connection menu.
You should receive the error "The server has been configured to deny unauthenticated simple binds."

Advised solution:

Edit the attribute msDS-Other-Settings of the object CN=Directory Service,CN=Windows NT,CN=Services,CN=Configuration.
Add a new line with the content: DenyUnauthenticatedBind=1

Points:

Informative rule (0 point)

Documentation:

https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/3f0137a1-63df-400c-bf97-e1040f055a99
https://blog.lithnet.io/2018/12/disabling-unauthenticated-binds-in.html
[MITRE]T1018 Remote System Discovery

This section represents an evaluation of the techniques available in the MITRE ATT&CK®

Techniques

Initial Access

No technique matched

Execution

1 technique(s) matched

Privilege Escalation

1 technique(s) matched

Defense Evasion

1 technique(s) matched

Credential Access

8 technique(s) matched

Discovery

4 technique(s) matched

Lateral Movement

No technique matched

Persistence

No technique matched

Execution

T1569 System Services [1]

+ 10 Point(s)

Ensure that custom Display Specifiers are stored in SYSVOL

Rule ID:

P-DisplaySpecifier

Description:

The purpose is to ensure that scripts used for the customization of admin UI are stored safely

Technical explanation:

DisplaySpecifier are Active Directory objects stored in the DisplaySpecifier container of the Configuration naming context.
They are used to customize the user interface.
Specifically the attribute adminContextMenu is used to customize administration actions, where COM objects or scripts can be called.
If the script is stored outside the SYSVOL directory, it can be used to execute custom actions and it is run under the administrator context.

Advised solution:

The scripts identified by this rule should be moved to the SYSVOL and properly secured.

Points:

10 points if present

Documentation:

https://www.semperis.com/blog/active-directory-security-abusing-display-specifiers/
https://learn.microsoft.com/en-us/windows/win32/ad/display-specifiers
[FR]ANSSI - Dangerous Display Specifiers (vuln1_display_specifier)1
[MITRE]T1569 System Services

Details:
DNPathChanged
CN=domainDNS-Display,CN=407,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=407,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=414,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=414,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=404,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=404,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=40E,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=40E,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=419,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=419,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=408,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=408,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=413,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=413,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=409,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=409,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=410,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=410,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=41D,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=41D,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=C0A,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=C0A,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=415,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=415,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=405,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=405,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=411,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=411,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=41F,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=41F,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=40B,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=40B,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=416,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=416,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=406,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=406,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=412,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=412,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=804,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=804,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=40C,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=40C,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=816,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=816,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z

Privilege Escalation

T1134.005 Access Token Manipulation: SID-History Injection [2]

+ 50 Point(s)

Check for local backdoor stored in SID History

Rule ID:

T-SIDHistorySameDomain

Description:

The purpose is to ensure that accounts are not linked for more privileged accounts in the same domain

Technical explanation:

SID History is an attribute used in migration to link with a former account. It is not possible to have an account linked with an account belonging to the same domain. This can be analyzed by comparing the domain part of the SID History with the domain SID.

Advised solution:

It is not possible to have this occurrence except if a user from domain A has been migrated to domain B and then migrated again to domain A. This should be strongly investigated as it may be linked to a compromise of the domain.

To remove the SIDHistory from a user account, run:
Get-ADUser USERNAME -properties sidhistory | foreach {Set-ADUser $_ -remove @{sidhistory=$_.sidhistory.value}}
For a group, run:
Get-ADGroup GROUPNAME -properties sidhistory | foreach {Set-ADGroup $_ -remove @{sidhistory=$_.sidhistory.value}}
For all users in a OU:
Get-ADUser -SearchBase "OU=Accounts,DC=mydomain,DC=com" -Filter {sidhistory -like '*'} -properties sidhistory | foreach {Set-ADUser $_ -remove @{sidhistory=$_.sidhistory.value}}

Points:

50 points if present

Documentation:

[FR]ANSSI - Recommandations de sécurité relatives à Active Directory - R15 [paragraph.3.3.1.5]
[FR]ANSSI - Accounts or groups with SID history set (vuln3_sidhistory_present)3
[MITRE]Mitre Att&ck - Mitigation - Active Directory Configuration
[MITRE]T1134.005 Access Token Manipulation: SID-History Injection

Details:

The SIDHistory detail can be found in User information and Computer information and a quick summary in SID History

+ 10 Point(s)

Check if dangerous SID are stored in the SIDHistory attribute.

Rule ID:

T-SIDHistoryDangerous

Description:

The purpose is to ensure that the dangerous SID are not stored in the SIDHistory attribute.

Technical explanation:

SID History is an attribute used in migration to link with a former account.
This rule checks for SID not coming from a former domain (such as SYSTEM) or from a former domain but having a RID (the last part of the SID) lower than 1000.
Indeed, native privileged accounts have a SID lower than 1000.
A list of Well Known SID is referenced in the documentation below.

Advised solution:


Identify the account, computer or group having these dangerous SID set in SID History, then clean it up by editing directly the SIDHistory attribute of the underlying AD object.

To remove the SIDHistory from a user account, run:
Get-ADUser USERNAME -properties sidhistory | foreach {Set-ADUser $_ -remove @{sidhistory=$_.sidhistory.value}}
For a group, run:
Get-ADGroup GROUPNAME -properties sidhistory | foreach {Set-ADGroup $_ -remove @{sidhistory=$_.sidhistory.value}}
For all users in a OU:
Get-ADUser -SearchBase "OU=Accounts,DC=mydomain,DC=com" -Filter {sidhistory -like '*'} -properties sidhistory | foreach {Set-ADUser $_ -remove @{sidhistory=$_.sidhistory.value}}

Points:

10 points if present

Documentation:

https://learn.microsoft.com/en-us/windows-server/identity/ad-ds/manage/understand-security-identifiers
[FR]ANSSI - Recommandations de sécurité relatives à Active Directory - R15 [paragraph.3.3.1.5]
[FR]ANSSI - Accounts or groups with unexpected SID history (vuln2_sidhistory_dangerous)2
[MITRE]Mitre Att&ck - Mitigation - Active Directory Configuration
[MITRE]T1134.005 Access Token Manipulation: SID-History Injection

Details:

The SIDHistory detail can be found in User information and Computer information and a quick summary in SID History

Domain
domain.local

Defense Evasion

T1600.001 Weaken Encryption: Reduce Key Space [1]

Informative rule

Check if LDAPS is using Tls 1.0 or Tls 1.1.

Rule ID:

A-DCLdapsProtocolAdvanced

Description:

The purpose is to ensure that all DC are using the most advanced protocols when acting as server.

Technical explanation:

TLS 1.0 and TLS 1.1 are no longer recommended to use, even if there is no pratical attack to could lead to an immediate compromise of the DC.
The SChannel component needs to be tuned in order to not propose these protocols. Many guidelines to handle this problem issued by Microsoft do not talk about SChannel but rather IIS. These guidlines are quoted in the documentation section below.

PingCastle is able to check the SSL version if LDAPS is exposed. LDAPS is automatically exposed once a certificate is available for the DC and the service restarted.
Please note that PingCastle is using the native .Net SSL stack to perform this test. .Net begins to ignore these weak protocols starting the version 4.7 of the framework and as a consequence, PingCasle may miss some weak protocol detection.

To test for these protocols, you can use a version of openssl with the deprecated protocols still compiled in, e.g. openssl-unsafe from Kali Linux, with the following commands:
openssl-unsafe s_client -connect dc.domain.local:636 -tls1
openssl-unsafe s_client -connect dc.domain.local:636 -tls1_1

Advised solution:

Apply Windows updates and registry tweaks described in the documentation section to use Tls 1.2 and later.

Points:

Informative rule (0 point)

Documentation:

https://support.microsoft.com/en-us/topic/kb5017811-manage-transport-layer-security-tls-1-0-and-1-1-after-default-behavior-change-on-september-20-2022-e95b1b47-9c7c-4d64-9baf-610604a64c3e
https://learn.microsoft.com/en-us/dotnet/framework/network-programming/tls#configuring-schannel-protocols-in-the-windows-registry
[MITRE]T1600.001 Weaken Encryption: Reduce Key Space

Details:

The detail can be found in Domain controllers

DCProtocol
DC Tls
DC Tls11
DC2 Tls
RODC Tls
RODC Tls11

Credential Access

T1003.004 OS Credential Dumping: LSA Secrets [1]

+ 15 Point(s)

Check if Service Accounts (aka accounts with never expiring password) are domain administrators

Rule ID:

P-ServiceDomainAdmin

Description:

The purpose is to check for accounts with non-expiring passwords in the "Domain Administrator" group

Technical explanation:

PingCastle is checking accounts with never expiring password, that are mostly used as service accounts.
"Service Accounts" can imply a high security risk as their password are stored in clear text in the LSA database, which can then be easily exploited using Mimikatz or Cain&Abel for instance. In addition, their passwords don't change and can be used in Kerberoast attacks.

Advised solution:

Accounts with never expiring passwords are mostly service accounts.
To mitigate the security risk, it is strongly advised to lower the privileges of the "Service Accounts", meaning that they should be removed from the "Domain Administrator" group, while ensuring that the password of each and every "Service Account" is longer than 20 characters

Points:

15 points if the occurence is greater than or equals than 2

Documentation:

[US]STIG V-36432 - Membership to the Domain Admins group must be restricted to accounts used only to manage the Active Directory domain and domain controllers.
[FR]ANSSI - Recommandations de sécurité relatives à Active Directory - R11 [subsection.2.5]
[FR]ANSSI - Privileged accounts with never-expiring passwords (vuln1_dont_expire_priv)1
[MITRE]Mitre Att&ck - Mitigation - Privileged Account Management
[MITRE]T1003.004 OS Credential Dumping: LSA Secrets

Details:

The detail can be found in Admin Groups

DN
CN=srv_AA,OU=Admin,DC=domain,DC=local
CN=srv_recover,OU=Admin,DC=domain,DC=local
CN=srv_na_col,OU=Admin,DC=domain,DC=local
CN=srv_sd,OU=Admin,DC=domain,DC=local
CN=srv_1secure,OU=Admin,DC=domain,DC=local
CN=TestUser_DA,OU=Testing,DC=domain,DC=local
CN=TestUser_EA,OU=Testing,DC=domain,DC=local
CN=DA,CN=Users,DC=domain,DC=local
CN=NestedDA,OU=People,DC=domain,DC=local

T1110.003 Brute Force: Password Spraying [2]

+ 5 Point(s)

Check for GPO granting access to the domain without any account

Rule ID:

A-AnonymousAuthorizedGPO

Description:

The purpose is to identify domains having a GPO which allows access to the domain without any account

Technical explanation:

It is possible that domains are set to authorize connection without any account, which represents a security breach. It allows potential attackers to enumerate all the users and computers belonging to a domain, in order to identify very efficiently future weak targets.
It is possible to verify the results provided by the PingCastle solution by using a Kali Linux distribution. You should run [rpcclient -U '' -N target_ip_address] to finally type [enumdomusers].

Advised solution:

In order to remove the anonymous access, we advise to identify the GPO indicated by the program and change the setting restrictanonymous and restrictanonymoussam

Points:

5 points if present

Documentation:

https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-2000-server/cc963223%28v%3dtechnet.10%29
https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/jj852184(v=ws.11%29
[US]STIG V-14798 - Directory data (outside the root DSE) of a non-public directory must be configured to prevent anonymous access.
[MITRE]T1110.003 Brute Force: Password Spraying

Details:

The detail can be found in Security settings

GPO
Anonymous Stuff
+ 2 Point(s)

Check that the "Pre-Windows 2000 Compatible Access" group has not been modified from its default

Rule ID:

A-PreWin2000Other

Description:

The purpose is checking that no additional account has been added to the "Pre-Windows 2000 Compatible Access" group

Technical explanation:

The pre-Windows 2000 compatible access group grants access to some RPC calls which should not be available to users or computers.

Advised solution:

Remove the members from the PreWin2000 group while making sure that the group "Authenticated Users" is present. Then reboot each DC.

Points:

2 points if present

Documentation:

https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/7a76a403-ed8d-4c39-adb7-a3255cab82c5
[FR]ANSSI - Use of the "Pre-Windows 2000 Compatible Access" group (vuln3_compatible_2000_not_default)3
[MITRE]T1110.003 Brute Force: Password Spraying

Details:
DN
CN=DEVELOPMENT2026,CN=Computers,DC=domain,DC=local
CN=PC,CN=Computers,DC=domain,DC=local
CN=DC,OU=Domain Controllers,DC=domain,DC=local

T1187 Forced Authentication [4]

+ 10 Point(s)

Ensure that the Print Spooler service cannot be abused to get the DC credentials

Rule ID:

A-DC-Spooler

Description:

The purpose is to ensure that credentials cannot be extracted from the DC via its Print Spooler service

Technical explanation:

When there's an account with unconstrained delegation configured (which is fairly common) and the Print Spooler service running on a computer, you can get that computers credentials sent to the system with unconstrained delegation as a user. With a domain controller, the TGT of the DC can be extracted allowing an attacker to reuse it with a DCSync attack and obtain all user hashes and impersonate them.

Advised solution:

The Print Spooler service should be deactivated on domain controllers. Please note as a consequence that the Printer Pruning functionality (rarely used) will be unavailable.

Points:

10 points if present

Documentation:

https://adsecurity.org/?p=4056
https://www.slideshare.net/harmj0y/derbycon-the-unintended-risks-of-trusting-active-directory
[MITRE]T1187 Forced Authentication

Details:

The detail can be found in Domain controllers

Domain controller
DC
DC2
RODC
+ 10 Point(s)

RPC interfaces potentially vulnerable to Coerce attacks

Rule ID:

A-DC-Coerce

Description:

The objective is to assess the vulnerability of the Domain Controller (DC) to Coerce attacks.

Technical explanation:

Coerce attacks are a category of attacks which aims to forcing domain controllers to authenticate to a device controlled by the attacker for the purpose to relay this authentication to gain privileges.
This category of attacks is usually mitigated by applying patch (PetitPotam), disabling services (Spooler), added RPC filter (EDR or firewall) or ensuring integrity (SMB integrity).
Because each of these protections can be individually bypassed (NTLM integrity is disabled on LDAPS), the aim of this scan is to detect proactively if vulnerable RPC services are exposed.

PingCastle estimates that Coerceable interfaces are protected if:
- the GPO "Network security: Restrict NTLM: Outgoing NTLM traffic to remote servers" is applied through a GPO to DC
- or if RPC interfaces are not reachable

Because these interfaces need to be tested from a computer controlled by the attacker, PingCastle cannot do this test with reliability.
Instead, it sends a malformed RPC packet to try to trigger an error such as "Permission denied" or "RPC interface unavailable".
If the error RPC_X_BAD_STUB_DATA (1783) is triggered, PingCastle considers that the interface is available.
A report that a vulnerable interface is online may not be accurate because its full exploitation is not tested.

Also to avoid EDR alerts or to not perform the scan, you can run PingCastle with the flag --skip-dc-rpc

Advised solution:

To effectively mitigate the vulnerability, consider one of the following approaches:

1. Apply Group Policy Object (GPO) - "Network security: Restrict NTLM: Outgoing NTLM traffic to remote servers":
Apply this GPO specifically to the Organizational Unit (OU) "Domain Controllers".
Caution: Enabling this GPO might impact services dependent on NTLM such as files copy Backups.
Consider setting the GPO in "Audit mode" initially to identify and assess the impact on affected services.

2. Enable RPC Filters in Windows Firewall:
Configure Windows Firewall to block specific Interface IDs associated with vulnerable RPC interfaces.
This is done using the netsh command. See the documentation links for more information.
Exercise caution: This method filters the entire interface, not specific Operation Numbers (OpNum).
Adjust exceptions for necessary services to ensure critical functionality.

3. Implement External Filters (e.g., EDR, Firewalls):
Leverage third-party solutions, such as Endpoint Detection and Response (EDR) tools or firewalls.
Notable project: rpcfirewall https://github.com/zeronetworks/rpcfirewall, offering logical filtering at the OpNum level.
Be cautious of potential impact and ensure compatibility with existing infrastructure.

Points:

10 points if present

Documentation:

https://github.com/p0dalirius/Coercer
https://learn.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/network-security-restrict-ntlm-outgoing-ntlm-traffic-to-remote-servers
https://blog.nviso.eu/2023/12/08/rpc-or-not-here-we-log-preventing-exploitation-and-abuse-with-rpc-firewall/
[MITRE]T1187 Forced Authentication

Details:

The detail can be found in Domain controllers

DCNameIPInterfaceFunctionOpNum
DC 10.0.0.10 12345678-1234-abcd-ef00-0123456789ab RpcRemoteFindFirstPrinterChangeNotification 62
DC 10.0.0.10 12345678-1234-abcd-ef00-0123456789ab RpcRemoteFindFirstPrinterChangeNotificationEx 65
DC 10.0.1.10 12345678-1234-abcd-ef00-0123456789ab RpcRemoteFindFirstPrinterChangeNotification 62
DC 10.0.1.10 12345678-1234-abcd-ef00-0123456789ab RpcRemoteFindFirstPrinterChangeNotificationEx 65
DC 192.168.1.145 12345678-1234-abcd-ef00-0123456789ab RpcRemoteFindFirstPrinterChangeNotification 62
DC 192.168.1.145 12345678-1234-abcd-ef00-0123456789ab RpcRemoteFindFirstPrinterChangeNotificationEx 65
DC2 10.0.0.11 12345678-1234-abcd-ef00-0123456789ab RpcRemoteFindFirstPrinterChangeNotification 62
DC2 10.0.0.11 12345678-1234-abcd-ef00-0123456789ab RpcRemoteFindFirstPrinterChangeNotificationEx 65
RODC 10.0.0.56 12345678-1234-abcd-ef00-0123456789ab RpcRemoteFindFirstPrinterChangeNotification 62
RODC 10.0.0.56 12345678-1234-abcd-ef00-0123456789ab RpcRemoteFindFirstPrinterChangeNotificationEx 65
+ 10 Point(s)

Ensure that no accounts are subject to unconstrained delegation

Rule ID:

P-UnconstrainedDelegation

Description:

This rule identifies accounts configured with Kerberos unconstrained delegation, a high-risk setting that allows a compromised service to impersonate any domain user and potentially lead to full domain compromise.

Technical explanation:

Kerberos unconstrained delegation allows a service to reuse a user’s Ticket Granting Ticket (TGT) to authenticate to any service in the domain. If the delegated account is compromised, cached TGTs can be extracted and used to impersonate any authenticating user.
If a privileged account or a Domain Controller authenticates to such a service, potentially via forced authentication techniques, the attacker can escalate privileges and compromise the entire domain. Disabling the account does not remove this risk, as delegation settings persist and become active again if the account is re-enabled.

Advised solution:

Kerberos unconstrained delegation should be removed wherever it is configured. If delegation is required, it must be replaced with Kerberos constrained delegation.

Step 1: Remove Unconstrained Delegation
Remove the ability for the account to delegate credentials to any service.

Computer accounts
Set-ADComputer -Identity -TrustedForDelegation $false

User accounts
Set-ADUser -Identity -TrustedForDelegation $false

Step 2: Configure Constrained Delegation (Only If Required)

If an application requires delegation:
1. Open Active Directory Users and Computers
2. Open the account properties
3. Go to the Delegation tab
4. Select “Trust this computer for delegation to specified services only”
5. Select “Use Kerberos only”
6. Add only the specific services that are required for the application

Do not enable delegation if it is not strictly necessary.

Points:

5 points per discovery

Documentation:

https://learn.microsoft.com/en-us/archive/blogs/389thoughts/get-rid-of-accounts-that-use-kerberos-unconstrained-delegation
https://adsecurity.org/?p=1667
[FR]ANSSI - Recommandations de sécurité relatives à Active Directory - R18 [subsubsection.3.3.2]
[FR]ANSSI - Unconstrained authentication delegation (vuln2_delegation_t4d)2
[MITRE]T1187 Forced Authentication
[MITRE]Mitre Att&ck - Mitigation - Active Directory Configuration

Details:

The detail can be found in User information and Computer information

DNName
CN=kerbdeleg1,OU=Admin,DC=domain,DC=local kerbdeleg1
CN=kerbdeleg3,OU=Admin,DC=domain,DC=local kerbdeleg3
Informative rule

Check if the mitigation for CVE-2021-42291 has been enabled

Rule ID:

A-DsHeuristicsLDAPSecurity

Description:

The purpose is to identify domains having mitigation for CVE-2021-42291 not set to enabled

Technical explanation:

The way an Active Directory behaves can be controlled via the attribute DsHeuristics of CN=Directory Service,CN=Windows NT,CN=Services,CN=Configuration.
A parameter stored in its attribute and whose value is LDAPAddAutZVerifications and LDAPOwnerModify can be set to modify the mitigatation of CVE-2021-42291.
The KB5008383 has introduced changes to default security descriptor of Computer containers to add audit and limit computer creation without being admin.
Indeed, it is recommended to not let anyone create computer accounts as they can be used to abuse Kerberos or to perform relay attacks.

Mitigations in CVE-2021-42291 consist of 3 choices to be set on 2 settings.
They are named LDAPAddAutZVerifications and LDAPOwnerModify and are respectively the 28th and 29th character of this string.
For the expected values:
- With the value 0 (the default), it enables an additional audit mechanism
- With the value 1 (recommended), it enforces new security permissions, especially to require an action of the domain admin when unusual actions are performed
- With the value 2 (not recommended), it disables the audit mechanism that has been added by default and do not enable the new security permissions

Advised solution:

The easiest and fastest way to correct this issue is to replace the 28th and 29th character of the DsHeuristics attribute.
The value of LDAPAddAutZVerifications and LDAPOwnerModify should be set to 1.

Open the procedure embedded into the KB5008383 to apply this mitigation and change the DsHeuristics value.

Note: You have to pay attention that there are control characters at the 10th and 20th position to avoid undesired changes of the DsHeuristics attribute.
Typically if the DsHeuristics is empty, the expected new value is 00000000010000000002000000011

Points:

Informative rule (0 point)

Documentation:

https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/e5899be4-862e-496f-9a38-33950617d2c5
https://support.microsoft.com/en-au/topic/kb5008383-active-directory-permissions-updates-cve-2021-42291-536d5555-ffba-4248-a60e-d6cbc849cde1
[FR]ANSSI - Dangerous dsHeuristics settings (vuln3_dsheuristics_bad)3
[MITRE]T1187 Forced Authentication

Details:
SettingPositionValue
LDAPAddAuthZVerifications 28th Not Set
LDAPOwnerModify 29th Not Set

T1557 Man-in-the-Middle [6]

+ 15 Point(s)

Critical DNS zones allow anonymous updates

Rule ID:

A-DnsZoneUpdate1

Description:

Critical DNS zones (domain zone and RootDNSServers) are configured to accept anonymous updates, allowing any device to modify DNS records without authentication.

Technical explanation:

Active Directory-integrated DNS zones can be configured to accept three types of updates: no updates (static), secure updates only (authenticated), or nonsecure and secure updates. This rule examines your most critical DNS zones to determine if they allow nonsecure updates.

The zones checked by this rule are the foundation of Active Directory operations: your primary domain DNS zone (e.g., contoso.com), the RootDNSServers zone, and _msdcs zones. The _msdcs zones are particularly critical as they contain the global catalog and domain controller locator records used by the entire Active Directory forest for authentication and replication.

When nonsecure updates are enabled (ZONE_UPDATE_UNSECURE), any device on the network can create or modify DNS records without authentication. For these critical zones, this means an attacker could redirect domain controller lookups, hijack global catalog queries, or impersonate critical AD services. The impact extends beyond a single domain - compromising _msdcs affects forest-wide operations.

The rule searches across all DNS storage locations in Active Directory: the DomainDnsZones partition (replicated domain-wide), the ForestDnsZones partition (replicated forest-wide), and the legacy storage in the domain naming context. It automatically filters out replication conflicts (CNF objects) and in-progress replication objects to avoid false positives.

This rule (A-DnsZoneUpdate1) focuses on these critical infrastructure zones. Its companion rule (A-DnsZoneUpdate2) examines all other zones in your environment.

Advised solution:

To fix this vulnerability, configure the zone for secure-only updates:

GUI Method:
1. Open DNS Manager (dnsmgmt.msc)
2. Navigate to the affected zone
3. Right-click the zone → Properties → General tab
4. Change "Dynamic updates" from "Nonsecure and secure" to "Secure only"

PowerShell Method:

# Find all zones with insecure updates
Get-DnsServerZone | Where-Object {$_.DynamicUpdate -eq "NonsecureAndSecure"}

# Fix a specific zone
Set-DnsServerPrimaryZone -Name "contoso.com" -DynamicUpdate Secure -ComputerName DC01

# Fix all insecure zones
Get-DnsServerZone | Where-Object {$_.DynamicUpdate -eq "NonsecureAndSecure"} | ForEach-Object {
Set-DnsServerPrimaryZone -Name $_.ZoneName -DynamicUpdate Secure -ComputerName DC01
}


Command Line Method:

# Local server
dnscmd /Config <ZoneName> /AllowUpdate 2

# Remote server
dnscmd <ServerName> /Config <ZoneName> /AllowUpdate 2

# Example
dnscmd DC01 /Config contoso.com /AllowUpdate 2

Points:

15 points if present

Documentation:

https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-dnsp/f97756c9-3783-428b-9451-b376f877319a
https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/dnscmd
[FR]ANSSI - Misconfigured DNS zones (vuln1_dnszone_bad_prop)1
[MITRE]T1557 Man-in-the-Middle

Details:
ZoneDomainDNPartition
domain.local domain.local DC=domain.local,CN=MicrosoftDNS,DC=DomainDnsZones,DC=domain,DC=local DomainDnsZones
_msdcs.domain.local domain.local DC=_msdcs.domain.local,CN=MicrosoftDNS,DC=ForestDnsZones,DC=domain,DC=local ForestDnsZones
+ 5 Point(s)

Check if signing is really required for LDAP

Rule ID:

A-DCLdapSign

Description:

The purpose is to check if signing is really required for LDAP

Technical explanation:

If the the request for signing of each LDAP request is not enforced, a man in the middle can be performed on an LDAP connection.
For example to add a user to the admin group.

This test is made by ignoring the local computer security policies.
Signature enforcement is done by setting the flag ISC_REQ_INTEGRITY when initializig the Negotiate / NTLM / Kerberos authentication.
The opposite test is made with the flag ISC_REQ_NO_INTEGRITY set.

PingCastle is testing if this setting is in place by performing a LDAP authentication with and without signature enforcement.
False positives may exists if the PingCastle program is run on the server tested. That's why, if PingCastle is run on a DC, the DC will not be tested.

Advised solution:

You have to make sure that ALL LDAP clients are compatible with LDAP signature.
All versions of Windows since XP support this and also most of the Unix clients.

You have to follow the Microsoft article quoted in reference to enable LDAP signing.
This includes auditing the clients which are not compatible and instructions on how to enforce this policy.

Points:

5 points if present

Documentation:

https://learn.microsoft.com/en-US/troubleshoot/windows-server/identity/enable-ldap-signing-in-windows-server
https://support.microsoft.com/en-us/topic/2020-2023-and-2024-ldap-channel-binding-and-ldap-signing-requirements-for-windows-kb4520412-ef185fb8-00f7-167d-744c-f299a66fc00a
https://github.com/zyn3rgy/LdapRelayScan
[MITRE]T1557 Man-in-the-Middle

Details:
Domain controller
DC
DC2
RODC
+ 5 Point(s)

Check if certificate enrollment can be done with HTTP

Rule ID:

A-CertEnrollHttp

Description:

The purpose is to check if HTTP can be used to access the certificate enrollment interface

Technical explanation:

The Windows PKI, also named Active Directory Certificate Services (ADCS), can be used to request certificates.
Two services can be used: Certification Authority Web Enrollment (WebEnrollment) and Certificate Enrollment Web Service (CES).
The certificates provided by these services can be used with Kerberos to login.

Because this service can deliver certificates for Domain Controllers, it can be considered as part of Tier 0.
As a legacy service, the mechanisms to prohibit credential relay are not enforced by default.
If an attacker is able to relay privileged credentials (for example with the PetitPotam attack), it can be used to take control of the domain.

PingCastle is looking for enrollment servers registered in the Active Directory (pKIEnrollmentService objects).
It then connects to the special page http://xxx/certsrv/certrqxt.asp and http://xxx/yyy_CES_Kerberos/services.svc and tries to access the page with authentication.

If the authentication succeed and no error is returned,the program considers the interface accessible.

False positives may exists if the PingCastle program is run on the server tested. That's why, if PingCastle is run on the server, the server will not be tested.

Advised solution:

The access to certificate enrollment with HTTP should be disabled.

This can be achieved by opening the IIS console on the enrollment server.
If the service quoted in detail is WebEnrollment, the url is certsrv, else it is ending by CES_Keberos.

In the Binding setting (link at the right), keep the HTTPS binding and remove the HTTP binding.
See the link to KB5005413 in references for more information.

Note: By default, the CES service is not accessible by HTTP.

Points:

5 points if present

Documentation:

https://support.microsoft.com/en-us/topic/kb5005413-mitigating-ntlm-relay-attacks-on-active-directory-certificate-services-ad-cs-3612b773-4043-4aa9-b23d-b87910cd3429
https://dirkjanm.io/ntlm-relaying-to-ad-certificate-services/
https://www.riskinsight-wavestone.com/en/2021/06/microsoft-adcs-abusing-pki-in-active-directory-environment/
https://www.vkernel.ro/blog/installing-and-configuring-cep-and-ces-for-certificate-enrolling-on-non-domain-joined-computers
[MITRE]T1557 Man-in-the-Middle

Details:
ServerService
DC.domain.local WebEnrollment
+ 5 Point(s)

Check if Extended Protection is in place for certificate requests

Rule ID:

A-CertEnrollChannelBinding

Description:

The purpose is to check if the Extended protection for HTTPS access to the certificate enrollment interface is in place

Technical explanation:

The Windows PKI, also named Active Directory Certificate Services (ADCS), can be used to request certificates.
Two services can be used: Certification Authority Web Enrollment (WebEnrollment) and Certificate Enrollment Web Service (CES).
The certificates provided by these services can be used with Kerberos to login.

Because this service can deliver certificates for Domain Controller, it can be considered as part of Tier 0.
As a legacy service, the mechanisms to prohibit credential relay are not enforced by default.
If an attacker is able to relay privileged credentials (for example with the PetitPotam attack), it can be used to take control of the domain.

To avoid this attack with HTTPS, a feature named Channel Binding exists. It consists of passing to the authentication layer a property of the TLS channel (typically a hash of the server certificate) to bind the outer channel (TLS) and the inner channel (HTTP).
This protection is also called "Extended Protection". See rfc5929 for more details.

PingCastle is looking for enrollment servers registered in the Active Directory.
It then connect to the special page https://xxx/certsrv/certrqxt.asp and https://xxx/yyy_CES_Kerberos/service.svc
An authentication is attempted with and without Channel Binding.

False positives may exists if the PingCastle program is run on the server tested. That's why, if PingCastle is run on the server, the server will not be tested.

Advised solution:

The Extended Protection for Authentication (EPA, also called Channel Binding) should be activated on the enrollment server.

This can be achieved by opening the IIS console on the enrollment server.
In the Authentcation settings, open the Advanced Settings for the Windows Authentication.
Set "Extended Protection" to "Required".

Do this operation for the Certification Authority Web Enrollment (WebEnrollment) and Certificate Enrollment Web Service (CES).

See the link to KB5005413 below for more information. This KB also suggest to restrict the authentication to Kerberos only.

Points:

5 points if present

Documentation:

https://support.microsoft.com/en-us/topic/kb5005413-mitigating-ntlm-relay-attacks-on-active-directory-certificate-services-ad-cs-3612b773-4043-4aa9-b23d-b87910cd3429
https://dirkjanm.io/ntlm-relaying-to-ad-certificate-services/
https://www.riskinsight-wavestone.com/en/2021/06/microsoft-adcs-abusing-pki-in-active-directory-environment/
[MITRE]T1557 Man-in-the-Middle

Details:
ServerService
DC.domain.local WebEnrollment
+ 1 Point(s)

Additional DNS zones allow anonymous updates

Rule ID:

A-DnsZoneUpdate2

Description:

DNS zones other than the primary domain zone are configured to accept anonymous updates, allowing any device to modify DNS records without authentication.

Technical explanation:

Beyond the critical infrastructure zones checked by A-DnsZoneUpdate1, Active Directory typically hosts numerous additional DNS zones including reverse lookup zones (like 10.0.0.in-addr.arpa), application-specific zones, and subdomain zones. This rule examines all these secondary zones to identify those configured to accept nonsecure updates.

While these zones might seem less critical than your domain and _msdcs zones, they still present significant security risks when configured for nonsecure updates. Reverse lookup zones can be manipulated to bypass security controls that rely on PTR record validation. Application zones often contain service endpoints that, if hijacked, could redirect users to malicious services. Subdomain zones may host departmental or regional services that attackers could compromise.

The vulnerability exists when these zones are set to accept "nonsecure and secure" updates, meaning any network-connected device can modify records without proving its identity. This opens the door to DNS poisoning attacks, service hijacking, and reconnaissance activities that help attackers map your infrastructure.

Like its companion rule A-DnsZoneUpdate1, this check examines zones across all Active Directory partitions and filters out replication artifacts. Together, these two rules ensure complete coverage of your DNS security posture - with A-DnsZoneUpdate1 covering critical AD infrastructure and A-DnsZoneUpdate2 covering everything else.

Advised solution:

To fix this vulnerability, configure all zones for secure-only updates:

GUI Method:
1. Open DNS Manager (dnsmgmt.msc)
2. Navigate to the affected zone
3. Right-click the zone → Properties → General tab
4. Change "Dynamic updates" from "Nonsecure and secure" to "Secure only"

PowerShell Method:

# Find all zones with insecure updates
Get-DnsServerZone | Where-Object {$_.DynamicUpdate -eq "NonsecureAndSecure"}

# Fix a specific zone
Set-DnsServerPrimaryZone -Name "10.0.0.in-addr.arpa" -DynamicUpdate Secure -ComputerName DC01

# Fix all insecure zones
Get-DnsServerZone | Where-Object {$_.DynamicUpdate -eq "NonsecureAndSecure"} | ForEach-Object {
Set-DnsServerPrimaryZone -Name $_.ZoneName -DynamicUpdate Secure -ComputerName DC01
}


Command Line Method:

# Local server
dnscmd /Config <ZoneName> /AllowUpdate 2

# Remote server
dnscmd <ServerName> /Config <ZoneName> /AllowUpdate 2

# Example
dnscmd DC01 /Config contoso.com /AllowUpdate 2


Note: Some zones may require nonsecure updates for DHCP or legacy systems. Document any exceptions.

Points:

1 points if present

Documentation:

https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-dnsp/f97756c9-3783-428b-9451-b376f877319a
https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/dnscmd
[FR]ANSSI - Misconfigured DNS zones (vuln3_dnszone_bad_prop)3
[MITRE]T1557 Man-in-the-Middle

Details:
ZoneDomainDNPartition
0.0.10.in-addr.arpa domain.local DC=0.0.10.in-addr.arpa,CN=MicrosoftDNS,DC=DomainDnsZones,DC=domain,DC=local DomainDnsZones
Forest-Test.local domain.local DC=Forest-Test.local,CN=MicrosoftDNS,DC=ForestDnsZones,DC=domain,DC=local ForestDnsZones
test3.local domain.local DC=test3.local,CN=MicrosoftDNS,CN=System,DC=domain,DC=local DefaultNamingContext
Informative rule

Check if Authenticated Users can create DNS records

Rule ID:

A-DnsZoneAUCreateChild

Description:

The purpose is to check if Authenticated Users has the right to create DNS records

Technical explanation:

When a computer is joined to a domain, a DNS record is created in the DnsZone to allow the computer to update its DNS settings.
By design, Microsoft choose to grant to the group Authenticated Users (aka every computers and users) the right to create DNS records.
Once created, only the owner keeps the right to edit the new object.

The vulnerability is that specific DNS records can be created to perform man-in-the-middle attacks.
One example is to create a wildcard record (a record with the name "*"), a failover DNS record or anticipating the creation of a DNS record with the right permissions.

Advised solution:

As of today, this rule is considered "informative" because the default configuration where Authenticated Users can create DNS records is considered safe.
The reason for this classification is that no exploitation of that vulnerability has been reported.

The proposed enhancement is to replace the identity who has been granted the right to create DNS Records (permission CreateChild) from Authenticated Users to Domain Computers.
To perform this change, you have to edit the permission of the DNSZone whose object is located in the container CN=MicrosoftDNS,DC=DomainDnsZones.

It should be noticed that if there is a privilege escalation on a computer, an attacker can impersonate the computer account and bypass this mitigation.

The best mitigation is to create the DNS records manually as part as the domain join process and to revoke the permission granted to Authenticated Users.

Points:

Informative rule (0 point)

Documentation:

https://www.ws-its.de/gegenmassnahme-zum-angriff-dns-wildcard/
https://www.netspi.com/blog/technical/network-penetration-testing/exploiting-adidns/
[MITRE]T1557 Man-in-the-Middle

Details:
DNSZone
domain.local
0.0.10.in-addr.arpa
_msdcs.domain.local
Forest-Test.local
test3.local

T1557.001 Man-in-the-Middle: LLMNR/NBT-NS Poisoning and SMB Relay [3]

+ 15 Point(s)

Ensure that the NTLMv1 and old LM protocols are banned

Rule ID:

S-OldNtlm

Description:

The purpose is to check if NTLMv1 or LM can be used by DC

Technical explanation:

NTLMv1 is an old protocol which is known to be vulnerable to cryptographic attacks.
It is typically used when a hacker sniffs the network and tries to retrieve NTLM hashes which can then be used to impersonate users.

This attack can be combined with coerced authentication attacks - a hacker forces the DC to connect to a controlled host.
In this case, NTLMv1 can be specified so the hacker can retrieve the NTLM hash of the DC, impersonates it and then take control of the domain.
This attack is still possible with NTLMv2 but this is more difficult.

Windows has default security settings regarding LM/NTLM. Windows XP: Send LM & NTLM responses, Windows Server 2003: Send NTLM response only, Vista/2008: Win7/2008 R2: Send NTLMv2 response only.

However Domain Controllers have relaxed default settings to accept the connection of older operating systems.
That means that by default, NTLMv1 is accepted on domain controllers.
If no GPO defines the LAN Manager Authentication Level, the DC fall back to the non secure default.

Advised solution:

After an audit of NTLMv1 usage (see the links below), you need to raise the LAN Manager Authentication Level to "Send NTLMv2 response only. Refuse LM & NTLM".
This can be done by editing the policy "Network security: LAN Manager authentication level" which can be accessed in Computer Configuration\Windows Settings\Security Settings\Local Policies\Security Options
The policy will be applied after a computer reboot.

Beware that you may break software which is not compatible with Ntlmv2 such as very old Linux stacks or very old Windows before Windows Vista.
But please note that Ntlmv2 can be activited on all Windows starting Windows 95 and other operating systems.

Points:

15 points if present

Documentation:

https://learn.microsoft.com/en-us/troubleshoot/windows-server/windows-security/audit-domain-controller-ntlmv1
https://learn.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/network-security-restrict-ntlm-ntlm-authentication-in-this-domain
https://learn.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/network-security-lan-manager-authentication-level
https://learn.microsoft.com/en-us/troubleshoot/windows-client/windows-security/enable-ntlm-2-authentication
[MITRE]T1557.001 Man-in-the-Middle: LLMNR/NBT-NS Poisoning and SMB Relay
[FR]ANSSI - Recommandations de sécurité relatives à Active Directory - R37 [paragraph.3.6.2.1]

Details:

The detail can be found in Security settings

GPOValue
Windows default without an active GPO 3
+ 5 Point(s)

Hardened Paths weakness

Rule ID:

A-HardenedPaths

Description:

The purpose is to ensure that there is no weakness related to hardened paths

Technical explanation:

Two vulnerabilities have been reported in 2015 (MS15-011 and MS15-014) which allows a domain takeover via GPO modifications done with a man-in-the-middle attack.
To mitigate these vulnerabilites, Microsoft has designed a workaround named "Hardened Paths". It forces connection settings to enforce Integrity, Mutual Authentication or Privacy.
By default if this policy is empty, if will enforce Integrity and Mutual Authentication on the SYSVOL or NETLOGON shares.
This rule checks if there have been any overwrite to disable this protection.

Advised solution:

You have to edit the Hardened Path section in the GPO.
This section is located in Computer Configuration/Policies/Administrative Templates/Network/Network Provider.
Check each value reported here and make sure that entries containing SYSVOL or NETLOGON have RequireIntegrity and RequireMutualAuthentication set to 1.
In addition to that, check entries having the pattern \\DCName\* and apply the same solution.

Points:

5 points if present

Documentation:


https://labs.withsecure.com/publications/how-to-own-any-windows-network-with-group-policy-hijacking-attacks
https://talubu.wordpress.com/2018/02/28/configuring-unc-hardened-access-through-group-policy/
https://adsecurity.org/?p=1405
https://support.microsoft.com/en-us/topic/ms15-011-vulnerability-in-group-policy-could-allow-remote-code-execution-february-10-2015-91b4bda2-945d-455b-ebbb-01d1ec191328
[US]STIG V-63577 - Hardened UNC Paths must be defined to require mutual authentication and integrity for at least the \\*\SYSVOL and \\*\NETLOGON shares.
[MITRE]T1557.001 Man-in-the-Middle: LLMNR/NBT-NS Poisoning and SMB Relay

Details:

The detail can be found in the Hardened Paths configuration section.

GPOKeyRequireIntegrityRequireMutualAuthenticationRequirePrivacy
No GPO Found NETLOGON Not Set Not Set Not Set
No GPO Found SYSVOL Not Set Not Set Not Set
Informative rule

Check if LLMNR can be used to steal credentials

Rule ID:

A-NoGPOLLMNR

Description:

The purpose is to ensure that local name resolution protocol (LLMNR) cannot be used to collect credentials by performing a network attack

Technical explanation:

LLMNR is a protocol which translates names such as foo.bar.com into an ip address. LLMNR has been designed to translate name locally in case the default protocol DNS is not available.
Regarding Active Directory, DNS is mandatory which makes LLMNR useless.
LLMNR exploits typo mistakes or faster response time to redirect users to a specially designed share, server or website.
Being trusted, this service will trigger the single sign on procedure which can be abused to retrieve the user credentials.

LLMNR is enabled by default on all OS except starting from Windows 10 v1903 and Windows Server v1903 where it is disabled.

Advised solution:

Enable the GPO Turn off multicast name resolution and check that no GPO overrides this setting.
(if it is the case, the policy involved will be displayed below)

Points:

Informative rule (0 point)

Documentation:

https://youtu.be/Fg2gvk0qgjM
[MITRE]T1557.001 Man-in-the-Middle: LLMNR/NBT-NS Poisoning and SMB Relay

Details:

The detail can be found in Security settings

T1558 Steal or Forge Kerberos Tickets [4]

+ 15 Point(s)

Check for ESC1: Vulnerable Subject Control in Certificate Templates

Reduced confidence
Use privilege mode for accuracy 

Rule ID:

A-CertTempCustomSubject

Description:

This check verifies if certificate templates in Active Directory Certificate Services (AD CS) allow user-controlled subject information and meet other common criteria associated with the ESC1 vulnerability.

Technical explanation:

ESC1 is a vulnerability in Active Directory Certificate Services (AD CS) that occurs when certificate templates allow users to control the Subject Name as well as meet other criteria, such as:

  • User-Controlled Subject Name: Requesters can define the subject, enabling impersonation of any account in the domain.
  • Excessive Enrollment Permissions: Large groups such as Domain Users and Authenticated Users have enrollment rights on vulnerable templates as well as the certificate authority.
  • Authentication-based: Templates support Extended Key Usage (EKU) that allows the template to be used for Kerberos authentication.
  • No Approval Requirements: Certificates can be issued without requiring manager approval and no authorized signatures are required.

This misconfiguration can enable attackers to forge certificates, escalate privileges, and compromise the Active Directory environment.

Advised solution:

To mitigate ESC1, use one or more of the options below:

Option 1: Modify Certificate Template Settings in ADCS

  • Open Certificate Authority (certsrv.msc) on the CA server.
  • Right-click on Certificate Templates and select Manage.
  • Navigate to and right-click the vulnerable template and select Properties.
  • Go to the Subject Name tab:
    • Ensure "Supply in the request" is unchecked.
  • Click OK to save changes.

Option 2: Restrict Enrollment Permissions
Note: Restricting enrollment permissions mitigates some of the risk but all users with enrollment permissions can still impersonate any account. As such, accounts with enrollment permissions for these certificates should be closely monitored and not be on non-privileged accounts.

  • Open Certificate Authority (certsrv.msc) on the CA server.
  • Right-click on Certificate Templates and select Manage.
  • Navigate to and right-click the vulnerable template and select Properties.
  • Go to the Security tab:
    • Remove well-known low-privileged groups such as Authenticated Users, Everyone from enrollment permissions.
    • Assign only the required accounts and groups permission to request these certificates.
  • Click OK to save changes.

Option 3: Remove the CA Certificate from NTAuthCertificates
Note: Only do this if you are sure you do not use and do not want to use certificate-based authentication.

NTAuthCertificates CaCertificate attribute stores the certificate authority certificates that are authorized to be used for authentication. Removing the Certificate Authorities certificate from here stops all authentication-based attacks.
If you're not using certificate-based authentication for this CA:
  • Open Active Directory Sites and Services (dssite.msc).
  • From the top menu, click View and select Show Services Node.
  • Navigate to Services > Public Key Services > NTAuthCertificates.
  • Right-click the CACertificate attribute and select Properties.
    • Review the listed certificates.
    • Remove the entry for the affected CA by selecting it and clicking Remove.
  • Click OK to apply the changes.

Points:

15 points if present

Documentation:

Certified-PreOwned https://specterops.io/wp-content/uploads/sites/3/2022/06/Certified_Pre-Owned.pdf
[FR]ANSSI - Dangerous enrollment permission on authentication certificate templates (vuln1_adcs_template_auth_enroll_with_name)1
[MITRE]T1558 Steal or Forge Kerberos Tickets

Details:

The detail can be found in Certificate Templates

NameCAEnrollmentPrincipalsLastModified
ESC1  DC.domain.local\Enterprise CA  Authenticated Users 21/07/2025 11:00:16
+ 15 Point(s)

Check the permission of agent certificate templates

Rule ID:

A-CertTempAgent

Description:

The purpose of this rule is to ensure that there is no agent certificate that can be requested by anyone

Technical explanation:

An Agent certificate is a special certificate used to request certificates on behalf of other users.
A template has been detected with the agent EKU and that can be enrolled by a large number of users.

Advised solution:

Review the permissions that allow a wide enrollment of this certificate template

Points:

15 points if present

Documentation:

https://posts.specterops.io/certified-pre-owned-d95910965cd2
https://www.riskinsight-wavestone.com/en/2021/06/microsoft-adcs-abusing-pki-in-active-directory-environment/
[FR]ANSSI - Dangerous enrollment permission on authentication certificate templates (vuln1_adcs_template_auth_enroll_with_name)1
[MITRE]T1558 Steal or Forge Kerberos Tickets

Details:

The detail can be found in Certificate Templates

Name
ESC3-Enrollment
+ 15 Point(s)

Check for ESC2: Vulnerable EKU Configurations in Certificate Templates

Reduced confidence
Use privilege mode for accuracy 

Rule ID:

A-CertTempAnyPurpose

Description:

This check verifies whether certificate templates in Active Directory Certificate Services (AD CS) have the "Any Purpose" Enhanced Key Usage (EKU) or lack an EKU entirely, potentially enabling privilege escalation or misuse.

Technical explanation:

Enhanced Key Usage (EKU) defines the intended purpose of a certificate. ESC2 arises when the following EKUs are defined along with other vulnerable criteria that enable low privileged users to request the certificate with no oversight.

  • "Any Purpose" EKU is enabled: This allows the certificate to be used for any purpose, including unintended ones such as authentication or code signing.
  • No EKU defined: Certificates without an EKU are treated as having "Any Purpose," making them similarly vulnerable.

ESC2 is detected when all the following criteria are true:

  • The certificate template has a vulnerable EKU as described above
  • The certificate template allows excessive enrollment permissions
  • The CA allows excessive enrollment permissions
  • The certificate template does not require manager approval
  • The certificate template does not have any authorised signatures

These configurations can be exploited by attackers to obtain certificates that enable unauthorized access, impersonate users, or escalate privileges within the domain.

Advised solution:

There are multiple ways in which remediation of this issue can be completed. It involves restricting the template in one or more ways using the instructions below.

  1. Open Certificate Authority (certsrv.msc) and connect to the CA
  2. Navigate to Certificate Templates, right-click and select Manage
  3. Right-click the vulnerable template, and select Properties

Option 1 - Restrict Enrolment Permissions
Note: This option is the best option to reduce the attack surface.

  • Go to the Security tab
  • Remove excessive enrolment permissions (e.g., Domain Users or Authenticated Users)
  • Grant permissions only to necessary accounts/groups

Option 2 - Implement Management Approval
Note: This option will require manual approval for each certificate by a PKI Admin.

  • Go to the Issuance Requirements tab
  • Tick the “CA certificate manager approval” option

Option 3 – Restrict the Certificate to Specific Type
Note: This option can be completed if the certificate is of the incorrect type. For example, it only needs Server Authentication rather than Any Purpose.

  • Go to the Extensions tab
  • Click on Application Policies and select Edit
  • Add the required application policies
  • Remove the Any Purpose usage if present
  • Click OK

Click OK to save the changes to the template

Points:

15 points if present

Documentation:

https://posts.specterops.io/certified-pre-owned-d95910965cd2
https://www.riskinsight-wavestone.com/en/2021/06/microsoft-adcs-abusing-pki-in-active-directory-environment/
[FR]ANSSI - Dangerous enrollment permission on authentication certificate templates (vuln1_adcs_template_auth_enroll_with_name)1
[MITRE]T1558 Steal or Forge Kerberos Tickets

Details:

The detail can be found in Certificate Templates

NameCAEnrollmentPrincipalsLastModified
ESC2  DC.domain.local\Enterprise CA  Authenticated Users 11/09/2025 10:57:01
Informative rule

Ensure that DC supports Kerberos armoring when functional level is at least Windows Server 2012

Rule ID:

S-KerberosArmoringDC

Description:

The purpose is to ensure that DC supports Kerberos armoring when functional level is at least Windows Server 2012

Technical explanation:

Kerberos Armoring is an optimization of the Kerberos protocol. It avoids the pre-authentication steps and thereby prevents pre-authentication attacks.
It is supported only starting Windows Server 2012 DC and Windows 8 workstations.
If Kerberos Armoring is requested for other operating systems (such as Windows 7 or Linux), the Kerberos authentication protocol may refuse to work.

Advised solution:

To enable Kerberos armoring for domain controllers, edit the GPO and go to Computer Configuration > Administrative Templates > System > KDC
then enable the policy "KDC support for claims, compound authentication and Kerberos armoring".
The policy should be set to at least "Supported".

The safest settings is "Fail authentication requests when Kerberos armoring is not available" but it should be enabled only if the clients support Kerberos armoring.

Points:

Informative rule (0 point)

Documentation:

https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/hh831747(v=ws.11)
https://pupuweb.com/solved-how-enable-kerberos-armoring-eap-fast-ad/
[MITRE]T1558 Steal or Forge Kerberos Tickets

Details:

If activated, the detail can be found in Security settings

T1558.003 Steal or Forge Kerberos Tickets: Kerberoasting [1]

+ 15 Point(s)

Check if admin accounts are vulnerable to the Kerberoast attack.

Rule ID:

P-Kerberoasting

Description:

The purpose is to ensure that the password of admin accounts cannot be retrieved using the Kerberoast attack.

Technical explanation:

To access a service using Kerberos, a user requests a ticket (named TGS) to the DC specific to the service.
This ticket is encrypted using a derivative of the service password, but can be brute-forced to retrieve the original password.
Any account having the attribute SPN populated is considered as a service account.
Given that any user can request a ticket for a service account, these accounts can have their password retrieved.
In addition, services are known to have their password not changed at a regular basis and to use well-known words.

Please note that this program ignores service accounts that had their password changed in the last 40 days ago to support using password rotation as a mitigation.

Advised solution:

If the account is a service account, the service should be removed from the privileged group or have a process to change its password at a regular basis.
If the user is a person, the SPN attribute of the account should be removed.

Points:

5 points per discovery

Documentation:

https://adsecurity.org/?p=3466
[FR]ANSSI - Privileged accounts with SPN (vuln1_spn_priv)1
[MITRE]T1558.003 Steal or Forge Kerberos Tickets: Kerberoasting

Details:

The detail can be found in Admin Groups

UserGroupsSPNs
Administrator Administrators
Domain Administrators
Enterprise Administrators
Schema Administrators
http/administrator
TestUser_DA Administrators
Domain Administrators
Enterprise Administrators
Schema Administrators
http/tda123
http/tda11
cifs/tda1
http/tda111
TestUser_EA Administrators
Domain Administrators
Enterprise Administrators
Schema Administrators
http/
http/tea4.domain.local
http/tea3
http/tea2
http/tea1

T1558.004 Steal or Forge Kerberos Tickets: AS-REP Roasting [1]

Informative rule

Check the use of Kerberos on services accounts without AES support

Rule ID:

S-AesNotEnabled

Description:

The purpose is to verify that AES is enabled for service accounts.

Technical explanation:

The default encryption algorithm used by Kerberos is RC4, which directly utilizes the NTLM hash of the user’s password.
However, due to the rapid advancements in computing power, it’s recommended to transition from RC4 to the more secure AES algorithm.

Before disabling RC4, the first step is to enable AES.
It’s important to note that service accounts and user accounts with the ‘serviceprincipalname’ attribute (also known as SPN) need to be configured to support AES.
Without this configuration, AES will not be fully operational.

Accounts are listed if :
1) no password changed occured after the first DC Win 2008 install to initate AES secrets or
2) they have a SPN and the account is not flaged to use AES for encryption with msDS-SupportedEncryptionTypes

Also be advised that other checks must be performed before disabling RC4 (such as trust accounts, ...). A dedicated section in this report explores AES compatibility.

Advised solution:

It is recommended to enable AES as an encryption algorithm in the user configuration dialog or in the "msDSSupportedEncryptionTypes" attribute at LDAP level.
It has to be enabled in the property of an account by checking all the boxes "This account supports Keberos AES XXX encryption".

For GMSA account, you have to manually edit the property msDS-SupportedEncryptionTypes

Points:

Informative rule (0 point)

Documentation:

https://learn.microsoft.com/en-us/archive/blogs/openspecification/msds-supportedencryptiontypes-episode-1-computer-accounts
[FR]ANSSI - Service accounts supported encryption algorithms (vuln3_kerberos_properties_encryption)3
[MITRE]T1558.004 Steal or Forge Kerberos Tickets: AS-REP Roasting

Details:

The detail can be found in User information and Computer information

Discovery

T1018 Remote System Discovery [1]

Informative rule

Ensure that the rootDse Anonymous Binding is disabled

Rule ID:

A-RootDseAnonBinding

Description:

The purpose is to ensure that Anonymous Binding on RootDse is not enabled

Technical explanation:

The rootDse is a special object that enables clients to discover the functionalities of the server, such as LDAP version or support for special processing.
On Windows, it can be accessed by default without binding, which allows everyone to access this data.
There is no confidential data in this attribute, only the Operating System version and the name of the domain.
Since Windows 2019, the rootDse access can be set to require authentication.
You can test the anonymous access of the rootDse object by launching ldp.exe and selecting 'Connect' on the Connection menu.
You should receive the error "The server has been configured to deny unauthenticated simple binds."

Advised solution:

Edit the attribute msDS-Other-Settings of the object CN=Directory Service,CN=Windows NT,CN=Services,CN=Configuration.
Add a new line with the content: DenyUnauthenticatedBind=1

Points:

Informative rule (0 point)

Documentation:

https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/3f0137a1-63df-400c-bf97-e1040f055a99
https://blog.lithnet.io/2018/12/disabling-unauthenticated-binds-in.html
[MITRE]T1018 Remote System Discovery

T1069.002 Permission Groups Discovery: Domain Groups [1]

+ 25 Point(s)

Check if there is a control path involving everyone-like groups.

Rule ID:

P-ControlPathIndirectEveryone

Description:

The purpose is to ensure that there is no control path involving everyone.

Technical explanation:


If you have access to a key server and the helpdesk can reset your password, then the helpdesk has access to the key server.
This is the kind of logic used by hackers to take control of the domain using key infrastructure objects (domain root, ...) or groups (domain administrators, ...).
Permissions are collected and analyzed to produce a control paths analysis.
Only write permissions (and specific ones) are used for this analysis.
Then the program identifies which users or computers, that are not members of known groups, can take control of this object.
To be fast, some tradeoffs have been selected. For example, logged on users on servers are ignored.
The program may also select paths which are not exploitable and ignore paths if it cannot read every permissions.
[Everyone] includes the user groups Anonymous, Everyone, Authenticated Users, Domain Users, Domain Computers and Builtin.

Advised solution:

You should analyze the chart and determine which underlying object is involved and grants write permissions to everyone.
Then edit the permissions and locate the write permission involved.
Then delete it or replace it according to your delegation model.

Points:

25 points if present

Documentation:

https://github.com/BloodHoundAD/BloodHound
https://github.com/ANSSI-FR/AD-control-paths
[MITRE]T1069.002 Permission Groups Discovery: Domain Groups

Details:

The detail can be found in Control Paths Analysis

Group
Certificate Publishers
Domain Controllers
Read Only Domain Controllers

T1087.001 Account Discovery: Local Account [1]

Informative rule

Check if NetCease has been put in place to mitigate Bloodhound

Rule ID:

A-NoNetSessionHardening

Description:

The purpose is to ensure that mitigations are in place against the Bloodhound tool

Technical explanation:

By default, Windows computers allow any authenticated user to enumerate network sessions to it.
This means an attacker could enumerate network sessions to a file share hosting home directories or a Domain Controller to see who's connected to SYSVOL (to apply Group Policy) and determine which workstations each user and admin account is logged into.
Bloodhound uses this capability extensively to map out credentials in the network.

Disabling Net Session Enumeration removes the capability for any user to enumerate net session info (Recon).

Advised solution:

If this mitigation is not part of the computer image, apply the following recommendations:
Run the NetCease PowerShell script (referenced below) on a reference workstation.
Open the Group Policy Management Console. Right-click the Group Policy object (GPO) that should contain the new preference item, and then click Edit .
In the console tree under Computer Configuration, expand the Preferences folder, and then expand the Windows Settings folder.
Right-click the Registry node, point to New, and select Registry Wizard.
Select the reference workstation on which the desired registry settings exist, then click Next .
Browse to HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\DefaultSecurity\
and select the check box for “SrvsvcSessionInfo” from which you want to create a Registry preference item. Select the check box for a key only if you want to create a Registry item for the key rather than for a value within the key.
Click Finish.
The settings that you selected appear as preference items in the Registry Wizard Values collection

Points:

Informative rule (0 point)

Documentation:

https://github.com/p0w3rsh3ll/NetCease
https://adsecurity.org/?p=3299
[MITRE]T1087.001 Account Discovery: Local Account

Details:

The detail can be found in Security settings

T1201 Password Policy Discovery [2]

+ 10 Point(s)

Check for short password length in password policy

Rule ID:

A-MinPwdLen

Description:

The purpose is to verify if the password policy of the domain enforces users to have at least 8 characters in their password

Technical explanation:

A check is performed to identify if the GPO regarding password policy allows less than 8 characters password. Short passwords represent a high risk because they can fairly easily be brute-forced or password sprayed. Most CERT and agencies advise for at least 8 characters (and often this number goes up to 12)

Advised solution:

To solve the issue, the best way is to either remove the GPO enabling short password, or to modify it in order to increase the password length to at least 8 characters

Points:

10 points if present

Documentation:

https://www.microsoft.com/en-us/research/publication/password-guidance/
[FR]ANSSI - Privileged group members with weak password policy (vuln2_privileged_members_password)2
[MITRE]T1201 Password Policy Discovery

Details:

The detail can be found in Password policies

GPO
Default Domain Policy
Informative rule

Check the Password Policy for Service Accounts (Information)

Rule ID:

A-NoServicePolicy

Description:

The purpose is to give information regarding a best practice for the Service Account password policy. Indeed, having a 20+ characters password for this account greatly helps reducing the risk of Kerberoasting attacks (offline cracking of the TGS tickets)
Note: PSO (Password Settings Objects) will be visible only if the user, which collected the information, has the permission to view it.

Technical explanation:

The rule is purely informative, as it gives insights regarding a best practice. It verifies if there is a GPO or PSO enforcing a 20+ characters password for the Service Accounts.

Advised solution:

The recommended way to handle service accounts is to use "Managed service accounts" introduced since Windows Server 2008 R2 (search for "msDS-ManagedServiceAccount").
To solve the anomaly, you should implement a PSO or GPO password guarantying a 20+ length password.

Points:

Informative rule (0 point)

Documentation:

https://www.microsoft.com/en-us/research/publication/password-guidance/
[MITRE]T1201 Password Policy Discovery

Details:

The detail can be found in Password Policies


Mitigations

Audit

Mitigation did matched

Active Directory Configuration

Mitigation did matched

Data Backup

Mitigation did matched

Privileged Account Management

Mitigation did matched

Privileged Process Integrity

Mitigation did matched

Update Software

Mitigation did matched

User Account Management

Mitigation did matched

Audit

Mitre Att&ck - Mitigation - Audit [2]

+ 10 Point(s)

Check if there is the expected audit policy on domain controllers.

Rule ID:

A-AuditDC

Description:

The purpose is to ensure that the audit policy on domain controllers collects the right set of events.

Technical explanation:

To detect and mitigate an attack, the right set of events need to be collected.
The audit policy is a compromise between too much and too few events to collect.
To solve this problem, the suggested audit policy from adsecurity.org is checked against the audit policy in place.

Advised solution:

Identify the Audit settings to apply and fix them.
Be aware that there are two places for audit settings.
For "Simple" audit configuration:
in Computer Configuration -> Policies -> Windows Settings -> Security Settings -> Local Policies -> Audit Policies
For "Advanced" audit configuration:
in Computer Configuration -> Policies -> Windows Settings -> Security Settings -> Advanced Audit Policy Configuration
Also be sure that the audit GPO is applied to all domain controllers, as the underlying object may be in a OU where the GPO is not applied.

Points:

10 points if present

Documentation:

https://adsecurity.org/?p=3299
https://adsecurity.org/?p=3377
[MITRE]Mitre Att&ck - Mitigation - Audit

Details:

The detail can be found in Audit settings
The table below shows the settings that were not found as configured in a GPO for a given domain controller.

TypeAuditProblemRationaleDomain controller
Advanced Policy Change / Authentication Policy Change No GPO check for audit success Collect events 4713, 4716, 4739, 4867, to track trust modifications DC
Advanced Detailed Tracking / DPAPI Activity No GPO check for audit success Collect event 4692 to track the export of DPAPI backup key DC
Advanced Detailed Tracking / Process Creation No GPO check for audit success Collect event 4688 to get the history of executed programs DC
Advanced System / Security System Extension No GPO check for audit success Collect events 4610, 4697 to track lsass security packages and services DC
Advanced Privilege Use / Sensitive Privilege Use No GPO check for audit success Collect events 4672, 4673, 4674 for privileges tracking such as the debug one DC
Advanced Logon/Logoff / Special Logon No GPO check for audit success Collect event 4964 for special group attributed at logon DC
Advanced Policy Change / Authentication Policy Change No GPO check for audit success Collect events 4713, 4716, 4739, 4867, to track trust modifications DC2
Advanced Detailed Tracking / DPAPI Activity No GPO check for audit success Collect event 4692 to track the export of DPAPI backup key DC2
Advanced Detailed Tracking / Process Creation No GPO check for audit success Collect event 4688 to get the history of executed programs DC2
Advanced System / Security System Extension No GPO check for audit success Collect events 4610, 4697 to track lsass security packages and services DC2
Advanced Privilege Use / Sensitive Privilege Use No GPO check for audit success Collect events 4672, 4673, 4674 for privileges tracking such as the debug one DC2
Advanced Logon/Logoff / Special Logon No GPO check for audit success Collect event 4964 for special group attributed at logon DC2
Advanced Policy Change / Authentication Policy Change No GPO check for audit success Collect events 4713, 4716, 4739, 4867, to track trust modifications RODC
Advanced Detailed Tracking / DPAPI Activity No GPO check for audit success Collect event 4692 to track the export of DPAPI backup key RODC
Advanced Detailed Tracking / Process Creation No GPO check for audit success Collect event 4688 to get the history of executed programs RODC
Advanced System / Security System Extension No GPO check for audit success Collect events 4610, 4697 to track lsass security packages and services RODC
Advanced Privilege Use / Sensitive Privilege Use No GPO check for audit success Collect events 4672, 4673, 4674 for privileges tracking such as the debug one RODC
Advanced Logon/Logoff / Special Logon No GPO check for audit success Collect event 4964 for special group attributed at logon RODC
Informative rule

Check if PowerShell logging is enabled.

Rule ID:

A-AuditPowershell

Description:

The purpose is to ensure that PowerShell logging is enabled.

Technical explanation:

PowerShell is a powerful language, also used by hackers because of this quality. Hackers are able to run programs such as mimikatz in memory using obfuscated commands such as Invoke-Mimikatz.
Because there is no artefact on the disk, the incident response task is difficult for the forensic analysts.
For this reason, we recommend to enable PowerShell logging via a group policy, despite the fact that these security settings may be part of the workstation or server images.

Advised solution:

Go to Computer Configuration -> Administrative Templates -> Windows Components -> Windows PowerShell
And enable "Turn on Module logging" and "Turn on PowerShell Script Block logging"
We recommend to set "*" as the module list.

Points:

Informative rule (0 point)

Documentation:

https://adsecurity.org/?p=2604
https://learn.microsoft.com/en-us/powershell/scripting/wmf/whats-new/script-logging?view=powershell-6
[US]STIG V-68819 - PowerShell script block logging must be enabled
[MITRE]Mitre Att&ck - Mitigation - Audit

Details:

The detail can be found in Security settings

Active Directory Configuration

Mitre Att&ck - Mitigation - Active Directory Configuration [17]

+ 50 Point(s)

Check for local backdoor stored in SID History

Rule ID:

T-SIDHistorySameDomain

Description:

The purpose is to ensure that accounts are not linked for more privileged accounts in the same domain

Technical explanation:

SID History is an attribute used in migration to link with a former account. It is not possible to have an account linked with an account belonging to the same domain. This can be analyzed by comparing the domain part of the SID History with the domain SID.

Advised solution:

It is not possible to have this occurrence except if a user from domain A has been migrated to domain B and then migrated again to domain A. This should be strongly investigated as it may be linked to a compromise of the domain.

To remove the SIDHistory from a user account, run:
Get-ADUser USERNAME -properties sidhistory | foreach {Set-ADUser $_ -remove @{sidhistory=$_.sidhistory.value}}
For a group, run:
Get-ADGroup GROUPNAME -properties sidhistory | foreach {Set-ADGroup $_ -remove @{sidhistory=$_.sidhistory.value}}
For all users in a OU:
Get-ADUser -SearchBase "OU=Accounts,DC=mydomain,DC=com" -Filter {sidhistory -like '*'} -properties sidhistory | foreach {Set-ADUser $_ -remove @{sidhistory=$_.sidhistory.value}}

Points:

50 points if present

Documentation:

[FR]ANSSI - Recommandations de sécurité relatives à Active Directory - R15 [paragraph.3.3.1.5]
[FR]ANSSI - Accounts or groups with SID history set (vuln3_sidhistory_present)3
[MITRE]Mitre Att&ck - Mitigation - Active Directory Configuration
[MITRE]T1134.005 Access Token Manipulation: SID-History Injection

Details:

The SIDHistory detail can be found in User information and Computer information and a quick summary in SID History

+ 20 Point(s)

At least one administrator account can be delegated

Rule ID:

P-Delegated

Description:

The purpose is to ensure that all Administrator Accounts have the configuration flag "this account is sensitive and cannot be delegated" (or are members of the built-in group "Protected Users" when your domain functional level is at least Windows Server 2012 R2).

Technical explanation:

Without the flag "This account is sensitive and cannot be delegated" any account can be impersonated by some service account. It is a best practice to enforce this flag on administrators accounts.

Advised solution:

To correct the situation, you should make sure that all your Administrator Accounts have the check-box "This account is sensitive and cannot be delegated" active or add your Administrator Accounts to the built-in group "Protected Users" if your domain functional level is at least Windows Server 2012 R2 (some functionalities may not work properly afterwards, you should check the official documentation).
If you want to enable the check-box "This account is sensitive and cannot be delegated" but this is not possible because the box is not present (typically for GMSA accounts), you can add the flag manually by adding the number 1048576 to the attribute useraccountcontrol of the account.
Please note that there is a section below in this report named "Admin Groups" which gives more information.

Points:

20 points if present

Documentation:

[US]STIG V-36435 - Delegation of privileged accounts must be prohibited.
[MITRE]Mitre Att&ck - Mitigation - Active Directory Configuration

Details:

The detail can be found in Admin Groups

DNReason
CN=srv_certsvc,OU=Admin,DC=domain,DC=local Not a protected user
CN=Administrator,CN=Users,DC=domain,DC=local Not a protected user
CN=srv_na_col,OU=Admin,DC=domain,DC=local Not a protected user
CN=TestUser_DA,OU=Testing,DC=domain,DC=local Not a protected user
CN=TestUser_EA,OU=Testing,DC=domain,DC=local Not a protected user
CN=DA,CN=Users,DC=domain,DC=local Not a protected user
CN=AdminKerb1,OU=Admin,DC=domain,DC=local Not a protected user
CN=srv_AA,OU=Admin,DC=domain,DC=local Not a protected user
CN=srv_recover,OU=Admin,DC=domain,DC=local Not a protected user
CN=srv_sd,OU=Admin,DC=domain,DC=local Not a protected user
CN=srv_1secure,OU=Admin,DC=domain,DC=local Not a protected user
CN=ED_MERRILL,OU=People,DC=domain,DC=local Not a protected user
CN=TestUser_NEA,OU=Testing,DC=domain,DC=local Not a protected user
CN=NestedDA,OU=People,DC=domain,DC=local Not a protected user
CN=RUPERT_COMPTON,OU=ESM,OU=People,DC=domain,DC=local Not a protected user
+ 15 Point(s)

Check for hidden group membership for user accounts

Rule ID:

S-PrimaryGroup

Description:

The purpose is to check for unusual values in the primarygroupid attribute used to store group memberships

Technical explanation:

In Active Directory, group membership is stored on the "members" attribute and on the "primarygroupid" attribute. The default primary group value is "Domain Users" for the users, "Domain Computers" for the computers and "Domain Controllers" for the domain controllers. The primarygroupid contains the RID (last digits of a SID) of the group targeted. It can be used to store hidden membership as this attribute is not often analyzed.

Advised solution:

Unless strongly justified, change the primary group id to its default: 513 or 514 for users, 516 or 521 for domain controllers, 514 or 515 for computers. The primary group can be edited in a friendly manner by editing the account with the "Active Directory Users and Computers" and after selecting the "Member Of" tab, "set primary group".
You can use the following script to list Users with a primary group id different from domain users:
$DomainUsersSid = New-Object System.Security.Principal.SecurityIdentifier ([System.Security.Principal.WellKnownSidType]::AccountDomainUsersSid,(Get-ADDomain).DomainSID)

Get-ADUser -Filter * -Properties PrimaryGroup | Where-Object { $_.PrimaryGroup -ne (Get-ADGroup -Filter {SID -eq $DomainUsersSid} ).DistinguishedName } | Select-Object UserPrincipalName,PrimaryGroup

Points:

15 points if present

Documentation:

[FR]ANSSI - Accounts with modified PrimaryGroupID (vuln3_primary_group_id_nochange)3
[MITRE]Mitre Att&ck - Mitigation - Active Directory Configuration

Details:

The detail can be found in User information and Computer information

DN
CN=CLARK_PEREZ,OU=GOO,OU=People,DC=domain,DC=local
CN=JANELL_ODONNELL,OU=Admin,DC=domain,DC=local
+ 15 Point(s)

Ensure that GPO items cannot be modified by any user

Rule ID:

P-DelegationGPOData

Description:

The purpose is to ensure that standard users cannot modify GPO

Technical explanation:

When the group Authenticated Users, Everyone or any similar groups have permission to modify a GPO, it can be abused to take control of the accounts where this GPO applies. It can potentially lead to the compromise of the domain

Advised solution:

Edit the Access Control List (ACL) of the GPO object or the directory where the items is located. Then remove any write permission given to the group.

Points:

15 points per discovery

Documentation:

[FR]ANSSI - Recommandations de sécurité relatives à Active Directory - R18 [subsubsection.3.3.2]
[US]STIG V-2370 - The access control permissions for the directory service site group policy must be configured to use the required access permissions.
[MITRE]Mitre Att&ck - Mitigation - Active Directory Configuration

Details:
GPOItemAccountRight
NTLM Block \\DC2.domain.local\sysvol\domain.local\Policies\{E018745D-AF45-473D-B5F2-31169FA435C2} Authenticated Users FullControl
+ 10 Point(s)

Ensure that no accounts are subject to unconstrained delegation

Rule ID:

P-UnconstrainedDelegation

Description:

This rule identifies accounts configured with Kerberos unconstrained delegation, a high-risk setting that allows a compromised service to impersonate any domain user and potentially lead to full domain compromise.

Technical explanation:

Kerberos unconstrained delegation allows a service to reuse a user’s Ticket Granting Ticket (TGT) to authenticate to any service in the domain. If the delegated account is compromised, cached TGTs can be extracted and used to impersonate any authenticating user.
If a privileged account or a Domain Controller authenticates to such a service, potentially via forced authentication techniques, the attacker can escalate privileges and compromise the entire domain. Disabling the account does not remove this risk, as delegation settings persist and become active again if the account is re-enabled.

Advised solution:

Kerberos unconstrained delegation should be removed wherever it is configured. If delegation is required, it must be replaced with Kerberos constrained delegation.

Step 1: Remove Unconstrained Delegation
Remove the ability for the account to delegate credentials to any service.

Computer accounts
Set-ADComputer -Identity -TrustedForDelegation $false

User accounts
Set-ADUser -Identity -TrustedForDelegation $false

Step 2: Configure Constrained Delegation (Only If Required)

If an application requires delegation:
1. Open Active Directory Users and Computers
2. Open the account properties
3. Go to the Delegation tab
4. Select “Trust this computer for delegation to specified services only”
5. Select “Use Kerberos only”
6. Add only the specific services that are required for the application

Do not enable delegation if it is not strictly necessary.

Points:

5 points per discovery

Documentation:

https://learn.microsoft.com/en-us/archive/blogs/389thoughts/get-rid-of-accounts-that-use-kerberos-unconstrained-delegation
https://adsecurity.org/?p=1667
[FR]ANSSI - Recommandations de sécurité relatives à Active Directory - R18 [subsubsection.3.3.2]
[FR]ANSSI - Unconstrained authentication delegation (vuln2_delegation_t4d)2
[MITRE]T1187 Forced Authentication
[MITRE]Mitre Att&ck - Mitigation - Active Directory Configuration

Details:

The detail can be found in User information and Computer information

DNName
CN=kerbdeleg1,OU=Admin,DC=domain,DC=local kerbdeleg1
CN=kerbdeleg3,OU=Admin,DC=domain,DC=local kerbdeleg3
+ 10 Point(s)

Check if dangerous SID are stored in the SIDHistory attribute.

Rule ID:

T-SIDHistoryDangerous

Description:

The purpose is to ensure that the dangerous SID are not stored in the SIDHistory attribute.

Technical explanation:

SID History is an attribute used in migration to link with a former account.
This rule checks for SID not coming from a former domain (such as SYSTEM) or from a former domain but having a RID (the last part of the SID) lower than 1000.
Indeed, native privileged accounts have a SID lower than 1000.
A list of Well Known SID is referenced in the documentation below.

Advised solution:


Identify the account, computer or group having these dangerous SID set in SID History, then clean it up by editing directly the SIDHistory attribute of the underlying AD object.

To remove the SIDHistory from a user account, run:
Get-ADUser USERNAME -properties sidhistory | foreach {Set-ADUser $_ -remove @{sidhistory=$_.sidhistory.value}}
For a group, run:
Get-ADGroup GROUPNAME -properties sidhistory | foreach {Set-ADGroup $_ -remove @{sidhistory=$_.sidhistory.value}}
For all users in a OU:
Get-ADUser -SearchBase "OU=Accounts,DC=mydomain,DC=com" -Filter {sidhistory -like '*'} -properties sidhistory | foreach {Set-ADUser $_ -remove @{sidhistory=$_.sidhistory.value}}

Points:

10 points if present

Documentation:

https://learn.microsoft.com/en-us/windows-server/identity/ad-ds/manage/understand-security-identifiers
[FR]ANSSI - Recommandations de sécurité relatives à Active Directory - R15 [paragraph.3.3.1.5]
[FR]ANSSI - Accounts or groups with unexpected SID history (vuln2_sidhistory_dangerous)2
[MITRE]Mitre Att&ck - Mitigation - Active Directory Configuration
[MITRE]T1134.005 Access Token Manipulation: SID-History Injection

Details:

The SIDHistory detail can be found in User information and Computer information and a quick summary in SID History

Domain
domain.local
+ 5 Point(s)

Check for completeness of network declaration

Rule ID:

S-DC-SubnetMissing

Description:

The purpose is to ensure that the minimum set of subnet(s) has been configured in the domain

Technical explanation:

When multiple sites are created in a domain, networks should be declared in the domain in order to optimize processes such as DC attribution. In addition, PingCastle can collect the information to be able to build a network map. This rule has been triggered because at least one domain controller has an IP address which was not found in subnet declaration. These IP addresses have been collected by querying the DC FQDN IP address in both IPv6 and IPv4 format.

Advised solution:

Locate the IP address which was found as not being part of declared subnet, then add this subnet to the "Active Directory Sites" tool. If you have found IPv6 addresses and it was not expected, you should disable the IPv6 protocol on the network card.

Points:

5 points if present

Documentation:

[MITRE]Mitre Att&ck - Mitigation - Active Directory Configuration

Details:

The detail can be found in Domain controllers

Domain controllerip
DC 192.168.1.145
+ 5 Point(s)

Check if the protection against revealing privileged group is active

Rule ID:

P-RODCNeverReveal

Description:

The purpose is to ensure that the protection against revealing privileged group is active

Technical explanation:

In addition to the group Denied RODC Password Replication Group there is a custom setting set for RODC in an attribute named msDS-NeverRevealGroup.
This rule checks the current value against the default one.

Advised solution:

Check the value of the attribute msDS-NeverRevealGroup and the presence of the following expected groups:
- Administrators;
- Server Operators;
- Account Operators;
- Backup Operators;
- Denied RODC Password Replication Group

This can be managed in the Password Replication Policy tab of the computer object in the Active Directory Users and Computers console.

Points:

5 points if present

Documentation:

https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/8dfc81be-7461-48f2-8caf-07402bccb0ea
[FR]ANSSI - Dangerous configuration of read-only domain controllers (RODC) (neverReveal) (vuln3_rodc_never_reveal)3
[MITRE]Mitre Att&ck - Mitigation - Active Directory Configuration

Details:

The detail can be found in Domain controllers

Domain controllerGroup
RODC Administrators
RODC Server Operators
RODC Account Operators
RODC Backup Operators
RODC Denied RODC Password Replication Group
+ 5 Point(s)

Check if privileged users have been revealed on RODC

Rule ID:

P-RODCAdminRevealed

Description:

The purpose is to check if privileged users have already been revealed

Technical explanation:

On Active Directory, all users revealed to a RODC are tracked by an attribute set on the computer object of the RODC named msDS-RevealedUsers.
The program checks on the list of revealed users if one of them is known as a privileged user.
Indeed, the RODC is caching the authentication secrets related of this user, which can then be used to impersonate it.
In addition to that, RODC are placed in general on more riskier environment.

Advised solution:

The admin account should have its secrets change (a password reset) and be sure that the account will not be revealed anymore.

Points:

5 points per discovery

Documentation:

https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/8dfc81be-7461-48f2-8caf-07402bccb0ea
[FR]ANSSI - Privileged users revealed on RODC (vuln2_rodc_priv_revealed)2
[MITRE]Mitre Att&ck - Mitigation - Active Directory Configuration

Details:

The detail can be found in Domain controllers

Domain controllerUser
RODC CN=DA,CN=Users,DC=domain,DC=local
+ 5 Point(s)

Check the Allowed RODC Password Replication Group group

Rule ID:

P-RODCAllowedGroup

Description:

The purpose is to ensure that the Allowed RODC Password Replication Group group is empty.

Technical explanation:

Accounts belonging to the Allowed RODC Password Replication Group group have their password hashes revealed on all RODCs.

Advised solution:

This group should be emptied, and dedicated groups should only be added to the Password Replication Policy of each relevant RODC.

Points:

5 points if present

Documentation:

[FR]ANSSI - Dangerous configuration of replication groups for read-only domain controllers (RODCs) (allow) (vuln3_rodc_allowed_group)3
[MITRE]Mitre Att&ck - Mitigation - Active Directory Configuration

Details:
Member
CN=TestUser_DA,OU=Testing,DC=domain,DC=local
CN=Admins,OU=Admin,DC=domain,DC=local
CN=DA,CN=Users,DC=domain,DC=local
+ 1 Point(s)

Check that there is no account with never-expiring passwords

Rule ID:

S-PwdNeverExpires

Description:

The purpose is to ensure that every account has a password which is compliant with password expiration policies

Technical explanation:

Some accounts have passwords which never expire. Should an attacker compromise one of these accounts, he would be able to maintain long-term access to the Active Directory domain.

We have noted that some Linux servers, domain joined, are configured with a password which never expires.
This is a misconfiguration because a password change can be configured. It was however not the default on some plateform.
See one of the link below for more information.

Advised solution:

In order to make Active Directory enforce periodic password change, accounts must not have the "Password never expires" flag set in the "Account" tab of the user properties. Their passwords should then be rolled immediately.
For service accounts, Windows provides the "managed service accounts" and "group managed service accounts" features to facilitate the automatic change of passwords.
Please note that there is a document in the section below which references solutions for service accounts of well known products.
Also Linux servers should be configured with automatic machine account change.

Points:

1 points if present

Documentation:

https://adsecurity.org/?p=4115
https://access.redhat.com/discussions/1283873
[FR]ANSSI - Accounts with never-expiring passwords (vuln2_dont_expire)2
[MITRE]Mitre Att&ck - Mitigation - Active Directory Configuration

Details:

The detail can be found in User information

DN
CN=DA,CN=Users,DC=domain,DC=local
CN=NestedUser1,OU=Admin,DC=domain,DC=local
CN=TestUser1,OU=Admin,DC=domain,DC=local
CN=TestUser2,OU=Test1,OU=Testing,DC=domain,DC=local
CN=ShouldNotShow,OU=Test1,OU=Testing,DC=domain,DC=local
CN=TestUser3,OU=Testing,DC=domain,DC=local
CN=TestUser_EA,OU=Testing,DC=domain,DC=local
CN=TestUser_DA,OU=Testing,DC=domain,DC=local
CN=TestUser1_BadSuc,OU=TestSubjects,OU=VulnerableTest-20250619-160707,OU=Testing,DC=domain,DC=local
CN=TestUser1_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
CN=TestUser2_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
CN=TestUser3_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
CN=TestUser4_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
CN=TestUser5_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
CN=TestUser6_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
CN=TestUser7_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
CN=TestUser8_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
CN=TestUser9_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
CN=TestUser10_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
CN=TestUser11_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
CN=TestUser12_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
CN=TestUser13_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
CN=TestUser14_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
CN=TestUser15_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
CN=TestUser16_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
CN=TestUser_NEA,OU=Testing,DC=domain,DC=local
CN=TestUser17_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
CN=TestUser18_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
CN=srv_1secure,OU=Admin,DC=domain,DC=local
CN=MSOL_c92a2de74d9c,OU=Admin,DC=domain,DC=local
CN=Entra1,OU=Users,OU=Entra,DC=domain,DC=local
CN=PermTest1,OU=Admin,DC=domain,DC=local
CN=srv_si,OU=Admin,DC=domain,DC=local
CN=srv_sd,OU=Admin,DC=domain,DC=local
CN=srv_certsvc,OU=Admin,DC=domain,DC=local
CN=KerbRoast1,OU=Admin,DC=domain,DC=local
CN=AdminEmail,OU=Admin,DC=domain,DC=local
CN=Demo NoPriv,OU=Admin,DC=domain,DC=local
CN=domain user,OU=Admin,DC=domain,DC=local
CN=srv_na,OU=Admin,DC=domain,DC=local
CN=srv_na_col,OU=Admin,DC=domain,DC=local
CN=kerbdeleg3,OU=Admin,DC=domain,DC=local
CN=srv_recover,OU=Admin,DC=domain,DC=local
CN=NestedDA,OU=People,DC=domain,DC=local
CN=srv_AA,OU=Admin,DC=domain,DC=local
CN=AdminKerb1,OU=Admin,DC=domain,DC=local
+ 1 Point(s)

Check if AES is enabled on trusts

Rule ID:

T-AlgsAES

Description:

The purpose is to check if AES can be used with Kerberos on trusts

Technical explanation:

By default, RC4 is used as the signature algorithm on Kerberos tickets.
If AES is enabled on a domain and AES is not enabled on trust, AES tickets will not be usable on the trust. The Kerberos tickets sent to the trust will fail or the trusted domain will fallback to NTLM.

The encryption algorithms allowed for a trust are stored in an attribute named msDS-SupportedEncryptionTypes.
If this attribute is not set (or has a value of zero), RC4 will be applied by default.
Else, it defines the algorithm to use for Kerberos signature.

Advised solution:

Enable AES on the domain.

Beware: there is a checkbox in the trust properties named "The other domain supports Kerberos AES Encryption".
If you enable this setting, AES will be enabled but RC4 will also be disabled.

The recommended way is to enable both RC4 and AES as a transition. It can be done by running the command:
ksetup /setenctypeattr mytrust.com RC4-HMAC-MD5 AES128-CTS-HMAC-SHA1-96 AES256-CTS-HMAC-SHA1-96

This way, the attribute msDS-SupportedEncryptionTypes of the trust will be modified to support both RC4 and AES.

Points:

1 points if present

Documentation:

https://techcommunity.microsoft.com/t5/itops-talk-blog/tough-questions-answered-can-i-disable-rc4-etype-for-kerberos-on/ba-p/382718
https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-kile/6cfc7b50-11ed-4b4d-846d-6f08f0812919
https://techcommunity.microsoft.com/t5/core-infrastructure-and-security/decrypting-the-selection-of-supported-kerberos-encryption-types/ba-p/1628797
[MITRE]Mitre Att&ck - Mitigation - Active Directory Configuration

Details:
TrustReason
child.domain.local Not Configured
Informative rule

Verify Terminal Services configuration best practices in GPO

Rule ID:

S-TerminalServicesGPO

Description:

This rule verifies the recommended configuration for Terminal Services.

Technical explanation:

It is a common practice for hackers to look for open sessions on remote servers.
This can be done by attempting to open the user registry and checking if there is an access denied error or if the registry hive is not available at all.
If found, the hacker can exploit this information by targeting this computer, or if the session is still active, hijack it and impact the client computer.
Indeed, you can access the local drive by default and push a malicious file such as a login script in the start menu of the remote user.
Another alternative is if the session is not secure, to capture the credentials in memory.

The printer redirection has no known attack pattern.
However due to past vulnerabilites with the Printer spooler, the complexity of the underlying protocol, the relative absence of need to this feature, we recommend to block it.
It can also be a bypass for copy / paste restriction and it is recommended to deny it in most admin bastion.

Advised solution:

The Terminal Services configuration can be found in Policies / Administrative Templates / Windows Components / Remote Desktop Services / Remote Desktop Session Host
The details of this rule is located in Printer Redirection and Session Time Limits.

PingCastle recommends to set the following Policy:
Set time limit for disconnected sessions: 2h (aka MaxDisconnectionTime)
Set time limit for active but idle Remote Desktop Services sessions: 8h (aka MaxIdleTime)
Do not allow client printer redirection: Enabled (aka fDisableCpm)

This rule is active if nothing is set or if the time limit is set to NEVER.

Points:

Informative rule (0 point)

Documentation:

https://woshub.com/remote-desktop-session-time-limit/
https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-tsts/ce70794f-2138-43e8-bf6c-2c147887d6a2
https://community.spiceworks.com/t/are-redirected-printers-a-security-risk/826344/27
[MITRE]Mitre Att&ck - Mitigation - Active Directory Configuration

Details:
GPOReason
Windows default without an active GPO MaxIdleTime is not set
Windows default without an active GPO MaxDisconnectionTime is not set
Windows default without an active GPO fDisableCpm is not set
Informative rule

Verify if there are restrictions for internet connectivity of script engines

Rule ID:

S-FirewallScript

Description:

This rule verifies whether programs, such as script engines, are allowed to connect to the internet by default.

Technical explanation:

Malicious scripts, often distributed via phishing emails, frequently attempt to connect to the internet to propagate their infection.
To mitigate this risk, we recommend implementing a set of firewall rules through Group Policy Objects (GPOs).
These rules will prohibit direct internet connections for specific programs.

The current list of programs to restrict includes: wscript.exe, mshta.exe, cscript.exe, conhost.exe, and runScriptHelper.exe.

Advised solution:

1) Create Firewall Rules via GPO

Configure the firewall rules under Computer Configuration / Policies / Windows Settings / Security Settings / Windows Defender Firewall with Advanced Security.
Ensure the rules are applied on the Outbound side.
Activate the rules.

2) Network Restrictions:
We recommend setting the rules as active for the following IP address ranges to allow local network access:
0.0.0.0 to 9.255.255.255
11.0.0.0 to 126.255.255.255
128.0.0.1 to 172.15.255.255
172.32.0.0 to 192.167.255.255
192.169.0.0 to 255.255.255.255

Alternatively, you can choose to apply the rules to ALL IP addresses or add your internal proxy IP.

Points:

Informative rule (0 point)

Documentation:

https://medium.com/@cryps1s/endpoint-isolation-with-the-windows-firewall-462a795f4cfb
[MITRE]Mitre Att&ck - Mitigation - Active Directory Configuration

Details:

The detail can be found in Firewall configuration

ProgramReason
wscript.exe No Firewall rules found
mshta.exe No Firewall rules found
cscript.exe No Firewall rules found
conhost.exe No Firewall rules found
runScriptHelper.exe No Firewall rules found
Informative rule

Verify that Defender ASR mitigations are in place

Rule ID:

S-DefenderASR

Description:

This rule confirms the activation of Defender ASR (Attack Surface Reduction) mitigations within a Group Policy Object (GPO).

Technical explanation:

Microsoft Defender, the default antivirus included with Windows, activates automatically on systems without a pre-installed alternative.
Defender’s ASR features, designed to minimize vulnerability to attacks, are available even in the standard version.
These protections have been part of Windows since the release of Windows 10 version 1710 and are also applicable to Windows Server 2012 R2.

Note: Windows 11 may enable in some conditions those 3 ASR rules: Block abuse of exploited vulnerable signed drivers, Block credential stealing from the Windows local security authority subsystem (lsass.exe), Block persistence through WMI event subscription

Advised solution:

To apply an ASR mitigation, navigate to the GPO setting "Configure Attack Surface Reduction rules" found under Computer Configuration > Policies > Administrative Templates > Windows Components > Microsoft Defender Antivirus (formerly Windows Defender Antivirus) > Microsoft (Windows) Defender Exploit Guard > Attack Surface Reduction.
Upon enabling this setting, select "Set the state for each ASR rule".
Then, input the mitigation’s GUID as the Value name and assign 1 as the Value to enforce the rule in Block mode.
Other configurable values include 2 for Audit mode and 6 for Warn mode.
For instance, to block JavaScript or VBScript from executing downloaded executable content, use the GUID: d3e037e1-3eb8-44c8-a917-57927947596d.
It is recommended to set Defender ASR rules as recommended in the article below.


Prior to implementation, conduct an impact analysis to anticipate any potential disruptions, and utilize Audit mode to identify possible issues.

Points:

Informative rule (0 point)

Documentation:

https://learn.microsoft.com/en-us/defender-endpoint/attack-surface-reduction-rules-reference?view=o365-worldwide#per-asr-rule-alert-and-notification-details
https://blog.palantir.com/microsoft-defender-attack-surface-reduction-recommendations-a5c7d41c3cf8
[MITRE]Mitre Att&ck - Mitigation - Active Directory Configuration

Details:

The detail can be found in Defender ASR

GuidLabelReason
7674ba52-37eb-4a4f-a9a1-f0f9a1619a2c Block Adobe Reader from creating child processes Not found - Block or Warn recommended
9e6c4e1f-7d60-472f-ba1a-a39ef669e4b2 Block credential stealing from the Windows local security authority subsystem (lsass.exe) Not found - Block or Warn recommended
be9ba2d9-53ea-4cdc-84e5-9b1eeee46550 Block executable content from email client and webmail Not found - Block or Warn recommended
d3e037e1-3eb8-44c8-a917-57927947596d Block JavaScript or VBScript from launching downloaded executable content Not found - Block or Warn recommended
3b576869-a4ec-4529-8536-b80a7769e899 Block Office applications from creating executable content Not found - Block or Warn recommended
e6db77e5-3df2-4cf1-b95a-636979351e5b Block persistence through WMI event subscription Not found - Block or Warn recommended
b2b3f03d-6a65-4f7b-a9c7-1c7ef74a9ba4 Block untrusted and unsigned processes that run from USB Not found - Block or Warn recommended
56a863a9-875e-4185-98a7-b882c64b5ce5 Block abuse of exploited vulnerable signed drivers Not found - Block or Warn recommended
75668c1f-73b5-4cf0-bb93-3ecf5cb7cc84 Block Office applications from injecting code into other processes Not found - Audit recommended
92e97fa1-2edf-4476-bdd6-9dd0b4dddc7b Block Win32 API calls from Office macros Not found - Audit recommended
d4f940ab-401b-4efc-aadc-ad5f3c50688a Block all Office applications from creating child processes Not found - Audit recommended
5beb7efe-fd9a-4556-801d-275e5ffc04cc Block execution of potentially obfuscated scripts Not found - Audit recommended
01443614-cd74-433a-b99e-2ecdc07bfc25 Block executable files from running unless they meet a prevalence, age, or trusted list criterion Not found - Audit recommended
c1db55ab-c21a-4637-bb3f-a12568109d35 Use advanced protection against ransomware Not found - Audit recommended
d1e49aac-8f56-4280-b9ba-993a6d77406c Block process creations originating from PSExec and WMI commands Not found - Audit recommended
26190899-1602-49e8-8b27-eb1d0a1ce869 Block Office communication application from creating child processes Not found - Audit recommended
33ddedf1-c6e0-47cb-833e-de6133960387 Block rebooting machine in Safe Mode (preview) Not found - Audit recommended
c0033c00-d16d-4114-a5a0-dc9b3a7d2ceb Block use of copied or impersonated system tools (preview) Not found - Audit recommended
Informative rule

Verify the Default Application for Script File Execution

Rule ID:

S-FolderOptions

Description:

The objective is to ensure scripts do not automatically execute upon opening by default.

Technical explanation:

By default, PowerShell scripts (.ps1) open in Notepad, which blocks these extensions from being exploited in phishing attacks that evade email filters through multi-layered archives.
However, several legacy script extensions (.js, .jse, .vbs, .vbe, .vb, .wsh, .wsf) still execute with their respective engines.
While .js and .jse files are commonly associated with web content and handled by browsers, it’s crucial to recognize their potential for harm when executed directly in Windows.
Redirecting these files to open in Notepad safeguards against inadvertent execution without affecting web browsing.
The browser navigation is not impacted by this recommendation.
Review is recommended for other script files before implementing this security measure.

Note: Javascript execution can be mitigated by an "Attack surface reduction rule" named "Impede JavaScript and VBScript to launch executables" available since Windows 10, version 1709.
But we still recommend to apply the folder options mitigation as it is more effective.

Advised solution:

Navigate to Computer Configuration > Preferences > Control Panel Settings > Folder Options.
Create a new File Type with the "Replace" action for the extension you wish to secure.
In "Configure class settings", add a new "open" action with Notepad as the default application: C:\Windows\System32\notepad.exe.

Points:

Informative rule (0 point)

Documentation:

https://isc.sans.edu/diary/Controlling+JavaScript+Malware+Before+it+Runs/21171
[MITRE]Mitre Att&ck - Mitigation - Active Directory Configuration

Details:

The detail can be found in Folder Options

ExtensionReason
js Not found in Folder Options
vbs Not found in Folder Options
vbe Not found in Folder Options
vb Not found in Folder Options
wsh Not found in Folder Options
wsf Not found in Folder Options
Informative rule

Check if OUs and Containers are protected from accidental deletion.

Rule ID:

P-UnprotectedOU

Description:

The purpose is to ensure that Organizational Units (OUs) and Containers in Active Directory are protected to prevent accidental deletion, which could lead to data loss and disruptions in the network infrastructure.

Technical explanation:

In Active Directory, Organizational Units can be protected from accidental deletion (reads: using the del key in the wrong place at the wrong time).
This way these objects cannot be deleted, unless the protection is removed. This Active Directory feature was first introduced in Windows Server 2008.

This protection consists of a Deny ACE added to the NTSecurityDescriptor attribute applied to Everyone with the flag set to Delete and DeleteTree.

Advised solution:

To safeguard against accidental deletions, it is essential to enable the "Protect object from accidental deletion" option for critical OUs and Containers.
When this option is enabled, it adds an additional layer of security, preventing unintended deletions.
To implement this protection:

* Open the Active Directory Users and Computers management console.
* Locate the OU or Container that requires protection.
* Right-click on the OU or Container, select "Properties."
* In the "Object" tab, check the "Protect object from accidental deletion" option.
* Click "Apply" and then "OK" to save the changes.

You can list unprotected OU using the PowerShell command:
Get-ADOrganizationalUnit -filter {name -like "*"} -Properties ProtectedFromAccidentalDeletion | format-table Name,ProtectedFromAccidentalDeletion
and protect them using the command:
Get-ADOrganizationalUnit -filter {name -like "*"} -Properties ProtectedFromAccidentalDeletion | where {$_.ProtectedFromAccidentalDeletion -eq $false} | Set-ADOrganizationalUnit -ProtectedFromAccidentalDeletion $true

Note: only 10 will be listed below. Checkout the Delegations section for the complete list.

Points:

Informative rule (0 point)

Documentation:

https://dirteam.com/sander/2011/07/13/preventing-ous-and-containers-from-accidental-deletion/
[MITRE]Mitre Att&ck - Mitigation - Active Directory Configuration

Details:

The detail can be found in Delegations

OU
OU=Domain Controllers,DC=domain,DC=local
OU=GPOTest,DC=domain,DC=local
OU=Systems,DC=domain,DC=local
OU=Clients,OU=Systems,DC=domain,DC=local
OU=Servers,OU=Systems,DC=domain,DC=local

Data Backup

Mitre Att&ck - Mitigation - Data Backup [1]

+ 15 Point(s)

Check for the last backup date according to Microsoft standard

Rule ID:

A-BackupMetadata

Description:

The purpose is to check if the backups are actually up to date in case they are needed. The alert can be triggered when a domain is backed up using non-recommended methods

Technical explanation:

A verification is done on the backups, ensuring that the backup is performed according to Microsoft standards. Indeed, at each backup the DIT Database Partition Backup Signature is updated. If for any reasons, backups are needed to perform a rollback (rebuild a domain) or to track past changes, the backups will actually be up to date. This check is equivalent to a REPADMIN /showbackup *.

Advised solution:

Plan AD backups based on Microsoft standards. These standards depend on the Operating System. For example with the wbadmin utility: wbadmin start systemstatebackup -backuptarget:d:

Points:

15 points if the occurence is greater than or equals than 7

Documentation:

https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/jj130668(v=ws.10)
[US]STIG V-25385 - Active Directory data must be backed up daily for systems with a Risk Management Framework categorization for Availability of moderate or high. Systems with a categorization of low must be backed up weekly.
[MITRE]Mitre Att&ck - Mitigation - Data Backup

Details:

The detail can be found in Backup

Privileged Account Management

Mitre Att&ck - Mitigation - Privileged Account Management [3]

+ 15 Point(s)

Check if Service Accounts (aka accounts with never expiring password) are domain administrators

Rule ID:

P-ServiceDomainAdmin

Description:

The purpose is to check for accounts with non-expiring passwords in the "Domain Administrator" group

Technical explanation:

PingCastle is checking accounts with never expiring password, that are mostly used as service accounts.
"Service Accounts" can imply a high security risk as their password are stored in clear text in the LSA database, which can then be easily exploited using Mimikatz or Cain&Abel for instance. In addition, their passwords don't change and can be used in Kerberoast attacks.

Advised solution:

Accounts with never expiring passwords are mostly service accounts.
To mitigate the security risk, it is strongly advised to lower the privileges of the "Service Accounts", meaning that they should be removed from the "Domain Administrator" group, while ensuring that the password of each and every "Service Account" is longer than 20 characters

Points:

15 points if the occurence is greater than or equals than 2

Documentation:

[US]STIG V-36432 - Membership to the Domain Admins group must be restricted to accounts used only to manage the Active Directory domain and domain controllers.
[FR]ANSSI - Recommandations de sécurité relatives à Active Directory - R11 [subsection.2.5]
[FR]ANSSI - Privileged accounts with never-expiring passwords (vuln1_dont_expire_priv)1
[MITRE]Mitre Att&ck - Mitigation - Privileged Account Management
[MITRE]T1003.004 OS Credential Dumping: LSA Secrets

Details:

The detail can be found in Admin Groups

DN
CN=srv_AA,OU=Admin,DC=domain,DC=local
CN=srv_recover,OU=Admin,DC=domain,DC=local
CN=srv_na_col,OU=Admin,DC=domain,DC=local
CN=srv_sd,OU=Admin,DC=domain,DC=local
CN=srv_1secure,OU=Admin,DC=domain,DC=local
CN=TestUser_DA,OU=Testing,DC=domain,DC=local
CN=TestUser_EA,OU=Testing,DC=domain,DC=local
CN=DA,CN=Users,DC=domain,DC=local
CN=NestedDA,OU=People,DC=domain,DC=local
+ 10 Point(s)

Avoid unexpected schema modifications which could result in domain rebuild

Rule ID:

P-SchemaAdmin

Description:

The purpose is to ensure that no account can make unexpected modifications to the schema

Technical explanation:

The group "Schema Admins" is used to give permissions to alter the schema. Once a modification is performed on the schema such as new objects, it cannot be undone. This can result in a rebuild of the domain. The best practice is to have this group empty and to add an administrator when a schema update is required, then remove this group membership.

Advised solution:

Remove the accounts or groups belonging to the "schema administrators" group.

Points:

10 points if present

Documentation:

[US]STIG V-72835 - Membership to the Schema Admins group must be limited
[FR]ANSSI - Recommandations de sécurité relatives à Active Directory - R13 [subsection.3.2]
[MITRE]Mitre Att&ck - Mitigation - Privileged Account Management

Details:

The detail can be found in Admin Groups

+ 1 Point(s)

Check if there is a policy preventing administrators to connect to lower tier systems.

Rule ID:

P-LogonDenied

Description:

The purpose is to ensure that there is a tier isolation.

Technical explanation:

A way to collect an administrator credential is to take control of a workstation or server in the unsecured tiers and expect that an administrator will connect to it.
An attack such as credential theft or Kerberos delegation is then performed.
To reduce the impact of such compromise, the best practice is to isolate components (such as admins, DC) in tiers.
Typically, a domain admin should not be allowed to connect to any workstation or lower tier server but login only to perform highly privileged operations on tier 0 systems.

To check for this policy, PingCastle looks at all GPOs and checks, if there is a GPO denying logon (SeDenyRemoteInteractiveLogonRight, SeDenyInteractiveLogonRight) of admins (Domain Admins or Administrators) to a specific scope.

False positives can occurs for this rule:
* if the expected GPO is hidden due to ACL checks
* if the targeted group is not "checked" when saving the GPO. Indeed, the group will be saved as is without a conversion to its technical name and it will prohibit a match if there are groups internationalized, aka renamed given a specific language.

As a consequence, only one deny policy on one group will fulfill this requirements. The program also does not check if the GPO is applied on an Organizational Unit or a Container.
Also this rule is enforced only if there are more than 200 users and 200 computers.

Advised solution:

You should add a GPO to prohibit the logon of specific groups Domain Admins and Administrators.

The setting is located in Computer Policy -> Computer Configuration -> Windows Settings -> Security Settings -> Local Policies -> User Rights Assignment.
Then "Deny" logon locally and "Deny" logon through Remote Desktop Services.

Points:

1 points if present

Documentation:

https://learn.microsoft.com/en-us/windows-server/identity/ad-ds/plan/security-best-practices/appendix-f--securing-domain-admins-groups-in-active-directory
[MITRE]Mitre Att&ck - Mitigation - Privileged Account Management

Details:

The detail can be found in GPO Login

Privileged Process Integrity

Mitre Att&ck - Mitigation - Privileged Process Integrity [1]

+ 10 Point(s)

Check if all privileged accounts are in the special group Protected Users.

Rule ID:

P-ProtectedUsers

Description:

The purpose is to ensure that all privileged accounts are in the Protected User security group

Technical explanation:

The Protected User group is a special security group which automatically applies protections to minimize credential exposure. Starting with Windows 8.1. Older Operating System must be updated to take this protection in account such as the Windows 7 KB2871997 patch.
For admins, it:
- Disables NTLM authentication
- Reduces Kerberos ticket lifetime
- Mandates strong encryption algorithms, such as AES
- Prevents password caching on workstations
- Prevents any type of Kerberos delegation

Please also note that a few links (see below) recommends that at least one account is kept outside of the group Protected Users in case there is a permission problem.
That's why this rule is not triggered if only one account is not protected.

Advised solution:

After having reviewed the potential impact on adding users to this group, add the missing privileged accounts to this group.

Points:

10 points if the occurence is greater than or equals than 2

Documentation:

https://learn.microsoft.com/en-us/windows-server/security/credentials-protection-and-management/protected-users-security-group
https://blog.netwrix.com/2015/02/20/add-sensitive-user-accounts-to-active-directory-protected-users-group/
https://dirteam.com/sander/2014/11/25/ten-things-you-need-to-be-aware-of-before-using-the-protected-users-group/
https://blog.andreas-schreiner.de/2018/09/07/active-directory-sicherheit-teil-1-privilegierte-benutzer/
[US]STIG V-78131 - Accounts with domain level administrative privileges must be members of the Protected Users group in domains with a domain functional level of Windows 2012 R2 or higher.
[FR]ANSSI CERTFR-2017-ALE-012
[FR]ANSSI - Privileged accounts outside of the Protected Users group (vuln3_protected_users)3
[MITRE]Mitre Att&ck - Mitigation - Privileged Process Integrity

Details:

The detail can be found in Admin Groups

User
srv_certsvc
Administrator
srv_na_col
TestUser_DA
TestUser_EA
DA
AdminKerb1
srv_AA
srv_recover
srv_sd
srv_1secure
ED_MERRILL
TestUser_NEA
NestedDA
RUPERT_COMPTON

Update Software

Mitre Att&ck - Mitigation - Update Software [2]

+ 5 Point(s)

Obsolete OS (Windows 10 or Windows 11)

Rule ID:

S-OS-W10

Description:

The purpose is to ensure that there is no use of non-supported version of Windows 10 or Windows 11 within the domain

Technical explanation:

Some versions of Windows 10 and Windows 11 OS are no longer supported, and may be vulnerable to exploits that are not patched anymore.

Advised solution:

In order to solve this security issue, you should upgrade all the Windows 10 or Windows 11 to a more recent version.
Use PingCastle.exe and select export on the main menu. Then choose to export computers. PingCastle will produce a list of all your computers with the OS version in a csv file. You can then use Excel to filter them.
Do note that you can get the full details regarding the OS used with the following PowerShell command: Get-ADComputer -Filter {(Enabled -eq $true) -and (OperatingSystem -Like "*Windows 10*")} -Property Name,OperatingSystem,OperatingSystemServicePack,OperatingSystemVersion | format-table Name,OperatingSystem,OperatingSystemServicePack,OperatingSystemVersion -Wrap -Auto

Points:

15 points if the occurence is greater than or equals than 15
then 10 points if the occurence is greater than or equals than 6
then 5 points if present

Documentation:

https://learn.microsoft.com/en-us/windows/release-health/release-information
[FR]ANSSI CERTFR-2005-INF-003
[MITRE]Mitre Att&ck - Mitigation - Update Software

Details:

The detail can be found in Operating Systems

VersionNumberActive
Windows 10 22H2 1 0
Windows 11 22H2 1 1
+ 2 Point(s)

Obsolete OS (Windows Server 2012)

Rule ID:

S-OS-2012

Description:

The purpose is to ensure that there is no use of the obsolete and vulnerable OS Windows Server 2012 for the workstations within the domain

Technical explanation:

The Windows Server 2012 OS is no longer supported, as it is vulnerable to many publicly known exploits: Administrator's credentials can be captured, security protocols are weak, etc.

Advised solution:

In order to solve this security issue, you should upgrade all the servers to a more recent version of Windows, starting from Windows Server 2012.
Use PingCastle.exe and select export on the main menu. Then choose to export computers. PingCastle will produce a list of all your computers with the OS version in a csv file. You can then use Excel to filter them.
Do note that you can get the full details regarding the OS used with the following PowerShell command: Get-ADComputer -Filter {(Enabled -eq $true) -and (OperatingSystem -Like "*Server 2012*")} -Property Name,OperatingSystem,OperatingSystemServicePack,OperatingSystemVersion | format-table Name,OperatingSystem,OperatingSystemServicePack,OperatingSystemVersion -Wrap -Auto

Points:

10 points if the occurence is greater than or equals than 15
then 5 points if the occurence is greater than or equals than 6
then 2 points if present

Documentation:

https://learn.microsoft.com/en-US/lifecycle/products/windows-server-2012-r2
[FR]ANSSI CERTFR-2005-INF-003
[MITRE]Mitre Att&ck - Mitigation - Update Software

Details:

The detail can be found in Operating Systems

User Account Management

Mitre Att&ck - Mitigation - User Account Management [2]

+ 10 Point(s)

Check the process of registration of computers to the domain

Rule ID:

S-ADRegistration

Description:

The purpose is to ensure that basic users cannot register extra computers in the domain

Technical explanation:

By default, a basic user can register up to 10 computers within the domain. This default configuration represents a security issue as basic users shouldn't be able to create such accounts and this task should be handled by administrators.

If the value of the attribute ms-DS-MachineAccountQuota is not set (the program see this as "Infinite"), there is no limit to computer addition.

Note: this program checks also the GPO for SeMachineAccountPrivilege assignment. This assignment can be used to restrict the impact of the key ms-DS-MachineAccountQuota.

Advised solution:

To solve the issue, limit the number of extra computers that can be registered by a basic user. It can be reduced by modifying the value of ms-DS-MachineAccountQuota to zero (0). Another solution can be to remove the "Authenticated Users" group in the domain controllers policy altogether. Do note, that if you need to set delegation to an account, so it can add computers to the domain, it can be done through 2 methods: Delegation in the OU or by assigning the SeMachineAccountPrivilege to a special group

Points:

10 points if present

Documentation:

https://learn.microsoft.com/troubleshoot/windows-server/identity/default-workstation-numbers-join-domain
http://prajwaldesai.com/allow-domain-user-to-add-computer-to-domain/
http://blog.backslasher.net/preventing-users-from-adding-computers-to-a-domain.html
[MITRE]Mitre Att&ck - Mitigation - User Account Management
[FR]ANSSI - Unrestricted domain join (vuln4_user_accounts_machineaccountquota)4

Informative rule

Check if default OU location has been changed within the domain.

Rule ID:

S-DefaultOUChanged

Description:

The purpose is to ensure that the default location of computers and user OU has not been changed.

Technical explanation:

Default OU such as CN=Computers or CN=Users are stored within the wellKnownObjects attribute of the Domain object.
There are 12 default locations officialy defined.
They can be changed using the program redircmp.
Changing these default can alter the behavior of programs (such as security audit programs) as they may not check the modified objects.

Advised solution:

You have to use redircmp to set the value back to normal. See documentation for more details

Points:

Informative rule (0 point)

Documentation:

https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/5a00c890-6be5-4575-93c4-8bf8be0ca8d8
https://rickardnobel.se/verify-redirected-computers-container-in-active-directory/
[MITRE]Mitre Att&ck - Mitigation - User Account Management

Details:
ExpectedFound
CN=Users,DC=domain,DC=local OU=Admin,DC=domain,DC=local
050100

Stale Objects : 53 /100

It is about operations related to user or computer objects

+ 15 Point(s)

Ensure that the NTLMv1 and old LM protocols are banned

Rule ID:

S-OldNtlm

Description:

The purpose is to check if NTLMv1 or LM can be used by DC

Technical explanation:

NTLMv1 is an old protocol which is known to be vulnerable to cryptographic attacks.
It is typically used when a hacker sniffs the network and tries to retrieve NTLM hashes which can then be used to impersonate users.

This attack can be combined with coerced authentication attacks - a hacker forces the DC to connect to a controlled host.
In this case, NTLMv1 can be specified so the hacker can retrieve the NTLM hash of the DC, impersonates it and then take control of the domain.
This attack is still possible with NTLMv2 but this is more difficult.

Windows has default security settings regarding LM/NTLM. Windows XP: Send LM & NTLM responses, Windows Server 2003: Send NTLM response only, Vista/2008: Win7/2008 R2: Send NTLMv2 response only.

However Domain Controllers have relaxed default settings to accept the connection of older operating systems.
That means that by default, NTLMv1 is accepted on domain controllers.
If no GPO defines the LAN Manager Authentication Level, the DC fall back to the non secure default.

Advised solution:

After an audit of NTLMv1 usage (see the links below), you need to raise the LAN Manager Authentication Level to "Send NTLMv2 response only. Refuse LM & NTLM".
This can be done by editing the policy "Network security: LAN Manager authentication level" which can be accessed in Computer Configuration\Windows Settings\Security Settings\Local Policies\Security Options
The policy will be applied after a computer reboot.

Beware that you may break software which is not compatible with Ntlmv2 such as very old Linux stacks or very old Windows before Windows Vista.
But please note that Ntlmv2 can be activited on all Windows starting Windows 95 and other operating systems.

Points:

15 points if present

Documentation:

https://learn.microsoft.com/en-us/troubleshoot/windows-server/windows-security/audit-domain-controller-ntlmv1
https://learn.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/network-security-restrict-ntlm-ntlm-authentication-in-this-domain
https://learn.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/network-security-lan-manager-authentication-level
https://learn.microsoft.com/en-us/troubleshoot/windows-client/windows-security/enable-ntlm-2-authentication
[MITRE]T1557.001 Man-in-the-Middle: LLMNR/NBT-NS Poisoning and SMB Relay
[FR]ANSSI - Recommandations de sécurité relatives à Active Directory - R37 [paragraph.3.6.2.1]

Details:

The detail can be found in Security settings

GPOValue
Windows default without an active GPO 3
+ 15 Point(s)

Check for hidden group membership for user accounts

Rule ID:

S-PrimaryGroup

Description:

The purpose is to check for unusual values in the primarygroupid attribute used to store group memberships

Technical explanation:

In Active Directory, group membership is stored on the "members" attribute and on the "primarygroupid" attribute. The default primary group value is "Domain Users" for the users, "Domain Computers" for the computers and "Domain Controllers" for the domain controllers. The primarygroupid contains the RID (last digits of a SID) of the group targeted. It can be used to store hidden membership as this attribute is not often analyzed.

Advised solution:

Unless strongly justified, change the primary group id to its default: 513 or 514 for users, 516 or 521 for domain controllers, 514 or 515 for computers. The primary group can be edited in a friendly manner by editing the account with the "Active Directory Users and Computers" and after selecting the "Member Of" tab, "set primary group".
You can use the following script to list Users with a primary group id different from domain users:
$DomainUsersSid = New-Object System.Security.Principal.SecurityIdentifier ([System.Security.Principal.WellKnownSidType]::AccountDomainUsersSid,(Get-ADDomain).DomainSID)

Get-ADUser -Filter * -Properties PrimaryGroup | Where-Object { $_.PrimaryGroup -ne (Get-ADGroup -Filter {SID -eq $DomainUsersSid} ).DistinguishedName } | Select-Object UserPrincipalName,PrimaryGroup

Points:

15 points if present

Documentation:

[FR]ANSSI - Accounts with modified PrimaryGroupID (vuln3_primary_group_id_nochange)3
[MITRE]Mitre Att&ck - Mitigation - Active Directory Configuration

Details:

The detail can be found in User information and Computer information

DN
CN=CLARK_PEREZ,OU=GOO,OU=People,DC=domain,DC=local
CN=JANELL_ODONNELL,OU=Admin,DC=domain,DC=local
+ 10 Point(s)

Check the process of registration of computers to the domain

Rule ID:

S-ADRegistration

Description:

The purpose is to ensure that basic users cannot register extra computers in the domain

Technical explanation:

By default, a basic user can register up to 10 computers within the domain. This default configuration represents a security issue as basic users shouldn't be able to create such accounts and this task should be handled by administrators.

If the value of the attribute ms-DS-MachineAccountQuota is not set (the program see this as "Infinite"), there is no limit to computer addition.

Note: this program checks also the GPO for SeMachineAccountPrivilege assignment. This assignment can be used to restrict the impact of the key ms-DS-MachineAccountQuota.

Advised solution:

To solve the issue, limit the number of extra computers that can be registered by a basic user. It can be reduced by modifying the value of ms-DS-MachineAccountQuota to zero (0). Another solution can be to remove the "Authenticated Users" group in the domain controllers policy altogether. Do note, that if you need to set delegation to an account, so it can add computers to the domain, it can be done through 2 methods: Delegation in the OU or by assigning the SeMachineAccountPrivilege to a special group

Points:

10 points if present

Documentation:

https://learn.microsoft.com/troubleshoot/windows-server/identity/default-workstation-numbers-join-domain
http://prajwaldesai.com/allow-domain-user-to-add-computer-to-domain/
http://blog.backslasher.net/preventing-users-from-adding-computers-to-a-domain.html
[MITRE]Mitre Att&ck - Mitigation - User Account Management
[FR]ANSSI - Unrestricted domain join (vuln4_user_accounts_machineaccountquota)4

+ 5 Point(s)

Obsolete OS (Windows 10 or Windows 11)

Rule ID:

S-OS-W10

Description:

The purpose is to ensure that there is no use of non-supported version of Windows 10 or Windows 11 within the domain

Technical explanation:

Some versions of Windows 10 and Windows 11 OS are no longer supported, and may be vulnerable to exploits that are not patched anymore.

Advised solution:

In order to solve this security issue, you should upgrade all the Windows 10 or Windows 11 to a more recent version.
Use PingCastle.exe and select export on the main menu. Then choose to export computers. PingCastle will produce a list of all your computers with the OS version in a csv file. You can then use Excel to filter them.
Do note that you can get the full details regarding the OS used with the following PowerShell command: Get-ADComputer -Filter {(Enabled -eq $true) -and (OperatingSystem -Like "*Windows 10*")} -Property Name,OperatingSystem,OperatingSystemServicePack,OperatingSystemVersion | format-table Name,OperatingSystem,OperatingSystemServicePack,OperatingSystemVersion -Wrap -Auto

Points:

15 points if the occurence is greater than or equals than 15
then 10 points if the occurence is greater than or equals than 6
then 5 points if present

Documentation:

https://learn.microsoft.com/en-us/windows/release-health/release-information
[FR]ANSSI CERTFR-2005-INF-003
[MITRE]Mitre Att&ck - Mitigation - Update Software

Details:

The detail can be found in Operating Systems

VersionNumberActive
Windows 10 22H2 1 0
Windows 11 22H2 1 1
+ 5 Point(s)

Check for completeness of network declaration

Rule ID:

S-DC-SubnetMissing

Description:

The purpose is to ensure that the minimum set of subnet(s) has been configured in the domain

Technical explanation:

When multiple sites are created in a domain, networks should be declared in the domain in order to optimize processes such as DC attribution. In addition, PingCastle can collect the information to be able to build a network map. This rule has been triggered because at least one domain controller has an IP address which was not found in subnet declaration. These IP addresses have been collected by querying the DC FQDN IP address in both IPv6 and IPv4 format.

Advised solution:

Locate the IP address which was found as not being part of declared subnet, then add this subnet to the "Active Directory Sites" tool. If you have found IPv6 addresses and it was not expected, you should disable the IPv6 protocol on the network card.

Points:

5 points if present

Documentation:

[MITRE]Mitre Att&ck - Mitigation - Active Directory Configuration

Details:

The detail can be found in Domain controllers

Domain controllerip
DC 192.168.1.145
+ 2 Point(s)

Obsolete OS (Windows Server 2012)

Rule ID:

S-OS-2012

Description:

The purpose is to ensure that there is no use of the obsolete and vulnerable OS Windows Server 2012 for the workstations within the domain

Technical explanation:

The Windows Server 2012 OS is no longer supported, as it is vulnerable to many publicly known exploits: Administrator's credentials can be captured, security protocols are weak, etc.

Advised solution:

In order to solve this security issue, you should upgrade all the servers to a more recent version of Windows, starting from Windows Server 2012.
Use PingCastle.exe and select export on the main menu. Then choose to export computers. PingCastle will produce a list of all your computers with the OS version in a csv file. You can then use Excel to filter them.
Do note that you can get the full details regarding the OS used with the following PowerShell command: Get-ADComputer -Filter {(Enabled -eq $true) -and (OperatingSystem -Like "*Server 2012*")} -Property Name,OperatingSystem,OperatingSystemServicePack,OperatingSystemVersion | format-table Name,OperatingSystem,OperatingSystemServicePack,OperatingSystemVersion -Wrap -Auto

Points:

10 points if the occurence is greater than or equals than 15
then 5 points if the occurence is greater than or equals than 6
then 2 points if present

Documentation:

https://learn.microsoft.com/en-US/lifecycle/products/windows-server-2012-r2
[FR]ANSSI CERTFR-2005-INF-003
[MITRE]Mitre Att&ck - Mitigation - Update Software

Details:

The detail can be found in Operating Systems

+ 1 Point(s)

Check that there is no account with never-expiring passwords

Rule ID:

S-PwdNeverExpires

Description:

The purpose is to ensure that every account has a password which is compliant with password expiration policies

Technical explanation:

Some accounts have passwords which never expire. Should an attacker compromise one of these accounts, he would be able to maintain long-term access to the Active Directory domain.

We have noted that some Linux servers, domain joined, are configured with a password which never expires.
This is a misconfiguration because a password change can be configured. It was however not the default on some plateform.
See one of the link below for more information.

Advised solution:

In order to make Active Directory enforce periodic password change, accounts must not have the "Password never expires" flag set in the "Account" tab of the user properties. Their passwords should then be rolled immediately.
For service accounts, Windows provides the "managed service accounts" and "group managed service accounts" features to facilitate the automatic change of passwords.
Please note that there is a document in the section below which references solutions for service accounts of well known products.
Also Linux servers should be configured with automatic machine account change.

Points:

1 points if present

Documentation:

https://adsecurity.org/?p=4115
https://access.redhat.com/discussions/1283873
[FR]ANSSI - Accounts with never-expiring passwords (vuln2_dont_expire)2
[MITRE]Mitre Att&ck - Mitigation - Active Directory Configuration

Details:

The detail can be found in User information

DN
CN=DA,CN=Users,DC=domain,DC=local
CN=NestedUser1,OU=Admin,DC=domain,DC=local
CN=TestUser1,OU=Admin,DC=domain,DC=local
CN=TestUser2,OU=Test1,OU=Testing,DC=domain,DC=local
CN=ShouldNotShow,OU=Test1,OU=Testing,DC=domain,DC=local
CN=TestUser3,OU=Testing,DC=domain,DC=local
CN=TestUser_EA,OU=Testing,DC=domain,DC=local
CN=TestUser_DA,OU=Testing,DC=domain,DC=local
CN=TestUser1_BadSuc,OU=TestSubjects,OU=VulnerableTest-20250619-160707,OU=Testing,DC=domain,DC=local
CN=TestUser1_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
CN=TestUser2_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
CN=TestUser3_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
CN=TestUser4_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
CN=TestUser5_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
CN=TestUser6_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
CN=TestUser7_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
CN=TestUser8_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
CN=TestUser9_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
CN=TestUser10_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
CN=TestUser11_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
CN=TestUser12_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
CN=TestUser13_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
CN=TestUser14_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
CN=TestUser15_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
CN=TestUser16_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
CN=TestUser_NEA,OU=Testing,DC=domain,DC=local
CN=TestUser17_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
CN=TestUser18_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
CN=srv_1secure,OU=Admin,DC=domain,DC=local
CN=MSOL_c92a2de74d9c,OU=Admin,DC=domain,DC=local
CN=Entra1,OU=Users,OU=Entra,DC=domain,DC=local
CN=PermTest1,OU=Admin,DC=domain,DC=local
CN=srv_si,OU=Admin,DC=domain,DC=local
CN=srv_sd,OU=Admin,DC=domain,DC=local
CN=srv_certsvc,OU=Admin,DC=domain,DC=local
CN=KerbRoast1,OU=Admin,DC=domain,DC=local
CN=AdminEmail,OU=Admin,DC=domain,DC=local
CN=Demo NoPriv,OU=Admin,DC=domain,DC=local
CN=domain user,OU=Admin,DC=domain,DC=local
CN=srv_na,OU=Admin,DC=domain,DC=local
CN=srv_na_col,OU=Admin,DC=domain,DC=local
CN=kerbdeleg3,OU=Admin,DC=domain,DC=local
CN=srv_recover,OU=Admin,DC=domain,DC=local
CN=NestedDA,OU=People,DC=domain,DC=local
CN=srv_AA,OU=Admin,DC=domain,DC=local
CN=AdminKerb1,OU=Admin,DC=domain,DC=local
Informative rule

Check if default OU location has been changed within the domain.

Rule ID:

S-DefaultOUChanged

Description:

The purpose is to ensure that the default location of computers and user OU has not been changed.

Technical explanation:

Default OU such as CN=Computers or CN=Users are stored within the wellKnownObjects attribute of the Domain object.
There are 12 default locations officialy defined.
They can be changed using the program redircmp.
Changing these default can alter the behavior of programs (such as security audit programs) as they may not check the modified objects.

Advised solution:

You have to use redircmp to set the value back to normal. See documentation for more details

Points:

Informative rule (0 point)

Documentation:

https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/5a00c890-6be5-4575-93c4-8bf8be0ca8d8
https://rickardnobel.se/verify-redirected-computers-container-in-active-directory/
[MITRE]Mitre Att&ck - Mitigation - User Account Management

Details:
ExpectedFound
CN=Users,DC=domain,DC=local OU=Admin,DC=domain,DC=local
Informative rule

Check the use of Kerberos on services accounts without AES support

Rule ID:

S-AesNotEnabled

Description:

The purpose is to verify that AES is enabled for service accounts.

Technical explanation:

The default encryption algorithm used by Kerberos is RC4, which directly utilizes the NTLM hash of the user’s password.
However, due to the rapid advancements in computing power, it’s recommended to transition from RC4 to the more secure AES algorithm.

Before disabling RC4, the first step is to enable AES.
It’s important to note that service accounts and user accounts with the ‘serviceprincipalname’ attribute (also known as SPN) need to be configured to support AES.
Without this configuration, AES will not be fully operational.

Accounts are listed if :
1) no password changed occured after the first DC Win 2008 install to initate AES secrets or
2) they have a SPN and the account is not flaged to use AES for encryption with msDS-SupportedEncryptionTypes

Also be advised that other checks must be performed before disabling RC4 (such as trust accounts, ...). A dedicated section in this report explores AES compatibility.

Advised solution:

It is recommended to enable AES as an encryption algorithm in the user configuration dialog or in the "msDSSupportedEncryptionTypes" attribute at LDAP level.
It has to be enabled in the property of an account by checking all the boxes "This account supports Keberos AES XXX encryption".

For GMSA account, you have to manually edit the property msDS-SupportedEncryptionTypes

Points:

Informative rule (0 point)

Documentation:

https://learn.microsoft.com/en-us/archive/blogs/openspecification/msds-supportedencryptiontypes-episode-1-computer-accounts
[FR]ANSSI - Service accounts supported encryption algorithms (vuln3_kerberos_properties_encryption)3
[MITRE]T1558.004 Steal or Forge Kerberos Tickets: AS-REP Roasting

Details:

The detail can be found in User information and Computer information

Informative rule

Verify that Defender ASR mitigations are in place

Rule ID:

S-DefenderASR

Description:

This rule confirms the activation of Defender ASR (Attack Surface Reduction) mitigations within a Group Policy Object (GPO).

Technical explanation:

Microsoft Defender, the default antivirus included with Windows, activates automatically on systems without a pre-installed alternative.
Defender’s ASR features, designed to minimize vulnerability to attacks, are available even in the standard version.
These protections have been part of Windows since the release of Windows 10 version 1710 and are also applicable to Windows Server 2012 R2.

Note: Windows 11 may enable in some conditions those 3 ASR rules: Block abuse of exploited vulnerable signed drivers, Block credential stealing from the Windows local security authority subsystem (lsass.exe), Block persistence through WMI event subscription

Advised solution:

To apply an ASR mitigation, navigate to the GPO setting "Configure Attack Surface Reduction rules" found under Computer Configuration > Policies > Administrative Templates > Windows Components > Microsoft Defender Antivirus (formerly Windows Defender Antivirus) > Microsoft (Windows) Defender Exploit Guard > Attack Surface Reduction.
Upon enabling this setting, select "Set the state for each ASR rule".
Then, input the mitigation’s GUID as the Value name and assign 1 as the Value to enforce the rule in Block mode.
Other configurable values include 2 for Audit mode and 6 for Warn mode.
For instance, to block JavaScript or VBScript from executing downloaded executable content, use the GUID: d3e037e1-3eb8-44c8-a917-57927947596d.
It is recommended to set Defender ASR rules as recommended in the article below.


Prior to implementation, conduct an impact analysis to anticipate any potential disruptions, and utilize Audit mode to identify possible issues.

Points:

Informative rule (0 point)

Documentation:

https://learn.microsoft.com/en-us/defender-endpoint/attack-surface-reduction-rules-reference?view=o365-worldwide#per-asr-rule-alert-and-notification-details
https://blog.palantir.com/microsoft-defender-attack-surface-reduction-recommendations-a5c7d41c3cf8
[MITRE]Mitre Att&ck - Mitigation - Active Directory Configuration

Details:

The detail can be found in Defender ASR

GuidLabelReason
7674ba52-37eb-4a4f-a9a1-f0f9a1619a2c Block Adobe Reader from creating child processes Not found - Block or Warn recommended
9e6c4e1f-7d60-472f-ba1a-a39ef669e4b2 Block credential stealing from the Windows local security authority subsystem (lsass.exe) Not found - Block or Warn recommended
be9ba2d9-53ea-4cdc-84e5-9b1eeee46550 Block executable content from email client and webmail Not found - Block or Warn recommended
d3e037e1-3eb8-44c8-a917-57927947596d Block JavaScript or VBScript from launching downloaded executable content Not found - Block or Warn recommended
3b576869-a4ec-4529-8536-b80a7769e899 Block Office applications from creating executable content Not found - Block or Warn recommended
e6db77e5-3df2-4cf1-b95a-636979351e5b Block persistence through WMI event subscription Not found - Block or Warn recommended
b2b3f03d-6a65-4f7b-a9c7-1c7ef74a9ba4 Block untrusted and unsigned processes that run from USB Not found - Block or Warn recommended
56a863a9-875e-4185-98a7-b882c64b5ce5 Block abuse of exploited vulnerable signed drivers Not found - Block or Warn recommended
75668c1f-73b5-4cf0-bb93-3ecf5cb7cc84 Block Office applications from injecting code into other processes Not found - Audit recommended
92e97fa1-2edf-4476-bdd6-9dd0b4dddc7b Block Win32 API calls from Office macros Not found - Audit recommended
d4f940ab-401b-4efc-aadc-ad5f3c50688a Block all Office applications from creating child processes Not found - Audit recommended
5beb7efe-fd9a-4556-801d-275e5ffc04cc Block execution of potentially obfuscated scripts Not found - Audit recommended
01443614-cd74-433a-b99e-2ecdc07bfc25 Block executable files from running unless they meet a prevalence, age, or trusted list criterion Not found - Audit recommended
c1db55ab-c21a-4637-bb3f-a12568109d35 Use advanced protection against ransomware Not found - Audit recommended
d1e49aac-8f56-4280-b9ba-993a6d77406c Block process creations originating from PSExec and WMI commands Not found - Audit recommended
26190899-1602-49e8-8b27-eb1d0a1ce869 Block Office communication application from creating child processes Not found - Audit recommended
33ddedf1-c6e0-47cb-833e-de6133960387 Block rebooting machine in Safe Mode (preview) Not found - Audit recommended
c0033c00-d16d-4114-a5a0-dc9b3a7d2ceb Block use of copied or impersonated system tools (preview) Not found - Audit recommended
Informative rule

Verify Terminal Services configuration best practices in GPO

Rule ID:

S-TerminalServicesGPO

Description:

This rule verifies the recommended configuration for Terminal Services.

Technical explanation:

It is a common practice for hackers to look for open sessions on remote servers.
This can be done by attempting to open the user registry and checking if there is an access denied error or if the registry hive is not available at all.
If found, the hacker can exploit this information by targeting this computer, or if the session is still active, hijack it and impact the client computer.
Indeed, you can access the local drive by default and push a malicious file such as a login script in the start menu of the remote user.
Another alternative is if the session is not secure, to capture the credentials in memory.

The printer redirection has no known attack pattern.
However due to past vulnerabilites with the Printer spooler, the complexity of the underlying protocol, the relative absence of need to this feature, we recommend to block it.
It can also be a bypass for copy / paste restriction and it is recommended to deny it in most admin bastion.

Advised solution:

The Terminal Services configuration can be found in Policies / Administrative Templates / Windows Components / Remote Desktop Services / Remote Desktop Session Host
The details of this rule is located in Printer Redirection and Session Time Limits.

PingCastle recommends to set the following Policy:
Set time limit for disconnected sessions: 2h (aka MaxDisconnectionTime)
Set time limit for active but idle Remote Desktop Services sessions: 8h (aka MaxIdleTime)
Do not allow client printer redirection: Enabled (aka fDisableCpm)

This rule is active if nothing is set or if the time limit is set to NEVER.

Points:

Informative rule (0 point)

Documentation:

https://woshub.com/remote-desktop-session-time-limit/
https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-tsts/ce70794f-2138-43e8-bf6c-2c147887d6a2
https://community.spiceworks.com/t/are-redirected-printers-a-security-risk/826344/27
[MITRE]Mitre Att&ck - Mitigation - Active Directory Configuration

Details:
GPOReason
Windows default without an active GPO MaxIdleTime is not set
Windows default without an active GPO MaxDisconnectionTime is not set
Windows default without an active GPO fDisableCpm is not set
Informative rule

Verify the Default Application for Script File Execution

Rule ID:

S-FolderOptions

Description:

The objective is to ensure scripts do not automatically execute upon opening by default.

Technical explanation:

By default, PowerShell scripts (.ps1) open in Notepad, which blocks these extensions from being exploited in phishing attacks that evade email filters through multi-layered archives.
However, several legacy script extensions (.js, .jse, .vbs, .vbe, .vb, .wsh, .wsf) still execute with their respective engines.
While .js and .jse files are commonly associated with web content and handled by browsers, it’s crucial to recognize their potential for harm when executed directly in Windows.
Redirecting these files to open in Notepad safeguards against inadvertent execution without affecting web browsing.
The browser navigation is not impacted by this recommendation.
Review is recommended for other script files before implementing this security measure.

Note: Javascript execution can be mitigated by an "Attack surface reduction rule" named "Impede JavaScript and VBScript to launch executables" available since Windows 10, version 1709.
But we still recommend to apply the folder options mitigation as it is more effective.

Advised solution:

Navigate to Computer Configuration > Preferences > Control Panel Settings > Folder Options.
Create a new File Type with the "Replace" action for the extension you wish to secure.
In "Configure class settings", add a new "open" action with Notepad as the default application: C:\Windows\System32\notepad.exe.

Points:

Informative rule (0 point)

Documentation:

https://isc.sans.edu/diary/Controlling+JavaScript+Malware+Before+it+Runs/21171
[MITRE]Mitre Att&ck - Mitigation - Active Directory Configuration

Details:

The detail can be found in Folder Options

ExtensionReason
js Not found in Folder Options
vbs Not found in Folder Options
vbe Not found in Folder Options
vb Not found in Folder Options
wsh Not found in Folder Options
wsf Not found in Folder Options
Informative rule

Ensure that DC supports Kerberos armoring when functional level is at least Windows Server 2012

Rule ID:

S-KerberosArmoringDC

Description:

The purpose is to ensure that DC supports Kerberos armoring when functional level is at least Windows Server 2012

Technical explanation:

Kerberos Armoring is an optimization of the Kerberos protocol. It avoids the pre-authentication steps and thereby prevents pre-authentication attacks.
It is supported only starting Windows Server 2012 DC and Windows 8 workstations.
If Kerberos Armoring is requested for other operating systems (such as Windows 7 or Linux), the Kerberos authentication protocol may refuse to work.

Advised solution:

To enable Kerberos armoring for domain controllers, edit the GPO and go to Computer Configuration > Administrative Templates > System > KDC
then enable the policy "KDC support for claims, compound authentication and Kerberos armoring".
The policy should be set to at least "Supported".

The safest settings is "Fail authentication requests when Kerberos armoring is not available" but it should be enabled only if the clients support Kerberos armoring.

Points:

Informative rule (0 point)

Documentation:

https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/hh831747(v=ws.11)
https://pupuweb.com/solved-how-enable-kerberos-armoring-eap-fast-ad/
[MITRE]T1558 Steal or Forge Kerberos Tickets

Details:

If activated, the detail can be found in Security settings

Informative rule

Verify if there are restrictions for internet connectivity of script engines

Rule ID:

S-FirewallScript

Description:

This rule verifies whether programs, such as script engines, are allowed to connect to the internet by default.

Technical explanation:

Malicious scripts, often distributed via phishing emails, frequently attempt to connect to the internet to propagate their infection.
To mitigate this risk, we recommend implementing a set of firewall rules through Group Policy Objects (GPOs).
These rules will prohibit direct internet connections for specific programs.

The current list of programs to restrict includes: wscript.exe, mshta.exe, cscript.exe, conhost.exe, and runScriptHelper.exe.

Advised solution:

1) Create Firewall Rules via GPO

Configure the firewall rules under Computer Configuration / Policies / Windows Settings / Security Settings / Windows Defender Firewall with Advanced Security.
Ensure the rules are applied on the Outbound side.
Activate the rules.

2) Network Restrictions:
We recommend setting the rules as active for the following IP address ranges to allow local network access:
0.0.0.0 to 9.255.255.255
11.0.0.0 to 126.255.255.255
128.0.0.1 to 172.15.255.255
172.32.0.0 to 192.167.255.255
192.169.0.0 to 255.255.255.255

Alternatively, you can choose to apply the rules to ALL IP addresses or add your internal proxy IP.

Points:

Informative rule (0 point)

Documentation:

https://medium.com/@cryps1s/endpoint-isolation-with-the-windows-firewall-462a795f4cfb
[MITRE]Mitre Att&ck - Mitigation - Active Directory Configuration

Details:

The detail can be found in Firewall configuration

ProgramReason
wscript.exe No Firewall rules found
mshta.exe No Firewall rules found
cscript.exe No Firewall rules found
conhost.exe No Firewall rules found
runScriptHelper.exe No Firewall rules found
050100

Privileged Accounts : 100 /100

It is about administrators of the Active Directory

+ 25 Point(s)

Check if there is a control path involving everyone-like groups.

Rule ID:

P-ControlPathIndirectEveryone

Description:

The purpose is to ensure that there is no control path involving everyone.

Technical explanation:


If you have access to a key server and the helpdesk can reset your password, then the helpdesk has access to the key server.
This is the kind of logic used by hackers to take control of the domain using key infrastructure objects (domain root, ...) or groups (domain administrators, ...).
Permissions are collected and analyzed to produce a control paths analysis.
Only write permissions (and specific ones) are used for this analysis.
Then the program identifies which users or computers, that are not members of known groups, can take control of this object.
To be fast, some tradeoffs have been selected. For example, logged on users on servers are ignored.
The program may also select paths which are not exploitable and ignore paths if it cannot read every permissions.
[Everyone] includes the user groups Anonymous, Everyone, Authenticated Users, Domain Users, Domain Computers and Builtin.

Advised solution:

You should analyze the chart and determine which underlying object is involved and grants write permissions to everyone.
Then edit the permissions and locate the write permission involved.
Then delete it or replace it according to your delegation model.

Points:

25 points if present

Documentation:

https://github.com/BloodHoundAD/BloodHound
https://github.com/ANSSI-FR/AD-control-paths
[MITRE]T1069.002 Permission Groups Discovery: Domain Groups

Details:

The detail can be found in Control Paths Analysis

Group
Certificate Publishers
Domain Controllers
Read Only Domain Controllers
+ 20 Point(s)

At least one administrator account can be delegated

Rule ID:

P-Delegated

Description:

The purpose is to ensure that all Administrator Accounts have the configuration flag "this account is sensitive and cannot be delegated" (or are members of the built-in group "Protected Users" when your domain functional level is at least Windows Server 2012 R2).

Technical explanation:

Without the flag "This account is sensitive and cannot be delegated" any account can be impersonated by some service account. It is a best practice to enforce this flag on administrators accounts.

Advised solution:

To correct the situation, you should make sure that all your Administrator Accounts have the check-box "This account is sensitive and cannot be delegated" active or add your Administrator Accounts to the built-in group "Protected Users" if your domain functional level is at least Windows Server 2012 R2 (some functionalities may not work properly afterwards, you should check the official documentation).
If you want to enable the check-box "This account is sensitive and cannot be delegated" but this is not possible because the box is not present (typically for GMSA accounts), you can add the flag manually by adding the number 1048576 to the attribute useraccountcontrol of the account.
Please note that there is a section below in this report named "Admin Groups" which gives more information.

Points:

20 points if present

Documentation:

[US]STIG V-36435 - Delegation of privileged accounts must be prohibited.
[MITRE]Mitre Att&ck - Mitigation - Active Directory Configuration

Details:

The detail can be found in Admin Groups

DNReason
CN=srv_certsvc,OU=Admin,DC=domain,DC=local Not a protected user
CN=Administrator,CN=Users,DC=domain,DC=local Not a protected user
CN=srv_na_col,OU=Admin,DC=domain,DC=local Not a protected user
CN=TestUser_DA,OU=Testing,DC=domain,DC=local Not a protected user
CN=TestUser_EA,OU=Testing,DC=domain,DC=local Not a protected user
CN=DA,CN=Users,DC=domain,DC=local Not a protected user
CN=AdminKerb1,OU=Admin,DC=domain,DC=local Not a protected user
CN=srv_AA,OU=Admin,DC=domain,DC=local Not a protected user
CN=srv_recover,OU=Admin,DC=domain,DC=local Not a protected user
CN=srv_sd,OU=Admin,DC=domain,DC=local Not a protected user
CN=srv_1secure,OU=Admin,DC=domain,DC=local Not a protected user
CN=ED_MERRILL,OU=People,DC=domain,DC=local Not a protected user
CN=TestUser_NEA,OU=Testing,DC=domain,DC=local Not a protected user
CN=NestedDA,OU=People,DC=domain,DC=local Not a protected user
CN=RUPERT_COMPTON,OU=ESM,OU=People,DC=domain,DC=local Not a protected user
+ 15 Point(s)

Check if admin accounts are vulnerable to the Kerberoast attack.

Rule ID:

P-Kerberoasting

Description:

The purpose is to ensure that the password of admin accounts cannot be retrieved using the Kerberoast attack.

Technical explanation:

To access a service using Kerberos, a user requests a ticket (named TGS) to the DC specific to the service.
This ticket is encrypted using a derivative of the service password, but can be brute-forced to retrieve the original password.
Any account having the attribute SPN populated is considered as a service account.
Given that any user can request a ticket for a service account, these accounts can have their password retrieved.
In addition, services are known to have their password not changed at a regular basis and to use well-known words.

Please note that this program ignores service accounts that had their password changed in the last 40 days ago to support using password rotation as a mitigation.

Advised solution:

If the account is a service account, the service should be removed from the privileged group or have a process to change its password at a regular basis.
If the user is a person, the SPN attribute of the account should be removed.

Points:

5 points per discovery

Documentation:

https://adsecurity.org/?p=3466
[FR]ANSSI - Privileged accounts with SPN (vuln1_spn_priv)1
[MITRE]T1558.003 Steal or Forge Kerberos Tickets: Kerberoasting

Details:

The detail can be found in Admin Groups

UserGroupsSPNs
Administrator Administrators
Domain Administrators
Enterprise Administrators
Schema Administrators
http/administrator
TestUser_DA Administrators
Domain Administrators
Enterprise Administrators
Schema Administrators
http/tda123
http/tda11
cifs/tda1
http/tda111
TestUser_EA Administrators
Domain Administrators
Enterprise Administrators
Schema Administrators
http/
http/tea4.domain.local
http/tea3
http/tea2
http/tea1
+ 15 Point(s)

Ensure that GPO items cannot be modified by any user

Rule ID:

P-DelegationGPOData

Description:

The purpose is to ensure that standard users cannot modify GPO

Technical explanation:

When the group Authenticated Users, Everyone or any similar groups have permission to modify a GPO, it can be abused to take control of the accounts where this GPO applies. It can potentially lead to the compromise of the domain

Advised solution:

Edit the Access Control List (ACL) of the GPO object or the directory where the items is located. Then remove any write permission given to the group.

Points:

15 points per discovery

Documentation:

[FR]ANSSI - Recommandations de sécurité relatives à Active Directory - R18 [subsubsection.3.3.2]
[US]STIG V-2370 - The access control permissions for the directory service site group policy must be configured to use the required access permissions.
[MITRE]Mitre Att&ck - Mitigation - Active Directory Configuration

Details:
GPOItemAccountRight
NTLM Block \\DC2.domain.local\sysvol\domain.local\Policies\{E018745D-AF45-473D-B5F2-31169FA435C2} Authenticated Users FullControl
+ 15 Point(s)

Check if Service Accounts (aka accounts with never expiring password) are domain administrators

Rule ID:

P-ServiceDomainAdmin

Description:

The purpose is to check for accounts with non-expiring passwords in the "Domain Administrator" group

Technical explanation:

PingCastle is checking accounts with never expiring password, that are mostly used as service accounts.
"Service Accounts" can imply a high security risk as their password are stored in clear text in the LSA database, which can then be easily exploited using Mimikatz or Cain&Abel for instance. In addition, their passwords don't change and can be used in Kerberoast attacks.

Advised solution:

Accounts with never expiring passwords are mostly service accounts.
To mitigate the security risk, it is strongly advised to lower the privileges of the "Service Accounts", meaning that they should be removed from the "Domain Administrator" group, while ensuring that the password of each and every "Service Account" is longer than 20 characters

Points:

15 points if the occurence is greater than or equals than 2

Documentation:

[US]STIG V-36432 - Membership to the Domain Admins group must be restricted to accounts used only to manage the Active Directory domain and domain controllers.
[FR]ANSSI - Recommandations de sécurité relatives à Active Directory - R11 [subsection.2.5]
[FR]ANSSI - Privileged accounts with never-expiring passwords (vuln1_dont_expire_priv)1
[MITRE]Mitre Att&ck - Mitigation - Privileged Account Management
[MITRE]T1003.004 OS Credential Dumping: LSA Secrets

Details:

The detail can be found in Admin Groups

DN
CN=srv_AA,OU=Admin,DC=domain,DC=local
CN=srv_recover,OU=Admin,DC=domain,DC=local
CN=srv_na_col,OU=Admin,DC=domain,DC=local
CN=srv_sd,OU=Admin,DC=domain,DC=local
CN=srv_1secure,OU=Admin,DC=domain,DC=local
CN=TestUser_DA,OU=Testing,DC=domain,DC=local
CN=TestUser_EA,OU=Testing,DC=domain,DC=local
CN=DA,CN=Users,DC=domain,DC=local
CN=NestedDA,OU=People,DC=domain,DC=local
+ 10 Point(s)

Ensure that custom Display Specifiers are stored in SYSVOL

Rule ID:

P-DisplaySpecifier

Description:

The purpose is to ensure that scripts used for the customization of admin UI are stored safely

Technical explanation:

DisplaySpecifier are Active Directory objects stored in the DisplaySpecifier container of the Configuration naming context.
They are used to customize the user interface.
Specifically the attribute adminContextMenu is used to customize administration actions, where COM objects or scripts can be called.
If the script is stored outside the SYSVOL directory, it can be used to execute custom actions and it is run under the administrator context.

Advised solution:

The scripts identified by this rule should be moved to the SYSVOL and properly secured.

Points:

10 points if present

Documentation:

https://www.semperis.com/blog/active-directory-security-abusing-display-specifiers/
https://learn.microsoft.com/en-us/windows/win32/ad/display-specifiers
[FR]ANSSI - Dangerous Display Specifiers (vuln1_display_specifier)1
[MITRE]T1569 System Services

Details:
DNPathChanged
CN=domainDNS-Display,CN=407,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=407,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=414,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=414,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=404,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=404,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=40E,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=40E,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=419,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=419,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=408,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=408,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=413,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=413,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=409,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=409,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=410,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=410,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=41D,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=41D,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=C0A,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=C0A,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=415,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=415,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=405,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=405,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=411,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=411,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=41F,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=41F,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=40B,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=40B,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=416,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=416,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=406,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=406,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=412,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=412,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=804,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=804,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=40C,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=40C,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=816,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15010,&PingCastle - Run Scan,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_RunScan.bat 2026-01-06 23:04:04Z
CN=domainDNS-Display,CN=816,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=local 15000,&PingCastle - View Report,\\Development2026.domain.local\PingCastle_ADContextMenu$\Scripts\PingCastle_ViewReport.bat 2026-01-06 23:04:04Z
+ 10 Point(s)

Avoid unexpected schema modifications which could result in domain rebuild

Rule ID:

P-SchemaAdmin

Description:

The purpose is to ensure that no account can make unexpected modifications to the schema

Technical explanation:

The group "Schema Admins" is used to give permissions to alter the schema. Once a modification is performed on the schema such as new objects, it cannot be undone. This can result in a rebuild of the domain. The best practice is to have this group empty and to add an administrator when a schema update is required, then remove this group membership.

Advised solution:

Remove the accounts or groups belonging to the "schema administrators" group.

Points:

10 points if present

Documentation:

[US]STIG V-72835 - Membership to the Schema Admins group must be limited
[FR]ANSSI - Recommandations de sécurité relatives à Active Directory - R13 [subsection.3.2]
[MITRE]Mitre Att&ck - Mitigation - Privileged Account Management

Details:

The detail can be found in Admin Groups

+ 10 Point(s)

Ensure that no accounts are subject to unconstrained delegation

Rule ID:

P-UnconstrainedDelegation

Description:

This rule identifies accounts configured with Kerberos unconstrained delegation, a high-risk setting that allows a compromised service to impersonate any domain user and potentially lead to full domain compromise.

Technical explanation:

Kerberos unconstrained delegation allows a service to reuse a user’s Ticket Granting Ticket (TGT) to authenticate to any service in the domain. If the delegated account is compromised, cached TGTs can be extracted and used to impersonate any authenticating user.
If a privileged account or a Domain Controller authenticates to such a service, potentially via forced authentication techniques, the attacker can escalate privileges and compromise the entire domain. Disabling the account does not remove this risk, as delegation settings persist and become active again if the account is re-enabled.

Advised solution:

Kerberos unconstrained delegation should be removed wherever it is configured. If delegation is required, it must be replaced with Kerberos constrained delegation.

Step 1: Remove Unconstrained Delegation
Remove the ability for the account to delegate credentials to any service.

Computer accounts
Set-ADComputer -Identity -TrustedForDelegation $false

User accounts
Set-ADUser -Identity -TrustedForDelegation $false

Step 2: Configure Constrained Delegation (Only If Required)

If an application requires delegation:
1. Open Active Directory Users and Computers
2. Open the account properties
3. Go to the Delegation tab
4. Select “Trust this computer for delegation to specified services only”
5. Select “Use Kerberos only”
6. Add only the specific services that are required for the application

Do not enable delegation if it is not strictly necessary.

Points:

5 points per discovery

Documentation:

https://learn.microsoft.com/en-us/archive/blogs/389thoughts/get-rid-of-accounts-that-use-kerberos-unconstrained-delegation
https://adsecurity.org/?p=1667
[FR]ANSSI - Recommandations de sécurité relatives à Active Directory - R18 [subsubsection.3.3.2]
[FR]ANSSI - Unconstrained authentication delegation (vuln2_delegation_t4d)2
[MITRE]T1187 Forced Authentication
[MITRE]Mitre Att&ck - Mitigation - Active Directory Configuration

Details:

The detail can be found in User information and Computer information

DNName
CN=kerbdeleg1,OU=Admin,DC=domain,DC=local kerbdeleg1
CN=kerbdeleg3,OU=Admin,DC=domain,DC=local kerbdeleg3
+ 10 Point(s)

Check if all privileged accounts are in the special group Protected Users.

Rule ID:

P-ProtectedUsers

Description:

The purpose is to ensure that all privileged accounts are in the Protected User security group

Technical explanation:

The Protected User group is a special security group which automatically applies protections to minimize credential exposure. Starting with Windows 8.1. Older Operating System must be updated to take this protection in account such as the Windows 7 KB2871997 patch.
For admins, it:
- Disables NTLM authentication
- Reduces Kerberos ticket lifetime
- Mandates strong encryption algorithms, such as AES
- Prevents password caching on workstations
- Prevents any type of Kerberos delegation

Please also note that a few links (see below) recommends that at least one account is kept outside of the group Protected Users in case there is a permission problem.
That's why this rule is not triggered if only one account is not protected.

Advised solution:

After having reviewed the potential impact on adding users to this group, add the missing privileged accounts to this group.

Points:

10 points if the occurence is greater than or equals than 2

Documentation:

https://learn.microsoft.com/en-us/windows-server/security/credentials-protection-and-management/protected-users-security-group
https://blog.netwrix.com/2015/02/20/add-sensitive-user-accounts-to-active-directory-protected-users-group/
https://dirteam.com/sander/2014/11/25/ten-things-you-need-to-be-aware-of-before-using-the-protected-users-group/
https://blog.andreas-schreiner.de/2018/09/07/active-directory-sicherheit-teil-1-privilegierte-benutzer/
[US]STIG V-78131 - Accounts with domain level administrative privileges must be members of the Protected Users group in domains with a domain functional level of Windows 2012 R2 or higher.
[FR]ANSSI CERTFR-2017-ALE-012
[FR]ANSSI - Privileged accounts outside of the Protected Users group (vuln3_protected_users)3
[MITRE]Mitre Att&ck - Mitigation - Privileged Process Integrity

Details:

The detail can be found in Admin Groups

User
srv_certsvc
Administrator
srv_na_col
TestUser_DA
TestUser_EA
DA
AdminKerb1
srv_AA
srv_recover
srv_sd
srv_1secure
ED_MERRILL
TestUser_NEA
NestedDA
RUPERT_COMPTON
+ 5 Point(s)

Check if privileged users have been revealed on RODC

Rule ID:

P-RODCAdminRevealed

Description:

The purpose is to check if privileged users have already been revealed

Technical explanation:

On Active Directory, all users revealed to a RODC are tracked by an attribute set on the computer object of the RODC named msDS-RevealedUsers.
The program checks on the list of revealed users if one of them is known as a privileged user.
Indeed, the RODC is caching the authentication secrets related of this user, which can then be used to impersonate it.
In addition to that, RODC are placed in general on more riskier environment.

Advised solution:

The admin account should have its secrets change (a password reset) and be sure that the account will not be revealed anymore.

Points:

5 points per discovery

Documentation:

https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/8dfc81be-7461-48f2-8caf-07402bccb0ea
[FR]ANSSI - Privileged users revealed on RODC (vuln2_rodc_priv_revealed)2
[MITRE]Mitre Att&ck - Mitigation - Active Directory Configuration

Details:

The detail can be found in Domain controllers

Domain controllerUser
RODC CN=DA,CN=Users,DC=domain,DC=local
+ 5 Point(s)

Check the Allowed RODC Password Replication Group group

Rule ID:

P-RODCAllowedGroup

Description:

The purpose is to ensure that the Allowed RODC Password Replication Group group is empty.

Technical explanation:

Accounts belonging to the Allowed RODC Password Replication Group group have their password hashes revealed on all RODCs.

Advised solution:

This group should be emptied, and dedicated groups should only be added to the Password Replication Policy of each relevant RODC.

Points:

5 points if present

Documentation:

[FR]ANSSI - Dangerous configuration of replication groups for read-only domain controllers (RODCs) (allow) (vuln3_rodc_allowed_group)3
[MITRE]Mitre Att&ck - Mitigation - Active Directory Configuration

Details:
Member
CN=TestUser_DA,OU=Testing,DC=domain,DC=local
CN=Admins,OU=Admin,DC=domain,DC=local
CN=DA,CN=Users,DC=domain,DC=local
+ 5 Point(s)

Check if the protection against revealing privileged group is active

Rule ID:

P-RODCNeverReveal

Description:

The purpose is to ensure that the protection against revealing privileged group is active

Technical explanation:

In addition to the group Denied RODC Password Replication Group there is a custom setting set for RODC in an attribute named msDS-NeverRevealGroup.
This rule checks the current value against the default one.

Advised solution:

Check the value of the attribute msDS-NeverRevealGroup and the presence of the following expected groups:
- Administrators;
- Server Operators;
- Account Operators;
- Backup Operators;
- Denied RODC Password Replication Group

This can be managed in the Password Replication Policy tab of the computer object in the Active Directory Users and Computers console.

Points:

5 points if present

Documentation:

https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/8dfc81be-7461-48f2-8caf-07402bccb0ea
[FR]ANSSI - Dangerous configuration of read-only domain controllers (RODC) (neverReveal) (vuln3_rodc_never_reveal)3
[MITRE]Mitre Att&ck - Mitigation - Active Directory Configuration

Details:

The detail can be found in Domain controllers

Domain controllerGroup
RODC Administrators
RODC Server Operators
RODC Account Operators
RODC Backup Operators
RODC Denied RODC Password Replication Group
+ 1 Point(s)

Check if there is a policy preventing administrators to connect to lower tier systems.

Rule ID:

P-LogonDenied

Description:

The purpose is to ensure that there is a tier isolation.

Technical explanation:

A way to collect an administrator credential is to take control of a workstation or server in the unsecured tiers and expect that an administrator will connect to it.
An attack such as credential theft or Kerberos delegation is then performed.
To reduce the impact of such compromise, the best practice is to isolate components (such as admins, DC) in tiers.
Typically, a domain admin should not be allowed to connect to any workstation or lower tier server but login only to perform highly privileged operations on tier 0 systems.

To check for this policy, PingCastle looks at all GPOs and checks, if there is a GPO denying logon (SeDenyRemoteInteractiveLogonRight, SeDenyInteractiveLogonRight) of admins (Domain Admins or Administrators) to a specific scope.

False positives can occurs for this rule:
* if the expected GPO is hidden due to ACL checks
* if the targeted group is not "checked" when saving the GPO. Indeed, the group will be saved as is without a conversion to its technical name and it will prohibit a match if there are groups internationalized, aka renamed given a specific language.

As a consequence, only one deny policy on one group will fulfill this requirements. The program also does not check if the GPO is applied on an Organizational Unit or a Container.
Also this rule is enforced only if there are more than 200 users and 200 computers.

Advised solution:

You should add a GPO to prohibit the logon of specific groups Domain Admins and Administrators.

The setting is located in Computer Policy -> Computer Configuration -> Windows Settings -> Security Settings -> Local Policies -> User Rights Assignment.
Then "Deny" logon locally and "Deny" logon through Remote Desktop Services.

Points:

1 points if present

Documentation:

https://learn.microsoft.com/en-us/windows-server/identity/ad-ds/plan/security-best-practices/appendix-f--securing-domain-admins-groups-in-active-directory
[MITRE]Mitre Att&ck - Mitigation - Privileged Account Management

Details:

The detail can be found in GPO Login

Informative rule

Check if OUs and Containers are protected from accidental deletion.

Rule ID:

P-UnprotectedOU

Description:

The purpose is to ensure that Organizational Units (OUs) and Containers in Active Directory are protected to prevent accidental deletion, which could lead to data loss and disruptions in the network infrastructure.

Technical explanation:

In Active Directory, Organizational Units can be protected from accidental deletion (reads: using the del key in the wrong place at the wrong time).
This way these objects cannot be deleted, unless the protection is removed. This Active Directory feature was first introduced in Windows Server 2008.

This protection consists of a Deny ACE added to the NTSecurityDescriptor attribute applied to Everyone with the flag set to Delete and DeleteTree.

Advised solution:

To safeguard against accidental deletions, it is essential to enable the "Protect object from accidental deletion" option for critical OUs and Containers.
When this option is enabled, it adds an additional layer of security, preventing unintended deletions.
To implement this protection:

* Open the Active Directory Users and Computers management console.
* Locate the OU or Container that requires protection.
* Right-click on the OU or Container, select "Properties."
* In the "Object" tab, check the "Protect object from accidental deletion" option.
* Click "Apply" and then "OK" to save the changes.

You can list unprotected OU using the PowerShell command:
Get-ADOrganizationalUnit -filter {name -like "*"} -Properties ProtectedFromAccidentalDeletion | format-table Name,ProtectedFromAccidentalDeletion
and protect them using the command:
Get-ADOrganizationalUnit -filter {name -like "*"} -Properties ProtectedFromAccidentalDeletion | where {$_.ProtectedFromAccidentalDeletion -eq $false} | Set-ADOrganizationalUnit -ProtectedFromAccidentalDeletion $true

Note: only 10 will be listed below. Checkout the Delegations section for the complete list.

Points:

Informative rule (0 point)

Documentation:

https://dirteam.com/sander/2011/07/13/preventing-ous-and-containers-from-accidental-deletion/
[MITRE]Mitre Att&ck - Mitigation - Active Directory Configuration

Details:

The detail can be found in Delegations

OU
OU=Domain Controllers,DC=domain,DC=local
OU=GPOTest,DC=domain,DC=local
OU=Systems,DC=domain,DC=local
OU=Clients,OU=Systems,DC=domain,DC=local
OU=Servers,OU=Systems,DC=domain,DC=local
050100

Trusts : 61 /100

It is about links between two Active Directories

+ 50 Point(s)

Check for local backdoor stored in SID History

Rule ID:

T-SIDHistorySameDomain

Description:

The purpose is to ensure that accounts are not linked for more privileged accounts in the same domain

Technical explanation:

SID History is an attribute used in migration to link with a former account. It is not possible to have an account linked with an account belonging to the same domain. This can be analyzed by comparing the domain part of the SID History with the domain SID.

Advised solution:

It is not possible to have this occurrence except if a user from domain A has been migrated to domain B and then migrated again to domain A. This should be strongly investigated as it may be linked to a compromise of the domain.

To remove the SIDHistory from a user account, run:
Get-ADUser USERNAME -properties sidhistory | foreach {Set-ADUser $_ -remove @{sidhistory=$_.sidhistory.value}}
For a group, run:
Get-ADGroup GROUPNAME -properties sidhistory | foreach {Set-ADGroup $_ -remove @{sidhistory=$_.sidhistory.value}}
For all users in a OU:
Get-ADUser -SearchBase "OU=Accounts,DC=mydomain,DC=com" -Filter {sidhistory -like '*'} -properties sidhistory | foreach {Set-ADUser $_ -remove @{sidhistory=$_.sidhistory.value}}

Points:

50 points if present

Documentation:

[FR]ANSSI - Recommandations de sécurité relatives à Active Directory - R15 [paragraph.3.3.1.5]
[FR]ANSSI - Accounts or groups with SID history set (vuln3_sidhistory_present)3
[MITRE]Mitre Att&ck - Mitigation - Active Directory Configuration
[MITRE]T1134.005 Access Token Manipulation: SID-History Injection

Details:

The SIDHistory detail can be found in User information and Computer information and a quick summary in SID History

+ 10 Point(s)

Check if dangerous SID are stored in the SIDHistory attribute.

Rule ID:

T-SIDHistoryDangerous

Description:

The purpose is to ensure that the dangerous SID are not stored in the SIDHistory attribute.

Technical explanation:

SID History is an attribute used in migration to link with a former account.
This rule checks for SID not coming from a former domain (such as SYSTEM) or from a former domain but having a RID (the last part of the SID) lower than 1000.
Indeed, native privileged accounts have a SID lower than 1000.
A list of Well Known SID is referenced in the documentation below.

Advised solution:


Identify the account, computer or group having these dangerous SID set in SID History, then clean it up by editing directly the SIDHistory attribute of the underlying AD object.

To remove the SIDHistory from a user account, run:
Get-ADUser USERNAME -properties sidhistory | foreach {Set-ADUser $_ -remove @{sidhistory=$_.sidhistory.value}}
For a group, run:
Get-ADGroup GROUPNAME -properties sidhistory | foreach {Set-ADGroup $_ -remove @{sidhistory=$_.sidhistory.value}}
For all users in a OU:
Get-ADUser -SearchBase "OU=Accounts,DC=mydomain,DC=com" -Filter {sidhistory -like '*'} -properties sidhistory | foreach {Set-ADUser $_ -remove @{sidhistory=$_.sidhistory.value}}

Points:

10 points if present

Documentation:

https://learn.microsoft.com/en-us/windows-server/identity/ad-ds/manage/understand-security-identifiers
[FR]ANSSI - Recommandations de sécurité relatives à Active Directory - R15 [paragraph.3.3.1.5]
[FR]ANSSI - Accounts or groups with unexpected SID history (vuln2_sidhistory_dangerous)2
[MITRE]Mitre Att&ck - Mitigation - Active Directory Configuration
[MITRE]T1134.005 Access Token Manipulation: SID-History Injection

Details:

The SIDHistory detail can be found in User information and Computer information and a quick summary in SID History

Domain
domain.local
+ 1 Point(s)

Check if AES is enabled on trusts

Rule ID:

T-AlgsAES

Description:

The purpose is to check if AES can be used with Kerberos on trusts

Technical explanation:

By default, RC4 is used as the signature algorithm on Kerberos tickets.
If AES is enabled on a domain and AES is not enabled on trust, AES tickets will not be usable on the trust. The Kerberos tickets sent to the trust will fail or the trusted domain will fallback to NTLM.

The encryption algorithms allowed for a trust are stored in an attribute named msDS-SupportedEncryptionTypes.
If this attribute is not set (or has a value of zero), RC4 will be applied by default.
Else, it defines the algorithm to use for Kerberos signature.

Advised solution:

Enable AES on the domain.

Beware: there is a checkbox in the trust properties named "The other domain supports Kerberos AES Encryption".
If you enable this setting, AES will be enabled but RC4 will also be disabled.

The recommended way is to enable both RC4 and AES as a transition. It can be done by running the command:
ksetup /setenctypeattr mytrust.com RC4-HMAC-MD5 AES128-CTS-HMAC-SHA1-96 AES256-CTS-HMAC-SHA1-96

This way, the attribute msDS-SupportedEncryptionTypes of the trust will be modified to support both RC4 and AES.

Points:

1 points if present

Documentation:

https://techcommunity.microsoft.com/t5/itops-talk-blog/tough-questions-answered-can-i-disable-rc4-etype-for-kerberos-on/ba-p/382718
https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-kile/6cfc7b50-11ed-4b4d-846d-6f08f0812919
https://techcommunity.microsoft.com/t5/core-infrastructure-and-security/decrypting-the-selection-of-supported-kerberos-encryption-types/ba-p/1628797
[MITRE]Mitre Att&ck - Mitigation - Active Directory Configuration

Details:
TrustReason
child.domain.local Not Configured
050100

Anomalies : 100 /100

It is about specific security control points

+ 15 Point(s)

Critical DNS zones allow anonymous updates

Rule ID:

A-DnsZoneUpdate1

Description:

Critical DNS zones (domain zone and RootDNSServers) are configured to accept anonymous updates, allowing any device to modify DNS records without authentication.

Technical explanation:

Active Directory-integrated DNS zones can be configured to accept three types of updates: no updates (static), secure updates only (authenticated), or nonsecure and secure updates. This rule examines your most critical DNS zones to determine if they allow nonsecure updates.

The zones checked by this rule are the foundation of Active Directory operations: your primary domain DNS zone (e.g., contoso.com), the RootDNSServers zone, and _msdcs zones. The _msdcs zones are particularly critical as they contain the global catalog and domain controller locator records used by the entire Active Directory forest for authentication and replication.

When nonsecure updates are enabled (ZONE_UPDATE_UNSECURE), any device on the network can create or modify DNS records without authentication. For these critical zones, this means an attacker could redirect domain controller lookups, hijack global catalog queries, or impersonate critical AD services. The impact extends beyond a single domain - compromising _msdcs affects forest-wide operations.

The rule searches across all DNS storage locations in Active Directory: the DomainDnsZones partition (replicated domain-wide), the ForestDnsZones partition (replicated forest-wide), and the legacy storage in the domain naming context. It automatically filters out replication conflicts (CNF objects) and in-progress replication objects to avoid false positives.

This rule (A-DnsZoneUpdate1) focuses on these critical infrastructure zones. Its companion rule (A-DnsZoneUpdate2) examines all other zones in your environment.

Advised solution:

To fix this vulnerability, configure the zone for secure-only updates:

GUI Method:
1. Open DNS Manager (dnsmgmt.msc)
2. Navigate to the affected zone
3. Right-click the zone → Properties → General tab
4. Change "Dynamic updates" from "Nonsecure and secure" to "Secure only"

PowerShell Method:

# Find all zones with insecure updates
Get-DnsServerZone | Where-Object {$_.DynamicUpdate -eq "NonsecureAndSecure"}

# Fix a specific zone
Set-DnsServerPrimaryZone -Name "contoso.com" -DynamicUpdate Secure -ComputerName DC01

# Fix all insecure zones
Get-DnsServerZone | Where-Object {$_.DynamicUpdate -eq "NonsecureAndSecure"} | ForEach-Object {
Set-DnsServerPrimaryZone -Name $_.ZoneName -DynamicUpdate Secure -ComputerName DC01
}


Command Line Method:

# Local server
dnscmd /Config <ZoneName> /AllowUpdate 2

# Remote server
dnscmd <ServerName> /Config <ZoneName> /AllowUpdate 2

# Example
dnscmd DC01 /Config contoso.com /AllowUpdate 2

Points:

15 points if present

Documentation:

https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-dnsp/f97756c9-3783-428b-9451-b376f877319a
https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/dnscmd
[FR]ANSSI - Misconfigured DNS zones (vuln1_dnszone_bad_prop)1
[MITRE]T1557 Man-in-the-Middle

Details:
ZoneDomainDNPartition
domain.local domain.local DC=domain.local,CN=MicrosoftDNS,DC=DomainDnsZones,DC=domain,DC=local DomainDnsZones
_msdcs.domain.local domain.local DC=_msdcs.domain.local,CN=MicrosoftDNS,DC=ForestDnsZones,DC=domain,DC=local ForestDnsZones
+ 15 Point(s)

Check for ESC1: Vulnerable Subject Control in Certificate Templates

Reduced confidence
Use privilege mode for accuracy 

Rule ID:

A-CertTempCustomSubject

Description:

This check verifies if certificate templates in Active Directory Certificate Services (AD CS) allow user-controlled subject information and meet other common criteria associated with the ESC1 vulnerability.

Technical explanation:

ESC1 is a vulnerability in Active Directory Certificate Services (AD CS) that occurs when certificate templates allow users to control the Subject Name as well as meet other criteria, such as:

  • User-Controlled Subject Name: Requesters can define the subject, enabling impersonation of any account in the domain.
  • Excessive Enrollment Permissions: Large groups such as Domain Users and Authenticated Users have enrollment rights on vulnerable templates as well as the certificate authority.
  • Authentication-based: Templates support Extended Key Usage (EKU) that allows the template to be used for Kerberos authentication.
  • No Approval Requirements: Certificates can be issued without requiring manager approval and no authorized signatures are required.

This misconfiguration can enable attackers to forge certificates, escalate privileges, and compromise the Active Directory environment.

Advised solution:

To mitigate ESC1, use one or more of the options below:

Option 1: Modify Certificate Template Settings in ADCS

  • Open Certificate Authority (certsrv.msc) on the CA server.
  • Right-click on Certificate Templates and select Manage.
  • Navigate to and right-click the vulnerable template and select Properties.
  • Go to the Subject Name tab:
    • Ensure "Supply in the request" is unchecked.
  • Click OK to save changes.

Option 2: Restrict Enrollment Permissions
Note: Restricting enrollment permissions mitigates some of the risk but all users with enrollment permissions can still impersonate any account. As such, accounts with enrollment permissions for these certificates should be closely monitored and not be on non-privileged accounts.

  • Open Certificate Authority (certsrv.msc) on the CA server.
  • Right-click on Certificate Templates and select Manage.
  • Navigate to and right-click the vulnerable template and select Properties.
  • Go to the Security tab:
    • Remove well-known low-privileged groups such as Authenticated Users, Everyone from enrollment permissions.
    • Assign only the required accounts and groups permission to request these certificates.
  • Click OK to save changes.

Option 3: Remove the CA Certificate from NTAuthCertificates
Note: Only do this if you are sure you do not use and do not want to use certificate-based authentication.

NTAuthCertificates CaCertificate attribute stores the certificate authority certificates that are authorized to be used for authentication. Removing the Certificate Authorities certificate from here stops all authentication-based attacks.
If you're not using certificate-based authentication for this CA:
  • Open Active Directory Sites and Services (dssite.msc).
  • From the top menu, click View and select Show Services Node.
  • Navigate to Services > Public Key Services > NTAuthCertificates.
  • Right-click the CACertificate attribute and select Properties.
    • Review the listed certificates.
    • Remove the entry for the affected CA by selecting it and clicking Remove.
  • Click OK to apply the changes.

Points:

15 points if present

Documentation:

Certified-PreOwned https://specterops.io/wp-content/uploads/sites/3/2022/06/Certified_Pre-Owned.pdf
[FR]ANSSI - Dangerous enrollment permission on authentication certificate templates (vuln1_adcs_template_auth_enroll_with_name)1
[MITRE]T1558 Steal or Forge Kerberos Tickets

Details:

The detail can be found in Certificate Templates

NameCAEnrollmentPrincipalsLastModified
ESC1  DC.domain.local\Enterprise CA  Authenticated Users 21/07/2025 11:00:16
+ 15 Point(s)

Check for ESC2: Vulnerable EKU Configurations in Certificate Templates

Reduced confidence
Use privilege mode for accuracy 

Rule ID:

A-CertTempAnyPurpose

Description:

This check verifies whether certificate templates in Active Directory Certificate Services (AD CS) have the "Any Purpose" Enhanced Key Usage (EKU) or lack an EKU entirely, potentially enabling privilege escalation or misuse.

Technical explanation:

Enhanced Key Usage (EKU) defines the intended purpose of a certificate. ESC2 arises when the following EKUs are defined along with other vulnerable criteria that enable low privileged users to request the certificate with no oversight.

  • "Any Purpose" EKU is enabled: This allows the certificate to be used for any purpose, including unintended ones such as authentication or code signing.
  • No EKU defined: Certificates without an EKU are treated as having "Any Purpose," making them similarly vulnerable.

ESC2 is detected when all the following criteria are true:

  • The certificate template has a vulnerable EKU as described above
  • The certificate template allows excessive enrollment permissions
  • The CA allows excessive enrollment permissions
  • The certificate template does not require manager approval
  • The certificate template does not have any authorised signatures

These configurations can be exploited by attackers to obtain certificates that enable unauthorized access, impersonate users, or escalate privileges within the domain.

Advised solution:

There are multiple ways in which remediation of this issue can be completed. It involves restricting the template in one or more ways using the instructions below.

  1. Open Certificate Authority (certsrv.msc) and connect to the CA
  2. Navigate to Certificate Templates, right-click and select Manage
  3. Right-click the vulnerable template, and select Properties

Option 1 - Restrict Enrolment Permissions
Note: This option is the best option to reduce the attack surface.

  • Go to the Security tab
  • Remove excessive enrolment permissions (e.g., Domain Users or Authenticated Users)
  • Grant permissions only to necessary accounts/groups

Option 2 - Implement Management Approval
Note: This option will require manual approval for each certificate by a PKI Admin.

  • Go to the Issuance Requirements tab
  • Tick the “CA certificate manager approval” option

Option 3 – Restrict the Certificate to Specific Type
Note: This option can be completed if the certificate is of the incorrect type. For example, it only needs Server Authentication rather than Any Purpose.

  • Go to the Extensions tab
  • Click on Application Policies and select Edit
  • Add the required application policies
  • Remove the Any Purpose usage if present
  • Click OK

Click OK to save the changes to the template

Points:

15 points if present

Documentation:

https://posts.specterops.io/certified-pre-owned-d95910965cd2
https://www.riskinsight-wavestone.com/en/2021/06/microsoft-adcs-abusing-pki-in-active-directory-environment/
[FR]ANSSI - Dangerous enrollment permission on authentication certificate templates (vuln1_adcs_template_auth_enroll_with_name)1
[MITRE]T1558 Steal or Forge Kerberos Tickets

Details:

The detail can be found in Certificate Templates

NameCAEnrollmentPrincipalsLastModified
ESC2  DC.domain.local\Enterprise CA  Authenticated Users 11/09/2025 10:57:01
+ 15 Point(s)

Check the permission of agent certificate templates

Rule ID:

A-CertTempAgent

Description:

The purpose of this rule is to ensure that there is no agent certificate that can be requested by anyone

Technical explanation:

An Agent certificate is a special certificate used to request certificates on behalf of other users.
A template has been detected with the agent EKU and that can be enrolled by a large number of users.

Advised solution:

Review the permissions that allow a wide enrollment of this certificate template

Points:

15 points if present

Documentation:

https://posts.specterops.io/certified-pre-owned-d95910965cd2
https://www.riskinsight-wavestone.com/en/2021/06/microsoft-adcs-abusing-pki-in-active-directory-environment/
[FR]ANSSI - Dangerous enrollment permission on authentication certificate templates (vuln1_adcs_template_auth_enroll_with_name)1
[MITRE]T1558 Steal or Forge Kerberos Tickets

Details:

The detail can be found in Certificate Templates

Name
ESC3-Enrollment
+ 15 Point(s)

Check for the last backup date according to Microsoft standard

Rule ID:

A-BackupMetadata

Description:

The purpose is to check if the backups are actually up to date in case they are needed. The alert can be triggered when a domain is backed up using non-recommended methods

Technical explanation:

A verification is done on the backups, ensuring that the backup is performed according to Microsoft standards. Indeed, at each backup the DIT Database Partition Backup Signature is updated. If for any reasons, backups are needed to perform a rollback (rebuild a domain) or to track past changes, the backups will actually be up to date. This check is equivalent to a REPADMIN /showbackup *.

Advised solution:

Plan AD backups based on Microsoft standards. These standards depend on the Operating System. For example with the wbadmin utility: wbadmin start systemstatebackup -backuptarget:d:

Points:

15 points if the occurence is greater than or equals than 7

Documentation:

https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/jj130668(v=ws.10)
[US]STIG V-25385 - Active Directory data must be backed up daily for systems with a Risk Management Framework categorization for Availability of moderate or high. Systems with a categorization of low must be backed up weekly.
[MITRE]Mitre Att&ck - Mitigation - Data Backup

Details:

The detail can be found in Backup

+ 10 Point(s)

Ensure that the Print Spooler service cannot be abused to get the DC credentials

Rule ID:

A-DC-Spooler

Description:

The purpose is to ensure that credentials cannot be extracted from the DC via its Print Spooler service

Technical explanation:

When there's an account with unconstrained delegation configured (which is fairly common) and the Print Spooler service running on a computer, you can get that computers credentials sent to the system with unconstrained delegation as a user. With a domain controller, the TGT of the DC can be extracted allowing an attacker to reuse it with a DCSync attack and obtain all user hashes and impersonate them.

Advised solution:

The Print Spooler service should be deactivated on domain controllers. Please note as a consequence that the Printer Pruning functionality (rarely used) will be unavailable.

Points:

10 points if present

Documentation:

https://adsecurity.org/?p=4056
https://www.slideshare.net/harmj0y/derbycon-the-unintended-risks-of-trusting-active-directory
[MITRE]T1187 Forced Authentication

Details:

The detail can be found in Domain controllers

Domain controller
DC
DC2
RODC
+ 10 Point(s)

Check for short password length in password policy

Rule ID:

A-MinPwdLen

Description:

The purpose is to verify if the password policy of the domain enforces users to have at least 8 characters in their password

Technical explanation:

A check is performed to identify if the GPO regarding password policy allows less than 8 characters password. Short passwords represent a high risk because they can fairly easily be brute-forced or password sprayed. Most CERT and agencies advise for at least 8 characters (and often this number goes up to 12)

Advised solution:

To solve the issue, the best way is to either remove the GPO enabling short password, or to modify it in order to increase the password length to at least 8 characters

Points:

10 points if present

Documentation:

https://www.microsoft.com/en-us/research/publication/password-guidance/
[FR]ANSSI - Privileged group members with weak password policy (vuln2_privileged_members_password)2
[MITRE]T1201 Password Policy Discovery

Details:

The detail can be found in Password policies

GPO
Default Domain Policy
+ 10 Point(s)

Check if there is the expected audit policy on domain controllers.

Rule ID:

A-AuditDC

Description:

The purpose is to ensure that the audit policy on domain controllers collects the right set of events.

Technical explanation:

To detect and mitigate an attack, the right set of events need to be collected.
The audit policy is a compromise between too much and too few events to collect.
To solve this problem, the suggested audit policy from adsecurity.org is checked against the audit policy in place.

Advised solution:

Identify the Audit settings to apply and fix them.
Be aware that there are two places for audit settings.
For "Simple" audit configuration:
in Computer Configuration -> Policies -> Windows Settings -> Security Settings -> Local Policies -> Audit Policies
For "Advanced" audit configuration:
in Computer Configuration -> Policies -> Windows Settings -> Security Settings -> Advanced Audit Policy Configuration
Also be sure that the audit GPO is applied to all domain controllers, as the underlying object may be in a OU where the GPO is not applied.

Points:

10 points if present

Documentation:

https://adsecurity.org/?p=3299
https://adsecurity.org/?p=3377
[MITRE]Mitre Att&ck - Mitigation - Audit

Details:

The detail can be found in Audit settings
The table below shows the settings that were not found as configured in a GPO for a given domain controller.

TypeAuditProblemRationaleDomain controller
Advanced Policy Change / Authentication Policy Change No GPO check for audit success Collect events 4713, 4716, 4739, 4867, to track trust modifications DC
Advanced Detailed Tracking / DPAPI Activity No GPO check for audit success Collect event 4692 to track the export of DPAPI backup key DC
Advanced Detailed Tracking / Process Creation No GPO check for audit success Collect event 4688 to get the history of executed programs DC
Advanced System / Security System Extension No GPO check for audit success Collect events 4610, 4697 to track lsass security packages and services DC
Advanced Privilege Use / Sensitive Privilege Use No GPO check for audit success Collect events 4672, 4673, 4674 for privileges tracking such as the debug one DC
Advanced Logon/Logoff / Special Logon No GPO check for audit success Collect event 4964 for special group attributed at logon DC
Advanced Policy Change / Authentication Policy Change No GPO check for audit success Collect events 4713, 4716, 4739, 4867, to track trust modifications DC2
Advanced Detailed Tracking / DPAPI Activity No GPO check for audit success Collect event 4692 to track the export of DPAPI backup key DC2
Advanced Detailed Tracking / Process Creation No GPO check for audit success Collect event 4688 to get the history of executed programs DC2
Advanced System / Security System Extension No GPO check for audit success Collect events 4610, 4697 to track lsass security packages and services DC2
Advanced Privilege Use / Sensitive Privilege Use No GPO check for audit success Collect events 4672, 4673, 4674 for privileges tracking such as the debug one DC2
Advanced Logon/Logoff / Special Logon No GPO check for audit success Collect event 4964 for special group attributed at logon DC2
Advanced Policy Change / Authentication Policy Change No GPO check for audit success Collect events 4713, 4716, 4739, 4867, to track trust modifications RODC
Advanced Detailed Tracking / DPAPI Activity No GPO check for audit success Collect event 4692 to track the export of DPAPI backup key RODC
Advanced Detailed Tracking / Process Creation No GPO check for audit success Collect event 4688 to get the history of executed programs RODC
Advanced System / Security System Extension No GPO check for audit success Collect events 4610, 4697 to track lsass security packages and services RODC
Advanced Privilege Use / Sensitive Privilege Use No GPO check for audit success Collect events 4672, 4673, 4674 for privileges tracking such as the debug one RODC
Advanced Logon/Logoff / Special Logon No GPO check for audit success Collect event 4964 for special group attributed at logon RODC
+ 10 Point(s)

RPC interfaces potentially vulnerable to Coerce attacks

Rule ID:

A-DC-Coerce

Description:

The objective is to assess the vulnerability of the Domain Controller (DC) to Coerce attacks.

Technical explanation:

Coerce attacks are a category of attacks which aims to forcing domain controllers to authenticate to a device controlled by the attacker for the purpose to relay this authentication to gain privileges.
This category of attacks is usually mitigated by applying patch (PetitPotam), disabling services (Spooler), added RPC filter (EDR or firewall) or ensuring integrity (SMB integrity).
Because each of these protections can be individually bypassed (NTLM integrity is disabled on LDAPS), the aim of this scan is to detect proactively if vulnerable RPC services are exposed.

PingCastle estimates that Coerceable interfaces are protected if:
- the GPO "Network security: Restrict NTLM: Outgoing NTLM traffic to remote servers" is applied through a GPO to DC
- or if RPC interfaces are not reachable

Because these interfaces need to be tested from a computer controlled by the attacker, PingCastle cannot do this test with reliability.
Instead, it sends a malformed RPC packet to try to trigger an error such as "Permission denied" or "RPC interface unavailable".
If the error RPC_X_BAD_STUB_DATA (1783) is triggered, PingCastle considers that the interface is available.
A report that a vulnerable interface is online may not be accurate because its full exploitation is not tested.

Also to avoid EDR alerts or to not perform the scan, you can run PingCastle with the flag --skip-dc-rpc

Advised solution:

To effectively mitigate the vulnerability, consider one of the following approaches:

1. Apply Group Policy Object (GPO) - "Network security: Restrict NTLM: Outgoing NTLM traffic to remote servers":
Apply this GPO specifically to the Organizational Unit (OU) "Domain Controllers".
Caution: Enabling this GPO might impact services dependent on NTLM such as files copy Backups.
Consider setting the GPO in "Audit mode" initially to identify and assess the impact on affected services.

2. Enable RPC Filters in Windows Firewall:
Configure Windows Firewall to block specific Interface IDs associated with vulnerable RPC interfaces.
This is done using the netsh command. See the documentation links for more information.
Exercise caution: This method filters the entire interface, not specific Operation Numbers (OpNum).
Adjust exceptions for necessary services to ensure critical functionality.

3. Implement External Filters (e.g., EDR, Firewalls):
Leverage third-party solutions, such as Endpoint Detection and Response (EDR) tools or firewalls.
Notable project: rpcfirewall https://github.com/zeronetworks/rpcfirewall, offering logical filtering at the OpNum level.
Be cautious of potential impact and ensure compatibility with existing infrastructure.

Points:

10 points if present

Documentation:

https://github.com/p0dalirius/Coercer
https://learn.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/network-security-restrict-ntlm-outgoing-ntlm-traffic-to-remote-servers
https://blog.nviso.eu/2023/12/08/rpc-or-not-here-we-log-preventing-exploitation-and-abuse-with-rpc-firewall/
[MITRE]T1187 Forced Authentication

Details:

The detail can be found in Domain controllers

DCNameIPInterfaceFunctionOpNum
DC 10.0.0.10 12345678-1234-abcd-ef00-0123456789ab RpcRemoteFindFirstPrinterChangeNotification 62
DC 10.0.0.10 12345678-1234-abcd-ef00-0123456789ab RpcRemoteFindFirstPrinterChangeNotificationEx 65
DC 10.0.1.10 12345678-1234-abcd-ef00-0123456789ab RpcRemoteFindFirstPrinterChangeNotification 62
DC 10.0.1.10 12345678-1234-abcd-ef00-0123456789ab RpcRemoteFindFirstPrinterChangeNotificationEx 65
DC 192.168.1.145 12345678-1234-abcd-ef00-0123456789ab RpcRemoteFindFirstPrinterChangeNotification 62
DC 192.168.1.145 12345678-1234-abcd-ef00-0123456789ab RpcRemoteFindFirstPrinterChangeNotificationEx 65
DC2 10.0.0.11 12345678-1234-abcd-ef00-0123456789ab RpcRemoteFindFirstPrinterChangeNotification 62
DC2 10.0.0.11 12345678-1234-abcd-ef00-0123456789ab RpcRemoteFindFirstPrinterChangeNotificationEx 65
RODC 10.0.0.56 12345678-1234-abcd-ef00-0123456789ab RpcRemoteFindFirstPrinterChangeNotification 62
RODC 10.0.0.56 12345678-1234-abcd-ef00-0123456789ab RpcRemoteFindFirstPrinterChangeNotificationEx 65
+ 5 Point(s)

Hardened Paths weakness

Rule ID:

A-HardenedPaths

Description:

The purpose is to ensure that there is no weakness related to hardened paths

Technical explanation:

Two vulnerabilities have been reported in 2015 (MS15-011 and MS15-014) which allows a domain takeover via GPO modifications done with a man-in-the-middle attack.
To mitigate these vulnerabilites, Microsoft has designed a workaround named "Hardened Paths". It forces connection settings to enforce Integrity, Mutual Authentication or Privacy.
By default if this policy is empty, if will enforce Integrity and Mutual Authentication on the SYSVOL or NETLOGON shares.
This rule checks if there have been any overwrite to disable this protection.

Advised solution:

You have to edit the Hardened Path section in the GPO.
This section is located in Computer Configuration/Policies/Administrative Templates/Network/Network Provider.
Check each value reported here and make sure that entries containing SYSVOL or NETLOGON have RequireIntegrity and RequireMutualAuthentication set to 1.
In addition to that, check entries having the pattern \\DCName\* and apply the same solution.

Points:

5 points if present

Documentation:


https://labs.withsecure.com/publications/how-to-own-any-windows-network-with-group-policy-hijacking-attacks
https://talubu.wordpress.com/2018/02/28/configuring-unc-hardened-access-through-group-policy/
https://adsecurity.org/?p=1405
https://support.microsoft.com/en-us/topic/ms15-011-vulnerability-in-group-policy-could-allow-remote-code-execution-february-10-2015-91b4bda2-945d-455b-ebbb-01d1ec191328
[US]STIG V-63577 - Hardened UNC Paths must be defined to require mutual authentication and integrity for at least the \\*\SYSVOL and \\*\NETLOGON shares.
[MITRE]T1557.001 Man-in-the-Middle: LLMNR/NBT-NS Poisoning and SMB Relay

Details:

The detail can be found in the Hardened Paths configuration section.

GPOKeyRequireIntegrityRequireMutualAuthenticationRequirePrivacy
No GPO Found NETLOGON Not Set Not Set Not Set
No GPO Found SYSVOL Not Set Not Set Not Set
+ 5 Point(s)

Check for GPO granting access to the domain without any account

Rule ID:

A-AnonymousAuthorizedGPO

Description:

The purpose is to identify domains having a GPO which allows access to the domain without any account

Technical explanation:

It is possible that domains are set to authorize connection without any account, which represents a security breach. It allows potential attackers to enumerate all the users and computers belonging to a domain, in order to identify very efficiently future weak targets.
It is possible to verify the results provided by the PingCastle solution by using a Kali Linux distribution. You should run [rpcclient -U '' -N target_ip_address] to finally type [enumdomusers].

Advised solution:

In order to remove the anonymous access, we advise to identify the GPO indicated by the program and change the setting restrictanonymous and restrictanonymoussam

Points:

5 points if present

Documentation:

https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-2000-server/cc963223%28v%3dtechnet.10%29
https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/jj852184(v=ws.11%29
[US]STIG V-14798 - Directory data (outside the root DSE) of a non-public directory must be configured to prevent anonymous access.
[MITRE]T1110.003 Brute Force: Password Spraying

Details:

The detail can be found in Security settings

GPO
Anonymous Stuff
+ 5 Point(s)

Check if signing is really required for LDAP

Rule ID:

A-DCLdapSign

Description:

The purpose is to check if signing is really required for LDAP

Technical explanation:

If the the request for signing of each LDAP request is not enforced, a man in the middle can be performed on an LDAP connection.
For example to add a user to the admin group.

This test is made by ignoring the local computer security policies.
Signature enforcement is done by setting the flag ISC_REQ_INTEGRITY when initializig the Negotiate / NTLM / Kerberos authentication.
The opposite test is made with the flag ISC_REQ_NO_INTEGRITY set.

PingCastle is testing if this setting is in place by performing a LDAP authentication with and without signature enforcement.
False positives may exists if the PingCastle program is run on the server tested. That's why, if PingCastle is run on a DC, the DC will not be tested.

Advised solution:

You have to make sure that ALL LDAP clients are compatible with LDAP signature.
All versions of Windows since XP support this and also most of the Unix clients.

You have to follow the Microsoft article quoted in reference to enable LDAP signing.
This includes auditing the clients which are not compatible and instructions on how to enforce this policy.

Points:

5 points if present

Documentation:

https://learn.microsoft.com/en-US/troubleshoot/windows-server/identity/enable-ldap-signing-in-windows-server
https://support.microsoft.com/en-us/topic/2020-2023-and-2024-ldap-channel-binding-and-ldap-signing-requirements-for-windows-kb4520412-ef185fb8-00f7-167d-744c-f299a66fc00a
https://github.com/zyn3rgy/LdapRelayScan
[MITRE]T1557 Man-in-the-Middle

Details:
Domain controller
DC
DC2
RODC
+ 5 Point(s)

Check if Extended Protection is in place for certificate requests

Rule ID:

A-CertEnrollChannelBinding

Description:

The purpose is to check if the Extended protection for HTTPS access to the certificate enrollment interface is in place

Technical explanation:

The Windows PKI, also named Active Directory Certificate Services (ADCS), can be used to request certificates.
Two services can be used: Certification Authority Web Enrollment (WebEnrollment) and Certificate Enrollment Web Service (CES).
The certificates provided by these services can be used with Kerberos to login.

Because this service can deliver certificates for Domain Controller, it can be considered as part of Tier 0.
As a legacy service, the mechanisms to prohibit credential relay are not enforced by default.
If an attacker is able to relay privileged credentials (for example with the PetitPotam attack), it can be used to take control of the domain.

To avoid this attack with HTTPS, a feature named Channel Binding exists. It consists of passing to the authentication layer a property of the TLS channel (typically a hash of the server certificate) to bind the outer channel (TLS) and the inner channel (HTTP).
This protection is also called "Extended Protection". See rfc5929 for more details.

PingCastle is looking for enrollment servers registered in the Active Directory.
It then connect to the special page https://xxx/certsrv/certrqxt.asp and https://xxx/yyy_CES_Kerberos/service.svc
An authentication is attempted with and without Channel Binding.

False positives may exists if the PingCastle program is run on the server tested. That's why, if PingCastle is run on the server, the server will not be tested.

Advised solution:

The Extended Protection for Authentication (EPA, also called Channel Binding) should be activated on the enrollment server.

This can be achieved by opening the IIS console on the enrollment server.
In the Authentcation settings, open the Advanced Settings for the Windows Authentication.
Set "Extended Protection" to "Required".

Do this operation for the Certification Authority Web Enrollment (WebEnrollment) and Certificate Enrollment Web Service (CES).

See the link to KB5005413 below for more information. This KB also suggest to restrict the authentication to Kerberos only.

Points:

5 points if present

Documentation:

https://support.microsoft.com/en-us/topic/kb5005413-mitigating-ntlm-relay-attacks-on-active-directory-certificate-services-ad-cs-3612b773-4043-4aa9-b23d-b87910cd3429
https://dirkjanm.io/ntlm-relaying-to-ad-certificate-services/
https://www.riskinsight-wavestone.com/en/2021/06/microsoft-adcs-abusing-pki-in-active-directory-environment/
[MITRE]T1557 Man-in-the-Middle

Details:
ServerService
DC.domain.local WebEnrollment
+ 5 Point(s)

Check if certificate enrollment can be done with HTTP

Rule ID:

A-CertEnrollHttp

Description:

The purpose is to check if HTTP can be used to access the certificate enrollment interface

Technical explanation:

The Windows PKI, also named Active Directory Certificate Services (ADCS), can be used to request certificates.
Two services can be used: Certification Authority Web Enrollment (WebEnrollment) and Certificate Enrollment Web Service (CES).
The certificates provided by these services can be used with Kerberos to login.

Because this service can deliver certificates for Domain Controllers, it can be considered as part of Tier 0.
As a legacy service, the mechanisms to prohibit credential relay are not enforced by default.
If an attacker is able to relay privileged credentials (for example with the PetitPotam attack), it can be used to take control of the domain.

PingCastle is looking for enrollment servers registered in the Active Directory (pKIEnrollmentService objects).
It then connects to the special page http://xxx/certsrv/certrqxt.asp and http://xxx/yyy_CES_Kerberos/services.svc and tries to access the page with authentication.

If the authentication succeed and no error is returned,the program considers the interface accessible.

False positives may exists if the PingCastle program is run on the server tested. That's why, if PingCastle is run on the server, the server will not be tested.

Advised solution:

The access to certificate enrollment with HTTP should be disabled.

This can be achieved by opening the IIS console on the enrollment server.
If the service quoted in detail is WebEnrollment, the url is certsrv, else it is ending by CES_Keberos.

In the Binding setting (link at the right), keep the HTTPS binding and remove the HTTP binding.
See the link to KB5005413 in references for more information.

Note: By default, the CES service is not accessible by HTTP.

Points:

5 points if present

Documentation:

https://support.microsoft.com/en-us/topic/kb5005413-mitigating-ntlm-relay-attacks-on-active-directory-certificate-services-ad-cs-3612b773-4043-4aa9-b23d-b87910cd3429
https://dirkjanm.io/ntlm-relaying-to-ad-certificate-services/
https://www.riskinsight-wavestone.com/en/2021/06/microsoft-adcs-abusing-pki-in-active-directory-environment/
https://www.vkernel.ro/blog/installing-and-configuring-cep-and-ces-for-certificate-enrolling-on-non-domain-joined-computers
[MITRE]T1557 Man-in-the-Middle

Details:
ServerService
DC.domain.local WebEnrollment
+ 2 Point(s)

Check that the "Pre-Windows 2000 Compatible Access" group has not been modified from its default

Rule ID:

A-PreWin2000Other

Description:

The purpose is checking that no additional account has been added to the "Pre-Windows 2000 Compatible Access" group

Technical explanation:

The pre-Windows 2000 compatible access group grants access to some RPC calls which should not be available to users or computers.

Advised solution:

Remove the members from the PreWin2000 group while making sure that the group "Authenticated Users" is present. Then reboot each DC.

Points:

2 points if present

Documentation:

https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/7a76a403-ed8d-4c39-adb7-a3255cab82c5
[FR]ANSSI - Use of the "Pre-Windows 2000 Compatible Access" group (vuln3_compatible_2000_not_default)3
[MITRE]T1110.003 Brute Force: Password Spraying

Details:
DN
CN=DEVELOPMENT2026,CN=Computers,DC=domain,DC=local
CN=PC,CN=Computers,DC=domain,DC=local
CN=DC,OU=Domain Controllers,DC=domain,DC=local
+ 1 Point(s)

Additional DNS zones allow anonymous updates

Rule ID:

A-DnsZoneUpdate2

Description:

DNS zones other than the primary domain zone are configured to accept anonymous updates, allowing any device to modify DNS records without authentication.

Technical explanation:

Beyond the critical infrastructure zones checked by A-DnsZoneUpdate1, Active Directory typically hosts numerous additional DNS zones including reverse lookup zones (like 10.0.0.in-addr.arpa), application-specific zones, and subdomain zones. This rule examines all these secondary zones to identify those configured to accept nonsecure updates.

While these zones might seem less critical than your domain and _msdcs zones, they still present significant security risks when configured for nonsecure updates. Reverse lookup zones can be manipulated to bypass security controls that rely on PTR record validation. Application zones often contain service endpoints that, if hijacked, could redirect users to malicious services. Subdomain zones may host departmental or regional services that attackers could compromise.

The vulnerability exists when these zones are set to accept "nonsecure and secure" updates, meaning any network-connected device can modify records without proving its identity. This opens the door to DNS poisoning attacks, service hijacking, and reconnaissance activities that help attackers map your infrastructure.

Like its companion rule A-DnsZoneUpdate1, this check examines zones across all Active Directory partitions and filters out replication artifacts. Together, these two rules ensure complete coverage of your DNS security posture - with A-DnsZoneUpdate1 covering critical AD infrastructure and A-DnsZoneUpdate2 covering everything else.

Advised solution:

To fix this vulnerability, configure all zones for secure-only updates:

GUI Method:
1. Open DNS Manager (dnsmgmt.msc)
2. Navigate to the affected zone
3. Right-click the zone → Properties → General tab
4. Change "Dynamic updates" from "Nonsecure and secure" to "Secure only"

PowerShell Method:

# Find all zones with insecure updates
Get-DnsServerZone | Where-Object {$_.DynamicUpdate -eq "NonsecureAndSecure"}

# Fix a specific zone
Set-DnsServerPrimaryZone -Name "10.0.0.in-addr.arpa" -DynamicUpdate Secure -ComputerName DC01

# Fix all insecure zones
Get-DnsServerZone | Where-Object {$_.DynamicUpdate -eq "NonsecureAndSecure"} | ForEach-Object {
Set-DnsServerPrimaryZone -Name $_.ZoneName -DynamicUpdate Secure -ComputerName DC01
}


Command Line Method:

# Local server
dnscmd /Config <ZoneName> /AllowUpdate 2

# Remote server
dnscmd <ServerName> /Config <ZoneName> /AllowUpdate 2

# Example
dnscmd DC01 /Config contoso.com /AllowUpdate 2


Note: Some zones may require nonsecure updates for DHCP or legacy systems. Document any exceptions.

Points:

1 points if present

Documentation:

https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-dnsp/f97756c9-3783-428b-9451-b376f877319a
https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/dnscmd
[FR]ANSSI - Misconfigured DNS zones (vuln3_dnszone_bad_prop)3
[MITRE]T1557 Man-in-the-Middle

Details:
ZoneDomainDNPartition
0.0.10.in-addr.arpa domain.local DC=0.0.10.in-addr.arpa,CN=MicrosoftDNS,DC=DomainDnsZones,DC=domain,DC=local DomainDnsZones
Forest-Test.local domain.local DC=Forest-Test.local,CN=MicrosoftDNS,DC=ForestDnsZones,DC=domain,DC=local ForestDnsZones
test3.local domain.local DC=test3.local,CN=MicrosoftDNS,CN=System,DC=domain,DC=local DefaultNamingContext
Informative rule

Check if LDAPS is using Tls 1.0 or Tls 1.1.

Rule ID:

A-DCLdapsProtocolAdvanced

Description:

The purpose is to ensure that all DC are using the most advanced protocols when acting as server.

Technical explanation:

TLS 1.0 and TLS 1.1 are no longer recommended to use, even if there is no pratical attack to could lead to an immediate compromise of the DC.
The SChannel component needs to be tuned in order to not propose these protocols. Many guidelines to handle this problem issued by Microsoft do not talk about SChannel but rather IIS. These guidlines are quoted in the documentation section below.

PingCastle is able to check the SSL version if LDAPS is exposed. LDAPS is automatically exposed once a certificate is available for the DC and the service restarted.
Please note that PingCastle is using the native .Net SSL stack to perform this test. .Net begins to ignore these weak protocols starting the version 4.7 of the framework and as a consequence, PingCasle may miss some weak protocol detection.

To test for these protocols, you can use a version of openssl with the deprecated protocols still compiled in, e.g. openssl-unsafe from Kali Linux, with the following commands:
openssl-unsafe s_client -connect dc.domain.local:636 -tls1
openssl-unsafe s_client -connect dc.domain.local:636 -tls1_1

Advised solution:

Apply Windows updates and registry tweaks described in the documentation section to use Tls 1.2 and later.

Points:

Informative rule (0 point)

Documentation:

https://support.microsoft.com/en-us/topic/kb5017811-manage-transport-layer-security-tls-1-0-and-1-1-after-default-behavior-change-on-september-20-2022-e95b1b47-9c7c-4d64-9baf-610604a64c3e
https://learn.microsoft.com/en-us/dotnet/framework/network-programming/tls#configuring-schannel-protocols-in-the-windows-registry
[MITRE]T1600.001 Weaken Encryption: Reduce Key Space

Details:

The detail can be found in Domain controllers

DCProtocol
DC Tls
DC Tls11
DC2 Tls
RODC Tls
RODC Tls11
Informative rule

Check if PowerShell logging is enabled.

Rule ID:

A-AuditPowershell

Description:

The purpose is to ensure that PowerShell logging is enabled.

Technical explanation:

PowerShell is a powerful language, also used by hackers because of this quality. Hackers are able to run programs such as mimikatz in memory using obfuscated commands such as Invoke-Mimikatz.
Because there is no artefact on the disk, the incident response task is difficult for the forensic analysts.
For this reason, we recommend to enable PowerShell logging via a group policy, despite the fact that these security settings may be part of the workstation or server images.

Advised solution:

Go to Computer Configuration -> Administrative Templates -> Windows Components -> Windows PowerShell
And enable "Turn on Module logging" and "Turn on PowerShell Script Block logging"
We recommend to set "*" as the module list.

Points:

Informative rule (0 point)

Documentation:

https://adsecurity.org/?p=2604
https://learn.microsoft.com/en-us/powershell/scripting/wmf/whats-new/script-logging?view=powershell-6
[US]STIG V-68819 - PowerShell script block logging must be enabled
[MITRE]Mitre Att&ck - Mitigation - Audit

Details:

The detail can be found in Security settings

Informative rule

Check if NetCease has been put in place to mitigate Bloodhound

Rule ID:

A-NoNetSessionHardening

Description:

The purpose is to ensure that mitigations are in place against the Bloodhound tool

Technical explanation:

By default, Windows computers allow any authenticated user to enumerate network sessions to it.
This means an attacker could enumerate network sessions to a file share hosting home directories or a Domain Controller to see who's connected to SYSVOL (to apply Group Policy) and determine which workstations each user and admin account is logged into.
Bloodhound uses this capability extensively to map out credentials in the network.

Disabling Net Session Enumeration removes the capability for any user to enumerate net session info (Recon).

Advised solution:

If this mitigation is not part of the computer image, apply the following recommendations:
Run the NetCease PowerShell script (referenced below) on a reference workstation.
Open the Group Policy Management Console. Right-click the Group Policy object (GPO) that should contain the new preference item, and then click Edit .
In the console tree under Computer Configuration, expand the Preferences folder, and then expand the Windows Settings folder.
Right-click the Registry node, point to New, and select Registry Wizard.
Select the reference workstation on which the desired registry settings exist, then click Next .
Browse to HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\DefaultSecurity\
and select the check box for “SrvsvcSessionInfo” from which you want to create a Registry preference item. Select the check box for a key only if you want to create a Registry item for the key rather than for a value within the key.
Click Finish.
The settings that you selected appear as preference items in the Registry Wizard Values collection

Points:

Informative rule (0 point)

Documentation:

https://github.com/p0w3rsh3ll/NetCease
https://adsecurity.org/?p=3299
[MITRE]T1087.001 Account Discovery: Local Account

Details:

The detail can be found in Security settings

Informative rule

Check if the mitigation for CVE-2021-42291 has been enabled

Rule ID:

A-DsHeuristicsLDAPSecurity

Description:

The purpose is to identify domains having mitigation for CVE-2021-42291 not set to enabled

Technical explanation:

The way an Active Directory behaves can be controlled via the attribute DsHeuristics of CN=Directory Service,CN=Windows NT,CN=Services,CN=Configuration.
A parameter stored in its attribute and whose value is LDAPAddAutZVerifications and LDAPOwnerModify can be set to modify the mitigatation of CVE-2021-42291.
The KB5008383 has introduced changes to default security descriptor of Computer containers to add audit and limit computer creation without being admin.
Indeed, it is recommended to not let anyone create computer accounts as they can be used to abuse Kerberos or to perform relay attacks.

Mitigations in CVE-2021-42291 consist of 3 choices to be set on 2 settings.
They are named LDAPAddAutZVerifications and LDAPOwnerModify and are respectively the 28th and 29th character of this string.
For the expected values:
- With the value 0 (the default), it enables an additional audit mechanism
- With the value 1 (recommended), it enforces new security permissions, especially to require an action of the domain admin when unusual actions are performed
- With the value 2 (not recommended), it disables the audit mechanism that has been added by default and do not enable the new security permissions

Advised solution:

The easiest and fastest way to correct this issue is to replace the 28th and 29th character of the DsHeuristics attribute.
The value of LDAPAddAutZVerifications and LDAPOwnerModify should be set to 1.

Open the procedure embedded into the KB5008383 to apply this mitigation and change the DsHeuristics value.

Note: You have to pay attention that there are control characters at the 10th and 20th position to avoid undesired changes of the DsHeuristics attribute.
Typically if the DsHeuristics is empty, the expected new value is 00000000010000000002000000011

Points:

Informative rule (0 point)

Documentation:

https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/e5899be4-862e-496f-9a38-33950617d2c5
https://support.microsoft.com/en-au/topic/kb5008383-active-directory-permissions-updates-cve-2021-42291-536d5555-ffba-4248-a60e-d6cbc849cde1
[FR]ANSSI - Dangerous dsHeuristics settings (vuln3_dsheuristics_bad)3
[MITRE]T1187 Forced Authentication

Details:
SettingPositionValue
LDAPAddAuthZVerifications 28th Not Set
LDAPOwnerModify 29th Not Set
Informative rule

Check the Password Policy for Service Accounts (Information)

Rule ID:

A-NoServicePolicy

Description:

The purpose is to give information regarding a best practice for the Service Account password policy. Indeed, having a 20+ characters password for this account greatly helps reducing the risk of Kerberoasting attacks (offline cracking of the TGS tickets)
Note: PSO (Password Settings Objects) will be visible only if the user, which collected the information, has the permission to view it.

Technical explanation:

The rule is purely informative, as it gives insights regarding a best practice. It verifies if there is a GPO or PSO enforcing a 20+ characters password for the Service Accounts.

Advised solution:

The recommended way to handle service accounts is to use "Managed service accounts" introduced since Windows Server 2008 R2 (search for "msDS-ManagedServiceAccount").
To solve the anomaly, you should implement a PSO or GPO password guarantying a 20+ length password.

Points:

Informative rule (0 point)

Documentation:

https://www.microsoft.com/en-us/research/publication/password-guidance/
[MITRE]T1201 Password Policy Discovery

Details:

The detail can be found in Password Policies

Informative rule

Check if Authenticated Users can create DNS records

Rule ID:

A-DnsZoneAUCreateChild

Description:

The purpose is to check if Authenticated Users has the right to create DNS records

Technical explanation:

When a computer is joined to a domain, a DNS record is created in the DnsZone to allow the computer to update its DNS settings.
By design, Microsoft choose to grant to the group Authenticated Users (aka every computers and users) the right to create DNS records.
Once created, only the owner keeps the right to edit the new object.

The vulnerability is that specific DNS records can be created to perform man-in-the-middle attacks.
One example is to create a wildcard record (a record with the name "*"), a failover DNS record or anticipating the creation of a DNS record with the right permissions.

Advised solution:

As of today, this rule is considered "informative" because the default configuration where Authenticated Users can create DNS records is considered safe.
The reason for this classification is that no exploitation of that vulnerability has been reported.

The proposed enhancement is to replace the identity who has been granted the right to create DNS Records (permission CreateChild) from Authenticated Users to Domain Computers.
To perform this change, you have to edit the permission of the DNSZone whose object is located in the container CN=MicrosoftDNS,DC=DomainDnsZones.

It should be noticed that if there is a privilege escalation on a computer, an attacker can impersonate the computer account and bypass this mitigation.

The best mitigation is to create the DNS records manually as part as the domain join process and to revoke the permission granted to Authenticated Users.

Points:

Informative rule (0 point)

Documentation:

https://www.ws-its.de/gegenmassnahme-zum-angriff-dns-wildcard/
https://www.netspi.com/blog/technical/network-penetration-testing/exploiting-adidns/
[MITRE]T1557 Man-in-the-Middle

Details:
DNSZone
domain.local
0.0.10.in-addr.arpa
_msdcs.domain.local
Forest-Test.local
test3.local
Informative rule

Ensure that the rootDse Anonymous Binding is disabled

Rule ID:

A-RootDseAnonBinding

Description:

The purpose is to ensure that Anonymous Binding on RootDse is not enabled

Technical explanation:

The rootDse is a special object that enables clients to discover the functionalities of the server, such as LDAP version or support for special processing.
On Windows, it can be accessed by default without binding, which allows everyone to access this data.
There is no confidential data in this attribute, only the Operating System version and the name of the domain.
Since Windows 2019, the rootDse access can be set to require authentication.
You can test the anonymous access of the rootDse object by launching ldp.exe and selecting 'Connect' on the Connection menu.
You should receive the error "The server has been configured to deny unauthenticated simple binds."

Advised solution:

Edit the attribute msDS-Other-Settings of the object CN=Directory Service,CN=Windows NT,CN=Services,CN=Configuration.
Add a new line with the content: DenyUnauthenticatedBind=1

Points:

Informative rule (0 point)

Documentation:

https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/3f0137a1-63df-400c-bf97-e1040f055a99
https://blog.lithnet.io/2018/12/disabling-unauthenticated-binds-in.html
[MITRE]T1018 Remote System Discovery

Informative rule

Check if LLMNR can be used to steal credentials

Rule ID:

A-NoGPOLLMNR

Description:

The purpose is to ensure that local name resolution protocol (LLMNR) cannot be used to collect credentials by performing a network attack

Technical explanation:

LLMNR is a protocol which translates names such as foo.bar.com into an ip address. LLMNR has been designed to translate name locally in case the default protocol DNS is not available.
Regarding Active Directory, DNS is mandatory which makes LLMNR useless.
LLMNR exploits typo mistakes or faster response time to redirect users to a specially designed share, server or website.
Being trusted, this service will trigger the single sign on procedure which can be abused to retrieve the user credentials.

LLMNR is enabled by default on all OS except starting from Windows 10 v1903 and Windows Server v1903 where it is disabled.

Advised solution:

Enable the GPO Turn off multicast name resolution and check that no GPO overrides this setting.
(if it is the case, the policy involved will be displayed below)

Points:

Informative rule (0 point)

Documentation:

https://youtu.be/Fg2gvk0qgjM
[MITRE]T1557.001 Man-in-the-Middle: LLMNR/NBT-NS Poisoning and SMB Relay

Details:

The detail can be found in Security settings

This section shows the main technical characteristics of the domain.

DomainNetbios NameDomain Functional LevelForest Functional LevelCreation dateDC countSchema versionRecycle Bin enabled
domain.localDOMAINWindows Server 2016Windows Server 20162025-05-01 23:27:08Z3Windows Server 2025TRUE

Entra ID Configuration

No Entra ID configuration has been found in this domain

This section gives information about the user accounts stored in the Active Directory

Honey Pot

A honey pot has been configured. It is used to generate fake security issues that are heavily monitored and that a hacker will spot using security tools like PingCastle. By enabling this feature, all the accounts listed below will not be evaluated with PingCastle rules.

[3]
NameCreationLast logonPwd Last SetDistinguished name
Access DeniedNeverNeverCN=ADIANT-VIRTUAL-,CN=Computers,DC=test,DC=mysmartlogon,DC=com
HoneyPotAccess DeniedNeverNever
HoneyPotInexistantAccess DeniedNeverNever

Account analysis

Nb User AccountsNb Enabled Nb Disabled Nb Active Nb Inactive Nb AccessDenied Nb Locked Nb pwd never Expire Nb SidHistory Nb Bad PrimaryGroup Nb Password not Req. Nb Des enabled. Nb unconstrained delegations (enabled) Nb unconstrained delegations (disabled) Nb Reversible password 
26125742243300461200000
[33]
NameCreationLast logonPwd Last SetDistinguished name
duser12025-08-01 11:12:59ZNever2025-08-01 12:13:35ZCN=duser1,OU=Admin,DC=domain,DC=local
Entra12025-07-01 11:29:41Z2025-07-22 13:58:59Z2025-07-01 12:29:41ZCN=Entra1,OU=Users,OU=Entra,DC=domain,DC=local
KerbRoast12025-07-29 12:24:09ZNever2025-07-29 13:24:09ZCN=KerbRoast1,OU=Admin,DC=domain,DC=local
NestedUser12025-05-09 13:14:01ZNever2025-05-09 14:14:01ZCN=NestedUser1,OU=Admin,DC=domain,DC=local
PermTest12025-07-11 14:22:44Z2025-07-11 15:26:35Z2025-07-11 15:24:31ZCN=PermTest1,OU=Admin,DC=domain,DC=local
pingcastleGMSA$2025-06-16 10:49:42Z2025-06-16 11:51:56Z2025-06-16 11:49:42ZCN=pingcastleGMSA,CN=Managed Service Accounts,DC=domain,DC=local
ShouldNotShow2025-05-22 17:22:10ZNever2025-05-22 18:22:10ZCN=ShouldNotShow,OU=Test1,OU=Testing,DC=domain,DC=local
srv_certsvc2025-07-17 11:44:12Z2025-07-17 12:46:25Z2025-07-17 12:44:12ZCN=srv_certsvc,OU=Admin,DC=domain,DC=local
srv_dhcp2025-05-14 08:43:25Z2025-06-13 20:56:58Z2025-05-14 09:43:25ZCN=srv_dhcp,OU=Admin,DC=domain,DC=local
TestUser_EA2025-06-19 13:32:20ZNever2025-06-19 14:32:20ZCN=TestUser_EA,OU=Testing,DC=domain,DC=local
TestUser_NEA2025-06-19 17:00:11ZNever2025-06-19 18:00:11ZCN=TestUser_NEA,OU=Testing,DC=domain,DC=local
TestUser12025-05-21 16:36:35ZNever2025-05-21 17:36:35ZCN=TestUser1,OU=Admin,DC=domain,DC=local
TestUser1_BadSuc2025-06-19 15:07:09ZNever2025-06-19 16:07:09ZCN=TestUser1_BadSuc,OU=TestSubjects,OU=VulnerableTest-20250619-160707,OU=Testing,DC=domain,DC=local
TestUser1_Vuln2025-06-19 15:09:53ZNever2025-06-19 16:09:53ZCN=TestUser1_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
TestUser10_Vuln2025-06-19 15:09:54ZNever2025-06-19 16:09:54ZCN=TestUser10_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
TestUser11_Vuln2025-06-19 15:09:54ZNever2025-06-19 16:09:54ZCN=TestUser11_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
TestUser12_Vuln2025-06-19 15:09:54ZNever2025-06-19 16:09:54ZCN=TestUser12_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
TestUser13_Vuln2025-06-19 15:09:54ZNever2025-06-19 16:09:54ZCN=TestUser13_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
TestUser14_Vuln2025-06-19 15:09:54ZNever2025-06-19 16:09:54ZCN=TestUser14_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
TestUser15_Vuln2025-06-19 15:09:54ZNever2025-06-19 16:09:54ZCN=TestUser15_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
TestUser16_Vuln2025-06-19 15:09:54ZNever2025-06-19 16:09:54ZCN=TestUser16_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
TestUser17_Vuln2025-06-20 10:56:04ZNever2025-06-20 11:56:04ZCN=TestUser17_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
TestUser18_Vuln2025-06-20 11:09:56ZNever2025-06-20 12:09:56ZCN=TestUser18_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
TestUSer22025-05-22 10:20:53ZNever2025-05-22 11:20:53ZCN=TestUser2,OU=Test1,OU=Testing,DC=domain,DC=local
TestUser2_Vuln2025-06-19 15:09:53ZNever2025-06-19 16:09:53ZCN=TestUser2_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
TestUser32025-06-19 12:58:36ZNever2025-06-19 13:58:36ZCN=TestUser3,OU=Testing,DC=domain,DC=local
TestUser3_Vuln2025-06-19 15:09:53ZNever2025-06-19 16:09:53ZCN=TestUser3_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
TestUser4_Vuln2025-06-19 15:09:53ZNever2025-06-19 16:09:53ZCN=TestUser4_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
TestUser5_Vuln2025-06-19 15:09:53ZNever2025-06-19 16:09:53ZCN=TestUser5_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
TestUser6_Vuln2025-06-19 15:09:53ZNever2025-06-19 16:09:53ZCN=TestUser6_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
TestUser7_Vuln2025-06-19 15:09:53ZNever2025-06-19 16:09:53ZCN=TestUser7_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
TestUser8_Vuln2025-06-19 15:09:53ZNever2025-06-19 16:09:53ZCN=TestUser8_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
TestUser9_Vuln2025-06-19 15:09:53ZNever2025-06-19 16:09:53ZCN=TestUser9_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
[46]
NameCreationLast logonPwd Last SetDistinguished name
AdminEmail2025-08-06 09:08:42ZNever2025-08-06 10:08:42ZCN=AdminEmail,OU=Admin,DC=domain,DC=local
AdminKerb12026-01-22 23:09:32ZNever2026-01-22 23:09:32ZCN=AdminKerb1,OU=Admin,DC=domain,DC=local
DA2025-05-01 23:51:34Z2026-01-26 09:49:01Z2025-10-17 14:51:09ZCN=DA,CN=Users,DC=domain,DC=local
demoNoPriv2025-09-09 14:26:31Z2025-09-09 15:42:25Z2025-09-09 15:26:31ZCN=Demo NoPriv,OU=Admin,DC=domain,DC=local
domainuser2025-09-15 22:57:53Z2025-09-16 00:00:00Z2025-09-15 23:57:53ZCN=domain user,OU=Admin,DC=domain,DC=local
Entra12025-07-01 11:29:41Z2025-07-22 13:58:59Z2025-07-01 12:29:41ZCN=Entra1,OU=Users,OU=Entra,DC=domain,DC=local
kerbdeleg32025-10-28 13:55:05ZNever2025-10-28 13:55:05ZCN=kerbdeleg3,OU=Admin,DC=domain,DC=local
KerbRoast12025-07-29 12:24:09ZNever2025-07-29 13:24:09ZCN=KerbRoast1,OU=Admin,DC=domain,DC=local
MSOL_c92a2de74d9c2025-07-01 11:28:26Z2026-01-05 10:16:50Z2025-07-01 12:28:26ZCN=MSOL_c92a2de74d9c,OU=Admin,DC=domain,DC=local
NestedDA2025-12-09 19:48:40ZNever2025-12-09 19:48:40ZCN=NestedDA,OU=People,DC=domain,DC=local
NestedUser12025-05-09 13:14:01ZNever2025-05-09 14:14:01ZCN=NestedUser1,OU=Admin,DC=domain,DC=local
PermTest12025-07-11 14:22:44Z2025-07-11 15:26:35Z2025-07-11 15:24:31ZCN=PermTest1,OU=Admin,DC=domain,DC=local
ShouldNotShow2025-05-22 17:22:10ZNever2025-05-22 18:22:10ZCN=ShouldNotShow,OU=Test1,OU=Testing,DC=domain,DC=local
srv_1secure2025-06-25 09:49:19Z2025-09-03 21:34:50Z2025-09-11 13:16:31ZCN=srv_1secure,OU=Admin,DC=domain,DC=local
srv_AA2025-12-10 10:56:59ZNever2025-12-10 10:56:59ZCN=srv_AA,OU=Admin,DC=domain,DC=local
srv_certsvc2025-07-17 11:44:12Z2025-07-17 12:46:25Z2025-07-17 12:44:12ZCN=srv_certsvc,OU=Admin,DC=domain,DC=local
srv_na2025-10-14 21:12:44Z2026-01-05 10:15:18Z2025-10-14 22:12:44ZCN=srv_na,OU=Admin,DC=domain,DC=local
srv_na_col2025-10-15 11:06:21Z2026-01-05 10:17:18Z2025-10-15 12:06:21ZCN=srv_na_col,OU=Admin,DC=domain,DC=local
srv_recover2025-11-21 11:26:21Z2025-12-13 19:49:01Z2025-11-21 11:26:21ZCN=srv_recover,OU=Admin,DC=domain,DC=local
srv_sd2025-07-15 12:49:52Z2026-01-05 10:15:25Z2025-07-15 13:49:52ZCN=srv_sd,OU=Admin,DC=domain,DC=local
srv_si2025-07-15 12:49:36Z2025-12-10 10:40:06Z2025-07-15 13:49:36ZCN=srv_si,OU=Admin,DC=domain,DC=local
TestUser_DA2025-06-19 13:32:37Z2025-11-04 13:12:29Z2025-11-04 13:20:52ZCN=TestUser_DA,OU=Testing,DC=domain,DC=local
TestUser_EA2025-06-19 13:32:20ZNever2025-06-19 14:32:20ZCN=TestUser_EA,OU=Testing,DC=domain,DC=local
TestUser_NEA2025-06-19 17:00:11ZNever2025-06-19 18:00:11ZCN=TestUser_NEA,OU=Testing,DC=domain,DC=local
TestUser12025-05-21 16:36:35ZNever2025-05-21 17:36:35ZCN=TestUser1,OU=Admin,DC=domain,DC=local
TestUser1_BadSuc2025-06-19 15:07:09ZNever2025-06-19 16:07:09ZCN=TestUser1_BadSuc,OU=TestSubjects,OU=VulnerableTest-20250619-160707,OU=Testing,DC=domain,DC=local
TestUser1_Vuln2025-06-19 15:09:53ZNever2025-06-19 16:09:53ZCN=TestUser1_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
TestUser10_Vuln2025-06-19 15:09:54ZNever2025-06-19 16:09:54ZCN=TestUser10_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
TestUser11_Vuln2025-06-19 15:09:54ZNever2025-06-19 16:09:54ZCN=TestUser11_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
TestUser12_Vuln2025-06-19 15:09:54ZNever2025-06-19 16:09:54ZCN=TestUser12_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
TestUser13_Vuln2025-06-19 15:09:54ZNever2025-06-19 16:09:54ZCN=TestUser13_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
TestUser14_Vuln2025-06-19 15:09:54ZNever2025-06-19 16:09:54ZCN=TestUser14_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
TestUser15_Vuln2025-06-19 15:09:54ZNever2025-06-19 16:09:54ZCN=TestUser15_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
TestUser16_Vuln2025-06-19 15:09:54ZNever2025-06-19 16:09:54ZCN=TestUser16_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
TestUser17_Vuln2025-06-20 10:56:04ZNever2025-06-20 11:56:04ZCN=TestUser17_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
TestUser18_Vuln2025-06-20 11:09:56ZNever2025-06-20 12:09:56ZCN=TestUser18_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
TestUSer22025-05-22 10:20:53ZNever2025-05-22 11:20:53ZCN=TestUser2,OU=Test1,OU=Testing,DC=domain,DC=local
TestUser2_Vuln2025-06-19 15:09:53ZNever2025-06-19 16:09:53ZCN=TestUser2_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
TestUser32025-06-19 12:58:36ZNever2025-06-19 13:58:36ZCN=TestUser3,OU=Testing,DC=domain,DC=local
TestUser3_Vuln2025-06-19 15:09:53ZNever2025-06-19 16:09:53ZCN=TestUser3_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
TestUser4_Vuln2025-06-19 15:09:53ZNever2025-06-19 16:09:53ZCN=TestUser4_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
TestUser5_Vuln2025-06-19 15:09:53ZNever2025-06-19 16:09:53ZCN=TestUser5_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
TestUser6_Vuln2025-06-19 15:09:53ZNever2025-06-19 16:09:53ZCN=TestUser6_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
TestUser7_Vuln2025-06-19 15:09:53ZNever2025-06-19 16:09:53ZCN=TestUser7_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
TestUser8_Vuln2025-06-19 15:09:53ZNever2025-06-19 16:09:53ZCN=TestUser8_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
TestUser9_Vuln2025-06-19 15:09:53ZNever2025-06-19 16:09:53ZCN=TestUser9_Vuln,OU=TestSubjects,OU=VulnerableTest-20250619-160953,OU=Testing,DC=domain,DC=local
[1]
NameCreationLast logonPwd Last SetDistinguished name
TestUser12025-05-21 16:36:35ZNever2025-05-21 17:36:35ZCN=TestUser1,OU=Admin,DC=domain,DC=local
[2]
NameCreationLast logonPwd Last SetDistinguished name
CLARK_PEREZ2025-09-11 14:13:02ZNever2025-09-11 15:13:02ZCN=CLARK_PEREZ,OU=GOO,OU=People,DC=domain,DC=local
JANELL_ODONNELL2025-09-11 14:13:09ZNever2025-09-11 15:13:09ZCN=JANELL_ODONNELL,OU=Admin,DC=domain,DC=local
[6]
NameCreationLast logonPwd Last SetDistinguished name
Administrator2025-05-01 23:27:12Z2025-12-17 12:45:37Z2025-05-02 00:16:58ZCN=Administrator,CN=Users,DC=domain,DC=local
AdminKerb12026-01-22 23:09:32ZNever2026-01-22 23:09:32ZCN=AdminKerb1,OU=Admin,DC=domain,DC=local
kerbdeleg22025-08-28 13:11:13ZNever2025-10-28 12:49:30ZCN=kerbdeleg2,OU=Admin,DC=domain,DC=local
KerbRoast12025-07-29 12:24:09ZNever2025-07-29 13:24:09ZCN=KerbRoast1,OU=Admin,DC=domain,DC=local
TestUser_DA2025-06-19 13:32:37Z2025-11-04 13:12:29Z2025-11-04 13:20:52ZCN=TestUser_DA,OU=Testing,DC=domain,DC=local
TestUser_EA2025-06-19 13:32:20ZNever2025-06-19 14:32:20ZCN=TestUser_EA,OU=Testing,DC=domain,DC=local

Password Age Distribution

Here is the distribution where the password has been changed for the last time. Only enabled user accounts are analyzed (no guest account for example).

0-30 days30-60 days60-90 days90-120 days120-150 days150-180 days180-210 days210-240 days240-270 days270-300 days300-330 days330-360 days360-390 days390-420 days420-450 days450-480 days480-510 days510-540 days540-570 days570-600 days600-630 days630-660 days660-690 days690-720 days720-750 days750-780 days780-810 days810-840 days840-870 days870-900 days900-930 days930-960 days960-990 days990-1020 days1020-1050 days1050-1080 daysOther0100200300400500

SID History

SID History from domainFirst date seen Last date seen CountDangerous SID Found
domain.local2025-05-21 16:36:35Z2025-05-21 16:36:35Z1True

Account analysis

This section gives information about the computer accounts stored in the Active Directory

Nb Computer AccountsNb Enabled Nb Disabled Nb Active Nb Inactive Nb AccessDenied Nb SidHistory Nb Bad PrimaryGroup Nb unconstrained delegations (enabled) Nb unconstrained delegations (disabled) Nb Reversible password 
2152141211300000
[3]
NameCreationLast logonPwd Last SetDistinguished name
CHILDDC$2025-07-21 17:41:36Z2025-07-21 18:41:36Z2025-07-21 18:41:36ZCN=CHILDDC,CN=Computers,DC=domain,DC=local
dcshadow$2025-06-30 12:24:51ZNever2025-06-30 13:24:51ZCN=dcshadow,CN=Computers,DC=domain,DC=local
DESKTOP-KCEBN9C$2025-05-15 11:21:40Z2025-07-20 05:36:10Z2025-06-24 14:49:24ZCN=DESKTOP-KCEBN9C,OU=Computers,OU=Entra,DC=domain,DC=local
[2]
NameCreationLast logonPwd Last SetDistinguished name
SERVER1$2025-08-06 09:02:47ZNever2025-08-06 10:02:47ZCN=Server1,CN=Computers,DC=domain,DC=local
SERVER2$2025-08-06 09:02:55ZNever2025-08-06 10:02:55ZCN=Server2,CN=Computers,DC=domain,DC=local
[19]
NameCreationLast logonPwd Last SetDistinguished name
AWSWAPPS1000000$2025-09-11 14:04:43ZNever2025-09-11 15:04:43ZCN=AWSWAPPS1000000,OU=T2-Devices,OU=Tier 2,OU=Admin,DC=domain,DC=local
AWSWWEBS1000000$2025-09-11 14:04:44ZNever2025-09-11 15:04:44ZCN=AWSWWEBS1000000,OU=TestOU_030,OU=GPOTest,DC=domain,DC=local
AWSWWKS1000002$2025-09-11 14:13:39ZNever2025-09-11 15:13:39ZCN=AWSWWKS1000002,OU=Test,OU=ESM,OU=Tier 2,DC=domain,DC=local
AZRWCTRX1000000$2025-09-11 14:04:37ZNever2025-09-11 15:04:37ZCN=AZRWCTRX1000000,OU=Testing,DC=domain,DC=local
AZRWCTRX1000004$2025-09-11 14:13:28ZNever2025-09-11 15:13:28ZCN=AZRWCTRX1000004,OU=ServiceAccounts,OU=AWS,OU=Stage,DC=domain,DC=local
BDEWVIR1000000$2025-09-11 14:04:44ZNever2025-09-11 15:04:44ZCN=BDEWVIR1000000,OU=Groups,OU=FIN,OU=Tier 1,DC=domain,DC=local
FINWCTRX1000001$2025-09-11 14:13:42ZNever2025-09-11 15:13:42ZCN=FINWCTRX1000001,OU=ServiceAccounts,OU=ITS,OU=Stage,DC=domain,DC=local
FINWVIR1000003$2025-09-11 14:13:25ZNever2025-09-11 15:13:25ZCN=FINWVIR1000003,OU=ServiceAccounts,OU=AWS,OU=Tier 1,DC=domain,DC=local
FSRWAPPS1000001$2025-09-11 14:04:57ZNever2025-09-11 15:04:57ZCN=FSRWAPPS1000001,OU=Devices,OU=AWS,OU=Tier 1,DC=domain,DC=local
FSRWVIR1000001$2025-09-11 14:04:47ZNever2025-09-11 15:04:47ZCN=FSRWVIR1000001,OU=TestOU_033,OU=GPOTest,DC=domain,DC=local
FSRWWKS1000000$2025-09-11 14:04:49ZNever2025-09-11 15:04:49ZCN=FSRWWKS1000000,OU=TestOU_047,OU=GPOTest,DC=domain,DC=local
GOOWDBAS1000002$2025-09-11 14:13:43ZNever2025-09-11 15:13:43ZCN=GOOWDBAS1000002,OU=TestOU_008,OU=GPOTest,DC=domain,DC=local
GOOWSECS1000000$2025-09-11 14:04:57ZNever2025-09-11 15:04:57ZCN=GOOWSECS1000000,OU=T2-Devices,OU=Tier 2,OU=Admin,DC=domain,DC=local
HREWVIR1000002$2025-09-11 14:13:28ZNever2025-09-11 15:13:29ZCN=HREWVIR1000002,OU=TST,OU=Tier 1,DC=domain,DC=local
ITSWWKS1000003$2025-09-11 14:13:45ZNever2025-09-11 15:13:45ZCN=ITSWWKS1000003,OU=TestOU_044,OU=GPOTest,DC=domain,DC=local
OGCWAPPS1000000$2025-09-11 14:13:40ZNever2025-09-11 15:13:40ZCN=OGCWAPPS1000000,OU=Test,OU=AZR,OU=Tier 1,DC=domain,DC=local
SECWDBAS1000001$2025-09-11 14:04:51ZNever2025-09-11 15:04:51ZCN=SECWDBAS1000001,OU=TestOU_025,OU=GPOTest,DC=domain,DC=local
TSTWLPT1000002$2025-09-11 14:13:32ZNever2025-09-11 15:13:32ZCN=TSTWLPT1000002,OU=ServiceAccounts,OU=HRE,OU=Tier 1,DC=domain,DC=local
TSTWWKS1000000$2025-09-11 14:04:54ZNever2025-09-11 15:04:54ZCN=TSTWWKS1000000,OU=T2-Permissions,OU=Tier 2,OU=Admin,DC=domain,DC=local

Operating Systems

If you need to find the computers running a specific OS, we advise to use PingCastle.exe and the export / computers feature available from the main menu. Indeed the computer details are not included in the report for performance issues. Doing this will impact significantly the report size and the time to load the report.

Operating SystemNb OSNb Enabled Nb Disabled Nb Active Nb Inactive Nb AccessDenied Nb SidHistory Nb Bad PrimaryGroup Nb unconstrained delegations (enabled) Nb unconstrained delegations (disabled) Nb Reversible password 
OperatingSystem not set2002000199100000
Windows Server 2019 1809111019100000
Windows 10 22H21100100000
Windows Server 2025 24H21101000000
Windows 11 22H21101000000

Domain controllers

Here is a specific zoom related to the Active Directory servers: the domain controllers.

[3]
Domain controllerOperating SystemIsGlobalCatalogIsReadOnlyCreation Date Startup TimeUptimeOwner Null sessions SMB v1 Remote spooler FSMO role WebDAV 
DCWindows 2019TRUEFALSE2025-05-01 23:28:07Z2026-01-06 10:08:28Z029 daysDOMAIN\Domain AdminsNONOYESPDC,
RID pool manager,
Infrastructure master,
Schema master,
Domain naming Master
NO
DC2Windows 2019TRUEFALSE2025-05-02 10:34:33Z2026-01-26 10:10:18Z009 daysDOMAIN\Domain AdminsNONOYESNO
RODCWindows 2019TRUETRUE2025-05-02 22:00:24Z2026-01-27 07:50:06Z008 daysDOMAIN\Domain AdminsNONOYESNO

LAPS Analysis

Here is the distribution of the LAPS password fresshness (legacy vs the new Microsoft extension).

0-30 days30-60 days60-90 days90-120 days120-150 days150-180 days180-210 days210-240 days240-270 days270-300 days300-330 days330-360 days360-390 days390-420 days420-450 days450-480 days480-510 days510-540 days540-570 days570-600 days600-630 days630-660 days660-690 days690-720 days720-750 days750-780 days780-810 days810-840 days840-870 days870-900 days900-930 days930-960 days960-990 days990-1020 days1020-1050 days1050-1080 daysOther0246810

Here is the application of LAPS

Note: LAPS cannot be installed on Domain controllers. As a consequence LAPS cannot be deployed on 100% of the servers. There is currently 3 domain controllers or Entra ID gateway listed in this report.

All Enabled Computers with LAPS
1 out of 214
Enabled Windows Workstations with LAPS
1 out of 2
Enabled Windows Servers with LAPS
0 out of 11
Operating SystemEnabled ComputersActive Computers Legacy LAPSWindows LAPSBoth LAPS appliedLAPS TotalRatio (%)
Windows Server 2019 180910000000
Windows 10 22H21000000
Windows Server 2025 24H21000000
Windows 11 22H2110101100
OperatingSystem not set199000000

Groups

This section is focused on the groups which are critical for admin activities. If the report has been saved which the full details, each group can be zoomed with its members. If it is not the case, for privacy reasons, only general statistics are available.

Group NameNb Admins Nb Enabled Nb Disabled Nb Inactive Nb PWd never expire Nb Smart Card required Nb Service accounts Nb can be delegated Nb external users Nb protected users 
Account Operators0000000000
Administrators15150812041500
Backup Operators2201202200
Certificate Operators0000000000
Certificate Publishers0000000000
Dns Admins0000000000
Domain Administrators11110410041100
Enterprise Administrators8804503800
Enterprise Key Administrators0000000000
Key Administrators0000000000
Print Operators0000000000
Replicator0000000000
Schema Administrators4401303400
Server Operators0000000000
[15]
SamAccountName Enabled Active Pwd never Expired Locked Smart Card required Service account Flag Cannot be delegated present Creation date Last login Password last set In Protected Users Distinguished name 
AdministratorYESYESNONONOYESNO2025-05-01 23:27:12Z2025-12-17 12:45:37Z2025-05-02 00:16:58ZNOCN=Administrator,CN=Users,DC=domain,DC=local
AdminKerb1YESNOYESNONOYESNO2026-01-22 23:09:32ZNot set2026-01-22 23:09:32ZNOCN=AdminKerb1,OU=Admin,DC=domain,DC=local
DAYESYESYESNONONONO2025-05-01 23:51:34Z2026-01-26 09:49:01Z2025-10-17 14:51:09ZNOCN=DA,CN=Users,DC=domain,DC=local
ED_MERRILLYESNONONONONONO2025-09-11 14:13:00ZNot set2025-09-11 15:13:00ZNOCN=ED_MERRILL,OU=People,DC=domain,DC=local
NestedDAYESNOYESNONONONO2025-12-09 19:48:40ZNot set2025-12-09 19:48:40ZNOCN=NestedDA,OU=People,DC=domain,DC=local
RUPERT_COMPTONYESNONONONONONO2025-09-11 14:13:07ZNot set2025-09-11 15:13:07ZNOCN=RUPERT_COMPTON,OU=ESM,OU=People,DC=domain,DC=local
srv_1secureYESYESYESNONONONO2025-06-25 09:49:19Z2025-09-03 21:34:50Z2025-09-11 13:16:31ZNOCN=srv_1secure,OU=Admin,DC=domain,DC=local
srv_AAYESNOYESNONONONO2025-12-10 10:56:59ZNot set2025-12-10 10:56:59ZNOCN=srv_AA,OU=Admin,DC=domain,DC=local
srv_certsvcYESNOYESNONONONO2025-07-17 11:44:12Z2025-07-17 12:46:25Z2025-07-17 12:44:12ZNOCN=srv_certsvc,OU=Admin,DC=domain,DC=local
srv_na_colYESYESYESNONONONO2025-10-15 11:06:21Z2026-01-05 10:17:18Z2025-10-15 12:06:21ZNOCN=srv_na_col,OU=Admin,DC=domain,DC=local
srv_recoverYESYESYESNONONONO2025-11-21 11:26:21Z2025-12-13 19:49:01Z2025-11-21 11:26:21ZNOCN=srv_recover,OU=Admin,DC=domain,DC=local
srv_sdYESYESYESNONONONO2025-07-15 12:49:52Z2026-01-05 10:15:25Z2025-07-15 13:49:52ZNOCN=srv_sd,OU=Admin,DC=domain,DC=local
TestUser_DAYESYESYESNONOYESNO2025-06-19 13:32:37Z2025-11-04 13:12:29Z2025-11-04 13:20:52ZNOCN=TestUser_DA,OU=Testing,DC=domain,DC=local
TestUser_EAYESNOYESNONOYESNO2025-06-19 13:32:20ZNot set2025-06-19 14:32:20ZNOCN=TestUser_EA,OU=Testing,DC=domain,DC=local
TestUser_NEAYESNOYESNONONONO2025-06-19 17:00:11ZNot set2025-06-19 18:00:11ZNOCN=TestUser_NEA,OU=Testing,DC=domain,DC=local

Last Logon Distribution

Here is the distribution of the last logon of privileged users. Only enabled accounts are analyzed.

0-30 days30-60 days60-90 days90-120 days120-150 days150-180 days180-210 days210-240 days240-270 days270-300 days300-330 days330-360 days360-390 days390-420 days420-450 days450-480 days480-510 days510-540 days540-570 days570-600 days600-630 days630-660 days660-690 days690-720 days720-750 days750-780 days780-810 days810-840 days840-870 days870-900 days900-930 days930-960 days960-990 days990-1020 days1020-1050 days1050-1080 daysOther0246810

Password Age Distribution

Here is the distribution of the password age for privileged users. Only enabled accounts are analyzed.

0-30 days30-60 days60-90 days90-120 days120-150 days150-180 days180-210 days210-240 days240-270 days270-300 days300-330 days330-360 days360-390 days390-420 days420-450 days450-480 days480-510 days510-540 days540-570 days570-600 days600-630 days630-660 days660-690 days690-720 days720-750 days750-780 days780-810 days810-840 days840-870 days870-900 days900-930 days930-960 days960-990 days990-1020 days1020-1050 days1050-1080 daysOther0246810

Delegations

Each specific rights defined for Organizational Unit (OU) are listed below.

[33]
DistinguishedNameAccountRight
DC=domainDOMAIN\Domain ControllersEXT_RIGHT_REPLICATION_GET_CHANGES_ALL
DC=domainDOMAIN\MSOL_c92a2de74d9cEXT_RIGHT_REPLICATION_GET_CHANGES_ALL, EXT_RIGHT_FORCE_CHANGE_PWD
DC=domainDOMAIN\Robert.FalconEXT_RIGHT_REPLICATION_GET_CHANGES_ALL
DC=domainDOMAIN\TestUser3EXT_RIGHT_REPLICATION_GET_CHANGES_ALL
CN=Policies,CN=SystemDOMAIN\Group Policy Creator OwnersCreateChild, CreateChild (All Objects)
CN=RAS and IAS Servers Access Check,CN=SystemDOMAIN\RAS and IAS ServersGenericWrite, WriteDacl, WriteOwner, CreateChild, WriteDacl (All Objects), All extended right, DSSelf, Write all prop
CN=WMIPolicy,CN=SystemDOMAIN\Group Policy Creator OwnersGenericWrite, CreateChild, CreateChild (All Objects), DSSelf, Write all prop
CN=PolicyTemplate,CN=WMIPolicy,CN=SystemDOMAIN\Group Policy Creator OwnersCreateChild, CreateChild (All Objects)
CN=PolicyType,CN=WMIPolicy,CN=SystemDOMAIN\Group Policy Creator OwnersCreateChild, CreateChild (All Objects)
CN=SOM,CN=WMIPolicy,CN=SystemDOMAIN\Group Policy Creator OwnersGenericWrite, CreateChild, CreateChild (All Objects), DSSelf, Write all prop
CN=WMIGPO,CN=WMIPolicy,CN=SystemDOMAIN\Group Policy Creator OwnersCreateChild, CreateChild (All Objects)
OU=Domain ControllersDOMAIN\IT_Helpdesk_Tier1WriteOwner, WriteOwner (All Objects)
OU=TestingDOMAIN\TestUser1CreateChild, CreateChild (All Objects), WriteDacl, WriteDacl (Descendant msDS-DelegatedManagedServiceAccount)
OU=TestingDOMAIN\TestUser3GenericAll, GenericWrite, WriteDacl, WriteOwner, CreateChild, GenericAll (Descendant OUs)
OU=Test1,OU=TestingDOMAIN\ShouldNotShowWriteDacl, WriteOwner
OU=Test1,OU=TestingDOMAIN\TestUSer2CreateChild msDS-DelegatedManagedServiceAccount Objects
OU=VulnerableTest-20250619-160953,OU=TestingDOMAIN\TestUser1_VulnGenericAll, GenericWrite, WriteDacl, WriteOwner, CreateChild, GenericAll (All Objects), All extended right, DSSelf, Write all prop
OU=VulnerableTest-20250619-160953,OU=TestingDOMAIN\TestUser10_VulnWriteOwner, WriteOwner (Descendant OUs)
OU=VulnerableTest-20250619-160953,OU=TestingDOMAIN\TestUser11_VulnWriteDacl, WriteDacl (All Objects)
OU=VulnerableTest-20250619-160953,OU=TestingDOMAIN\TestUser12_VulnWriteDacl, WriteDacl (Descendant msDS-DelegatedManagedServiceAccount)
OU=VulnerableTest-20250619-160953,OU=TestingDOMAIN\TestUser13_VulnWriteDacl, WriteDacl (Descendant OUs)
OU=VulnerableTest-20250619-160953,OU=TestingDOMAIN\TestUser14_VulnCreateChild, CreateChild (All Objects)
OU=VulnerableTest-20250619-160953,OU=TestingDOMAIN\TestUser15_VulnCreateChild
OU=VulnerableTest-20250619-160953,OU=TestingDOMAIN\TestUser16_VulnCreateChild, CreateChild (Descendant OUs)
OU=VulnerableTest-20250619-160953,OU=TestingDOMAIN\TestUser17_VulnCreateChild msDS-DelegatedManagedServiceAccount Objects
OU=VulnerableTest-20250619-160953,OU=TestingDOMAIN\TestUser2_VulnWriteOwner, WriteOwner (All Objects)
OU=VulnerableTest-20250619-160953,OU=TestingDOMAIN\TestUser3_VulnWriteDacl, WriteDacl (All Objects)
OU=VulnerableTest-20250619-160953,OU=TestingDOMAIN\TestUser4_VulnCreateChild, CreateChild (All Objects)
OU=VulnerableTest-20250619-160953,OU=TestingDOMAIN\TestUser5_VulnGenericAll, GenericWrite, WriteDacl, WriteOwner, CreateChild, GenericAll (All Objects), All extended right, DSSelf, Write all prop
OU=VulnerableTest-20250619-160953,OU=TestingDOMAIN\TestUser6_VulnGenericAll, GenericWrite, WriteDacl, WriteOwner, CreateChild, GenericAll (Descendant msDS-DelegatedManagedServiceAccount)
OU=VulnerableTest-20250619-160953,OU=TestingDOMAIN\TestUser7_VulnGenericAll, GenericWrite, WriteDacl, WriteOwner, CreateChild, GenericAll (Descendant OUs)
OU=VulnerableTest-20250619-160953,OU=TestingDOMAIN\TestUser8_VulnWriteOwner, WriteOwner (All Objects)
OU=VulnerableTest-20250619-160953,OU=TestingDOMAIN\TestUser9_VulnWriteOwner, WriteOwner (Descendant msDS-DelegatedManagedServiceAccount)

The OU that are listed as not protected are:

[5]
DistinguishedName
OU=Domain Controllers
OU=GPOTest
OU=Systems
OU=Clients,OU=Systems
OU=Servers,OU=Systems

In particular for AD database access (DCSync, AADConnect, ...).

[4]
DistinguishedNameAccountRight
DC=domainDOMAIN\Domain ControllersEXT_RIGHT_REPLICATION_GET_CHANGES_ALL
DC=domainDOMAIN\MSOL_c92a2de74d9cEXT_RIGHT_REPLICATION_GET_CHANGES_ALL, EXT_RIGHT_FORCE_CHANGE_PWD
DC=domainDOMAIN\Robert.FalconEXT_RIGHT_REPLICATION_GET_CHANGES_ALL
DC=domainDOMAIN\TestUser3EXT_RIGHT_REPLICATION_GET_CHANGES_ALL

This section focuses on permissions issues that can be exploited to take control of the domain.
This is an advanced section that should be examined after having looked at the Admin Groups section.

Foreign domain involved

This analysis focuses on accounts found in control path and located in other domains.

No operative link with other domains has been found.

Indirect links

This part tries to summarize in a single table if major issues have been found.
Focus on finding critical objects such as the Everyone group then try to decrease the number of objects having indirect access.
The detail is displayed below.

Priority to remediate Critical Object Found Number of objects with Indirect Max number of indirect numbers Max ratio 
CriticalYES5225
HighNO1150
MediumYES120
OtherYES120

Admin groups

If the report has been saved which the full details, each object can be zoomed with its full detail. If it is not the case, for privacy reasons, only general statistics are available.

Group or user account Priority Users member Computer member of the group Indirect control Unresolved members Links Detail 
Account OperatorsHigh0000NoneAnalysis
AdministratorCritical00NoneAnalysis
AdministratorsCritical15 (Details)01 (Details)0NoneAnalysis
Backup OperatorsHigh2 (Details)01 (Details)0NoneAnalysis
Certificate OperatorsMedium0000NoneAnalysis
Certificate PublishersOther02 (Details)2 including EVERYONE (Details)0NoneAnalysis
Dns AdminsMedium0000NoneAnalysis
Domain AdministratorsCritical11 (Details)01 (Details)0NoneAnalysis
Enterprise AdministratorsCritical8 (Details)01 (Details)0NoneAnalysis
Enterprise Key AdministratorsMedium0000NoneAnalysis
Key AdministratorsMedium0000NoneAnalysis
Print OperatorsMedium0000NoneAnalysis
ReplicatorMedium0000NoneAnalysis
Schema AdministratorsCritical4 (Details)01 (Details)0NoneAnalysis
Server OperatorsHigh0000NoneAnalysis

Critical Infrastructure

If the report has been saved which the full details, each object can be zoomed with its full detail. If it is not the case, for privacy reasons, only general statistics are available.

Group or user account Priority Users member Computer member of the group Indirect control Unresolved members Links Detail 
AdminSDHolder containerCritical00NoneAnalysis
Builtin OUMedium00NoneAnalysis
Certificate storeMedium00NoneAnalysis
Computers containerMedium00NoneAnalysis
Domain ControllersCritical02 (Details)2 including EVERYONE (Details)0NoneAnalysis
Domain RootMedium00NoneAnalysis
Enterprise Read Only Domain ControllersOther0000NoneAnalysis
Group Policy Creator OwnersMedium1 (Details)000NoneAnalysis
Krbtgt accountMedium00NoneAnalysis
Read Only Domain ControllersMedium01 (Details)2 including EVERYONE (Details)0NoneAnalysis
Users containerMedium00NoneAnalysis

This section focuses on the relations that this domain has with other domains

Discovered Domains

This part displays the direct links that this domain has with other domains.

Trust PartnerTypeAttributDirection SID Filtering active TGT Delegation Creation Is Active ? Algorithm 
child.domain.local UplevelIntra-ForestBidirectionalNot applicableNot applicable2025-07-24 11:36:39ZTRUEDefault (RC4)

Reachable Domains

These are the domains that PingCastle was able to detect but which is not releated to direct trusts. It may be children of a forest or bastions.

Reachable domainDiscovered usingNetbiosCreation date
PKI

Certificates

This detects trusted certificates which can be used in man in the middle attacks, or which can issue smart card logon certificates

Number of trusted certificates: 2

[2]
SourceStoreSubjectIssuerNotBeforeNotAfterModule sizeSignature AlgSC Logon
Enterprise NTAuth NTLMStoreCN=Contoso-ENT-ROOT-CA, DC=domain, DC=localCN=Contoso-ENT-ROOT-CA, DC=domain, DC=local2026-01-07 15:37:33Z2036-01-07 15:47:23Z4096sha256RSAFalse
Enterprise NTAuth NTLMStoreCN=Enterprise CA, DC=domain, DC=localCN=Enterprise CA, DC=domain, DC=local2025-05-02 16:00:27Z2030-05-02 16:10:27Z2048sha256RSAFalse

Certificate Templates

This section lists certificate templates which can be used to generate a certificate. A misconfiguration can allow an attacker to create its own certificate and use it to impersonate other users

Number of certificate templates: 15

[15]
NameDestinationManager approval Enrollee can supply subject Issuance requirements Vulnerable ACL Everyone can enroll Agent template Any purpose For Authentication Flag No Security 
User UserNONONONOYESNONOYESNO
EFS UserNONONONOYESNONONONO
Administrator UserNONONONONONONOYESNO
EFSRecovery UserNONONONONONONONONO
Machine ComputerNONONONOYESNONOYESNO
DomainController ComputerNONONONONONONOYESNO
WebServer ComputerNOYESNONONONONONONO
SubCA ComputerNOYESNONONONOYESYESNO
DomainControllerAuthentication ComputerNONONONONONONOYESNO
DirectoryEmailReplication ComputerNONONONONONONONONO
KerberosAuthentication ComputerNONONONONONONOYESNO
WebServerCustomURL ComputerNOYESNONOYESNONONONO
ESC1 UserNOYESNONOYESNONOYESNO
ESC2 UserNONONONOYESNOYESYESNO
ESC3-Enrollment UserNONONONOYESYESNONONO

The delegations for certificate templates are listed below.

[19]
DistinguishedNameAccountRight
CN=DirectoryEmailReplication,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=ConfigurationDOMAIN\Domain ControllersEnroll
CN=DirectoryEmailReplication,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=ConfigurationDOMAIN\Enterprise Read-only Domain ControllersEnroll
CN=DomainController,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=ConfigurationDOMAIN\Domain ControllersEnroll
CN=DomainController,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=ConfigurationDOMAIN\Enterprise Read-only Domain ControllersEnroll
CN=DomainControllerAuthentication,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=ConfigurationDOMAIN\Domain ControllersEnroll
CN=DomainControllerAuthentication,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=ConfigurationDOMAIN\Enterprise Read-only Domain ControllersEnroll
CN=EFS,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=ConfigurationDomain UsersEnroll
CN=ESC1,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=ConfigurationAuthenticated UsersEnroll
CN=ESC1,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=ConfigurationDOMAIN\DAGenericWrite, WriteDacl, WriteOwner, CreateChild, WriteDacl (All Objects), DSSelf, Write all prop
CN=ESC2,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=ConfigurationAuthenticated UsersEnroll
CN=ESC2,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=ConfigurationDOMAIN\DAGenericWrite, WriteDacl, WriteOwner, CreateChild, WriteDacl (All Objects), DSSelf, Write all prop
CN=ESC3-Enrollment,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=ConfigurationAuthenticated UsersEnroll
CN=ESC3-Enrollment,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=ConfigurationDOMAIN\DAGenericWrite, WriteDacl, WriteOwner, CreateChild, WriteDacl (All Objects), DSSelf, Write all prop
CN=KerberosAuthentication,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=ConfigurationDOMAIN\Domain ControllersEnroll
CN=KerberosAuthentication,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=ConfigurationDOMAIN\Enterprise Read-only Domain ControllersEnroll
CN=Machine,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=ConfigurationDomain ComputersEnroll
CN=User,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=ConfigurationDomain UsersEnroll
CN=WebServerCustomURL,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=ConfigurationAuthenticated UsersEnroll
CN=WebServerCustomURL,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=ConfigurationDOMAIN\AdministratorGenericWrite, WriteDacl, WriteOwner, CreateChild, WriteDacl (All Objects), DSSelf, Write all prop

Domain Controller Certificate

This section lists certificates in use on Domain Controllers. They give an attacker hints about the PKI configuration.

Number of DC certificates: 3

[3]
DC NameSubjectSAN EKU Template NotBeforeNotAfterModule sizeSignature Alg
DCCN=DC.domain.localDC.domain.localClient Authentication, Server Authentication, 2025-05-02 16:44:53Z2026-05-02 16:44:53Z2048sha256RSA
DC2CN=DC2.domain.localDC2.domain.localClient Authentication, Server Authentication, 2025-05-02 19:25:52Z2026-05-02 19:25:52Z2048sha256RSA
RODCCN=rodc.domain.localrodc.domain.localClient Authentication, Server Authentication, 2025-05-02 23:49:31Z2026-05-02 23:49:31Z2048sha256RSA

Microsoft Entra Connect settings

Microsoft Entra Connect help maintaining a synchronization between the Active Directory and Entra ID. Microsoft Entra Connect servers should be considered as Tiers0 as they usually have the right to read the hashes of the user passwords.

Identifier Computer Tenant IsEnabled Created LastLogon PwdLastSet Computer object found 

WSUS settings

WSUS settings allow workstations and servers located on the intranet to be updated. The reference documentation is here. Here are the settings found in GPO.

Policy NameWSUS Server UseWUServer ElevateNonAdmins AUOptions NoAutoUpdate NoAutoRebootWithLoggedOnUsers 

Exchange settings

Exchange is the mail server of Microsoft. Because it is deeply integrated into the Active Directory, it is a component to be monitored

PingCastle is checking objects of type msExchExchangeServer and the schema to provide the information below.

NameIn service dateVersionProxy

SCCM settings

SCCM or its more recent name Microsoft Endpoint Manager is the Microsoft tool to manage the workstations and servers. It is used typically to deploy packages.

PingCastle is checking objects of type mSSMSManagementPoint and the schema to provide the information below.

NameVersionClient operational versionAAD TenantIDAAD TenantName

Service Connection Points

Service Connection Points are a configuration stored in the AD to expose services to all computers.

Service Class DNS Binding Info DN 

Replacement of RC4 by AES in kerberos

This section checks for known pain points in AES activation and RC4 removal for kerberos

This section is here to evaluate the know problems when removing RC4. If you plan to do so, you should check all the items highlighted below and proceed with a small group of test computers.

Please see the following articles:

This program will proceed to know:

  • That the infrastructure is compatible with AES. It will asserts that all client accounts have an AES hash.
  • That all services (trust, ...) can accept AES kerberos tickets. This is done by checking the special attribute msDS-SupportedEncryptionTypes.
  • That the AES algorithm is pushed to the client by GPO. This is done by looking at the setting 'Configure encryption types allowed for Kerberos'.

Infrastructure

This program starts by determining for how long the infrastructure in place is compatible with AES.

This is done by retrieving the creation date of the groupe 'Read-Only Domain Controllers' which is linked to the first DC compatible with AES (Windows Server 2008).

Installation date of the first DC compatible with AES: 2025-05-01 23:28:07Z

All passwords saved after this date have their hash saved with both RC4 and AES.

Krbtgt

To issue Kerberos ticket, the krbtgt account holding the kerberos secret key must have a password changed AFTER the installation of the first DC compatible with AES.

Last krbtgt change: 2025-05-02 00:28:07Z

OK

Domain Controllers

To support AES, all DC must be at least Windows 2008.

Domain ControllerOSAES compatible
DCWindows 2019Yes
DC2Windows 2019Yes
RODCWindows 2019Yes

OK

Trusts

To be used over trusts, AES requires the trust to support this algorithm. This is done thought the special attribute msDS-SupportedEncryptionTypes.

Be aware that checking 'The other domain supports Kerberos AES Encryption' in the trust property disables RC4. This check is not recommended during the migration phase.

Trust PartnerCreation Is Active ? Algorithm AES compatible
child.domain.local 2025-07-24 11:36:39ZTRUEDefault (RC4)No

Not OK

Azure

To be used over Azure, the special AzureSSO account must be setup to support AES.

No Entra ID SSO detected

OK

Service accounts

Kerberos tickets for services are signed by the password hash of the service account. The service account must be declared as compatible to handle AES. This is done through the special attribute named msDS-SupportedEncryptionTypes or by checking 'This account supports Kerberos AES XXX bit encryption' in the account properties.

The service account must also have a password newer than the first DC compatible with AES. If there was no password change, the creation date must be newer than the first DC compatible with AES.

If a service account is not compatible, you will received error messages like 'The encryption type requested is not supported by the KDC'. See the following KB for SharePoint of SCCM errors:

Number of service account found without AES configuration: 25

[25]
NameCreationLast logonPwd Last SetDistinguished name
Administrator2025-05-01 23:27:12Z2025-12-17 12:45:37Z2025-05-02 00:16:58ZCN=Administrator,CN=Users,DC=domain,DC=local
AdminKerb12026-01-22 23:09:32ZNever2026-01-22 23:09:32ZCN=AdminKerb1,OU=Admin,DC=domain,DC=local
AWSWAPPS1000000$2025-09-11 14:04:43ZNever2025-09-11 15:04:43ZCN=AWSWAPPS1000000,OU=T2-Devices,OU=Tier 2,OU=Admin,DC=domain,DC=local
AWSWWEBS1000000$2025-09-11 14:04:44ZNever2025-09-11 15:04:44ZCN=AWSWWEBS1000000,OU=TestOU_030,OU=GPOTest,DC=domain,DC=local
AWSWWKS1000002$2025-09-11 14:13:39ZNever2025-09-11 15:13:39ZCN=AWSWWKS1000002,OU=Test,OU=ESM,OU=Tier 2,DC=domain,DC=local
AZRWCTRX1000000$2025-09-11 14:04:37ZNever2025-09-11 15:04:37ZCN=AZRWCTRX1000000,OU=Testing,DC=domain,DC=local
AZRWCTRX1000004$2025-09-11 14:13:28ZNever2025-09-11 15:13:28ZCN=AZRWCTRX1000004,OU=ServiceAccounts,OU=AWS,OU=Stage,DC=domain,DC=local
BDEWVIR1000000$2025-09-11 14:04:44ZNever2025-09-11 15:04:44ZCN=BDEWVIR1000000,OU=Groups,OU=FIN,OU=Tier 1,DC=domain,DC=local
FINWCTRX1000001$2025-09-11 14:13:42ZNever2025-09-11 15:13:42ZCN=FINWCTRX1000001,OU=ServiceAccounts,OU=ITS,OU=Stage,DC=domain,DC=local
FINWVIR1000003$2025-09-11 14:13:25ZNever2025-09-11 15:13:25ZCN=FINWVIR1000003,OU=ServiceAccounts,OU=AWS,OU=Tier 1,DC=domain,DC=local
FSRWAPPS1000001$2025-09-11 14:04:57ZNever2025-09-11 15:04:57ZCN=FSRWAPPS1000001,OU=Devices,OU=AWS,OU=Tier 1,DC=domain,DC=local
FSRWVIR1000001$2025-09-11 14:04:47ZNever2025-09-11 15:04:47ZCN=FSRWVIR1000001,OU=TestOU_033,OU=GPOTest,DC=domain,DC=local
FSRWWKS1000000$2025-09-11 14:04:49ZNever2025-09-11 15:04:49ZCN=FSRWWKS1000000,OU=TestOU_047,OU=GPOTest,DC=domain,DC=local
GOOWDBAS1000002$2025-09-11 14:13:43ZNever2025-09-11 15:13:43ZCN=GOOWDBAS1000002,OU=TestOU_008,OU=GPOTest,DC=domain,DC=local
GOOWSECS1000000$2025-09-11 14:04:57ZNever2025-09-11 15:04:57ZCN=GOOWSECS1000000,OU=T2-Devices,OU=Tier 2,OU=Admin,DC=domain,DC=local
HREWVIR1000002$2025-09-11 14:13:28ZNever2025-09-11 15:13:29ZCN=HREWVIR1000002,OU=TST,OU=Tier 1,DC=domain,DC=local
ITSWWKS1000003$2025-09-11 14:13:45ZNever2025-09-11 15:13:45ZCN=ITSWWKS1000003,OU=TestOU_044,OU=GPOTest,DC=domain,DC=local
kerbdeleg22025-08-28 13:11:13ZNever2025-10-28 12:49:30ZCN=kerbdeleg2,OU=Admin,DC=domain,DC=local
KerbRoast12025-07-29 12:24:09ZNever2025-07-29 13:24:09ZCN=KerbRoast1,OU=Admin,DC=domain,DC=local
OGCWAPPS1000000$2025-09-11 14:13:40ZNever2025-09-11 15:13:40ZCN=OGCWAPPS1000000,OU=Test,OU=AZR,OU=Tier 1,DC=domain,DC=local
SECWDBAS1000001$2025-09-11 14:04:51ZNever2025-09-11 15:04:51ZCN=SECWDBAS1000001,OU=TestOU_025,OU=GPOTest,DC=domain,DC=local
TestUser_DA2025-06-19 13:32:37Z2025-11-04 13:12:29Z2025-11-04 13:20:52ZCN=TestUser_DA,OU=Testing,DC=domain,DC=local
TestUser_EA2025-06-19 13:32:20ZNever2025-06-19 14:32:20ZCN=TestUser_EA,OU=Testing,DC=domain,DC=local
TSTWLPT1000002$2025-09-11 14:13:32ZNever2025-09-11 15:13:32ZCN=TSTWLPT1000002,OU=ServiceAccounts,OU=HRE,OU=Tier 1,DC=domain,DC=local
TSTWWKS1000000$2025-09-11 14:04:54ZNever2025-09-11 15:04:54ZCN=TSTWWKS1000000,OU=T2-Permissions,OU=Tier 2,OU=Admin,DC=domain,DC=local

Not OK

GPO to set encryption

The algorithm to use for kerberos request is decided by a local GPO which is overwritten by domain GPO.

Here is the list of domain GPO altering the kerberos algorithms

Policy NameAlgorithm AES compatibleRC4 compatible

OK

Beware that no GPO supporting AES / RC4 have been found and if the supported algorithm is not defined in the master, AES will not be enabled by default

This section focuses on security checks specific to the Active Directory environment.

Backup

The program checks the last date of the AD backup. This date is computed using the replication metadata of the attribute dsaSignature (reference).

Last backup date: 2025-06-30 13:44:11Z

LAPS

LAPS is used to have a unique local administrator password on all workstations / servers of the domain. Then this password is changed at a fixed interval. The risk is when a local administrator hash is retrieved and used on other workstation in a pass-the-hash attack. Please note that the LAPS schema is installed on the forest and as a consequence the installation date can be before the domain creation date.

Mitigation: having a process when a new workstation is created or install LAPS and apply it through a GPO

Legacy LAPS installation date: 2025-09-11 14:04:04Z

Windows LAPS installation date: 2025-11-06 11:37:10Z

Windows Event Forwarding (WEF)

Windows Event Forwarding is a native mechanism used to collect logs on all workstations / servers of the domain. Microsoft recommends to Use Windows Event Forwarding to help with intrusion detection Here is the list of servers configured for WEF found in GPO

Number of WEF configuration found: 0

krbtgt (Used for Golden ticket attacks)

The account password for the krbtgt account should be rotated twice yearly at a minimum. More frequent password rotations are recommended, with 40 days the current recommendation by ANSSI. Additional rotations based on external events, such as departure of an employee who had privileged network access, are also strongly recommended.

You can perform this action using this script

You can use the version gathered using replication metadata from two reports to guess the frequency of the password change or if the two consecutive resets have been done. Version starts at 1.

Kerberos password last changed: 2025-05-02 00:28:07Z version: 2

AdminSDHolder (detect temporary elevated accounts)

This control detects accounts which are former 'unofficial' admins. Indeed when an account belongs to a privileged group, the attribute admincount is set. If the attribute is set without being an official member, this is suspicious. To suppress this warning, the attribute admincount of these accounts should be removed after review.

Number of accounts to review: 0

Unix Passwords

This control detects if one of the attributes userPassword or unixUserPassword has been set on accounts. Indeed, these attributes are designed to store encrypted secrets for unix (or mainframe) interconnection. However in the large majority, interconnected systems are poorly designed and the user password is stored in these attributes in clear text or poorly encrypted. The userPassword attribute is also used in classic LDAP systems to change the user password by setting its value. But, with Active Directory, it is considered by default as a normal attribute and doesn't trigger a password but shows instead the password in clear text.

Number of accounts to review: 0

Java code reference

This control detects if one of the attributes javaCodebase, javaFactory or javaClassname has been set on accounts. Indeed, these attributes are designed to add custom code to AD object when running java code. However it can be abused to run code on servers having the flag com.sun.jndi.ldap.object.trustURLCodebase set to true. This is a vulnerability similar to the log4shell vulnerability.

Java Schema extension: Not Found

No active user account found with Java code

Logon scripts

You can check here for backdoors or typos in the scriptPath attribute

Script NameCount
None257

Advanced

This section display advanced information, if any has been found

Password policies

Note: PSO (Password Settings Objects) will be visible only if the user, which collected the information, has the permission to view it.
PSO shown in the report will be prefixed by "PSO:"

Policy NameComplexityMax Password AgeMin Password AgeMin Password LengthPassword HistoryReversible EncryptionLockout ThresholdLockout DurationReset account counter locker after
Default Domain Policy True42 day(s)1 day(s)724False0Not SetNot Set

Screensaver policies

This is the settings related to screensavers stored in Group Policies. Each non compliant setting is written in red.

Policy NameScreensaver enforcedPassword requestStart after (seconds)Grace Period (seconds)
Test_ScreenSaver_013 TrueNot Set900Not Set
Test_ScreenSaver_014 TrueNot Set900Not Set
Test_ScreenSaver_051 TrueNot Set900Not Set
Test_ScreenSaver_066 TrueNot Set900Not Set
Test_ScreenSaver_004 TrueNot Set900Not Set
Test_ScreenSaver_045 TrueNot Set900Not Set
Test_ScreenSaver_049 TrueNot Set900Not Set
Test_ScreenSaver_044 TrueNot Set900Not Set
Test_ScreenSaver_042 TrueNot Set900Not Set
Test_ScreenSaver_022 TrueNot Set900Not Set
Test_ScreenSaver_010 TrueNot Set900Not Set
Test_ScreenSaver_064 TrueNot Set900Not Set
Test_ScreenSaver_062 TrueNot Set900Not Set
Test_ScreenSaver_065 TrueNot Set900Not Set
Test_ScreenSaver_025 TrueNot Set900Not Set
Test_ScreenSaver_012 TrueNot Set900Not Set
Test_ScreenSaver_043 TrueNot Set900Not Set
Test_ScreenSaver_068 TrueNot Set900Not Set
Test_ScreenSaver_047 TrueNot Set900Not Set
Test_ScreenSaver_040 TrueNot Set900Not Set
Test_ScreenSaver_041 TrueNot Set900Not Set
Test_ScreenSaver_003 TrueNot Set900Not Set
Test_ScreenSaver_048 TrueNot Set900Not Set
Test_ScreenSaver_037 TrueNot Set900Not Set
Test_ScreenSaver_060 TrueNot Set900Not Set
Test_ScreenSaver_006 TrueNot Set900Not Set
Test_ScreenSaver_073 TrueNot Set900Not Set
Test_ScreenSaver_024 TrueNot Set900Not Set
Test_ScreenSaver_030 TrueNot Set900Not Set
Test_ScreenSaver_007 TrueNot Set900Not Set
Test_ScreenSaver_057 TrueNot Set900Not Set
Test_ScreenSaver_018 TrueNot Set900Not Set
Test_ScreenSaver_031 TrueNot Set900Not Set
Test_ScreenSaver_035 TrueNot Set900Not Set
Test_ScreenSaver_056 TrueNot Set900Not Set
Test_ScreenSaver_008 TrueNot Set900Not Set
Test_ScreenSaver_028 TrueNot Set900Not Set
Test_ScreenSaver_021 TrueNot Set900Not Set
Test_ScreenSaver_009 TrueNot Set900Not Set
Test_ScreenSaver_055 TrueNot Set900Not Set
Test_ScreenSaver_070 TrueNot Set900Not Set
Test_ScreenSaver_015 TrueNot Set900Not Set
Test_ScreenSaver_071 TrueNot Set900Not Set
Test_ScreenSaver_075 TrueNot Set900Not Set
Test_ScreenSaver_032 TrueNot Set900Not Set
Test_ScreenSaver_026 TrueNot Set900Not Set
Test_ScreenSaver_027 TrueNot Set900Not Set
Test_ScreenSaver_072 TrueNot Set900Not Set
Test_ScreenSaver_011 TrueNot Set900Not Set
Test_ScreenSaver_002 TrueNot Set900Not Set
Test_ScreenSaver_036 TrueNot Set900Not Set
Test_ScreenSaver_074 TrueNot Set900Not Set
Test_ScreenSaver_023 TrueNot Set900Not Set
Test_ScreenSaver_029 TrueNot Set900Not Set
Test_ScreenSaver_063 TrueNot Set900Not Set
Test_ScreenSaver_039 TrueNot Set900Not Set
Test_ScreenSaver_017 TrueNot Set900Not Set
Test_ScreenSaver_038 TrueNot Set900Not Set
Test_ScreenSaver_058 TrueNot Set900Not Set
Test_ScreenSaver_034 TrueNot Set900Not Set
Test_ScreenSaver_067 TrueNot Set900Not Set
Test_ScreenSaver_054 TrueNot Set900Not Set
Test_ScreenSaver_005 TrueNot Set900Not Set
Test_ScreenSaver_050 TrueNot Set900Not Set
Test_ScreenSaver_019 TrueNot Set900Not Set
Test_ScreenSaver_069 TrueNot Set900Not Set
Test_ScreenSaver_052 TrueNot Set900Not Set
Test_ScreenSaver_046 TrueNot Set900Not Set
Test_ScreenSaver_033 TrueNot Set900Not Set
Test_ScreenSaver_016 TrueNot Set900Not Set
Test_ScreenSaver_061 TrueNot Set900Not Set
Test_ScreenSaver_053 TrueNot Set900Not Set
Test_ScreenSaver_020 [Not linked] TrueNot SetNot SetNot Set
Test_ScreenSaver_001 TrueNot Set900Not Set
Test_ScreenSaver_059 TrueNot Set900Not Set
GPO

This section focuses on security settings stored in the Active Directory technical security policies.

Obfuscated Passwords

The password in GPO are obfuscated, not encrypted. Consider any passwords listed here as compromised and change them immediately.

Restricted Groups

Giving local group membership in a GPO is a way to become administrator.
The local admin of a domain controller can become domain administrator instantly.

Security settings

A GPO can be used to deploy security settings to workstations.
The best practice out of the default security baseline is reported in green.
The following settings in red are unsual and may need to be reviewed.
Each setting is accompanied with its value and a link to the GPO explanation.

You will find below the checks where no occurences have been found

Audit settings

Audit settings allow the system to generate logs which are useful to detect intrusions. Here are the settings found in GPO.

Simple audit events are described here and Advanced audit events are described here

You can get a list of all audit settings with the command line: auditpol.exe /get /category:* (source)

Simple audit settings are located in: Computer Configuration / Policies / Windows Settings / Security Settings / Local Policies / Audit Policy. Simple audit settings are named [Simple Audit].

Advanced audit settings are located in: Computer Configuration / Policies / Windows Settings / Security Settings / Advanced Audit Policy Configuration. This category is displayed below.

Policy NameCategorySettingValue
Default Domain Controllers Policy [Simple Audit]Audit system eventsSuccess and Failure
Default Domain Controllers Policy [Simple Audit]Audit logon eventsSuccess and Failure
Default Domain Controllers Policy [Simple Audit]Audit account managementSuccess
Default Domain Controllers Policy [Simple Audit]Audit account logon eventsSuccess and Failure
Default Domain Controllers Policy [Simple Audit]Audit directory service accessSuccess
EventLog Account LogonCredential ValidationSuccess and Failure
EventLog Logon/LogoffLogoffSuccess and Failure
EventLog Logon/LogoffLogonSuccess and Failure
EventLog SystemSecurity State ChangeSuccess and Failure
EventLog Logon/LogoffOther Logon/LogoffSuccess and Failure
EventLog Account LogonKerberos Service Ticket OperationsSuccess and Failure
EventLog Account LogonKerberos Authentication ServiceSuccess and Failure
EventLog Account ManagementUser Account ManagementSuccess
EventLog Account ManagementComputer Account ManagementSuccess
EventLog Account ManagementSecurity Group ManagementSuccess
EventLog Account ManagementDistribution Group ManagementSuccess
EventLog DS AccessDirectory Service AccessSuccess

Privileges

Giving privileges in a GPO is a way to become administrator without being part of a group.
For example, SeTcbPriviledge gives the right to act as SYSTEM, which has more privileges than the administrator account.

GPO NamePrivilegeMembers
TrustedCred SeTrustedCredManAccessPrivilege<empty>
Default Domain Controllers Policy SeAssignPrimaryTokenPrivilegeS-1-5-82-3876422241-1344743610-1729199087-774402673-2621913236
Default Domain Controllers Policy SeAssignPrimaryTokenPrivilegeNT AUTHORITY\NETWORK SERVICE
Default Domain Controllers Policy SeAssignPrimaryTokenPrivilegeNT AUTHORITY\LOCAL SERVICE
Default Domain Controllers Policy SeAssignPrimaryTokenPrivilegeS-1-5-82-3006700770-424185619-1745488364-794895919-4004696415
Default Domain Controllers Policy SeAssignPrimaryTokenPrivilegeS-1-5-82-271721585-897601226-2024613209-625570482-296978595
Default Domain Controllers Policy SeBackupPrivilegeBUILTIN\Server Operators
Default Domain Controllers Policy SeBackupPrivilegeBUILTIN\Backup Operators
Default Domain Controllers Policy SeBackupPrivilegeAdministrators
Default Domain Controllers Policy SeDebugPrivilegeAdministrators
Default Domain Controllers Policy SeLoadDriverPrivilegeBUILTIN\Print Operators
Default Domain Controllers Policy SeLoadDriverPrivilegeAdministrators
Default Domain Controllers Policy SeMachineAccountPrivilegeAuthenticated Users
Default Domain Controllers Policy SeRestorePrivilegeBUILTIN\Server Operators
Default Domain Controllers Policy SeRestorePrivilegeBUILTIN\Backup Operators
Default Domain Controllers Policy SeRestorePrivilegeAdministrators
Default Domain Controllers Policy SeSecurityPrivilegeAdministrators
Default Domain Controllers Policy SeTakeOwnershipPrivilegeAdministrators
Default Domain Controllers Policy SeEnableDelegationPrivilegeAdministrators
Security Settings SeTrustedCredManAccessPrivilege<empty>

Login

Login authorization and restriction can be set by GPOs. Indeed, by default, everyone is allowed to login on every computer except domain controllers. Defining login restriction is a way to have different isolated tiers. Here are the settings found in GPOs.

GPO NamePrivilegeMembers
Default Domain Controllers Policy Log on as a batch job BUILTIN\IIS_IUSRS
Default Domain Controllers Policy Log on as a batch job BUILTIN\Performance Log Users
Default Domain Controllers Policy Log on as a batch job BUILTIN\Backup Operators
Default Domain Controllers Policy Log on as a batch job Administrators
Default Domain Controllers Policy Allow log on locally NT AUTHORITY\ENTERPRISE DOMAIN CONTROLLERS
Default Domain Controllers Policy Allow log on locally BUILTIN\Print Operators
Default Domain Controllers Policy Allow log on locally BUILTIN\Server Operators
Default Domain Controllers Policy Allow log on locally BUILTIN\Account Operators
Default Domain Controllers Policy Allow log on locally BUILTIN\Backup Operators
Default Domain Controllers Policy Allow log on locally Administrators
Default Domain Controllers Policy Access this computer from the network BUILTIN\Pre-Windows 2000 Compatible Access
Default Domain Controllers Policy Access this computer from the network NT AUTHORITY\ENTERPRISE DOMAIN CONTROLLERS
Default Domain Controllers Policy Access this computer from the network Authenticated Users
Default Domain Controllers Policy Access this computer from the network Administrators
Default Domain Controllers Policy Access this computer from the network Everyone

GPO Login script

A GPO login script is a way to force the execution of data on behalf of users. Only enabled users are analyzed.

GPO Deployed Files

A GPO can be used to deploy applications or copy files. These files may be controlled by a third party to control the execution of local programs.

Folder Options

File associations may be managed through Group Policy Objects (GPO) by navigating to "Folder Options". This setting is located under Computer Configuration / Preferences / Control Panel Settings / Folders Options in the GPO.

This method serves as an effective countermeasure against script execution from phishing emails by setting Notepad as the default program for opening script files, rather than the script engine. The script extensions that can be reconfigured include: .js, .jse, .vbs, .vbe, .vb, .wsh, and .wsf. Specifically, JavaScript files with extensions .js and .jse can be safely altered to open with Notepad. Other file extensions may have an impact and needs to be assessed before being configured.

GPO NameTypeAction Application
Security Settings jseRC:\Windows\System32\notepad.exe

Microsoft Defender ASR (attack surface reduction)

Microsoft Defender is the default Antivirus shipped with Windows. There are many alternatives, but if a computer is installed without an antivirus, it will be enabled by default.

A set of mitigation named ASR (attack surface reduction) can be enabled, even on non premium version of Microsoft Defender Antivirus (formerly Windows Defender Antivirus). Some protections are available since Windows 10 1710 and even Windows 2012 R2. See https://learn.microsoft.com/en-us/defender-endpoint/attack-surface-reduction-rules-reference?view=o365-worldwide for more information.

To enable a mitigation, enable the GPO "Configure Attack Surface Reduction rules" in Computer Configuration / Policies / Administrative Templates / Windows Components / Microsoft Defender Antivirus (formerly Windows Defender Antivirus) / Microsoft (Windows) Defender Exploit Guard / Attack Surface Reduction. After having Enabled the setting, click on Set the state for each ASR rule. Add the GUID of the mitigation as Value name and set 1 as Value to enforce the Block mode. Example for Block JavaScript or VBScript from launching downloaded executable content: d3e037e1-3eb8-44c8-a917-57927947596d. The other values are: 2 for Audit and 6 for Warn.

GPO NameRuleDescriptionAction

Firewall configuration

Firewall rules may be managed through Group Policy Objects (GPO). This setting is located under Computer Configuration / Policies Windows Settings / Security Settings / Windows Defender Firewall with Advanced Security.

GPO NameNameActiveDirectionActionApplicationRemote IP