GHOST:哪些服务易受攻击,ssh、web 服务器?

信息安全 港口 glibc
2021-09-07 03:24:51

GHOST ( CVE-2015-0235 ) 刚刚弹出。

GHOST bug:有没有一种简单的方法来测试我的系统是否安全?处理如何找出您的系统是否易受攻击。

  • exim 特别提到。

  • 显然 OpenSSH 很容易受到攻击,但攻击很容易被阻止

同时,您可以通过在所有面向公众的服务中禁用反向 DNS 检查来立即实施有限的威胁缓解。例如,您可以通过UseDNS no在 /etc/ssh/sshd_config 中设置来禁用 SSH 中的反向 DNS 检查。

还有哪些其他对外开放的常见服务器软件容易受到这种攻击?清漆,阿帕奇,nginx?是否有像 OpenSSH 这样的快速解决方法?

1个回答

人们可以合理地得出结论(见下文),需要进行一些详细的分析来确定任意软件包是否易受攻击,以及可能适用的配置或缓解措施。任何执行名称解析的服务都可能存在风险(补丁,并且是安全的!)。

Qualys 已经提供了一份使用他们目前无法利用的受影响功能的软件列表:

apache、cups、dovecot、gnupg、isc-dhcp、lighttpd、mariadb/mysql、nfs-utils、nginx、nodejs、openldap、openssh、postfix、proftpd、pure-ftpd、rsyslog、samba、sendmail、sysklogd、syslog-ng、 tcp_wrappers、vsftpd、xinetd。

目前,只有 Exim 被证实可以利用。

CVE 详细信息站点跟踪漏洞的供应商详细信息,它还没有启动,但它应该很快就会出现在这里完全完成,你可以在这里找到它:http ://www.cvedetails.com/cve/CVE-2015-0235/ (例如,参见最近的Shellshock CVE-2014-7169页面)。oss-sec电子邮件列表是跟踪突发新闻的好方法

Qualys POC ( GHOST.c) 仅表明 glibc 受到影响,应该加速该过程的是 Qualys 即将承诺的 Metasploit 模块(尽管我怀疑会有其他人争先恐后地开发模块)。

(我不购买链接到的 OpenSSH“缓解”,UseDNS会导致反向查找 TCP 连接的 IP 地址,这当然无法被攻击者充分控制。我会在有机会时更新它验证所采取的步骤。OpenSSH 或 OpenSSH+libwrap 中的反向 DNS 不可利用。)


最初的咨询相当长,预计观众对 libc 和 C 编程的了解会比通过知识更好。通过解释各种复杂性,大量篇幅专门用于不易受攻击的代码和程序。这里的“宣传页”比较容易理解,包含了时下必备的漏洞图。

由于常见的编程习惯以及易受攻击代码的特定代码路径,许多程序并不容易受到攻击。需要明确的是,在 glibc(<2.18) 中存在影响少数 DNS 相关函数的问题,并且 DNS 是将攻击者控制的数据导入系统的好方法,尽管它不是获取任意数据的好方法。但是,与最近的一些高调问题不同,简单地使用库或使用这些函数不会自动使程序易受攻击。

也就是说,这是一个新公开的问题,可能会找到其他触发问题的方法,没有理由推迟补丁。有问题的gethostbyname*函数被认为是“过时的”,因为它们不支持 IPv6 符号并且已被支持的函数取代,但它们非常普遍。


这种对漏洞的重要利用在咨询中进行了详细说明,以第 4.2 节中的(不可利用)为例:大多数发行版上的 setuid-root 二进制文件,因此是本地特权升级mount.nfs的好机会

同样,mount.nfs(一个 SUID 根二进制文件)也不容易受到攻击:

    if (inet_aton(hostname, &addr->sin_addr))
            return 0;
    if ((hp = gethostbyname(hostname)) == NULL) {
            nfs_error(_("%s: can't get address for %s\n"),
                            progname, hostname);
            return -1;
    }

inet_aton()上面的before try的调用模式gethostbyname()就是上面提到的常用习语。给定 in 中的任意字符串hostname,首先检查它是否可以被视为有效的 IP dotted-quad via inet_aton()(便宜且低延迟),否则查看它是否是 DNS 主机名 via gethostbyname()(不便宜,并且可能是高-延迟。请参阅第3 节 - 建议的缓解因素

这也是 OpenSSH 使用这些功能的方式,请参阅getaddrinfo(). openbsd-compat/fake-rfc25553.c该功能仅在主机没有本机getaddrinfo()(或者您捏造configure以欺骗它)时才在编译时启用。glibc 自 1996 年(pre v2.0)以来就具有该功能,因此gethostbyname()不会被 OpenSSH 调用。

如果您的 OpenSSH 是使用 构建的libwrap,那么sshd二进制文件将因此具有一些符号依赖gethostbyname*项—— Qualys 声称 TCP 包装器和 OpenSSH 都是安全的(目前)。OpenSSH 中唯一的其他用途gethostbyname()是在 HP-UX 特定代码中,其中 XDISPLAY需要包含 IP 而不是主机名,此处不相关。

在一般情况下,由于符合标准的 DNS 数据不能包含有问题的长/格式错误的 IP 地址,因此反向查找和正向/反向检查不是攻击向量。如果主机名/点分四组地址是更高协议的一部分(例如 SMTP EHLO 名称,用于利用 Exim),那么您可能会有一些东西。对于 OpenSSH,这将建议端口转发中的主机名。关闭,但没有雪茄,即使 OpenSSH 确实gethostbyname()直接使用:

      if (strlen(host) >= NI_MAXHOST) {
            error("Forward host name too long.");
            return 0;
      }

NI_MAXHOST到目前为止我检查过的版本中的 1025 在哪里。无论如何,这将是一个不太严重的身份验证后攻击向量。