10

ユーザーセッションにラッチし、そのユーザーに属するプロセスによって行われた各システムコールを監視するカーネルモジュールをゼロから作成したいと考えています。

誰もが考えていることは知っています-「straceを使用する」-しかし、収集したデータを使用して独自のログと分析を行いたいのですが、straceにはいくつかの問題があります-アプリケーションは「mmap」を使用してファイルに書き込むことができますファイルの内容が「open」システム コールの引数として表示されない場合、または書き込み権限のないアプリケーションが機密データをコピーするためにコアダンプを作成する場合があります。

これらの特殊なケースを処理し、独自のロギングを実行できるようにしたいと考えています。私は疑問に思っています-モジュールを介してすべてのシステムコールをルーティングするにはどうすればよいですか? カーネルコードに触れずにそれを行う方法はありますか?

ありがとう

4

2 に答える 2

4

あなたの質問に対する正確な答えはありませんが、数日前に論文を書いたので、あなたに役立つかもしれません:

http://www.cse.iitk.ac.in/users/moona/students/Y2157230.pdf/

于 2012-10-16T15:24:38.567 に答える
2

以前、カーネル モジュールを使用してシステム コール テーブルにパッチを適用することで、同様のことを行いました。パッチが適用された各関数は、次のようなことを行いました。

patchFunction(/*params*/)
{
   // pre checks
   ret = origFunction(/*params*/);
   // post checks
   return ret;
}

カーネルのデータ構造をいじり始めると、モジュールはバージョンに依存するようになることに注意してください。カーネル モジュールは、おそらく、インストールしている特定のカーネル バージョン用にコンパイルする必要があります。

また、これは多くのルートキットで採用されている手法であるため、セキュリティ ソフトウェアがインストールされている場合、このような行為を阻止しようとする可能性があることに注意してください。

于 2012-10-16T15:49:51.887 に答える