Brute Force
Adversaries may use brute force techniques to gain access to accounts when passwords are unknown or when password hashes are obtained. Without knowledge of the password for an account or set of accounts, an adversary may systematically guess the password using a repetitive or iterative mechanism. Brute forcing passwords can take place via interaction with a service that will check the validity of those credentials or offline against previously acquired credential data, such as password hashes. Threat actors including Fox Kitten, APT38, APT41, OilRig, and Turla have used brute force techniques against RDP, SSH, SMB, and web services.
// Brute Force Detection — Multiple failed logons followed by success, or high-volume failures
// Part 1: Windows Security Event failed logons (Event ID 4625)
let FailedLogonThreshold = 10;
let TimeWindowMinutes = 10;
let BruteForceAccounts =
SecurityEvent
| where TimeGenerated > ago(24h)
| where EventID == 4625
| where LogonType in (3, 10) // Network and RemoteInteractive
| summarize FailedCount = count(),
TargetAccounts = dcount(TargetAccount),
TargetAccountList = make_set(TargetAccount, 20),
FirstFailure = min(TimeGenerated),
LastFailure = max(TimeGenerated)
by IpAddress, Computer, bin(TimeGenerated, TimeWindowMinutes * 1m)
| where FailedCount >= FailedLogonThreshold;
// Part 2: Enrich with successful logon after failures (compromise indicator)
let SuccessAfterFailure =
SecurityEvent
| where TimeGenerated > ago(24h)
| where EventID == 4624
| where LogonType in (3, 10)
| project SuccessTime = TimeGenerated, IpAddress, TargetAccount, Computer;
BruteForceAccounts
| join kind=leftouter (
SuccessAfterFailure
) on IpAddress, Computer
| extend SuccessAfterBruteForce = isnotempty(SuccessTime) and SuccessTime > LastFailure
| extend Severity = case(
SuccessAfterBruteForce == true, "Critical",
TargetAccounts > 5, "High", // Password spray pattern
FailedCount >= 50, "High",
"Medium"
)
| project FirstFailure, LastFailure, Computer, IpAddress, FailedCount, TargetAccounts,
TargetAccountList, SuccessAfterBruteForce, SuccessTime, Severity
| sort by SuccessAfterBruteForce desc, FailedCount desc Data Sources
Required Tables
False Positives
- Misconfigured service accounts with expired or recently changed passwords generating automatic logon failures in batch
- Legitimate penetration testing or red team exercises using tools like Hydra, Medusa, or CrackMapExec against authorized targets
- Users who forget their password and repeatedly attempt login before resetting, particularly after travel or long absence
- Load balancers or multi-hop proxies causing multiple logon attempts to appear from a single source IP
- Password manager applications failing to update cached credentials after a password rotation, generating repeated failures
References (10)
- https://attack.mitre.org/techniques/T1110/
- https://www.microsoft.com/en-us/security/blog/2021/09/27/foggyweb-targeted-nobelium-malware-leads-to-persistent-backdoor/
- https://learn.microsoft.com/en-us/defender-for-identity/compromised-credentials-alerts
- https://learn.microsoft.com/en-us/azure/active-directory/reports-monitoring/reference-sign-ins-error-codes
- https://www.dragos.com/wp-content/uploads/CRASHOVERRIDE2018.pdf
- https://www.trendmicro.com/en_us/research/20/l/pawn-storm-lack-of-sophistication-as-a-strategy.html
- https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1110/T1110.md
- https://github.com/SigmaHQ/sigma/tree/master/rules/windows/builtin/security
- https://www.cisa.gov/sites/default/files/2024-09/aa24-249a-foreign-threat-actor-conducting-large-scale-spear-phishing-campaign-with-rdp-attachments.pdf
- https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/event-4625
Unlock Pro Content
Get the full detection package for T1110 including response playbook, investigation guide, and atomic red team tests.