前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux底层函数库glibc漏洞核查整改指引

Linux底层函数库glibc漏洞核查整改指引

原创
作者头像
马哥linux运维
修改2019-07-05 18:48:21
1.9K0
修改2019-07-05 18:48:21
举报

一、 漏洞概要

近日,Linux底层函数glibc 的 DNS 客户端解析器被发现存在基于栈的缓冲区溢出漏洞。攻击者可借助特制的域名、 DNS 服务器或中间人攻击利用该漏洞执行任意代码,甚至控制整个系统。

二、 漏洞原理

攻击者可在恶意域名服务器创建恶意的DNS域名,诱骗用户访问查找恶意域名,并最终得到恶意服务器的 buffer-busting 响应。该域名被嵌入服务器日志中,一旦解析就会触发远程代码执行,SSH客户端也会因此被控制。

glibc通过alloca()函数在堆栈中保有2048字节,这个函数响应DNS查询请求的函数_nss_dns_gethostbyname4_r() ,然后是send_dg()和send_vc()两个函数。如果响应大于2048字节,就会从堆分配一个新的缓冲区并更新所有的信息,包括缓冲区指针、新的的缓冲区大小和响应包大小。在某些情况下,造成堆栈缓冲之间的不匹配,并会分配新的堆。最后的结果就是,堆栈缓冲将被用于存储DNS响应,即使响应包大小超过了堆栈缓冲,以及分配了堆缓冲。该行为导致堆栈缓冲的溢出。关键问题存在于resolv/res_send.c中,并在使用getaddrinfo()函数调用时触发。当启动sudo、curl或其他工具时,均可触发此漏洞利用。

三、 漏洞影响范围

所有Debian系列、 Red Hat 系列的 Linux 发行版中glibc版本大于 2.9 均受该漏洞影响,低于2.9的有可能受此漏洞影响。

四、 检查方法

方法一.检查是否存在该漏洞最简单的方法为查看glibc版本,查看指令为ldd –version,可见图4-1。另外一种方法为输入glibc库的名称(如libc.so.6),在基于Debian的 64 位系统上:$ /lib/x86_64-linux-gnu/libc.so.6。

图4-1

方法二. 在linux命令行“输入”glibc库的名称(如,libc.so.6),就像命令一样执行。

  输出结果会显示更多关于glibc库的详细信息,包括glibc的版本以及使用的GNU编译器,也提供了glibc扩展的信息。glibc变量的位置取决于Linux版本和处理器架构。

  在基于Debian的64位系统上:

$ /lib/x86_64-linux-gnu/libc.so.6

  在基于Debian的32位系统上:

$ /lib/i386-linux-gnu/libc.so.6

  在基于Red Hat的64位系统上:

$ /lib64/libc.so.6

  在基于Red Hat的32位系统上:

$ /lib/libc.so.6

4.1 glibc版本大于2.9

假如检查中发现glibc版本为大于2.9版本,可确认存在该漏洞。

4.2 glibc版本小于2.9

假如检查中发现glibc版本为小于2.9版本,可尝试使用参考信息中附件glibc漏洞利用POC工具,验证是否存在漏洞(工具在参考信息已提供压缩包)。POC测试步骤如下:

1. 更改DNS解析为127.0.0.1

2. 执行服务端代码(服务器需安装python):CVE-2015-7547-poc.py

3. GCC编译客户端代码:CVE-2015-7547-client.c , 执行编译后代码 CVE-2015-7547-client

4. 若存在漏洞,会造成Segmentation Fault或段错误,见图5-1。

图5-1

五、 漏洞利用难度

网上已公布漏洞利用工具,利用难度一般。

六、 整改办法

1. 网络侧拦截:根据系统运行实际情况,在防火墙等设备限制所有TCP协议的DNS响应包大小在1024字节之内,并丢弃超过512字节的UDP协议DNS包。

2.更新glibc版本

(1)联网更新

CentOS/RHEL/Fedora系统:#yum install glibc -y Debian/Ubuntu系统:#apt-get update && apt-get install libc6

(2)手工更新

下载glibc ,地址:http://ftp.gnu.org/gnu/glibc/glibc-2.23.tar.gz

下载后通过U盘或者中心网络系统通过该安装包下放到根目录/root

操作指令:

#tar -xvf glibc-2.23.tar.gz

#mkdir glibc-build-2.23

#cd glibc-build-2.23

#../glibc-2.23/configure--prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin

#make & make install

#cd glibc-build-2.23

#ll libc.so.6

#ldd --version

注:更新补丁后,所有调用 glibc 的服务均需要重启,请相关人员根据实际情况进行操作;另外升级glibc可能导致系统故障,建议在测试服务器测试后再到将生产服务器进行升级。

发布于 10:47

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、 漏洞概要
  • 二、 漏洞原理
  • 三、 漏洞影响范围
  • 四、 检查方法
  • 4.2 glibc版本小于2.9
  • 五、 漏洞利用难度
  • 六、 整改办法
相关产品与服务
测试服务
测试服务 WeTest 包括标准兼容测试、专家兼容测试、手游安全测试、远程调试等多款产品,服务于海量腾讯精品游戏,涵盖兼容测试、压力测试、性能测试、安全测试、远程调试等多个方向,立体化安全防护体系,保卫您的信息安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档