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:扩展已有规则。

不要直接修改发行版规则文件。将组织规则、例外和版本控制分离,便于升级和审计。

五、降噪而不是关闭规则

处理误报顺序:

  1. 确认事件真实行为;
  2. 定位 Namespace、Image、ServiceAccount、Command 与父进程;
  3. 判断是否属于合法基线;
  4. 创建最小范围例外;
  5. 设置过期时间和所有者;
  6. 复核例外是否可被攻击者利用。

不要因为一个备份 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 频率、内核过滤、字段、栈、输出和规则数量。上线方法:

  1. 建立业务 CPU/延迟基线;
  2. 部署默认或最小规则集;
  3. 观察事件率、丢事件和 Agent 开销;
  4. 在内核侧尽早按 Namespace/Label/进程过滤;
  5. 分批增加规则;
  6. 对高频低价值事件聚合或采样。

十二、与 Kubernetes Audit 结合

运行时事件回答“Pod 内发生什么”,Audit 回答“谁通过 API 改了什么”。将两者按时间、用户、ServiceAccount、Pod UID 和 Namespace 关联,可识别:

  • 用户创建特权 Pod 后执行 Shell;
  • 修改 ConfigMap/Secret 后产生异常进程;
  • 创建临时调试容器;
  • RBAC 变更后访问敏感资源;
  • 删除运行时规则或 Agent。

十三、事件响应流程

告警到达后:

  1. 确认事件时间、节点、Pod、容器、镜像摘要;
  2. 判断 Pod 是否仍存在;
  3. 保存日志、事件、网络和进程证据;
  4. 评估凭证是否泄露;
  5. 必要时隔离工作负载或节点;
  6. 轮换 Token、密钥和证书;
  7. 从可信镜像重建,而不是在可疑容器内“清理”;
  8. 追查入口、横向移动和持久化;
  9. 更新规则和预防控制。

删除 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/
Copyright © yan-jian.com 2023 - 2026 · Powered by GitBook更新时间: 2026-11-03 16:23:45

results matching ""

    No results matching ""