forked from elastic/detection-rules
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[New Rules] Docker Entrypoint Netcon / Nsenter Escape (elastic#3883)
* [New Rules] Docker entrypoint netcon / nsenter escape * ++ * Update privilege_escalation_docker_escape_via_nsenter.toml * Update privilege_escalation_docker_escape_via_nsenter.toml * Better description formatting * Update execution_egress_connection_from_entrypoint_in_container.toml * Update privilege_escalation_docker_escape_via_nsenter.toml
- Loading branch information
Showing
2 changed files
with
127 additions
and
0 deletions.
There are no files selected for viewing
77 changes: 77 additions & 0 deletions
77
rules/linux/execution_egress_connection_from_entrypoint_in_container.toml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
[metadata] | ||
creation_date = "2024/07/10" | ||
integration = ["endpoint"] | ||
maturity = "production" | ||
updated_date = "2024/07/10" | ||
|
||
[rule] | ||
author = ["Elastic"] | ||
description = """ | ||
This rule identifies a sequence of events where a process named `entrypoint.sh` is started in a container, followed by a | ||
network connection attempt. This sequence indicates a potential egress connection from an entrypoint in a container. An | ||
entrypoint is a command or script specified in the Dockerfile and executed when the container starts. Attackers can use | ||
this technique to establish a foothold in the environment, escape from a container to the host, or establish persistence. | ||
""" | ||
from = "now-9m" | ||
index = ["logs-endpoint.events.*"] | ||
language = "eql" | ||
license = "Elastic License v2" | ||
name = "Egress Connection from Entrypoint in Container" | ||
risk_score = 47 | ||
rule_id = "c75d0c86-38d6-4821-98a1-465cff8ff4c8" | ||
severity = "medium" | ||
tags = [ | ||
"Domain: Endpoint", | ||
"Domain: Container", | ||
"OS: Linux", | ||
"Use Case: Threat Detection", | ||
"Tactic: Execution", | ||
"Data Source: Elastic Defend", | ||
] | ||
timestamp_override = "event.ingested" | ||
type = "eql" | ||
query = ''' | ||
sequence by host.id with maxspan=3s | ||
[process where host.os.type == "linux" and event.type == "start" and event.action == "exec" and | ||
process.entry_leader.entry_meta.type == "container" and process.name == "entrypoint.sh"] by process.entity_id | ||
[network where event.type == "start" and event.action == "connection_attempted" and not ( | ||
destination.ip == null or destination.ip == "0.0.0.0" or cidrmatch( | ||
destination.ip, "10.0.0.0/8", "127.0.0.0/8", "169.254.0.0/16", "172.16.0.0/12", "192.0.0.0/24", "192.0.0.0/29", | ||
"192.0.0.8/32", "192.0.0.9/32", "192.0.0.10/32", "192.0.0.170/32", "192.0.0.171/32", "192.0.2.0/24", | ||
"192.31.196.0/24", "192.52.193.0/24", "192.168.0.0/16", "192.88.99.0/24", "224.0.0.0/4", "100.64.0.0/10", | ||
"192.175.48.0/24","198.18.0.0/15", "198.51.100.0/24", "203.0.113.0/24", "240.0.0.0/4", "::1", "FE80::/10", | ||
"FF00::/8", "172.31.0.0/16" | ||
) | ||
)] by process.parent.entity_id | ||
''' | ||
|
||
[[rule.threat]] | ||
framework = "MITRE ATT&CK" | ||
|
||
[[rule.threat.technique]] | ||
id = "T1059" | ||
name = "Command and Scripting Interpreter" | ||
reference = "https://attack.mitre.org/techniques/T1059/" | ||
|
||
[[rule.threat.technique.subtechnique]] | ||
id = "T1059.004" | ||
name = "Unix Shell" | ||
reference = "https://attack.mitre.org/techniques/T1059/004/" | ||
|
||
[rule.threat.tactic] | ||
id = "TA0002" | ||
name = "Execution" | ||
reference = "https://attack.mitre.org/tactics/TA0002/" | ||
|
||
[[rule.threat]] | ||
framework = "MITRE ATT&CK" | ||
|
||
[[rule.threat.technique]] | ||
id = "T1611" | ||
name = "Escape to Host" | ||
reference = "https://attack.mitre.org/techniques/T1611/" | ||
|
||
[rule.threat.tactic] | ||
id = "TA0004" | ||
name = "Privilege Escalation" | ||
reference = "https://attack.mitre.org/tactics/TA0004/" |
50 changes: 50 additions & 0 deletions
50
rules/linux/privilege_escalation_docker_escape_via_nsenter.toml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
[metadata] | ||
creation_date = "2024/07/10" | ||
integration = ["endpoint"] | ||
maturity = "production" | ||
updated_date = "2024/07/10" | ||
|
||
[rule] | ||
author = ["Elastic"] | ||
description = """ | ||
This rule identifies a UID change event via `nsenter`. The `nsenter` command is used to enter a namespace, which is a | ||
way to isolate processes and resources. Attackers can use `nsenter` to escape from a container to the host, which can | ||
lead to privilege escalation and lateral movement. | ||
""" | ||
from = "now-9m" | ||
index = ["logs-endpoint.events.process*"] | ||
language = "eql" | ||
license = "Elastic License v2" | ||
name = "Docker Escape via Nsenter" | ||
references = ["https://www.cyberark.com/resources/threat-research-blog/the-route-to-root-container-escape-using-kernel-exploitation"] | ||
risk_score = 47 | ||
rule_id = "5f3ab3ce-7b41-4168-a06a-68d2af8ebc88" | ||
severity = "medium" | ||
tags = [ | ||
"Domain: Endpoint", | ||
"Domain: Container", | ||
"OS: Linux", | ||
"Use Case: Threat Detection", | ||
"Tactic: Privilege Escalation", | ||
"Data Source: Elastic Defend", | ||
] | ||
timestamp_override = "event.ingested" | ||
type = "eql" | ||
query = ''' | ||
process where host.os.type == "linux" and event.type == "change" and event.action == "uid_change" and | ||
process.entry_leader.entry_meta.type == "container" and process.args == "nsenter" and | ||
process.args in ("-t", "--target") and process.args_count >= 4 | ||
''' | ||
|
||
[[rule.threat]] | ||
framework = "MITRE ATT&CK" | ||
|
||
[[rule.threat.technique]] | ||
id = "T1611" | ||
name = "Escape to Host" | ||
reference = "https://attack.mitre.org/techniques/T1611/" | ||
|
||
[rule.threat.tactic] | ||
id = "TA0004" | ||
name = "Privilege Escalation" | ||
reference = "https://attack.mitre.org/tactics/TA0004/" |