默认情况下,只有具备特权(root 或 CAP_BPF 能力)的进程才能加载 eBPF 程序,防止不可信程序随意注入内核。若启用非特权 eBPF,非特权进程虽可加载部分程序,但功能集与内核访问范围会受到严格限制。
所有 eBPF 程序在加载时都必须通过验证器检查,确保其能安全终止、不发生越界访问、不使用未初始化变量。验证器是一道安全工具,用于保证程序本身不会破坏内核稳定性。
验证通过后,程序还会经历加固处理:内核会将存放 eBPF 程序的内存设为只读,防止程序在运行中被篡改;同时针对 Spectre 等推测执行攻击也设有相应缓解措施。此外,程序只能调用受控的 Helper 函数,无法触及任意内核功能。