Microsoft on julkaissut toteutuksen eBPF-alijärjestelmästä Windowsille, jonka avulla voit käynnistää mielivaltaisia käsittelijöitä, jotka toimivat käyttöjärjestelmän ydintasolla. eBPF tarjoaa ytimeen sisäänrakennetun tavukooditulkin, jonka avulla voidaan luoda käyttäjätilasta ladattavia verkkotoimintojen käsittelijöitä, hallita pääsyä ja valvoa järjestelmien toimintaa. eBPF on sisällytetty Linux-ytimeen julkaisusta 3.18 lähtien ja sen avulla voit käsitellä saapuvia/lähteviä verkkopaketteja, pakettien edelleenlähetystä, kaistanleveyden hallintaa, järjestelmäpuhelujen sieppausta, kulunvalvontaa ja jäljitystä. JIT-käännöksen käytön ansiosta tavukoodi käännetään lennossa konekäskyiksi ja suoritetaan käännetyn koodin suorituskyvyllä. eBPF for Windows on avoimen lähdekoodin MIT-lisenssillä.
eBPF for Windows -sovellusta voidaan käyttää olemassa olevien eBPF-työkalujen kanssa, ja se tarjoaa yleisen sovellusliittymän, jota käytetään eBPF-sovelluksiin Linuxissa. Projektin avulla voidaan muun muassa kääntää C-kielellä kirjoitettua koodia eBPF-tavukoodiksi käyttämällä tavallista Clang-pohjaista eBPF-kääntäjää ja ajaa Windows-ytimen päällä Linuxille jo luotuja eBPF-käsittelijöitä, jotka tarjoavat erityisen yhteensopivuuskerroksen ja tukevat standardia Libbpf. API yhteensopivuus sovellusten kanssa, jotka ovat vuorovaikutuksessa eBPF-ohjelmien kanssa. Tämä sisältää kerrokset, jotka tarjoavat Linuxin kaltaisia koukkuja XDP:lle (eXpress Data Path) ja socket bindille, poistaen pääsyn verkkopinoon ja Windows-verkkoajureihin. Suunnitelmiin kuuluu täyden lähdekooditason yhteensopivuus tavallisten Linux eBPF -suorittimien kanssa.
Keskeinen ero Windowsin eBPF-toteutuksen välillä on vaihtoehtoisen tavukoodin varmentajan käyttö, jota alun perin ehdottivat VMwaren työntekijät ja tutkijat Kanadan ja Israelin yliopistoista. Todentaja toimii erillisessä, eristetyssä prosessissa käyttäjätilassa, ja sitä käytetään ennen BPF-ohjelmien suorittamista virheiden tunnistamiseen ja mahdollisen haitallisen toiminnan estämiseen.
eBPF for Windows käyttää varmentamiseen abstraktiin tulkintaan perustuvaa staattista analyysimenetelmää, joka verrattuna Linuxin eBPF-todentajaan osoittaa alhaisemman väärien positiivisten osuuden, tukee silmukkaanalyysiä ja tarjoaa hyvän skaalautuvuuden. Menetelmä ottaa huomioon monia tyypillisiä suoritusmalleja, jotka on saatu olemassa olevien eBPF-ohjelmien analysoinnista.
Tarkistuksen jälkeen tavukoodi siirretään ytimen tasolla toimivaan tulkkiin tai JIT-kääntäjän läpi, minkä jälkeen tuloksena oleva konekoodi suoritetaan ytimen oikeuksilla. eBPF-käsittelijöiden eristämiseen ytimen tasolla käytetään HVCI-mekanismia (HyperVisor-enforced Code Integrity), joka käyttää virtualisointityökaluja ytimessä olevien prosessien suojaamiseen ja varmistaa suorittavan koodin eheyden digitaalisella allekirjoituksella. HVCI:n rajoitus on, että se voi tarkistaa vain tulkitut eBPF-ohjelmat, eikä sitä voida käyttää yhdessä JIT:n kanssa (voit valita joko suorituskyvyn tai lisäsuojauksen).
Lähde: opennet.ru