Společnost Microsoft zveřejnila implementaci podřízeného systému eBPF pro Windows, který umožňuje spouštět libovolné zpracovatele pracující na úrovni jádra operačního systému. eBPF poskytuje vestavěný interpret bytecode v jádře, což umožňuje vytvářet zpracovatele síťových operací, které jsou načitatelné z uživatelského prostoru, kontrolovat přístup a sledovat činnost systémů. eBPF je součástí jádra Linux od verze 3.18 a umožňuje zpracovávat příchozí/odchozí síťové pakety, přesměrovávat pakety, řídit šířku pásma, zachytávat systémové volání, kontrolovat přístup a provádět trasování. Díky použití JIT kompilace je bytecode za běhu převáděn na strojové instrukce a vykonáván s výkonností zkompilovaného kódu. Zdrojové kódy eBPF pro Windows jsou otevřeny pod licencí MIT.
eBPF pro Windows může být používán s již existujícími nástroji pro práci s eBPF a poskytuje standardní API používané pro eBPF aplikace v Linuxu. Projekt umožňuje kompilovat napsaný kód v jazyce C do bytecode eBPF pomocí standardního kompilátoru eBPF založeného na Clang a spouštět již vytvořené zpracovatele eBPF pro Linux na jádře Windows, přičemž poskytuje speciální vrstvu kompatibility a podporuje standardní API Libbpf pro kompatibilitu s aplikacemi, které interagují s programe eBPF. Dále nabízí vrstvy, které poskytují linuxově podobné hooky pro XDP (eXpress Data Path) a socket bind, abstraktní přístup k síťovému zásobníku a síťovým ovladačům Windows. Plány zahrnují poskytnutí plné kompatibility na úrovni zdrojových kódů s typickými zpracovateli eBPF Linuxu.

Klíčovým rozdílem implementace eBPF pro Windows je použití alternativního verifikátoru bytecode, který byl původně navržen zaměstnanci společnosti VMware a výzkumníky z kanadských a izraelských univerzit. Verifikátor běží v samostatném izolovaném procesu v uživatelském prostoru a používá se před vykonáním BPF programů za účelem odhalení chyb a zablokování možné škodlivé činnosti.
Pro kontrolu eBPF pro Windows se používá metoda statické analýzy založená na abstraktní interpretaci, která ve srovnání s ověřovatelem eBPF pro Linux vykazuje nižší úroveň falešných pozitivních výsledků, podporuje analýzu cyklů a zajišťuje dobrou škálovatelnost. Metoda zohledňuje mnoho typových vzorců provádění, získaných analýzou existujících eBPF programů.
Po ověření se bajtkód předává do interpretru pracujícího na úrovni jádra nebo prochází JIT kompilátorem, přičemž se poté vykonává výsledný strojový kód s oprávněním jádra. Pro izolaci eBPF handlerů na úrovni jádra se používá mechanismus HVCI (HyperVisor-enforced Code Integrity), který využívá virtualizační prostředky k ochraně procesů v jádře a zajišťuje potvrzení integrity vykonávaného kódu pomocí digitálního podpisu. Omezením HVCI je schopnost ověřování pouze interpretovaných eBPF programů a nemožnost společného použití s JIT (je poskytnuta volba — buď výkon, nebo dodatečná ochrana).
Zdroj: opennet.ru
