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 для совмСстимости c прилоТСниями, Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ 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