Mozilla Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ изоляции Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ RLBox

Π˜ΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΈΠ· БтСндфордского унивСрситСта, ΠšΠ°Π»ΠΈΡ„ΠΎΡ€Π½ΠΈΠΉΡΠΊΠΎΠ³ΠΎ унивСрситСта Π² Π‘Π°Π½-Π”ΠΈΠ΅Π³ΠΎ ΠΈ ВСхасского унивСрситСта Π² ΠžΡΡ‚ΠΈΠ½Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ инструмСнтарий RLBox, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΊΠ°ΠΊ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ изоляции для блокирования уязвимостСй Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. RLBox Π½Π°Ρ†Π΅Π»Π΅Π½ Π½Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒΡŽ Π½Π΅Π·Π°ΡΠ»ΡƒΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… довСрия сторонних Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΏΠΎΠ΄ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ, Π½ΠΎ уязвимости Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΊΠΎΠΌΠΏΡ€ΠΎΠΌΠ΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ основной ΠΏΡ€ΠΎΠ΅ΠΊΡ‚.

Компания Mozilla ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅Ρ‚ Π·Π°Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ RLBox Π² Linux-сборках Firefox 74 ΠΈ macOS-сборках Firefox 75 для изоляции выполнСния Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Graphite, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰Π΅ΠΉ Π·Π° отрисовку ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ². ΠŸΡ€ΠΈ этом RLBox Π½Π΅ спСцифичСн для Firefox ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ для изоляции Π»ΡŽΠ±Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ…. Наработки RLBox Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡŽΡ‚ΡΡ ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ MIT. Π’ настоящСС врСмя RLBox ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ… Linux ΠΈ macOS, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Windows оТидаСтся ΠΏΠΎΠ·Π΄Π½Π΅Π΅.

ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ RLBox сводится ΠΊ компиляции C/C++ ΠΊΠΎΠ΄Π° ΠΈΠ·ΠΎΠ»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π² Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΉ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ WebAssembly, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Ρ‚Π΅ΠΌ оформляСтся Π² Π²ΠΈΠ΄Π΅ WebAssembly-модуля, полномочия ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π·Π°Π΄Π°ΡŽΡ‚ΡΡ Π² привязкС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ этому ΠΌΠΎΠ΄ΡƒΠ»ΡŽ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ строк Π½Π΅ смоТСт ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ сСтСвой сокСт ΠΈΠ»ΠΈ Ρ„Π°ΠΉΠ»). ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° C/C++ Π² WebAssembly осущСствляСтся ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ wasi-sdk.

Для нСпосрСдствСнного выполнСния WebAssembly-ΠΌΠΎΠ΄ΡƒΠ»ΡŒ компилируСтся Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ компилятора Lucet ΠΈ выполняСтся Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ «Π½Π°Π½ΠΎΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅», ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΎΡ‚ ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΉ памяти прилоТСния. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Lucet основан Π½Π° Ρ‚ΠΎΠΌ ΠΆΠ΅ ΠΊΠΎΠ΄Π΅, Ρ‡Ρ‚ΠΎ ΠΈ JIT-Π΄Π²ΠΈΠΆΠΎΠΊ Cranelift, примСняСмый Π² Firefox для выполнСния WebAssembly.

Π‘ΠΎΠ±Ρ€Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ области памяти ΠΈ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ доступа ΠΊ ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΌΡƒ адрСсному пространству. Π’ случаС эксплуатации уязвимости Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ Π°Ρ‚Π°ΠΊΡƒΡŽΡ‰ΠΈΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ ΠΈ Π½Π΅ смоТСт ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ областям памяти основного процСсса ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π²Π½Π΅ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ окруТСния.

Mozilla Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ изоляции Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ RLBox

Для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² прСдоставлСн высокоуровнСвый API, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ изоляции. WebAssembly-ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΠΎΡ‡Ρ‚ΠΈ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… рСсурсов ΠΈ взаимодСйствиС с Π½ΠΈΠΌΠΈ Π½Π΅ сильно ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ Π²Ρ‹Π·ΠΎΠ²Π° ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ (Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ выполняСтся Π² Ρ„ΠΎΡ€ΠΌΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, Π° Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ лишь ΠΏΡ€ΠΈ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Π² процСссС взаимодСйствия с ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ΠΌ). Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Ρ‹ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΈ для обращСния ΠΊ Π½ΠΈΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ
прослойку invoke_sandbox_function().

Π’ свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Ссли ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ внСшниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π΄Π°Π½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ явно ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° register_callback (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ RLBox прСдоставляСт доступ ΠΊ функциям стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ). Для обСспСчСния бСзопасной Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ (memory safety) изоляции выполнСния ΠΊΠΎΠ΄Π° нСдостаточно ΠΈ трСбуСтся Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ….

Π‘Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π² ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ значСния ΠΏΠΎΠΌΠ΅Ρ‡Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ Π½Π΅Π·Π°ΡΠ»ΡƒΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ довСрия, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ tainted-ΠΌΠ΅Ρ‚ΠΎΠΊ ΠΈ для «ΠΎΡ‡ΠΈΡΡ‚ΠΊΠΈ» Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΈ копирования Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ прилоТСния.
Π‘Π΅Π· очистки, ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° использования tainted-Π΄Π°Π½Π½Ρ‹Ρ… Π² контСкстС, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰Π΅ΠΌ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… (ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚) ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ошибок Π½Π° этапС компиляции. НСбольшиС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ значСния ΠΈ структуры ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ процСсса ΠΈ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ окруТСния. Для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π½Π°Π±ΠΎΡ€ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠ°ΠΌΡΡ‚ΡŒ выдСляСтся Π² ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ, Π° основному процСссу возвращаСтся прямой ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ «sandbox-reference».

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