Extended Berkeley Packet Filter (eBPF) ist eine leistungsstarke Technologie, mit der Entwickler Sandbox-Programme im Linux-Kernel ausführen können, ohne den Kernel-Quellcode zu ändern. In diesem Leitfaden werden die Anwendungsmöglichkeiten von eBPF in den Bereichen Netzwerke, Sicherheit und Leistungsüberwachung erläutert.
Erfahren Sie mehr über die Vorteile von eBPF und wie es die Beobachtbarkeit und Kontrolle in modernen Systemen verbessert. Das Verständnis von eBPF ist unerlässlich, um seine Fähigkeiten in der Netzwerksicherheit nutzen zu können.
Eine kurze Geschichte der BPFs
Berkeley Packet Filters (BPFs) wurden 1992 entwickelt, um den Netzwerkverkehr zu analysieren und zu filtern. Zu dieser Zeit steckte das Internet noch in den Kinderschuhen und Ingenieure waren daran interessiert, Wege zu finden, um den Datenverkehr in ihren Netzwerken besser zu verstehen. BPF wurde entwickelt, um dies zu ermöglichen, ohne den Code aller Server in einem Unternehmen ändern oder den Kernel-Code aufteilen und mit Instrumentierungsanweisungen aktualisieren zu müssen.
In der Netzwerkanalyse wurden BPFs verwendet, um alle eingehenden und ausgehenden TCP-Kommunikationen auf einem Server zu protokollieren. Dieser Ansatz erforderte zwar weniger Aufwand als die Änderung des Codes aller Server, dennoch war es mit einem erheblichen Aufwand verbunden, den Code zu erstellen und auf allen Servern der Organisation zu implementieren.
BPF wurde auch zum Filtern des Netzwerkverkehrs verwendet. Es konnte jedoch nur Pakete mit einem signierten Hash im Header akzeptieren. Wenn ein eingehendes Paket eintraf, wurde das BPF-Programm gestartet und überprüfte den Header, um festzustellen, ob der erwartete Wert vorhanden war. Je nach Ergebnis wurde das Paket entweder akzeptiert oder verworfen.
Heute wird BPF für verschiedene Zwecke eingesetzt, die über die Analyse und Filterung des Netzwerkverkehrs hinausgehen. Es wurde um weitere Funktionen erweitert und unterstützt nun 64 Byte, wodurch mehr Informationen gesammelt und gespeichert werden können.
Später, mit der Veröffentlichung von Kernel 3.18, wurden Extended Berkeley Packet Filters (eBPFs) entwickelt, um fast alle Kernel-Ereignisse zu registrieren. Als Erweiterung der ursprünglichen BPFs können eBPFs mehr Daten speichern und austauschen und für verschiedene Zwecke verwendet werden, darunter die Überwachung, Verfolgung und Optimierung von Kernel-Funktionen.
Die Einführung von eBPFs
Aus historischer Sicht haben Entwickler immer innerhalb von Betriebssystemen gearbeitet, um Netzwerkfunktionen zu implementieren und zu beobachten, wobei sie die privilegierte Fähigkeit des Kernels nutzten, das gesamte System zu überwachen und zu steuern. Die Einschränkung von Betriebssystem-Kernels lag in ihrer mangelnden Weiterentwicklung – Innovationen auf Betriebssystemebene sind im Vergleich zu den außerhalb des Betriebssystems verfügbaren Funktionen geringer. Darüber hinaus mussten Entwickler, die Module hinzufügten oder den Kernel-Quellcode modifizierten, sich durch abstrakte Schichten und komplexe Infrastrukturen kämpfen, die schwer zu debuggen sind. Als eBFP 2014 erstmals eingeführt wurde, wurden all diese Probleme gelöst.
Da eBPFs so funktionieren, dass sie die Ausführung von Sandbox-Programmen innerhalb des Betriebssystems ermöglichen, konnten Entwickler plötzlich neue Funktionen zur Laufzeit zum Betriebssystem hinzufügen. Es handelt sich um eine Art virtuelle Maschine, die innerhalb des Kernels läuft und eine Sandbox-Umgebung für die Ausführung von Bytecode-Programmen bereitstellt. Die eBPF-Virtual Machine ist einfach, effizient und sicher konzipiert und verfügt über einen begrenzten Satz von Befehlen, die nur auf einen begrenzten Satz von Ressourcen zugreifen können.
Seit seiner Einführung hat sich eBPF weiterentwickelt und wird heute in einer Vielzahl von Anwendungsfällen eingesetzt. eBPF hat Innovationen im Bereich Hochleistungsnetzwerke und Lastenausgleich in Cloud-nativen Umgebungen ermöglicht, Sicherheitsverantwortlichen detaillierte Sicherheitsdaten bei geringen Overhead-Kosten zur Verfügung gestellt und Unternehmen bei ihren präventiven Sicherheitsmaßnahmen unterstützt.
So funktioniert eBFP
Auf hoher Ebene funktioniert eBPF so, dass Entwickler kleine Programme, sogenannte eBPF-Programme, schreiben können, die an verschiedenen Punkten im Kernel angebracht werden können, um Daten abzufangen und zu verarbeiten. Die Programme werden in der Regel in einer Untergruppe der Programmiersprache C geschrieben und dann zu eBPF-Bytecode kompiliert, der anschließend in den Kernel geladen und ausgeführt wird. Im Gegensatz zu herkömmlichen Kernel-Modulen sind eBPF-Programme einfach zu implementieren und zu verwalten, da sie keine Änderungen am Kernel-Quellcode oder eine Neukompilierung erfordern.
Ein eBPF-Programm folgt einer bestimmten Abfolge von Schritten, wenn es innerhalb des Linux-Kernels ausgeführt wird:
- Sobald das eBPF-Programm geschrieben wurde, wird es zu eBPF-Bytecode kompiliert. Der resultierende Bytecode ist eine plattformunabhängige Low-Level-Darstellung des eBPF-Programms, die innerhalb des Kernels ausgeführt werden kann.
- Anschließend wird der eBPF-Bytecode in den Kernel geladen. Der Ladevorgang umfasst die Überprüfung des Bytecodes auf Sicherheit und Kompatibilität mit dem laufenden Kernel sowie die Zuweisung der erforderlichen Ressourcen zur Ausführung des eBPF-Programms.
- Sobald das eBPF-Programm geladen wurde, kann es an ein bestimmtes Kernel-Ereignis angehängt werden, z. B. an ein Netzwerkpaket oder einen Systemaufruf (syscall).
- Wenn das zugeordnete Kernel-Ereignis eintritt, wird das eBPF-Programm automatisch vom Kernel ausgeführt. Das eBPF-Programm kann auf Daten zugreifen, die mit dem Ereignis verbunden sind, und diese ändern, indem es Standardkonstrukte der Programmiersprache C wie Schleifen und bedingte Anweisungen verwendet.
- Nachdem das eBPF-Programm die Daten verarbeitet hat, kann es optional ein Ergebnis an den Kernel zurückgeben. Beispielsweise kann ein an eine Netzwerkschnittstelle angehängtes eBPF-Programm ein Paket verwerfen, wenn es bestimmte Kriterien erfüllt, oder ein an einen Systemaufruf angehängtes eBPF-Programm kann die an den Aufruf übergebenen Argumente ändern, bevor es den Aufruf fortsetzt.
- Wenn das eBPF-Programm nicht mehr benötigt wird, kann es aus dem Kernel entladen werden, wodurch die dem eBPF-Programm zugewiesenen Ressourcen freigegeben werden und sichergestellt wird, dass es nicht mehr ausgeführt wird, wenn das zugehörige Kernel-Ereignis eintritt.
Eines der Hauptmerkmale von eBPF sind seine Sicherheitsgarantien. eBPF-Programme werden in einer eingeschränkten virtuellen Maschine innerhalb des Kernels ausgeführt und können weder direkt auf Kernel-Datenstrukturen zugreifen oder diese ändern noch Abstürze oder Sicherheitslücken verursachen. eBPF-Programme unterliegen zusätzlich verschiedenen Laufzeitprüfungen, wie z. B. Grenzwertprüfungen und Typprüfungen, um sicherzustellen, dass sie nicht gegen die Speichersicherheit oder andere Sicherheitseigenschaften verstoßen.
Die Vorteile von eBPF entdecken
Heutzutage nutzen Entwickler eBPF, um die Sicherheit, Leistung und Stabilität ihrer Systeme zu verbessern. Aufgrund seiner vielen Vorteile hat sich eBPF zu einer sehr beliebten Technologie im Linux-Ökosystem entwickelt.
Erstens nutzen Unternehmen eBPF, um Geschwindigkeit und Leistung sicherzustellen. Da eBPF-Programme innerhalb des Linux-Kernels ausgeführt werden, arbeiten sie im Vergleich zu herkömmlichen Userspace-Programmen mit minimalem Overhead. In Fällen, in denen geringe Latenz und hohe Leistung entscheidend sind, ist eBPF die ideale Wahl, um die Aufgabe zu erledigen.
eBPF-Programme ermöglichen es technischen Teams außerdem, flexibel zu bleiben. Da die Programme an eine Vielzahl von Kernel-Ereignissen angehängt werden können, darunter Netzwerkpakete, Systemaufrufe und Kernel-Funktionen, können sie für eine Vielzahl von Anwendungsfällen eingesetzt werden, darunter Netzwerküberwachung, Sicherheitsanalysen und Leistungsprofilierung. eBPF-Programme können dynamisch in den Kernel geladen und aus ihm entfernt werden, was bedeutet, dass sie für kurzlebige Aufgaben wie Debugging oder Fehlerbehebung verwendet werden können.
Entwickler, die eBPF verwenden, können neue Funktionen schreiben, die zuvor aufgrund technischer Einschränkungen oder Sicherheitsbedenken nicht möglich waren. Mit eBPF können sie Anwendungen schreiben, die die Hardwarebeschleunigung auf eingebetteten Geräten wie Raspberry Pi oder anderen ARM-basierten Systemen nutzen.
Da eBPF im Gegensatz zu herkömmlichen Softwarepaketen nicht vorkompiliert, sondern just-in-time (JIT) kompiliert wird, können Entwickler ihre Anwendungen oder Dienste ohne Einbußen bei Leistung oder Skalierbarkeit erstellen. Die Technologie erfordert im Vergleich zu anderen Lösungen nur minimale Einrichtungszeiten, sodass Entwickler ihre Anwendungen mit geringem Aufwand schnell in Produktionsumgebungen bereitstellen können.
Anwendungsfälle für eBPF
eBPF wird am häufigsten für vier Hauptanwendungsfälle verwendet: Sicherheit, Netzwerke, Tracing und Beobachtbarkeit.
- Sicherheit – Im Bereich Sicherheit kümmern sich Systeme in der Regel unabhängig voneinander um Aspekte der Syscall-Filterung. Mit Syscall-Filtern können Anwendungen genau definieren, welche Syscalls sie ausführen dürfen. eBPF unterstützt eine bessere Systemsicherheit, indem es die Transparenz aller Aspekte erleichtert. Durch die Interpretation aller Syscalls und die Bereitstellung von Ansichten aller Netzwerkoperationen auf Paket- und Socket-Ebene erhalten Sicherheitsverantwortliche den Kontext, den sie benötigen, um die Kontrolle über ihre Systeme zu verbessern.
- Netzwerke – eBPF unterstützt aufgrund seiner Effizienz und Programmierbarkeit die Anforderungen der Paketverarbeitung. Dazu werden zusätzliche Protokoll-Parser und Programme zur Weiterleitungslogik hinzugefügt, um neuen Anforderungen gerecht zu werden, ohne den Paketverarbeitungskontext des Linux-Kernels verlassen zu müssen.
- Tracing – Entwickler fügen eBPF-Programme zu Trace-Punkten sowie zu Kernel- und Benutzeranwendungs-Probe-Punkten hinzu, um Einblick in das Laufzeitverhalten aller Systemanwendungen zu erhalten. eBPF bietet Kontext sowohl für Systeme als auch für Anwendungen. Die Kombination dieser beiden Aspekte liefert technischen Teams wertvolle Erkenntnisse, die sie zur Behebung von Leistungsproblemen nutzen können.
- Beobachtbarkeit – eBPF wird verwendet, um systeminterne Metriken zu sammeln, die technische Teams auf der Grundlage einer Vielzahl von Quellen anpassen können. Anstatt sich auf zeitaufwändige und umfangreiche Exporte von Stichprobendaten verlassen zu müssen, erhöht eBPF die Transparenz, indem nur die absolut notwendigen Daten erfasst werden, wodurch Unternehmen System-Overhead-Kosten eingespart werden.
Wie eBPF moderne Cloud-Sicherheitsmaßnahmen ergänzt
Ein Cloud Workload Protection Platform (CWPP)-Agent ist ein wesentliches Element beim Aufbau einer robusten Cloud-Sicherheitsstrategie. Er bietet Echtzeitschutz vor Laufzeitbedrohungen wie Ransomware und Zero-Day-Angriffen, wodurch es sich von anderen Sicherheitskontrollen abhebt. eBPF verbessert die Leistung und Skalierbarkeit von Cloud-Systemen, die in globalen Unternehmen weiterhin breite Anwendung finden, erheblich.
CWPP-Agenten zeichnen Workload-Telemetriedaten auf und liefern so wertvolle Informationen für die forensische Analyse. Im Gegensatz dazu können Side-Scanning-Lösungen, die die Speichervolumes von Cloud-Computing-Instanzen überprüfen, nur einmal täglich ausgeführt werden und bieten keine Transparenz auf Prozessebene, was zu Einschränkungen hinsichtlich Echtzeitschutz und Genauigkeit führt. Die Verwendung des eBPF-Frameworks innerhalb eines CWPP-Programms bietet mehrere Vorteile, darunter die folgenden:
- Betriebsstabilität – Die Ausführung von Code im Kernel ist ein großes Risiko, da dadurch die Wahrscheinlichkeit steigt, dass Schwachstellen in den Kernel eingeschleust werden und das gesamte System destabilisiert wird. Das eBPF-Framework enthält Sicherheitskontrollen wie den JIT-Compiler, um einen Absturz des Kernels zu verhindern.
- Systemleistung – Die Datenübertragung zwischen dem Kernel und dem Benutzerbereich ist in der Regel langsam und verursacht einen Leistungsaufwand. Das eBPF-Framework ermöglicht es Teams, das Verhalten des Kernels zu beobachten und Analysen innerhalb des Kernels durchzuführen, bevor ein Teil der Ergebnisse an den Benutzerbereich zurückübertragen wird, wodurch der erforderliche Aufwand reduziert wird.
- Geschäftliche Agilität – Durch den Betrieb vom Benutzerbereich aus bietet eBPF DevOps-Teams und Anbietern mehr Flexibilität und Agilität. DevOps kann sich auf Innovationen konzentrieren, ohne sich um Probleme mit Kernel-Abhängigkeiten kümmern zu müssen, und Anbieter können sich auf Innovationen statt auf Wartungsarbeiten konzentrieren. Dies führt zu einem kontinuierlichen Innovationszyklus und einer verbesserten Kundenerfahrung.
Singularity™-Plattform
Verbessern Sie Ihre Sicherheitslage mit Echtzeit-Erkennung, maschineller Reaktion und vollständiger Transparenz Ihrer gesamten digitalen Umgebung.
Demo anfordernZusammenfassung
eBPF hat sich schnell zu einer wichtigen Technologie für eine Vielzahl von Anwendungen entwickelt, von Netzwerken und Sicherheit bis hin zu Beobachtbarkeit und Leistungsanalyse. Seine Flexibilität und Sicherheitsgarantien machen es zu einem leistungsstarken Werkzeug für die Anpassung und Erweiterung des Linux-Kernels, und seine Popularität und Akzeptanz nehmen weiter zu, da immer mehr Anwendungsfälle entdeckt und entwickelt werden.
Führende Unternehmen investieren weiterhin in Lösungen wie SentinelOne's CWPP, Singularity Cloud Workload Security, die die Vorteile des eBPF-Frameworks bieten. Da digitale Umgebungen immer dynamischer und komplexer werden und eine große Anzahl von Workloads auf einer gemeinsamen Infrastruktur ausgeführt wird, kann eBPF dazu beitragen, die Transparenz und Kontrolle zu verbessern, sodass Sicherheitsteams Workloads effektiver überwachen und schützen können.
Kontaktieren Sie uns, um zu erfahren, wie die Sicherheitslösungen von SentinelOne die Vorteile von eBPF nutzen, um die Leistung und Effizienz in verschiedenen Umgebungen zu verbessern. Vereinbaren Sie noch heute einen Termin für eine Demo mit unseren Sicherheitsexperten.
"Erweiterte FAQs zum Berkeley Packet Filter
eBPF ist eine sichere, im Kernel integrierte virtuelle Maschine, mit der Sie benutzerdefinierten Bytecode in den Linux-Kernel laden können, ohne dessen Quellcode zu ändern oder Module hinzuzufügen. Vor der Ausführung überprüft der Kernel-Verifizierer eBPF-Programme auf Sicherheit (keine unbegrenzten Schleifen, kein Speicherzugriff außerhalb der Grenzen) und kompiliert sie dann mit JIT für nahezu native Geschwindigkeit. Es hat sich aus dem klassischen BPF weiterentwickelt und unterstützt nicht nur die Paketfilterung, sondern auch die Verfolgung, Beobachtbarkeit und vieles mehr.
eBPF kann Anwendungen wie Netzwerke, Tracing und die Definition von Benutzer-Tracepoints unterstützen. Es ermöglicht:
- Hochleistungsfähige Paketverarbeitung (z. B. XDP)
- Umfassende Beobachtbarkeit und Profilerstellung von Systemaufrufen und Anwendungsverhalten
- Echtzeit-Sicherheitsüberwachung und Durchsetzung von Richtlinien
- Transparenz auf Containerebene und Netzwerkrichtlinien in Kubernetes
- Benutzerdefinierte Kernel-Logik für Lastenausgleich, Metrikaggregation und Filterung.
Durch die Ausführung im Kernel-Kontext bietet eBPF Echtzeit-Transparenz für Systemaufrufe, Netzwerkflüsse und Prozessereignisse mit minimalem Overhead und ohne Kernel-Neustarts. Die Sandbox verhindert instabilen Code, während Maps es Tools im Benutzerbereich ermöglichen, Telemetriedaten abzurufen.
Diese Kombination erkennt Bedrohungen wie laterale Bewegungen oder unbefugten Dateizugriff frühzeitig und kann Blockierungs- oder Beendigungsrichtlinien sofort innerhalb des Ereignispfads des Kernels durchsetzen.
eBPF wurde nicht ausschließlich für Sicherheitszwecke entwickelt und hat daher einige Nachteile: Speicher- und Befehlsbeschränkungen können zu Ereignisverlusten führen; es gibt keine integrierte Manipulationssicherung für geladene Programme, und einige "Hilfsfunktionen" (z. B. bpf_probe_write_user) können für die Ausweitung von Berechtigungen missbraucht werden.
Ältere Kernel verfügen möglicherweise nicht über Verifizierungs-Korrekturen, sodass falsch konfigurierte oder bösartige eBPF zu einem Rootkit-Vektor werden können, wenn die Berechtigungen nicht streng kontrolliert werden.
Zu den gängigen eBPF-Anwendungen gehören:
- Netzwerkpaketfilterung und Lastenausgleich
- Anwendungs- und Kernel-Tracing für Leistungsprofilierung
- Intrusion Detection und Prevention
- Containersicherheit und Mikrosegmentierung in Kubernetes
- Benutzerdefinierte Metrikenerfassung und Kernel-Aggregation für Observability-Plattformen.
Bevor Sie eBPF-Lösungen einführen, überprüfen Sie, ob Ihre Kernel-Version die erforderlichen Hooks unterstützt und ob der Verifizierer über Sicherheitspatches verfügt. Weisen Sie ausreichend CPU- und Speicherplatz zu, um Datenverluste zu vermeiden. Legen Sie strenge Kapazitätsgrenzen fest (z. B. deaktivieren Sie nicht privilegierte BPF), überprüfen Sie eBPF-Module von Drittanbietern, um Risiken in der Lieferkette zu vermeiden, und führen Sie neue Richtlinien im Audit-Modus aus, um die Auswirkungen zu messen, bevor Sie Sperren oder Beendigungen durchsetzen.
SentinelOne nutzt die eBFP-Architektur, um den Schutz Ihrer Cloud-Workloads stabiler und zuverlässiger zu machen. Es bietet Echtzeit-Erkennung und -Reaktion auf Bedrohungen, tiefe Einblicke in Aktivitäten auf Kernel-Ebene und kann Laufzeitbedrohungen wie Zero-Days, Ransomware und andere bösartige Prozesse bekämpfen. Sie erhalten nahtlose Updates für Host-Betriebssystem-Images ohne Kompatibilitätsprobleme.
SentinelOne Singularity XDR kann erweiterte Analysen durchführen und forensische Untersuchungen durchführen. Es eignet sich für verschiedene Cloud-Umgebungen wie AWS, Azure, Google Cloud und private Clouds. Außerdem unterstützt es eine Vielzahl von Linux-Distributionen, Container-Laufzeiten, Windows-Servern und Kubernetes.
