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.

Jakob Jung

Recent Posts

Linux Foundation startet Open Voice Network

Die Linux Foundation setzt mit Partnern wie Microsoft, der Deutschen Telekom und der Schwarz Gruppe…

5 Stunden ago

Network as a Service: Das Ende der klassischen LAN-Konzepte

Telekom bietet mit Cisco Meraki Managed Service (CMMS) gute Argumente für Netzwerkumgebungen aus der Cloud

5 Stunden ago

Erst Vernetzung und Compliance machen IT-Sicherheit komplett

Angesichts steigender Schadenssummen und Bußgelder für Cyber-Vorfälle zahlen sich proaktiver Schutz sowie die Zusammenarbeit mit…

1 Tag ago

Innsbrucker Forscher schrumpfen Quantencomputer

Bisher waren Quantencomputer riesige Geräte, die ganze Labore füllten. Jetzt haben Physiker der Universität Innsbruck…

1 Tag ago

Compliance und Technik sind kein Widerspruch

Gesetzliche und Branchenvorgaben (Compliance) muss jedes Unternehmen erfüllen. In einem Gastbeitrag schildert Bertram Dorn, Principal…

2 Tagen ago

Zwei Drittel der deutschen Unternehmen erleiden Ransomware-Attacken

67 Prozent der Unternehmen in Deutschland waren im Jahr 2020 von Ransomware-Angriffen betroffen. In einem…

2 Tagen ago