Die Überwachung der Linux-Leistung und -Sicherheit ist nicht einfach, und herkömmliche Tools übersehen oft kritische Details. eBPF (erweiterter Berkeley-Paketfilter) ändert dies und ermöglicht es Administratoren, Systemaufrufe, Netzwerkaktivitäten, CPU-Auslastung und mehr zu verfolgen - und das alles mit minimalem Overhead. In diesem Artikel erklären wir, wie eBPF funktioniert, wofür es in verschiedenen realen Anwendungen eingesetzt wird und welche Tools es zugänglich machen.
Was ist eBPF?
eBPF, oder Extended Berkeley Packet Filter, ist eine neue Technologie, die eine sichere und effiziente Ausführung von benutzerdefinierten Programmen im Linux-Kernel ermöglicht. Im Gegensatz zu traditionellen Ansätzen, die sich auf unvollständiges Sampling oder Kernel-Moduleist dies bei eBPF möglich, ohne den Kernel-Quellcode direkt zu verändern oder Kernel-Module zu laden. Ursprünglich für die Paketfilterung entwickelt, ist eBPF inzwischen hochentwickelt und stellt somit ein unglaublich komplettes Framework für die Überwachung, Sicherheit und Leistungssteigerung dar.
Wie funktioniert der eBPF?
eBPF sammelt und verarbeitet Daten über Anknüpfungspunkte innerhalb des Kernels (und manchmal User-Space-Anwendungen) und speichert die Ergebnisse in Maps, die vom User-Space aus zugänglich sind. Es gibt einen eingebauten Überprüfer, der es eBPF-Programmen sehr schwer macht, den Kernel aufgrund von Fehlern in ihrer Logik zum Absturz zu bringen. Stellen Sie sich das Programm als eine kleine virtuelle Maschine vor, die an wichtige Systemereignisse - vom Netzwerkverkehr über Systemaufrufe bis hin zu Funktionsausführungen - angeschlossen ist, ohne diese mit einer Latenzzeit zu belasten.
Die Entwicklung von BPF zu eBPF
Der Ursprung der eBPF-Geschichte geht auf den Berkeley Packet Filter (BPF) von 1992 zurück. BPF war dazu gedacht, Netzwerkpakete effizient und sicher innerhalb des Kernels zu filtern. Entwickler konnten Programme in einer eingeschränkten C-ähnlichen Sprache schreiben, und BPF kompilierte dann Bytecode für die Ausführung im Kernel.
Im Laufe der Zeit hat sich die BPF über die Paketfilterung hinaus als nützlich erwiesen. Dennoch hatte sie aufgrund ihres ursprünglichen Designs ihre Grenzen. Sie verfügte über begrenzte Befehlssätze und war im Wesentlichen auf Netzwerkoperationen ausgerichtet. Diese Erkenntnis führte zu erheblichen Erweiterungen, um diese Einschränkungen zu überwinden und eine Funktionalität zu erlangen, die über das hinausgeht, was frühere BPF leisten konnten, was schließlich zu dem führte, was wir heute als erweiterte BPF (eBPF) bezeichnen.
Mit der Einführung von eBPF in den Linux-Kernel-Versionen wurde der Funktionsumfang drastisch erweitert. Der Befehlssatz wurde erweitert, was ihn vielseitiger macht und es ermöglicht, ihn für eine viel breitere Palette von Zwecken als die Paketfilterung zu verwenden.
Darüber hinaus ist es von entscheidender Bedeutung, dass die eBPF-Programme in einer Sandbox-Umgebung im Kernel laufen, die sie daran hindert, den Kernel zum Absturz zu bringen, während dieser Schutz durch einen Verifier, der die Programme vor dem Laden überprüft, noch verstärkt wird. Mit eBPF wurden auch Maps eingeführt; das sind Datenstrukturen, die es eBPF-Programmen ermöglichen, mit Benutzerraumanwendungen zu kommunizieren. Durch diese Weiterentwicklungen wurde eBPF von einem einfachen Paketfilter zu einem Allzweckrahmen für die Kernel-Instrumentierung.
Anwendungsfälle von eBPF
Seit seiner Einführung hat eBPF eine breite Akzeptanz in verschiedenen Bereichen gefunden:
Netzwerk-Beobachtbarkeit: Es bietet tiefe Einblicke in das Netzwerkverhalten, einschließlich Paketinspektion, Leistungsoptimierung und erweiterte Netzwerküberwachung ohne den Overhead herkömmlicher Methoden. eBPF kann beispielsweise zur Analyse von TCP-Wiederholungen, Netzwerk-Latenzmessungen und benutzerdefiniertem Lastausgleich eingesetzt werden.Leistungsüberwachung und Beobachtbarkeit: Mit eBPF können Systemadministratoren detaillierte Leistungsmetriken und Trace-Ereignisse im Kernel und sogar in User-Space-Anwendungen erhalten. Dies trägt dazu bei, die Anwendungsleistung und Systemzuverlässigkeit zu verbessern, indem es einen Echtzeit-Einblick in komplexe Systeme ermöglicht. Werkzeuge wie Cilium und Falco nutzen eBPF, um die Beobachtbarkeit und Sicherheit von Kubernetes und Cloud-nativen Umgebungen zu verbessern. Es kann helfen, CPU-Hotspots zu identifizieren, Festplatten-E/A zu analysieren und Systemaufrufe zu verfolgen, um Leistungsengpässe aufzuzeigen.
Sicherheitsverbesserungen: Sicherheitsprogramme nutzen eBPF zum Aufbau von Systemen zur Erkennung von Eindringlingen, das Filtern von Systemaufrufen und die Durchsetzung der Sicherheit zur Laufzeit. Indem es die Möglichkeiten potenziell bösartiger Software auf der Kernel-Ebene einschränkt, erhöht es die allgemeine Systemsicherheit. So kann eBPF beispielsweise execve-Aufrufe auf verdächtige Befehle überwachen oder den Dateizugriff verfolgen, um unerlaubte Änderungen zu erkennen.
eBPF für die Leistungsüberwachung
Die Fähigkeit, an verschiedene Kernel- und User-Space-Ereignisse anzuknüpfen, gepaart mit effizienter Datenerfassung und -analyse, macht eBPF zu einer leistungsstarken Technologie für die Leistungsüberwachung. Lassen Sie uns einige wichtige Anwendungsfälle untersuchen:
Systemaufrufe verfolgen
Systemaufrufe definieren Schnittstellen zwischen Anwendungen und dem Kernel. Durch das Anhängen von kprobes an Systemaufrufe wie read, write, open, close, execve usw. kann eBPF tiefe Einblicke in das Anwendungsverhalten geben. Latenzmessungen für diese Systemaufrufe können helfen, E/A-Engpässe zu lokalisieren; die Messung von gelesenen oder geschriebenen Bytes kann nützlich sein, um den Datendurchsatz zu verstehen; und die Verfolgung von Systemaufrufsargumenten ermöglicht es, das Anwendungsverhalten in der Tiefe zu verstehen. Die Verwendung von eBPF zur Verfolgung der Lese- und Schreibsystemaufrufe im Zusammenhang mit dem Festplattenzugriff kann beispielsweise Aufschluss darüber geben, warum eine Datenbankabfrage langsam läuft.
Profiling der CPU-Auslastung
Die Identifizierung von CPU-Hotspots ist wichtig für die Leistungsoptimierung von Anwendungen. eBPF kann perf_events verwenden, um ein solches Profiling für Kernel- und User-Space-Code zu ermöglichen. Sie können perf_event verwenden, um eBPF-Programme bei CPU-Ereignissen wie Cache-Fehlern oder Verzweigungsfehlprognosen auszulösen, so dass Sie Leistungsengpässe auf granularer Ebene genau ermitteln können. Uprobes hingegen werden verwendet, um ein Profil der Anwendungsfunktionen im Benutzerbereich zu erstellen, um Leistungsspitzen im Anwendungscode zu identifizieren. Dies kann hilfreich sein, um kritische Codepfade zu optimieren oder ineffiziente Algorithmen aufzudecken.
Überwachung der Netzwerkleistung
Die Netzwerkleistung ist für viele Anwendungen wichtig. eBPF kann Netzwerkpakete und Socket-Aktivitäten überwachen, während sie stattfinden. Mit eBPF-Programmen können Sie TCP-Wiederholungen verfolgen, Verbindungsaufbauzeiten messen, Paketverluste analysieren oder Paket-Header untersuchen, um Verkehrsmuster zu verstehen. Sie könnten zum Beispiel ein eBPF-Programm schreiben, um eine übermäßige Anzahl von TCP-Wiederholungen zu identifizieren, was Ihnen hilft, eine Netzwerküberlastung oder fehlerhafte Netzwerkhardware zu diagnostizieren.
Festplatten-E/A-Analyse
Langsame Festplatten-E/A können sich negativ auf die Anwendungsleistung auswirken. Lese- und Schreibvorgänge auf der Festplatte können über die eBPF-Überwachung verfolgt werden, die detaillierte Einblicke in die Latenzzeit, den Durchsatz und die E/A-Muster der Festplatte bietet. Auf diese Weise können Sie auch E/A-gebundene Anwendungen, langsame Speichergeräte und die Art der durchgeführten E/A-Operationen erkennen. Ein Beispiel wäre das Schreiben eines eBPF-Programms, um festzustellen, welche Prozesse die meisten E/A-Operationen auf der Festplatte verursachen, was bei der Optimierung der Speichernutzung oder der Identifizierung von Anwendungen, die von schnellerem Speicher profitieren würden, helfen sollte.
Metriken und Dashboards in Echtzeit
Sie können Tools wie Prometheus und Grafana verwenden, um die von eBPG-Programmen gesammelten Daten zu aggregieren und zu visualisieren. So können Sie Dashboards in Echtzeit erstellen, die ein umfassendes Bild Ihrer Systemleistung zeigen. Sie können benutzerdefinierte Metriken sammeln und Prometheus verwenden, um diese Daten zu speichern und abzufragen. Grafana kann dann verwendet werden, um visuell ansprechende Dashboards zur einfachen Überwachung der Systemleistung und zur Erkennung möglicher Probleme zu erstellen.
Unternehmen wie Netflix, Facebook und Cloudflare nutzen eBPF, um Leistungsprobleme zu diagnostizieren, ihre Infrastruktur zu optimieren und tiefere Einblicke in ihre Systeme zu gewinnen. Netflix nutzt es beispielsweise für die Analyse der Netzwerkleistung und zur Ermittlung von Engpässen in seinem Content Delivery Network, während Facebook es zur Überwachung der Leistung seiner Datenbanken und zur Ermittlung langsamer Abfragen einsetzt.
eBPF zur Erhöhung der Sicherheit
Neben den Anwendungen für die Leistungsüberwachung hat sich eBPF zu einer wichtigen Technologie für die Sicherheit entwickelt. Durch seine Fähigkeit, das Systemverhalten im Detail zu untersuchen und Programme innerhalb des Kernels auszuführen, eignet es sich gut für den Aufbau grundlegender Sicherheitslösungen.
Systemaufruf-Überwachung
Systemaufrufe sind die Schnittstelle, über die Anwendungen mit dem Kernel interagieren. Durch die Überwachung von Systemaufrufen mit eBPF können Sie das Anwendungsverhalten genau verfolgen und nicht autorisierte Ereignisse erkennen. So können beispielsweise execve-Aufrufe zur Überwachung von Befehlsausführungen oder open-Aufrufe zur Erkennung des Zugriffs auf sensible Dateien verfolgt werden. Es ermöglicht die Erstellung von ausgefeilten Auditing-Systemen, die in Echtzeit über mögliche bösartige Aktivitäten informieren, wie z. B. Versuche eines Prozesses, seine Privilegien zu erweitern oder auf eingeschränkte Ressourcen zuzugreifen.
Netzwerksicherheit
Mit eBPF ist es möglich, leistungsfähige Systeme zur Erkennung und Verhinderung von Eindringlingen in das Netz (NIDS/NIPS) aufzubauen. Da eBPF-Programme an Netzwerkpakete angehängt werden können, ermöglichen sie Echtzeitanalysen ohne den Overhead herkömmlicher Paketfiltertechniken. Bösartige Netzwerkaktivitäten, wie Port-Scans Denial-of-Service-Angriffeoder die Kommunikation mit Malware, können erkannt werden, und die Pakete können verworfen oder verändert werden, um die Bedrohung zu entschärfen. Ein eBPF-Programm könnte beispielsweise Datenverkehr von und zu bekannten bösartigen IP-Adressen erkennen und blockieren oder Muster verfolgen, die auf einen DDoS-Angriff hindeuten, wie etwa große Mengen von SYN-Paketen oder ICMP-Floods.
Container-Sicherheit
Während Container die Anwendungsbereitstellung revolutioniert haben, hat die Containerisierung auch zu einer Reihe neuer Sicherheitsherausforderungen geführt. eBPF wird für die Absicherung von containerisierten Umgebungen immer wichtiger. Durch die Überwachung von Systemaufrufen und Netzwerkaktivitäten innerhalb von Containern können Sie beginnen, Ihre Container-Isolierungsrichtlinien durchzusetzen, um Sicherheitsverletzungen zu verhindern. Sie können eBPF beispielsweise dazu verwenden, einem Container nur bestimmte Systemaufrufe zu gestatten und so seine Angriffsfläche einzuschränken. Außerdem können Sie den Netzwerkverkehr überwachen, um sicherzustellen, dass Ihre Container nur mit autorisierten Einheiten kommunizieren.
Überwachung der Dateiintegrität
Die Erkennung unbefugter Änderungen an kritischen Dateien ist für die Aufrechterhaltung der Systemintegrität unerlässlich. Es kann verwendet werden, um Dateiänderungen zu verfolgen und Sie zu warnen, wenn verdächtige Aktivitäten auftreten. Sie könnten z. B. ein eBPF-Programm schreiben, das die Änderungen an den Konfigurationsdateien oder den System-Binärdateien verfolgt, um potenzielle Eindringlinge oder Malware-Infektionen zu erkennen.
Durchsetzung der Laufzeitsicherheit
Es bietet einen Mechanismus zur Durchsetzung der Sicherheit zur Laufzeit, da es Systemaufrufe abfangen und modifizieren kann. eBPF-Programme können verwendet werden, um bösartiges Verhalten zu verhindern, indem sie Systemaufrufe blockieren oder modifizieren, bevor sie ausgeführt werden. So kann beispielsweise verhindert werden, dass ein Prozess auf eine sensible Datei zugreift, oder es können die Argumente eingeschränkt werden, die in einem bestimmten Systemaufruf übergeben werden können.
Abschließende Überlegungen
eBPF verändert die Art und Weise, wie wir Linux-Systeme überwachen und sichern, indem es Echtzeitbeobachtung mit minimalem Overhead ermöglicht. Von der Identifizierung von Leistungsengpässen bis zur Durchsetzung von Sicherheitsrichtlinien bietet es einen leistungsstarken und effizienten Ansatz. Mit der zunehmenden Verbreitung in Unternehmen wird eBPF eine noch größere Rolle bei der Systemüberwachung und der Erkennung von Bedrohungen spielen.
Doch die Überwachung ist nur die halbe Miete - die Sicherheit des Linux-Kernels ist ebenso wichtig. Rechtzeitiges Patchen des Kernels ist notwendig, um Schwachstellen zu entschärfen, aber herkömmliche Updates erfordern oft Ausfallzeiten. TuxCare's KernelCare Enterprise beseitigt dieses Problem mit Live-Patching und ermöglicht es Ihnen, Sicherheitskorrekturen auf den Linux-Kernel anzuwenden, ohne dass ein Neustart oder eine Serviceunterbrechung erforderlich ist. KernelCare unterstützt alle wichtigen Linux-Distributionen für Unternehmen, darunter CentOSUND RHEL, AlmaLinux, Rocky Linux, Ubuntu, Amazon Linux und Oracle Linux.

