Win2K通过调试寄存器提升权限的漏洞

/ns/ld/win/data/20011118005118.htm

漏洞名称:Win2K通过调试寄存器提升权限的漏洞

受影响的系统:

Win2K, Win2K SP1

不受影响的系统:

微软宣称Win2K SP2中已解决本问题,但目前尚未得到证实。

漏洞描述:

如果某人能够在目标Win2K系统上执行程序,则他可以提升自己的权限,至少他可以使自己对%SystemRoot%\system32目录和注册表中的HKEY_CLASSES_ROOT分支有写访问权限。

这是因为x86调试寄存器DR0~DR7对于所有进程来说是全局性的。因此在一个进程中所设的硬件断点会影响其它的进程和服务。如果该断点在某个服务中被触发,就会引发一个单步异常,该进程/服务就会被终止。该服务被终止后,就有可能劫持其受信任的命名管道,当另一个服务向这个命名管道写入时,就有可能扮演(impersonate)该服务。

<* 来源:Georgi Guninski(guninski@guninski.com)*>

测试程序:

Georgi Guninski给出一个演示程序:
http://www.guninski.com/pipe3.cpp

该程序通过在CALC.EXE中设置硬件断点来杀掉LSASS.EXE,劫持了命名管道\\.\pipe\lsass,并启动taskmgr.exe。
如果你看到来自CALC.EXE之外的单步异常对话框或(和)蓝屏死机,则存在漏洞。

该程序有两个可能需要修改的参数,一个是LSASS.EXE的进程ID,另外一个是可能会使LSASS.EXE引起单步异常的ESP寄存器的值,这个值可以通过察看LSASS.EXE的某个线程的堆栈指针而得到。另外,如果遇到蓝屏死机的情况,可能还需要修改Sleep( )的参数。

该程序将会创建一个文件c:\winnt\system32\vv1.vv,并在注册表中创建一个键HKEY_CLASSES_ROOT\vv。