Microsoft przygotował implementację eBPF dla systemu Windows

Firma Microsoft opublikowała implementację podsystemu eBPF dla systemu Windows, która umożliwia uruchamianie dowolnych procedur obsługi działających na poziomie jądra systemu operacyjnego. eBPF udostępnia wbudowany w jądro interpreter kodu bajtowego, który umożliwia tworzenie procedur obsługi operacji sieciowych ładowanych z przestrzeni użytkownika, kontrolę dostępu i monitorowanie działania systemów. eBPF jest zawarty w jądrze Linuksa od wersji 3.18 i umożliwia obsługę przychodzących/wychodzących pakietów sieciowych, przekazywanie pakietów, zarządzanie przepustowością, przechwytywanie wywołań systemowych, kontrolę dostępu i śledzenie. Dzięki zastosowaniu kompilacji JIT kod bajtowy jest na bieżąco tłumaczony na instrukcje maszynowe i wykonywany z wydajnością skompilowanego kodu. eBPF dla Windows jest oprogramowaniem typu open source na licencji MIT.

eBPF dla Windows może być używany z istniejącymi narzędziami eBPF i zapewnia ogólny interfejs API używany dla aplikacji eBPF w systemie Linux. Projekt umożliwia między innymi kompilację kodu napisanego w języku C do kodu bajtowego eBPF przy użyciu standardowego kompilatora eBPF opartego na Clang i uruchamianie programów obsługi eBPF już stworzonych dla systemu Linux na jądrze systemu Windows, zapewniając specjalną warstwę kompatybilności i obsługującą standard Libbpf API zapewniające kompatybilność z aplikacjami współpracującymi z programami eBPF. Obejmuje to warstwy, które zapewniają podobne do Linuksa zaczepy dla XDP (eXpress Data Path) i wiązanie gniazd, abstrahując dostęp do stosu sieciowego i sterowników sieciowych Windows. Plany obejmują zapewnienie pełnej zgodności na poziomie kodu źródłowego ze standardowymi procesorami Linux eBPF.

Microsoft przygotował implementację eBPF dla systemu Windows

Kluczową różnicą pomiędzy implementacją eBPF dla Windows jest zastosowanie alternatywnego weryfikatora kodu bajtowego, pierwotnie zaproponowanego przez pracowników VMware oraz badaczy z kanadyjskich i izraelskich uniwersytetów. Weryfikator działa w oddzielnym, izolowanym procesie w przestrzeni użytkownika i służy przed wykonaniem programów BPF do identyfikacji błędów i blokowania ewentualnej szkodliwej aktywności.

Do weryfikacji eBPF dla Windows wykorzystuje metodę analizy statycznej opartą na interpretacji abstrakcyjnej, która w porównaniu z weryfikatorem eBPF dla systemu Linux wykazuje niższy współczynnik fałszywych alarmów, obsługuje analizę pętli i zapewnia dobrą skalowalność. Metoda uwzględnia wiele typowych wzorców wykonania uzyskanych z analizy istniejących programów eBPF.

Po weryfikacji kod bajtowy jest przesyłany do interpretera działającego na poziomie jądra lub przepuszczany przez kompilator JIT, a następnie wykonywany jest powstały kod maszynowy z uprawnieniami jądra. Do izolowania handlerów eBPF na poziomie jądra wykorzystywany jest mechanizm HVCI (HyperVisor-enforced Code Integrity), który wykorzystuje narzędzia wirtualizacyjne do ochrony procesów w jądrze i zapewnia potwierdzenie integralności wykonywanego kodu za pomocą podpisu cyfrowego. Ograniczeniem HVCI jest to, że może on weryfikować jedynie zinterpretowane programy eBPF i nie może być używany w połączeniu z JIT (masz do wyboru wydajność lub dodatkowe zabezpieczenia).

Źródło: opennet.ru

Dodaj komentarz