评测与安全AI 资源
BpfJailer:基于 eBPF LSM 的 Linux 强制访问控制与进程隔离工具
facebookincubator/bpfjailer · eBPF LSM based Mandatory Access Control and jailer
ELI5:它是什么,解决什么问题
BpfJailer 是 Facebook Incubator 开源的 Linux 强制访问控制(MAC)项目,使用 eBPF LSM 程序将进程放入称为 pod 的隔离单元,每个 pod 绑定 TOML 策略中定义的角色,并在 fork 与 exec 时继承。策略可覆盖签名二进制校验(fs-verity 与证书)、kill/ptrace、bpf 对象访问、keyring、文件系统路径读写、可执行代码、内核模块与 kexec 加载、IPC(System V/POSIX 消息队列与共享内存)、Unix socket 与挂载点等控制面。项目提供 bpfjctl、bpfjcmd、bpfjsrv、bpfjclient、bpfjlog 等组件,支持运行时策略热替换(replace)与拒绝/生命周期事件日志。该实现是内部闭源 BpfJailer 的完整重写,官方标注为完全实验性。
核心能力与快速开始
★ 74 · C++
- 能做什么
- 通过 eBPF LSM 程序实现 Linux 强制访问控制,将进程放入 pod 并按 TOML 策略中的角色执行隔离;pod 可跨 fork/exec 继承。支持策略项包括:签名二进制(fs-verity + 指定证书集)、kill/ptrace 目标角色、bpf 映射与程序访问、keyring、文件系统路径读写、可执行代码与共享对象、内核模块与 kexec 加载、IPC(System V 与 POSIX 消息队列和共享内存,支持变量展开的名称模式)、Unix socket(路径名与抽象名、bind/connect/数据报)、挂载与卸载(目标路径与文件系统类型)。支持通过 xattr user.bpfj.policy.exec 声明角色、直接登记运行中进程,以及非特权进程经 bpfjsrv/bpfjclient 自登记。提供 bpfjctl(附加、替换、检查、注销 jailer 与登记进程)、bpfjcmd(编译内置参数与策略)、bpfjsrv(socket 激活的登记服务)、bpfjclient(无 libbpf 依赖的最小客户端)、bpfjlog(消费固定 ring buffer 的诊断与结构化事件日志)。replace 可在不释放已隔离任务的前提下原子替换完整 jailer,迁移 pod 成员、变量与资源所有权,布局版本不兼容或状态无法安全复制时按 fail-closed 处理。
- 适用场景
- 在 Linux 6.16+ 主机上对进程实施基于角色的细粒度访问控制与隔离,例如限制服务进程的文件读写范围、可执行文件与共享库来源、可发信号或 ptrace 的目标、可访问的 bpf 对象与 keyring、IPC 对象、Unix socket 通信对象以及可挂载的目的地与文件系统类型;通过签名二进制要求保证只运行经指定证书(fs-verity)签名的可执行文件;通过签发角色实现按容器/虚拟机变量(如 ${vm_uuid})区分的差异化文件系统权限与隔离规则;让非特权进程借助 bpfjsrv 自行加入允许的隔离角色;在不停机释放进程的情况下热替换安全策略并观察拒绝与生命周期事件。
- 项目形态
- 可直接使用的工具
- 部署方式
- 构建产物位于 build/ 目录,可通过 make(bpfjctl)、make STATIC=1(无共享库依赖)、make client、make log、make srv、make cmd 等目标构建,使用 sudo bpfjctl attach/replace/detach 加载与卸载,程序默认固定在 /sys/fs/bpf/bpfj-pins,可用 --bpffs-path 与 --pin-dir 修改。其他具体部署条件未说明。
- 主要依赖
- Linux 6.16 或更新版本并启用 BPF LSM(CONFIG_BPF_LSM=y,且在 lsm= 启动参数中包含 bpf),官方仅测试 6.16+,不支持更旧内核;需要 clang(BPF 代码生成)、bpftool、C++20 编译器、libbpf,以及 libarena 检出(提供 BPF 程序使用的 arena 自旋锁),构建时需设置 LIBARENA;签名构建还需 openssl、fsverity、setfattr 及 Makefile 中列出的静态归档(STATIC=1)。若 pkg-config 找不到 libbpf,可设置 LIBBPF_CFLAGS/LIBBPF_LIBS。测试需以 root 运行(创建 mount namespace 并挂载 bpffs)。
- 使用限制
- 项目自述为内部闭源 BpfJailer 的完整重写,处于完全实验性阶段,问题不被视为安全问题、不参与漏洞赏金,需经评估后才替换内部版本;仅支持并测试 Linux 6.16+,更旧内核不受支持;并发 BPF LSM detach 可能导致受影响内核 panic,因此测试默认串行,仅在一次性虚拟机中才可启用 -j N;bpfjctl wrap 未配合 --drop-cap 与非 root --uid 时,命令本身仍可将自身移出 jail;文件系统操作目前在 systemd 的 mount namespace 中执行,无法在该命名空间中解析的文件将被放行,匹配命名空间的可选能力“即将推出”;策略变量为白名单机制,未列出的变量登记会被拒绝,热替换在新策略不再包含某变量时会失败。该卡片的部署与成本信息未说明。
- 许可证
- MIT
- 最近推送
- 2026-10-10 20:16
资料检查:2026-10-11 07:00 · 卡片整理:2026-10-11 07:00
卡片由 AI 根据仓库资料整理,未进行安装或运行验证 · 本次更新未完成,保留上次成功内容
讨论 0
登录后参与讨论,阅读资讯无需注册。
还没有评论,来分享第一个看法。