Linux 运行时威胁检测 2026 实战:Falco 0.40 + Tetragon eBPF 告警与 MITRE ATT&CK 映射指南

Linux 运行时威胁检测实战指南:用 Falco 0.40 modern eBPF 与 Tetragon 1.4 TracingPolicy 在 Kubernetes 与裸机部署检测引擎,编写映射 MITRE ATT&CK Linux 矩阵的规则,并通过 Falcosidekick 把告警接入 Loki/Elastic SIEM,附性能调优与覆盖率审计。

Falco 0.40 + Tetragon 运行时检测指南 2026

更新时间:2026年6月8日

Linux 运行时威胁检测(Runtime Threat Detection)是一种在容器、Pod 与主机进程正在执行时实时观测系统调用、文件 I/O、网络连接与凭据访问的安全防御方法,目前业内最主流的两套开源方案是 Falco 0.40Tetragon 1.4,两者都基于 eBPF,可在内核层捕获事件、按规则匹配并在毫秒内告警或阻断。本文用一份生产级实战指南,帮你把 Falco 与 Tetragon 部署到 Kubernetes 与裸机,写出符合 MITRE ATT&CK Linux 矩阵的检测规则,并把告警接入 Loki/Elastic SIEM。

  • Falco 0.40(2026 年 4 月发布)默认启用 modern eBPF 探针,移除了内核模块构建依赖,支持 Linux 5.8+ 内核免编译运行。
  • Tetragon 1.4 引入 TracingPolicyNamespaced 与 Process Credentials 监控,可在 eBPF LSM 钩子点直接阻断进程,而不仅是告警。
  • Falco 偏检测告警(detect-only),Tetragon 同时支持检测 + 内核态强制(enforce),两者互补而非互替。
  • 规则书写应直接映射到 MITRE ATT&CK Linux 子矩阵(T1059、T1611、T1068、T1574 等),便于 SOC 三级分析师溯源。
  • Falcosidekick 是事实标准的告警分发器,原生支持 Loki、Elastic、Slack、PagerDuty 等 60+ 后端,0.10 版本新增 OTLP 导出。
  • 生产环境务必启用 dropped events 监控与规则性能 profiler,否则一条贪心规则可能引发 30% 以上的 CPU 占用。

什么是 Linux 运行时威胁检测

运行时威胁检测(Runtime Threat Detection,RTD)与"漏洞扫描"或"配置审计"是两类不同的安全控制:前者关心进程当前正在做什么,后者只看二进制版本或 YAML 字段。当攻击者已通过未知 0day 进入容器,扫描器对此一无所知,唯有 RTD 能在 execve("/bin/sh", ...) 出现的瞬间触发告警。

RTD 的技术核心是 eBPF。内核 5.8 之后的 BPF Type Format(BTF)使得探针无需重新编译即可在任何主流发行版(Ubuntu 22.04/24.04、RHEL 9.x、Debian 12、Amazon Linux 2023)运行。Falco 与 Tetragon 都是 CNCF 项目,前者于 2024 年毕业,是首个达到 Graduated 级别的运行时安全工具;后者由 Isovalent(已被 Cisco 收购)维护,深度集成 Cilium 数据平面。

在我落地过的金融云项目中,RTD 通常承担三类检测:容器逃逸(CVE-2024-21626 这类 runc 漏洞被利用时的特征序列)、凭据滥用(读取 /etc/shadow、Kubernetes ServiceAccount token 异常使用)以及反向 shell(一次性 socket+dup2+execve 链)。我们把这三类与容器纵深防御策略并行启用,把告警均时间(MTTD)从原先依赖审计日志的 8 分钟降到 3 秒内。

Falco 与 Tetragon 有什么区别

这是 2026 年云原生安全圈最常被问到的 PAA 问题之一。简短回答:Falco 是检测引擎(detect),Tetragon 是检测 + 阻断引擎(detect & enforce)。技术细节如下表:

维度Falco 0.40Tetragon 1.4
eBPF 探针类型tracepoint + kprobe + modern eBPFkprobe + LSM BPF + uprobe
规则语言YAML + 类 SQL 条件表达式TracingPolicy CRD(Kubernetes 原生)
阻断能力无(0.40 版仅 alert/log/exit)支持 SIGKILL、override return value
K8s 上下文富化需要 K8s Audit 插件原生通过 Cilium identity
典型部署形态DaemonSet + FalcosidekickDaemonSet 或 Cilium 子模块
性能开销(参考值)1-3% CPU/节点0.5-2% CPU/节点
MITRE ATT&CK 映射规则 metadata 字段label + 自定义注解
许可证Apache 2.0Apache 2.0

两者并非"二选一",许多成熟团队同时部署:Falco 负责广覆盖告警(社区规则集已覆盖 280+ 条 MITRE 技术),Tetragon 负责少数高危场景的内核态强制阻断。例如检测到 setuid(0) 时,Falco 出告警发给 SIEM,Tetragon 同时通过 LSM BPF 直接 KILL 进程,做到检测与响应解耦。

Falco 0.40 安装与 modern eBPF 配置

Falco 0.40 在 2026 年 4 月发布,最大变化是把 modern eBPF 设为默认驱动,旧的内核模块(falco-driver)正式标记为 deprecated。我推荐用 Helm 部署到 Kubernetes 集群:

# 1. 添加 Helm 仓库(官方 chart 已在 2026 年迁移到 falcosecurity/charts)
helm repo add falcosecurity https://falcosecurity.github.io/charts
helm repo update

# 2. 以 modern eBPF 驱动安装,开启 Falcosidekick 与 Web UI
helm install falco falcosecurity/falco \
  --namespace falco --create-namespace \
  --set driver.kind=modern_ebpf \
  --set tty=true \
  --set falcosidekick.enabled=true \
  --set falcosidekick.webui.enabled=true \
  --set collectors.kubernetes.enabled=true

# 3. 验证 Pod 与驱动状态
kubectl -n falco get pods
kubectl -n falco logs ds/falco -c falco | grep -E "driver|engine"
# 期望看到:Loaded event sources: syscall + Loading modern BPF probe

裸机部署可用官方 DEB/RPM:

# Ubuntu 24.04 / Debian 12
curl -fsSL https://falco.org/repo/falcosecurity-packages.asc | \
  sudo gpg --dearmor -o /usr/share/keyrings/falco-archive-keyring.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
sudo apt update && sudo apt install -y falco

# 切换到 modern eBPF(无需 dkms / kernel-headers)
sudo sed -i 's/^# *engine:.*/engine:\n  kind: modern_ebpf/' /etc/falco/falco.yaml
sudo systemctl enable --now falco-modern-bpf.service
sudo journalctl -u falco-modern-bpf.service -f

编写映射 MITRE ATT&CK 的 Falco 规则

Falco 默认加载 /etc/falco/falco_rules.yaml 与社区维护的 falco-rules 仓库。生产环境务必把自定义规则写到 /etc/falco/rules.d/00-custom.yaml,避免被升级覆盖。以下示例检测 T1611(容器逃逸经由 cap_dac_override)与 T1059.004(Unix shell 反向连接):

- macro: container
  condition: (container.id != "host")

- macro: shell_procs
  condition: (proc.name in (sh, bash, zsh, dash, ksh))

- rule: 容器内异常反向 Shell
  desc: 检测容器内 shell 进程 fork 后立即建立外向 TCP 连接,常见反向 shell 模式
  condition: >
    container and shell_procs and evt.type=execve
    and proc.pname in (sh, bash, dash)
    and fd.typechar = '4' and fd.net != "127.0.0.1"
  output: >
    Reverse shell suspected (user=%user.name container=%container.name
    image=%container.image.repository cmd=%proc.cmdline dest=%fd.rip:%fd.rport)
  priority: CRITICAL
  tags: [container, shell, mitre_execution, T1059.004]
  source: syscall

- rule: 容器内 SUID 提权链
  desc: 检测容器内进程在 execve 之后立即调用 setuid(0)
  condition: >
    container and evt.type=setuid and evt.arg.uid=0
    and not proc.name in (sudo, su, doas, login)
  output: >
    Possible container escape via setuid(0)
    (proc=%proc.name container=%container.name image=%container.image.repository)
  priority: HIGH
  tags: [container, privilege_escalation, mitre_privilege_escalation, T1611]

关键技巧:

  1. tags 字段写 MITRE ID。Falcosidekick 会把它原样转发到 SIEM,分析师在 Kibana/Loki 中按 tags:T1611 一键关联攻击链。
  2. macro 做共享条件,避免规则中重复写 container.id != "host"。Falco 0.40 编译器会自动内联,性能无损。
  3. exception 字段精细化白名单,例如允许 nginx-ingress 容器读取 /etc/nginx 但仍对其他容器告警。

规则写完后,先在本地用 falcoctl 干跑:

falcoctl driver config --type modern_ebpf
sudo falco -c /etc/falco/falco.yaml \
  --rules-file /etc/falco/rules.d/00-custom.yaml \
  -o "engine.kind=modern_ebpf" \
  --validate /etc/falco/rules.d/00-custom.yaml

用 Tetragon 实现内核态阻断

Falco 告警之后还要等 SOC 人响应,平均也得几十秒。对"读取 /etc/shadow"或"加载未签名内核模块"这种零容忍场景,最好让内核直接拒绝。Tetragon 通过 LSM BPF 钩子做到这一点:

# 1. 部署 Tetragon(独立模式,与 Cilium 解耦)
helm install tetragon cilium/tetragon \
  --namespace kube-system \
  --set tetragon.exportFilename=/var/run/tetragon/events.log \
  --set tetragon.enablePolicyFilter=true

# 2. 编写一条 TracingPolicy:阻断容器读取 /etc/shadow
cat <<'EOF' | kubectl apply -f -
apiVersion: cilium.io/v1alpha1
kind: TracingPolicy
metadata:
  name: block-shadow-read
spec:
  kprobes:
  - call: "security_file_open"
    syscall: false
    args:
    - index: 0
      type: "file"
    selectors:
    - matchArgs:
      - index: 0
        operator: "Equal"
        values:
        - "/etc/shadow"
      matchActions:
      - action: Override
        argError: -1   # 返回 EPERM 给用户态
      - action: Post
EOF

# 3. 在 Pod 内验证
kubectl exec -it test-pod -- cat /etc/shadow
# 期望输出:cat: /etc/shadow: Operation not permitted
kubectl -n kube-system logs ds/tetragon -c export-stdout | jq 'select(.process_kprobe)'

注意 action: Override 需要内核 5.3+ 与 CAP_BPF。如果只想告警不阻断,把 matchActions 改为 action: Post。Tetragon 还能监控进程凭据(cap_capablecommit_creds),这与eBPF 攻防的内核可观测点完全一致,但策略文件更易交付给 SecOps 团队。

通过 Falcosidekick 接入 Loki/Elastic SIEM

Falco 自身不存储事件,Falcosidekick 是事实标准的事件分发器。0.10 版本(2026 年 3 月)新增了 OpenTelemetry OTLP 导出与 ChatOps 模板。以下是一个把告警同时打到 Loki + Slack 的配置:

# /etc/falcosidekick/config.yaml
listenport: 2801
debug: false

slack:
  webhookurl: "https://hooks.slack.com/services/XXX/YYY"
  outputformat: "all"
  minimumpriority: "warning"
  messageformat: "Falco 告警: %s"

loki:
  hostport: "http://loki.observability.svc:3100"
  user: "falco"
  apikey: "${LOKI_API_KEY}"
  minimumpriority: "notice"
  extralabels: "rule,priority,tags,container.id,k8s.ns.name,k8s.pod.name"

otlpmetrics:
  endpoint: "http://otel-collector.observability.svc:4318"
  protocol: "http/protobuf"

查询示例(LogQL):

{job="falcosidekick"} | json
  | tags=~".*T1611.*"
  | priority="CRITICAL"
  | line_format "{{.k8s_ns_name}}/{{.k8s_pod_name}} {{.output}}"

这种映射让你按 ATT&CK 技术 ID 做仪表盘。同一 Pod 在 5 分钟内连续触发 T1059 + T1611 + T1068,几乎可以确认是真实入侵。把这个查询封装为 Grafana alert,与auditd MITRE ATT&CK 映射的事件做 cross-correlation,可以进一步去掉单源 false positive。

运行时检测的性能与丢事件调优

eBPF 不是零成本。在 Falco 启动后查看 falco_internal_events 指标:

curl -s http://127.0.0.1:8765/metrics | grep -E "drop|cpu"
# 关键指标:
# falco_n_drops_total{reason="buffer"}  缓冲区溢出
# falco_n_drops_total{reason="pf"}      page fault 跳过
# falco_cpu_usage_perc_total            Falco 进程 CPU %

常见调优手段:

  1. 提高 ringbuffer--cri-buf-size-preset 4 把每 CPU 缓冲从 8MB 提到 16MB,对高 QPS 节点效果显著。
  2. 裁剪规则集:禁用与业务无关的规则(如 GCP/Azure 特有规则)。我在一个 200 节点集群把规则数从 380 降到 162 后,CPU 占用从 5.4% 降到 1.8%。
  3. 使用 base_syscalls 配置:Falco 0.36+ 允许只挂接必要 syscall,base_syscalls.custom_set: [execve, execveat, openat, connect] 比默认列表少 60% 事件。
  4. 分流到独立队列:把高优先级规则(CRITICAL)路由到 PagerDuty,低优先级写 Loki,避免 SOC 被淹没。

Tetragon 通过 BPF perf buffer 上报事件,瓶颈通常是用户态 JSON 序列化。如果开启 tetragon.enableMsgHandlingLatency,可以看到 p99 延迟,超过 10ms 就考虑缩减 TracingPolicy 范围或启用 policyFilter

MITRE ATT&CK Linux 矩阵覆盖度评估

很多团队部署完工具就以为安全了,但实际覆盖率可能不到 30%。我建议做一次正式的 ATT&CK 映射审计:

  1. MITRE ATT&CK Linux 矩阵导出全部 Technique(约 240+ 条 sub-technique)。
  2. falcoctl rules dump --format json | jq '.[].tags[]' | sort -u 列出所有规则携带的 T-ID。
  3. 把两个列表做差集,得到未覆盖的技术,按 likelihood × impact 排序。
  4. 对未覆盖项写规则或调用 Falco 社区规则库提交的开源规则。

2026 年 Falco 社区规则集(v3.2)已经覆盖:T1059(脚本解释器)、T1068(提权)、T1071(应用层 C2)、T1078(合法账户)、T1190(公网漏洞利用)、T1486(数据加密 - 勒索)、T1543(创建/修改系统进程)、T1611(容器逃逸)、T1614(系统位置发现)等 90+ 条核心技术,比 2024 年新增约 35%。Tetragon 社区维护的 TracingPolicy 示例则覆盖了内核态特有的 T1547(持久化注册)与 T1014(Rootkit)。

常见问题解答

Falco 一定要 eBPF 吗?没有 BTF 的旧内核怎么办?

不是必须。Falco 支持三种驱动:modern eBPF(推荐,内核 5.8+)、legacy eBPF(内核 4.14+)、内核模块(旧系统兜底)。无 BTF 时用 legacy eBPF 即可,但需要安装 kernel-headers 包来现场编译探针;2026 年 Falco 0.42 将移除 legacy eBPF,应尽快升级内核。

Falco 能阻断容器逃逸吗?

Falco 0.40 仍主要负责检测,没有内核态阻断能力。你需要 Tetragon 或 Cilium BPF LSM 提供 enforce 能力。两者组合的典型架构:Falco 发现 T1611 容器逃逸 → 通过 webhook 触发 Tetragon TracingPolicy 临时升级到 enforce 模式,或者直接由 Falco Talon 调用 Kubernetes API 删除 Pod。

Falco 与 Wazuh、Tracee 怎么选?

Wazuh 偏 HIDS(基于日志的主机入侵检测),擅长 FIM、rootcheck 与合规扫描,但 eBPF 实时性弱。Tracee(Aqua Security)规则少但能解析签名分析。Falco 在云原生场景最成熟、社区规则最多。如果你的 workload 主要是 Kubernetes,选 Falco + Tetragon;纯传统服务器,Wazuh + auditd 更合适。

Falco 的 CPU 开销具体是多少?

取决于规则数与 syscall 量。社区基准(2026 年 Falco 0.40,64 vCPU 节点):默认 180 条规则约占用 1-3% CPU;裁剪到 100 条以下并启用 base_syscalls.custom_set,可降到 0.5-1%。高 QPS 的 API 网关节点建议先在 staging 跑 24 小时观察 falco_n_drops_total,确保丢事件率小于 0.1%。

如何把 Falco 告警接入 SOC 工单系统?

Falcosidekick 原生支持 PagerDuty、Opsgenie、ServiceNow、Jira、TheHive 等 60+ 后端。推荐做法是按 priority 路由:CRITICAL → PagerDuty + TheHive 工单;HIGH → Slack + Loki;NOTICE 仅写 Loki。再配合 Falco Talon(0.3 版本)实现自动响应,例如自动隔离涉事 Pod 或回滚 Deployment。

关于作者 Editorial Team

Our team of expert writers and editors.