Privileged Account Brute Force

Last updated 14 days ago on 2025-12-11
Created 5 years ago on 2020-08-29

About

Identifies multiple consecutive logon failures targeting an Admin account from the same source address and within a short time interval. Adversaries will often brute force login attempts across multiple users with a common or known password, in an attempt to gain access to accounts.
Tags
Domain: EndpointOS: WindowsUse Case: Threat DetectionTactic: Credential AccessData Source: Windows Security Event LogsLanguage: esql
Severity
medium
Risk Score
47
MITRE ATT&CK™

Credential Access (TA0006)(external, opens in a new tab or window)

License
Elastic License v2(external, opens in a new tab or window)

Definition

Integration Pack
Prebuilt Security Detection Rules
Related Integrations

system(external, opens in a new tab or window)

windows(external, opens in a new tab or window)

Query
text code block:
from logs-system.security*, logs-windows.forwarded*, winlogbeat-* metadata _id, _version, _index | where event.category == "authentication" and host.os.type == "windows" and event.action == "logon-failed" and winlog.logon.type == "Network" and source.ip is not null and winlog.computer_name is not null and not cidr_match(TO_IP(source.ip), "127.0.0.0/8", "::1") and to_lower(winlog.event_data.TargetUserName) like "*admin*" and /* noisy failure status codes often associated to authentication misconfiguration 0xC000015B - The user has not been granted the requested logon type (also called the logon right) at this machine. 0XC000005E - There are currently no logon servers available to service the logon request. 0XC0000133 - Clocks between DC and other computer too far out of sync. 0XC0000192 An attempt was made to logon, but the Netlogon service was not started. 0xc00000dc - DC is in shutdown phase, it will normally tell current clients to use another DC for authentication. */ not winlog.event_data.Status in ("0xc000015b", "0xc000005e", "0xc0000133", "0xc0000192", "0xc00000dc") // truncate the timestamp to a 60-second window | eval Esql.time_window = date_trunc(60 seconds, @timestamp) | stats Esql.failed_auth_count = COUNT(*), Esql.target_user_name_values = VALUES(winlog.event_data.TargetUserName), Esql.user_domain_values = VALUES(user.domain), Esql.error_codes = VALUES(winlog.event_data.Status), Esql.data_stream_namespace.values = VALUES(data_stream.namespace) by winlog.computer_name, source.ip, Esql.time_window, winlog.logon.type | where Esql.failed_auth_count >= 50 | KEEP winlog.computer_name, source.ip, Esql.time_window, winlog.logon.type, Esql.*

Install detection rules in Elastic Security

Detect Privileged Account Brute Force in the Elastic Security detection engine by installing this rule into your Elastic Stack.

To setup this rule, check out the installation guide for Prebuilt Security Detection Rules(external, opens in a new tab or window).