

# したいこと

特定のシステムコールの引数（中身）をログとして記録したいです。

[code]

    writev(1, [{iov_base="l", iov_len=1}, {iov_base=NULL, iov_len=0}], 2) = 1
    
[/code]

# 躓いているところ

フックしたいシステムコールはわかっていますが、それに必要なヘッダだったり、コードの書き方がわからないです。

以下のコードを参考に書いていますが、そもそも以下のコード(パケットキャプチャのコード)自体も、変数がきちんと定義されていないというエラーが出ており、お手上げ状態です。

[Linuxカーネルを読解してパケットキャプチャツールを作ろう！カーネルモジュール開発入門！](https://nttdocomo-
developers.jp/entry/202212251200)

# やったこと

[第3回 侵入者の不利な情報を隠すLKM
rootkitの仕組み](https://atmarkit.itmedia.co.jp/fsecurity/rensai/rootkit03/rootkit02.html)

unameシステムコールをフックする方法も試しましたが、.oファイルはinsmodできないのと、makefileを書いてみましたが、

[code]

     fatal error: sys/syscall.h: No such file or directory
        7 | #include <sys/syscall.h>
    
[/code]

と出てきます。 unistd.hに変更してもダメでした。

# 教えてほしいこと

LKMでシステムコールのフックはできるのでしょうか？  
他に、システムコールの内容を盗み見できる手法(ptraceは知っています)はないのでしょうか。

よろしくお願いします。


CC BY-SA 4.0
2023-08-19T07:57:37.887
95983
2023-08-20T09:29:40.257
2023-08-19T08:08:58.683
3060
58699
question
linux c
LKMを用いたシステムコールのフックについて


LKMでシステムコールのフックはできます。  
実例だと、ウイルス対策ソフトがI/O系のシステムコールをフックして監視や検疫を行なっています。

＃フックの方法は、コメント欄に記述があるので割愛します。

* * *

LKMの参照記事がかなり古い(2003年)ので、最新の情報を参照することをお勧めします。  
ディストリビューションによって、準備の手順に差異はあると思いますが、ビルドの手順は以下の通りと思います。(RHEL8の文書)

> カスタムカーネルモジュールのコンパイル
>
> <https://access.redhat.com/documentation/ja-
> jp/red_hat_enterprise_linux/8/html/managing_monitoring_and_updating_the_kernel/proc_compiling-
> custom-kernel-modules_managing-kernel-modules>

＃最新のLinuxだと、`make modules`でビルドして、`.ko`ファイルを作成する必要があるかと。


CC BY-SA 4.0
2023-08-20T09:29:40.257
95990
2023-08-20T09:29:40.257
20098
95983
answer