
Outil de sécurité piloté par eBPF pour verrouiller et auditer les machines Linux. Restreint les fonctionnalités du noyau, bloque l'exécution sans fichier, protège la mémoire et durcit les conteneurs et les appareils IoT via des profils déclaratifs.

bpflock - Sécurité pilotée par eBPF pour verrouiller et auditer les machines Linux.
Remarque : bpflock est actuellement en phase expérimentale, il peut casser, les options et la sémantique de sécurité peuvent changer, certains programmes BPF seront mis à jour pour utiliser la bibliothèque ebpf de Cilium.
bpflock utilise eBPF pour renforcer la sécurité Linux. En restreignant l'accès à une large gamme de fonctionnalités Linux, bpflock est capable de réduire la surface d'attaque et de bloquer certaines techniques d'attaque bien connues.
Seuls les programmes comme les gestionnaires de conteneurs, systemd et autres conteneurs/programmes qui s'exécutent dans les espaces de noms pid et réseau de l'hôte sont autorisés à accéder à l'ensemble des fonctionnalités Linux ; les conteneurs et applications qui s'exécutent dans leur propre espace de noms seront restreints.
Si les programmes bpf de bpflock s'exécutent sous le profil restricted, alors tous les programmes/conteneurs, y compris les privilégiés, verront leur accès refusé.
bpflock protège les machines Linux en tirant parti de multiples fonctionnalités de sécurité, notamment Linux Security Modules + BPF.
Notes sur l'architecture et la conception de la sécurité :
bpflock offre plusieurs protections de sécurité qui peuvent être classées comme suit :
Protections du système de fichiers
Protections réseau
bpflock garde une sémantique de sécurité simple. Il prend en charge trois profils globaux pour couvrir largement le spectre de sécurité et restreindre l'accès à des fonctionnalités Linux spécifiques.
profile : c'est le profil global qui peut être appliqué par programme bpf, il prend l'une des valeurs suivantes :
allow|none|privileged : ils sont identiques, ils définissent le profil le moins sécurisé. Dans ce profil, l'accès est journalisé et autorisé pour tous les processus. Utile pour enregistrer les événements de sécurité.baseline : profil restrictif où l'accès est refusé pour tous les processus, sauf pour les applications privilégiées et les conteneurs qui s'exécutent dans les espaces de noms de l'hôte, ou les profils autorisés par cgroup dans la carte bpf bpflock_cgroupmap.restricted : profil fortement restrictif où l'accès est refusé pour tous les processus.Opérations/commandes autorisées ou bloquées :
Sous les profils allow|privileged ou baseline, une liste de commandes autorisées ou bloquées peut être spécifiée et sera appliquée.
--protection-allow : liste d'opérations autorisées séparées par des virgules. Valide sous le profil baseline, utile pour les applications très spécifiques qui effectuent des opérations privilégiées. Cela réduit l'utilisation du profil allow | privileged ; ainsi, au lieu d'utiliser le profil privileged, on peut spécifier le profil baseline et ajouter un ensemble de commandes autorisées pour offrir une définition au cas par cas pour ces applications.--protection-block : liste d'opérations bloquées séparées par des virgules. Valide sous les profils allow|privileged et baseline, permet de restreindre l'accès à certaines fonctionnalités sans utiliser le profil complet restricted qui pourrait casser certaines applications spécifiques. Utiliser les profils baseline ou privileged ouvre l'accès à la plupart des fonctionnalités Linux, mais avec l'option --protection-block, une partie de cet accès peut être bloquée.Pour des exemples de sécurité bpf, consultez les exemples de configuration bpflock
bpflock nécessite ce qui suit :
Version du noyau Linux >= 5.13 avec la configuration suivante :
CONFIG_BPF_SYSCALL=y
CONFIG_DEBUG_INFO=y
CONFIG_DEBUG_INFO_BTF=y
CONFIG_KPROBES=y
CONFIG_LSM="...,bpf"
CONFIG_BPF_LSM=y
Évidemment un noyau avec BTF activé.
Si votre noyau a été compilé avec CONFIG_BPF_LSM=y, vérifiez dans /boot/config-* pour confirmer, mais si lors de l'exécution de bpflock il échoue avec :
must have a kernel with 'CONFIG_BPF_LSM=y' 'CONFIG_LSM=\"...,bpf\"'"
Alors pour activer BPF LSM, par exemple sur Ubuntu :