サンドボックスについて

セキュリティにおけるサンドボックスについてまとめてみました。
自分が分かるように引用してまとめたので間違いなどがあれば指摘してください。

# サンドボックスとは
**サンドボックス** : プログラムがシステムの他の部分に悪影響を及ぼすことのないよう、**外界と隔離されていたり、機能が制限されていたりして、その中で何か悪影響が起きても他には影響が出ないように**設計された仮想環境（領域）またはツールのことである。
（仮想環境とは、現実に存在しない環境をソフトウェアによって仮想空的に、疑似環境を作り出すことを指す。）

使用場面としてはソフトウェア開発とセキュリティの分野で使用され、危険なマルウェアや不完全な開発中のプログラムなどを、隔離された領域の「砂場」という安全な環境だけで動作させることで、システムなどに被害を与えることなくマルウェアの動きを調べたり、ほかのプログラムに影響させることなく、新たに作ったプログラムなどをテストする。

（「サンドボックス」は砂場・砂箱といった意味で砂場で幼児が好きなだけ騒いでも外部に迷惑を及ばさないことからの連想でサンドボックスという用語が用いられる。）


## 開発における使用目的
開発でのサンドボックスは、開発中のプログラムにバグが含まれていた場合などに、システム全体がバグの影響を受けないように開発サーバや後述するステージングサーバとして用いられる。開発サーバは本番環境とは分離していますが、基本的なネットワークへのアクセスを必要とすることがある。開発者はプログラムをアップロードし、コードベースを変更・検証するために開発サーバを使用する。

ステージングサーバは、本番環境の正確な再現になるように設計され、本番環境にデプロイする前にQA担当者がプログラムをテストする場所。ステージング環境は、本番環境と同一なため、ステージングで問題なく実行されたプログラムは、本番環境でも何の問題もなく実行されるものと見なされる。プログラムをテストしたのち、本番環境へとデプロイする。

## キュリティ分野での使用目的
セキュリティの分野では、外部で作られたソフトウェアが万が一不正なプログラムを含んでいても、システムに侵入したり不正操作したりされないように、試しで動かすための環境として用いられる。

受信メールをサンドボックスで解析し、マルウェアを検知するのは代表的な例になる。
例えば受信メールに添付ファイルがある場合、疑わしいファイルはサンドボックス内で展開・実行し、問題がないかテストする。URLなどのリンクがあれば実際にクリックして検証する。
検証の結果、プログラムに問題がないと判断された場合は、そのまま実行される。
![スクリーンショット 2023-05-28 10.43.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2785154/e83b02e6-f9ab-55d0-7442-b0a85af676c9.png)
問題のあるプログラムが含まれていれば記録して分析し、システムによっては、ユーザーに注意喚起を促す通知を行う製品もある。

## サンドボックスの仕組み
サンドボックスは、以下3つのステップを踏むことでユーザーのセキュリティ向上に繋げている。
①安全性不明のファイル確認
②サンドボックス環境で展開、セキュリティチェック
③問題なければ実環境へ、脅威を検知すれば隔離・駆除

サンドボックス上に移された不明なプログラムは、まず安全性をチェックするべくファイルの確認を実行する。次にサンドボックス環境でファイルを展開し、不審な動きがないかをチェックする。

最後に、不審な動きを検知しなかった場合は実環境へ移行し、不審な動きを検知した場合にはプログラムの隔離・駆除を実行する。

## サンドボックスのメリット
**未知のプログラムの動作分析ができる**
マルウェアの検知に一般的に用いられている方法に、パターンマッチングがある。
既知のマルウェアと検査対象を照合し、マルウェアに該当した場合は排除する。またマルウェアであるかどうか判断する基準が明確であるため、誤検知のリスクが低いのが特徴。ただし、未知のリスクには対応できないという弱点がある。

一方、サンドボックスは未知の脅威にも対応できる。実際にサンドボックス内で検査対象を実行して有害かどうか判断するため、その脅威が未知であっても問題ない。サンドボックス内で実行された内容は記録が残り、セキュリティ対策に活かせる。

ただし、すべての脅威に対してこの検査をしていては、多大な負荷と時間がかかってしまう。そのため、ほかのセキュリティ対策と組みあわせて利用するのが一般的。

**すでにあるシステムに後付けができる**
サンドボックスは、専用機器を設置し、必要なネットワーク設定を施すだけで利用できる。あるいは、パソコンにサンドボックスのソフトウェアをインストールして活用することも可能。

既存のシステムを大きく変化させる必要がないため、導入しやすいのが強みといえる。特に、近年ではクラウド型のサービスも増えてきており、導入ハードルが下がりつつある。

**プログラムの試験運用ができる**
プログラムを仮想環境で実行できることは、セキュリティ以外の面でもメリットがある。
例えば、アプリケーションの開発やアップデート時に、それらが正常に作動するかチェックできる。アプリは開発者の予想を超えた形でエンドユーザーに不評となることが多く、ユーザー視点でのチェックは不可欠。

サンドボックスであればエンドユーザーと同じ環境でアプリを確認できるため、質の高いアプリ開発が実現できる。


## サンドボックスのデメリット
**サンドボックスを回避して攻撃される可能性がある**
サンドボックスは、仮想環境でプログラムを実行して有害かどうかを判断するもの。つまり、サンドボックス内で無害であれば、そのプログラムはブロック対象にならない。この弱点を突いた脅威が存在する。

それは、サンドボックス内でのみ無害化されるマルウェア。作動環境がどのようなものであるか検知し、仮想環境であれば有害な挙動をしないという特徴を備えている。
あるいは、特定の時間でのみ有害な挙動をするマルウェアも存在する。これも、検査する時間帯にその挙動が見られなければ、ブロック対象として認識できない。

そもそもサンドボックスの概念自体は、20年以上前から存在していました。そのため、サンドボックス対策を施したマルウェアは少なくない。

**導入コストが高い**
サンドボックスの導入には、数百万～数千万円単位のコストがかかることがある。具体的なコストは製品によって異なるが、いずれにしてもコストが課題となるのは間違いない。
また、サンドボックスだけですべての脅威に対応できるわけではない。つまり、ほかにもセキュリティ対策が必要で、そちらにも費用がかかる。


**検証に時間がかかる場合がある**
サンドボックス内でプログラムを実行し、挙動を確認するのに、時間がかかる場合がある。検証作業に時間がかかれば、作業終了を待たずしてマルウェアが活動し、感染する可能性もある。このように、サンドボックスはリアルタイムな検知ができない点がデメリットの一つといえる。

**これらのデメリットは、ウイルス対策ソフトとの併用によりカバーできるため、自社に本当にサンドボックスが必要なのか、また具体的にどれほどのメリットが得られるのかをよく検討して導入みるとよいでしょう。**


# 参考記事
https://www.alsok.co.jp/corporate/recommend/sandbox.html#toc2

https://eset-info.canon-its.jp/malware_info/special/detail/201117.html

https://www.itreview.jp/labo/archives/11360

https://it-trend.jp/anti_virus/article/58-0019

https://www.proofpoint.com/jp/threat-reference/sandbox