Adversaries may attempt to access detailed information about the password policy used within an enterprise network or cloud environment. Password policies are a way to enforce complex passwords that are difficult to guess or crack through Brute Force. This information may help the adversary to create a list of common passwords and launch dictionary and/or brute force attacks which adheres to the policy (e.g. if the minimum password length should be 8, then not trying passwords such as 'pass123'; not checking for more than 3-4 passwords per account if the lockout is set to 6 as to not lock out accounts).
Password policies can be set and discovered on Windows, Linux, and macOS systems via various command shell utilities such as net accounts (/domain), Get-ADDefaultDomainPasswordPolicy, <code>chage -l <username></code>, cat /etc/pam.d/common-password, and pwpolicy getaccountpolicies.[1][2] Adversaries may also leverage a Network Device CLI on network devices to discover password policy information (e.g. show aaa, show aaa common-criteria policy all).[3]
Password policies can be discovered in cloud environments using available APIs such as GetAccountPasswordPolicy in AWS.[4]
64th pctamong all ATT&CK techniques for number of groups
3 groups have been recorded using this technique. Newest first; each entry carries MITRE’s procedure text and a link to the group’s full record. Click a name to filter the rules below.
During Operation CuckooBees, the threat actors used the net accounts command as part of their advanced reconnaissance.1
2019–2022
All 1 campaigns for this technique
4 software entries are documented implementing this technique. MITRE files each as a tool or as malware; newest first, then by how many groups carry them.
MITRE names one behaviour worth catching for this technique and breaks it into 7 analytics, one per platform. Each carries the log sources it needs and the fields you tune per environment.
Cause→effect chain: (1) a user or service spawns a shell/PowerShell that queries local/domain password policy via commands/cmdlets (e.g., net accounts, Get-ADDefaultDomainPasswordPolicy, secedit /export); (2) optional directory/LDAP reads from DCs; (3) same principal performs adjacent Discovery or credential-related actions within a short window. Correlate sysmon process creation with PowerShell ScriptBlock and Security logs.
Log sources
The data this analytic draws on. You do not need every component — each one you already collect covers part of it. Each links to its ATT&CK record.
MITRE calls these the analytic’s mutable elements: the thresholds and filters you set for your own environment.
Field
What you tune
TimeWindow
Correlation window between policy query and adjacent suspicious activity (e.g., 15–30 minutes).
PrivilegedUserAllowList
Accounts (e.g., Helpdesk) allowed to run policy queries routinely.
HostRoleScope
Limit alerts on DCs/management servers; raise on user workstations/VDI.
PS_ScriptBlockPatterns
Cmdlet/function names to treat as high-signal in your environment.
AN0456 · Linux
Chain: (1) interactive/non-interactive chage -l, grep/cat of PAM config (e.g., /etc/pam.d/common-password, /etc/security/pwquality.conf); (2) optional reads of /etc/login.defs; (3) same user performs account enumeration or password change attempts shortly after. Use auditd execve and file read events plus shell history collection.
Log sources
The data this analytic draws on. You do not need every component — each one you already collect covers part of it. Each links to its ATT&CK record.
MITRE calls these the analytic’s mutable elements: the thresholds and filters you set for your own environment.
Field
What you tune
MonitoredPaths
Exact PAM/QoP config files used by your distro (Debian vs. RHEL paths differ).
ServiceAccountsExclude
System daemons that legitimately parse policies on boot.
TerminalType
TTY vs. non-interactive—raise risk for non-interactive remote execution.
AN0457 · macOS
Chain: (1) execution of pwpolicy or MDM/DirectoryService reads of account policies; (2) optional read of /Library/Preferences/com.apple.loginwindow or config profiles; (3) follow-on credential probing or lateral movement by same user/session. Use unified logs and process telemetry.
Log sources
The data this analytic draws on. You do not need every component — each one you already collect covers part of it. Each links to its ATT&CK record.
MITRE calls these the analytic’s mutable elements: the thresholds and filters you set for your own environment.
Field
What you tune
MDMProfileIDs
Approved profiles reading/updating auth policies.
AdminConsoleHosts
Jamf or management hosts where queries are expected.
AN0458 · IaaS
Chain: (1) cloud API calls that fetch tenant/organization password policy (e.g., AWS GetAccountPasswordPolicy, GCP/OCI equivalents or IAM settings reads); (2) within a short window, the same principal creates users, rotates creds, or changes auth settings. Use cloud audit logs.
Log sources
The data this analytic draws on. You do not need every component — each one you already collect covers part of it. Each links to its ATT&CK record.
MITRE calls these the analytic’s mutable elements: the thresholds and filters you set for your own environment.
Field
What you tune
CloudReadOnlyApps
Approved security tooling principals that routinely read policy.
ApiClientIPAllowList
Corporate egress IPs for administrative API access.
AN0459 · Identity Provider
Chain: (1) IdP policy/read operations by a principal (e.g., Microsoft Entra/Graph requests to read password or authentication policies); (2) adjacent risky changes (role assignment, app consent) by same principal. Use IdP audit logs.
Log sources
The data this analytic draws on. You do not need every component — each one you already collect covers part of it. Each links to its ATT&CK record.
operation contains 'Get*Password*Policy' OR 'List*Authentication*Policy' OR 'Get-ADDefaultDomainPasswordPolicy'
Tunable fields
MITRE calls these the analytic’s mutable elements: the thresholds and filters you set for your own environment.
Field
What you tune
TrustedPartnerAppIds
Legitimate partner apps that enumerate policies.
GeoRiskTolerance
Raise risk for unusual geo or TOR/VPN egress.
AN0460 · SaaS
Chain: (1) SaaS admin API or PowerShell remote session reads tenant password/authentication settings (e.g., M365 Unified Audit Log ‘Cmdlet’ with Get-MsolPasswordPolicy/Get-OrganizationConfig parameters that expose password settings); (2) same session proceeds to mailbox or tenant changes.
Log sources
The data this analytic draws on. You do not need every component — each one you already collect covers part of it. Each links to its ATT&CK record.
Workload=AzureActiveDirectory OR Exchange AND (Operation=Cmdlet AND Parameters contains 'Password' AND (CmdletName='Get-*' OR CmdletName='Get-OrganizationConfig'))
Tunable fields
MITRE calls these the analytic’s mutable elements: the thresholds and filters you set for your own environment.
Field
What you tune
SaaSAdminGroup
Known admin groups or break-glass accounts.
SessionAnomalyThreshold
Rate/volume of read operations per session considered anomalous.
AN0461 · Network Devices
Chain: (1) privileged CLI sessions run read-only commands that dump AAA/password policies (e.g., show aaa, show password-policy); (2) same account changes AAA or user DB shortly after. Use network device AAA/command accounting or syslog.
Log sources
The data this analytic draws on. You do not need every component — each one you already collect covers part of it. Each links to its ATT&CK record.
Ensure only valid password filters are registered. Filter DLLs must be present in Windows installation directory (C:\Windows\System32\ by default) of a domain controller and/or local computer with a corresponding entry in HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Notification Packages.
Tests12Executorsbash 5 · command_prompt 3 · sh 2 · powershell 2Need elevation1 of 12Have prerequisites3Have cleanup0Platformslinux, windows, macos, iaas:aws
#
Test
Platform
Executor
Elevation
Prereqs
Cleanup
Ref
01
Examine password complexity policy - Ubuntu
linux
bash
—
—
—
Lists the password complexity policy to console on Ubuntu Linux.
Attack Commandsrun with bash
cat /etc/pam.d/common-password
GUID085fe567-ac84-47c7-ac4c-2688ce28265b
02
Examine password complexity policy - FreeBSD
linux
sh
—
—
—
Lists the password complexity policy to console on FreeBSD.
if [ $(rpm -q --queryformat '%{VERSION}') -eq "6" ]; then exit /b 0; else exit /b 1; fi;
Get Prereq Commands
echo Please run from CentOS or RHEL v6
GUID6ce12552-0adb-4f56-89ff-95ce268f6358
05
Examine password expiration policy - All Linux
linux
bash
—
—
—
Lists the password expiration policy to console on CentOS/RHEL/Ubuntu.
Attack Commandsrun with bash
cat /etc/login.defs
GUID7c86c55c-70fa-4a05-83c9-3aa19b145d1a
06
Examine local password policy - Windows
windows
command_prompt
—
—
—
Lists the local password policy to console on Windows.
Attack Commandsrun with command_prompt
net accounts
GUID4588d243-f24e-4549-b2e3-e627acc089f6
07
Examine domain password policy - Windows
windows
command_prompt
—
—
—
Lists the domain password policy to console on Windows.
Attack Commandsrun with command_prompt
net accounts /domain
GUID46c2c362-2679-4ef5-aec9-0e958e135be4
08
Examine password policy - macOS
macos
bash
—
—
—
Lists the password policy to console on macOS.
Attack Commandsrun with bash
pwpolicy getaccountpolicies
GUID4b7fa042-9482-45e1-b348-4b756b2a0742
09
Get-DomainPolicy with PowerView
windows
powershell
—
—
—
Utilizing PowerView, run Get-DomainPolicy to return the default domain policy or the domain controller policy for the current domain or a specified domain/domain controller.
Enumerate Active Directory Password Policy with get-addefaultdomainpasswordpolicy
windows
powershell
—
—
—
The following Atomic test will utilize get-addefaultdomainpasswordpolicy to enumerate domain password policy.
Upon successful execution a listing of the policy implemented will display.
Reference: https://docs.microsoft.com/en-us/powershell/module/activedirectory/get-addefaultdomainpasswordpolicy?view=windowsserver2022-ps
Attack Commandsrun with powershell
get-addefaultdomainpasswordpolicy
GUIDb2698b33-984c-4a1c-93bb-e4ba72a0babb
11
Use of SecEdit.exe to export the local security policy (including the password policy)
windows
command_prompt
Required
—
—
SecEdit.exe can be used to export the current local security policy applied to a host.
Reference
Attack Commandsrun with command_promptelevation required (root or admin)
The following analytic detects the execution of `powershell.exe` running the `Get-ADDefaultDomainPasswordPolicy` cmdlet, which is used to retrieve the password policy in a Windows domain. (...)
The following analytic detects the execution of the `Get-ADDefaultDomainPasswordPolicy` PowerShell cmdlet, which is used to retrieve the password policy in a Windows domain. (...)
The following analytic detects the execution of `powershell.exe` running the `Get-ADUserResultantPasswordPolicy` cmdlet, which is used to obtain the password policy in a Windows domain. (...)
The following analytic detects the execution of the `Get-ADUserResultantPasswordPolicy` PowerShell cmdlet, which is used to obtain the password policy in a Windows domain. (...)
The following analytic detects the execution of `powershell.exe` running the `Get-DomainPolicy` cmdlet, which is used to retrieve password policies in a Windows domain. (...)
The following analytic identifies the execution of `net.exe` with command line arguments aimed at obtaining the computer or domain password policy. (...)