A Microsoft közzétette az eBPF alrendszer Windows-ra történő implementációját, amely lehetővé teszi tetszőleges feldolgozók végrehajtását az operációs rendszer kernel szintjén. Az eBPF beépített bytecode értelmezőt tartalmaz a kernelben, amely lehetővé teszi a felhasználói térből betölthető hálózati műveletek feldolgozóinak létrehozását, a hozzáférés ellenőrzését és a rendszerek működésének nyomon követését. Az eBPF a Linux kernel részét képezi a 3.18-as kiadás óta, és képes kezelni a bejövő/kimenő hálózati csomagokat, átirányítani a csomagokat, kezelni a sávszélességet, elfogni a rendszerhívásokat, ellenőrizni a hozzáférést és végrehajtani a nyomkövetést. A JIT-összeállításnak köszönhetően a bytecode futásidőben gépi utasításokká alakítódik, amelyek a lefordított kód teljesítményével hajthatók végre. Az eBPF forráskódok Windows-ra nyíltak, MIT-licenc alatt.
Az eBPF Windows-ra a már létező eBPF eszközökkel alkalmazható, és egy tipikus API-t nyújt, amelyet az eBPF alkalmazásokhoz használnak Linux alatt. A projekt lehetővé teszi, hogy a C nyelven írt kódot eBPF bytecode-dá fordítsuk a Clang alapú eBPF fordító segítségével, és már elkészített Linux-ra írt eBPF feldolgozókat futtathatunk a Windows kernelén, biztosítva egy speciális kompatibilitási hátsó réteget és támogathatva a Libbpf API-t az eBPF programokkal interakcióban álló alkalmazások számára. Kínálatában Linux-szerű hook-okat biztosító hátsó rétegek is találhatók az XDP (eXpress Data Path) és a socket bind számára, amelyek absztraktálják a Windows hálózati stack-jéhez és hálózati illesztőprogramjaihoz való hozzáférést. A jövőbeni tervek között szerepel a forráskódok szintjén a tipikus eBPF processzorokkal való teljes körű kompatibilitás biztosítása.

Az eBPF Windows-ra történő implementációjának kulcsfontosságú különbsége egy alternatív bytecode ellenőrző alkalmazása, amelyet eredetileg a VMware munkatársai és kanadai, valamint izraeli egyetemek kutatói javasoltak. Az ellenőrző egy külön, elszigetelt folyamatban fut a felhasználói térben, és a BPF programok végrehajtása előtt alkalmazzák a hibák azonosítása és a lehetséges kártékony tevékenységek blokkolása érdekében.
A Windows eBPF verification uses a static analysis method based on Abstract Interpretation, which shows a lower rate of false positives compared to the eBPF verifier for Linux, supports loop analysis, and provides good scalability. The method takes into account numerous execution pattern templates derived from analyzing existing eBPF programs.
After verification, the bytecode is passed to an interpreter running at the kernel level or goes through a JIT compiler, followed by the execution of the resulting machine code with kernel privileges. To isolate eBPF handlers at the kernel level, the HVCI (HyperVisor-enforced Code Integrity) mechanism is used, which employs virtualization to protect kernel processes and ensures code integrity verification via digital signatures. A limitation of HVCI is that it can only verify interpreted eBPF programs, precluding its use with JIT (you can choose between performance and additional protection).
Forrás: opennet.ru
