1. 序章
コンピュータのセキュリティとソフトウェア開発において、サンドボックスとは、リソースへのアクセスが制限された状態で、システムの他の部分から分離してプログラムを実行できる環境を指します。これは、プロセスの一部をテストする場合に役立ちます。システム障害や誤動作を引き起こす可能性があります。
サンドボックスで何かが起こっても、それがマシンの残りの部分に漏れることは想定されていません。 通常、プロセスが割り当てるメモリスペース、プロセスが持つネットワークアクセス(存在する場合)、およびプロセスがアクセスできるディレクトリを制限できます。
この記事では、アプリケーションのサンドボックス化に使用されるさまざまな概念とアーキテクチャについて説明します。
2. コンセプト
次の各アーキテクチャには、利点と欠点があります。 これらは、展開速度、ハードウェアコンポーネントからの抽象化のレベル、およびアプリケーションを実行する必要のあるシステムの複雑さによって異なります。 一般に、ハードウェアコンポーネントを低レベルでセグメント化するアプローチでは、分離が向上します。
対照的に、複数のソフトウェアレベルを通じてアーキテクチャを抽象化するアプローチは、より柔軟でスケーラブルです。
2.1. 仮想マシンとハイパーバイザー
まず、仮想マシン(VM)は、同じマシンハードウェア内の「ミニコンピューター」と見なすことができます。個別のファイル、ライブラリ、およびアプリケーションを備えた独立したオペレーティングシステムのこれらのさまざまな組み合わせは、すべて同じコンピューター内で実行できます。ハイパーバイザーに。 ハイパーバイザーは、既存のハードウェアリソースをさまざまな仮想マシンのそれぞれに分散できるソフトウェアまたはファームウェアです。
このプロセスは「仮想化」と呼ばれ、同じコンピューター上の異なる環境間に仮想バリアを設定することに似ています。 仮想マシンの起動には数分かかり、通常はコンテナよりも低速です。 ただし、アプリケーション間の分離が向上します。
2.2. コンテナとコンテナエンジン
VMから移行すると、コンテナはアプリを分離するもう1つの方法です。 同じOSで実行されるアプリは、コンテナー化、デプロイ、スケーリングを自動的に行うことができます。コンテナーは、DockerなどのツールやKubernetesなどのコンピュータークラスタリングツールの進歩により、最近人気が高まっています。
これらの異なるアプリケーションはすべて同じハードウェアで実行されますが、制限が異なります。 コンテナエンジンは、ネットワーク接続、メモリ、およびコンテナで利用可能なその他のリソースを管理するために使用されます。 これらのリソースは、各コンテナーのニーズに応じて拡張することもできます。
このアプローチの展開は仮想マシンを使用するよりも高速であるため、コンテナーは、それぞれが独自の小さな事前に作成された環境で実行されるため、相互に通信するアプリケーションのネットワークをすばやく組み立てて分解する方法を提供します。 VMには数分かかるため、コンテナのデプロイには数秒かかります。
2.3。オペレーティングシステムエミュレーション
このアプローチでは、サンドボックスはオペレーティングシステムを複製しますが、物理ハードウェアをエミュレートしません。 1つのオペレーティングシステムを完全にエミュレーションすることは、コンピューターにとって大変な作業になる可能性があります。
したがって、多くのオペレーティングシステムエミュレーションソフトウェアは、最も一般的なシステムコールの一部のみをエミュレートします。
高度なタイプのマルウェアは、まれなシステムコールを使用して、サンドボックス内で非アクティブに見えることにより、このタイプのサンドボックスを回避できます。
2.4. フルシステムエミュレーション
完全なシステムエミュレーションでは、マシン上のすべてのリソースがシミュレートされます。これにより、内部を確認し、サンドボックス化されたプロセスが何を行っているかを確認できます。
CPUから画面上の表示まですべてがソフトウェアによってシミュレートされ、サンドボックス化されたプログラムに渡されます。 これはコンテナに似ていますが、基盤となるマシンのオペレーティングシステムアーキテクチャによってエミュレーションが制限されない点が異なります。
エミュレーションエンジンは、さまざまなシステムアーキテクチャをシミュレートでき、パーソナルコンピュータやサーバーに限定されません。 たとえば、携帯電話やビデオゲームコンソールのオペレーティングシステムを複製できます。 システム全体がエミュレートされているため、コンピューターのさまざまな部分に送信されている情報を分析することができます。
これは、その中で実行されているアプリケーションの動作を深く理解するために使用されます。
3. 回避テクニック
巧妙なマルウェアソフトウェアは、実行中の環境を検出できます。このスキルを使用すると、シミュレートされた環境内で実行するとさまざまなマルウェアが安全に見え、実際のホストを検出すると突然アクティブになります。 。
その後、マルウェアはさまざまな手法を使用して、自身のトラックをマスクできます。 これを行うための最も一般的な手法の1つは、プロセスインジェクションと呼ばれます。 この手法は、実行中のプロセスと同じアドレス空間でペイロードコードを実行します。 これにより、マルウェアに関連する特定のプロセスを検出することが困難になることがよくあります。
完全なシステムエミュレーションでこの問題を解決できますが、エミュレーションの品質は、マルウェアに対して実際のシステムとして表示されるのに十分である必要があります。
4. 結論
この記事では、サンドボックスのさまざまな基本概念について説明しました。