1

子供やプログラマー向けのインタラクティブな学習システムを作っています。システムは、子供たちが提出するコード (c++) を自動的にコンパイルして実行します。system非常に広くアクセスできるようになるので、より大きな「子供」が、signalexec、などのコマンドを使用してシステムを壊そうとするのではないかと心配していますfork。自動バックアップがあるので、ハード ドライブがフォーマットされてもそれほど恐ろしいことではありませんが、最も一般的な有害なコマンドを制限したいと思います。

リストはありますか、それとも経験豊富なプログラマーがこれらの有害なコマンドに名前を付けることができますか?

4

3 に答える 3

3

これらのコマンドを検出してシステムを保護することはできません。これは、C++ では、直接メモリ アクセス (つまり、 を介してreinterpret_cast) または自己修正コードを使用して、これらのコマンドを呼び出したり、システムとやり取りしたりできるためです。代わりに、コンパイル後に、害を及ぼすのに十分なアクセス権を持たない別のプロセスでプログラムを実行します。

于 2012-05-05T17:15:19.917 に答える
0

一部のコマンドは正当ですが、有害に使用される可能性があります (cpや などrm)。

おそらく、制限付きシェルをユーザーのログイン シェルとして設定できます。次に、受け入れ可能なコマンドのセットを含むディレクトリを作成できます。

しかし、これは絶対確実ではありません。やる気のあるハッカーがシステムを破壊する可能性があります。

編集

コマンドの代わりにシステムコールを意味する場合、やる気のあるハッカーはいつでもそれらを呼び出すことができます(おそらく、、、関数ポインタを使用して、...またはメモリにジャンプします...)。asmdlsym

于 2012-05-05T17:15:26.783 に答える
0

あなたが提案していることは、同等のアセンブリコードを記述したり、禁止された関数を動的にコピーしたり、コピーを実行したりすることで簡単に覆すことができます.

システムコールの粒度で、代わりにホワイトリストを使用することを検討してください。プログラムが純粋にシステム コールを介して外部の世界と対話することを考えてみましょう。したがって、システム コールを含まないコードはすべて「信頼」できます。これにより、動的または静的迂回手法を使用して、すべてのシステムコールを計測し、許可するシステムコールをホワイトリストに登録できます。

于 2012-05-05T17:19:50.577 に答える