Falco 容器运行时安全实战:K8s 异常行为实时检测配置

Falco 容器运行时安全检测基于系统调用监控技术,能够在容器与 Kubernetes 集群中实时识别异常行为,如容器内执行 shell、反弹连接、读取敏感文件等,是云原生环境下重要的运行时安全工具。本文介绍 Falco 的部署、规则配置与验证实战。

适用场景

  • Kubernetes 集群与 Docker 容器运行时安全监控
  • 检测容器逃逸前兆、反弹 shell、特权容器滥用等行为
  • 满足等保 2.0、PCI-DSS 对运行时行为审计的合规要求

前置条件

  • Linux 内核 3.10+(使用 eBPF 驱动需内核 4.15+)
  • 已部署 Kubernetes 1.19+ 集群,或仅有 Docker 的运行环境
  • Helm 3(采用 Chart 方式安装时)

原理说明

Falco 通过内核模块(kmod)或 eBPF 探针捕获系统调用(syscall)事件,将事件流与规则引擎匹配后输出告警。规则由 macro(宏)list(列表)与 rule(规则)组成,例如用 container.id != host 判断事件是否发生在容器内。事件输出支持 stdout、文件、syslog、HTTP webhook 等多种方式,可灵活对接告警平台。

操作步骤

1. Helm 安装(推荐)

helm repo add falcosecurity https://falcosecurity.github.io/charts
helm repo update
helm install falco falcosecurity/falco --namespace falco --create-namespace   --set driver.kind=ebpf   --set falco.jsonOutput=true   --set falco.fileOutput.enabled=true   --set falco.fileOutput.filename=/var/log/falco_events.json

2. Docker 环境直接运行

docker run -it --rm --privileged   -v /var/run/docker.sock:/host/run/docker.sock   -v /dev:/host/dev -v /proc:/host/proc:ro   -v /etc:/host/etc:ro   falcosecurity/falco:latest

3. 编写自定义规则 /etc/falco/falco_rules_local.yaml

- rule: Shell inside container
  desc: 容器内执行交互式 shell(排除已知运维容器)
  condition: >
    spawned_process and container and shell_procs
    and proc.aname not in (shell_binaries) and not user_known_shell_procs
  output: 容器内发现 shell (user=%user.name shell=%proc.name cmdline=%proc.cmdline)
  priority: WARNING
  tags: [container, shell]

4. 校验规则语法

falco --dry-run -r /etc/falco/falco_rules_local.yaml

–dry-run 只做规则加载与语法检查,不启动监控。

5. 触发验证

kubectl exec -it <pod-name> -- /bin/sh
# 容器内执行:whoami、cat /etc/shadow 等敏感操作后退出

随后查看 /var/log/falco_events.json(或 kubectl logs)是否新增 WARNING 级别告警记录。

配置验证

  • falco --dry-run -r ... 无语法错误输出
  • helm status falco 状态为 deployed,kubectl logs -n falco deploy/falco 无驱动加载错误
  • 执行 kubectl exec 后事件文件出现包含 “容器内发现 shell” 的告警
  • 规则优先级从高到低为 EMERGENCY > ALERT > CRITICAL > ERROR > WARNING > NOTICE > INFO > DEBUG,可据此过滤告警

常见问题

FAQ 1:驱动选 kmod 还是 eBPF?

内核 4.15+ 优先推荐 eBPF(–set driver.kind=ebpf),免编译、兼容新内核;老内核使用 kmod,需提前安装对应内核头文件(linux-headers-$(uname -r)),否则驱动加载失败。

FAQ 2:误报较多如何调优?

不要在官方 falco_rules.yaml 上直接修改,应新增 falco_rules_local.yaml 追加同名规则覆盖,或降低规则 priority、在 condition 中追加 and not user_known_xxx 宏排除已知运维行为。

FAQ 3:告警如何对接钉钉、Slack?

启用 fileOutput 后,可由 filebeat 或 promtail 采集事件文件;更轻量的方式是启用 programOutput 调用脚本转发,或部署 falcosidekick,它原生支持 Slack、钉钉、Webhook、S3 等输出目标。

总结

Falco 以系统调用级行为监控填补了镜像扫描与基线检查的盲区,能发现”看起来正常但行为可疑”的运行时攻击。建议将默认规则集与少量自定义规则结合部署,事件落盘并转发至告警平台,与 Kube-bench 基线扫描、Trivy 镜像扫描配合,形成容器安全的扫描、基线、运行时三层防线。