Microsoft падрыхтаваў рэалізацыю eBPF для Windows

Кампанія Microsoft апублікавала рэалізацыю падсістэмы eBPF для Windows, якая дазваляе запускаць адвольныя апрацоўшчыкі, якія працуюць на ўзроўні ядра аперацыйнай сістэмы. eBPF падае ўбудаваны ў ядро ​​інтэрпрэтатар байткода, які дае магчымасць ствараць загружаныя з прасторы карыстача апрацоўшчыкі сеткавых аперацый, кантраляваць доступ і адсочваць працу сістэм. eBPF уключаны ў склад ядра Linux пачынальна з выпуску 3.18 і дазваляе апрацоўваць уваходныя/выходныя сеткавыя пакеты, перанакіроўваць пакеты, кіраваць прапускной здольнасцю, перахапляць сістэмныя выклікі, кантраляваць доступ і ажыццяўляць трасіроўку. Дзякуючы ўжыванню JIT-кампіляцыі, байткод на лёце транслюецца ў машынныя інструкцыі і выконваецца з прадукцыйнасцю скампіляванага кода. Зыходныя тэксты eBPF для Windows адчыненыя пад ліцэнзіяй MIT.

eBPF для Windows можа ўжывацца з ужо існымі прыладамі для працы eBPF і падае тыпавы API, які ўжываецца для eBPF-прыкладанняў у Linux. У тым ліку праект дазваляе кампіляваць напісаны на мове Сі код у байткод eBPF пры дапамозе штатнага кампілятара eBPF на базе Clang і запускаць ужо створаныя для Linux апрацоўшчыкі eBPF па-над ядром Windows, падаючы адмысловую праслойку сумяшчальнасці і падтрымліваючы штатны API Libbpf для сумяшчальнасці з прыкладаннямі. праграмамі eBPF. У тым ліку прапануюцца праслойкі, якія прадстаўляюць Linux-падобныя hook-і для XDP (eXpress Data Path) і socket bind, якія абстрагуюць доступ да сеткавага стэка і сеткавым драйверам Windows. З планаў адзначаецца падаванне паўнавартаснай сумяшчальнасці на ўзроўні зыходных тэкстаў з тыпавымі eBPF-апрацоўшчыкамі Linux.

Microsoft падрыхтаваў рэалізацыю eBPF для Windows

Ключавым адрозненнем рэалізацыі eBPF для Windows з'яўляецца ўжыванне альтэрнатыўнага верыфікатара байткода, першапачаткова прапанаванага супрацоўнікамі кампаніі VMware і даследнікамі з канадскіх і ізраільскіх універсітэтаў. Верыфікатар запускаецца ў асобным ізаляваным працэсе ў прасторы карыстача і ўжываецца перад выкананнем BPF-праграм з мэтай выяўлення памылак і блакаванні магчымай шкоднаснай актыўнасці.

Для праверкі ў eBPF для Windows ужываецца метад статычнага аналізу на аснове абстрактнай інтэрпрэтацыі (Abstract Interpretation), які ў параўнанні з верыфікатарам eBPF для Linux дэманструе ніжэйшы ўзровень ілжывых спрацоўванняў, падтрымлівае аналіз цыклаў і забяспечвае добрую маштабаванасць. Метад улічвае мноства тыпавых шаблонаў выканання, атрыманых на аснове аналізу існых eBPF-праграм.

Пасля верыфікацыі байткод перадаецца ў інтэрпрэтатар, які працуе на ўзроўні ядра, ці прапускаецца праз JIT-кампілятар з наступным выкананнем выніковага машыннага кода з правамі ядра. Для ізаляцыі апрацоўшчыкаў eBPF на ўзроўні ядра ўжываецца механізм HVCI (HyperVisor-enforced Code Integrity), які выкарыстоўвае сродкі віртуалізацыі для абароны працэсаў у ядры і забяспечвае пацверджанне цэласнасці выкананага кода па лічбавым подпісе. Абмежаваннем HVCI з'яўляецца магчымасць верыфікацыі толькі інтэрпрэтаваных eBPF-праграм і немагчымасць выкарыстання сумесна з JIT (прадстаўляецца выбар – альбо прадукцыйнасць, альбо дадатковая абарона).

Крыніца: opennet.ru

Дадаць каментар