Linuxglibc幽灵漏洞测试与修复方法

简介:

Linuxglibc幽灵漏洞测试与修复方法

simeon

一、Linux glibc幽灵漏洞简介

2015128日互联网上爆出Linux glibc幽灵漏洞(glibc gethostbyname buffer overflowhttp://seclists.org/oss-sec/2015/q1/274),也有人将其称之为“20150127GHOST gethostbyname() heap overflow in glibc”,在CVE上的漏洞编号是CVE-2015-0235。攻击者可利用此漏洞实施远程攻击,并完全控制目标系统。

glibcGNU发布的libc库,即c运行库。glibclinux系统中最底层的api,几乎其它任何运行库都会依赖于glibcglibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现。glibc 囊括了几乎所有的 UNIX 通行的标准。

国外安全研究人员发现,glibc__nss_hostname_digits_dots()函数有缓冲区溢出漏洞。这一漏洞既可以本地利用,也可以远程利用。研究人员对漏洞进行了测试验证:向目标邮件服务器发送特别构造的邮件,从而获得了远程登录Linxu系统的shell脚本。通过这种方式可以绕过32位和64位系统上的所有现存保护机制(比如SSLRPIENX)。

glibc-2.2影响的GNU C函数最早版本是在200011月发布的。这一漏洞曾在20135月被修补(在glibc-2.17glibc-2.18版本之间)。但由于当时并没有被认定为安全威胁,包括Debian 7Red Hat Enterprise Linux 6 & 7 CentOS 5&6& 7Ubuntu 12.04在内的多数知名Linux版本在长达一年半的时间都没有修补幽灵漏洞,经测试以下版本均存在漏洞:

  • RHEL (Red Hat Enterprise Linux) version 5.x, 6.x, 7.x 

  • CentOS Linux 5.x, 6.x & 7.x 

  • Ubuntu Linux version 10.04, 12.04 LTS

  • Debian Linux version 7.x

  • Linux Mint version 13.0 

  • Fedora Linux version 19 y anteriores 

  • SUSE Linux Enterprise 11 y anteriores 

  • Arch Linux glibc version <= 2.18-1 

360安全公司研究人员分析Linuxglibc幽灵漏洞最容易的攻击入口是邮件服务器,和存在SSRF(Server-side Request Forgery)漏洞的WEB接口。值得庆幸的是,此漏洞目前还没有公开通用的攻击代码,这也给了服务器管理员们及时安装补丁的宝贵时间。

二、Linux glibc幽灵漏洞测试方法

1. Ubuntu & Debian检查

ldd –version

1Ubuntu受影响版本(https://launchpad.net/ubuntu/+source/eglibc):

Ubuntu 12.04 LTS: 2.15-0ubuntu10.10

Ubuntu 10.04 LTS: 2.11.1-0ubuntu7.20

2Debian gibc受影响版本(https://security-tracker.debian.org/tracker/CVE-2015-0235),Debian 7LTS: 2.13-38+deb7u7

eglibc (PTS)       squeeze   2.11.3-4   vulnerable

eglibc wheezy  2.13-38+deb7u6       vulnerable

Debian gibc已经修复版本:

squeeze (lts)    2.11.3-4+deb6u4    

wheezy (security)    2.13-38+deb7u7      

2. CentOS & RHEL检查

centos上执行“rpm -qglibc”命令,如图1所示,显示glibc的版本信息为glibc-2.5-118.el5_10.2


受影响版本:

CentOS 5:glibc-2.5-118.el5_10.2

CentOS 6: glibc-2.12-1.149.el6_6.5

CentOS 7: glibc-2.17-55.el7_0.5

RHEL 5: glibc-2.5-123.el5_11.1

RHEL 6: glibc-2.12-1.149.el6_6.5

RHEL 7: glibc-2.17-55.el7_0.5

查看RHEL 各个版本更多有关该漏洞的信息请访问:

https://security-tracker.debian.org/tracker/CVE-2015-0235

3.POC验证测试

把下面的代码保存为ghost.c

/*

 * GHOSTvulnerability check

 *

 * Usage: gcc ghost.c-o ghost && ./ ghost

 */

 

#include

#include

#include

#include

#include

 

#define CANARY "in_the_coal_mine"

 

struct {

  charbuffer[1024];

  charcanary[sizeof(CANARY)];

} temp = { "buffer", CANARY };

 

int main(void) {

  struct hostentresbuf;

  struct hostent*result;

  int herrno;

  int retval;

 

  /*** strlen(name) = size_needed - sizeof (*host_addr) - sizeof (*h_addr_ptrs) - 1; ***/

  size_t len =sizeof(temp.buffer) - 16*sizeof(unsigned char) - 2*sizeof(char *) - 1;

  charname[sizeof(temp.buffer)];

  memset(name,'0', len);

  name[len] ='\0';

 

  retval =gethostbyname_r(name, &resbuf, temp.buffer, sizeof(temp.buffer),&result, &herrno);

 

  if(strcmp(temp.canary, CANARY) != 0) {

   puts("vulnerable");

   exit(EXIT_SUCCESS);

  }

  if (retval ==ERANGE) {

   puts("not vulnerable");

   exit(EXIT_SUCCESS);

  }

 puts("should not happen");

 exit(EXIT_FAILURE);

}

 

    直接编译并执行: gcc ghost.c-o ghost && ./ghost 如果存在漏洞则会显示“vulnerable”,如图2所示。


也可以执行下面的命令,以检测是否存在漏洞

方法一:

rpm -qglibc

cat/etc/issue

wget 

gcc ghost.c-o ghost && ./ghost

方法二直接显示glibc的版本信息:

wget -OGHOST-test.sh http://www.antian365.com/lab/linux0day/GHOST-test.sh.txt

bashGHOST-test.sh

显示结果如下:

Vulnerableglibc version <= 2.17-54

Vulnerableglibc version <= 2.5-122

Vulnerableglibc version <= 2.12-1.148

Detectedglibc version 2.5 revision 118

Thissystem is vulnerable to CVE-2015-0235.

Pleaserefer to for remediationsteps

三、修复方法:

1. Ubuntu/Debian

Ubuntu/Debian上执行以下命令进行修复,修复后需要重启。

apt-get update && apt-get -y install libc6

2.Centos

Centos上执行“yumupdate glibc”后会有一个确认,输入“y”,大概会下载6个安装包,安装完成后需要重启计算机。

 

参考资料

1.360安全播报 http://bobao.360.cn/news/detail/1166.html

2. 国家漏洞库:http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2015-0235

3. http://seclists.org/oss-sec/2015/q1/274

4. 

-against-the-ghost-vulnerability



 本文转自 simeon2005 51CTO博客,原文链接:http://blog.51cto.com/simeon/1609466
相关文章
|
8月前
|
测试技术 开发者 Python
Python单元测试入门:3个核心断言方法,帮你快速定位代码bug
本文介绍Python单元测试基础,详解`unittest`框架中的三大核心断言方法:`assertEqual`验证值相等,`assertTrue`和`assertFalse`判断条件真假。通过实例演示其用法,帮助开发者自动化检测代码逻辑,提升测试效率与可靠性。
582 1
|
8月前
|
安全 NoSQL Shell
web渗透-SSRF漏洞及discuz论坛网站测试
SSRF(服务器端请求伪造)是一种安全漏洞,攻击者可诱使服务端发起任意请求,进而探测或攻击内网系统。常用于端口扫描、访问内部服务、读取本地文件等。常见防御包括限制协议、域名和IP,但可通过302跳转、短地址等方式绕过。
451 1
web渗透-SSRF漏洞及discuz论坛网站测试
|
8月前
|
机器学习/深度学习 人工智能 自然语言处理
如何让AI更“聪明”?VLM模型的优化策略与测试方法全解析​
本文系统解析视觉语言模型(VLM)的核心机制、推理优化、评测方法与挑战。涵盖多模态对齐、KV Cache优化、性能测试及主流基准,助你全面掌握VLM技术前沿。建议点赞收藏,深入学习。
2854 8
|
安全 前端开发 Linux
Immunity CANVAS Professional 7.27 (macOS, Linux, Windows) - 渗透测试和漏洞利用平台
Immunity CANVAS Professional 7.27 (macOS, Linux, Windows) - 渗透测试和漏洞利用平台
335 3
Immunity CANVAS Professional 7.27 (macOS, Linux, Windows) - 渗透测试和漏洞利用平台
|
编解码 缓存 Prometheus
「ximagine」业余爱好者的非专业显示器测试流程规范,同时也是本账号输出内容的数据来源!如何测试显示器?荒岛整理总结出多种测试方法和注意事项,以及粗浅的原理解析!
本期内容为「ximagine」频道《显示器测试流程》的规范及标准,我们主要使用Calman、DisplayCAL、i1Profiler等软件及CA410、Spyder X、i1Pro 2等设备,是我们目前制作内容数据的重要来源,我们深知所做的仍是比较表面的活儿,和工程师、科研人员相比有着不小的差距,测试并不复杂,但是相当繁琐,收集整理测试无不花费大量时间精力,内容不完善或者有错误的地方,希望大佬指出我们好改进!
1250 16
「ximagine」业余爱好者的非专业显示器测试流程规范,同时也是本账号输出内容的数据来源!如何测试显示器?荒岛整理总结出多种测试方法和注意事项,以及粗浅的原理解析!
|
11月前
|
测试技术
软考软件评测师——可靠性测试测试方法
软件可靠性是指软件在规定条件和时间内完成预定功能的能力,受运行环境、软件规模、内部结构、开发方法及可靠性投入等因素影响。失效概率指软件运行中出现失效的可能性,可靠度为不发生失效的概率,平均无失效时间(MTTF)体现软件可靠程度。案例分析显示,嵌入式软件需满足高可靠性要求,如机载软件的可靠度需达99.99%以上,通过定量指标评估其是否达标。
|
11月前
|
消息中间件 缓存 监控
性能测试怎么做?方法、流程与核心要点解析
本文系统阐述了性能测试的核心方法论、实施流程、问题定位优化及报告编写规范。涵盖五大测试类型(负载验证、极限压力、基准比对、持续稳定性、弹性扩展)与七项关键指标,详解各阶段任务如需求分析、场景设计和环境搭建,并提供常见瓶颈识别与优化实战案例。最后规范测试报告内容框架与数据可视化建议,为企业级实践提出建立基线库、自动化回归和全链路压测体系等建议,助力高效开展性能测试工作。
|
人工智能 自然语言处理 测试技术
AxBench:斯坦福大学推出评估语言模型控制方法的基准测试框架
AxBench 是由斯坦福大学推出,用于评估语言模型可解释性方法的基准测试框架,支持概念检测和模型转向任务,帮助研究者系统地比较不同控制技术的有效性。
446 5
AxBench:斯坦福大学推出评估语言模型控制方法的基准测试框架
|
数据可视化 前端开发 测试技术
接口测试新选择:Postman替代方案全解析
在软件开发中,接口测试工具至关重要。Postman长期占据主导地位,但随着国产工具的崛起,越来越多开发者转向更适合中国市场的替代方案——Apifox。它不仅支持中英文切换、完全免费不限人数,还具备强大的可视化操作、自动生成文档和API调试功能,极大简化了开发流程。