Skip to content

Commit f588e6d

Browse files
Aegrahtradebot-elastic
authored andcommitted
[New Rule] Web Server Discovery or Fuzzing Activity (#5337)
* [New Rule] Web Server Discovery or Fuzzing Activity * Update reconnaissance_web_server_discovery_or_fuzzing_activity.toml * Update reconnaissance_web_server_discovery_or_fuzzing_activity.toml * Update reconnaissance_web_server_discovery_or_fuzzing_activity.toml * Add case handling for URL normalization in rule * Replace url.path with Esql_url_lower in TOML file * Update reconnaissance_web_server_discovery_or_fuzzing_activity.toml * ++ * Update reconnaissance_web_server_discovery_or_fuzzing_activity.toml * Add manifest and schema updates * Update reconnaissance_web_server_discovery_or_fuzzing_activity.toml * ++ * Update fortigate schemas * Revert "Update fortigate schemas" This reverts commit b7c87b0. * Revert "++" This reverts commit 7f5d860. * [New Rule] Web Server Discovery or Fuzzing Activity * Update reconnaissance_web_server_discovery_or_fuzzing_activity.toml * Update reconnaissance_web_server_discovery_or_fuzzing_activity.toml * Update reconnaissance_web_server_discovery_or_fuzzing_activity.toml * Add case handling for URL normalization in rule * Replace url.path with Esql_url_lower in TOML file * Update reconnaissance_web_server_discovery_or_fuzzing_activity.toml * ++ * Update reconnaissance_web_server_discovery_or_fuzzing_activity.toml * Add manifest and schema updates * Update reconnaissance_web_server_discovery_or_fuzzing_activity.toml * Added schema/manifest updates * ++ * Update reconnaissance_web_server_discovery_or_fuzzing_activity.toml * revert manifests / schemas to main * adds nginx, iis, apache_tomcat, apache to integration manifests and schemas * bumping patch version --------- Co-authored-by: Shashank K S <[email protected]> Co-authored-by: terrancedejesus <[email protected]> (cherry picked from commit 167def0)
1 parent 2b7de6c commit f588e6d

File tree

4 files changed

+90
-1
lines changed

4 files changed

+90
-1
lines changed
1.22 KB
Binary file not shown.
14.4 KB
Binary file not shown.

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "detection_rules"
3-
version = "1.5.15"
3+
version = "1.5.16"
44
description = "Detection Rules is the home for rules used by Elastic Security. This repository is used for the development, maintenance, testing, validation, and release of rules for Elastic Security’s Detection Engine."
55
readme = "README.md"
66
requires-python = ">=3.12"
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
[metadata]
2+
creation_date = "2025/11/19"
3+
integration = ["network_traffic", "nginx", "apache", "apache_tomcat", "iis"]
4+
maturity = "production"
5+
updated_date = "2025/11/19"
6+
7+
[rule]
8+
author = ["Elastic"]
9+
description = """
10+
This rule detects potential web server discovery or fuzzing activity by identifying a high volume of HTTP GET requests resulting
11+
in 404 or 403 status codes from a single source IP address within a short timeframe. Such patterns may indicate that an attacker
12+
is attempting to discover hidden or unlinked resources on a web server, which can be a precursor to more targeted attacks.
13+
"""
14+
from = "now-9m"
15+
interval = "10m"
16+
language = "esql"
17+
license = "Elastic License v2"
18+
name = "Web Server Discovery or Fuzzing Activity"
19+
risk_score = 21
20+
rule_id = "8383a8d0-008b-47a5-94e5-496629dc3590"
21+
severity = "low"
22+
tags = [
23+
"Domain: Web",
24+
"Domain: Network",
25+
"Use Case: Threat Detection",
26+
"Tactic: Reconnaissance",
27+
"Data Source: Network Packet Capture",
28+
"Data Source: Nginx",
29+
"Data Source: Apache",
30+
"Data Source: Apache Tomcat",
31+
"Data Source: IIS",
32+
]
33+
timestamp_override = "event.ingested"
34+
type = "esql"
35+
query = '''
36+
from logs-network_traffic.http-*, logs-network_traffic.tls-*, logs-nginx.access-*, logs-apache.access-*, logs-apache_tomcat.access-*, logs-iis.access-*
37+
| where
38+
(url.original is not null or url.full is not null) and
39+
http.request.method == "GET" and
40+
http.response.status_code in (404, 403)
41+
42+
| eval Esql.url_text = case(url.original is not null, url.original, url.full)
43+
| eval Esql.url_lower = to_lower(Esql.url_text)
44+
45+
| keep
46+
@timestamp,
47+
event.dataset,
48+
http.request.method,
49+
http.response.status_code,
50+
source.ip,
51+
agent.id,
52+
host.name,
53+
Esql.url_lower
54+
| stats
55+
Esql.event_count = count(),
56+
Esql.url_lower_count_distinct = count_distinct(Esql.url_lower),
57+
Esql.host_name_values = values(host.name),
58+
Esql.agent_id_values = values(agent.id),
59+
Esql.http_request_method_values = values(http.request.method),
60+
Esql.http_response_status_code_values = values(http.response.status_code),
61+
Esql.url_path_values = values(Esql.url_lower),
62+
Esql.event_dataset_values = values(event.dataset)
63+
by source.ip
64+
| where
65+
Esql.event_count > 500 and Esql.url_lower_count_distinct > 250
66+
'''
67+
68+
[[rule.threat]]
69+
framework = "MITRE ATT&CK"
70+
71+
[[rule.threat.technique]]
72+
id = "T1595"
73+
name = "Active Scanning"
74+
reference = "https://attack.mitre.org/techniques/T1595/"
75+
76+
[[rule.threat.technique.subtechnique]]
77+
id = "T1595.002"
78+
name = "Vulnerability Scanning"
79+
reference = "https://attack.mitre.org/techniques/T1595/002/"
80+
81+
[[rule.threat.technique.subtechnique]]
82+
id = "T1595.003"
83+
name = "Wordlist Scanning"
84+
reference = "https://attack.mitre.org/techniques/T1595/003/"
85+
86+
[rule.threat.tactic]
87+
id = "TA0043"
88+
name = "Reconnaissance"
89+
reference = "https://attack.mitre.org/tactics/TA0043/"

0 commit comments

Comments
 (0)