システムコールを傍受し、そのパラメータを変更します。

システムコールを傍受し、そのパラメータを変更します。

私は、クロス、フィルタリング、パラメータの変更など、システムコールを可能な限りあらゆる方法で制御できるカーネルプログラムを作成することに興味があります。

私は2つの目標を探しています。

  1. システムコールとそのパラメータを読み、ポリシーに従ってそれをブロックするかどうかを決定します。
  2. パラメーターを変更してユーザーに渡す権限があります。

実際には(この寓話が本当かどうかはわかりません。)カーネルとそのシステムコールのビューを変更できるプロセスに対して単純な仮想化を実行したいと思います(たとえば、パブリック"/tmp/new_folder/foo.txt"システムコールを介してファイルを要求する場合))戻ります"/tmp/another_folder/foo2.txt"

私はこれがebpfを使用して行われるべきであると主張します。しかし、他の方法があれば歓迎します。

また、私は隠された参照この場合。フィルタリングして影響を与えるのではなく、追跡用に設計されているようです。そして私が試したことセキュリティコンピューティングbccよりも優れていますが、seccompを使用してパラメータにアクセスできないことは私にとって重要な要素です。だから私の答えは次のようになります。LSM。しかし、私はそれを行う方法を知らず、良い文書を見つけることができませんでした。

助けてくれてありがとう。

答え1

あなたはこれを行うことができますptrace(2)PTRACE_GETREGSETと を使用しますPTRACE_SETREGSET

システムコール(ファイルシステムパスなど)に渡された文字列は、実際にはユーザー空間バッファへのポインタとして参照として渡されます。システムコールを傍受すると、引数のポインタを変更するだけでなく、新しい文字列がまだない場合は、メモリのどこかに置く必要があります。

関連情報