
Agente Linux baseado em eBPF que aplica políticas de acesso em nível de executável no espaço do kernel, isolando processos e restringindo o acesso a arquivos, rede e GPU por meio de hooks LSM.
O Bomfather Agent é um agente baseado em eBPF que é executado no espaço do kernel para bloquear ações com base em uma política.
Construímos este agente para resolver os problemas que tínhamos com as soluções existentes.
Esses pontos são a nossa Estrela Guia para todo este projeto. Todos os recursos e desenvolvimentos têm o objetivo de atender a esses pontos.
Observe que tentamos evitar o uso de código gerado por IA neste repositório e não aceitaremos PRs gerados por IA.
(Aqui está um guia sobre como habilitar o LSM no seu sistema: https://docs.bomfather.dev/prerequisites)
Para compilar a partir do código-fonte, você precisa ter as seguintes ferramentas instaladas:
go 1.26 or higher
make
clang
llvm
llvm-14
protobuf-compiler
git
No Debian/Ubuntu, você pode instalar as dependências de compilação que não são do Go com:
apt-get update \
&& apt-get install -y --no-install-recommends \
clang \
llvm \
llvm-14 \
protobuf-compiler \
&& rm -rf /var/lib/apt/lists/*
Em seguida, compile o agente com:
make
Para um início rápido, você pode usar o seguinte comando para executar o agente com uma política padrão:
sudo ./agent run --config config.yaml
Isso executará o agente com qualquer política definida no arquivo de configuração.
Você pode então, opcionalmente, usar o seguinte comando para ver o status do agente:
sudo ./agent status --help
O comando status serve principalmente para ler métricas do Prometheus a partir do agente.
Uma política é um arquivo YAML que define as regras que o agente aplica.
A configuração é composta principalmente por duas seções, policies e attributes. A seção policies define quem tem permissão para acessar um recurso protegido. A seção policies define quais executáveis têm permissão para acessar diretórios ou IPs protegidos. attributes definem os limites de um executável, então um atributo pode fazer com que um executável se conecte apenas a um único IP e o bloqueie de se conectar a qualquer outro IP.
Há muitas maneiras de criar uma política, então, para cada recurso, temos uma seção dedicada na documentação que explica como criar uma política para esse recurso: https://docs.bomfather.dev/configuration-guide.
Mas para um caso de uso de início rápido, você pode usar o seguinte arquivo 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"
Essa política nos permite colocar o signer em sandbox e garantir que ele seja o único processo no sistema que pode acessar os dados.
Na seção policies, definimos que o executável signer é o único processo com permissão para acessar o diretório /secrets/keys e os IPs associados ao endpoint do AWS KMS.
Na seção attributes, definimos que o executável signer só tem permissão para acessar o endpoint do AWS KMS, e nenhum outro IP.
Nesta configuração relativamente simples, conseguimos fortalecer significativamente nosso processo signer (que no mundo real poderia fazer parte de um sistema maior) em uma configuração de apenas 10 linhas.
Há mais alguns exemplos do mundo real na documentação https://docs.bomfather.dev/examples/gpu.
Opcionalmente, se você quiser exportar as violações que o agente detecta, você pode incluir uma chave de API e o agente enviará as violações para os servidores do Bomfather.
Mas, mais importante, ISSO NÃO É OBRIGATÓRIO, o agente continuará funcionando da mesma forma sem ela. Nenhum recurso é desabilitado se você não incluir uma chave de API, e se nenhuma chave de API for incluída, nenhum dado de qualquer tipo é enviado aos servidores do Bomfather.
Se você realmente quiser usar os servidores do Bomfather, entre em contato conosco em [email protected].