Mozilla пачынае ўкараненне тэхналогіі ізаляцыі бібліятэк RLBox

Даследнікі са Стэндфардскага ўніверсітэта, Каліфарнійскага ўніверсітэта ў Сан-Дыега і Тэхаскага ўніверсітэта ў Осціне распрацавалі інструментарый RLBox, які можа прымяняцца як дадатковы ўзровень ізаляцыі для блакавання ўразлівасцяў у бібліятэках функцый. RLBox накіраваны на вырашэнне праблемы з бяспекай незаслугоўваючых даверу іншых бібліятэк, якія не падкантрольныя распрацоўшчыкам, але ўразлівасці ў якіх могуць скампраметаваць асноўны праект.

Кампанія Mozilla плануе задзейнічаць RLBox у Linux-зборках Firefox 74 і macOS-зборках Firefox 75 для ізаляцыі выканання бібліятэкі графітавых, якая адказвае за адмалёўку шрыфтоў. Пры гэтым RLBox не спецыфічны для Firefox і можа прымяняцца для ізаляцыі любых бібліятэк у адвольных праектах. Напрацоўкі RLBox распаўсюджваюцца пад ліцэнзіяй MIT. У наш час RLBox падтрымлівае працу на платформах Linux і macOS, падтрымка Windows чакаецца пазней.

механізм працы RLBox зводзіцца да кампіляцыі C/C++ кода ізаляванай бібліятэкі ў нізкаўзроўневы прамежкавы код WebAssembly, які затым афармляецца ў выглядзе WebAssembly-модуля, паўнамоцтвы якога задаюцца ў прывязцы толькі да гэтага модуля (напрыклад, бібліятэка для апрацоўкі радкоў не зможа адкрыць сеткавы сокет або файл) . Пераўтварэнне кода C/C++ у WebAssembly ажыццяўляецца пры дапамозе wasi-sdk.

Для непасрэднага выканання WebAssembly-модуль кампілюецца ў машынны код пры дапамозе кампілятара. Lucet і выконваецца ў асобным "нанапрацэсе", ізаляваным ад астатняй памяці прыкладання. Кампілятар Lucet заснаваны на тым жа кодзе, што і JIT-рухавічок. пад'ёмны кран, які ўжываецца ў Firefox для выканання WebAssembly.

Сабраны модуль працуе ў асобнай вобласці памяці і не мае доступу да астатняй адраснай прасторы. У выпадку эксплуатацыі ўразлівасці ў бібліятэцы атакавалы будзе абмежаваны і не зможа звярнуцца да абласцей памяці асноўнага працэсу або перадаць кіраванне па-за ізаляваным асяроддзем.

Mozilla пачынае ўкараненне тэхналогіі ізаляцыі бібліятэк RLBox

Для распрацоўшчыкаў прадастаўлены высокаўзроўневы API, які дазваляе выклікаць функцыі бібліятэкі ў рэжыме ізаляцыі. WebAssembly-апрацоўшчыкі амаль не патрабуюць дадатковых рэсурсаў і ўзаемадзеянне з імі не моцна павольней выкліку звычайных функцый (функцыі бібліятэкі выконваецца ў форме натыўнага кода, а накладныя выдаткі ўзнікаюць толькі пры капіяванні і праверцы дадзеных падчас узаемадзеянняў з ізаляваным асяроддзем). Функцыі ізаляванай бібліятэкі не могуць быць выкліканы напрамую і для звароту да іх неабходна прымяняць
праслойку invoke_sandbox_function().

У сваю чаргу, калі з бібліятэкі неабходна выклікаць вонкавыя функцыі, дадзеныя функцыі павінны быць відавочна вызначаны пры дапамозе метаду register_callback (па змаўчанні RLBox падае доступ да функцый стандартнай бібліятэкі). Для забеспячэння бяспечнай працы з памяццю (memory safety) ізаляцыі выканання кода недастаткова і патрабуецца таксама забяспечыць праверку якія вяртаюцца струменяў дадзеных.

Сфармаваныя ў ізаляваным асяроддзі значэнні пазначаюцца як незаслугоўваючыя даверы, абмяжоўваюцца пры дапамозе tainted-пазнак і для "ачысткі" патрабуюць верыфікацыі і капіявання ў памяць прыкладання.
Без ачысткі, спроба выкарыстання tainted-дадзеных у кантэксце, які патрабуе звычайных дадзеных (і наадварот) прыводзіць да генерацыі памылак на этапе кампіляцыі. Невялікія аргументы функцый, якія вяртаюцца значэнні і структуры перадаюцца праз капіяванне паміж памяццю працэсу і памяццю ізаляванага асяроддзя. Для вялікіх набораў дадзеных памяць вылучаецца ў ізаляваным асяроддзі, а асноўнаму працэсу вяртаецца прамы паказальнік "sandbox-reference".

Крыніца: opennet.ru

Дадаць каментар