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.
ΠΠ»ΡΡΠΎΠ²Π°ΡΠ° ΡΠ°Π·Π»ΠΈΠΊΠ° Π² Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° eBPF Π·Π° Windows Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Π°Π»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π΅Π½ Π²Π΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π½Π° Π±Π°ΠΉΡ ΠΊΠΎΠ΄, ΠΏΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½ΠΎ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ ΠΎΡ ΡΠ»ΡΠΆΠΈΡΠ΅Π»ΠΈ Π½Π° VMware ΠΈ ΠΈΠ·ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΠΎΡ ΠΊΠ°Π½Π°Π΄ΡΠΊΠΈ ΠΈ ΠΈΠ·ΡΠ°Π΅Π»ΡΠΊΠΈ ΡΠ½ΠΈΠ²Π΅ΡΡΠΈΡΠ΅ΡΠΈ. ΠΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡΡ ΡΠ°Π±ΠΎΡΠΈ Π² ΠΎΡΠ΄Π΅Π»Π΅Π½ ΠΈΠ·ΠΎΠ»ΠΈΡΠ°Π½ ΠΏΡΠΎΡΠ΅Ρ Π² ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΎΡΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΡΠ΅Π΄ΠΈ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° BPF ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ, Π·Π° Π΄Π° ΠΎΡΠΊΡΠΈΠ΅ Π³ΡΠ΅ΡΠΊΠΈ ΠΈ Π΄Π° Π±Π»ΠΎΠΊΠΈΡΠ° Π²ΡΠ·ΠΌΠΎΠΆΠ½Π° Π·Π»ΠΎΠ½Π°ΠΌΠ΅ΡΠ΅Π½Π° Π΄Π΅ΠΉΠ½ΠΎΡΡ.
eBPF Π·Π° Windows ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΌΠ΅ΡΠΎΠ΄ Π·Π° ΡΡΠ°ΡΠΈΡΠ΅Π½ Π°Π½Π°Π»ΠΈΠ·, Π±Π°Π·ΠΈΡΠ°Π½ Π½Π° Π°Π±ΡΡΡΠ°ΠΊΡΠ½Π° ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΈΡ Π·Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°, ΠΊΠΎΠΉΡΠΎ Π² ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Ρ Π²Π΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° eBPF Π·Π° Linux ΠΈΠΌΠ° ΠΏΠΎ-Π½ΠΈΡΡΠΊ ΠΏΡΠΎΡΠ΅Π½Ρ ΡΠ°Π»ΡΠΈΠ²ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»Π½ΠΈ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ, ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° ΡΠΈΠΊΠ»ΠΈΡΠ΅Π½ Π°Π½Π°Π»ΠΈΠ· ΠΈ ΠΎΡΠΈΠ³ΡΡΡΠ²Π° Π΄ΠΎΠ±ΡΠ° ΡΠΊΠ°Π»ΠΈΡΡΠ΅ΠΌΠΎΡΡ. ΠΠ΅ΡΠΎΠ΄ΡΡ Π²Π·Π΅ΠΌΠ° ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΈΠΏΠΈΡΠ½ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅, ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈ ΠΎΡ Π°Π½Π°Π»ΠΈΠ·Π° Π½Π° ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΡΠΈ eBPF ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ.
Π‘Π»Π΅Π΄ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π±Π°ΠΉΡ ΠΊΠΎΠ΄ΡΡ ΡΠ΅ ΠΏΡΠ΅Π΄Π°Π²Π° Π½Π° ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ Π½Π° Π½ΠΈΠ²ΠΎ ΡΠ΄ΡΠΎ ββΠΈΠ»ΠΈ ΡΠ΅ ΠΏΡΠ΅Π΄Π°Π²Π° ΠΏΡΠ΅Π· JIT ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡ, ΠΏΠΎΡΠ»Π΅Π΄Π²Π°Π½ΠΎ ΠΎΡ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΌΠ°ΡΠΈΠ½Π΅Π½ ΠΊΠΎΠ΄ Ρ ΠΏΡΠ°Π²Π° Π½Π° ΡΠ΄ΡΠΎΡΠΎ. ΠΠ° ΠΈΠ·ΠΎΠ»ΠΈΡΠ°Π½Π΅ Π½Π° ΠΌΠ°Π½ΠΈΠΏΡΠ»Π°ΡΠΎΡΠΈ Π½Π° eBPF Π½Π° Π½ΠΈΠ²ΠΎ ΡΠ΄ΡΠΎ ββΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌΡΡ HVCI (HyperVisor-enforced Code Integrity), ΠΊΠΎΠΉΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ Π·Π° Π²ΠΈΡΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π·Π° Π·Π°ΡΠΈΡΠ° Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΈΡΠ΅ Π² ΡΠ΄ΡΠΎΡΠΎ ΠΈ ΠΎΡΠΈΠ³ΡΡΡΠ²Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΡΠ΅Π»ΠΎΡΡΡΠ° Π½Π° ΠΊΠΎΠ΄Π°, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° ΡΡΠ΅Π· ΡΠΈΡΡΠΎΠ² ΠΏΠΎΠ΄ΠΏΠΈΡ. ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π° HVCI Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π΄Π° ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π°Ρ ΡΠ°ΠΌΠΎ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΠ°Π½ΠΈ eBPF ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ ΠΈ Π½Π΅Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π°Π΅Π΄Π½ΠΎ Ρ JIT (ΠΎΡΠΈΠ³ΡΡΠ΅Π½ Π΅ ΠΈΠ·Π±ΠΎΡ - ΠΈΠ»ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ, ΠΈΠ»ΠΈ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½Π° Π·Π°ΡΠΈΡΠ°).
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru