[Rule Tuning] kubernetes.audit.userAgent --> user_agent.original Conversion (#5808)

This commit is contained in:
Ruben Groenewoud
2026-03-05 14:13:30 +01:00
committed by GitHub
parent a9f3f8afbb
commit c24f84b5b0
8 changed files with 23 additions and 23 deletions
@@ -2,7 +2,7 @@
creation_date = "2022/09/13"
integration = ["kubernetes"]
maturity = "production"
updated_date = "2026/01/30"
updated_date = "2026/03/03"
[rule]
author = ["Elastic"]
@@ -82,7 +82,7 @@ query = '''
event.dataset:"kubernetes.audit_logs" and
kubernetes.audit.user.username:system\:serviceaccount\:* and
kubernetes.audit.annotations.authorization_k8s_io/decision:"forbid" and
kubernetes.audit.userAgent:(* and not (*kubernetes/$Format or karpenter or csi-secrets-store* or OpenAPI-Generator* or Prometheus* or dashboard* or cilium-agent*))
user_agent.original:(* and not (*kubernetes/$Format or karpenter or csi-secrets-store* or OpenAPI-Generator* or Prometheus* or dashboard* or cilium-agent*))
'''
[[rule.threat]]
@@ -100,7 +100,7 @@ reference = "https://attack.mitre.org/tactics/TA0007/"
[rule.new_terms]
field = "new_terms_fields"
value = ["kubernetes.audit.userAgent"]
value = ["user_agent.original"]
[[rule.new_terms.history_window_start]]
field = "history_window_start"
@@ -2,7 +2,7 @@
creation_date = "2026/02/02"
integration = ["kubernetes"]
maturity = "production"
updated_date = "2026/02/09"
updated_date = "2026/03/03"
[rule]
author = ["Elastic"]
@@ -114,7 +114,7 @@ from logs-kubernetes.audit_logs-* metadata _id, _index, _version
Esql.kubernetes_audit_requestURI_values = values(kubernetes.audit.requestURI),
Esql.data_stream_namespace_values = values(data_stream.namespace)
BY kubernetes.audit.sourceIPs, kubernetes.audit.userAgent
BY kubernetes.audit.sourceIPs, user_agent.original
| where
Esql.kubernetes_audit_requestURI_count_distinct > 5 and
@@ -122,7 +122,7 @@ from logs-kubernetes.audit_logs-* metadata _id, _index, _version
Esql.document_count < 50 and
(Esql.authz_forbid_count >= 1 or Esql.status_fail_count >= 1 or Esql.not_found_count >= 3)
| keep Esql.*, kubernetes.audit.sourceIPs, kubernetes.audit.userAgent
| keep Esql.*, kubernetes.audit.sourceIPs, user_agent.original
'''
[[rule.threat]]
@@ -2,7 +2,7 @@
creation_date = "2026/02/02"
integration = ["kubernetes"]
maturity = "production"
updated_date = "2026/02/09"
updated_date = "2026/03/03"
[rule]
author = ["Elastic"]
@@ -77,7 +77,7 @@ from logs-kubernetes.audit_logs-* metadata _id, _index, _version
Esql.kubernetes_audit_user_username_values = values(kubernetes.audit.user.username),
Esql.kubernetes_audit_user_groups_values = values(kubernetes.audit.user.groups),
Esql.kubernetes_audit_requestURI_values = values(kubernetes.audit.requestURI),
Esql.kubernetes_audit_userAgent_values = values(kubernetes.audit.userAgent),
Esql.user_agent_original_values = values(user_agent.original),
Esql.data_stream_namespace_values = values(data_stream.namespace)
by kubernetes.audit.user.username, kubernetes.audit.sourceIPs
@@ -2,7 +2,7 @@
creation_date = "2022/06/30"
integration = ["kubernetes"]
maturity = "production"
updated_date = "2026/01/30"
updated_date = "2026/03/03"
[rule]
author = ["Elastic"]
@@ -85,7 +85,7 @@ kubernetes.audit.verb:"create" and
kubernetes.audit.objectRef.resource:("selfsubjectaccessreviews" or "selfsubjectrulesreviews") and (
kubernetes.audit.user.username:(system\:serviceaccount\:* or system\:node\:*) or
kubernetes.audit.impersonatedUser.username:(system\:serviceaccount\:* or system\:node\:*)
) and kubernetes.audit.userAgent:(* and not (*kubernetes/$Format))
) and user_agent.original:(* and not (*kubernetes/$Format))
'''
[[rule.threat]]
@@ -103,7 +103,7 @@ reference = "https://attack.mitre.org/tactics/TA0007/"
[rule.new_terms]
field = "new_terms_fields"
value = ["kubernetes.audit.userAgent"]
value = ["user_agent.original"]
[[rule.new_terms.history_window_start]]
field = "history_window_start"
@@ -2,7 +2,7 @@
creation_date = "2025/06/17"
integration = ["kubernetes"]
maturity = "production"
updated_date = "2026/01/30"
updated_date = "2026/03/03"
[rule]
author = ["Elastic"]
@@ -68,7 +68,7 @@ query = '''
event.dataset:"kubernetes.audit_logs" and
kubernetes.audit.stage:"ResponseComplete" and
kubernetes.audit.annotations.authorization_k8s_io/decision:"forbid" and
kubernetes.audit.userAgent:(* and not (*kubernetes/$Format))
user_agent.original:(* and not (*kubernetes/$Format))
'''
[[rule.threat]]
@@ -81,7 +81,7 @@ reference = "https://attack.mitre.org/tactics/TA0002/"
[rule.new_terms]
field = "new_terms_fields"
value = ["kubernetes.audit.userAgent"]
value = ["user_agent.original"]
[[rule.new_terms.history_window_start]]
field = "history_window_start"
@@ -2,7 +2,7 @@
creation_date = "2025/06/18"
integration = ["kubernetes"]
maturity = "production"
updated_date = "2026/01/30"
updated_date = "2026/03/03"
[rule]
author = ["Elastic"]
@@ -68,9 +68,9 @@ timestamp_override = "event.ingested"
type = "new_terms"
query = '''
event.dataset:"kubernetes.audit_logs" and kubernetes.audit.stage:"ResponseComplete" and
kubernetes.audit.userAgent:(* and not (*kubernetes/$Format)) and
user_agent.original:(* and not (*kubernetes/$Format)) and
not (
kubernetes.audit.userAgent:kubelet* and
user_agent.original:kubelet* and
not kubernetes.audit.objectRef.resource:(pods or nodes or csinodes or csidrivers or configmaps or secrets or events or leases or runtimeclasses) and
kubernetes.audit.verb:(get or list or watch or patch)
)
@@ -86,7 +86,7 @@ reference = "https://attack.mitre.org/tactics/TA0002/"
[rule.new_terms]
field = "new_terms_fields"
value = ["kubernetes.audit.annotations.authorization_k8s_io/decision", "kubernetes.audit.user.username", "kubernetes.audit.userAgent"]
value = ["kubernetes.audit.annotations.authorization_k8s_io/decision", "kubernetes.audit.user.username", "user_agent.original"]
[[rule.new_terms.history_window_start]]
field = "history_window_start"
@@ -2,7 +2,7 @@
creation_date = "2022/09/13"
integration = ["kubernetes"]
maturity = "production"
updated_date = "2026/02/02"
updated_date = "2026/03/03"
[rule]
author = ["Elastic"]
@@ -81,7 +81,7 @@ query = '''
event.dataset:"kubernetes.audit_logs" and
kubernetes.audit.annotations.authorization_k8s_io/decision:"allow" and
kubernetes.audit.user.username:("system:anonymous" or "system:unauthenticated" or not *) and
kubernetes.audit.userAgent:(* and not (*kubernetes/$Format)) and
user_agent.original:(* and not (*kubernetes/$Format)) and
not kubernetes.audit.requestURI:(/healthz* or /livez* or /readyz* or /version or /.well-known/oauth-authorization-server)
'''
@@ -105,7 +105,7 @@ reference = "https://attack.mitre.org/tactics/TA0001/"
[rule.new_terms]
field = "new_terms_fields"
value = ["kubernetes.audit.userAgent"]
value = ["user_agent.original"]
[[rule.new_terms.history_window_start]]
field = "history_window_start"
@@ -2,7 +2,7 @@
creation_date = "2026/02/04"
integration = ["kubernetes"]
maturity = "production"
updated_date = "2026/02/09"
updated_date = "2026/03/03"
[rule]
author = ["Elastic"]
@@ -82,7 +82,7 @@ FROM logs-kubernetes.audit_logs-* metadata _id, _index, _version
kubernetes.audit.stage,
kubernetes.audit.user.groups,
kubernetes.audit.user.username,
kubernetes.audit.userAgent,
user_agent.original,
kubernetes.audit.verb,
_id,
_index,