
Agente Linux basado en eBPF que aplica políticas de acceso a nivel de ejecutable en el espacio del kernel, aislando procesos y restringiendo el acceso a archivos, red y GPU mediante hooks de LSM.
Bomfather Agent es un agente basado en eBPF que se ejecuta en el espacio del kernel para bloquear acciones según una política.
Creamos este agente para resolver los problemas que teníamos con las soluciones existentes.
Estos puntos son nuestra Estrella Polar para todo este proyecto. Todas las características y desarrollos están destinados a cumplir con estos puntos.
Nota: intentamos evitar el uso de código generado por IA en este repositorio y no aceptaremos PRs generados por IA.
(Aquí hay una guía sobre cómo habilitar LSM en tu sistema: https://docs.bomfather.dev/prerequisites)
Para compilar desde el código fuente, necesitas tener instaladas las siguientes herramientas:
go 1.26 or higher
make
clang
llvm
llvm-14
protobuf-compiler
git
En Debian/Ubuntu, puedes instalar las dependencias de compilación que no son de Go con:
apt-get update \
&& apt-get install -y --no-install-recommends \
clang \
llvm \
llvm-14 \
protobuf-compiler \
&& rm -rf /var/lib/apt/lists/*
Luego compila el agente con:
make
Para un inicio rápido, puedes usar el siguiente comando para ejecutar el agente con una política por defecto:
sudo ./agent run --config config.yaml
Esto ejecutará el agente con la política que esté definida en el archivo de configuración.
Opcionalmente, puedes usar el siguiente comando para ver el estado del agente:
sudo ./agent status --help
El comando status sirve principalmente para leer las métricas de Prometheus del agente.
Una política es un archivo YAML que define las reglas que aplica el agente.
La configuración se compone principalmente de dos secciones, policies y attributes. La sección policies define quién puede acceder a un recurso protegido. La sección policies define qué ejecutables pueden acceder a directorios o IPs protegidos. attributes define los límites de un ejecutable, por lo que un atributo puede hacer que un ejecutable se conecte solo a una única IP y bloquearlo para que no se conecte a ninguna otra IP.
Hay muchas formas de crear una política, por lo que para cada característica tenemos una sección dedicada en la documentación que explica cómo crear una política para esa característica: https://docs.bomfather.dev/configuration-guide.
Pero para un caso de uso de inicio rápido, puedes usar el siguiente archivo de política:
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"
Esta política nos permite aislar el signer y garantizar que sea el único proceso del sistema que puede acceder a los datos.
En la sección policies, definimos que el ejecutable signer es el único proceso autorizado a acceder al directorio /secrets/keys y a las IPs asociadas con el endpoint de AWS KMS.
En la sección attributes, definimos que el ejecutable signer solo puede acceder al endpoint de AWS KMS, y a ninguna otra IP.
En esta configuración relativamente simple, hemos podido endurecer significativamente nuestro proceso signer (que en el mundo real podría ser parte de un sistema más grande) con una configuración de solo 10 líneas.
Hay un par de ejemplos más del mundo real en la documentación https://docs.bomfather.dev/examples/gpu.
Opcionalmente, si quieres exportar las violaciones que detecta el agente, puedes incluir una clave de API y el agente enviará las violaciones a los servidores de Bomfather.
Pero lo más importante, ESTO NO ES OBLIGATORIO, el agente seguirá funcionando de la misma manera sin ella. Ninguna característica se deshabilita si no incluyes una clave de API, y si no se incluye ninguna clave de API, no se envía ningún dato de ningún tipo a los servidores de Bomfather.
Si deseas usar los servidores de Bomfather, contáctanos en [email protected].