コンパイルされたプログラムを実行するためのサンドボックス仮想マシンを作成したいと思います。私の目標は、そのプログラムを他のオペレーティングシステムから分離し、その実行を制御して、ホストコンピューターに有害なことを何もできないようにすることです。
私はそれを仮定します:
- 実行されたプログラムはPortableExecutable形式にコンパイルされ、マシンコードであり、バイトコードやCLR用ではありません。
- 実行されたプログラムは、プリンター、スキャナーなどの周辺機器との通信を許可されておらず、GUIを使用していません。
- 実行されたプログラムの主なタスクは、ローカルファイルに保存されているデータ(計算など)を処理し、その結果を別のローカルファイルに入れることです。
- 実行されたプログラムはオペレーティングシステムと直接通信できないようにする必要があります。すべての要求は仮想マシンで処理する必要があり、オペレーティングシステムに損傷を与える可能性のある要求はすべてブロックする必要があります。
サンドボックス仮想マシンのアーキテクチャと操作の私の概念:
- アプリケーションは、プロセッサ、メモリ、ファイルのI / O操作、
- コンパイルされたファイルを読み取り、実行可能コードを仮想メモリにロードするモジュールがあります。
- 次に、仮想プロセッサは最初のバイトから処理を開始し、オペコード、引数を読み取り、必要に応じてメモリからロードし、コマンドを実行して結果を適切な場所に配置し、必要に応じて仮想フラグを設定し、プログラムが実行されるまで次のコマンドを読み取ります最後まで。
あなたはどう思いますか:それは良いコンセプトですか?それを改善するために何を変えますか?