Extended Berkeley Packet Filter (eBPF) est une technologie puissante qui permet aux développeurs d'exécuter des programmes en mode sandbox dans le noyau Linux sans modifier le code source du noyau. Ce guide explore les applications de l'eBPF dans les domaines des réseaux, de la sécurité et de la surveillance des performances.
Découvrez les avantages de l'eBPF et comment il améliore l'observabilité et le contrôle dans les systèmes modernes. Il est essentiel de comprendre l'eBPF pour tirer parti de ses capacités en matière de sécurité réseau.
Brève histoire des BPF
Les filtres de paquets Berkeley (BPF) ont été créés en 1992 dans le but d'analyser et de filtrer le trafic réseau. À l'époque, Internet en était encore à ses débuts et les ingénieurs cherchaient des moyens de mieux comprendre le trafic transitant par leurs réseaux. Les BPF ont été conçus pour permettre d'atteindre cet objectif sans avoir à modifier le code de tous les serveurs d'une organisation ni à bifurquer le code du noyau et à le mettre à jour avec des instructions d'instrumentation.
Appliqué à l'analyse réseau, le BPF était utilisé pour enregistrer toutes les communications TCP entrantes et sortantes sur un serveur. Bien que cette approche nécessitait moins de travail que la modification du code de tous les serveurs, elle demandait tout de même un effort considérable pour créer le code et le déployer sur tous les serveurs de l'organisation.
Le BPF était également utilisé pour filtrer le trafic réseau. Cependant, il ne pouvait accepter que les paquets dont l'en-tête comportait un hachage signé. Lorsqu'un paquet entrant arrivait, le programme BPF était lancé et vérifiait l'en-tête pour voir si la valeur attendue était présente. En fonction des résultats, le paquet était soit accepté, soit rejeté.
Aujourd'hui, le BPF est utilisé à des fins diverses, au-delà de la simple analyse et du filtrage du trafic réseau. Il a été étendu pour offrir plus de fonctionnalités et prendre en charge 64 octets, ce qui permet de collecter et de stocker davantage d'informations.
Plus tard, avec la sortie du noyau 3.18, les filtres de paquets Berkeley étendus (eBPF) ont été créés pour enregistrer presque tous les événements du noyau. Extension des BPF d'origine, les eBPF peuvent stocker et échanger davantage de données et être utilisés à diverses fins, notamment la surveillance, le traçage et l'optimisation des fonctions du noyau.
Introduction des eBPF
D'un point de vue historique, les développeurs ont toujours travaillé au sein des systèmes d'exploitation pour mettre en œuvre et observer les fonctionnalités réseau, en utilisant la capacité privilégiée du noyau à surveiller et contrôler l'ensemble du système. Les noyaux des systèmes d'exploitation ont toujours été limités par leur manque d'évolution : l'innovation au niveau du système d'exploitation est moindre par rapport aux capacités observées en dehors de ceux-ci. De plus, les développeurs qui ajoutaient des modules ou modifiaient le code source du noyau devaient se frayer un chemin à travers des couches abstraites et une infrastructure complexe difficiles à déboguer. Lorsque l'eBFP a été introduit pour la première fois en 2014, il a résolu tous ces problèmes.
Comme les eBPF fonctionnent en permettant à des programmes sandboxés de s'exécuter au sein du système d'exploitation, les développeurs ont soudainement pu ajouter de nouvelles capacités au système d'exploitation lors de l'exécution. Il s'agit d'un type de machine virtuelle qui s'exécute à l'intérieur du noyau et fournit un environnement sandboxé pour l'exécution de programmes bytecode. La machine virtuelle eBPF est conçue pour être simple, efficace et sûre, avec un ensemble limité d'instructions qui ne peuvent accéder qu'à un ensemble restreint de ressources.
Depuis sa création, l'eBPF a évolué et est aujourd'hui utilisé dans un large éventail de cas d'utilisation. L'eBPF a permis des innovations en matière de réseau haute performance et d'équilibrage de charge dans les environnements cloud natifs, a fourni aux responsables de la sécurité des données de sécurité granulaires à faible coût et a aidé les organisations dans leurs efforts de sécurité préventive.
Comprendre le fonctionnement de l'eBFP
À un niveau élevé, l'eBPF fonctionne en permettant aux développeurs d'écrire de petits programmes, appelés programmes eBPF, qui peuvent être attachés à divers points du noyau pour intercepter et traiter des données. Généralement écrits dans un sous-ensemble du langage de programmation C, les programmes sont ensuite compilés en bytecode eBPF, qui est ensuite chargé dans le noyau et exécuté. Contrairement aux modules traditionnels du noyau, les programmes eBPF sont faciles à déployer et à gérer, car ils ne nécessitent pas de modification du code source du noyau ni de recompilation.
Un programme eBPF suit une série d'étapes spécifiques lorsqu'il est exécuté dans le noyau Linux :
- Une fois le programme eBPF écrit, il est compilé en bytecode eBPF. Le bytecode résultant est une représentation de bas niveau et indépendante de la plate-forme du programme eBPF qui peut être exécutée dans le noyau.
- Ensuite, le bytecode eBPF est chargé dans le noyau. Le processus de chargement consiste à vérifier la sécurité et la compatibilité du bytecode avec le noyau en cours d'exécution, puis à allouer les ressources nécessaires à l'exécution du programme eBPF.
- Une fois le programme eBPF chargé, il peut être associé à un événement spécifique du noyau, tel qu'un paquet réseau ou un appel système (syscall).
- Lorsque l'événement associé au noyau se produit, le programme eBPF est exécuté automatiquement par le noyau. Le programme eBPF peut accéder aux données associées à l'événement et les modifier à l'aide de constructions de programmation C standard telles que des boucles et des instructions conditionnelles.
- Une fois que le programme eBPF a traité les données, il peut éventuellement renvoyer un résultat au noyau. Par exemple, un programme eBPF associé à une interface réseau peut supprimer un paquet s'il répond à certains critères, ou un programme eBPF associé à un appel système peut modifier les arguments transmis à l'appel avant de lui permettre de se poursuivre.
- Lorsque le programme eBPF n'est plus nécessaire, il peut être déchargé du noyau, libérant ainsi les ressources qui lui étaient allouées et garantissant qu'il ne sera plus exécuté lorsque l'événement du noyau auquel il est associé se produira.
L'une des principales caractéristiques de l'eBPF est qu'il garantit la sécurité. Les programmes eBPF s'exécutent dans une machine virtuelle restreinte au sein du noyau et ne peuvent pas accéder directement aux structures de données du noyau ni les modifier, ni provoquer de plantages ou de failles de sécurité. Les programmes eBPF sont en outre soumis à divers contrôles d'exécution, tels que la vérification des limites et la vérification des types, afin de s'assurer qu'ils ne violent pas la sécurité de la mémoire ou d'autres propriétés de sécurité.
Explorer les avantages de l'eBPF
Aujourd'hui, les développeurs utilisent l'eBPF pour améliorer la sécurité, les performances et la stabilité de leurs systèmes. L'eBPF est devenu une technologie très populaire dans l'écosystème Linux en raison de ses nombreux avantages.
Tout d'abord, les entreprises utilisent l'eBPF pour garantir la vitesse et les performances. Comme les programmes eBPF sont exécutés au sein du noyau Linux, ils fonctionnent avec une surcharge minimale par rapport aux programmes traditionnels de l'espace utilisateur. Dans les cas où une faible latence et des performances élevées sont essentielles, l'eBPF est le choix idéal pour accomplir la tâche.
Les programmes eBPF permettent également aux équipes techniques de rester flexibles. Comme les programmes peuvent être associés à un large éventail d'événements du noyau, notamment les paquets réseau, les appels système et les fonctions du noyau, ils peuvent être utilisés dans de nombreux cas, notamment la surveillance du réseau, l'analyse de la sécurité et le profilage des performances. Les programmes eBPF peuvent être chargés et déchargés dynamiquement du noyau, ce qui signifie qu'ils peuvent être utilisés pour des tâches de courte durée telles que le débogage ou le dépannage.
Les développeurs qui utilisent eBPF peuvent écrire de nouvelles fonctionnalités qui étaient auparavant impossibles à réaliser en raison de limitations techniques ou de problèmes de sécurité. Avec eBPF, ils peuvent écrire des applications qui tirent parti de l'accélération matérielle sur des appareils embarqués tels que Raspberry Pi ou d'autres systèmes basés sur ARM.
Compilé juste à temps (JIT) plutôt que précompilé comme les progiciels traditionnels, les développeurs peuvent utiliser eBPF pour créer leurs applications ou services sans sacrifier les performances ou l'évolutivité. Cette technologie nécessite un temps de configuration minimal par rapport à d'autres solutions, ce qui permet aux développeurs de déployer rapidement leurs applications dans des environnements de production avec moins d'efforts.
Cas d'utilisation de l'eBPF
L'eBPF est le plus souvent utilisé dans quatre cas principaux : la sécurité, la mise en réseau, le traçage et l'observabilité.
- Sécurité – En matière de sécurité, les systèmes gèrent généralement de manière indépendante les aspects liés au filtrage des appels système. Les filtres d'appels système permettent aux applications de définir exactement les appels système qu'elles sont autorisées à exécuter. eBPF améliore la sécurité du système en facilitant la visibilité sur tous les aspects. En interprétant tous les appels système et en fournissant des vues au niveau des paquets et des sockets de toutes les opérations réseau, les responsables de la sécurité disposent du contexte nécessaire pour améliorer leur niveau de contrôle sur les systèmes.
- Réseau – eBPF prend en charge les exigences de traitement des paquets grâce à son efficacité et à sa programmabilité. Pour ce faire, il ajoute des analyseurs de protocole supplémentaires et des programmes de logique de transfert afin de répondre aux nouvelles exigences sans avoir à quitter le contexte de traitement des paquets du noyau Linux.
- Traçage – Les développeurs associent des programmes eBPF à des points de traçage ainsi qu'à des points de sondage du noyau et des applications utilisateur afin de garantir la visibilité du comportement d'exécution de toutes les applications du système. eBPF fournit un contexte à la fois aux systèmes et aux applications ; la combinaison de ces deux éléments offre aux équipes techniques des informations précieuses qu'elles peuvent utiliser pour résoudre les problèmes de performances.
- Observabilité – eBPF est utilisé pour collecter l'agrégation dans le noyau des métriques système que les équipes techniques peuvent personnaliser en fonction d'un large éventail de sources. Au lieu de devoir s'appuyer sur des exportations de données d'échantillonnage longues et volumineuses, eBPF augmente la profondeur de la visibilité en collectant uniquement les données absolument nécessaires, ce qui évite aux entreprises des coûts supplémentaires liés au système.
Comment eBPF renforce les mesures de sécurité cloud modernes
Un agent CWPP (Cloud Workload Protection Platform) est un élément essentiel pour élaborer une stratégie de sécurité cloud robuste. Il offre une protection en temps réel contre les menaces d'exécution telles que les ransomwares et les attaques zero-day, ce qui le distingue des autres contrôles de sécurité. L'eBPF améliore considérablement les performances et l'évolutivité des systèmes cloud, qui continuent d'être largement adoptés par les organisations mondiales.
CWPP Les agents enregistrent les données télémétriques de la charge de travail, fournissant ainsi des informations précieuses pour l'analyse forensic. En revanche, les solutions de scan latéral, qui inspectent les volumes de stockage des instances de calcul cloud, ne peuvent être exécutées qu'une fois par jour et manquent de visibilité au niveau des processus, ce qui limite leur protection en temps réel et leur précision. L'utilisation du framework eBPF dans un programme CWPP offre plusieurs avantages, notamment les suivants :
- Stabilité opérationnelle – L'exécution de code dans le noyau représente un risque majeur, car elle augmente les chances d'introduire des vulnérabilités dans le noyau et de déstabiliser l'ensemble du système. Le framework eBPF comprend des contrôles de sécurité tels que le compilateur JIT afin de ne pas planter le noyau.
- Performances du système – Les transferts de données entre le noyau et l'espace utilisateur sont généralement lents et génèrent une surcharge au niveau des performances. Le framework eBPF permet aux équipes d'observer le comportement du noyau et d'effectuer des analyses au sein de celui-ci avant de transférer un sous-ensemble de résultats vers l'espace utilisateur, ce qui réduit la surcharge nécessaire.
- Agilité commerciale – En fonctionnant à partir de l'espace utilisateur, eBPF offre une plus grande flexibilité et agilité aux équipes DevOps et au fournisseur. DevOps peut se concentrer sur l'innovation sans se soucier des problèmes de dépendance au noyau, et le fournisseur peut se concentrer sur l'innovation plutôt que sur la maintenance. Cela conduit à un cycle continu d'innovation et à une amélioration de l'expérience client.
Plate-forme Singularity™
Améliorez votre posture de sécurité grâce à la détection en temps réel, à une réponse à la vitesse de la machine et à une visibilité totale de l'ensemble de votre environnement numérique.
Obtenir une démonstrationRésumé
eBPF est rapidement devenu une technologie importante pour un large éventail d'applications, allant des réseaux et de la sécurité à l'observabilité et à l'analyse des performances. Sa flexibilité et ses garanties de sécurité en font un outil puissant pour personnaliser et étendre le noyau Linux. Sa popularité et son adoption ne cessent de croître à mesure que de nouveaux cas d'utilisation sont découverts et développés.
Les grandes entreprises continuent d'investir dans des solutions telles que CWPP de SentinelOne, Singularity Cloud Workload Security, qui ont intégré les avantages du framework eBPF. Alors que les environnements numériques continuent de gagner en dynamisme et en complexité et qu'un grand nombre de charges de travail sont exécutées sur des infrastructures partagées, l'eBPF peut contribuer à améliorer la visibilité et le contrôle, permettant ainsi aux équipes de sécurité de surveiller et de protéger plus efficacement les charges de travail.
Contactez-nous pour découvrir comment les solutions de sécurité de SentinelOne exploitent les avantages de l'eBPF pour améliorer les performances et l'efficacité dans divers environnements. Réservez dès aujourd'hui une démonstration avec nos experts en sécurité.
"FAQ sur le filtre de paquets Berkeley étendu
eBPF est une machine virtuelle sécurisée intégrée au noyau qui vous permet de charger du bytecode personnalisé dans le noyau Linux sans modifier son code source ni ajouter de modules. Avant l'exécution, le vérificateur du noyau vérifie la sécurité des programmes eBPF (pas de boucles illimitées, pas d'accès à la mémoire hors limites), puis les compile JIT pour une vitesse proche de celle d'un programme natif. Il a évolué à partir du BPF classique pour prendre en charge non seulement le filtrage des paquets, mais aussi le traçage, l'observabilité et bien plus encore.
eBPF peut prendre en charge des applications telles que la mise en réseau, le traçage et la définition de points de traçage utilisateur. Il permet :
- Traitement haute performance des paquets (par exemple, XDP)
- Observabilité approfondie et profilage des appels système et du comportement des applications
- Surveillance de la sécurité et application des politiques en temps réel
- Visibilité au niveau des conteneurs et politique réseau dans Kubernetes
- Logique personnalisée dans le noyau pour l'équilibrage de charge, l'agrégation des métriques et le filtrage.
En s'exécutant dans le contexte du noyau, eBPF offre une visibilité en temps réel sur les appels système, les flux réseau et les événements de processus avec une surcharge minimale et sans redémarrage du noyau. Son bac à sable empêche l'exécution de code instable, tandis que les cartes permettent aux outils de l'espace utilisateur de récupérer des données télémétriques.
Cette combinaison permet de détecter rapidement les menaces telles que les mouvements latéraux ou les accès non autorisés aux fichiers, et d'appliquer immédiatement des politiques de blocage ou de suppression dans le chemin d'événement du noyau.
L'eBPF n'a pas été conçu uniquement pour la sécurité, il présente donc des compromis : les limites de mémoire et d'instructions peuvent entraîner la perte d'événements ; il n'y a pas de protection anti-falsification intégrée pour les programmes chargés ; et certaines fonctions " d'aide " (par exemple, bpf_probe_write_user) peuvent être utilisées à mauvais escient pour obtenir des privilèges supplémentaires.
Les noyaux plus anciens peuvent ne pas disposer des correctifs de vérification, de sorte qu'un eBPF mal configuré ou malveillant peut devenir un vecteur de rootkit si les autorisations ne sont pas strictement contrôlées.
Les déploiements eBPF courants comprennent :
- Filtrage des paquets réseau et équilibrage de charge
- Suivi des applications et du noyau pour le profilage des performances
- Détection et prévention des intrusions
- Sécurité des conteneurs et micro-segmentation dans Kubernetes
- Collecte de métriques personnalisées et agrégation dans le noyau pour les plateformes d'observabilité.
Avant de déployer des solutions eBPF, vérifiez que la version de votre noyau prend en charge les hooks requis et que le vérificateur dispose des correctifs de sécurité. Allouez suffisamment de ressources CPU et de mémoire pour éviter les pertes d'événements. Définissez des limites de capacité strictes (par exemple, désactivez le BPF non privilégié), vérifiez les modules eBPF tiers afin de prévenir les risques liés à la chaîne d'approvisionnement, et exécutez les nouvelles politiques en mode audit afin d'en mesurer l'impact avant d'appliquer des blocages ou des terminaisons.
SentinelOne utilise l'architecture eBFP pour rendre la protection de votre charge de travail cloud plus stable et plus fiable. Elle offre une détection et une réponse en temps réel aux menaces, une visibilité approfondie sur les activités au niveau du noyau et peut lutter contre les menaces d'exécution telles que les zero-days, les ransomwares et autres processus malveillants. Vous pouvez obtenir des mises à jour transparentes des images du système d'exploitation hôte sans vous soucier de la compatibilité.
SentinelOne Singularity XDR peut effectuer des analyses avancées et mener des enquêtes médico-légales. Il est adapté à divers environnements cloud tels que AWS, Azure, Google Cloud et les clouds privés. De plus, il prend en charge un large éventail de distributions Linux, de conteneurs d'exécution, de serveurs Windows et de Kubernetes.

