云计算百科
云计算领域专业知识百科平台

eBPF 内核安全黑科技:深入解析 Tetragon 及其“去用户空间 Agent”演进之路

随着云原生技术的演进,传统的容器安全工具逐渐暴露出性能损耗大、响应延迟高以及防御不彻底等缺点。Tetragon——由 Isovalent(Cilium 团队)开源的基于 eBPF 的内核级安全监控与运行时防御工具,正是在这一背景下应运而生。

本文将深入介绍 Tetragon 的架构原理、核心功能与使用方法,并结合 2026 年 Linux 存储、文件系统、内存管理与 BPF 峰会(LFSMMBPF)的最新讨论,深度探讨社区如何通过绕过用户空间 Agent,将 Tetragon 的安全防御能力推向“绝对不可杀死”的终极形态。

一、 Tetragon 深度解析:架构、功能与实战使用

Tetragon 是一款运行在 Linux 内核侧的高性能安全监控与实时防御工具。它不需要修改应用程序代码,即可深入 Linux 内核捕获各种安全事件,并在恶意行为发生的第一时间实现内核级实时阻断(Enforcement)。

1. 核心架构与工作原理

传统安全工具(如早期的审计日志工具)大多依赖“内核捕获 $\\rightarrow$ 拷贝至用户空间 $\\rightarrow$ 匹配分析 $\\rightarrow$ 返回内核阻断”的路径。这种方式不仅开销巨大,且无法在恶意行为发生的第一瞬间进行阻断。

Tetragon 的核心优势在于 “内核侧过滤与防御(In-Kernel Enforcement)”:

  • eBPF Kernel Component(内核运行时规则引擎):

    直接挂载到系统调用(Syscalls)、VFS(虚拟文件系统)、网络协议栈、命名空间(Namespaces)以及内核函数(kprobes / tracepoints)。它直接在内核空间匹配规则并进行过滤,若检测到违规行为(如非授权修改系统文件、越权执行 Shell),能够直接在内核侧终止进程(发送 SIGKILL)或重置网络连接,实现零延迟防御。

  • Tetragon Agent(用户空间进程):

    运行在用户空间,负责加载 eBPF 程序、读取由内核过滤后的日志(通过 BPF Ring Buffer),并将系统级事件映射并关联为 Kubernetes 级的元数据(如 Pod Name、Namespace、Container ID),最终对接 SIEM 或监控系统。

2. 四大核心功能

  • 进程执行监控与提权检测(Process Tracking): 捕获任何进程启动、命令参数变化、命名空间切换及权限提升(Privilege Escalation)。

  • 内核级实时阻断(In-Kernel Enforcement): 配合 TracingPolicy CRD,定义在检测到攻击行为时直接在内核侧 killing 掉目标进程(SIGKILL)或关闭连接。

  • 文件访问与 VFS 监控: 监控关键目录(如 /etc/shadow、/etc/kubernetes/manifests)的读写、修改与敏感访问。

  • 网络与 Kubernetes 原生感知: 监控 Socket 连接与 DNS 查询行为,并自动为内核级安全事件打上 Pod、Namespace 及 Container ID 的上下文标号。

  • 3. 如何使用 Tetragon

    (1)在 Kubernetes 中快速部署

    使用 Helm 可以将 Tetragon Agent 以 DaemonSet 的形式部署到各个节点:

    # 添加 Cilium / Tetragon Helm 仓库
    helm repo add cilium https://helm.cilium.io/
    helm repo update

    # 安装 Tetragon
    helm install tetragon cilium/tetragon -n kube-system

    (2)通过 CLI 实时查看安全事件

    安装完成后,可以通过 Tetragon 提供的 tetra 命令行工具查看内核捕获到的实时事件:

    # 实时查看集群内部的进程执行和文件访问事件
    kubectl exec -ti -n kube-system daemonset/tetragon -c tetragon — tetra getevents -o compact

    典型日志输出:

    🚀 process default/demo-pod /usr/bin/curl http://example.com
    📁 file default/demo-pod /etc/passwd open

    (3)通过 TracingPolicy CRD 配置安全策略

    Tetragon 的强大之处在于可以通过 Kubernetes CRD 灵活定制监控与阻断规则。

    场景 A:敏感文件访问监控(以 /etc/passwd 为例)

    当有容器尝试修改或打开敏感文件时触发安全告警:

    apiVersion: cilium.io/v1alpha1
    kind: TracingPolicy
    metadata:
    name: monitor-etc-passwd
    spec:
    kprobes:
    – call: "sys_openat"
    syscall: true
    args:
    – index: 1
    type: "string" # 捕获文件路径
    selectors:
    – matchArgs:
    – index: 1
    operator: "Prefix"
    values:
    – "/etc/passwd"

    场景 B:内核级实时阻断(杀掉非法启动 Shell 的进程)

    如果检测到指定应用试图执行 /bin/bash,直接在内核侧发送 SIGKILL 终止进程:

    apiVersion: cilium.io/v1alpha1
    kind: TracingPolicy
    metadata:
    name: kill-unauthorized-shell
    spec:
    kprobes:
    – call: "sys_execve"
    syscall: true
    selectors:
    – matchArgs:
    – index: 0
    operator: "Prefix"
    values:
    – "/bin/bash"
    matchActions:
    – action: Sigkill # 内核侧零延迟终止进程

    部署策略:

    kubectl apply -f kill-unauthorized-shell.yaml

    二、 前沿探索:消除 Tetragon 对用户空间 Agent 的依赖

    尽管当前 Tetragon 架构已经足够强大,但它仍然包含一个脆弱点:如果攻击者设法杀死了运行在用户空间的 Tetragon Agent,安全工具将无法继续向远端服务端报告系统的异常状况。

    在 2026 年 Linux 存储、文件系统、内存管理与 BPF 峰会上,Song Liu、Mahé Tardy 和 Liam Wiseheart 深入分享了他们消除用户空间 Agent 依赖的研究进展。

    1. 通信瓶颈与早期的突破尝试

    Wiseheart(来自 Meta,致力于解决同类 BPF 独立运行问题)指出,当前 Meta 采用在系统启动时固定(pinning)程序的方法,这能防止用户空间组件被杀时程序被删除,但无法根治日志无法上传的问题。

    Tardy 解释道,Tetragon 与用户空间的交互高度依赖环形缓冲区(ring buffer):用户空间组件读取消息、发送至远端服务器、接收回复并放回缓冲区。如果 BPF 程序能直接从内核向远程服务器发送网络包,不仅效率更高,而且能彻底摆脱用户空间 Agent 被杀导致的“哑巴”风险。

    • 2025 年方案: Tardy 团队曾提出基于 splice() 的方案,但由于同步选项不太适合 BPF,未被广泛认可。

    • netpoll 方案: 后来内核开发者建议借鉴 netconsole 底层的 netpoll 机制。netpoll 能让内核代码在任何上下文直接发送数据包,并绕过常规网络协议栈。

      他们开发了 bpf_netpoll_create() 和 bpf_netpoll_send_udp() 等 kfuncs。在现场演示中,Tardy 启动虚拟机并运行了一个 BPF 程序向宿主机 ping 报文;随后他杀死了用户空间 Agent,远端控制台仍然源源不断地收到 BPF 内核程序直接发来的 ping 报文与加密数据。

    2. UDP vs TCP:内核社区的大讨论

    虽然 netpoll 方案成功实现了脱离 Agent 发包,但在社区讨论中,Song Liu 提到有人提出反馈:“UDP 是有害的”。

    • 反方观点: netpoll 绕过了正常网络协议栈,如果 BPF 流量爆发,会无限制地抢占其他进程的带宽。部分开发者建议衍生一个内核线程(kthread)走常规网络栈,或者改用 TCP(他们在演讲前 10 小时测试了 TCP 版本)。

    • 正方观点(主流): 现场大多数大佬倾向于保持基于 UDP 的 netpoll 方案。

       

      • Alexei Starovoitov 觉得没必要偏爱 TCP,并指出 netpoll 在内核中早已成熟存在,且只使用网卡单个队列,不太可能引发严重带宽灾难。

      • John Fastabend 认为 UDP 对于安全日志记录这一场景已经完全够用。

      • Liam Wiseheart 与 Starovoitov 强调了 netpoll 绕过协议栈带来的超高健壮性:即使系统的网络协议栈因为损坏的安全模块或硬件缺陷而瘫痪(比如网卡损坏导致无法接收包),netpoll 依然能坚挺地将关键告警数据包发送出去。

    3. 最新进展:基于 UDP 内核套接字的演进

    在峰会讨论中,Daniel Borkmann 提到了驱动兼容性隐患(Starovoitov 估算除 Meta 常用的驱动外,约 90% 的网卡驱动对 netpoll 支持不佳或存在 bug)。

    这一未竟的讨论促使团队在会后持续攻关。最终在峰会结束后的 7 月 6 日,Tardy 及其团队提交了一套全新的内核补丁,允许 BPF 程序直接创建并使用 UDP 内核套接字(UDP kernel sockets),在摒弃 netpoll 驱动依赖的同时,真正迈出了“BPF 离线独立安全防御”的里程碑式一步。

    三、 总结

    从 Kubernetes 原生的安全监控与内核级实时阻断(In-Kernel Enforcement),到探索极致防篡改、脱离用户空间进程的“纯内核级日志直连”,Tetragon 及其背后的 eBPF 社区正在重新定义系统安全。未来,随着 BPF 直接发送网络数据包能力的成熟,安全监控工具将具备面对超级权限攻击者时“不可被杀死、不可被遮蔽”的终极防御韧性。

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » eBPF 内核安全黑科技:深入解析 Tetragon 及其“去用户空间 Agent”演进之路
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!