Kubernetes 运行时安全:Falco 与 Tetragon 生产实践
镜像扫描和 Admission 控制只能覆盖部署前与准入阶段。容器启动后仍可能发生异常 Shell、敏感文件读取、权限提升、横向连接、恶意二进制执行和凭证滥用。Falco 与 Tetragon 从内核运行时事件出发提供检测、观测或执行能力,但必须建立规则基线、降噪、事件响应和自身安全治理。
运行时安全工具通常以高权限 DaemonSet 运行,既能看到大量敏感行为,也可能在错误策略下中断业务。上线应先采用观察模式,完成基线和灰度后再启用阻断。
一、运行时安全在体系中的位置
代码与依赖扫描
↓
镜像扫描、签名和 SBOM
↓
Admission 策略
↓
Kubernetes 运行中
├─ Falco:规则检测与告警
├─ Tetragon:eBPF 观测与可选内核级执行
└─ SIEM/SOC:关联、调查、响应
它们不能替代 RBAC、NetworkPolicy、Pod Security、密钥管理、镜像签名和节点加固,而是补足运行中行为可见性。
二、先建立威胁模型
按工作负载确认要检测:
- 容器内启动交互式 Shell;
- 写入
/etc、/usr/bin、证书或 ServiceAccount Token; - 读取敏感文件;
- 创建异常网络连接;
- 使用
nsenter、setns、Mount 或特权能力; - 从临时目录执行二进制;
- 使用包管理器或下载工具;
- Kubernetes 审计中的高风险 API;
- 容器逃逸相关内核行为。
不同业务基线不同。调试容器、运维 DaemonSet 和普通 Web Pod 不应共用完全相同规则。
三、Falco 工作方式
Falco 从系统调用或插件事件源读取事件,使用 YAML 规则匹配,产生包含 Kubernetes/容器上下文的告警,可输出到 stdout、文件、Syslog、HTTP 等渠道。
规则基础示意:
- rule: Shell spawned in application container
desc: Detect a shell in selected production workloads
condition: >
spawned_process and container and
proc.name in (bash, sh, zsh) and
k8s.ns.name = "production"
output: >
Shell in container (user=%user.name pod=%k8s.pod.name
container=%container.name command=%proc.cmdline)
priority: WARNING
tags: [container, execution]
实际规则需使用目标版本支持的字段与宏,并避免输出敏感参数。
四、Falco 规则组成
常见元素:
- List:复用进程名、路径等集合;
- Macro:复用条件;
- Rule:条件、输出、优先级和标签;
- Exception:对已知场景做受控豁免;
- Append:扩展已有规则。
不要直接修改发行版规则文件。将组织规则、例外和版本控制分离,便于升级和审计。
五、降噪而不是关闭规则
处理误报顺序:
- 确认事件真实行为;
- 定位 Namespace、Image、ServiceAccount、Command 与父进程;
- 判断是否属于合法基线;
- 创建最小范围例外;
- 设置过期时间和所有者;
- 复核例外是否可被攻击者利用。
不要因为一个备份 Pod 使用 Shell,就对所有 Namespace 豁免 Shell 规则。
六、Falco 输出链路
Falcosidekick 或其他事件路由可将告警送入告警平台、SIEM、消息队列和数据湖。生产要求:
- 本地保留缓冲或可重试;
- 下游不可用时不阻塞内核事件处理;
- 对事件限速和聚合;
- 保留原始时间、节点、容器、规则和优先级;
- 敏感命令行脱敏;
- 监控输出丢失。
安全告警风暴本身可能成为稳定性风险。
七、Tetragon 工作方式
Tetragon 使用 eBPF 提供进程、文件和网络可见性,并通过 TracingPolicy 在内核侧过滤和执行动作。它能结合 Namespace、Pod Label、容器等 Kubernetes 身份。
apiVersion: cilium.io/v1alpha1
kind: TracingPolicyNamespaced
metadata:
name: observe-sensitive-file
namespace: production
spec:
kprobes:
- call: "security_file_permission"
syscall: false
selectors:
- matchActions:
- action: Post
这只是结构示意,真实 Hook、参数和 Selector 应严格按目标内核与 Tetragon 官方示例验证。
八、Tetragon 执行模式风险
Tetragon 可通过覆盖返回值或发送 Signal 阻断行为。二者语义不同:发送 SIGKILL 不一定能保证触发操作在进程退出前完全没有发生;某些场景需要结合 Override。
启用执行前:
- 先以观察模式运行至少一个完整业务周期;
- 限定测试 Namespace 与 Label;
- 验证内核版本和 Hook;
- 评估 TOCTOU 和旁路;
- 定义紧急撤销策略;
- 对策略写权限使用严格 RBAC 和双人审批。
九、部署与节点覆盖
运行时 Agent 通常作为 DaemonSet 部署。必须监控:
- 所有可调度节点是否有 Agent;
- 新节点是否自动覆盖;
- 内核/BTF/驱动兼容;
- Agent Ready、重启和丢事件;
- CPU、内存和磁盘;
- 容器运行时 Socket 与权限;
- 控制器/Operator 健康。
有一个未覆盖节点,就可能形成监控盲区。污点、架构和 OS 差异需单独处理。
十、自身安全
高权限 Agent 是高价值目标。加固措施:
- 镜像签名和固定摘要;
- 最小化 HostPath、Capability 和 Socket;
- 限制 CRD 读写 RBAC;
- 管理 gRPC/HTTP 端点的监听与认证;
- 保护规则仓库与发布流水线;
- 监控 Agent 被停止、规则被删除和配置变化;
- 将事件输出到不可由业务账号篡改的位置。
十一、性能与事件量
成本取决于 Hook 频率、内核过滤、字段、栈、输出和规则数量。上线方法:
- 建立业务 CPU/延迟基线;
- 部署默认或最小规则集;
- 观察事件率、丢事件和 Agent 开销;
- 在内核侧尽早按 Namespace/Label/进程过滤;
- 分批增加规则;
- 对高频低价值事件聚合或采样。
十二、与 Kubernetes Audit 结合
运行时事件回答“Pod 内发生什么”,Audit 回答“谁通过 API 改了什么”。将两者按时间、用户、ServiceAccount、Pod UID 和 Namespace 关联,可识别:
- 用户创建特权 Pod 后执行 Shell;
- 修改 ConfigMap/Secret 后产生异常进程;
- 创建临时调试容器;
- RBAC 变更后访问敏感资源;
- 删除运行时规则或 Agent。
十三、事件响应流程
告警到达后:
- 确认事件时间、节点、Pod、容器、镜像摘要;
- 判断 Pod 是否仍存在;
- 保存日志、事件、网络和进程证据;
- 评估凭证是否泄露;
- 必要时隔离工作负载或节点;
- 轮换 Token、密钥和证书;
- 从可信镜像重建,而不是在可疑容器内“清理”;
- 追查入口、横向移动和持久化;
- 更新规则和预防控制。
删除 Pod 会丢失部分证据,不能作为所有告警的第一动作。
十四、典型规则场景
容器内 Shell
结合终端、父进程、镜像、Namespace 和部署窗口,避免把所有健康检查误判。
写入系统目录
识别容器层写入、HostPath 写入和镜像构建类合法场景,生产应用通常不应修改系统二进制。
异常外连
结合目标 CIDR、端口、DNS、进程和工作负载身份。阻断前确认 CDN、第三方 API 和动态地址。
读取 ServiceAccount Token
很多 Kubernetes 客户端会正常读取 Token,应关注不常用进程、异常路径、读取后外连等组合信号。
包管理器与下载工具
生产不可变镜像通常不应运行 apt、yum、apk、curl 或 wget,但初始化、调试容器需精确例外。
十五、规则测试与发布
每条规则应有:触发样例、不触发样例、预期字段、支持平台、优先级、所有者和响应手册。使用专门测试 Namespace 产生安全事件,验证从内核到告警平台完整链路。
规则发布采用 Git、评审、语法校验、预生产、灰度节点和回滚。不要在线直接编辑规则而无版本记录。
十六、监控指标
至少监控 Agent 覆盖率、事件输入、规则命中、输出成功/失败、丢事件、队列、CPU/内存、规则加载失败、内核兼容错误、告警确认时间、误报率、规则例外数量与过期例外。
误报率不是越低越好;如果通过大范围豁免降到零,可能只是失去检测能力。
十七、上线清单
- 威胁模型与资产优先级已定义;
- 全节点覆盖并有盲区告警;
- Agent 镜像、RBAC、端点和规则仓库已加固;
- 规则先观察、后灰度、再阻断;
- 例外最小化并有过期时间;
- 告警输出限速、持久且脱敏;
- 与 Audit、镜像和身份信息可关联;
- 每类高优先级规则都有响应手册;
- 已演练告警、隔离、取证和凭证轮换。
参考资料
- Falco Documentation:
https://falco.org/docs/ - Falco Rules:
https://falco.org/docs/concepts/rules/ - Tetragon Tracing Policy:
https://tetragon.io/docs/concepts/tracing-policy/ - Tetragon Enforcement:
https://tetragon.io/docs/concepts/enforcement/