ΠΠΎΠΌΠΏΠ°Π½ΠΈΡ Microsoft ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° eBPF Π·Π° Windows, ΠΊΠΎΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ, ΡΠ°Π±ΠΎΡΠ΅ΡΠΈ Π½Π° Π½ΠΈΠ²ΠΎ ΡΠ΄ΡΠΎΡΠΎ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ°. eBPF ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ Π²Π³ΡΠ°Π΄Π΅Π½ Π² ΡΠ΄ΡΠΎΡΠΎ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ Π½Π° Π±Π°ΠΉΡΠΊΠΎΠ΄, ΠΊΠΎΠΉΡΠΎ Π΄Π°Π²Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, Π·Π°ΡΠ΅ΠΆΠ΄Π°ΡΠΈ ΡΠ΅ ΠΎΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΎΡΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ, ΠΊΠΎΠ½ΡΡΠΎΠ» Π½Π° Π΄ΠΎΡΡΡΠΏΠ° ΠΈ ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ Π½Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π½Π° ΡΠΈΡΡΠ΅ΠΌΠΈΡΠ΅. eBPF Π΅ Π²ΠΊΠ»ΡΡΠ΅Π½ Π² ΡΠ΄ΡΠΎΡΠΎ Π½Π° Linux ΠΎΡ Π²Π΅ΡΡΠΈΡ 3.18 ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π²Ρ ΠΎΠ΄ΡΡΠΈ/ΠΈΠ·Ρ ΠΎΠ΄ΡΡΠΈ ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΈ, ΠΏΡΠ΅Π½Π°ΡΠΎΡΠ²Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ, ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠΎΠΏΡΡΠΊΠ°ΡΠ΅Π»Π½Π°ΡΠ° ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ, ΠΏΡΠΈΡ Π²Π°ΡΠ°Π½Π΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈ ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½ΠΈΡ, ΠΊΠΎΠ½ΡΡΠΎΠ» Π½Π° Π΄ΠΎΡΡΡΠΏΠ° ΠΈ ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅. Π§ΡΠ΅Π· ΠΏΡΠΈΠ»Π°Π³Π°Π½Π΅ Π½Π° JIT ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ, Π±Π°ΠΉΡΠΊΠΎΠ΄ΡΡ Π½Π° ΠΆΠΈΠ²ΠΎ ΡΠ΅ ΡΡΠ°Π½ΡΠ»ΠΈΡΠ° Π² ΠΌΠ°ΡΠΈΠ½Π½ΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΈ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½ ΠΊΠΎΠ΄. ΠΠ·Ρ ΠΎΠ΄Π½ΠΈΡΠ΅ ΡΠ΅ΠΊΡΡΠΎΠ²Π΅ Π½Π° eBPF Π·Π° Windows ΡΠ° ΠΎΡΠ²ΠΎΡΠ΅Π½ΠΈ ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·ΠΈΡ MIT.
eBPF Π·Π° Windows ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Ρ Π²Π΅ΡΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΡΠΈΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ Π·Π° ΡΠ°Π±ΠΎΡΠ° Ρ eBPF ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ΅Π½ API, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ Π·Π° eBPF ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² Linux. ΠΡΠΎΠ΅ΠΊΡΡΡ ΠΏΡΠ΅Π΄Π»Π°Π³Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠ΄ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° Π‘ΠΈ Π² Π±Π°ΠΉΡΠΊΠΎΠ΄ Π½Π° eBPF Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ΅Π½ eBPF ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡ, Π±Π°Π·ΠΈΡΠ°Π½ Π½Π° Clang, ΠΈ Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° Π²Π΅ΡΠ΅ ΡΡΠ·Π΄Π°Π΄Π΅Π½ΠΈ eBPF ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ Π·Π° Linux Π²ΡΡΡ Ρ ΡΠ΄ΡΠΎΡΠΎ Π½Π° Windows, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΠΉΠΊΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»Π΅Π½ ΡΠ»ΠΎΠΉ ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡ ΠΈ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°ΠΉΠΊΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΈΡ API Libbpf Π·Π° ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡ Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΠ²Π°ΡΠΈ Ρ eBPF ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ. ΠΠΊΠ»ΡΡΠ΅Π½ΠΈ ΡΠ° ΠΈ ΡΠ»ΠΎΠ΅Π²Π΅, ΠΎΡΠΈΠ³ΡΡΡΠ²Π°ΡΠΈ Linux-ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ hook-ΠΎΠ²Π΅ Π·Π° XDP (eXpress Data Path) ΠΈ socket bind, Π°Π±ΡΡΡΠ°Ρ ΠΈΡΠ°ΡΠΈ Π΄ΠΎΡΡΡΠΏΠ° Π΄ΠΎ ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈΡ ΡΡΠ΅ΠΊ ΠΈ ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈΡΠ΅ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠΈ Π½Π° Windows. ΠΡ ΠΏΠ»Π°Π½ΠΎΠ²Π΅ΡΠ΅ Π΅ ΠΎΡΠ±Π΅Π»ΡΠ·Π°Π½Π° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΠ½Π΅ΡΠΎ Π½Π° ΠΏΡΠ»Π½Π° ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡ Π½Π° Π½ΠΈΠ²ΠΎ ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈ ΡΠ΅ΠΊΡΡΠΎΠ²Π΅ Ρ ΡΠΈΠΏΠΈΡΠ½ΠΈ eBPF ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ Π½Π° Linux.

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