2

このコードをユーザー空間でルートとして実行すると、segfault が発生します。理由がわかりません。ルートキットを持っていると思います。アドレスが /boot/System.map-3.2.0-4-amd64 のアドレスと同じかどうかを確認したい

unsigned long hex;
unsigned long **sys_call_table;

for(hex = 0xffffffff810f8989; hex < 0xffffffff8160e370; hex += sizeof(void *))
{
    sys_call_table = (unsigned long **)hex;

    if(sys_call_table[3] == (unsigned long *)0xffffffff810f8989)
    {
        puts("sys_close's address has not been replaced by the rootkit");
    }
}

猫 /boot/System.map-3.2.0-4-amd64 | grep "必要な文字列"

ffffffff81401200 R sys_call_table
ffffffff810f9f9e T sys_read         // sys_call_table[0]
ffffffff810fa009 T sys_write        // sys_call_table[1]
ffffffff810f950d T sys_open         // sys_call_table[2]
ffffffff810f8989 T sys_close        // sys_call_table[3]
ffffffff8160e370 D loops_per_jiffy
4

1 に答える 1

3

から実行するrootだけでは十分ではありません。問題は、たとえばカーネルモジュールとしてuser spaceで実行することです。システム コールを呼び出すには権限があれば十分ですが、テーブルにアクセスすることはできませkernel spaceん。割り当てられたメモリにしかアクセスできません。rootuser space

于 2013-07-25T11:35:27.020 に答える