Ghost 漏洞 - CVE-2015-0235

dev*_*ull 13 linux security glibc vulnerability distributions

Ghost 漏洞是否需要访问(如作为登录用户)访问受影响的操作系统?有人可以澄清“能够进行应用程序调用的远程攻击者”吗?我似乎只找到直接在本地系统上运行的测试,而不是从远程主机上运行的测试。

到目前为止,我从多个来源收集的有关Ghost 漏洞的所有信息(归功于这些来源),我已在下面发布了答案,以防其他人感到好奇。

编辑,我找到了我的答案:

在代码审计期间,Qualys 研究人员发现 glibc 的 __nss_hostname_digits_dots() 函数中存在缓冲区溢出。此错误可以通过所有 gethostbyname*() 函数在本地和远程触发。应用程序主要通过 gethostbyname*() 函数集访问 DNS 解析器。这些函数将主机名转换为 IP 地址。

dev*_*ull 20

从Qualys回答我的问题:

在我们的测试过程中,我们开发了一个概念验证,我们将专门创建的电子邮件发送到邮件服务器,并可以将远程 shell 发送到 Linux 机器。这绕过了 32 位和 64 位系统上的所有现有保护(如 ASLR、PIE 和 NX)。


我在下面为其他人整理的研究:


免责声明

尽管许多其他线程/博客可能会告诉您什么,但我建议不要在没有彻底测试这些glibc更新的情况下立即盲目地更新您拥有的每个操作系统。据报道,glibc 更新导致大量应用程序段错误,迫使人们将 glibc 更新回滚到以前的版本。

不能简单地在没有测试的情况下大规模更新生产环境。


背景资料

GHOST 是影响 glibc 库中 gethostbyname() 和 gethostbyname2() 函数调用的“缓冲区溢出”错误。此漏洞允许远程攻击者通过应用程序调用这些函数中的任何一个来执行具有运行应用程序用户权限的任意代码。

影响

gethostbyname() 函数调用用于 DNS 解析,这是一个非常常见的事件。要利用此漏洞,攻击者必须通过向执行 DNS 解析的应用程序提供无效的主机名参数来触发缓冲区溢出。

当前受影响的 Linux 发行版列表

RHEL(红帽企业 Linux)版本 5.x、6.x 和 7.x

RHEL 4 ELS              fix available ---> glibc-2.3.4-2.57.el4.2
Desktop (v. 5)          fix available ---> glibc-2.5-123.el5_11.1
Desktop (v. 6)          fix available ---> glibc-2.12-1.149.el6_6.5
Desktop (v. 7)          fix available ---> glibc-2.17-55.el7_0.5
HPC Node (v. 6)         fix available ---> glibc-2.12-1.149.el6_6.5
HPC Node (v. 7)         fix available ---> glibc-2.17-55.el7_0.5
Server (v. 5)           fix available ---> glibc-2.5-123.el5_11.1
Server (v. 6)           fix available ---> glibc-2.12-1.149.el6_6.5
Server (v. 7)           fix available ---> glibc-2.17-55.el7_0.5
Server EUS (v. 6.6.z)   fix available ---> glibc-2.12-1.149.el6_6.5
Workstation (v. 6)      fix available ---> glibc-2.12-1.149.el6_6.5
Workstation (v. 7)      fix available ---> glibc-2.17-55.el7_0.5
Run Code Online (Sandbox Code Playgroud)

CentOS Linux 版本 5.x、6.x 和 7.x

CentOS-5    fix available ---> glibc-2.5-123.el5_11
CentOS-6    fix available ---> glibc-2.12-1.149.el6_6.5
CentOS-7    fix available ---> glibc-2.17-55.el7_0.5
Run Code Online (Sandbox Code Playgroud)

Ubuntu Linux 版本 10.04、12.04 LTS

10.04 LTS   fix available ---> libc6-2.11.1-0ubuntu7.20
12.04 LTS   fix available ---> libc6-2.15-0ubuntu10.10
Run Code Online (Sandbox Code Playgroud)

Debian Linux 版本 6.x、7.x

6.x squeeze              vulnerable
6.x squeeze (LTS)        fix available ---> eglibc-2.11.3-4+deb6u4
7.x wheezy               vulnerable
7.x wheezy (security)    fix available ---> glib-2.13-38+deb7u7
Run Code Online (Sandbox Code Playgroud)

Linux Mint 13.0 版

Mint 13    fix available ---> libc6-2.15-0ubuntu10.10
Run Code Online (Sandbox Code Playgroud)

Fedora Linux 版本 19(或更旧版本应升级)

Fedora 19 - vulnerable - EOL on Jan 6, 2014 (upgrade to Fedora 20/21 for patch)
Run Code Online (Sandbox Code Playgroud)

SUSE Linux Enterprise

Server 10 SP4 LTSS for x86                    fix available ---> glibc-2.4-31.113.3
Server 10 SP4 LTSS for AMD64 and Intel EM64T  fix available ---> glibc-2.4-31.113.3
Server 10 SP4 LTSS for IBM zSeries 64bit      fix available ---> glibc-2.4-31.113.3
Software Development Kit 11 SP3               fix available ---> glibc-2.11.3-17.74.13
Server 11 SP1 LTSS                            fix available ---> glibc-2.11.1-0.60.1
Server 11 SP2 LTSS                            fix available ---> glibc-2.11.3-17.45.55.5
Server 11 SP3 (VMware)                        fix available ---> glibc-2.11.3-17.74.13
Server 11 SP3                                 fix available ---> glibc-2.11.3-17.74.13
Desktop 11 SP3                                fix available ---> glibc-2.11.3-17.74.13
Run Code Online (Sandbox Code Playgroud)

openSUSE(11 之前的版本应该升级)

11.4 Evergreen     fix available ---> glibc-2.11.3-12.66.1
12.3               fix available ---> glibc-2.17-4.17.1
Run Code Online (Sandbox Code Playgroud)


哪些包/应用程序仍在使用已删除的 glibc?

(归功于吉尔斯)

对于 CentOS/RHEL/Fedora/Scientific Linux:

   lsof -o / | awk '
   BEGIN {
       while (("rpm -ql glibc | grep \\\\.so\\$" | getline) > 0)
           libs[$0] = 1
   }
   $4 == "DEL" && $8 in libs {print $1, $2}'
Run Code Online (Sandbox Code Playgroud)

对于 Ubuntu/Debian Linux:

   lsof -o / | awk '
   BEGIN {
       while (("dpkg -L libc6:amd64 | grep \\\\.so\\$" | getline) > 0)
           libs[$0] = 1
   }
   $4 == "DEL" && $8 in libs {print $1, $2}'
Run Code Online (Sandbox Code Playgroud)

我的 Linux 系统使用什么 C 库 (glibc) 版本?

检查版本号的最简单方法是运行以下命令:

ldd --version
Run Code Online (Sandbox Code Playgroud)

来自 RHEL/CentOS Linux v6.6 的示例输出:

ldd (GNU libc) 2.12
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.
Run Code Online (Sandbox Code Playgroud)

来自 Ubuntu Linux 12.04.5 LTS 的示例输出:

ldd (Ubuntu EGLIBC 2.15-0ubuntu10.9) 2.15
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.
Run Code Online (Sandbox Code Playgroud)

Debian Linux v7.8 的示例输出:

ldd (Debian EGLIBC 2.13-38+deb7u6) 2.13
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.
Run Code Online (Sandbox Code Playgroud)

GHOST 漏洞检查

芝加哥大学托管以下脚本以便于下载:

$ wget https://webshare.uchicago.edu/orgs/ITServices/itsec/Downloads/GHOST.c
[OR]
$ curl -O https://webshare.uchicago.edu/orgs/ITServices/itsec/Downloads/GHOST.c
$ gcc GHOST.c -o GHOST
$ ./GHOST
[responds vulnerable OR not vulnerable ]
Run Code Online (Sandbox Code Playgroud)
RHEL 4 ELS              fix available ---> glibc-2.3.4-2.57.el4.2
Desktop (v. 5)          fix available ---> glibc-2.5-123.el5_11.1
Desktop (v. 6)          fix available ---> glibc-2.12-1.149.el6_6.5
Desktop (v. 7)          fix available ---> glibc-2.17-55.el7_0.5
HPC Node (v. 6)         fix available ---> glibc-2.12-1.149.el6_6.5
HPC Node (v. 7)         fix available ---> glibc-2.17-55.el7_0.5
Server (v. 5)           fix available ---> glibc-2.5-123.el5_11.1
Server (v. 6)           fix available ---> glibc-2.12-1.149.el6_6.5
Server (v. 7)           fix available ---> glibc-2.17-55.el7_0.5
Server EUS (v. 6.6.z)   fix available ---> glibc-2.12-1.149.el6_6.5
Workstation (v. 6)      fix available ---> glibc-2.12-1.149.el6_6.5
Workstation (v. 7)      fix available ---> glibc-2.17-55.el7_0.5
Run Code Online (Sandbox Code Playgroud)

编译运行如下:

$ gcc ghosttester.c -o ghosttester
$ ./ghosttester
[responds vulnerable OR not vulnerable ]
Run Code Online (Sandbox Code Playgroud)

Red Hat Access Lab: GHOST tool不要使用这个工具,它的报告是错误的,Qualys 的漏洞检查器是准确的。


打补丁


CentOS/RHEL/Fedora/Scientific Linux

sudo yum clean all
sudo yum update
Run Code Online (Sandbox Code Playgroud)

现在重启生效:

sudo reboot
Run Code Online (Sandbox Code Playgroud)

或者,如果您的镜像不包含最新的软件包,只需手动下载它们。*注意:对于更高级的用户

CentOS 5

http://mirror.centos.org/centos/5.11/updates/x86_64/RPMS/
Run Code Online (Sandbox Code Playgroud)

CentOS 6

mkdir ~/ghostupdate
cd ~/ghostupdate

wget http://mirror.centos.org/centos/6.6/updates/x86_64/Packages/glibc-devel-2.12-1.149.el6_6.5.x86_64.rpm
wget http://mirror.centos.org/centos/6.6/updates/x86_64/Packages/glibc-common-2.12-1.149.el6_6.5.x86_64.rpm
wget http://mirror.centos.org/centos/6.6/updates/x86_64/Packages/nscd-2.12-1.149.el6_6.5.x86_64.rpm
wget http://mirror.centos.org/centos/6.6/updates/x86_64/Packages/glibc-static-2.12-1.149.el6_6.5.x86_64.rpm
wget http://mirror.centos.org/centos/6.6/updates/x86_64/Packages/glibc-headers-2.12-1.149.el6_6.5.x86_64.rpm
wget http://mirror.centos.org/centos/6.6/updates/x86_64/Packages/glibc-utils-2.12-1.149.el6_6.5.x86_64.rpm
wget http://mirror.centos.org/centos/6.6/updates/x86_64/Packages/glibc-2.12-1.149.el6_6.5.x86_64.rpm
wget http://mirror.centos.org/centos/6.6/updates/x86_64/Packages/glibc-static-2.12-1.149.el6_6.5.i686.rpm
wget http://mirror.centos.org/centos/6.6/updates/x86_64/Packages/glibc-devel-2.12-1.149.el6_6.5.i686.rpm
wget http://mirror.centos.org/centos/6.6/updates/x86_64/Packages/glibc-2.12-1.149.el6_6.5.i686.rpm

yum localupdate *.rpm [OR] rpm -Uvh *.rpm
Run Code Online (Sandbox Code Playgroud)

Ubuntu/Debian Linux

sudo apt-get clean
sudo apt-get update
sudo apt-get dist-upgrade
Run Code Online (Sandbox Code Playgroud)

重新开始:

sudo reboot
Run Code Online (Sandbox Code Playgroud)

SUSE Linux Enterprise

要安装此 SUSE 安全更新,请使用 YaST online_update。或者根据您的版本使用以下命令:

SUSE Linux Enterprise 软件开发工具包 11 SP3

zypper in -t patch sdksp3-glibc-10206
Run Code Online (Sandbox Code Playgroud)

适用于 VMware 的 SUSE Linux Enterprise Server 11 SP3

zypper in -t patch slessp3-glibc-10206
Run Code Online (Sandbox Code Playgroud)

SUSE Linux 企业服务器 11 SP3

zypper in -t patch slessp3-glibc-10206
Run Code Online (Sandbox Code Playgroud)

SUSE Linux Enterprise Server 11 SP2 LTSS

zypper in -t patch slessp2-glibc-10204
Run Code Online (Sandbox Code Playgroud)

SUSE Linux Enterprise Server 11 SP1 LTSS

zypper in -t patch slessp1-glibc-10202
Run Code Online (Sandbox Code Playgroud)

SUSE Linux Enterprise Desktop 11 SP3

zypper in -t patch sledsp3-glibc-10206
Run Code Online (Sandbox Code Playgroud)

最后运行所有 SUSE linux 版本以使您的系统保持最新:

zypper patch
Run Code Online (Sandbox Code Playgroud)

OpenSUSE Linux

要在 OpenSUSE Linux 上查看包括 glibc 在内的可用更新列表,请输入:

zypper lu
Run Code Online (Sandbox Code Playgroud)

要简单地使用较新的可用版本更新已安装的 glibc 软件包,请运行:

zypper up
Run Code Online (Sandbox Code Playgroud)

几乎在您的机器上运行的每个程序都使用 glibc。您需要重新启动每个使用 glibc 的服务或应用程序以确保补丁生效。因此,建议重新启动。


如何在不重启或不影响系统的情况下重启init?

telinit u
Run Code Online (Sandbox Code Playgroud)

' man telinit ' -- U 或 u 请求 init(8) 守护进程重新执行自身。不建议这样做,因为 Upstart 目前无法保留其状态,但在升级系统库时是必需的。


通过在所有面向公众的服务中禁用反向 DNS 检查,以有限的方式立即减轻威胁。例如,您可以禁用通过设置SSH反向DNS检查UseDNS到no你/etc/ssh/sshd_config。

来源(和更多信息):

  1. https://access.redhat.com/articles/1332213
  2. http://www.cyberciti.biz/faq/cve-2015-0235-patch-ghost-on-debian-ubuntu-fedora-centos-rhel-linux/
  3. http://www.openwall.com/lists/oss-security/2015/01/27/9
  4. https://security.stackexchange.com/questions/80210/ghost-bug-is-there-a-simple-way-to-test-if-my-system-is-secure
  5. http://bobcares.com/blog/ghost-hunting-resolving-glibc-remote-code-execution-vulnerability-cve-2015-0235-in-centos-red-hat-ubuntu-debian-and-suse-linux-服务器
  6. https://community.qualys.com/blogs/laws-of-vulnerabilities/2015/01/27/the-ghost-vulnerability
  7. https://security-tracker.debian.org/tracker/CVE-2015-0235