sys_call_tableが予測可能な理由は何ですか?

sys_call_tableが予測可能な理由は何ですか?

2.4(またはそれ以降?)では、シンボルはエクスポートされsys_call_tableなくなり、フックシステムの呼び出しがより困難になります。

IDT から読み取ることでこの情報を引き続き取得できることを無視し、/boot/System.map-<kernel-version>このアドレスが再起動とマシン(同じカーネルバージョンを使用)の間で一定のように見える理由が何であるか疑問に思います。ダイナミックに作る価値はありませんか?静的でなければならない理由はありますか?

私の目標は次のとおりです。

sys_call_tableフッキングシステムコールをより難しくするためにもはやモジュールにエクスポートされなくなりますが、モジュール(カーネル空間プログラムなど)はアドレスが実行されているすべてのシステムで同じように見えますSystem.map。できます。 on 同じバージョンのカーネル。

ベストアンサー1

カーネルバージョン4.8以降、少なくともx86では、システムコールテーブルのアドレスを含むカーネルアドレス空間がランダムに指定されています。バラよりRANDOMIZE_BASEカーネル構成で基本的な詳細をご覧ください。

これは、指定されたアドレスがSystem.map役に立たず、システムコールテーブルのアドレスが起動するたびに変更されることを意味します。何かをデバッグし、それを使用するにはカーネルコマンドライン引数で起動してKASLRを無効にする必要がSystem.mapあります。nokaslr

おすすめ記事