首页
社区
课程
招聘
[原创]Nvvsvc32.exe 溢出简要分析
2013-1-4 16:14 5699

[原创]Nvvsvc32.exe 溢出简要分析

2013-1-4 16:14
5699
最初看到这个漏洞的exp代码时,以为传说中的内核远程溢出出现了。后来发现这个溢出实际和驱动并没有什么关系,因此把题目换成了“Nvvsvc32溢出”。
        关于这个漏洞的一些细节已经在《NVIDIA Driver Helper Service栈溢出简单说明》一文中做了说明。漏洞调试之类的文章,不实际调试一番总是觉得云里雾里。于是动手做了一些分析,现把分析情况笔记如下,也让想了解这个漏洞的tx少走些弯路。
1、        分析环境:
驱动程序提供商        NVIDIA
驱动程序日期        2010-11-12
驱动程序版本        6.14.11.9838
服务名称        NVIDIA Display Driver Service
服务进程        nvsvc32.exe
需要说明的是,在windows xp下产生服务的程序是nvsvc32.exe,windows 7下产生服务的是nvvsvc.exe。

2、        关于管道与DACL
源代码说明中的管道名称有误,NVIDIA Display Driver Service使用的管道名称是\pipe\nvsr。使用pipelist可以查出使用的管道的名称是nvsr。
逆向nvsvc32.exe时,其创建管道的伪代码为:

int __stdcall sub_4051D6(int a1)
{
  HANDLE  tHandle; // eax@4
  DWORD i; // [sp-8h] [bp-40h]@1
  struct _SECURITY_ATTRIBUTES *v4; // [sp-4h] [bp-3Ch]@1
  HANDLE v5; // [sp-4h] [bp-3Ch]@5
  SECURITY_DESCRIPTOR  SecurityDescriptor;
  struct _SECURITY_ATTRIBUTES SecurityAttributes; // [sp+20h] [bp-18h]@1
  
  SecurityAttributes.nLength = 12;
  SecurityAttributes.lpSecurityDescriptor = &SecurityDescriptor;
  SecurityAttributes.bInheritHandle = 1;
  InitializeSecurityDescriptor(&pSecurityDescriptor, 1u);

  SetSecurityDescriptorDacl(&SecurityDescriptor, TRUE, NULL, NULL);
  
  sub_40506E();
  v4 = &SecurityAttributes;
  for ( i = 0; ; i = 0 )
  {
    hObject = CreateNamedPipeW(L"\\\\.\\pipe\\nvsr", 3u, 6u, 0xFFu, 0x2010u, 0x2010u, i, v4);
    if ( hObject == (HANDLE)-1 )
      break;
……                ……
}
以上代码也明确表示了管道名称为 \\\\.\\pipe\\nvsr,另外对SetSecurityDescriptorDacl函数的调用可以知道,由于bDaclPresent参数为true,将会使用pDacl参数和bDaclDefaulted 参数创建DACL,因此创建管道的Dacl是空。如果一个对象没有DACL,那么就是说这个对象是任何人都可以拥有完全的访问权限。

3、        关于ProtocolAction_Receive错误的说明:
从对程序代码的分析可以看出,要成功利用该漏洞一共需要9个步骤。但是,在调试时却发现执行到“Action 3 of 9:”时就已经出错退出。那么是什么原因造成退出的呢?
用IDA逆向该程序时,由于该程序是注册一个windows系统服务,在hexray 的辅助下,程序结构非常清晰。可以知道sub_ 00404E13(StartAddress)就是管道服务端线程的执行体。
该函数读取管道数据后,根据传入数据的第一个双字作为命令字节来决定程序的执行流程。
……        ……       
text:00404E79                 cmp     eax, 44h
.text:00404E7C                 jz      loc_404FA4
.text:00404E82                 cmp     eax, 47h
.text:00404E85                 jz      loc_404F32
.text:00404E8B                 cmp     eax, 52h
.text:00404E8E                 jz      loc_404F1A

.text:00404F1A                 push    20h             ; size_t
.text:00404F1C                 push    offset aNotImplemented ; "Not implemented"
.text:00404F21                 lea     eax, [ebp+7FD8h+var_8044]
.text:00404F24                 push    eax             ; wchar_t *
.text:00404F25                 call    _wcsncpy

对于0x52操作只是简单地将"Not implemented"字符串拷贝到目的缓冲区中,并且在循环时以0作为写入长度,将"Not implemented"字符串再写到管道中。因此,在第三步执行ReadPipe操作时,由于读取数据的长度为0,因此程序退出了。
这也是《NVIDIA Driver Helper Service栈溢出简单说明》一文中说明的“xp x32版下0x52命令不支持”的原因。

4、        漏洞可利用性说明:
由刚才不支持0x52操作可以说明,在xp 下这个漏洞不存在。(使用0x47号、0x57号操作不清楚,有兴趣的tx可以继续研究)
在在win7 x32版上只能够做到infoleak,原因《简单说明》一文中已经说明:“由于32位版下局部变量的内存布局源地址在目的地址的高位,所以这个洞只能造成infoleak。” 《简单说明》一文末尾给出的两个exe就是对这个结论的实际验证。通过infoleak可以吧stack cookie读取出来,但是最后得到的只是一个内存访问的一异常。
64位环境下,由于局部变量布局情况刚好相反,所以能够利用。老外的exp源代码的说明中已经给出。

5、其他
可笑的36x啊,在还不明了之前就瞎鼓噪,搞得满城风雨啊。

[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

收藏
点赞3
打赏
分享
最新回复 (22)
雪    币: 144
活跃值: (25)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
wsmfgf 2013-1-4 16:29
2
0
呵呵,顶下大牛
雪    币: 345
活跃值: (122)
能力值: ( LV2,RANK:150 )
在线值:
发帖
回帖
粉丝
cmdhz 3 2013-1-4 16:32
3
0
自己顶一下
http://bbs.360safe.com/thread-350852-1-1.html
雪    币: 820
活跃值: (380)
能力值: ( LV12,RANK:310 )
在线值:
发帖
回帖
粉丝
古河 6 2013-1-4 16:52
4
0
顶, 支持+学习
雪    币: 411
活跃值: (247)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
blackwhite 1 2013-1-4 17:15
5
0
相互顶,各种顶...
雪    币: 107
活跃值: (311)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Fido 2013-1-4 18:03
6
0
这个360的地址是什么情况?
转帖?还是?
雪    币: 219
活跃值: (738)
能力值: (RANK:290 )
在线值:
发帖
回帖
粉丝
viphack 4 2013-1-4 18:17
7
0
顶 顶~~~~~~学习了
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
keexoo 2013-1-4 18:54
8
0
顶雷Boss大大~~
数字真的,真的不可信。
雪    币: 155
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
kman 2013-1-4 22:29
9
0
看了楼主的帖子和360的新闻,第一感觉是莫名其妙,楼主到底是想说啥,和360讲的漏洞不就是一个吗?360也确实能防御啊?

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

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

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

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

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

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

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

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

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

又或者,楼主只是个卑微的冒别人之名的黑产者,看到我上面两句脸也不会红一下呢?
雪    币: 345
活跃值: (122)
能力值: ( LV2,RANK:150 )
在线值:
发帖
回帖
粉丝
cmdhz 3 2013-1-5 08:50
10
0
看来遇到360的人了。以前听说进了360后就会被洗脑,看来没说错。

向来对36x发布的各类不实安全预警信息嗤之以鼻。做出各种不切实际的夸大宣传,没没冠以“全球首家”的字样,最后总忘不了说“大家记得用360啊”,一种唯恐天下大乱坐收渔利的心态。

不知道多少不明就里的被欺骗,给其他人造成了多少不必要的麻烦。

bs 360
雪    币: 155
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
kman 2013-1-5 08:54
11
0
批评你几句就是“360的人”,“被洗脑了”,你这跟着别人屁股后面分析Poc的心灵该有多强大啊,就你这水平和态度,没资格对别人“嗤之以鼻”
雪    币: 345
活跃值: (122)
能力值: ( LV2,RANK:150 )
在线值:
发帖
回帖
粉丝
cmdhz 3 2013-1-5 08:56
12
0
呵呵,晦气啊,研究点东西怎么就招惹了个骂街的。
雪    币: 155
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
kman 2013-1-5 09:28
13
0
还是多亏你自己先开了个骂街的好头啊,掺上你那毫无技术含量的分析现成poc就敢大言不惭的所谓"研究",口水四溅
雪    币: 345
活跃值: (122)
能力值: ( LV2,RANK:150 )
在线值:
发帖
回帖
粉丝
cmdhz 3 2013-1-5 09:33
14
0
好无聊
雪    币: 78
活跃值: (85)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
baixinye 1 2013-1-5 09:43
15
0
花时间说这么多P话,还不如去“分析分析别人研究剩下来的POC”
雪    币: 81
活跃值: (165)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
idhyt 2013-1-5 09:48
16
0
kman霸气测漏 让人无法直视。。。
雪    币: 155
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
kman 2013-1-5 10:10
17
0
我搞漏洞的时候你还不知道POC是啥呢!你有什么资格跟我"P话"?
雪    币: 267
活跃值: (24)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
youstar 2 2013-1-5 10:45
18
0
顶cmdhz,文章不错~
雪    币: 306
活跃值: (85)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
hack一生 1 2013-1-5 10:49
19
0
顶下cmdhz大牛。。膜拜啊..
雪    币: 540
活跃值: (264)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
KiDebug 4 2013-1-5 11:19
20
0
我搞漏洞的时候,Visual Studio 都出到2010了。
雪    币: 429
活跃值: (1875)
能力值: ( LV17,RANK:1820 )
在线值:
发帖
回帖
粉丝
riusksk 41 2013-1-5 13:58
21
0
围观楼上2位……
一技术帖变成喷水帖了
雪    币: 146
活跃值: (182)
能力值: ( LV13,RANK:220 )
在线值:
发帖
回帖
粉丝
instruder 4 2013-1-5 15:26
22
0
看到此话题 特地找回看雪密码 上来发一贴
雪    币: 357
活跃值: (2603)
能力值: ( LV3,RANK:25 )
在线值:
发帖
回帖
粉丝
KooJiSung 2013-1-6 00:20
23
0
火速赶来围观数字公司
游客
登录 | 注册 方可回帖
返回