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

KI erkennt Emotionen in echten Sportsituationen

Forschende des KIT haben ein Modell zur Emotionsanalyse entwickelt, das affektive Zustände ähnlich genau wie…

12 Stunden ago

Ermittlern gelingt weiterer Schlag gegen Ransomware-Gruppe LockBit

Sie decken die Identität des Kopfs der Gruppe auf. Britische Behörden fahnden mit einem Foto…

1 Tag ago

Apple stellt neuen Mobilprozessor M4 vor

Er treibt das neue iPad Pro mit OLED-Display an. Apple verspricht eine deutliche Leistungssteigerung gegenüber…

2 Tagen ago

Cyberabwehr: Mindestens zwei kritische Vorfälle pro Tag

Davon entfällt ein Viertel auf staatliche Einrichtungen und 12 Prozent auf Industrieunternehmen.

2 Tagen ago

Tunnelvision: Exploit umgeht VPN-Verschlüsselung

Forscher umgehen die Verschlüsselung und erhalten Zugriff auf VPN-Datenverkehr im Klartext. Für ihren Angriff benötigen…

2 Tagen ago

Online-Banking: 42 Prozent kehren Filialen den Rücken

Weitere 40 Prozent der Deutschen erledigen ihre Geldgeschäfte überwiegend online und gehen nur noch selten…

2 Tagen ago