Falco — 云原生运行时安全检测工具
安装与配置
# === 方法1: Helm 安装到 Kubernetes(推荐)===
helm repo add falcosecurity https://falcosecurity.github.io/charts # 添加 Falco Helm 仓库
helm repo update # 更新仓库
kubectl create namespace falco # 创建 falco 命名空间
helm install falco falcosecurity/falco \
--namespace falco \
--set driver.kind=modern_ebpf \
--set falcosidekick.enabled=true \
--set falcosidekick.webui.enabled=true # 安装 Falco + Sidekick + WebUI
# === 方法2: APT 安装(Ubuntu/Debian)===
curl -fsSL https://falco.org/repo/falcosecurity-packages.asc | \
gpg --dearmor -o /usr/share/keyrings/falco-archive-keyring.gpg # 导入 GPG 密钥
echo "deb [signed-by=/usr/share/keyrings/falco-archive-keyring.gpg] \
https://download.falco.org/packages/deb stable main" | \
sudo tee /etc/apt/sources.list.d/falcosecurity.list # 添加 APT 源
sudo apt-get update && sudo apt-get install -y falco # 安装 Falco(最新 v0.43)
# === 安装驱动(选择一种)===
sudo falcoctl driver install --type modern_ebpf # 推荐: 现代 eBPF(内核 5.8+,无需编译)
sudo falcoctl driver install --type ebpf # 备选: eBPF 探针(内核 4.14+)
sudo falcoctl driver install --type kmod # 传统: 内核模块
# === 启动 Falco ===
sudo systemctl enable --now falco # 启动并设置开机自启
sudo systemctl status falco # 检查运行状态
核心用法
# --- Falco 规则文件示例(/etc/falco/falco_rules.local.yaml)---
# 规则1: 检测容器中启动交互式 Shell
- rule: Terminal Shell in Container # 规则名称
desc: 容器内启动了交互式终端 # 规则描述
condition: >
spawned_process and container and
proc.name in (bash, sh, zsh) and
proc.tty != 0 # 条件:容器中有进程打开了 TTY 终端
output: >
容器内检测到 Shell 启动
(container=%container.name image=%container.image.repository
user=%user.name process=%proc.name) # 告警输出模板
priority: WARNING # 告警级别
tags: [container, shell, mitre_execution] # 标签用于分类
# 规则2: 检测读取敏感文件
- rule: Read Sensitive File
desc: 有进程读取了敏感文件(如 /etc/shadow)
condition: >
open_read and sensitive_files and
container and not proc.name in (grep, find)
output: >
敏感文件被读取 (file=%fd.name process=%proc.name container=%container.name)
priority: WARNING
# --- 常用管理命令 ---
sudo falcoctl driver install # 安装/更新驱动
sudo falcoctl artifact install falco-rules # 下载最新官方规则集
falco --list # 列出所有已加载的规则
falco --validate /etc/falco/falco_rules.yaml # 验证规则语法是否正确
falco -r custom_rules.yaml # 加载自定义规则文件启动
参数详解
| 参数 | 说明 |
|---|
driver.kind | 驱动类型: modern_ebpf(推荐)/ ebpf / kmod |
priority | 告警级别: EMERGENCY > ALERT > CRITICAL > ERROR > WARNING > NOTICE > INFO > DEBUG |
condition | 规则触发条件,使用 Falco 条件语法(类 SQL) |
output | 告警输出格式,支持 %container.name 等占位符 |
tags | 规则标签,支持 MITRE ATT&CK 映射 |
enabled | 是否启用规则(默认 true) |
--json-output | 以 JSON 格式输出告警(便于集成) |
实战案例
# === 完整流程:部署 Falco 并检测可疑行为 ===
# 第1步:用 Helm 安装 Falco(含 Sidekick 转发告警)
helm install falco falcosecurity/falco \
--namespace falco --create-namespace \
--set driver.kind=modern_ebpf \
--set falcosidekick.enabled=true # 安装 Falco + Falcosidekick
# 第2步:验证 Falco 运行正常
kubectl get pods -n falco # 确认所有 Pod 为 Running 状态
kubectl logs -l app.kubernetes.io/name=falco -n falco --tail=20 # 查看 Falco 日志
# 第3步:模拟攻击行为——在容器里开 Shell
kubectl exec -it deploy/nginx -- bash # 进入 nginx 容器的 bash
# 第4步:查看 Falco 告警
kubectl logs -l app.kubernetes.io/name=falco -n falco | \
grep "Terminal Shell" # 搜索 Shell 告警
# 第5步:配置告警转发到 Slack
helm upgrade falco falcosecurity/falco \
--namespace falco \
--set falcosidekick.config.slack.webhookurl="https://hooks.slack.com/xxx" \
--set falcosidekick.config.slack.minimumpriority="warning" # 设置 Slack 告警
常见报错与解决
| 报错 | 原因 | 解决方案 |
|---|
driver not found | 内核版本不支持或驱动未安装 | 用 falcoctl driver install 安装对应驱动 |
eBPF probe failed to load | 内核版本过低(需 4.14+) | 升级内核或使用 kmod 驱动 |
permission denied | 权限不足无法访问内核 | 确保 Falco 以特权模式运行 |
rules file not found | 规则文件路径错误 | 检查 /etc/falco/ 目录下的规则文件 |
too many alerts | 规则太宽松导致告警风暴 | 缩小 condition 范围或添加排除条件 |
速查表
| 操作 | 命令 |
|---|
| Helm 安装 | helm install falco falcosecurity/falco -n falco |
| 查看告警日志 | kubectl logs -l app.kubernetes.io/name=falco -n falco |
| 验证规则语法 | falco --validate rules.yaml |
| 列出所有规则 | falco --list |
| 安装最新规则 | falcoctl artifact install falco-rules |
| 安装驱动 | falcoctl driver install --type modern_ebpf |
| JSON 输出 | falco --json-output |
| 查看版本 | falco --version |