DriverStudio Remote Control远程调用认证绕过漏洞及其利用研究

10 views
Skip to first unread message

has...@gmail.com

unread,
Sep 18, 2005, 9:34:42 AM9/18/05
to bluepoints
创建时间:2005-09-14 更新时间:2005-09-17
文章属性:原创
文章提交:cocoruder (frankruder_at_hotmail.com)

DriverStudio Remote
Control远程调用认证绕过漏洞及其利用研究
author:cocoruder
page:http://ruder.cdut.net
email:coco...@163.com && frank...@hotmail.com

漏洞名称:DriverStudio Remote Control远程调用认证绕过漏洞
发现者:cocoruder
类型:设计错误
更新时间:14/9/2005
受威胁的系统:
>=NuMega.DriverStudio.v2.7
已在如下版本中测试成功:
NuMega.DriverStudio.v2.7(windows 2000 sp4|windows xp sp1)
NuMega.DriverStudio.v3.0beta2(windows 2000 sp4|windows xp sp1)
未受威胁的系统:
目前未知
厂商:
http://www.compuware.com

漏洞描述:
SoftICE Driver
Suite是一款强大的windows内核级调试软件,有着广泛应用。其默认安装的"DriverStudio
Remote
Control"服务允许使用客户机的用户/密码认证通过的客户修改本地softice配置,但这个认证可被绕过,使得任意远程攻击者可修改本地softice配置。成功利用此漏洞可获取系统权限。

详细描述:
DriverStudio在默认安装的时候在系统中创建一个服务名为"DriverStudio
Remote
Control"的服务,对应进程名为"DSRSvc.exe",根据我这几天的分析,DSRSvc.exe主要实现了下面几个功能:
1.实现远程更改softice启动方式的rpc调用接口
2.实现远程更改softice配置文件的rpc调用接口

3.实现远程获取本地计算机及DriverStudio信息接口和远程重启计算机接口(这个是通过UDP数据包实现的)

如果远程计算机使用和本地一样的用户名/密码,在bin目录下找到dsconfig.exe,在命令行下输入dsconfig
-t
ip即可象修改本地配置一样修改远程配置(保存在drivers/winice.dat文件中)。其间采用DCE
RPC&NTLM协议通信/认证,分析显示它是把当前用户名/密码发送到远程进行认证的,如果我们自己发送数据包,在NTLM认证的时候使用空认证(NULL
Session
Login),同样可以认证通过并修改远程softice配置。而禁止系统的空连接仍可认证通过,可见是DriverStudio导致的问题。
另外,向目标机UDP 9110
端口发送如下缓冲区即可导致系统重新启动,这里没有进行任何身份验证。事实上,这是另一个独立的漏洞,偶测试在xp下会弹出重启倒计时的进度条并可cancel,在2000下会直接重启。
02 00 00 00 41 41 41 00 <-00000002为重启命令码
综合利用以上弱点可获取系统权限。

详细利用方法:

由于可以修改softice的配置,依赖softice强大的命令可以完成攻击。"INIT"配置项可配置在softice启动时运行的命令,结合我们可修改softice的启动方式,如果我们把softice设置成Automatic,softice就会随windows一起启动,启动的时候就会运行我们设置的softice命令,如果我们在命令上做些手脚,嘿嘿...事实上,我们拥有了对所有进程的所有内存空间的任意修改权限。但要安全而又通用地获取权限还是很有难度的,我本来想通过修改系统的某些特殊api的返回值来达到操作系统对我们"完全开放"的目的(比如任意ntlm验证都可成功什么的),但对windows核心实在不懂(如果有大牛知道了请告诉我:)),还好,偶想到了个比较好的办法,并在windows
2000 server+DriverStdio2.7上测试成功。
这里又用到了Dsrsvc.exe,它还监听UDP
9110端口,负责处理UDP的命令码(比如重新启动计算机)。任何发送到这个端口的数据包都是由DSStatusServer模块的如下代码处理的
.text:10003F59 push esi
.text:10003F5A push edx
.text:10003F5B call ??2@YAPAXI@Z ; operator
new(uint)
.text:10003F60 mov ecx, [esp+138h+len]
.text:10003F64 add esp, 4
.text:10003F67 mov esi, eax
.text:10003F69 lea eax, [esp+134h+fromlen]
.text:10003F6D push eax ; fromlen
.text:10003F6E push ebp ; from
.text:10003F6F push 0 ; flags
.text:10003F71 push ecx ; len
.text:10003F72 push esi ; buf
.text:10003F73 push edi ; s
.text:10003F74 call ds:recvfrom ;recvfrom
.text:10003F7A test eax, eax
;<------------modifit!
.text:10003F7C jle short loc_10003FA6
.text:10003F7E push esi
.text:10003F7F call sub_10003910

修改10003f7a这个地址的代码,改成jmp
esi(注意,偶测试过程中发现3.0beta2版本是edi指向buf,因此要改为jmp
edi),esi指向ws2_32!recvfrom的buffer,修改好后,我们对UDP
9110端口发送我们的exploit,Dsrsvc.exe接收完就会跳到我们的exploit执行~~
但是要注意的是,由于DSStatusServer为一动态链接库,10003F7A这个地址在虚拟空间是不好定位的,还好softice强大的命令又帮了我们大忙:),下断点
bpx recvfrom do "eb *esp ff,e6" ;ff,e6为jmp
esi机器码
当运行到recvfrom时esp即为返回地址指针,这个返回地址即是上面的10003F7A,为了在实际攻击中避免出现修改到别的地方去了,偶跟了下发现DSStatusServer的recvfrom函数的len参数始终为00000172h,于是
bpx recvfrom if *(esp+c)==00000172 do "eb *esp ff,e6"
中断后恢复运行,
bpx recvfrom if *(esp+c)==00000172 do "eb *esp ff,e6;x"
另外由于用到recvfrom函数,需要在配置文件里添加一项,
EXP=c:\windows\system32\ws2_32.dll
;这个地方偶是固定写进去的,55,EXP=\SystemRoot\System32\ws2_32.dll居然不行(why?)

远程调用/认证分析:
整个rpc调用过程如下(基与dsconfig -t ip的分析)
connect 135 port(local)---->rpc bind(local)---->rpc
bind_ack(remote)---->map request(local)---->map
response(remote)(返回监听的端口stice_port)
---->connect stice_port(local)---->bind
UUID(local)---->bind_ack(remote)---->AUTH(local)(认证,使用空认证)---->request(local)(命令请求)
---->reponse(remote)(返回成功否)

其中涉及两个rpc接口,分别为
UUID:32d90706-b698-4029-b236-e18ebff582b1
负责softice启动方式更改
UUID:10d1800c-af75-4249-b7a2-484dec69ed3a
负责更新winice.dat文件

攻击思路总结:

1.精心构造rpc调用实现修改远程配置文件winice.dat,并把softice启动方式改为Automatic
2.发送UDP重启码至target,并等待重启
3.重启后发送shellcode至UDP 9110端口

(这几天一直在想更好的利用方法,希望有大牛提出更好的利用方法)

测试程序:
1.modifit_config.cpp
2.send_reboot.cpp
3.send_shellcode.cpp
(出于责任和安全,这里不公开详细的攻击代码:))

解决方案:

厂商未提供相应补丁,建议用户禁止并停掉"DriverStudio
Remote Control"服务。
致谢:
感谢我的同事们,和zwell.
声明:

本文涉及技术知识仅供仅供安全研究与教学之用,使用者风险自负!

Reply all
Reply to author
Forward
0 new messages