You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Detects DNS queries to commonly abused remote monitoring and management (RMM) or remote access software domains from processes that are not browsers.
11
11
Intended to surface RMM clients, scripts, or other non-browser activity contacting these services.
12
12
"""
13
-
from = "now-9m"
14
-
index = [
15
-
"logs-endpoint.events.network-*",
16
-
"logs-windows.sysmon_operational-*",
17
-
]
18
-
language = "kuery"
13
+
from = "now-7205m"
14
+
interval = "5m"
15
+
language = "esql"
19
16
license = "Elastic License v2"
20
17
name = "First Time Seen DNS Query to RMM Domain"
21
18
note = """## Triage and analysis
@@ -26,10 +23,10 @@ This rule flags DNS queries to commonly abused RMM or remote access domains when
26
23
27
24
### Possible investigation steps
28
25
29
-
- Identify the process (process.name, process.executable) that performed the DNS query and verify if it is an approved RMM or remote access tool.
26
+
- Identify the process process.executable that performed the DNS query and verify if it is an approved RMM or remote access tool.
30
27
- Review the full process tree and parent process to understand how the binary was launched.
31
28
- Check process.code_signature for trusted RMM publishers; unsigned or unexpected signers may indicate abuse or trojanized installers.
32
-
- Correlate with the companion rule "First Time Seen Commonly Abused RMM Execution" for the same host to see if the RMM process was first-time seen.
29
+
- Correlate with the companion rule "First Time Seen Remote Monitoring and Management Tool" for the same host to see if the RMM process was first-time seen.
33
30
- Investigate other alerts for the same host or user in the past 48 hours.
34
31
35
32
### False positive analysis
@@ -59,13 +56,125 @@ tags = [
59
56
"Data Source: Sysmon"
60
57
]
61
58
timestamp_override = "event.ingested"
62
-
type = "new_terms"
59
+
type = "esql"
63
60
64
61
query = '''
65
-
host.os.type: "windows" and
66
-
event.category: "network" and
67
-
dns.question.name: (*teamviewer.com or *logmein* or *.anydesk.com or *screenconnect.com or *connectwise.com or *splashtop.com or assist.zoho.com or zohoassist.com or downloads.zohocdn.com or join.zoho.com or dwservice.net or express.gotoassist.com or getgo.com or *rustdesk.com or rs-* or remoteutilities.com or app.atera.com or agentreporting.atera.com or pubsub.atera.com or ammyy.com or n-able.com or cdn.kaseya.net or relay.kaseya.net or license.bomgar.com or beyondtrustcloud.com or api.parsec.app or parsecusercontent.com or tailscale.com or twingate.com or agent.jumpcloud.com or kickstart.jumpcloud.com or services.vnc.com or static.remotepc.com or netsupportsoftware.com or getscreen.me or client.teamviewer.com or integratedchat.teamviewer.com or relay.screenconnect.com or control.connectwise.com or authentication.logmeininc.com or secure.logmeinrescue.com or logmeincdn.http.internapcdn.net or remoteassistance.support.services.microsoft.com or remotedesktop-pa.googleapis.com or comserver.corporate.beanywhere.com or swi-rc.com or swi-tc.com or telemetry.servers.qetqo.com or tmate.io or api.playanext.com) and not process.name: (chrome.exe or msedge.exe or MicrosoftEdge.exe or MicrosoftEdgeCP.exe or firefox.exe or iexplore.exe or safari.exe or brave.exe or opera.exe or vivaldi.exe or msedgewebview2.exe or agent.tiflux.com or *.gotoresolve.com) and
68
-
not (process.code_signature.subject_name: ("Google LLC" or "Google Inc." or "Mozilla Corporation" or "Mozilla Foundation" or "Microsoft Corporation" or "Apple Inc." or "Brave Software, Inc." or "Opera Software AS" or "Vivaldi Technologies AS") and process.code_signature.trusted: true)
62
+
FROM logs-endpoint.events.network-*, logs-windows.sysmon_operational-* METADATA _index
63
+
| WHERE host.os.type == "windows"
64
+
AND event.category == "network"
65
+
AND event.action in ("lookup_requested", "DNSEvent (DNS query)")
// First time seen is within 6m of the rule execution time and first seen in the last 5 days as per the rule from schedule and limited to 1 unique host
172
+
| where Esql.recent <= 6 and Esql.count_distinct_host_id == 1
Copy file name to clipboardExpand all lines: rules/windows/credential_access_bruteforce_admin_account.toml
+14-8Lines changed: 14 additions & 8 deletions
Original file line number
Diff line number
Diff line change
@@ -2,7 +2,7 @@
2
2
creation_date = "2020/08/29"
3
3
integration = ["system", "windows"]
4
4
maturity = "production"
5
-
updated_date = "2025/12/11"
5
+
updated_date = "2026/03/09"
6
6
7
7
[transform]
8
8
[[transform.osquery]]
@@ -33,21 +33,21 @@ authenticode.path JOIN hash ON services.path = hash.path WHERE authenticode.resu
33
33
[rule]
34
34
author = ["Elastic"]
35
35
description = """
36
-
Identifies multiple consecutive logon failures targeting an Admin account from the same source address and within a
36
+
Identifies multiple consecutive logon failures targeting more than one Admin account from the same source address and within a
37
37
short time interval. Adversaries will often brute force login attempts across multiple users with a common or known
38
38
password, in an attempt to gain access to accounts.
39
39
"""
40
40
from = "now-9m"
41
41
language = "esql"
42
42
license = "Elastic License v2"
43
-
name = "Privileged Account Brute Force"
43
+
name = "Privileged Accounts Brute Force"
44
44
note = """## Triage and analysis
45
45
46
-
### Investigating Privileged Account Brute Force
46
+
### Investigating Privileged Accounts Brute Force
47
47
48
48
Adversaries with no prior knowledge of legitimate credentials within the system or environment may guess passwords to attempt access to accounts. Without knowledge of the password for an account, an adversary may opt to guess the password using a repetitive or iterative mechanism systematically. More details can be found [here](https://attack.mitre.org/techniques/T1110/001/).
49
49
50
-
This rule identifies potential password guessing/brute force activity from a single address against an account that contains the `admin` pattern on its name, which is likely a highly privileged account.
50
+
This rule identifies potential password guessing/brute force activity from a single address against multiple accounts that contains the `admin` pattern on its name, which is likely a highly privileged account.
51
51
52
52
> **Note**:
53
53
> This investigation guide uses the [Osquery Markdown Plugin](https://www.elastic.co/guide/en/security/current/invest-guide-run-osquery.html) introduced in Elastic Stack version 8.5.0. Older Elastic Stack versions will display unrendered Markdown in this guide.
@@ -121,9 +121,15 @@ from logs-system.security*, logs-windows.forwarded*, winlogbeat-* metadata _id,
121
121
not winlog.event_data.Status in ("0xc000015b", "0xc000005e", "0xc0000133", "0xc0000192", "0xc00000dc")
Esql.count_distinct_logon_types = COUNT_DISTINCT(winlog.logon.type) by user.name
70
+
Esql.count_distinct_logon_types = COUNT_DISTINCT(winlog.logon.type) by user.name, user.id
69
71
70
72
// high count of logons is often associated with service account tied to a specific service, if observed in use with a different logon type it's suspicious
71
-
| WHERE Esql.count_distinct_logon_types >= 2 and Esql.max_logon >= 1000 and (Esql.min_logon >= 1 and Esql.min_logon <= 10)
| WHERE Esql.count_distinct_logon_types >= 2 and Esql.max_logon >= 1000 and (Esql.min_logon >= 1 and Esql.min_logon <= 10) and Esql.unique_host_count >= 2
0 commit comments