
Agente Linux basato su eBPF che applica policy di accesso a livello di eseguibile nello spazio kernel, isolando i processi e limitando l'accesso a file, rete e GPU tramite hook LSM.
Bomfather Agent è un agente basato su eBPF che viene eseguito nello spazio del kernel per bloccare le azioni in base a una policy.
Abbiamo creato questo agente per risolvere i problemi che avevamo con le soluzioni esistenti.
Questi punti sono la nostra stella polare per l'intero progetto. Tutte le funzionalità e gli sviluppi sono pensati per soddisfare questi punti.
Nota che cerchiamo di evitare l'uso di codice generato dall'IA in questo repo e non accetteremo PR generate dall'IA.
(Qui c'è una guida su come abilitare LSM sul tuo sistema: https://docs.bomfather.dev/prerequisites)
Per compilare dai sorgenti, è necessario avere installati i seguenti strumenti:
go 1.26 or higher
make
clang
llvm
llvm-14
protobuf-compiler
git
Su Debian/Ubuntu, puoi installare le dipendenze di build non-Go con:
apt-get update \
&& apt-get install -y --no-install-recommends \
clang \
llvm \
llvm-14 \
protobuf-compiler \
&& rm -rf /var/lib/apt/lists/*
Poi compila l'agente con:
make
Per un avvio rapido, puoi usare il seguente comando per eseguire l'agente con una policy predefinita:
sudo ./agent run --config config.yaml
Questo eseguirà l'agente con qualunque policy sia definita nel file di configurazione.
Puoi poi facoltativamente usare il seguente comando per vedere lo stato dell'agente:
sudo ./agent status --help
Il comando status serve principalmente per leggere le metriche Prometheus dall'agente.
Una policy è un file YAML che definisce le regole applicate dall'agente.
La configurazione è composta principalmente da due sezioni, policies e attributes. La sezione policies definisce chi è autorizzato ad accedere a una risorsa protetta. La sezione policies definisce quali eseguibili sono autorizzati ad accedere a directory o IP protetti. Gli attributes definiscono i confini di un eseguibile, quindi un attributo può fare in modo che un eseguibile si connetta solo a un singolo IP e gli impedisca di connettersi a qualsiasi altro IP.
Ci sono molti modi per creare una policy, quindi per ogni funzionalità abbiamo una sezione dedicata nella documentazione che spiega come creare una policy per quella funzionalità: https://docs.bomfather.dev/configuration-guide.
Ma per un caso d'uso di avvio rapido, puoi usare il seguente file di policy:
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"
Questa policy ci permette di isolare il signer e garantire che sia l'unico processo sul sistema in grado di accedere ai dati.
Nella sezione policies, definiamo che l'eseguibile signer è l'unico processo autorizzato ad accedere alla directory /secrets/keys e agli IP associati all'endpoint AWS KMS.
Nella sezione attributes, definiamo che l'eseguibile signer è autorizzato ad accedere solo all'endpoint AWS KMS e a nessun altro IP.
In questa configurazione relativamente semplice, siamo riusciti a rafforzare in modo significativo il nostro processo signer (che nel mondo reale potrebbe far parte di un sistema più grande) con una configurazione lunga solo 10 righe.
Ci sono un paio di altri esempi reali nella documentazione https://docs.bomfather.dev/examples/gpu.
Facoltativamente, se vuoi esportare le violazioni rilevate dall'agente, puoi includere una chiave API e l'agente invierà le violazioni ai server Bomfather.
Ma, cosa più importante, QUESTO NON È OBBLIGATORIO, l'agente funzionerà comunque allo stesso modo senza di essa. Nessuna funzionalità viene disabilitata se non includi una chiave API, e se non viene inclusa alcuna chiave API, nessun dato di alcun tipo viene inviato ai server Bomfather.
Se invece vuoi usare i server Bomfather, contattaci all'indirizzo [email protected].