Do you still need a Password Policy nowadays?

๐Ÿ› ๏ธ Practical Bits

๐——๐—ผ ๐˜†๐—ผ๐˜‚ ๐˜€๐˜๐—ถ๐—น๐—น ๐—ป๐—ฒ๐—ฒ๐—ฑ ๐—ฎ ๐—ฃ๐—ฎ๐˜€๐˜€๐˜„๐—ผ๐—ฟ๐—ฑ ๐—ฃ๐—ผ๐—น๐—ถ๐—ฐ๐˜† ๐—ป๐—ผ๐˜„๐—ฎ๐—ฑ๐—ฎ๐˜†๐˜€?

Yes โ€” even if you use MFA or passwordless options.

In Active Directory there are always ๐—ฒ๐˜…๐—ฐ๐—ฒ๐—ฝ๐˜๐—ถ๐—ผ๐—ป๐˜€: service accounts, temporary accounts, break-glass accounts, newly created usersโ€ฆ and those still rely on passwords. Strong password + lockout policies ๐—ฟ๐—ฎ๐—ถ๐˜€๐—ฒ ๐˜๐—ต๐—ฒ ๐—ฏ๐—ฎ๐—ฟ against password spraying and brute force.

โœ… Hereโ€™s a simple checklist you can apply today:

1๏ธโƒฃ ๐—ข๐—ป๐—ฒ ๐—ฏ๐—ฎ๐˜€๐—ฒ๐—น๐—ถ๐—ป๐—ฒ ๐—ฝ๐—ฎ๐˜€๐˜€๐˜„๐—ผ๐—ฟ๐—ฑ + ๐—น๐—ผ๐—ฐ๐—ธ๐—ผ๐˜‚๐˜ ๐—ฝ๐—ผ๐—น๐—ถ๐—ฐ๐˜† (domain-wide)

Make sure you have one policy for the whole domain (use CIS/NIST as a reference, or your standard).

โ†’ And no โ€” ๐˜†๐—ผ๐˜‚ ๐—ฐ๐—ฎ๐—ปโ€™๐˜ โ€œ๐˜€๐˜๐—ฎ๐—ฐ๐—ธโ€ multiple GPOs for the default domain password/lockout policy.

2๏ธโƒฃ ๐—™๐—ถ๐—ป๐—ฒ-๐—š๐—ฟ๐—ฎ๐—ถ๐—ป๐—ฒ๐—ฑ ๐—ฃ๐—ฎ๐˜€๐˜€๐˜„๐—ผ๐—ฟ๐—ฑ ๐—ฃ๐—ผ๐—น๐—ถ๐—ฐ๐—ถ๐—ฒ๐˜€ (FGPP) for privileged + service accounts

If you can, create one or more FGPPs for:

โ€ข ๐—ฝ๐—ฟ๐—ถ๐˜ƒ๐—ถ๐—น๐—ฒ๐—ด๐—ฒ๐—ฑ admin accounts

โ€ข ๐˜€๐—ฒ๐—ฟ๐˜ƒ๐—ถ๐—ฐ๐—ฒ accounts

These often need stricter settings (especially length). FGPP is scoped to groups/identities, which is exactly what you want.

โ—Donโ€™t forget the hard part: ๐—ฒ๐—ป๐—ณ๐—ผ๐—ฟ๐—ฐ๐—ฒ๐—บ๐—ฒ๐—ป๐˜

Having a policy is only step one โ€” you still need to make accounts comply. They will change their passwords as expiration goes. But you also want to make sure there are ๐—ป๐—ผ ๐˜€๐˜๐—ฎ๐—น๐—ฒ, ๐—ถ๐—ป๐—ฎ๐—ฐ๐˜๐—ถ๐˜ƒ๐—ฒ and other kind of accounts with ๐—ต๐—ถ๐˜€๐˜๐—ผ๐—ฟ๐—ถ๐—ฐ ๐—ฝ๐—ฎ๐˜€๐˜€๐˜„๐—ผ๐—ฟ๐—ฑ๐˜€.

Start by finding accounts that havenโ€™t changed passwords in a long time (e.g., 1 year+) and review Password Never Expires.

____

๐—ฃ๐—ผ๐˜„๐—ฒ๐—ฟ๐—ฆ๐—ต๐—ฒ๐—น๐—น (๐—ฎ๐—ฐ๐—ฐ๐—ผ๐˜‚๐—ป๐˜๐˜€ ๐˜„๐—ถ๐˜๐—ต ๐—ฝ๐—ฎ๐˜€๐˜€๐˜„๐—ผ๐—ฟ๐—ฑ ๐—ผ๐—น๐—ฑ๐—ฒ๐—ฟ ๐˜๐—ต๐—ฎ๐—ป ๐Ÿญ ๐˜†๐—ฒ๐—ฎ๐—ฟ):

Get-ADUser -Filter ‘enabled -eq $true’ -Properties Name, PwdLastSet,lastlogonTimestamp | select name, @{N=’pwdlastset’ ; E={[DateTime]::FromFileTime($_.PwdLastSet)}}, @{N=’LastLogonTimestamp’ ; E={[DateTime]::FromFileTime($_.lastlogonTimestamp)}} | Where-Object {$_.PwdLastSet -le $(Get-Date -date $(get-date).AddDays(-365))} | Sort-Object -Property PwdLastSet

____

(๐™Š๐™ง ๐™ช๐™จ๐™š ๐™ข๐™ฎ ๐™›๐™ง๐™š๐™š ๐˜ผ๐˜ฟ๐™‹๐™ง๐™ค๐™—๐™š ๐™ฉ๐™ค๐™ค๐™ก)

Thatโ€™s it โ€” one small move, but a real step toward a safer AD.