幽灵(GHOST)漏洞解析.docx

幽灵(GHOST)漏洞解析.docx

ID:27232996

大小:482.06 KB

页数:23页

时间:2018-12-02

幽灵(GHOST)漏洞解析.docx_第1页
幽灵(GHOST)漏洞解析.docx_第2页
幽灵(GHOST)漏洞解析.docx_第3页
幽灵(GHOST)漏洞解析.docx_第4页
幽灵(GHOST)漏洞解析.docx_第5页
资源描述:

《幽灵(GHOST)漏洞解析.docx》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、CVE-2015-0235:幽灵(GHOST)漏洞解析0x01摘要Qualys公司在进行内部代码审核时,发现了一个在GNUC库(glibc)中存在的__nss_hostname_digits_dots函数导致的缓冲区溢出漏洞。这个bug可达可以通过gethostbyname*()函数来触发,本地和远程均可行。鉴于它的影响,我们决定仔细分析它。分析完成后,我们也决定以“幽灵”(GHOST)命名此漏洞。我们的分析过程中得出的主要结论是:-通过gethostbyname()函数或gethostbyname2()函数,将可能产生一个堆上的缓冲区溢出。经由gethostbyname_r(

2、)或gethostbyname2_r(),则会触发调用者提供的缓冲区溢出(理论上说,调用者提供的缓冲区可位于堆,栈,.data节和.bss节等。但是,我们实际操作时还没有看到这样的情况)。-漏洞产生时至多sizeof(char*)个字节可被覆盖(注意是char*指针的大小,即32位系统上为4个字节,64位系统为8个字节)。但是payload中只有数字('0'...'9'),点(“.”),和一个终止空字符('')可用。-尽管有这些限制,我们依然可以执行任意的代码。我们开发了一套完整的针对Exim邮件服务器的攻击PoC,测试中发现可以绕过所有现有保护(ASLR,PIE和NX)。

3、且可以通杀32位和64位的机器。而且,在不久的将来,我们还会发布一个Metasploit的模块。-据悉,GNUC库的第一个易受攻击版本是glibc-2.2,发布于2000年11月10日,相当有年头了。-据了解,是有一些方法可以减轻影响的。事实上,这个漏洞其实在2013年5月21日就已经被修复了(在glibc-2.17和glibc-2.18的发行版之间)。不幸的是,当时它并没有被认为是一个安全威胁。其结果是,大多数稳定版和长期支持版本现在依然暴露在漏洞影响下,比如:Debian7(wheezy),红帽企业版Linux6和7,CentOS6和7,Ubuntu12.04。0x02分析

4、存在漏洞的函数__nss_hostname_digits_dots()由glibc的非重入版本的文件:nss/getXXbyYY.c,以及重入版本:nss/getXXbyYY_r.c提供。然而,这个函数的调用是由#ifdefHANDLE_DIGITS_DOTS来定义的,这个宏定义只在这几个文件有:-inet/gethstbynm.c-inet/gethstbynm2.c-inet/gethstbynm_r.c-inet/gethstbynm2_r.c-nscd/gethstbynm3_r.c以上这些文件实现gethostbyname*()函数族,因此也只有它们会调用__nss_

5、hostname_digits_dots(),并且可能触发它的缓冲区溢出。该函数的作用是:“如果主机名是IPv4/IPv6地址,就跳过费时的DNS查找”。glibc-2.17的代码如下:1.int 2. __nss_hostname_digits_dots (const char *name, struct hostent *resbuf, 1.                             char **buffer, size_t *buffer_size, 2.                             size_t buflen, struct 

6、hostent **result, 3.                            enum nss_status *status, int af, int *h_errnop) 4. { 5. 6.   if (isdigit (name[0]) 

7、

8、 isxdigit (name[0]) 

9、

10、 name[0] == ':') 7.     { 8.      const char *cp; 9.       char *hostname; 10.       typedef unsigned char host_addr_t[16]; 11.       hos

11、t_addr_t *host_addr; 12.       typedef char *host_addr_list_t[2]; 13.       host_addr_list_t *h_addr_ptrs; 14.       char **h_alias_ptr; 15.       size_t size_needed; 16. 17.      size_needed = (sizeof (*host_addr) 18.                     + sizeof 

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。