「DaemonSet Ready,为什么没有告警?」与「规则能
-L
列出,为什么生产静默?」很少落在同一层。前者可能是驱动没挂上、auto
换了引擎、或 API/Schema
错配;后者可能是富化字段空、异常过宽、或 sink /
drop。一上来重装 chart 或随机改规则,会把可恢复的轴 2
问题放大成双故障。
本文是系列第 13 篇:按第 1 篇五轴做症状 → 轴映射。口诀不变:先点名轴,再下钻模块。升级门见第 12 篇。无 Falco 节点则不粘贴伪造 Driver 行 / 命中日志 / drop 计数。
本篇在系列中的位置
篇目 核心内容 第 12 篇 · 运维与升级 成对换驱动与破坏面 第 13 篇 · 排障坐标系 五轴否证;双引擎证据包 第 14 篇 · 对照替代路径 Tetragon / auditd / seccomp 系列目录 全部篇目
版本锚定:Falco 0.44.1;驱动
10.2.0+driver。metrics / 配置键以该 tag 为准。Tetragon 排障五轴见 tetragon/13——同名「五轴」不是同一坐标系。
一、口诀:先点名轴;双引擎分列证据包
轴 1 Driver 加载 — engine.kind / driver.kind / auto 回退 / 权限与签名
轴 2 libscap 协商 — API Version / Schema Version / 打开会话 / 无原始事件
轴 3 libsinsp 富化 — FD→路径、进程树、container/k8smeta 字段
轴 4 规则引擎 — 条件、优先级、异常、规则是否加载
轴 5 输出与丢事件 — sink、背压、drop、BPF iterators 门
双引擎在轴 1–2、部分轴 5
分列证据包:标题必须写明
modern_ebpf 或 kmod(以及是否由
auto 回退而来)。轴 3–4
共享用户态语义,但仍要标注事件是否曾进入 scap。
flowchart TD
symptom["Symptom"]
symptom --> name["Name Falco axis first"]
name --> a1["Axis1 driver load"]
name --> a2["Axis2 scap negotiate"]
name --> a3["Axis3 sinsp enrich"]
name --> a4["Axis4 rule engine"]
name --> a5["Axis5 output drops"]
a1 --> split["Split evidence by engine"]
a2 --> split
| 症状(入口) | 优先轴 | 先查 | 不要先做 |
|---|---|---|---|
| 进程起不来 / Driver 行与 values 不符 | 1 | driver.kind、auto
回退、特权/签名 |
改规则条件 |
| 进程在跑,完全无 syscall 事件 | 2(或 1) | 驱动是否真加载;API/Schema 是否匹配
10.2.0+driver |
断定「没有攻击」 |
有事件,带 container.* 的规则永不响 |
3 | plugin 元数据、富化字段是否空 | 只加更多 OR 条件 |
falco -L 有规则,生产无告警 |
4(先否证 1–3) | 条件/异常/优先级;规则文件是否即运行集 | 重装 DaemonSet |
| 引擎已命中,SIEM 无;或 drop 涨 | 5 | sink 是否仍指向 gRPC;缓冲/iterators | 当成规则未命中 |
默认顺序:轴 1 引擎身份 → 轴 2 协商与原始事件 → 轴 3 字段 → 轴 4 求值 → 轴 5 出口与丢弃。一次否证一轴。
二、Driver 加载失败
表象:CrashLoop;Running 但 Driver
不是预期引擎;least-privileged 容器在 attach
阶段失败;auto 后权限模型与排障假设不一致。
分列:
| 引擎 | 证据包要点 |
|---|---|
| modern_ebpf | BTF / ringbuf
可用性;CAP_SYS_BPF、CAP_SYS_PERFMON、CAP_SYS_RESOURCE、CAP_SYS_PTRACE;sysfs/tracefs
挂载;paranoid 策略 |
| kmod | .ko
是否加载、签名/DKMS、完整特权(不可套用上列
CAP 故事) |
| auto | loader 生成的实际
engine.kind;回退是否在事故节点发生 |
三、协商与无原始事件
表象:升级后「什么都没有」;用户态已是 0.44.x,驱动仍是 0.43 世代;打开会话失败。
先否证:用户态与驱动是否成对(第 12
篇)。Kernel Events Architecture 要求协商 API
Version 与 Schema
Version;错配不是规则语法问题。无环境时只保留检查项,不伪造
falco --version 输出——语义上该输出用于核对 Libs
/ Driver API / Schema / Default driver。
若引擎身份正确且协商成功仍无事件,再查缓冲与 drop(轴 5 / 第 5 篇),而不是跳到轴 4。
四、富化与规则未命中
表象:同一规则在实验机响、在集群不响;条件依赖
fd.name / container.id
等但字段空;异常吞掉真阳性。
| 子问题 | 轴 | 动作 |
|---|---|---|
| 字段空、上下文缺失 | 3 | 查 libsinsp 状态与 plugin(第 4、9 篇) |
| 条件永假、异常过宽、优先级阴影 | 4 | 查规则求值与加载集(第 6–7 篇) |
| 规则文件未进入进程 | 4 | falcoctl / 挂载路径 / 热加载边界 |
「-L
看得到」只否证「文件完全没加载」,否证不了富化与异常。
五、输出与丢事件
表象:值班说「命中过」,下游没有;或威胁情报空窗但 drop 相关信号在涨。
| 子问题 | 核对 |
|---|---|
| 已删 gRPC sink | 0.44 起 gRPC output/server 不存在;改 HTTP/file 等 |
| 背压 / 配置错误 | 输出配置与下游可达性(第 8 篇) |
| 驱动/用户态丢事件 | buf_size_preset 等;勿把 drop
写成「无威胁」 |
| iterators | 0.44.1 可禁用;容器非 host PID 下可能自动关 |
轴 5 与轴 4 的分界:引擎侧已形成告警对象,还是事件在进入规则前就丢了。
六、不要与 Tetragon 五轴混因果
| 项目 | Falco 本系列 | Tetragon 系列 |
|---|---|---|
| 轴含义 | Driver → scap → sinsp → 规则 → 输出/丢 | 血缘 / Hook / 策略加载 / 过滤分层 / 强制执行 |
| 主问题 | 检测告警为何缺失或噪声 | 策略/Override/导出为何不符合预期 |
| 交叉阅读 | 选型见第 14–16 篇 | tetragon/13 |
同节点可同时跑两者,但证据包不可混贴:Falco
的「无告警」不能用 Tetragon collectionKey
撞名解释;Tetragon 的 JSON allow/deny≠gRPC 也不能用来解释
Falco HTTP sink。需要强制执行(Override)时,坐标在
Tetragon,不在本篇五轴里「加一条阻断」。
参考资料
本系列(A)
- 第 1 篇 · 五轴定义;PLAN.md §八
- 第 2–12 篇各轴主文;尤其 10、12
对照(勿混因果)
官方(A)
- Kernel Events / Kernel Events Architecture;0.44.0/0.44.1 Release Notes
- 丢事件排查文(缓冲与规则回压)
上一篇:运维与升级
下一篇:对照替代路径
读完这篇,下一步读什么
优先读同系列或同问题的下一篇,把单篇消费变成主题集群。
【Falco】观测税与误报面:成本归因到五轴
把 Falco 0.44.1 的权限/部署成本、规则噪声与已文档化的缓冲/base_syscalls 旋钮归因到五轴;区分误报与漏报落格;禁止未测 CPU% 排行榜与照抄站内对照数字。
Falco / 运行时检测:从双引擎驱动到规则引擎
补齐站内 Tetragon 排除树与产品对照之上的 Falco 检测内核:modern_ebpf 与 kmod 双引擎、libscap/libsinsp、规则引擎与输出,并以排障与相对 Tetragon/auditd/seccomp 的选型收束。
【Falco】运行时检测全景:缺口、五轴坐标系与 16 篇路线
相对 Tetragon 排除树、可观测对照与 linux/ebpf-security 快速启用清单,钉清 Falco 0.44.1 检测内核缺口;定义 Driver、libscap、libsinsp、规则引擎、输出与丢事件五条轴,并强调 modern_ebpf 与 kmod 分列证据包。
【Falco】libscap:捕获会话与 API/Schema 协商
钉清 libscap 如何把驱动事件送入用户态:打开会话、ring/缓冲、API Version 与 Schema Version 协商,以及与 modern_ebpf / kmod 的接口差;说明 0.43→0.44 大 bump 的失败表象。