Skip to content

Commit 8fe37fe

Browse files
committed
++
1 parent cb2fd75 commit 8fe37fe

File tree

1 file changed

+18
-14
lines changed

1 file changed

+18
-14
lines changed

rules/cross-platform/reconnaissance_web_server_unusual_user_agents.toml

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,21 +11,17 @@ This rule detects unusual spikes in web server requests with uncommon or suspici
1111
indicate reconnaissance attempts by attackers trying to identify vulnerabilities in web applications or servers. These
1212
user-agents are often associated with automated tools used for scanning, vulnerability assessment, or brute-force attacks.
1313
"""
14-
from = "now-61m"
15-
interval = "1h"
14+
from = "now-9m"
15+
interval = "10m"
1616
language = "esql"
1717
license = "Elastic License v2"
1818
name = "Web Server Suspicious User Agent Request Spike"
1919
risk_score = 21
2020
rule_id = "a1b7ffa4-bf80-4bf1-86ad-c3f4dc718b35"
2121
severity = "low"
2222
tags = [
23-
"Domain Scope: Single",
2423
"Domain: Web",
2524
"Domain: Network",
26-
"OS: Linux",
27-
"OS: macOS",
28-
"OS: Windows",
2925
"Use Case: Threat Detection",
3026
"Tactic: Reconnaissance",
3127
"Tactic: Credential Access",
@@ -46,7 +42,6 @@ from
4642
logs-apache_tomcat.access-*,
4743
logs-iis.access-*
4844
| where
49-
@timestamp > now() - 1 hours and
5045
(url.original is not null or url.full is not null) and
5146
(
5247
user_agent.original like "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" or // Nikto
@@ -62,11 +57,20 @@ from
6257
user_agent.original like "DirBuster*" or // Dirbuster
6358
user_agent.original like "gobuster/*" or // Gobuster
6459
user_agent.original like "*nmap*" or // Nmap Scripting Engine
65-
user_agent.original like "*hydra*" // Hydra Brute Forcer
60+
user_agent.original like "*hydra*" or // Hydra Brute Forcer
61+
user_agent.original like "*w3af*" or // w3af Web Application Attack and Audit Framework
62+
user_agent.original like "*Arachni*" or // Arachni Web Application Security Scanner
63+
user_agent.original like "*Skipfish*" or // Skipfish Web Application Security Scanner
64+
user_agent.original like "*OpenVAS*" or // OpenVAS Vulnerability Scanner
65+
user_agent.original like "*Acunetix*" or // Acunetix Vulnerability Scanner
66+
user_agent.original like "*Nessus*" or // Nessus Vulnerability Scanner
67+
user_agent.original like "*dirsearch*" or // dirsearch
68+
user_agent.original like "*ZAP*" or // OWASP ZAP
69+
user_agent.original like "*Burp*" // Burp Suite
6670
)
6771
68-
| eval Esql_url_text = case(url.original is not null, url.original, url.full)
69-
| eval Esql_url_lower = to_lower(Esql_url_text)
72+
| eval Esql.url_text = case(url.original is not null, url.original, url.full)
73+
| eval Esql.url_lower = to_lower(Esql.url_text)
7074
7175
| keep
7276
@timestamp,
@@ -75,16 +79,16 @@ from
7579
source.ip,
7680
agent.id,
7781
host.name,
78-
Esql_url_lower
82+
Esql.url_lower
7983
| stats
8084
Esql.event_count = count(),
81-
Esql.url_path_count_distinct = count_distinct(Esql_url_lower),
85+
Esql.url_path_count_distinct = count_distinct(Esql.url_lower),
8286
Esql.host_name_values = values(host.name),
8387
Esql.agent_id_values = values(agent.id),
84-
Esql.url_path_values = values(Esql_url_lower),
88+
Esql.url_path_values = values(Esql.url_lower),
8589
Esql.user_agent_original_values = values(user_agent.original),
8690
Esql.event_dataset_values = values(event.dataset)
87-
by source.ip
91+
by source.ip, agent.id
8892
| where
8993
Esql.event_count > 50 and Esql.url_path_count_distinct > 10
9094
| limit 100

0 commit comments

Comments
 (0)