Microsoft ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²ΠΈ внСдряванС Π½Π° eBPF Π·Π° Windows

Microsoft ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π° рСализация Π½Π° подсистСмата eBPF Π·Π° Windows, която Π²ΠΈ позволява Π΄Π° ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΈ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»Π°Ρ‚ΠΎΡ€ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ работят Π½Π° Π½ΠΈΠ²ΠΎ ядро ​​на ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ‚Π° систСма. eBPF прСдоставя ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Π½Π° Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄, Π²Π³Ρ€Π°Π΄Π΅Π½ Π² ядрото, ΠΊΠΎΠΉΡ‚ΠΎ Π²ΠΈ позволява Π΄Π° ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚Π΅ Π·Π°Ρ€Π΅ΠΆΠ΄Π°Ρ‰ΠΈ сС Π² потрСбитСлското пространство ΠΌΠ°Π½ΠΈΠΏΡƒΠ»Π°Ρ‚ΠΎΡ€ΠΈ Π½Π° ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ» Π½Π° Π΄ΠΎΡΡ‚ΡŠΠΏΠ° ΠΈ систСми Π·Π° наблюдСниС. eBPF Π΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ Π² ядрото Π½Π° Linux ΠΎΡ‚ вСрсия 3.18 ΠΈ Π²ΠΈ позволява Π΄Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π°Ρ‚Π΅ входящи/изходящи ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ, Π΄Π° ΠΏΡ€Π΅ΠΏΡ€Π°Ρ‰Π°Ρ‚Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ, Π΄Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π°Ρ‚Π΅ чСстотната Π»Π΅Π½Ρ‚Π°, Π΄Π° ΠΏΡ€ΠΈΡ…Π²Π°Ρ‰Π°Ρ‚Π΅ систСмни повиквания, Π΄Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π°Ρ‚Π΅ Π΄ΠΎΡΡ‚ΡŠΠΏΠ° ΠΈ Π΄Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Ρ‚Π΅ прослСдяванС. Π‘Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° JIT компилация, Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄ΡŠΡ‚ сС ΠΏΡ€Π΅Π²Π΅ΠΆΠ΄Π° Π² машинни инструкции Π² Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΈ сС изпълнява с ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½ ΠΊΠΎΠ΄. Π˜Π·Ρ…ΠΎΠ΄Π½ΠΈΡΡ‚ ΠΊΠΎΠ΄ Π·Π° eBPF Π·Π° Windows Π΅ с ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄ ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·Π° Π½Π° MIT.

eBPF Π·Π° Windows ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° със ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈ eBPF инструмСнти ΠΈ прСдоставя ΠΎΠ±Ρ‰ API, ΠΊΠΎΠΉΡ‚ΠΎ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° Linux eBPF прилоТСния. НарСд с Π΄Ρ€ΡƒΠ³ΠΈ Π½Π΅Ρ‰Π°, ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ позволява ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄, написан Π½Π° C, Π² eBPF Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ обикновСния Π±Π°Π·ΠΈΡ€Π°Π½ Π½Π° Clang eBPF ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ ΠΈ изпълнявайки eBPF ΠΌΠ°Π½ΠΈΠΏΡƒΠ»Π°Ρ‚ΠΎΡ€ΠΈ, Π²Π΅Ρ‡Π΅ създадСни Π·Π° Linux Π²ΡŠΡ€Ρ…Ρƒ ядрото Π½Π° Windows, осигурявайки спСциалСн слой Π·Π° ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ ΠΈ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°ΠΉΠΊΠΈ стандартния Libbpf API Π·Π° ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ с прилоТСния, ΠΊΠΎΠΈΡ‚ΠΎ взаимодСйстват с eBPF ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ. Π’ΠΎΠ²Π° Π²ΠΊΠ»ΡŽΡ‡Π²Π° слоСвС, ΠΊΠΎΠΈΡ‚ΠΎ прСдоставят ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ Π½Π° Linux ΠΊΡƒΠΊΠΈΡ‡ΠΊΠΈ Π·Π° XDP (eXpress Data Path) ΠΈ ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ Π½Π° сокСт, абстрахиранС Π½Π° Π΄ΠΎΡΡ‚ΡŠΠΏΠ° Π΄ΠΎ мрСТовия стСк ΠΈ ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΈ Π½Π° Windows. ΠžΡ‚ ΠΏΠ»Π°Π½ΠΎΠ²Π΅Ρ‚Π΅ сС отбСлязва прСдоставянСто Π½Π° пълна ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ Π½Π° Π½ΠΈΠ²ΠΎ ΠΈΠ·Ρ…ΠΎΠ΄Π΅Π½ ΠΊΠΎΠ΄ с Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΈΡ‚Π΅ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»Π°Ρ‚ΠΎΡ€ΠΈ Π½Π° Linux eBPF.

Microsoft ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²ΠΈ внСдряванС Π½Π° eBPF Π·Π° Windows

ΠšΠ»ΡŽΡ‡ΠΎΠ²Π°Ρ‚Π° Ρ€Π°Π·Π»ΠΈΠΊΠ° Π² внСдряванСто Π½Π° eBPF Π·Π° Windows Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π΅Π½ Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π½Π° Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄, ΠΏΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½ΠΎ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ ΠΎΡ‚ слуТитСли Π½Π° VMware ΠΈ изслСдоватСли ΠΎΡ‚ канадски ΠΈ израСлски унивСрситСти. Π’Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΡŠΡ‚ Ρ€Π°Π±ΠΎΡ‚ΠΈ Π² ΠΎΡ‚Π΄Π΅Π»Π΅Π½ ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°Π½ процСс Π² потрСбитСлското пространство ΠΈ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΡ€Π΅Π΄ΠΈ ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° BPF ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ, Π·Π° Π΄Π° ΠΎΡ‚ΠΊΡ€ΠΈΠ΅ Π³Ρ€Π΅ΡˆΠΊΠΈ ΠΈ Π΄Π° Π±Π»ΠΎΠΊΠΈΡ€Π° възмоТна Π·Π»ΠΎΠ½Π°ΠΌΠ΅Ρ€Π΅Π½Π° дСйност.

eBPF Π·Π° Windows ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ Π·Π° статичСн Π°Π½Π°Π»ΠΈΠ·, Π±Π°Π·ΠΈΡ€Π°Π½ Π½Π° абстрактна интСрпрСтация Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°, ΠΊΠΎΠΉΡ‚ΠΎ Π² сравнСниС с Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° eBPF Π·Π° Linux ΠΈΠΌΠ° ΠΏΠΎ-нисък ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ Ρ„Π°Π»ΡˆΠΈΠ²ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»Π½ΠΈ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ, ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° Ρ†ΠΈΠΊΠ»ΠΈΡ‡Π΅Π½ Π°Π½Π°Π»ΠΈΠ· ΠΈ осигурява Π΄ΠΎΠ±Ρ€Π° скалируСмост. ΠœΠ΅Ρ‚ΠΎΠ΄ΡŠΡ‚ Π²Π·Π΅ΠΌΠ° ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ ΠΌΠ½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π½Π° изпълнСниС, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈ ΠΎΡ‚ Π°Π½Π°Π»ΠΈΠ·Π° Π½Π° ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈ eBPF ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ.

Π‘Π»Π΅Π΄ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄ΡŠΡ‚ сС ΠΏΡ€Π΅Π΄Π°Π²Π° Π½Π° ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Π½Π° Π½ΠΈΠ²ΠΎ ядро ​​или сС ΠΏΡ€Π΅Π΄Π°Π²Π° ΠΏΡ€Π΅Π· JIT ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€, послСдвано ΠΎΡ‚ изпълнСниС Π½Π° получСния машинСн ΠΊΠΎΠ΄ с ΠΏΡ€Π°Π²Π° Π½Π° ядрото. Π—Π° ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΌΠ°Π½ΠΈΠΏΡƒΠ»Π°Ρ‚ΠΎΡ€ΠΈ Π½Π° eBPF Π½Π° Π½ΠΈΠ²ΠΎ ядро ​​сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡŠΡ‚ HVCI (HyperVisor-enforced Code Integrity), ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° инструмСнти Π·Π° виртуализация Π·Π° Π·Π°Ρ‰ΠΈΡ‚Π° Π½Π° процСситС Π² ядрото ΠΈ осигурява ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° цСлостта Π½Π° ΠΊΠΎΠ΄Π°, ΠΊΠΎΠΉΡ‚ΠΎ сС изпълнява Ρ‡Ρ€Π΅Π· Ρ†ΠΈΡ„Ρ€ΠΎΠ² подпис. ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° HVCI Π΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π΄Π° сС провСряват само ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€Π°Π½ΠΈ eBPF ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ ΠΈ Π½Π΅Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π°Π΅Π΄Π½ΠΎ с JIT (осигурСн Π΅ ΠΈΠ·Π±ΠΎΡ€ - ΠΈΠ»ΠΈ производитСлност, ΠΈΠ»ΠΈ Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½Π° Π·Π°Ρ‰ΠΈΡ‚Π°).

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€