Microsoft har publicerat en implementation av eBPF-subsystemet för Windows, vilket möjliggör körning av godtyckliga hanterare som fungerar pÄ operativsystemets kÀrnnivÄ. eBPF erbjuder en inbyggd tolk för bytekod i kÀrnan, vilket ger möjlighet att skapa laddningsbara nÀtverksoperationstillstÄnd frÄn anvÀndarutrymmet, kontrollera Ätkomst och spÄra systemets funktioner. eBPF ingÄr i Linux-kÀrnan frÄn version 3.18 och gör det möjligt att bearbeta inkommande/utgÄende nÀtverkspaket, omdirigera paket, hantera bandbredd, fÄnga systemanrop, kontrollera Ätkomst och utföra spÄrning. Tack vare anvÀndningen av JIT-kompilering översÀtts bytekoden i realtid till maskininstruktioner och körs med prestanda som kompilerad kod. KÀllkoden för eBPF för Windows Àr öppen under MIT-licensen.
eBPF för Windows kan anvÀndas med redan existerande verktyg för att arbeta med eBPF och erbjuder en standardiserad API som anvÀnds för eBPF-applikationer i Linux. Projektet gör det möjligt att kompilera C-kod till eBPF-bytekod med hjÀlp av den inbyggda eBPF-kompilatorn baserad pÄ Clang och köra redan skapade eBPF-hanterare för Linux ovanpÄ Windows-kÀrnan, vilket ger ett speciellt kompatibilitetslager och stöder det inbyggda API:t Libbpf för kompatibilitet med program som interagerar med eBPF-program. Det erbjuds Àven lager som tillhandahÄller Linux-liknande hookar för XDP (eXpress Data Path) och socket bind, som abstraherar Ätkomst till Windows nÀtverksstack och nÀtverksdrivrutiner. Planerna inkluderar att tillhandahÄlla fullstÀndig kompatibilitet pÄ kÀllkodsnivÄ med typiska eBPF-hanterare för Linux.

En nyckelskillnad i implementationen av eBPF för Windows Àr anvÀndningen av en alternativ verifierare för bytekod, som ursprungligen föreslogs av anstÀllda pÄ VMware och forskare frÄn kanadensiska och israeliska universitet. Verifieraren körs i en separat isolerad process i anvÀndarutrymmet och anvÀnds före utförandet av BPF-program för att identifiera fel och blockera eventuell skadlig aktivitet.
För verifiering i eBPF för Windows anvÀnds en statisk analysmetod baserad pÄ abstrakt tolkning (Abstract Interpretation), som jÀmfört med eBPF-verifieraren för Linux visar en lÀgre nivÄ av falska positiva svar, stödjer cykelanalys och erbjuder god skalbarhet. Metoden tar hÀnsyn till mÄnga typiska utförandemönster, som erhÄllits genom analys av befintliga eBPF-program.
Efter verifiering överförs bytekoden till en tolk som arbetar pĂ„ kĂ€rnnivĂ„, eller passerar genom en JIT-kompilator med efterföljande körning av den resulterande maskinkoden med kĂ€rnrĂ€ttigheter. För isolering av eBPF-handlare pĂ„ kĂ€rnnivĂ„ anvĂ€nds en HVCI-mekanism (HyperVisor-enforced Code Integrity), som anvĂ€nder virtualiseringstekniker för att skydda processer i kĂ€rnan och sĂ€kerstĂ€ller integritetsbekrĂ€ftelse av den utförda koden via digital signatur. En begrĂ€nsning för HVCI Ă€r att endast tolkade eBPF-program kan verifieras och att det inte kan anvĂ€ndas tillsammans med JIT (ett val ges â antingen prestanda eller extra skydd).
KĂ€lla: opennet.ru
