A Microsoft elkészített egy eBPF implementációt a Windows számára

A Microsoft közzétette a Windows eBPF alrendszerének megvalósítását, amely lehetővé teszi az operációs rendszer kernel szintjén futó tetszőleges kezelők elindítását. Az eBPF a kernelbe épített bájtkód értelmezőt biztosít, amely lehetővé teszi a felhasználói térből feltöltött hálózati műveletkezelők létrehozását, a hozzáférés szabályozását és a rendszerek működésének monitorozását. Az eBPF a 3.18-as kiadás óta szerepel a Linux kernelben, és lehetővé teszi a bejövő/kimenő hálózati csomagok kezelését, a csomagtovábbítást, a sávszélesség-kezelést, a rendszerhívás-elfogást, a hozzáférés-vezérlést és a nyomkövetést. A JIT fordítás használatának köszönhetően a bájtkódot menet közben gépi utasításokká fordítják, és a lefordított kód teljesítményével hajtják végre. Az eBPF for Windows nyílt forráskódú, MIT licenc alatt.

Az eBPF for Windows használható a meglévő eBPF-eszközökkel, és egy általános API-t biztosít az eBPF-alkalmazásokhoz Linuxon. A projekt többek között lehetővé teszi a C nyelven írt kód eBPF bájtkódba való fordítását a szabványos Clang alapú eBPF fordító segítségével, valamint a Linuxra már létrehozott eBPF kezelők futtatását a Windows kernel tetején, amely egy speciális kompatibilitási réteget biztosít, és támogatja a szabványos Libbpf-et. API az eBPF programokkal kölcsönhatásba lépő alkalmazásokkal való kompatibilitáshoz. Ez magában foglalja azokat a rétegeket, amelyek Linux-szerű hookokat biztosítanak az XDP-hez (eXpress Data Path) és a socket bind-hez, absztrahálva a hozzáférést a hálózati veremhez és a Windows hálózati illesztőprogramokhoz. A tervek között szerepel a teljes forráskód szintű kompatibilitás biztosítása a szabványos Linux eBPF processzorokkal.

A Microsoft elkészített egy eBPF implementációt a Windows számára

A legfontosabb különbség a Windows eBPF megvalósítása között egy alternatív bájtkód-ellenőrző használata, amelyet eredetileg a VMware alkalmazottai, valamint kanadai és izraeli egyetemek kutatói javasoltak. Az ellenőrző egy különálló, elszigetelt folyamatban fut a felhasználói térben, és a BPF-programok végrehajtása előtt használatos a hibák azonosítására és az esetleges rosszindulatú tevékenységek blokkolására.

Az ellenőrzéshez az eBPF for Windows egy absztrakt értelmezésen alapuló statikus elemzési módszert használ, amely a Linuxhoz készült eBPF-ellenőrzőhöz képest alacsonyabb hamis pozitív arányt mutat, támogatja a hurokelemzést és jó skálázhatóságot biztosít. A módszer számos tipikus végrehajtási mintát vesz figyelembe, amelyek a meglévő eBPF programok elemzéséből származnak.

Ellenőrzés után a bájtkód átvitelre kerül egy kernel szinten futó értelmezőbe, vagy egy JIT fordítón, majd a kapott gépi kód végrehajtása kerneljogokkal. Az eBPF-kezelők kernelszintű elkülönítésére a HVCI (HyperVisor-enforced Code Integrity) mechanizmust használják, amely virtualizációs eszközöket használ a kernelben lévő folyamatok védelmére, és digitális aláírással erősíti meg a végrehajtó kód integritását. A HVCI korlátja, hogy csak értelmezett eBPF programokat képes ellenőrizni, és nem használható a JIT-vel együtt (választhat a teljesítmény vagy a további biztonság között).

Forrás: opennet.ru

Hozzászólás