@@ -12,21 +12,17 @@ reconnaissance activities such as vulnerability scanning or fuzzing attempts by
1212generate a high volume of error responses as they probe for weaknesses in web applications. Error response codes
1313may potentially indicate server-side issues that could be exploited.
1414"""
15- from = " now-61m "
16- interval = " 1h "
15+ from = " now-9m "
16+ interval = " 10m "
1717language = " esql"
1818license = " Elastic License v2"
1919name = " Web Server Unusual Spike in Error Response Codes"
20- risk_score = 47
20+ risk_score = 21
2121rule_id = " 6fa3abe3-9cd8-41de-951b-51ed8f710523"
22- severity = " medium "
22+ severity = " low "
2323tags = [
24- " Domain Scope: Single" ,
2524 " Domain: Web" ,
2625 " Domain: Network" ,
27- " OS: Linux" ,
28- " OS: macOS" ,
29- " OS: Windows" ,
3026 " Use Case: Threat Detection" ,
3127 " Tactic: Reconnaissance" ,
3228 " Data Source: Network Packet Capture" ,
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 http.request.method == "GET" and
5247 http.response.status_code in (
5550 503, // Service Unavailable
5651 504 // Gateway Timeout
5752 )
58- | eval Esql_url_text = case(url.original is not null, url.original, url.full)
59- | eval Esql_url_lower = to_lower(Esql_url_text )
53+ | eval Esql.url_text = case(url.original is not null, url.original, url.full)
54+ | eval Esql.url_lower = to_lower(Esql.url_text )
6055
6156| keep
6257 @timestamp,
6661 source.ip,
6762 agent.id,
6863 host.name,
69- Esql_url_lower
64+ Esql.url_lower
7065| stats
7166 Esql.event_count = count(),
7267 Esql.http_response_status_code_count = count(http.response.status_code),
7570 Esql.agent_id_values = values(agent.id),
7671 Esql.http_request_method_values = values(http.request.method),
7772 Esql.http_response_status_code_values = values(http.response.status_code),
78- Esql.url_path_values = values(Esql_url_lower ),
73+ Esql.url_path_values = values(Esql.url_lower ),
7974 Esql.event_dataset_values = values(event.dataset)
80- by source.ip
75+ by source.ip, agent.id
8176| where
8277 Esql.http_response_status_code_count > 10
8378| limit 100
0 commit comments