SUSE关于Glibc缓冲区溢出漏洞CVE-2015-7547
漏洞描述
2016年2月19日,Google 的安全研究团队披露了glibc getaddrinfo溢出漏洞。经研究发现,所有Debian、Red Hat以及更多其它Linux发行版,只要glibc版本2.9及之后版本就会受到该溢出漏洞影响。攻击者可以通过该漏洞直接批量获取大量主机权限。glibc是GNU发布的libc库,即c运行库。glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc。glibc除了封装linux操作系统所提供的系统服务外,本身也提供了许多其它一些必要功能服务的实现。该漏洞受影响版本GNU 2.9及之后版本。
触发因素
CVE-2015-7547是一个基于堆栈的缓冲区溢出漏洞,当应用使用到getaddrinfo()函数(处理名字到地址以及服务到端口的转换)时,攻击者通过构造的域名、DNS服务器、中间人攻击利用该漏洞,导致在服务器上执行代码。
glibc通过alloca()函数在栈中为_nss_dns_gethostbyname4_r函数2048字节的空间,用于托管DNS响应。若响应大于2048字节,程序会从堆中重新分配一个缓冲区,并更新所有信息(缓冲区指针,缓冲区大小和响应大小)。在一定条件下,会出现栈缓冲区和新分配的堆内存的错误匹配,导致超过栈缓冲区大小的响应仍然存储在栈中,进而发生缓冲区溢出。触发该漏洞的利用向量十分普遍,且存在于ssh,sudo,curl等工具中。
涉及系统
① SUSE11 SP1/SP3:
a. SUSE11 SP1(通用):2.11.1-0.64.1.10204.0.0.PTE.967023之前的版本
b. SUSE11SP1(RM的AAA和onlineMediation产品):2.11.1-0.74.1之前的版本;
c. SUSE11SP3:2.11.3-17.95.2之前版本。
② SUSE10SP1/SP2:不涉及。
①
漏洞检测
1) SUSE版本查询方法:
# cat /etc/SuSE-release
2) Glibc版本查询方法:
linux:/ # rpm -qa | grep glibc
rpm -qa | grep glibc
整改措施
请下载以下操作系统安全补丁升级:
到相应官方网站或镜像下载SUSE 11 SP1 & SUSE 11 SP3补丁。
升级步骤:
# cd /tmp
# tar -zxvf glibc_service_upgrade-1.1.tar.gz
# cd glibc_service_upgrade
# vi hosts.lst
升级工具会使用root用户通过SSH登录待升级主机进行升级。一个待升级主机信息为一行,其中#开头的行为注释,参考示例如下:
#
10.71.271.51 123456
如果待升级主机进行了安全加固,不能通过root用户直接登录系统,需要填写一个非root用户的名称和密码。升级工具会首先使用这个非root用户通过SSH登录主机,之后切换到root用户对待升级主机进行升级,示例如下:
#
192.168.100.1 123456 sshusr 654321
将主机IP填写为“127.0.0.1”,可对升级服务器自身glibc包升级。
# ./check.sh
checking hosts, please wait......
host_ ip need _upgrade details
10.71.171.154 YES * glibc need to upgrade *
确保所有待升级主机输出类似如下信息,表示主机需要升级。
YES * glibc need to upgrade*
# ./upgrade.sh
upgrade.sh脚本执行输出类似如下信息:
============================= verifying host info ==========================
10.71.171.154 host information is correct
============================= checking =====================================
10.71.171.154 checking system
10.71.171.154 checking system completed
============================ statistic =====================================
host_ip need_upgrade details
10.71.171.154 YES * glibc need to upgrade *
============================ upgrading =====================================
10.71.171.154 uploading package
10.71.171.154 uploading package completed
10.71.171.154 upgrading system
10.71.171.154 upgrading system completed
============================= checking =====================================
10.71.171.154 checking system
10.71.171.154 checking system completed
============================ statistic =====================================
host_ip need_upgrade details
10.71.171.154 NO glibc already upgraded
# reboot
# rm -rf /tmp/glibc_service_upgrade/hosts.lst
回退
# cd /tmp/glibc_service_upgrade
# ./rollback.sh
rollback.sh脚本执行输出类似如下信息:
rollbacking hosts, please wait......
host_ip ………rollback_status….details
10.71.171.154….succeed….glibc already rollback
对于每个待回滚主机,输出“glibc already rollback”或者“glibc rollback succsed”表示升级成功
本文是万方安全研究院原创文章,
转载请标明出处:http://www.dengjibaohu.org/dbzg/173.html。