容器工作负载保护的工作原理
编辑容器工作负载保护的工作原理
编辑CWP 由一个轻量级集成(用于容器的 Defend BETA)提供支持,该集成由 Elastic Agent 打包和配置。该代理以守护进程集的形式安装在支持的 Kubernetes 集群上,并且该集成使用 eBPF LSM 和跟踪点探针来生成系统事件。事件会针对 eBPF LSM 钩子点进行评估,从而可以在允许系统活动继续进行之前评估配置的策略。
该策略确定哪些系统行为(例如,进程执行、文件创建或删除等)将导致操作。操作很简单:将行为记录到 Elasticsearch、在 Elasticsearch 中创建警报或阻止该行为。
威胁检测
编辑该系统附带一个默认配置的策略,其中包含两个选择器和响应。第一个选择器旨在将进程遥测事件流式传输到用户的 Elasticsearch 集群。该策略使用指定 fork 和 exec 操作的 allProcesses 选择器。此选择器映射到 allProcesses 响应,该响应指定日志操作。
生成的遥测数据被转换为 ECS 文档并流式传输回用户的 Elasticsearch 集群,其中 Elastic Security SIEM 评估该数据以检测恶意行为。
漂移检测和预防
编辑第二个选择器用于检测容器中现有可执行文件的修改或新可执行文件的创建(这就是 Elastic 检测“容器漂移”的方式)。策略选择器名为 executableChanges,并映射到一个名为 executableChanges 的响应部分,该部分指定警报操作。
此策略配置为警报响应,这意味着当检测到漂移条件时,匹配的事件将被收集并作为警报写入用户的 Elasticsearch 集群。SIEM 中的预构建规则“升级规则”会监视这些警报文档,并在检测到漂移时在 SIEM 中引发警报。也可以修改此策略以通过将响应操作更改为阻止来阻止漂移操作。
策略
编辑想要充分利用 CWP 优势的用户将受益于理解系统的策略语法,这使得可以构建细粒度的策略。可以构建策略以精确匹配预期的容器行为——禁止任何意外行为——从而大大加强容器工作负载的安全性态势。
策略由选择器和响应组成。给定策略必须至少包含一个选择器和一个响应。目前,系统支持两种类型的选择器和响应:文件和进程。选择器告诉服务要匹配哪些系统操作,并且具有多个可以组合在一起的条件(使用逻辑 AND 操作)以提供精确的控制。响应指示系统在系统操作与选择器匹配时要采取的操作。
部署
编辑可以通过两种方式部署该服务:在独立模式下使用 Elastic Agent 以声明方式部署,或者通过 Fleet 作为托管 D4C 集成部署。使用前者,团队可以灵活地将其策略集成到 Git 中,以实现基础设施即代码 (IoC) 方法,从而简化部署过程并实现更轻松的管理。
您需要在 k8s yaml 中的 securityContext
下包含以下 capabilities
,以便该服务正常工作。
securityContext: runAsUser: 0 # The following capabilities are needed for 'Defend for containers' integration (cloud-defend) # If you are using this integration, please uncomment these lines before applying. capabilities: add: - BPF # (since Linux 5.8) allows loading of BPF programs, create most map types, load BTF, iterate programs and maps. - PERFMON # (since Linux 5.8) allows attaching of BPF programs used for performance metrics and observability operations. - SYS_RESOURCE # Allow use of special resources or raising of resource limits. Used by 'Defend for Containers' to modify 'rlimit_memlock'
策略示例
编辑给定策略必须至少包含一个 selector
(文件或进程)和一个 response
。
process: selectors: - name: allProcesses operation: [fork, exec] - name: interactiveProcesses operation: [fork, exec] sessionLeaderInteractive: true responses: - match: [allProcesses] actions: [log] - match: [interactiveProcesses] actions: [alert] file: selectors: - name: executableChanges operation: [createExecutable, modifyExecutable] responses: - match: [executableChanges] actions: [alert]
由于
file
和process
操作是异步发生的,因此必须将它们的selectors
和responses
作为单独的实体进行管理。文件选择器不能用于触发进程响应,反之亦然。
选择器
编辑选择器告诉服务要匹配哪些系统操作,并且具有多个可以组合在一起的条件(使用逻辑 AND 操作)以提供精确的控制。
- name: exampleFileSelector operation: [createExecutable, modifyExecutable] containerImageName: [nginx] containerImageTag: [latest] targetFilePath: [/usr/bin/**] kubernetesClusterId: [cluster1] kubernetesClusterName: [stagingCluster] kubernetesNamespace: [default] kubernetesPodLabel: [‘production:*’] kubernetesPodName: [‘nginx-pod-*’] ignoreVolumeMounts: true
选择器必须包含一个名称和以下条件中的至少一个。
通用条件(适用于文件和进程选择器)
编辑名称 | 描述 |
---|---|
containerImageFullName |
要匹配的容器完整镜像名称列表。例如,“docker.io/nginx”。 |
containerImageName |
要匹配的容器镜像名称列表。例如,nginx |
containerImageTag |
要匹配的容器镜像标签列表。例如,latest |
kubernetesClusterId |
要匹配的 kubernetes 集群 ID 列表。为了与 KSPM 保持一致,kube-system 命名空间 uid 用作集群 ID。 |
kubernetesClusterName |
要匹配的 kubernetes 集群名称列表。 |
kubernetesNamespace |
要匹配的 kubernetes 命名空间列表。 |
kubernetesPodName |
要匹配的 kubernetes Pod 名称列表。支持尾随通配符。 |
kubernetesPodLabel |
资源标签列表。支持尾随通配符(仅限值)。例如 |
例如,以下选择器将匹配在任何容器中的文件系统的任何部分创建可执行文件的尝试,只要其 Pod 具有标签
environment:production
或service:auth*
- name: operation: [createExecutable] kubernetesPodLabel: [environment:production, service:auth*]
文件特定条件
编辑名称 | 描述 |
---|---|
操作 |
要匹配的系统操作列表。选项包括 |
ignoreVolumeMounts |
如果设置,则忽略所有卷挂载上的文件操作。 |
ignoreVolumeFiles |
如果设置,则仅忽略文件挂载上的操作。例如,已挂载的文件、configMap、机密等... |
targetFilePath |
要包含的文件路径列表。路径是绝对路径,并支持通配符。 |
考虑以下选择器示例
- name: targetFilePath: [/usr/bin/echo, /usr/sbin/*, /usr/local/**]
在此示例中,
-
/usr/bin/echo
将匹配echo
二进制文件,并且仅匹配此二进制文件 -
/usr/local/**
将匹配/usr/local/
下的所有递归内容,包括/usr/local/bin/something
-
/usr/sbin/*
包括/usr/sbin
的所有直接子项
进程特定条件
编辑名称 | 描述 |
---|---|
操作 |
要匹配的系统操作列表。选项包括 |
processExecutable |
要匹配的可执行文件(包括完整路径)列表。例如, |
processName |
要匹配的进程名称(可执行文件基本名称)列表。例如,bash、vi、cat 等... |
sessionLeaderInteractive |
如果设置为 true,则只会匹配交互式会话(即,具有控制 TTY 的会话) |
响应
编辑响应指示系统在系统操作与 selectors
匹配时要采取的 actions
。
策略可以包含一个或多个响应。每个响应都由以下内容组成
responses: - match: [allProcesses] exclude: [excludeSystemDServices] actions: [log] - match: [nefariousActivity] actions: [alert, block]
响应字段 | 描述 |
---|---|
match |
相同类型( |
exclude |
一个可选的选择器数组,用于排除 match 中的所有内容 |
actions |
要执行的操作数组(如果至少有一个 |
操作 | 描述 |
---|---|
|
将事件发送到 |
|
将事件(文件或进程)写入 |
|
阻止系统操作继续进行。此阻止操作发生在事件执行之前。如果启用了 |
示例
编辑考虑以下 yaml。
file: selectors: - name: binDirExeMods operation: - createExecutable - modifyExecutable targetFilePath: - /usr/bin/** - name: etcFileChanges operation: - createFile - modifyFile - deleteFile targetFilePath: - /etc/** - name: nginx containerImageName: - nginx responses: - match: - binDirExeMods - etcFileChanges exclude: - nginx actions: - alert - block
我们有三个 file
选择器。两个用于匹配(逻辑 OR 运算),一个用于排除。
这可以理解为:如果在 /usr/bin 下创建或修改可执行文件,或者在 /etc 下创建、修改或删除文件,则阻止并创建一个警报,只要它不是 nginx 容器。
例如:
如果 (binDirExeMods
或 etcFileChanges
) 且非 nginx
= 运行操作 alert
和 block
进程事件
编辑以下字段会填充到所有 event.category: process
的事件中
字段 | 示例 |
---|---|
2023-03-20T16:03:59.520Z |
|
7829f26d-c2d1-4eaf-a1ac-cd9cb9e12f75 |
|
cloud-defend |
|
8.8.0 |
|
1234567abc |
|
elastic-dev |
|
us-east-1c |
|
webapp-node |
|
123456abc |
|
staging |
|
aws |
|
us-east-1 |
|
cloud_defend.matched_selectors |
[interactiveSessions] |
cloud_defend.package_policy_id |
4c9cbba0-c812-11ed-a8dd-91ec403e4f03 |
cloud_defend.package_policy_revision |
2 |
cloud_defend.hook_point |
[tracepointsched_process_fork,tracepointsched_process_exec, kprobe__taskstats_exit] |
nginx_1 |
|
nginx |
|
latest |
|
cloud_defend.process |
|
default |
|
logs |
|
8.7.0 |
|
fork、exec、end |
|
verified |
|
process |
|
2023-03-20T16:03:59.520Z |
|
cloud_defend.process |
|
3ee85eee-72d9-4e9d-934f-3787952ca830 |
|
2023-03-20T16:04:12Z |
|
event、alert |
|
cloud_defend |
|
start、end、denied |
|
0 |
|
amd64 |
|
815a760f-8153-49e1-9d0b-da0d3b2a468c |
|
1bb9e6a948dfb1c3cd38d1fdc8de4481 |
|
[127.0.0.1, 172.20.0.2, 172.18.0.6] |
|
kibana-node |
|
[32:a9:cc:26:4c:e5, 7a:ec:f0:3e:29:ee] |
|
kibana-node.myapp.co |
|
ubuntu |
|
Ubuntu 20.04.5 |
|
5.10.161+ #1 SMP Thu Jan 5 22:49:42 UTC 2023 |
|
'Linux |
|
ubuntu |
|
linux |
|
20.04.5 |
|
4026531836 |
|
12345 |
|
website |
|
default |
|
172.18.0.6 |
|
orchestrator.resource.annotation |
[note:testing] |
orchestrator.resource.label |
[service:webapp] |
webapp-proxy |
|
DaemonSet、ReplicaSet 等... |
|
pod |
|
[ls、--color=auto] |
|
2023-03-20T16:04:12Z |
|
NzgyOWYyNmQtYzJkMS00ZWFmLWExYWMtY2Q5Y2I5ZTEyZjc1LTE5MTU1MzUtMTY3OTMyODIzOQ== |
|
[bash] |
|
NzgyOWYyNmQtYzJkMS00ZWFmLWExYWMtY2Q5Y2I5ZTEyZjc1LTE5MTU1MzUtMTY3OTMyODIzOQ== |
|
container |
|
/bin/bash |
|
0 |
|
true |
|
bash |
|
1915529 |
|
false |
|
2023-03-20T16:03:59.520Z |
|
0 |
|
/usr/share/elastic-agent |
|
/usr/bin/ls |
|
[ls、--color=auto] |
|
NzgyOWYyNmQtYzJkMS00ZWFmLWExYWMtY2Q5Y2I5ZTEyZjc1LTE5MTU1MzUtMTY3OTMyODIzOQ== |
|
/usr/bin/ls |
|
0 |
|
true |
|
ls |
|
1915529 |
|
true |
|
2023-03-20T16:03:59.520Z |
|
0 |
|
/usr/share/elastic-agent |
|
true |
|
ls |
|
[bash] |
|
NzgyOWYyNmQtYzJkMS00ZWFmLWExYWMtY2Q5Y2I5ZTEyZjc1LTE5MTU1MzUtMTY3OTMyODIzOQ== |
|
/bin/bash |
|
0 |
|
true |
|
bash |
|
1915529 |
|
false |
|
2023-03-20T16:03:59.520Z |
|
0 |
|
/usr/share/elastic-agent |
|
1916234 |
|
[{ args: [bash], executable: /bin/bash}] |
|
[bash] |
|
/bin/bash |
|
[bash] |
|
NzgyOWYyNmQtYzJkMS00ZWFmLWExYWMtY2Q5Y2I5ZTEyZjc1LTE5MTU1MzUtMTY3OTMyODIzOQ== |
|
/bin/bash |
|
0 |
|
true |
|
bash |
|
1915529 |
|
false |
|
2023-03-20T16:03:59.520Z |
|
0 |
|
/usr/share/elastic-agent |
|
2023-03-20T16:03:59.520Z |
|
/usr/share/elastic-agent |
|
0 |
文件事件
编辑以下字段适用于所有 event.category: file
的事件
字段 | 示例 |
---|---|
2023-03-20T16:03:59.520Z |
|
7829f26d-c2d1-4eaf-a1ac-cd9cb9e12f75 |
|
cloud-defend |
|
8.8.0 |
|
1234567abc |
|
elastic-dev |
|
us-east-1c |
|
123456abc |
|
staging |
|
aws |
|
us-east-1 |
|
cloud_defend.matched_selectors |
[binModifications] |
cloud_defend.package_policy_id |
4c9cbba0-c812-11ed-a8dd-91ec403e4f03 |
cloud_defend.package_policy_revision |
2 |
cloud_defend.hook_point |
以下之一:lsmpath_chmod、lsmpath_mknod、lsmfile_open、lsmpath_truncate、lsmpath_rename、lsmpath_link、lsm__path_unlink |
nginx_1 |
|
nginx |
|
latest |
|
cloud_defend.process |
|
default |
|
logs |
|
8.7.0 |
|
以下之一:creation (创建), modification (修改), deletion (删除), rename (重命名), link (链接), open (打开) |
|
verified |
|
process |
|
2023-03-20T16:03:59.520Z |
|
cloud_defend.process |
|
3ee85eee-72d9-4e9d-934f-3787952ca830 |
|
2023-03-20T16:04:12Z |
|
以下之一:event (事件), alert (警报) |
|
cloud_defend |
|
以下之一:start (开始), end (结束), denied (拒绝) |
|
ts |
|
script.ts |
|
/home/workspace/project/script.ts |
|
0 |
|
amd64 |
|
815a760f-8153-49e1-9d0b-da0d3b2a468c |
|
1bb9e6a948dfb1c3cd38d1fdc8de4481 |
|
[127.0.0.1, 172.20.0.2, 172.18.0.6] |
|
kibana-node |
|
[32:a9:cc:26:4c:e5, 7a:ec:f0:3e:29:ee] |
|
kibana-node.myapp.co |
|
ubuntu |
|
Ubuntu 20.04.5 |
|
5.10.161+ #1 SMP Thu Jan 5 22:49:42 UTC 2023 |
|
'Linux |
|
ubuntu |
|
linux |
|
20.04.5 |
|
4026531836 |
|
12345 |
|
website |
|
default |
|
172.18.0.6 |
|
orchestrator.resource.annotation |
[note:testing] |
orchestrator.resource.label |
[service:webapp] |
webapp-proxy |
|
… |
|
pod |
|
NzgyOWYyNmQtYzJkMS00ZWFmLWExYWMtY2Q5Y2I5ZTEyZjc1LTE5MTU1MzUtMTY3OTMyODIzOQ== |
|
NzgyOWYyNmQtYzJkMS00ZWFmLWExYWMtY2Q5Y2I5ZTEyZjc1LTE5MTU1MzUtMTY3OTMyODIzOQ== |
|
/usr/bin/vi |
|
NzgyOWYyNmQtYzJkMS00ZWFmLWExYWMtY2Q5Y2I5ZTEyZjc1LTE5MTU1MzUtMTY3OTMyODIzOQ== |
|
true |
|
vi |
|
NzgyOWYyNmQtYzJkMS00ZWFmLWExYWMtY2Q5Y2I5ZTEyZjc1LTE5MTU1MzUtMTY3OTMyODIzOQ== |
|
1916234 |
|
NzgyOWYyNmQtYzJkMS00ZWFmLWExYWMtY2Q5Y2I5ZTEyZjc1LTE5MTU1MzUtMTY3OTMyODIzOQ== |
|
0 |
|
0 |
支持矩阵
编辑EKS 1.24-1.27 (AL2022) | GKE 1.24-1.27 (COS) | |
---|---|---|
进程事件导出 |
✅ |
✅ |
文件事件导出 |
✅ |
✅ |
漂移预防 |
✅ |
✅ |
挂载点感知 |
✅ |
✅ |
进程阻止 |
✅ |
✅ |
网络事件导出 |
即将推出 |
即将推出 |
网络阻止 |
即将推出 |
即将推出 |
变更日志
编辑变更日志
版本 | 详细信息 | Kibana 版本 |
---|---|---|
1.2.6 |
Bug 修复 (查看拉取请求) |
8.11.0 或更高版本 |
1.2.5 |
增强 (查看拉取请求) |
8.11.0 或更高版本 |
1.2.4 |
增强 (查看拉取请求) |
8.11.0 或更高版本 |
1.2.3 |
增强 (查看拉取请求) |
8.11.0 或更高版本 |
1.2.2 |
增强 (查看拉取请求) |
8.11.0 或更高版本 |
1.2.1 |
增强 (查看拉取请求) |
8.11.0 或更高版本 |
1.2.1-preview2 |
增强 (查看拉取请求) |
— |
1.2.1-preview |
增强 (查看拉取请求) |
— |
1.2.0 |
增强 (查看拉取请求) |
8.8.0 或更高版本 |
1.2.0-preview |
增强 (查看拉取请求) |
— |
1.1.0 |
增强 (查看拉取请求) |
8.8.0 或更高版本 |
1.0.7 |
增强 (查看拉取请求) |
8.8.0 或更高版本 |
1.0.6 |
增强 (查看拉取请求) |
8.8.0 或更高版本 |
1.0.5 |
增强 (查看拉取请求) |
8.8.0 或更高版本 |
1.0.4 |
增强 (查看拉取请求) |
— |
1.0.3 |
增强 (查看拉取请求) |
— |
1.0.2 |
增强 (查看拉取请求) |
— |
1.0.1 |
增强 (查看拉取请求) |
— |
1.0.0 |
增强 (查看拉取请求) |
— |
0.1.1 |
增强 (查看拉取请求) |
— |
0.1.0 |
增强 (查看拉取请求) |
— |