Credentials & Identity

Password Spraying

A small set of common passwords is tried across many accounts to avoid per-user lockout thresholds.

FoundationalActive DirectoryEntra IDSaaSVPN
PRIMARY MAPPINGT1110.003

Credential Access

01
CONCEPT

What is it?

Password spraying reverses the usual brute-force pattern. Instead of many passwords against one user, an attacker tries one likely password against many users, pauses, and repeats. The wide distribution and low rate help it stay below account-lockout and alert thresholds.

ALSO KNOWN ASLow-and-slow brute forceHorizontal password attack
02
MENTAL MODEL

How it works in plain English

Use this three-part model to understand the attack without memorizing a tool name.

01 / TRUST BEING ABUSED

The system accepts a credential, token, ticket, recovery decision, or identity assertion as proof of who the requester is.

02 / ATTACKER ACTION

The attacker obtains, guesses, forges, replays, or changes that authentication material.

03 / DEFENDER VIEW

Focus on how the identity was acquired, where it was used, what device and network context changed, and what happened immediately after success.

Worked example: how the sequence may look

01 / Starting condition

A list of likely usernames or email addresses.

02 / Attacker action

Choose one password likely to satisfy complexity rules.

03 / Observable evidence

Windows 4625 failures and a later 4624 success.

04 / Detection decision

Count distinct usernames per source in a sliding window.

05 / Possible outcome

If successful, the attacker may continue with Cloud Account Takeover. This is a possibility, not a guaranteed next step.

This is a defensive learning scenario. Real incidents vary, and the listed outcome is only one possible path.

03
ATTACKER OBJECTIVE

Why do attackers use it?

  • Gain initial access through exposed identity services.

  • Find weak passwords without locking a single account.

  • Blend into normal failed-login noise by throttling attempts.

  • Validate usernames and identify accounts without MFA.

04
REQUIRED CONDITIONS

Prerequisites

  • A list of likely usernames or email addresses.

  • A reachable service such as VPN, OWA, SSO, RDP gateway, SSH, or SaaS.

  • Likely passwords based on season, organization, locale, or breach data.

  • Time or distributed infrastructure to keep the attempt rate low.

05
ATTACK CHAIN

Attack path possibilities

Attack chains are not fixed. These links show common possibilities to investigate before and after this behavior.

06
SEQUENCE

Step-by-step attack flow

01

Obtain or enumerate valid-looking account names.

02

Study exposed login services and password conventions.

03

Choose one password likely to satisfy complexity rules.

04

Try that password once across many accounts.

05

Pause to remain below lockout and rate thresholds.

06

Repeat with another password or source.

07

Use successful access against email, VPN, cloud apps, or internal services.

07
FRAMEWORK

MITRE ATT&CK mapping

TECHNIQUET1110.003
NAMEPassword Spraying
TACTICCredential Access
VERIFY ON MITRE ↗

ATT&CK is updated over time. Verify the live technique before operationalizing a detection.

08
EVIDENCE

Logs and artifacts

  • Windows 4625 failures and a later 4624 success.

  • Kerberos 4771 pre-authentication failures and NTLM 4776 validation failures.

  • Identity-provider sign-ins showing one source targeting many users.

  • VPN, OWA, SaaS, SSH, reverse-proxy, conditional-access, and MFA logs.

09
RAW TELEMETRY

Realistic log examples

REPRESENTATIVE, SANITIZED EXAMPLES

These records use realistic field names and formats but synthetic organizations, users, addresses, and identifiers. A single event is not proof; correlate time, identity, source, target, and the resulting action.

LOG SOURCEWindows Security — Event 4625

Failed authentication; useful for guessing, spraying, exposed remote services, and account targeting.

2026-07-16T14:22:31Z EventID=4625 Computer=DC01.corp.example
TargetUserName=j.singh TargetDomainName=CORP LogonType=3
AuthenticationPackageName=NTLM WorkstationName=WKSTN-442
IpAddress=203.0.113.48 IpPort=51842
Status=0xC000006D SubStatus=0xC000006A FailureReason="Unknown user name or bad password"
HOW TO INTERPRET IT FOR PASSWORD SPRAYING

Count distinct usernames per source in a sliding window.

LOG SOURCEMicrosoft Entra — SigninLogs

Cloud sign-in context including identity, application, source, result, device, and conditional access.

2026-07-16T14:24:51Z UserPrincipalName=j.singh@corp.example
AppDisplayName="Office 365 Exchange Online" IPAddress=203.0.113.48
ResultType=50126 ResultDescription="Invalid username or password"
ClientAppUsed=Browser ConditionalAccessStatus=notApplied
DeviceDetail.operatingSystem=Windows Location=SG
HOW TO INTERPRET IT FOR PASSWORD SPRAYING

Detect one failure pattern across many users even when each user has few failures.

LOG SOURCELinux auth.log / sshd

Remote authentication and PAM outcome with source address and account.

Jul 16 14:22:33 web02 sshd[24817]: Failed password for invalid user backup
from 203.0.113.48 port 51842 ssh2
Jul 16 14:22:37 web02 sshd[24817]: Failed password for deploy
from 203.0.113.48 port 51842 ssh2
HOW TO INTERPRET IT FOR PASSWORD SPRAYING

Correlate the failure wave with later success from the same IP, ASN, agent, or device.

READ EACH LOG WITH FIVE QUESTIONS
  1. Who or what identity acted?
  2. From which device, process, IP, or workload?
  3. What target and operation were involved?
  4. Did it fail, succeed, or change state?
  5. What correlated event happened immediately before and after?
10
ANALYTICS

Detection logic / SIEM queries

  • Count distinct usernames per source in a sliding window.

  • Detect one failure pattern across many users even when each user has few failures.

  • Correlate the failure wave with later success from the same IP, ASN, agent, or device.

  • Group distributed sources by hosting provider, fingerprint, and synchronized timing.

KQLMicrosoft Sentinel — broad failures across users
SigninLogs
| where TimeGenerated > ago(30m)
| where ResultType != "0"
| summarize Attempts=count(), Users=dcount(UserPrincipalName),
    UserList=make_set(UserPrincipalName, 20) by IPAddress, bin(TimeGenerated, 10m)
| where Users >= 10 and Attempts >= 15
| order by Users desc
SPLSplunk — one source, many failed users
index=auth action=failure earliest=-30m
| stats count as attempts dc(user) as users values(user) as targets by src_ip
| where users>=10 AND attempts>=15
| sort - users
11
HARDENING

Mitigations

  • Require phishing-resistant MFA for remote and privileged access.

  • Use smart lockout, risk-based conditional access, and edge rate limits.

  • Block legacy authentication and protocols that cannot enforce modern controls.

  • Reset known exposed credentials and block breached passwords.

  • Use long unique passwords and passwordless authentication where possible.

12
IN THE WILD

Real-world examples

  • APT28 has used throttled password spraying against public-facing services.

  • APT29 and APT33 have used password spraying for initial access.

  • Silent Librarian has sprayed accounts in education and private-sector targets.

13
REVIEW

Common questions

01How is it different from brute force?

Traditional brute force concentrates many guesses on one account. Spraying spreads a few guesses over many accounts.

02Why might no account be locked?

The attacker spaces attempts so each account remains below the lockout threshold.

03What is the strongest clue?

One source or coordinated source group failing against an unusually high number of users.

Primary verification sources