16

ユーザーが C コードをアップロードして実行結果を確認できる Web アプリケーションを作成したいと考えています (コードはサーバー上でコンパイルされます)。ユーザーは信頼されていません。これは明らかにセキュリティに大きな影響を与えます。

そのため、アプリ用にある種のサンドボックスを作成する必要があります。最も基本的なレベルでは、ファイル システムへのアクセスを特定のディレクトリに制限したいと考えています。Web アプリは特権ユーザーとして実行されていないため、chroot 監獄を直接使用することはできません。刑務所を設定する suid 実行可能ファイルがオプションになると思います。

アップロードされたプログラムはかなり小さいので、すぐに実行されるはずです (せいぜい数秒)。したがって、事前設定されたタイムアウト後にプロセスを強制終了できますが、新しいプロセスが生成されないようにするにはどうすればよいでしょうか? または、できない場合、pgid全体を殺すことは信頼できる方法ですか?

「まったくやらない」以外に、これを行う最善の方法は何でしょうか? :) 私が見逃した他の明白なセキュリティ問題は何ですか?

FWIW、Web アプリは Python で作成されます。

4

12 に答える 12

3

まだ開発中であり、まだ安全とは見なされていませんが、GoogleNativeClientの背後にあるテクノロジーを確認してください。信頼できないネイティブコードをWebブラウザーで実行できるように設計されていますが、おそらくWebサーバーでの使用に適合させることができます。セキュリティを強化するために、仮想マシンなどの他の手法に加えて、このようなものを使用する場合があります。

于 2009-06-19T21:00:31.980 に答える
3

これは多くのレベルで非常に危険だと思います。あなたは基本的に、システム上で発見されたあらゆるエクスプロイトに対して自分自身を開放しています (通常、リモートでエクスプロイトできるものに限定されています)。避けられるならやらないほうがいいと思います。

そうしたい場合は、ある種の仮想マシンを使用してユーザーのコードを実行することをお勧めします。KVMのようなものを使用すると、同じ基本イメージを使用して多数の仮想マシンをセットアップすることができます (クローン作成をどのように処理するかはわかりませんが、既に起動した状態でスナップショットを保存することもできます)。その後、オンデマンドで VM を作成し、ユーザーのコードを実行して結果を返し、VM を強制終了できます。VM を相互に分離し、ネットワークから分離しておくと、ユーザーが必要な大混乱を引き起こす可能性があり、物理サーバーに損害を与えることはありません。これらの条件下で自分自身をさらしている唯一の危険は、VM から逃れることを可能にするある種のエクスプロイトです...それらは非常にまれであり、ハードウェア仮想化が改善されるにつれてさらにまれになります.

于 2009-06-19T19:40:48.490 に答える
2

Fedora 11には、あなたが望むことを正確に実行しているように見えるSELinuxサンドボックスがあります(おそらく、新しいプロセスの生成を制限することを除いて、リンクされたブログ投稿はそれについて言及していません)。

もちろん、カーネルのバグのリスクは常にあります。SELinuxを使用しても、カーネルの一部は依然としてすべてのプロセスに公開されています。

于 2009-06-19T21:01:57.267 に答える
2

libsandboxがあなたの目的を果たしていると思います。そのコア ライブラリは C/C++ 用に作成されていますが、Python プログラム用のラッパーも備えています。許可できるシステム コール、使用できるメモリ量、ゲスト プログラムを実行できる時間などをカスタマイズするオプションを提供します。 HOJなどのいくつかのオンライン ジャッジですでに使用されています。

于 2013-07-25T20:26:19.683 に答える
1

straceというツールがあります。これは、特定のプロセスによって行われたシステム コールを監視します。「不正な」関数アクセスを示唆する特定の呼び出しに注意する必要があります。私の知る限り、プログラミング競技会で競技者のプログラムをサンドボックス化するために使用される方法です。

于 2009-06-19T19:39:42.470 に答える
0

KVM または qemu の下で新しい VM を生成して、コードをコンパイルおよび実行する方法が適切に見えます。jail/LXC の下でコードを実行すると、ネットワーク コードなどの OS のセキュリティで保護されていない部分を悪用すると、マシンが危険にさらされる可能性があります。VM の下で実行する利点は明らかです。VM のみをハッキングできますが、マシン自体はハッキングできません。ただし、副作用として、リクエストごとに VM を生成するために大量のリソース (CPU とメモリ) が必要になります。

于 2013-03-25T06:42:47.383 に答える
0

http://www.cs.vu.nl/~rutger/publications/jailer.pdfhttp://www.cs.vu.nl/~guidoで説明されているような、信頼できないプログラムに対する ptrace ベースの制限を使用でき ます。 /mansion/publications/ps/secrypt07.pdf .

これらには、chroot に似た効果を持つ、ルート変更ポリシー ルール CHRDIR があります。(セクション「投獄ポリシー」)

ただし、ソースコードを公開していない可能性があります (部分的に変更された strace http://www.liacs.nl/~wichert/strace/に基づいています-- セクション「実装」)...

chroot-in-userpace に対する他の利用可能な ptrace ベースのアプローチも参照してください: https://unix.stackexchange.com/a/72697/4319

于 2013-04-17T02:27:37.467 に答える
0

あなたのソリューションは、ソース コードの分析に集中する必要があると思います。私はツールをまったく知りません。これは でかなり難しいと思いますCが、たとえば、Pascalモジュールをまったく含まないプログラムは、私の意見ではまったく無害です。

于 2009-06-22T20:45:42.310 に答える