[Rule Tuning] Linux 3rd Party EDR Support - Crowdstrike and S1 - 9 (#4356)

This commit is contained in:
Jonhnathan
2025-01-09 08:29:51 -03:00
committed by GitHub
parent 4142868956
commit 2af2e1f57b
10 changed files with 115 additions and 66 deletions
@@ -1,8 +1,10 @@
[metadata]
creation_date = "2024/11/04"
integration = ["endpoint"]
integration = ["endpoint", "crowdstrike", "sentinel_one_cloud_funnel"]
maturity = "production"
updated_date = "2024/11/04"
min_stack_version = "8.13.0"
min_stack_comments = "Breaking change at 8.13.0 for SentinelOne Integration."
updated_date = "2025/01/08"
[rule]
author = ["Elastic"]
@@ -12,7 +14,7 @@ for exfiltration on Linux systems. Data splitting is a technique used by adversa
avoid detection and exfiltrate data.
"""
from = "now-9m"
index = ["logs-endpoint.events.*"]
index = ["logs-endpoint.events.*", "logs-crowdstrike.fdr*", "logs-sentinel_one_cloud_funnel.*", "endgame-*"]
language = "eql"
license = "Elastic License v2"
name = "Potential Data Splitting Detected"
@@ -49,25 +51,33 @@ tags = [
"OS: Linux",
"Use Case: Threat Detection",
"Tactic: Exfiltration",
"Data Source: Elastic Defend"
"Data Source: Elastic Defend",
"Data Source: Crowdstrike",
"Data Source: SentinelOne",
"Data Source: Elastic Endgame"
]
timestamp_override = "event.ingested"
type = "eql"
query = '''
process where host.os.type == "linux" and event.type == "start" and event.action == "exec" and (
(process.name == "dd" and process.args like "bs=*" and process.args like "if=*") or
(process.name in ("split", "rsplit") and (
(process.args == "-b" or process.args like "--bytes*") or
(process.args == "-C" or process.args like "--line-bytes*")
process where host.os.type == "linux" and event.type == "start" and
event.action in ("exec", "exec_event", "start", "ProcessRollup2") and
(
(process.name == "dd" and process.args like "bs=*" and process.args like "if=*") or
(
process.name in ("split", "rsplit") and
(
(process.args == "-b" or process.args like "--bytes*") or
(process.args == "-C" or process.args like "--line-bytes*")
)
)
) and
not (
process.parent.name in ("apport", "overlayroot") or
process.args like (
"if=/tmp/nvim*", "if=/boot/*", "if=/dev/random", "if=/dev/urandom", "/dev/mapper/*",
"if=*.iso", "of=/dev/stdout", "if=/dev/zero", "if=/dev/sda", "/proc/sys/kernel/*"
)
)
) and not (
process.parent.name in ("apport", "overlayroot") or
process.args like (
"if=/tmp/nvim*", "if=/boot/*", "if=/dev/random", "if=/dev/urandom", "/dev/mapper/*",
"if=*.iso", "of=/dev/stdout", "if=/dev/zero", "if=/dev/sda", "/proc/sys/kernel/*"
)
)
'''
[[rule.threat]]
@@ -1,8 +1,10 @@
[metadata]
creation_date = "2024/11/04"
integration = ["endpoint"]
integration = ["endpoint", "sentinel_one_cloud_funnel"]
maturity = "production"
updated_date = "2024/11/04"
min_stack_version = "8.13.0"
min_stack_comments = "Breaking change at 8.13.0 for SentinelOne Integration."
updated_date = "2025/01/08"
[rule]
author = ["Elastic"]
@@ -12,7 +14,7 @@ the system's memory and potentially impact the system's performance. This behavi
deploys miner software such as XMRig.
"""
from = "now-9m"
index = ["logs-endpoint.events.*"]
index = ["logs-endpoint.events.*", "logs-sentinel_one_cloud_funnel.*", "endgame-*"]
language = "eql"
license = "Elastic License v2"
name = "Memory Swap Modification"
@@ -53,11 +55,13 @@ tags = [
"Tactic: Impact",
"Tactic: Execution",
"Data Source: Elastic Defend",
"Data Source: SentinelOne",
"Data Source: Elastic Endgame",
]
timestamp_override = "event.ingested"
type = "eql"
query = '''
process where host.os.type == "linux" and event.type == "start" and event.action == "exec" and
process where host.os.type == "linux" and event.type == "start" and event.action in ("exec", "exec_event", "start") and
process.parent.executable != null and
process.name in ("swapon", "swapoff") or (
process.command_line like ("*vm.swappiness*", "*/proc/sys/vm/swappiness*") and (
@@ -1,8 +1,10 @@
[metadata]
creation_date = "2023/09/21"
integration = ["endpoint", "auditd_manager"]
integration = ["endpoint", "auditd_manager", "crowdstrike", "sentinel_one_cloud_funnel"]
maturity = "production"
updated_date = "2024/05/21"
min_stack_version = "8.13.0"
min_stack_comments = "Breaking change at 8.13.0 for SentinelOne Integration."
updated_date = "2025/01/08"
[rule]
author = ["Elastic"]
@@ -11,7 +13,7 @@ Identifies processes that are capable of downloading files with command line arg
autonomous SSH worm. This worm intercepts outgoing SSH connections every time a user uses ssh.
"""
from = "now-9m"
index = ["logs-endpoint.events.*", "endgame-*", "auditbeat-*", "logs-auditd_manager.auditd-*"]
index = ["logs-endpoint.events.*", "endgame-*", "auditbeat-*", "logs-auditd_manager.auditd-*", "logs-crowdstrike.fdr*", "logs-sentinel_one_cloud_funnel.*"]
language = "eql"
license = "Elastic License v2"
name = "Potential SSH-IT SSH Worm Downloaded"
@@ -53,13 +55,16 @@ tags = [
"Data Source: Elastic Defend",
"Data Source: Elastic Endgame",
"Data Source: Auditd Manager",
"Data Source: Crowdstrike",
"Data Source: SentinelOne",
]
timestamp_override = "event.ingested"
type = "eql"
query = '''
process where host.os.type == "linux" and event.type == "start" and event.action in ("exec", "exec_event", "executed", "process_started")
and process.name in ("curl", "wget") and process.args : (
process where host.os.type == "linux" and event.type == "start" and
event.action in ("exec", "exec_event", "start", "ProcessRollup2", "executed", "process_started") and
process.name in ("curl", "wget") and process.args : (
"https://thc.org/ssh-it/x", "http://nossl.segfault.net/ssh-it-deploy.sh", "https://gsocket.io/x",
"https://thc.org/ssh-it/bs", "http://nossl.segfault.net/bs"
)
@@ -1,8 +1,10 @@
[metadata]
creation_date = "2024/02/01"
integration = ["endpoint"]
integration = ["endpoint", "sentinel_one_cloud_funnel"]
maturity = "production"
updated_date = "2024/09/23"
min_stack_version = "8.13.0"
min_stack_comments = "Breaking change at 8.13.0 for SentinelOne Integration."
updated_date = "2025/01/08"
[rule]
author = ["Elastic"]
@@ -14,7 +16,7 @@ repositories. Attackers can backdoor APT to gain persistence by injecting malici
thereby ensuring continued unauthorized access or control each time APT is used for package management.
"""
from = "now-9m"
index = ["logs-endpoint.events.*"]
index = ["logs-endpoint.events.*", "logs-sentinel_one_cloud_funnel.*"]
language = "eql"
license = "Elastic License v2"
name = "Suspicious APT Package Manager Execution"
@@ -56,17 +58,18 @@ tags = [
"Tactic: Execution",
"Tactic: Defense Evasion",
"Data Source: Elastic Defend",
"Data Source: SentinelOne",
]
type = "eql"
query = '''
sequence by host.id with maxspan=5s
[process where host.os.type == "linux" and event.type == "start" and event.action == "exec" and
[process where host.os.type == "linux" and event.type == "start" and event.action in ("exec", "start") and
process.parent.name == "apt" and process.args == "-c" and process.name in (
"bash", "dash", "sh", "tcsh", "csh", "zsh", "ksh", "fish"
)
] by process.entity_id
[process where host.os.type == "linux" and event.type == "start" and event.action == "exec" and process.name : (
[process where host.os.type == "linux" and event.type == "start" and event.action in ("exec", "start") and process.name : (
"bash", "dash", "sh", "tcsh", "csh", "zsh", "ksh", "fish", "python*", "php*",
"perl", "ruby", "lua*", "openssl", "nc", "netcat", "ncat", "telnet", "awk"
)
@@ -1,8 +1,10 @@
[metadata]
creation_date = "2022/07/22"
integration = ["endpoint"]
integration = ["endpoint", "sentinel_one_cloud_funnel"]
maturity = "production"
updated_date = "2024/10/17"
min_stack_version = "8.13.0"
min_stack_comments = "Breaking change at 8.13.0 for SentinelOne Integration."
updated_date = "2025/01/08"
[transform]
[[transform.osquery]]
@@ -53,7 +55,7 @@ either a start or a kill entry in every runlevel and when the system is rebooted
providing long-term persistence.
"""
from = "now-9m"
index = ["logs-endpoint.events.*", "endgame-*"]
index = ["logs-endpoint.events.*", "endgame-*", "logs-sentinel_one_cloud_funnel.*"]
language = "eql"
license = "Elastic License v2"
name = "Chkconfig Service Add"
@@ -169,11 +171,12 @@ tags = [
"Threat: Lightning Framework",
"Data Source: Elastic Endgame",
"Data Source: Elastic Defend",
"Data Source: SentinelOne",
]
timestamp_override = "event.ingested"
type = "eql"
query = '''
process where host.os.type == "linux" and event.action in ("exec", "exec_event") and
process where host.os.type == "linux" and event.action in ("exec", "exec_event", "start") and
(
(process.executable : "/usr/sbin/chkconfig" and process.args : "--add") or
(process.args : "*chkconfig" and process.args : "--add")
@@ -1,8 +1,10 @@
[metadata]
creation_date = "2024/06/25"
integration = ["endpoint"]
integration = ["endpoint", "sentinel_one_cloud_funnel"]
maturity = "production"
updated_date = "2024/09/23"
min_stack_version = "8.13.0"
min_stack_comments = "Breaking change at 8.13.0 for SentinelOne Integration."
updated_date = "2025/01/08"
[rule]
author = ["Elastic"]
@@ -14,7 +16,7 @@ persistence by injecting malicious code into plugins that DNF runs, thereby ensu
control each time DNF is used for package management.
"""
from = "now-9m"
index = ["logs-endpoint.events.file*"]
index = ["logs-endpoint.events.file*", "logs-sentinel_one_cloud_funnel.*", "endgame-*"]
language = "eql"
license = "Elastic License v2"
name = "DNF Package Manager Plugin File Creation"
@@ -58,6 +60,8 @@ tags = [
"Tactic: Persistence",
"Tactic: Defense Evasion",
"Data Source: Elastic Defend",
"Data Source: SentinelOne",
"Data Source: Elastic Endgame",
]
timestamp_override = "event.ingested"
type = "eql"
@@ -1,8 +1,10 @@
[metadata]
creation_date = "2024/07/15"
integration = ["endpoint"]
integration = ["endpoint", "sentinel_one_cloud_funnel"]
maturity = "production"
updated_date = "2024/09/23"
min_stack_version = "8.13.0"
min_stack_comments = "Breaking change at 8.13.0 for SentinelOne Integration."
updated_date = "2025/01/08"
[rule]
author = ["Elastic"]
@@ -12,7 +14,7 @@ executes before or after events such as: commit, push, and receive. An attacker
commands on the system and establish persistence.
"""
from = "now-9m"
index = ["logs-endpoint.events.process*"]
index = ["logs-endpoint.events.process*", "logs-sentinel_one_cloud_funnel.*"]
language = "eql"
license = "Elastic License v2"
name = "Git Hook Command Execution"
@@ -56,16 +58,17 @@ tags = [
"Tactic: Execution",
"Tactic: Defense Evasion",
"Data Source: Elastic Defend",
"Data Source: SentinelOne",
]
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 where host.os.type == "linux" and event.type == "start" and event.action in ("exec", "start") and
process.parent.name == "git" and process.args : ".git/hooks/*" and
process.name in ("bash", "dash", "sh", "tcsh", "csh", "zsh", "ksh", "fish")
] by process.entity_id
[process where host.os.type == "linux" and event.type == "start" and event.action == "exec" and
[process where host.os.type == "linux" and event.type == "start" and event.action in ("exec", "start") and
process.parent.name in ("bash", "dash", "sh", "tcsh", "csh", "zsh", "ksh", "fish")] by process.parent.entity_id
'''
@@ -1,8 +1,10 @@
[metadata]
creation_date = "2024/06/26"
integration = ["endpoint"]
integration = ["endpoint", "crowdstrike", "sentinel_one_cloud_funnel"]
maturity = "production"
updated_date = "2024/09/23"
min_stack_version = "8.13.0"
min_stack_comments = "Breaking change at 8.13.0 for SentinelOne Integration."
updated_date = "2025/01/08"
[rule]
author = ["Elastic"]
@@ -13,7 +15,7 @@ spawned by the Git process itself. This behavior may indicate an attacker attemp
leveraging the legitimate Git process to execute unauthorized commands.
"""
from = "now-9m"
index = ["logs-endpoint.events.process*"]
index = ["logs-endpoint.events.process*", "logs-crowdstrike.fdr*", "logs-sentinel_one_cloud_funnel.*", "endgame-*"]
language = "eql"
license = "Elastic License v2"
name = "Git Hook Child Process"
@@ -57,24 +59,31 @@ tags = [
"Tactic: Execution",
"Tactic: Defense Evasion",
"Data Source: Elastic Defend",
"Data Source: Crowdstrike",
"Data Source: SentinelOne",
"Data Source: Elastic Endgame",
]
timestamp_override = "event.ingested"
type = "eql"
query = '''
process where host.os.type == "linux" and event.type == "start" and event.action == "exec" and process.parent.name in (
"applypatch-msg", "commit-msg", "fsmonitor-watchman", "post-update", "post-checkout", "post-commit",
"pre-applypatch", "pre-commit", "pre-merge-commit", "prepare-commit-msg", "pre-push", "pre-rebase", "pre-receive",
"push-to-checkout", "update", "post-receive", "pre-auto-gc", "post-rewrite", "sendemail-validate", "p4-pre-submit",
"post-index-change", "post-merge", "post-applypatch"
) and (
process.name in ("nohup", "setsid", "disown", "bash", "dash", "sh", "tcsh", "csh", "zsh", "ksh", "fish") or
process.name : ("php*", "perl*", "ruby*", "lua*") or
process.executable : (
"/boot/*", "/dev/shm/*", "/etc/cron.*/*", "/etc/init.d/*", "/etc/update-motd.d/*",
"/run/*", "/srv/*", "/tmp/*", "/var/tmp/*", "/var/log/*"
)
) and not process.name in ("git", "dirname")
process where host.os.type == "linux" and event.type == "start" and
event.action in ("exec", "exec_event", "start", "ProcessRollup2") and
process.parent.name in (
"applypatch-msg", "commit-msg", "fsmonitor-watchman", "post-update", "post-checkout", "post-commit",
"pre-applypatch", "pre-commit", "pre-merge-commit", "prepare-commit-msg", "pre-push", "pre-rebase", "pre-receive",
"push-to-checkout", "update", "post-receive", "pre-auto-gc", "post-rewrite", "sendemail-validate", "p4-pre-submit",
"post-index-change", "post-merge", "post-applypatch"
) and
(
process.name in ("nohup", "setsid", "disown", "bash", "dash", "sh", "tcsh", "csh", "zsh", "ksh", "fish") or
process.name : ("php*", "perl*", "ruby*", "lua*") or
process.executable : (
"/boot/*", "/dev/shm/*", "/etc/cron.*/*", "/etc/init.d/*", "/etc/update-motd.d/*",
"/run/*", "/srv/*", "/tmp/*", "/var/tmp/*", "/var/log/*"
)
) and
not process.name in ("git", "dirname")
'''
@@ -1,8 +1,10 @@
[metadata]
creation_date = "2023/03/07"
integration = ["endpoint", "auditd_manager"]
integration = ["endpoint", "auditd_manager", "crowdstrike", "sentinel_one_cloud_funnel"]
maturity = "production"
updated_date = "2024/09/23"
min_stack_version = "8.13.0"
min_stack_comments = "Breaking change at 8.13.0 for SentinelOne Integration."
updated_date = "2025/01/08"
[transform]
[[transform.osquery]]
@@ -36,7 +38,7 @@ Identifies the attempt to create a new backdoor user by setting the user's UID t
0 to establish persistence on a system.
"""
from = "now-9m"
index = ["logs-endpoint.events.*", "endgame-*", "auditbeat-*", "logs-auditd_manager.auditd-*"]
index = ["logs-endpoint.events.*", "endgame-*", "auditbeat-*", "logs-auditd_manager.auditd-*", "logs-crowdstrike.fdr*", "logs-sentinel_one_cloud_funnel.*"]
language = "eql"
license = "Elastic License v2"
name = "Potential Linux Backdoor User Account Creation"
@@ -125,12 +127,15 @@ tags = [
"Resources: Investigation Guide",
"Data Source: Elastic Defend",
"Data Source: Auditd Manager",
"Data Source: Crowdstrike",
"Data Source: SentinelOne",
]
timestamp_override = "event.ingested"
type = "eql"
query = '''
process where host.os.type == "linux" and event.type == "start" and event.action in ("exec", "exec_event", "executed", "process_started")
process where host.os.type == "linux" and event.type == "start" and
event.action in ("exec", "exec_event", "start", "ProcessRollup2", "executed", "process_started")
and process.name == "usermod" and process.args : "-u" and process.args : "0" and process.args : "-o"
'''
@@ -1,8 +1,10 @@
[metadata]
creation_date = "2023/03/04"
integration = ["endpoint"]
integration = ["endpoint", "sentinel_one_cloud_funnel"]
maturity = "production"
updated_date = "2024/05/21"
min_stack_version = "8.13.0"
min_stack_comments = "Breaking change at 8.13.0 for SentinelOne Integration."
updated_date = "2025/01/08"
[transform]
[[transform.osquery]]
@@ -40,7 +42,7 @@ false_positives = [
""",
]
from = "now-9m"
index = ["logs-endpoint.events.*", "endgame-*"]
index = ["logs-endpoint.events.*", "endgame-*", "logs-sentinel_one_cloud_funnel.*"]
language = "eql"
license = "Elastic License v2"
name = "Potential Remote Code Execution via Web Server"
@@ -139,13 +141,14 @@ tags = [
"Use Case: Vulnerability",
"Resources: Investigation Guide",
"Data Source: Elastic Defend",
"Data Source: SentinelOne",
]
timestamp_override = "event.ingested"
type = "eql"
query = '''
process where host.os.type == "linux" and event.type == "start" and
event.action in ("exec", "exec_event") and process.parent.executable : (
event.action in ("exec", "exec_event", "start") and process.parent.executable : (
"/usr/sbin/nginx", "/usr/local/sbin/nginx",
"/usr/sbin/apache", "/usr/local/sbin/apache",
"/usr/sbin/apache2", "/usr/local/sbin/apache2",