2010-12-11 7 views
6

私はcodepad.orgをチェックしていましたが、while(1)forkは次の出力を出しました。サンドボックス環境でプログラムを実行しているときにシステムコールを禁止する方法は?

許可されていないシステムコール:SYS_fork

チェック正確な詳細については、このリンクをクリックします。 http://codepad.org/rNR9mMVv

私は、ソケットを使ってシステムコールを無効にすることも知っています。

許可されていないシステムコール:SYS_socketcall

は、誰もが1サンドボックス環境でプログラムを実行する前に、特定のシステムコールを無効にする方法を教えてもらえますか?

+0

これは、C++や他のネイティブバイナリに固有のものではなく、カーネルレベルの問題だと思います。非ネイティブ環境でコードを実行できるC++インタープリタがない限り – JOTN

答えて

1

実際の関数の代わりに空のスタブまたは例外スローアを持つモックでランタイムライブラリを置き換えることによって、

+0

しかし、これらの機能の実際の機能を無効にするわけではありません。たとえば、fork()のランタイムライブラリを置き換えて、自分のコードでforkしたいが、他の人が投稿したコードでforkを無効にしたいのであれば、このメソッドはまだ動作するのだろうか?はいの場合は、私に教えてください..どのように..ありがとう。 – sp2hari

+0

私はちょうど仮定している、私は、適切な実装のために、あなたはいくつかの種類のサンドボックス環境を作成する必要がありますので、あなたのランタイムを複製する必要があると思います。 –

+2

動作しません。中に入る人は、インラインアセンブリを使用して、syscallゲートウェイに直接アクセスすることができます。 – Joshua

1

パフォーマンスペナルティを支払う場合は、ptrace()を使用することができます。私が今見つけることができない別の方法があります。

0

システムコールは、関数をオペレーティングシステムによってプロセスに注入することによって機能します。しかし、好きな実行形式のカスタムローダーを作成した場合は、自分のものとリンクする権限があります。また、実行可能ファイルをバイナリ形式で変更することもできます(形式によっては、別の動的ライブラリからこれらの関数を取得することもできます)。

0

私はこれが古い質問だと知っていますが、私は同じものを研究していたので、ここに私の提案です - SELinuxを使用してください。 Gentooプロジェクトには、SELinuxについて約nice stuffがあります。 SELinux Policy Types(4.b)とを特に見てください。特にというポリシーがあります。私はcodepad.orgについてはわかりませんが、同様のideone.comはGentooを使用しているので、SELinuxは最も簡単な方法です。

関連する問題