Loading article…
コンピュータセキュリティにおいて、サンドボックスとは実行中のプログラムを分離するセキュリティ機構のことであり、通常はシステム障害やソフトウェアの脆弱性の拡散を緩和することを目的としています。サンドボックスの比喩は、子供の砂場、つまり子供が現実世界に損害を与えることなく構築、破壊、実験できる遊び場という概念に由来しています。[1]これは、未検証または信頼できない第三者、サプライヤー、ユーザー、またはウェブサイトからの、テストされていないまたは信頼できないプログラムやコードを、ホストマシンやオペレーティングシステムに危害を与えるリスクを冒さずに強制終了するために使用されることがよくあります。[2]サンドボックスは通常、ストレージやメモリスクラッチスペース など、ゲストプログラムが実行される厳密に管理されたリソースセットを提供します。ネットワークアクセス、ホストシステムを検査する機能、または入力デバイスから読み取る機能は通常、許可されていないか、厳しく制限されています。
高度に制御された環境を提供するという意味で、サンドボックスは仮想化の具体的な例として考えることができます。サンドボックスは、ソフトウェアがホストデバイスに害を及ぼすことなく、ウイルスやその他の悪意のあるコードが含まれている可能性のある未検証のプログラムをテストするために頻繁に使用されます。[3]
実装
サンドボックスは、制限されたオペレーティングシステム環境でソフトウェアを実行することによって実装され、プロセスが使用できるリソース(ファイル記述子、メモリ、ファイルシステムスペースなど)を制御します。 [4]
サンドボックス実装の例は次のとおりです。
- Seccomp、cgroups、Linux 名前空間上に構築されたLinuxアプリケーション サンドボックス。特にSystemd、Google Chrome、Firefox、Firejailで使用されています。
- Androidは、各アプリケーションに独自のLinuxユーザーIDを割り当てることで構築された完全なアプリケーションサンドボックスを実装した最初の主流オペレーティングシステムでした。[5]
- Apple App Sandboxは、AppleのMac App StoreやiOS / iPadOS App Storeを通じて配布されるアプリには必須であり、その他の署名済みアプリにも推奨されています。[6] [7]
- Windows Vista以降のエディションには、「ユーザーアカウント制御」(UAC)と呼ばれる「低」モードのプロセス実行が含まれており、特定のディレクトリとレジストリキーへの書き込みのみが許可されます。Windows 10 Proのバージョン1903以降では、Windowsサンドボックスと呼ばれる機能が提供されています。[8]
- GoogleサンドボックスAPI。[9]
- 仮想マシンは、従来のオペレーティング システムを実際のハードウェアと同じように起動して実行できる完全なホスト コンピュータ をエミュレートします。ゲスト オペレーティング システムは、ホスト上でネイティブに機能せず、エミュレーターを介してのみホスト リソースにアクセスできるという意味でサンドボックス化されて実行されます。
- jail :ネットワークアクセスの制限と制限されたファイルシステムの名前空間。jailは仮想ホスティングで最もよく使用されます。[10]
- ルールベースの実行では、システムが一連の決められたルールに従ってユーザーやプログラムにアクセスレベルを割り当てることで、どのプロセスを開始、生成(他のアプリケーションによって)するか、他のアプリケーションにコードを挿入してネットにアクセスできるようにするかを完全に制御できます。[11]また、ファイル/レジストリのセキュリティ(どのプログラムがファイルシステム/レジストリを読み書きできるか)も制御できます。このような環境では、ウイルスやトロイの木馬がコンピューターに感染する機会が少なくなります。SELinuxとApparmorセキュリティフレームワークは、 Linux用のそのような実装の2つです。
- セキュリティ研究者は、マルウェアの行動を分析するためにサンドボックス技術に大きく依存しています。標的のデスクトップを模倣または複製する環境を作成することで、研究者はマルウェアが標的のホストにどのように感染し、侵害するかを評価できます。多くのマルウェア分析サービスはサンドボックス技術に基づいています。[12]
- Google Native Clientは、ユーザーのオペレーティングシステムに依存せず、コンパイルされたCおよびC++コードをブラウザ内で効率的かつ安全に実行するためのサンドボックスです。[13]
- 機能システムは、きめ細かなサンドボックス化メカニズムと考えることができます。このメカニズムでは、プログラムには、生成されたときに不透明なトークンが与えられ、保持しているトークンに基づいて特定の操作を実行できます。機能ベースの実装は、カーネルからユーザー空間まで、さまざまなレベルで機能します。機能ベースのユーザーレベル サンドボックス化の例としては、Web ブラウザーでの HTML レンダリングが挙げられます。
- セキュア コンピューティング モード (seccomp) 厳密モードでは、seccomp は、、、および
write()システムread()コールのみを許可します。exit()sigreturn() - HTML5にはiframeで使用するための「サンドボックス」属性があります。[14]
- Java 仮想マシンには、 Java アプレットなどの信頼できないコードの動作を制限するサンドボックスが含まれています。
- .NET共通言語ランタイムは、信頼されていないコードに制限を適用するためのコード アクセス セキュリティを提供します。
- ソフトウェア障害分離(SFI)[15]は、すべてのストア、読み取り、ジャンプアセンブリ命令を分離されたメモリセグメントにサンドボックス化することで、信頼できないネイティブコードの実行を可能にします。
サンドボックスの使用例には次のようなものがあります。
- プログラミングコンテストでプログラムをテストするためのオンライン審査システム。
- ユーザーがペーストビンのサーバー上で貼り付けたコード スニペットを実行できるようにする新世代のペーストビン。
参照
参考文献
- ^ 「サンドボックス環境とは? - 意味 | Proofpoint UK」。Proofpoint。2023年9月13日。 2024年5月28日閲覧。
- ^ Goldberg, Ian; Wagner, David; Thomas, Randi & Brewer, Eric (1996). 「信頼できないヘルパー アプリケーションのための安全な環境 (狡猾なハッカーの封じ込め)」(PDF)。第 6 回 USENIX UNIX セキュリティ シンポジウムの議事録。2011年10 月 25 日閲覧。
- ^ Geier, Eric (2012-01-16). 「サンドボックス化で PC を安全に保つ方法」。TechHive。2014-07-12 にオリジナルからアーカイブ。2014-07-03に取得。
- ^ 「サンドボックスアプリケーション」(PDF) 2001年。 2013年5月7日閲覧。
- ^ 「アプリケーション サンドボックス - Android オープンソース プロジェクト」 。2021年 4 月 2 日閲覧。
- ^ 「App Sandboxについて」。developer.apple.com 。 2020年12月9日閲覧。
- ^ 「iOS および iPadOS のランタイムプロセスのセキュリティ」。Appleサポート。2021 年 4 月 4 日閲覧。
- ^ 「Windows Sandbox」. 2018年12月18日. 2010年1月7日閲覧。
- ^ google/sandboxed-api、Google、2020-12-08、2020-12-09取得
- ^ 「自動サンドボックスセキュアシステム」2015年1月30日閲覧。
- ^ 「コンピュータシステムのセキュリティとアクセス制御」 1991年。2013年5月28日時点のオリジナルよりアーカイブ。2013年5月17日閲覧。
- ^ 「ネイティブ クライアント サンドボックス – 信頼できない x86 ネイティブ コード」(PDF) 。2015 年 1 月 3 日閲覧。
- ^ ネイティブクライアントへようこそ
- ^ Internet Explorer チーム ブログ (2011 年 7 月 14 日)。「多層防御: HTML5 サンドボックスによるマッシュアップのロックダウン」。IEBlog。
- ^ Wahbe, Robert (1993). 「効率的なソフトウェアベースの障害分離」(PDF)。
外部リンク
- Linux ソフトウェアのセキュリティの詳細: セキュリティ バグの防止と軽減
- サンドボックス – Chromium プロジェクト
- FreeBSD capsicum(4) マニュアルページ – 軽量 OS 機能とサンドボックス フレームワーク
- OpenBSD pledge(2) マニュアルページ – システム操作を制限する方法
- サンドボックステストの重要性 2021-04-26にWayback Machineでアーカイブされました{サンドボックス} ゼロデイ脆弱性におけるサンドボックスの重要性
