ptrace
最も明白なツールのようですが、それ以外は…
util-linux[-ng] にはコマンド unshare
があります 、カーネルの clone
を使用します /unshare
インターフェイス。 unshare -n
まで新しいプロセスを実行すると (または clone(CLONE_NEWNET)
)、それが作成するすべてのネットワーク ソケットは、別の名前空間にあります。これはカーネル リソースの問題を解決しませんが、プロセスをサンドボックス化します。
Linux カーネルは、prctl(PR_SET_SECCOMP, 1)
で入力されるモードである seccomp もサポートしています。 これにより、プロセス (実際にはスレッド) が read
以外のシステムコールを呼び出さなくなります 、 write
、 exit
、および sigreturn
.これは非常に効果的なサンドボックスですが、変更されていないコードで使用するのは困難です。
socket
を許可しない SELinux ドメインを定義できます /bind
/等。呼び出し、その型への動的遷移を実行します。これには (明らかに) SELinux ポリシーを積極的に適用するシステムが必要です。 (おそらく、AppArmor と TOMOYO でも同様のことが可能ですが、私はそれらのどれにもあまり詳しくありません。)
systrace を見てみましょう - ソケットに限定されませんが、汎用の syscall ポリシー ジェネレーター/エンフォーサーです。引用:
GNU/Linux への移植が完了し、カーネル パッチが Marius Eriksen によって積極的に維持されています。 ptrace バックエンドを使用して、カーネルを変更せずに実行できます。
免責事項 - Linux で試したことはありません。