Categories: Open SourceSoftware

eBPF kommt für Windows 10 und Windows Server

Der Berkeley Packet Filter eBPF lässt sich unter Windows bereits mit dem Windows Subsystem für Linux 2.0 verwenden. Aber eBPF nativ auf Windows funktioniert bisher noch nicht. Das wird sich aber bald ändern. Microsoft hat ein Open-Source-Projekt gestartet, um eBPF auf Windows 10 und Windows Server 2016 und später zum Laufen zu bringen.

Dies ist das ebpf-for-windows-Projekt. Damit können Windows-Entwickler eBPF-Toolchains und Application Programming Interfaces (APIs) zusätzlich zu bestehenden Windows-Versionen nutzen. Dies wird nicht einfach sein. Dennoch sollte es möglich sein, indem man auf die Arbeit anderer aufbaut. Dieses Projekt nimmt mehrere existierende eBPF-Open-Source-Projekte und fügt den Klebstoff hinzu, um sie unter Windows laufen zu lassen.

Warum sollten Sie das tun wollen? Linux-Entwickler kennen die Antwort darauf bereits, aber Windows-Programmierer wahrscheinlich nicht.

Zunächst begann alles mit einem Firewall-Programm: Dem jahrzehntealten Berkeley Packet Filter (BPF). Dieser war für das Erfassen und Filtern von Netzwerkpaketen auf einer registerbasierten virtuellen Maschine (VM) gedacht. Das war nützlich. Aber im Laufe der Jahre erkannte Alexei Starovoitov, Linux-Kernel-Entwickler und Software-Ingenieur bei Facebook, dass eine Aktualisierung des BPF für die Arbeit mit modernen Prozessoren, der erweiterte BPF (eBPF), um vom Benutzer bereitgestellte Programme innerhalb des Kernels auszuführen, ihn viel leistungsfähiger machen würde. Sie wurde mit dem Linux-Kernel 3.15 eingeführt und Programmierer begannen schnell, sie für alle Arten von Programmen zu verwenden.

Heute ist eBPF immer noch sehr nützlich für die Filterung, Analyse und Verwaltung von Netzwerken, aber es hat weitaus mehr Aufgaben. EBPF wird auch für die Filterung von Systemaufrufen und die Verfolgung von Prozesskontexten verwendet. Kurz gesagt, es ist zu einem Schweizer Taschenmesser für Programmierverfolgung, Systemprofilierung und das Sammeln und Aggregieren von benutzerdefinierten Metriken auf niedriger Ebene geworden. Auf einer höheren Ebene bedeutet dies, dass eBPF die Grundlage von Sicherheitsprogrammen wie Cilium, Falco und Tracee, Kubernetes-Beobachtungsprogrammen wie Hubble und Pixie und natürlich Toolchains wie Clang geworden ist.

In Windows wird es folgendermaßen funktionieren: Bestehende eBPF-Toolchains werden eBPF-Bytecode aus Quellcode in verschiedenen Sprachen generieren. Dieser Bytecode kann dann von jeder Anwendung oder manuell über das Windows-Kommandozeilen-Tool netsh verwendet werden. Dies wird mit einer Shared Library geschehen, die Libbpf-APIs offenlegt. Diese ist noch in Arbeit.

Die Bibliothek wird dann den eBPF-Bytecode an den statischen PREVAIL-Prüfer senden. Dieser wiederum wird in einem geschützten Prozess im Benutzermodus gehostet, was eine Windows-Sicherheitsumgebung ist, die es einer Kernel-Komponente erlaubt, einem Daemon im Benutzermodus zu vertrauen, der von einem vertrauenswürdigen Schlüssel signiert ist. Wenn der Bytecode alle Sicherheitsprüfungen des Verifiers besteht, kann der Bytecode entweder in den uBPF-Interpreter geladen werden, der in einem Windows-Ausführungskontext im Kernel-Modus läuft, oder er wird vom uBPF-Just-in-Time-Compiler (JIT) kompiliert und der native Code wird in den Ausführungskontext im Kernel-Modus geladen. Der uBPF-Schritt basiert auf einer von Apache lizenzierten Bibliothek zur Ausführung von eBPF-Programmen.

Dann werden die eBPF-Programme, die im Kernel-Mode-Ausführungskontext laufen, an Hooks angehängt, die Ereignisse behandeln und Helfer-APIs aufrufen. Diese werden über den eBPF-Shim offengelegt. Dieser Shim umhüllt öffentliche Windows-Kernel-APIs. Dadurch kann eBPF unter Windows verwendet werden. Bislang wurden zwei Hooks (XDP und Socket-Bind) hinzugefügt. Andere Hooks, und nicht nur Netzwerk-Hooks, werden hinzugefügt werden.

Dies ist in keiner Weise ein eBPF-Fork. Es wird lediglich eine Windows-spezifische Hosting-Umgebung für eBPF hinzugefügt.

Dies soll Windows-Entwicklern ermöglichen, eBPF-Programme zu verwenden, die Quellcode-kompatibel zwischen Windows und Linux sein werden. Einiges davon wird durch die Verwendung der Libbpf-APIs erreicht werden

Natürlich ist mancher eBPF-Code sehr spezifisch für Linux — zum Beispiel, wenn er Linux-interne Datenstrukturen verwendet. Aber viele andere APIs und Hooks werden plattformübergreifend funktionieren.

ZDNet.de Redaktion

Recent Posts

O2 und Telekom bauen Glasfaserkooperation aus

Beide Konzerne wollen die Zahl der Anschlüsse deutlich steigern. Die Öffnung des Telekomnetzes gilt ihnen…

17 Stunden ago

Cloud-Ausfälle: Wie oft sind Unternehmen betroffen?

Vier von fünf Betrieben in Deutschland nutzen Cloud Computing. 39 Prozent davon waren in den…

19 Stunden ago

iFLYTEK stellt Spark V4.0 auf dem MWC Shanghai vor: Führend bei der nächsten KI-Welle

Shanghai, July 2024. iFLYTEK hielt in Peking eine große Pressekonferenz ab, um den mit Spannung…

22 Stunden ago

Apple startet Beta von Karten im Web

Die Webversion unterstützt macOS, iPadOS (Chrome und Safari) und Windows (Chrome und Edge). Weitere Plattformen…

22 Stunden ago

Bundesverwaltung beschafft bis zu 300.000 Apple-Geräte

Auftragnehmer ist der Neckarsulmer IT-Dienstleister Bechtle. Die Rahmenvereinbarung gilt bis 2027 und hat einen Wert…

1 Tag ago

Windows 11: Juli-Sicherheitspatches verursachen Probleme mit Bitlocker

Windows-Clients und -Server starten unter Umständen nur bis zum BitLocker-Wiederherstellungsbildschirm. Betroffen sind alle unterstützten Versionen…

2 Tagen ago