Microsoft подготви имплементация на eBPF за Windows

Компания Microsoft публикува реализация на подсистемата eBPF за Windows, която позволява изпълнението на произволни обработчици, работещи на ниво ядрото на операционната система. eBPF предоставя вграден в ядрото интерпретатор на байткод, който дава възможност за създаване на обработчици на мрежови операции, зареждащи се от потребителското пространство, контрол на достъпа и проследяване на работата на системите. eBPF е включен в ядрото на Linux от версия 3.18 и позволява обработка на входящи/изходящи мрежови пакети, пренасочване на пакети, управление на пропускателната способност, прихващане на системни повиквания, контрол на достъпа и проследяване. Чрез прилагане на JIT компилация, байткодът на живо се транслира в машинни инструкции и се изпълнява с производителността на скомпилиран код. Изходните текстове на eBPF за Windows са отворени под лицензия MIT.

eBPF за Windows може да се използва с вече съществуващите инструменти за работа с eBPF и предоставя стандартен API, използван за eBPF приложения в Linux. Проектът предлага възможност за компилиране на код написан на Си в байткод на eBPF с помощта на стандартен eBPF компилатор, базиран на Clang, и за изпълнение на вече създадени eBPF обработчици за Linux върху ядрото на 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

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster