Skip to content

Commit 157b906

Browse files
Merge branch 'main' into new-rule-potential-command-injection
2 parents 3f3a938 + 167def0 commit 157b906

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)