跳转至

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