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

Додати коментар або відгук