Falco 通过 eBPF 捕获 spawned_process 系统调用实现实时容器命令监控,结合白名单与上下文过滤,支持 JSON 输出及 Falcosidekick 告警联动。

在 Kubernetes 中用 Falco 实时监控容器内非法执行命令,关键在于捕获 spawned_process 类系统调用,并结合容器上下文与进程白名单做精准过滤。它不依赖日志或应用层埋点,而是从内核事件流出发,实现毫秒级响应。
部署 Falco 并启用 eBPF 探针
确保每个节点都能捕获原始系统调用,推荐使用 eBPF 模式(性能好、无需加载内核模块):
- 安装时显式开启 eBPF:
helm install falco falcosecurity/falco --set ebpf.enabled=true - 验证探针是否就绪:
kubectl logs -n kube-system ds/falco | grep "eBPF probe",应看到 "eBPF probe loaded successfully" - 若集群内核版本低于 5.8,可回退到内核模块模式,但需确保
kernel-devel已安装
定义非法命令检测规则
非法命令通常指生产环境中不该出现的交互式工具或网络探测类二进制文件。Falco 提供内置列表(shell_binaries、network_tool_binaries),可直接复用:
- 新建
/etc/falco/falco_rules.local.yaml,添加如下规则:
- rule: Block Suspicious Binaries in Container desc: Detect execution of shells, debuggers or network tools in production containers condition: spawned_process and container and (proc.name in (shell_binaries) or proc.name in (network_tool_binaries)) output: "Suspicious binary executed (user=%user.name container=%container.id image=%container.image.repository command=%proc.cmdline)" priority: CRITICAL tags: [process, runtime]
- 该规则会拦截
bash、sh、nc、curl、strace等典型高危命令 - 如需放行特定容器(如调试用的
debug-tools镜像),可在 condition 中追加排除逻辑:and not container.image.repository contains "debug-tools"
增强检测精度的两个实用技巧
单纯匹配进程名容易误报(如镜像构建阶段需用 apt)。建议叠加用户权限与路径约束:
-
限制 root 用户执行 shell:
条件改为spawned_process and container and user.name = "root" and proc.name in (sh, bash, zsh) -
排除系统初始化进程:
加上and not proc.pname in (init, systemd, tini),避免容器启动时的合法 shell 被误判
告警输出与快速响应
检测到非法命令后,需让安全团队或自动化系统立刻介入:
- 启用 JSON 格式输出,便于 SIEM 解析:
json_output: true(在values.yaml或 Helm 参数中配置) - 对接 Falcosidekick,自动将告警转为 Slack 消息或触发 Kubernetes Pod 隔离操作
- 在 output 字段中保留
%proc.cmdline和%container.id,方便运维人员快速定位并kubectl exec -it复核-- ps aux











