Bomfather Agent 是一个基于 eBPF 的代理,运行在内核空间,根据策略阻止操作。
我们构建这个代理是为了解决现有解决方案中遇到的问题。
这些要点是我们整个项目的北极星。所有功能和开发都是为了实现这些要点。
请注意,我们尽量避免在此仓库中使用 AI 生成的代码,并且不会接受 AI 生成的 PR。
(这里有一份关于如何在你的系统上启用 LSM 的指南:https://docs.bomfather.dev/prerequisites)
要从源码构建,你需要安装以下工具:
go 1.26 or higher
make
clang
llvm
llvm-14
protobuf-compiler
git
在 Debian/Ubuntu 上,你可以使用以下命令安装非 Go 构建依赖:
apt-get update \
&& apt-get install -y --no-install-recommends \
clang \
llvm \
llvm-14 \
protobuf-compiler \
&& rm -rf /var/lib/apt/lists/*
然后使用以下命令构建代理:
make
如需快速开始,你可以使用以下命令以默认策略运行代理:
sudo ./agent run --config config.yaml
这将使用配置文件中定义的任何策略运行代理。
然后,你可以选择使用以下命令查看代理的状态:
sudo ./agent status --help
status 命令主要用于从代理读取 Prometheus 指标。
策略是一个 YAML 文件,定义了代理执行的规则。
配置主要由两个部分组成:policies 和 attributes。policies 部分定义了谁被允许访问受保护的资源。policies 部分定义了哪些可执行文件被允许访问受保护的目录或 IP。attributes 定义了可执行文件的边界,因此属性可以使可执行文件仅连接到单个 IP,并阻止其连接到任何其他 IP。
创建策略的方法有很多,因此对于每个功能,我们在文档中都有专门的章节来解释如何为该功能创建策略:https://docs.bomfather.dev/configuration-guide。
但对于快速开始的用例,你可以使用以下策略文件:
policies:
- executable: "filepath = [absolute-path]/app/signer"
can_access_dirs:
- "[absolute-path]/secrets/keys : read"
is_allowed_to_access_ip:
- "kms.us-east-1.amazonaws.com:443"
attributes:
- path: "type = executable | filepath = [absolute-path]/app/signer"
can_only_access_ips:
- "kms.us-east-1.amazonaws.com:443"
此策略允许我们对签名器进行沙箱隔离,并确保它是系统上唯一可以访问该数据的进程。
在 policies 部分,我们定义可执行文件签名器是唯一被允许访问 /secrets/keys 目录以及与 AWS KMS 端点关联的 IP 的进程。
在 attributes 部分,我们定义可执行文件签名器仅被允许访问 AWS KMS 端点,不允许访问任何其他 IP。
在这个相对简单的配置中,我们能够显著加固我们的签名器进程(在现实世界中,它可能是更大系统的一部分),而配置只有 10 行。
文档中还有几个更贴近实际的示例:https://docs.bomfather.dev/examples/gpu。
可选地,如果你想要导出代理检测到的违规行为,你可以包含一个 API 密钥,代理会将违规行为发送到 Bomfather 服务器。
但最重要的是,这不是强制性的,没有它代理仍会以相同方式运行。如果你不包含 API 密钥,不会禁用任何功能,并且如果未包含 API 密钥,不会向 Bomfather 服务器发送任何类型的数据。
如果你确实想使用 Bomfather 服务器,请通过 [email protected] 联系我们。