Представлен Microsoft недавно через сообщение реализация подсистемы eBPF для Windows который позволяет запускать произвольные драйверы, работающие на уровне ядра операционной системы.
eGMP предоставляет встроенный интерпретатор байт-кода в ядре для создания загружаемых пользователем сетевых драйверов, контроля доступа и системного мониторинга. eBPF был включен в ядро Linux с версии 3.18 и позволяет обрабатывать входящие / исходящие сетевые пакеты, пересылать пакеты, управлять полосой пропускания, перехватывать системные вызовы, контролировать доступ и отслеживать.
Посредством JIT-компиляции байтовый код транслируется в машинные инструкции на лету и выполняется с производительностью скомпилированного кода. EBPF для Windows имеет открытый исходный код по лицензии MIT.
Сегодня мы рады объявить о новом проекте с открытым исходным кодом от Microsoft, чтобы заставить eBPF работать в Windows 10 и Windows Server 2016 и более поздних версиях. Проект ebpf-for-windows нацелен на то, чтобы дать разработчикам возможность использовать знакомые наборы инструментов eBPF и интерфейсы прикладного программирования (API) поверх существующих версий Windows. Основываясь на работе других, этот проект берет несколько существующих проектов eBPF с открытым исходным кодом и добавляет «клей», чтобы заставить их работать в Windows.
eBPF для Windows может использоваться с существующими инструментами eBPF и предоставляет общий API, который используется для приложений eBPF в Linux.
В частности, проект позволяет компилировать код, написанный на C, в байт-код eBPF с использованием стандартного компилятора eBPF на основе Clang и запустить драйверы eBPF, уже созданные для Linux, поверх ядра Windows, который обеспечивает специальный уровень совместимости и поддерживает стандартный API Libbpf для совместимости с приложениями, которые взаимодействуют с программами eBPF.
Это включает в себя промежуточные уровни, которые предоставляют Linux-подобные привязки для XDP (eXpress Data Path) и привязки сокетов, которые обобщают доступ к сетевому стеку Windows и сетевым драйверам. Планы направлены на обеспечение полной поддержки на уровне исходного кода общих драйверов Linux eBPF.
Ключевым отличием в реализации eBPF для Windows является использование альтернативного средства проверки байт-кода, первоначально предложенного сотрудниками VMware и исследователями из канадских и израильских университетов.
Верификатор запускается в отдельном изолированном процессе в пространстве пользователя и используется до выполнения программ BPF для обнаружения ошибок и блокирования потенциально вредоносной активности.
Для проверки, eBPF для Windows использует метод статического анализа абстрактной интерпретации., какие, По сравнению с верификатором eBPF для Linux, он демонстрирует меньшую частоту ложных срабатываний., поддерживает анализ петель и обеспечивает хорошую масштабируемость. Этот метод учитывает многие типичные шаблоны производительности, полученные в результате анализа существующих программ eBPF.
eBPF - это хорошо известная, но революционная технология, обеспечивающая программируемость, расширяемость и гибкость. eBPF применялся для таких случаев использования, как отказ в обслуживании и возможность наблюдения.
Со временем вокруг eBPF сформировалась значительная экосистема инструментов, продуктов и опыта. Хотя поддержка eBPF была впервые реализована в ядре Linux, растет интерес к разрешению использования eBPF в других операционных системах, а также к расширению демонов и сервисов пользовательского режима в дополнение к ядру.
После проверки байт-код передается интерпретатору уровня ядра, или он передается через JIT-компилятор с последующим запуском полученного машинного кода с правами ядра. Для изоляции драйверов eBPF на уровне ядра используется механизм HVCI (HyperVisor Enhanced Code Integrity), который использует инструменты виртуализации для защиты процессов в ядре и гарантирует, что целостность исполняемого кода имеет цифровую подпись.
Одним из ограничений HVCI является возможность проверки только интерпретируемых программ eBPF и невозможность их использования вместе с JIT (у вас есть выбор: дополнительная производительность или защита).
В конце концов если вам интересно узнать об этом больше, вы можете проконсультироваться по следующей ссылке.