7

現在、一部の方にアセンブリ コンパイル サービスを提供しています。アセンブリ コードをオンライン エディターに入力してコンパイルできます。コンパイルすると、コードが ajax リクエストでサーバーに送信され、コンパイルされ、プログラムの出力が返されます。

ただし、サーバーへの深刻な損傷を防ぐために何ができるかを考えています。私は自分で組み立てるのが初めてなので、サーバーでスクリプトを実行すると何ができるでしょうか? ファイルを削除または移動できますか? これらのセキュリティの問題を防ぐ方法はありますか?

前もって感謝します!

4

3 に答える 3

3

これがチュートリアル サービスであり、クライアントがさまざまなアセンブリ コードをテストするだけでよく、プログラムの外部で操作 (ファイル システムの読み取りや変更など) を実行する必要がない場合、別のオプションは、選択されたアセンブリ コードのサブセットのみを許可することです。指示。特に、システム コールを実行できる命令を許可しないでください。また、限られた制御転送命令のみを許可します (たとえば、リターンなし、ユーザーのコード内で定義されたラベルのみに分岐するなど)。また、特定のレジスターにある値を出力するライブラリー呼び出しなど、出力を返すいくつかの制限された方法を提供することもできます。数値データ定義として任意のマシンコードを入力できるため、テキスト (コード) セクションでのデータ宣言を許可しないでください。

「別のオプション」と書きましたが、これはサンドボックス化など、他の回答者が提案した他のオプションに追加する必要があります。

この方法はエラーが発生しやすいため、使用する場合は慎重かつ徹底的に設計する必要があります。たとえば、一部のアセンブラでは、1 行で複数の命令を使用できます。したがって、行の最初の命令フィールドのテキストが受け入れ可能であることを確認するだけでは、その行の残りの命令を見逃すことになります。

于 2012-06-01T18:06:15.187 に答える
3

http://sourceforge.net/projects/libsandbox/をご覧ください。Linuxサーバーで必要なことを正確に行うために設計されています。

このプロジェクトは、制限された環境またはサンドボックスで単純な (単一プロセス) プログラムをテストおよびプロファイリングするための C/C++/Python の API を提供します。バイナリ実行可能プログラムの実行時の動作は、構成可能/プログラム可能なポリシーに従ってキャプチャおよびブロックできます。

サンドボックス ライブラリは、もともと ACM/ICPC トレーニング用の本格的なオンライン ジャッジ システムのコア セキュリティ モジュールとして設計され、利用されていました。その後、バイナリ プログラムのテスト、プロファイリング、およびセキュリティ制限のための汎用ツールに進化しました。サンドボックス ライブラリは現在、OpenJudge Alliance (http://openjudge.net/) によってスタンドアロンのオープンソース プロジェクトとして維持されており、IT/CS 教育向けのさまざまな課題の採点ソリューションを促進しています。

于 2012-06-01T15:42:21.470 に答える
1

サーバー上で他人の任意のコードをコンパイルして実行することは、まさに任意のコードの実行です。任意のコードの実行は、悪意のあるハッカーにとって究極の目標です。誰かがこの質問を使用してあなたのサービスを見つけ、今すぐ悪用する可能性があります。サービスの実行をすぐに停止します。このサービスを引き続き実行したい場合は、サンドボックス内でプログラムをコンパイルして実行する必要があります。ただし、これが実装されるまでは、サービスを一時停止する必要があります。

コードが悪意のあるものである場合、サンドボックスはコードが実際の OS に損害を与えるのを防ぐため、仮想マシン サンドボックスでコードを実行する必要があります。一部の仮想マシンには、VirtualBox と Xen が含まれます。また、コードに対して何らかのシグネチャ検出を実行して、既知の悪意のある機能を検索することもできますが、どのような形式のシグネチャ検出も無効にすることができます。

これは VirtualBox のホームページへのリンクです: https://www.virtualbox.org/

これは Xen へのリンクです: http://xen.org/

于 2012-06-01T04:34:37.907 に答える