一部の言語 (Java、安全でないコードのない C# など) では、メモリを破損することは不可能です (そうあるべきです)。手動のメモリ管理などは必要ありません。これにより、リソース (ファイルへのアクセス、ネットへのアクセス、最大メモリ) を制限できます。使用法、...) アプリケーションに非常に簡単に適用できます。たとえば、Java アプレット (Java Web Start) などです。サンドボックス化と呼ばれることもあります。
私の質問は: ネイティブ プログラム (たとえば、C、C++ のようなメモリが安全でない言語で書かれているが、ソース コードがない) で可能ですか? 単純なバイパス可能なサンドボックスやウイルス対策ソフトウェアのことではありません。
私は2つの可能性について考えています:
- 別の OS ユーザーとしてアプリケーションを実行し、このユーザーに制限を設定します。不利な点 - 多くのユーザー、パラメータのすべての組み合わせ、アクセス権?
- (どういうわけか) 呼び出すことができる制限 (OS API) 関数。バイパスの可能性なしで、(少なくとも理論的には) 完全な保護を許可する可能性があるかどうかはわかりません。
編集:理論にもっと興味があります-たとえば、一部のOSに文書化されていない機能があることや、特定のOSでアプリケーションをサンドボックス化する方法は気にしません。たとえば、アプリケーションをサンドボックス化し、コンソールから char を取得し、コンソールに char を配置するという 2 つの機能のみを許可します。バイパスの可能性がなく、どうすれば壊れないようにすることができますか?
言及された回答:
- Google ネイティブ クライアント、x86 のサブセットを使用 - 開発中、(可能性はありますか?) PNaCl - ポータブル ネイティブ クライアント
- 完全な VM - 明らかにやり過ぎです。数十のプログラムを想像してみてください...
言い換えれば、ネイティブ (安全でないメモリ アクセス) コードを、Web ブラウザなどの制限された環境内で、100% (少なくとも理論上は) セキュリティで使用できるでしょうか?
Edit2: Google Native Clientはまさに私が望むものです。安全かどうかに関係なく、ネイティブの速度で実行され、サンドボックスで、Web ブラウザーでも実行されます。ウェブでもデスクトップでも、誰もが好きな言語を使用しています。