Direct Interactive Kubernetes API Request Detected via Defend for Containers
This rule detects the execution of direct interactive Kubernetes API requests inside a container. An adversary may need to execute direct interactive Kubernetes API requests to gain access to the Kubernetes API server or other resources within the cluster. These requests are often used to enumerate the Kubernetes API server or other resources within the cluster, and may indicate an attempt to move laterally within the cluster. Note that this rule may not trigger if the token is expanded within the process argument list, as the length of the "process.args" field may lead to the field being ignored.
Rule type: eql
Rule indices:
- logs-cloud_defend.process*
Rule Severity: low
Risk Score: 21
Runs every: 5m
Searches indices from: now-6m
Maximum alerts per execution: ?
References:
Tags:
- Data Source: Elastic Defend for Containers
- Domain: Container
- OS: Linux
- Use Case: Threat Detection
- Tactic: Execution
- Tactic: Discovery
Version: ?
Rule authors:
- Elastic
Rule license: Elastic License v2
process where host.os.type == "linux" and event.type == "start" and event.action == "exec" and (
(
process.name == "curl" and
process.args in ("-H", "--header") and
process.args like "*Authorization: Bearer *" and
(
/* CA-specified */
process.args in ("--cacert", "--capath") or
/* insecure */
process.args in ("-k", "--insecure")
)
) or
(
process.name == "wget" and
process.args like "--header*" and
process.args like "*Authorization: Bearer *" and
(
/* CA-specified */
process.args == "--ca-certificate" or
/* insecure */
process.args == "--no-check-certificate"
)
) or
(
/* Account for tools that execute utilities as a subprocess, in this case the target utility name will appear as a process arg */
process.name in ("bash", "dash", "sh", "tcsh", "csh", "zsh", "ksh", "fish", "busybox") and
process.args in ("wget", "/bin/wget", "/usr/bin/wget", "/usr/local/bin/wget") and
process.args like "--header*" and
process.args like "*Authorization: Bearer*" and
process.args == "--no-check-certificate"
) or
(
/* ssl_client is busybox-specific, so we need to handle it separately */
process.name == "busybox" and
process.args == "ssl_client" and
process.args like "*Authorization: Bearer*"
) or
(process.name == "openssl" and process.args == "s_client" and process.args == "-connect") or
(process.name == "socat" and process.args like~ "*ssl*") or
(process.name == "ncat" and process.args like "--ssl*") or
(process.name == "kubectl" and process.args in ("get", "list", "watch", "create", "patch", "update"))
) and
process.interactive == true and container.id like "*"
Framework: MITRE ATT&CK
Tactic:
- Name: Execution
- Id: TA0002
- Reference URL: https://attack.mitre.org/tactics/TA0002/
Technique:
- Name: Command and Scripting Interpreter
- Id: T1059
- Reference URL: https://attack.mitre.org/techniques/T1059/
Sub Technique:
- Name: Unix Shell
- Id: T1059.004
- Reference URL: https://attack.mitre.org/techniques/T1059/004/
Framework: MITRE ATT&CK
Tactic:
- Name: Discovery
- Id: TA0007
- Reference URL: https://attack.mitre.org/tactics/TA0007/
Technique:
- Name: Container and Resource Discovery
- Id: T1613
- Reference URL: https://attack.mitre.org/techniques/T1613/