分页:
上一页 1 2 3 4 5 [6] 7 下一页
首先,恶意程序可以勾连包含除错处理程序(debug handler)地址的IDT入口1,这样将暂停记录运行的指令数。当它完成工作时,再恢复 IDT入口1。这样rootkit中所执行的指令数不会被记录。
我们可以使用intel的除错寄存器来防止这类的攻击。可以使用DR0和DR1寄存器对IDT入口1进行写保护。并且为防止rootkit向除错处理程序的开始处写入Jmp指令,还需对其进行读保护。换句话说,我们不想让rootkit发现除错处理程序的地址。但单纯对IDT入口进行读保护是不行的,系统会蓝屏。但有一简单的解决方法,就是增加额外的一层。见图9。
还有一种攻击的方法,在rootkit运行时,其将TF位清零,并在恶意操作完成时恢复TF位,这样检测工具也只能发现运行的指令数和正常的系统有细微差别。
另外,rootkit还能检查TF位, 如发现被跟踪,则不进行恶意操作。这种行为并不会影响rootkit的正常工作,因为只有被检测的进程才被设置TF位。
我们可以防止这种攻击,应该注意到的是运行每一个系统指令前,都会运行我们的除错处理程序。以下是简单的防预方法:
如果除错处理程序发现上一个运行指令是pushf(将EFLAGS寄存器压入堆栈),则运行如下操作。
and [esp], 0xfffffeff;
及清TF位。同样,如果下一条指令是popf(从堆栈载入EFLAGS的值),则运行如下操作。
or [esp],0x100;
及设TF位。这样rootkit就不能更改TF位。
这样的预防几乎可够了,但还不充分。Rootkit仍能以以下方法发现其被跟踪:
setTFbit();
分页:
上一页 1 2 3 4 5 [6] 7 下一页