
Agent Linux basé sur eBPF qui applique des politiques d'accès au niveau des exécutables dans l'espace noyau, en sandboxant les processus et en restreignant l'accès aux fichiers, au réseau et au GPU via les hooks LSM.
L'agent Bomfather est un agent basé sur eBPF qui s'exécute dans l'espace noyau pour bloquer des actions en fonction d'une politique.
Nous avons conçu cet agent pour résoudre les problèmes que nous rencontrions avec les solutions existantes.
Ces points constituent notre étoile polaire pour l'ensemble de ce projet. Toutes les fonctionnalités et tous les développements visent à répondre à ces points.
Notez que nous essayons d'éviter d'utiliser du code généré par IA dans ce dépôt et que nous n'accepterons pas de PR générées par IA.
(Voici un guide sur la façon d'activer LSM sur votre système : https://docs.bomfather.dev/prerequisites)
Pour compiler à partir des sources, vous devez avoir les outils suivants installés :
go 1.26 or higher
make
clang
llvm
llvm-14
protobuf-compiler
git
Sur Debian/Ubuntu, vous pouvez installer les dépendances de compilation autres que Go avec :
apt-get update \
&& apt-get install -y --no-install-recommends \
clang \
llvm \
llvm-14 \
protobuf-compiler \
&& rm -rf /var/lib/apt/lists/*
Compilez ensuite l'agent avec :
make
Pour un démarrage rapide, vous pouvez utiliser la commande suivante pour exécuter l'agent avec une politique par défaut :
sudo ./agent run --config config.yaml
Cela exécutera l'agent avec la politique définie dans le fichier de configuration.
Vous pouvez ensuite, en option, utiliser la commande suivante pour consulter l'état de l'agent :
sudo ./agent status --help
La commande status sert principalement à lire les métriques Prometheus de l'agent.
Une politique est un fichier YAML qui définit les règles que l'agent applique.
La configuration est principalement composée de deux sections, policies et attributes. La section policies définit qui est autorisé à accéder à une ressource protégée. La section policies définit quels exécutables sont autorisés à accéder à des répertoires ou des IP protégés. Les attributes définissent les limites d'un exécutable, ainsi un attribut peut faire en sorte qu'un exécutable ne se connecte qu'à une seule IP et l'empêcher de se connecter à toute autre IP.
Il existe de nombreuses façons de créer une politique, c'est pourquoi, pour chaque fonctionnalité, nous avons une section dédiée dans la documentation qui explique comment créer une politique pour cette fonctionnalité : https://docs.bomfather.dev/configuration-guide.
Mais pour un cas d'usage de démarrage rapide, vous pouvez utiliser le fichier de politique suivant :
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"
Cette politique nous permet de sandboxer le signer et de garantir qu'il est le seul processus du système à pouvoir accéder aux données.
Dans la section policies, nous définissons que l'exécutable signer est le seul processus autorisé à accéder au répertoire /secrets/keys et aux IP associées au point de terminaison AWS KMS.
Dans la section attributes, nous définissons que l'exécutable signer n'est autorisé à accéder qu'au point de terminaison AWS KMS, et à aucune autre IP.
Dans cette configuration relativement simple, nous avons pu considérablement durcir notre processus signer (qui, dans le monde réel, pourrait faire partie d'un système plus vaste) avec une configuration de seulement 10 lignes.
Il existe quelques autres exemples concrets dans la documentation https://docs.bomfather.dev/examples/gpu.
En option, si vous souhaitez exporter les violations détectées par l'agent, vous pouvez inclure une clé API et l'agent enverra les violations aux serveurs Bomfather.
Mais surtout, CECI N'EST PAS OBLIGATOIRE, l'agent fonctionnera de la même manière sans elle. Aucune fonctionnalité n'est désactivée si vous n'incluez pas de clé API, et si aucune clé API n'est incluse, aucune donnée de quelque nature que ce soit n'est envoyée aux serveurs Bomfather.
Si vous souhaitez utiliser les serveurs Bomfather, veuillez nous contacter à [email protected].