Le contrôle des performances et de la sécurité de Linux n'est pas facile, et les outils traditionnels passent souvent à côté de détails critiques. eBPF (extended Berkeley Packet Filter) change cela, en permettant aux administrateurs de suivre les appels système, l'activité du réseau, l'utilisation du processeur, et plus encore - le tout avec un minimum de surcharge. Dans cet article, nous expliquerons comment fonctionne l'eBPF, à quoi il sert dans diverses applications du monde réel et quels sont les outils qui le rendent accessible.
Qu'est-ce que l'eBPF ?
L'eBPF (Extended Berkeley Packet Filter) est une nouvelle technologie qui permet l'exécution sûre et efficace de programmes définis par l'utilisateur dans le noyau Linux. Contrairement aux approches traditionnelles qui s'appuient sur un échantillonnage incomplet ou sur des modules du noyauDans l'eBPF, tout cela est possible sans modifier directement les sources du noyau ou charger des modules du noyau. Initialement développé pour le filtrage de paquets, eBPF est aujourd'hui très évolué et constitue un cadre incroyablement complet pour la surveillance, la sécurité et l'amélioration des performances.
Comment fonctionne l'eBPF ?
L'eBPF collecte et traite des données par le biais de points d'attache au sein du noyau (et parfois d'applications de l'espace utilisateur), et stocke les résultats dans des cartes accessibles depuis l'espace utilisateur. Il existe un vérificateur intégré qui fait qu'il est très difficile pour les programmes eBPF de faire planter le noyau à cause de bogues dans leur logique. Il s'agit d'une petite machine virtuelle attachée aux événements clés du système - du trafic réseau et des appels système à l'exécution de fonctions - sans ajouter une charge de latence sur ces éléments.
L'évolution du FBP à l'eBPF
L'origine de l'histoire de l'eBPF remonte à Berkeley Packet Filter (BPF) en 1992. BPF était destiné à filtrer les paquets réseau de manière efficace et sûre au sein du noyau. Les développeurs pouvaient écrire des programmes dans un langage restreint de type C, et BPF compilait ensuite le bytecode pour l'exécution dans le noyau.
Au fil du temps, le BPF s'est avéré utile au-delà du filtrage des paquets. Néanmoins, il avait ses limites en raison de sa conception originale. Il disposait de jeux d'instructions limités et s'adressait essentiellement aux opérations de réseau. Cette constatation a conduit à des extensions significatives afin de surmonter ces contraintes et d'obtenir des fonctionnalités allant au-delà de ce que les premiers BPF pouvaient réaliser, ce qui a conduit à ce que nous appelons aujourd'hui le BPF étendu (eBPF).
Avec l'introduction de l'eBPF dans les versions du noyau Linux, la fonctionnalité s'est considérablement élargie. Le jeu d'instructions est étendu, ce qui le rend beaucoup plus polyvalent et lui permet d'être utilisé à des fins beaucoup plus diverses que le filtrage de paquets.
En outre, il est essentiel que les programmes eBPF s'exécutent dans un environnement de type "bac à sable" au sein du noyau, ce qui les empêche de planter le noyau tout en renforçant cette protection par le biais d'un vérificateur, qui contrôle les programmes avant qu'ils ne soient chargés. L'eBPF a également introduit les cartes, des structures de données qui permettent aux programmes eBPF de communiquer avec les applications de l'espace utilisateur. Ces avancées ont transformé le BPF d'un simple filtre de paquets en un cadre général pour l'instrumentation du noyau.
Cas d'utilisation de l'eBPF
Depuis son introduction, l'eBPF a été largement adopté dans différents domaines :
Observabilité du réseau : Il fournit des informations approfondies sur le comportement du réseau, notamment l'inspection des paquets, l'optimisation des performances et la surveillance avancée du réseau, sans les frais généraux des méthodes traditionnelles. Par exemple, l'eBPF peut être utilisé pour analyser les retransmissions TCP, les mesures de latence du réseau et l'équilibrage personnalisé de la charge.Surveillance des performances et observabilité : Grâce à l'eBPF, les administrateurs système peuvent obtenir des mesures détaillées des performances et des traces d'événements dans le noyau et même dans les applications de l'espace utilisateur. Cela permet d'améliorer les performances des applications et la fiabilité du système grâce à une visibilité en temps réel des systèmes complexes. Des outils tels que Cilium et Falco s'appuient sur l'eBPF pour fournir une observabilité et une sécurité améliorées pour Kubernetes et les environnements cloud-native. Il peut aider à identifier les points chauds du CPU, à analyser les E/S de disque et à tracer les appels système pour mettre en évidence les goulets d'étranglement des performances.
Amélioration de la sécurité : Les programmes de sécurité utilisent l'eBPF pour construire des systèmes de détection des intrusionsLes programmes de sécurité utilisent l'eBPF pour construire des systèmes de détection des intrusions, de filtrage des appels système et d'application de la sécurité au moment de l'exécution. En limitant les capacités des logiciels potentiellement malveillants au niveau du noyau, ils augmentent la sécurité globale du système. Par exemple, l'eBPF peut surveiller les appels execve pour détecter les commandes suspectes, ou suivre l'accès aux fichiers pour détecter les modifications non autorisées.
eBPF pour le contrôle des performances
La possibilité de s'attacher à divers événements du noyau et de l'espace utilisateur, associée à une collecte et une analyse efficaces des données, fait de l'eBPF une technologie puissante pour le contrôle des performances. Examinons quelques cas d'utilisation clés :
Traçage des appels système
Les appels système définissent les interfaces entre les applications et le noyau. En attachant des kprobes aux appels système tels que read, write, open, close, execve, etc., l'eBPF peut fournir des informations approfondies sur le comportement de l'application. Les mesures de latence pour ces appels système peuvent être utilisées pour aider à localiser les goulets d'étranglement des E/S ; la mesure des octets lus ou écrits peut être utile pour comprendre le débit des données ; et le traçage des arguments des appels système permet de comprendre le comportement de l'application en profondeur. Par exemple, l'utilisation de l'eBPF pour tracer les appels système de lecture et d'écriture associés à l'accès au disque permet d'identifier la raison pour laquelle une requête de base de données est lente.
Profilage de l'utilisation de l'unité centrale
L'identification des points chauds du processeur est importante pour l'optimisation des performances des applications. eBPF peut utiliser perf_events pour rendre possible un tel profilage pour le code du noyau et de l'espace utilisateur. Vous pouvez utiliser perf_event pour déclencher des programmes eBPF sur des événements CPU tels que des manques de cache ou des erreurs de prédiction de branche, ce qui vous permet d'identifier précisément les goulots d'étranglement à un niveau granulaire. Les uprobes, quant à elles, sont utilisées pour profiler les fonctions d'application de l'espace utilisateur afin d'identifier les points névralgiques en matière de performances dans le code de l'application. Cela peut s'avérer utile pour optimiser les chemins de code critiques ou découvrir des algorithmes inefficaces.
Surveillance des performances du réseau
Les performances du réseau sont importantes pour de nombreuses applications. eBPF peut surveiller les paquets réseau et les activités des sockets au fur et à mesure qu'ils se produisent. Les programmes eBPF permettent de suivre les retransmissions TCP, de mesurer les temps d'établissement des connexions, d'analyser les pertes de paquets ou d'inspecter les en-têtes de paquets pour comprendre les schémas de trafic. Par exemple, vous pouvez écrire un programme eBPF pour identifier un nombre excessif de retransmissions TCP, ce qui vous aidera à diagnostiquer la congestion du réseau ou un matériel réseau défectueux.
Analyse des E/S de disques
Des E/S de disque lentes peuvent avoir un impact négatif sur les performances des applications. Les activités de lecture et d'écriture sur le disque peuvent être suivies grâce à la surveillance eBPF, qui fournit des informations détaillées sur la latence du disque, le débit et les schémas d'E/S. Vous pouvez ainsi repérer les applications liées aux E/S, les périphériques de stockage lents et les types d'opérations d'E/S effectuées. Un exemple serait d'écrire un programme eBPF pour identifier les processus qui causent le plus d'E/S sur le disque, ce qui devrait permettre d'optimiser l'utilisation du stockage ou d'identifier les applications qui bénéficieraient d'un stockage plus rapide.
Mesures et tableaux de bord en temps réel
Vous pouvez utiliser des outils tels que Prometheus et Grafana pour agréger et visualiser les données collectées par les programmes eBPG. Cela vous permet de créer des tableaux de bord en temps réel qui présentent une image complète des performances de votre système. Vous pouvez collecter des métriques personnalisées et utiliser Prometheus pour stocker et interroger ces données. Grafana peut ensuite être utilisé pour créer des tableaux de bord visuellement attrayants afin de faciliter le suivi des performances de votre système et la détection des problèmes potentiels.
Des entreprises comme Netflix, Facebook et Cloudflare utilisent eBPF pour diagnostiquer les problèmes de performance, optimiser leur infrastructure et mieux comprendre leurs systèmes. Par exemple, Netflix l'utilise pour analyser les performances de son réseau et identifier les goulets d'étranglement dans son réseau de diffusion de contenu, tandis que Facebook l'utilise pour surveiller les performances de ses bases de données et identifier les requêtes lentes.
L'eBPF pour le renforcement de la sécurité
Au-delà de ses applications en matière de contrôle des performances, l'eBPF est devenu une technologie importante dans le domaine de la sécurité. Sa capacité à inspecter en détail le comportement du système et à exécuter des programmes au sein du noyau en fait un outil bien adapté à la mise en place de solutions de sécurité fondamentales.
Audit des appels système
Les appels système sont l'interface par laquelle les applications interagissent avec le noyau. En surveillant les appels système avec l'eBPF, vous pouvez suivre de près le comportement des applications et détecter les événements non autorisés. Par exemple, il peut suivre les appels execve pour surveiller les exécutions de commandes ou les appels open pour détecter l'accès à des fichiers sensibles. Il permet de créer des systèmes d'audit sophistiqués pour informer en temps réel d'éventuelles activités malveillantes, telles que les tentatives d'un processus d'escalade des privilèges ou d'accès à des ressources restreintes.
Sécurité des réseaux
Avec l'eBPF, il est possible de construire de puissants systèmes de détection et de prévention des intrusions dans les réseaux (NIDS/NIPS). Comme les programmes eBPF peuvent être attachés aux paquets du réseau, ils permettent une analyse en temps réel sans la surcharge des techniques traditionnelles de filtrage des paquets. Les activités malveillantes sur le réseau, telles que les balayages de port, les attaques par déni de serviceou la communication avec des logiciels malveillants, peuvent être détectées et les paquets peuvent être supprimés ou modifiés pour atténuer la menace. Par exemple, un programme eBPF pourrait détecter et bloquer le trafic à destination et en provenance d'adresses IP malveillantes connues, ou suivre des modèles compatibles avec une attaque DDoS, tels que des volumes élevés de paquets SYN ou d'inondations ICMP.
Sécurité des conteneurs
Pendant que conteneurs ont révolutionné le déploiement des applications, la conteneurisation a également engendré un certain nombre de nouveaux défis en matière de sécurité. eBPF devient de plus en plus essentiel pour sécuriser les environnements conteneurisés. En surveillant les appels système et l'activité réseau à l'intérieur des conteneurs, vous pouvez commencer à appliquer vos politiques d'isolation des conteneurs afin de prévenir les failles de sécurité. Par exemple, vous pouvez utiliser l'eBPF pour autoriser un conteneur à effectuer uniquement certains appels système, limitant ainsi sa surface d'attaque. En outre, vous pouvez surveiller le trafic réseau pour vous assurer que vos conteneurs ne communiquent qu'avec des entités autorisées.
Contrôle de l'intégrité des fichiers
La détection des modifications non autorisées des fichiers critiques est essentielle pour maintenir l'intégrité du système. Il peut être utilisé pour suivre les modifications apportées aux fichiers et vous alerter en cas d'activité suspecte. Par exemple, vous pouvez écrire un programme eBPF pour suivre les modifications apportées aux fichiers de configuration ou aux fichiers binaires du système afin de détecter d'éventuelles intrusions ou infections par des logiciels malveillants.
Application de la sécurité au moment de l'exécution
Les programmes eBPF peuvent être utilisés pour prévenir les comportements malveillants en bloquant ou en modifiant les appels système avant qu'ils ne soient exécutés. Par exemple, il peut empêcher un processus d'accéder à un fichier sensible, ou restreindre les arguments qui peuvent être passés dans un appel système particulier.
Réflexions finales
L'eBPF modifie la façon dont nous surveillons et sécurisons les systèmes Linux en permettant l'observabilité en temps réel avec un minimum de surcharge. De l'identification des goulets d'étranglement en matière de performances à l'application des politiques de sécurité, il offre une approche puissante et efficace. Au fur et à mesure de l'adoption par les entreprises, l'eBPF jouera un rôle encore plus important dans l'observabilité des systèmes et la détection des menaces.
Mais la surveillance ne représente que la moitié de la bataille : il est tout aussi essentiel de veiller à la sécurité du noyau Linux. Il est nécessaire d'apporter des correctifs au noyau en temps voulu pour atténuer les vulnérabilités. du noyau est nécessaire pour atténuer les vulnérabilités, mais les mises à jour traditionnelles nécessitent souvent des temps d'arrêt. KernelCare Enterprise de TuxCare de TuxCare élimine ce problème grâce à l'application de correctifs en direct, ce qui vous permet d'appliquer des correctifs de sécurité au noyau Linux sans redémarrage ni interruption de service. KernelCare prend en charge toutes les principales distributions Linux d'entreprise, y compris CentOSRHEL, AlmaLinuxRocky Linux, Ubuntu, Amazon Linux et Oracle Linux.


