Microsoft опублікувала реалізацію підсистеми eBPF для Windows
Microsoft опублікувала реалізацію підсистеми eBPF для Windows, що дозволяє запускати довільні обробники, які працюють на рівні ядра операційної системи. eBPF надає вбудований в ядро інтерпретатор байт-коду, який дозволяє створювати обробники мережевих операцій, що використовуються користувачами, контролювати доступ і контролювати продуктивність системи. eBPF включений в ядро Linux з моменту випуску 3.18 і дозволяє обробляти вхідні/вихідні мережеві пакети, перенаправляти пакети, управляти пропускною здатністю, перехоплювати системні виклики, контролювати доступ і виконувати трасування. Завдяки використанню компіляції just-in-time (JIT) байт-код на льоту перекладається в машинні інструкції і виконується з виконанням скомпільованого коду. Вихідний код eBPF для Windows відкритий під ліцензією MIT.
eBPF для Windows може використовуватися з існуючими інструментами для роботи з eBPF і надає типовий API, який використовується для додатків eBPF на Linux. Зокрема, проект дозволяє компілювати код, написаний на мові C, в байт-код eBPF за допомогою стандартного компілятора eBPF на базі Clang і запускати вже створений для Linux обробників eBPF поверх ядра Windows, забезпечуючи спеціальний рівень сумісності і підтримуючи рідний Libbpf API для сумісності з додатками, що взаємодіють з програмами eBPF. Сюди входять Linux-подібні hook-and-XDP (eXpress Data Path) і шари зв'язування сокетів, які абстрагують доступ до мережевого стека і мережевих драйверів Windows. З планів відзначається забезпечення повної сумісності на вихідному рівні з типовими обробниками Linux eBPF.
Ключовою відмінністю реалізації eBPF для Windows є використання альтернативного верифікатора байт-коду , спочатку запропонованого співробітниками VMware і дослідниками з канадських та ізраїльських університетів. Верифікатор запускається в окремому ізольованому процесі в призначеному для користувача просторі і використовується до виконання програм BPF з метою виявлення помилок і блокування можливої шкідливої активності.
EBPF для Windows використовує абстрактну інтерпретацію, яка в порівнянні з верифікатором Linux eBPF показує більш низький рівень помилкових спрацьовувань, підтримує аналіз циклу і забезпечує хорошу масштабованість. Метод враховує безліч типових шаблонів виконання, отриманих на основі аналізу існуючих програм eBPF.
Після перевірки байт-код передається інтерпретатору рівня ядра або передається через JIT-компілятор з подальшим виконанням отриманого машинного коду з правами ядра. Ізоляція на рівні ядра обробників eBPF використовує механізм цілісності коду (HVCI), що застосовується HyperVisor, який використовує інструменти віртуалізації для захисту процесів в ядрі і забезпечує підтвердження цифровим підписом цілісності виконуваного коду. Обмеженням HVCI є можливість перевірки тільки інтерпретованих програм eBPF і неможливість використання спільно з JIT (надається вибір - або продуктивність, або додатковий захист).
eBPF - відома технологія для забезпечення програмованості та гнучкості, особливо для розширення ядра ОС, для таких випадків використання, як захист DoS та спостережуваність. Цей проект є незавершеним процесом, який дозволяє використовувати існуючі ланцюжки інструментів eBPF та API, знайомі в екосистемі Linux, для використання поверх Windows. Тобто цей проект приймає існуючі проекти eBPF як підмодулі та додає шар між ними, щоб вони працювали поверх Windows.