web-dev-qa-db-ja.com

システムコールのラップ(信頼性が高く安全な方法)

Linuxでシステムコールを「ラップ」する信頼できる方法はありますか? (共有ライブラリ関数呼び出しをラップするためのLD_PRELOADと同様です。)

システムコールを「ラップ」する(そして、場合によっては信号を受信する)信頼できる安全な方法はありますか?そのプロセスは中断できません(適切なLinux実装を前提としています)?

はい。システムコール割り込みを使用します。 1つの移植可能な方法は、ptraceを使用することですが、これにより、システムコールごとにコンテキストスイッチが強制されるため、パフォーマンスオーバーヘッドが大きくなります。 Solarisでは、/ procを使用できます。/procを使用すると、ラッピングに関心のあるシステムコールのサブセットを指定できます。これにより、互換性を犠牲にしてパフォーマンスを向上させることができます。

Plash、Systrace、Subterfugueを見て、これらの種類のメソッドを使用するいくつかの機能するシステムを確認してください。また、さまざまなメカニズム(Linuxでのseccompを含む)を使用するChromeのサンドボックスも見てください。

3
D.W.

利用可能な多くの仮想化テクノロジーの1つを使用します。特定のプロセスで使用できるリソースを制限するだけの場合は、 cgroups などのjailメカニズムで十分です。プロセスがシステムコールを実行したときに何が起こるかをさらに微調整するには、 ユーザーモードLinux を確認してください。