3

一部の言語 (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 ブラウザーでも実行されます。ウェブでもデスクトップでも、誰もが好きな言語を使用しています。

4

4 に答える 4

2

サンドボックスで x86 コード (および私が今信じている ARM コード) を実行するGoogle のNative Clientについて読みたいと思うかもしれません。

于 2011-02-25T16:04:33.797 に答える
2

元の質問でAppArmorについてほとんど説明しました。それを説明する良いビデオがかなりあるので、見ることを強くお勧めします。

于 2011-02-25T17:44:27.643 に答える
1

可能?はい。難しい?また、はい。OSに依存しますか?はい、そうです。

最新のOSのほとんどは、必要なものを実現するために使用できるさまざまなレベルのプロセス分離をサポートしています。最も簡単なアプローチは、デバッガーを接続してすべてのシステムコールを中断することです。次に、デバッガーでこれらの呼び出しをフィルタリングします。ただし、これはパフォーマンスに大きな影響を与えるため、複数のスレッドが存在する場合に安全を確保することは困難です。また、Mac OSやWindowsなど、低レベルのsyscallインターフェイスが文書化されていないOSに安全に実装することも困難です。

Chromeブラウザの人々はこの分野で多くの仕事をしてきました。彼らは、 WindowsLinux(特にSUIDサンドボックス)、およびMacOSXの設計ドキュメントを投稿しています。彼らのアプローチは効果的ですが、完全に確実というわけではありません。外部OSとゲストアプリケーションの間で、まだいくつかのマイナーな情報リークがある可能性があります。さらに、一部のOSでは、サンドボックスから通信できるようにするために、ゲストプログラムに特定の変更を加える必要があります。

ホストされているアプリケーションへの変更が受け入れられる場合は、Googleのネイティブクライアントを一見の価値があります。これにより、ローダーが厄介なことを何もしていないことを証明できるように、コンパイラーのコード生成の選択が制限されます。これは明らかに任意の実行可能ファイルでは機能しませんが、ネイティブコードのパフォーマンス上の利点が得られます。

最後に、エミュレーターで、問題のプログラムに加えて、OS全体をそれ自体に対していつでも簡単に実行できます。このアプローチは基本的に絶対確実ですが、かなりのオーバーヘッドが追加されます。

于 2011-02-25T16:08:48.900 に答える