Mozilla が RLBox ライブラリ分離テクノロジーの実装を開始

スタンフォード大学、カリフォルニア大学サンディエゴ校、テキサス大学オースティン校の研究者 開発した ツール RLボックス、関数ライブラリの脆弱性をブロックするための追加の分離レイヤーとして使用できます。 RLBox は、開発者の管理下にない信頼できないサードパーティ ライブラリのセキュリティ問題、ただしメイン プロジェクトを侵害する可能性のある脆弱性に対処することを目的としています。

モジラ社 計画する Firefox 74 の Linux ビルドおよび Firefox 75 の macOS ビルドで RLBox を使用して、ライブラリの実行を分離します。 グラファイトフォントのレンダリングを担当します。 同時に、RLBox は Firefox に固有のものではなく、任意のプロジェクト内のライブラリを分離するために使用できます。 稼働時間 RLボックス 広める MITライセンスの下で。 RLBox は現在、Linux および macOS プラットフォームをサポートしていますが、Windows も後日サポートされる予定です。

Механизм RLBox の作業は、分離されたライブラリの C/C++ コードを低レベルの WebAssembly 中間コードにコンパイルすることになります。これは WebAssembly モジュールとしてフォーマットされ、そのアクセス許可はこのモジュールにのみ関連して設定されます (たとえば、文字列を処理するライブラリはネットワーク ソケットやファイルを開くことができません)。 C/C++ コードを WebAssembly に変換するには、次を使用します。 wasi-SDK.

直接実行する場合、WebAssembly モジュールはコンパイラを使用してネイティブ コードにコンパイルされます。 ルセット そして、アプリケーションのメモリの残りの部分から分離された別の「ナノプロセス」で実行されます。 Lucet コンパイラは、JIT エンジンと同じコードに基づいています。 クレーンリフトWebAssembly を実行するために Firefox によって使用されます。

組み立てられたモジュールは別のメモリ領域で動作し、残りのアドレス空間にはアクセスできません。 この脆弱性がライブラリ内で悪用された場合、攻撃者は制限され、メインプロセスのメモリ領域にアクセスしたり、隔離された環境の外に制御を移すことができなくなります。

Mozilla が RLBox ライブラリ分離テクノロジーの実装を開始

開発者にとって、ハイレベルな APIこれにより、分離モードでライブラリ関数を呼び出すことができます。 WebAssembly ハンドラーは追加のリソースをほとんど必要とせず、それらとの対話は通常の関数を呼び出すよりもそれほど遅くありません (ライブラリ関数はネイティブ コードの形式で実行され、オーバーヘッドは分離された環境と対話するプロセスでデータをコピーしてチェックするときにのみ発生します)。 。 ロックされたライブラリ関数は直接呼び出すことができないため、次を使用してアクセスする必要があります。
invoke_sandbox_function() レイヤー。

さらに、外部関数をライブラリから呼び出す必要がある場合は、register_callback メソッドを使用してこれらの関数を明示的に定義する必要があります (デフォルトでは、RLBox は関数へのアクセスを提供します) 標準ライブラリ)。 メモリの安全性を確保するには、コード実行を分離するだけでは十分ではなく、返されたデータ ストリームを確実に検証することも必要です。

隔離された環境で生成された値は信頼できないものとしてマークされ、以下によって制限されます。 汚染されたタグ そして「クリーニング」には必要です 検証 そしてアプリケーションメモリにコピーします。
クリーンアップを行わないと、通常のデータを必要とするコンテキストで汚染されたデータを使用しようとすると (逆も同様)、コンパイル時エラーが発生します。 小さな関数の引数、戻り値、および構造体は、プロセス メモリとサンドボックス メモリ間のコピーを介して転送されます。 大規模なデータセットの場合、メモリは隔離された環境で割り当てられ、直接の「サンドボックス参照」ポインタがメイン プロセスに返されます。

出所: オープンネット.ru

コメントを追加します