首页
社区
课程
招聘
[注意]NVIDIA Driver Helper Service栈溢出简单说明
发表于: 2013-1-3 15:43 6101

[注意]NVIDIA Driver Helper Service栈溢出简单说明

2013-1-3 15:43
6101

详情见36x新闻,本来不想发出来的,不过看到36x的人又在放屁吓人.还是发出来吧.
首先这个洞和nvidia的驱动没有一毛钱关系,不是内核级的漏洞.
NVIDIA Driver Helper Service,是一个r3层的服务.
程序是nvvsvc.exe(win7)或nvvsvc32.exe(xp)
这个程序启动后会创建一个命名管道\\pipe\nvsr,比较特别的是这个管道的dacl是空,也就是说
everyone都可以访问.
然后重要的是这个洞其实只针对win7 x64版有效.在win7 x32版上只能够做到infoleak.
xp x32版下0x52命令不支持,同时老版本的xp版nvsvc32.exe根本没建命名管道.所以也就没360x吹的那么凶,另外这个洞远程利用的情况下对于win7系统关闭了空连接共享所以必须要一个
用户名密码(且密码不能为空).
下面来看洞:win7 32位版nvvsvc
loc_4035D8:             ; 取后面数据的长度
lea     eax, [ebp-4022h]
push    ebx             ; ebx=2000h
push    eax
mov     [ebp+nNumberOfBytesToWrite], ecx ; ecx=3h
call    sub_43132C      ; 返回时如果5200后面是4000h个41h,那么eax=2000h
pop     ecx
lea     eax, [ebp+eax*2+var_4020] ; eax=ebp+4000h-4020h=ebp-20h
pop     ecx
mov     ecx, [eax]      ; [ebp-20]=00000000h,ecx=0
add     eax, 8          ; eax=lea [ebp-18h]
mov     [ebp+nNumberOfBytesToWrite], ecx
mov     ecx, [eax-4]    ; eax=lea [ebp-1ch],[eax]中的值为00004078h
push    eax             ; eax为地址,地址中的值是收到的数据中4078h后面的41 41 ..
mov     [ebp+dwType], eax
lea     eax, [ebp+nNumberOfBytesToWrite]
push    eax             ; [eax]的值为0
lea     eax, [ebp-4022h]
mov     [ebp+lpData], ecx ; ecx=00004078h
push    eax             ; eax为地址,地址中的值为41 00 41 00....
cmp     dword_491550, edi ; edi=0
jle     short loc_403632

然后在下面触发
loc_40363D:
mov     esi, [ebp+lpData]
add     esp, 0Ch
push    esi             ; 4078h,copy的长度
push    [ebp+dwType]    ; 地址中的值是收到的数据中4078h后面的41 41 ..
lea     eax, [ebp+Buffer] ; 地址中的值会发送回攻击者
push    eax
call    loc_430720      ; bug!!!
add     esp, 0Ch
mov     [ebp+nNumberOfBytesToWrite], esi
jmp     loc_403900

最后再来看内存布局:
ebp-8044h response buffer ---目的
------------------------------recivebuf
ebp-4024h 52 00
ebp-4022h 41 41
......... 41 41
ebp-0024h 41 41
ebp-0022h 00 00
ebp-0020h 00 00 00 00
ebp-001ch 20 00 00 00  -->length
ebp-0018h 41 41 41 41 --->源
ebp-0014h 41 41 41 41
ebp-0010h 41 41 41 41
ebp-000ch 41 41 41 41
ebp-0008h 41 41 41 41
-----------------------------recivebuf
ebp-0004h cookie

漏洞原理:有漏洞的nvvsvc会读recivebuf,判断头两字节是否为52h,如果是跳过52 00后面
的字符串,然后读ebp-1c处的长度(没有任何效验),源为length的偏移往后ebp-18h,并把这些数据移到ebp-8044处的responsebuf,然后调用writefile把数据发给攻击者.如果length定义大点
就会读出ebp-4h处的stack cookie并发给攻击者.
由于32位版下局部变量的内存布局源地址在目的地址的高位,所以这个洞只能造成infoleak.
64位的情况刚好相反,所以能够利用,具体可以见老外的exp不多说.

注:
让win7 32位版的nvvsvc在xp 32位版上运行要改exe的四个地方
1
改引入表的reggetvaluew为regclosekey,因为xp下没这个函数
2
程序入口getcommandlinea调用后改为jmp 00403988
3
8D 4D EC                lea     ecx, [ebp+ThreadId]
51                      push    ecx             ; lpThreadId
6A 04                   push    4               ; CREATE_SUSPENDED
FF 75 F8                push    [ebp+hObject]   ; lpParameter
89 45 EC                mov     [ebp+ThreadId], eax
68 75 34 40 00          push    offset StartAddress ; lpStartAddress
50                      push    eax             ; dwStackSize
50                      push    eax             ; lpThreadAttributes
FF 15 98 B0 46 00       call    ds:CreateThread
89 45 F0                mov     [ebp+hThread], eax
E8 F0 E8 FF FF          call    sub_402313      ; 这个call要注解掉

4
loc_403632:
lea     edi, [ebp+lpData]
call    sub_4025D0      ; nop掉

附件说明:
nvvsvc32.rar是把win7 32位版的nvvsvc改了下让其可以在xp和win下运行不管你是否有nvidia的显卡
exp是改的老外的攻击程序,读32位版的cookie.(ps:老外还是很牛的)
攻击成功效果:
C:\Documents and Settings\mj0011\桌面\新建文件夹\ms0x-0xx\nvidia pipe>exp local
  ** Nvvsvc.exe Nsvr Pipe Exploit (Local/Domain) **
                 [ () peterwintrsmith]
- Win7 x64 DEP + ASLR + GS Bypass - Christmas 2012 -

        Action 1 of 9:  - CONNECT

        Action 2 of 9:  - CLIENT => SERVER
                Written 16416 (0x4020) characters to pipe

        Action 3 of 9:   - SERVER => CLIENT
                Read 32 (0x20) characters from pipe

        Action 4 of 9: Building exploit ...
                 => Stack cookie 0xb5b04abd:

        Action 5 of 9:  - CLIENT => SERVER
                Written 16416 (0x4020) characters to pipe

        Action 6 of 9:   - SERVER => CLIENT
                Read 16384 (0x4000) characters from pipe

        Action 7 of 9:  - CLIENT => SERVER
                Written 16416 (0x4020) characters to pipe

        Action 8 of 9:   - SERVER => CLIENT
!! Error reading from pipe (at least, no data on pipe)


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 6
支持
分享
最新回复 (10)
雪    币: 411
活跃值: (247)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
补充下:这个洞新手拿来练手还是非常不错的,只是实战攻击很不容易找到适合的利用场境.
2013-1-3 15:54
0
雪    币: 1491
活跃值: (985)
能力值: (RANK:860 )
在线值:
发帖
回帖
粉丝
3
楼主说下如何构建合适的环境,比如说适合那些显卡及具体型号。呵呵
2013-1-3 19:02
0
雪    币: 411
活跃值: (247)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
nvvsvc32.rar是把win7 32位版的nvvsvc改了下让其可以在xp和win下运行不管你是否有nvidia的显卡
2013-1-3 21:34
0
雪    币: 284
活跃值: (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
mark!mark!
2013-1-4 00:15
0
雪    币: 345
活跃值: (122)
能力值: ( LV2,RANK:150 )
在线值:
发帖
回帖
粉丝
6
哈哈,顶一下blackwhite
2013-1-4 11:04
0
雪    币: 345
活跃值: (122)
能力值: ( LV2,RANK:150 )
在线值:
发帖
回帖
粉丝
7
又写了篇拙文
http://bbs.pediy.com/showthread.php?p=1131106#post1131106
2013-1-4 16:22
0
雪    币: 155
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
看了楼主的帖子和360的新闻,第一感觉是莫名其妙,楼主到底是想说啥,和360讲的漏洞不就是一个吗?360也确实能防御啊?

再仔细看一看,才发现楼主完全是在 抠字眼  

首先,360的新闻里根本没提到这个是“内核”漏洞,所谓“驱动程序”其实广义就包括了RING3的服务等组件,难道你去驱动网站下回来的“硬件驱动”就光一个.SYS吗?

其次,这个漏洞在最新的NV显卡驱动上生效,而且影响WIN7,当然可以算一个严重的安全漏洞,360出防御程序,也确实能防御攻击,这有什么问题值得你喷?

不管你说攻击成功率的问题,还是能INFOLEAK或远程利用的攻击,出防御总比不出防御的好吧?防御了还要挨喷有点没天理吧?

最后说到影响平台的问题,就算真的只影响X64了,就是小问题了?真的只能INFOLEAK,这就不是问题了?

这个漏洞本质是权限配置错误,缓存溢出只是引子,权限在全系统下配置都有问题,当然是影响全系统。NVVSVC32的通讯代码里就没有别的漏洞了?别的漏洞能不能利用,影响多少平台呢?

还是说楼主是在为喷而喷呢,在为喷而喷,吸引眼球,喷个出名上,找一家有实力的大公司是最保险的了。

不过换位思考一下,如果楼主也是在这样大的安全公司里工作,他能做到像被他喷的这家公司一样,及时发现新的安全威胁、分析、研究出防御方案、升级发布么?

恐怕只能像楼主现在这样,从“别人的新闻”里后知后觉地得知消息,再分析分析别人研究剩下来的POC而已了吧?

又或者,楼主只是个卑微的冒别人之名的黑产者,看到我上面两句脸也不会红一下呢?
2013-1-4 22:34
0
雪    币: 81
活跃值: (165)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
楼上霸气测漏,无法直视。
2013-1-5 09:46
0
雪    币: 433
活跃值: (1870)
能力值: ( LV17,RANK:1820 )
在线值:
发帖
回帖
粉丝
10
我是来围观8楼的,论坛上关于该漏洞的2篇分析文章都得到神一样的回复……
2013-1-5 13:55
0
雪    币: 192
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
Action 8 of 9:   - SERVER => CLIENT
!! Error reading from pipe (at least, no data on pipe)

第九步出错,用户没加起,nvdia服务挂了. 测试环境win7. 64bit.求联系方式.楼主 !
2013-4-16 16:47
0
游客
登录 | 注册 方可回帖
返回
//