2

子プロセスが読み取りと書き込み以外のシステムコールを実行する場合(さらにこれらの呼び出しもフィルタリングしますが、それは別の話です)、子プロセスを強制終了したいのですが、デフォルトでいくつかのシステムコールが実行されます。

私は空のテスト子 (即座に終了) プログラムをコンパイルしました。また、子プログラムをフォークし、ptracing を有効にして実行する親プロセスもあります。親プロセスは PTRACE_SYSCALL を使用し、毎回 orig_eax をチェックします。私のテスト プログラムは、子が 49 回停止したことを報告します (これは、48 / 2 + 1 システム コールを意味すると思います)。

システム コール シーケンスが常に同じ (初期化) かどうか、および/または親で kill-on-syscall を開始できるタイミングと停止するタイミングを知ることができるかどうかを知りたいですか?

4

1 に答える 1

3

私はかつて同様の問題を抱えていました(トピックに関する私の質問を参照してください)。プログラムが起動すると、アプリケーションの初期化時 (共有ライブラリのロードなど) に多くのシステム コールが実行されてから、 が呼び出されmain()ます。私がしたことはchroot、アプリケーションが望ましくないファイルにアクセスするのを防ぐために、もう少し多くのシステム コールを許可し、別のセキュリティ手段 ( など) を使用することです。

より良いオプションは、何らかの方法でmain()プログラムの関数のエントリ ポイントを見つけ (デバッグ コードの記述については、このチュートリアルを参照)、そのポイント以降のシステム コールを無効にすることです。一般的なケースでそれが可能かどうかはわかりませんが、それが私が検索を開始する方法です。

エントリ ポイントを見つけた後、プログラムが特定のシステム コールを実行するのを制限する別の方法があります。PTRACE_SYSCALLを使用して、プログラムによって実行された各システム コールをチェックする代わりに、prctl(PR_SET_SECCOMP, ...)( を使用して) プログラムへの呼び出しを挿入しptrace()、プログラムを実行したままにします。

于 2012-11-27T13:46:09.937 に答える