[論文レビュー] SafeJS: Hermetic Sandboxing for JavaScript
SafeJS は、実際の DOM に直接アクセスできないように、信頼できないスクリプトを Web Worker に隔離し、仮想 DOM (VDOM) を用いて完全に封印されたサンドボックス環境を提供する。メッセージの送受信は文字列ベースで行い、ポリシーを設定可能にすることでセキュリティを強化し、産業用途においても外部スクリプトの安全な実行を実現した。
Isolating programs is an important mechanism to support more secure applications. Isolating program in dynamic languages such as JavaScript is even more challenging since reflective operations can circumvent simple mechanisms that could protect program parts. In this article we present SafeJS, an approach and implementation that offers isolation based on separate sandboxes and control of information exchanged between them. In SafeJS, sandboxes based on web workers do not share any data. Data exchanged between sandboxes is solely based on strings. Using different policies, this infrastructure supports the isolation of the different scripts that usually populate web pages. A foreign component cannot modify the main DOM tree in unexpected manner. Our SafeJS implementation is currently being used in an industrial setting in the context of the Resilience FUI 12 project.
研究の動機と目的
- Web マッシュアップにおいて、外部スクリプトが予期せずメイン DOM にアクセスまたは変更する可能性があるというセキュリティリスクに対処すること。
- コードの再書き換えや制限付きの JavaScript サブセットに依存する既存の解決策には、互換性の制限があるため、それを克服すること。
- 完全なスクリプト互換性を保ちながらも、強力な隔離を実現する、生産環境で利用可能なセキュアなサンドボックスメカニズムを提供すること。
- メインドキュメントやユーザーのデータの整合性を損なわず、サードパーティスクリプトを Web アプリケーションに安全に統合できること。
提案手法
- 信頼できない JavaScript コードを、メインスレッドや DOM から本質的に隔離された専用の Web Worker 内で実行することで、隔離を実現する。
- 構成可能なポリシーに従ってのみ変更が許可される、標準 DOM を模倣した SafeJS 仮想 DOM (VDOM) を実装する。
- Worker とメインスレッド間で DOM の更新を文字列ベースのメッセージ送信によって伝達し、直接のオブジェクト参照や共有状態を避ける。
- 実際の DOM に適用する前に、すべての提案された DOM 更新をセキュリティポリシーと照合し、不正な更新はブロックするか、設定に従って Worker を終了させる。
- ファイルシステムへのアクセスや C++ の依存関係を回避する非ブロッキングな VDOM 実装を、jsdom を変更して作成する。
- クライントの実行環境と互換性を保つために、非同期モジュールローディングに RequireJS を活用する。
実験結果
リサーチクエスチョン
- RQ1スクリプト自体を変更せずに、Web ブラウザ上で信頼できない JavaScript スクリプトを安全に隔離する方法は何か?
- RQ2動的で反射的な言語(特に JavaScript のような言語)において、反射が単純なアクセス制御を回避するのを防ぐために、どのようなアーキテクチャパターンが強力な隔離を可能にするか?
- RQ3サーバーサイドの依存関係が一切ないクライントサイド環境でも、標準準拠かつ安全な仮想 DOM 実装は可能か?
- RQ4隔離されたスクリプトとメインページとの間の通信をどのように制御すれば、データの漏洩や不正な DOM 変更を防げるか?
- RQ5パフォーマンスと既存の Web アプリケーションとの互換性を両立させつつ、生産環境で利用可能な完全なサンドボックス化システムを構築するのは現実的か?
主な発見
- SafeJS は Web Worker と仮想 DOM を用いて信頼できない JavaScript スクリプトを効果的に隔離し、実際の DOM への直接アクセスを防ぎ、データ漏洩れのリスクを排除した。
- SafeJS VDOM は、変更された非ブロッキング版の jsdom を基盤として、完全に機能するブラウザ互換性のある DOM Level 3 実装である。
- 読み取り専用や読み書き可などの構成可能なポリシーにより、外部スクリプトがターゲットの DOM ノードに対して実行できる操作を制御できる。
- 不正な更新は検出され、設定に従ってブロックされたり、Worker の終了が引き起こされたりするため、強固なセキュリティ保証が得られる。
- 本番環境での実装は、Resilience FUI 12 プロジェクト内で産業用途に導入されており、実世界での実現可能性と生産環境適合性を実証した。
- 本手法は、信頼できないスクリプトに変更を加えずに、既存の JavaScript コードと完全に互換性を持つ。
より良い研究を、今すぐ始めましょう
論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。
クレジットカード登録不要
このレビューはAIが作成し、人間の編集者が確認しました。