从今天起,OpenSSL 中的错误已发现影响到1.0.1
(1.0.1f
含) 和 的版本1.0.2-beta
。
从 Ubuntu 12.04 开始,我们都容易受到此漏洞的影响。为了修补此漏洞,受影响的用户应更新至 OpenSSL 1.0.1g
。
每个受影响的用户如何应用此更新现在?
答案1
12.04、12.10、13.10 有安全更新和 14.04看Ubuntu 安全通知 USN-2165-1。
因此,首先你需要应用可用的安全更新,例如运行
sudo apt-get update
sudo apt-get upgrade
从命令行。
不要忘记重新开始使用受影响的 OpenSSL 版本的服务(HTTP、SMTP 等),否则您仍然容易受到攻击。另请参阅Heartbleed:它是什么?有哪些方法可以缓解它?在 Serverfault.com 上。
以下命令显示(升级后)所有需要重新启动的服务:
sudo find /proc -maxdepth 2 -name maps -exec grep -HE '/libssl\.so.* \(deleted\)' {} \; | cut -d/ -f3 | sort -u | xargs --no-run-if-empty ps uwwp
在那之后,你需要重新生成所有服务器 SSL 密钥,然后评估您的密钥是否可能已泄露,在这种情况下,攻击者可能已经从您的服务器中检索了机密信息。
答案2
该漏洞被称为心脏出血。
我是否很脆弱?
一般来说,如果您运行某个服务器,并在某个时候为其生成了 SSL 密钥,那么您就会受到影响。大多数最终用户不会(直接)受到影响;至少 Firefox 和 Chrome 不使用 OpenSSL。SSH 不受影响。Ubuntu 软件包的分发不受影响(它依赖于 GPG 签名)。
如果您运行使用 OpenSSL 版本 1.0–1.0.1f 的任何类型的服务器(当然,自发现该错误以来已修补的版本除外),您就容易受到攻击。受影响的 Ubuntu 版本是 11.10 oneiric 到 14.04 trusty 预发布版。这是一个实现错误,而不是协议中的缺陷,因此只有使用 OpenSSL 库的程序才会受到影响。如果您有一个链接到旧版 0.9.x 版 OpenSSL 的程序,则不会受到影响。只有使用 OpenSSL 库来实现 SSL 协议的程序才会受到影响;将 OpenSSL 用于其他用途的程序不会受到影响。
如果您运行的服务器暴露在互联网上,除非您的日志显示自 2014-04-07 公告以来没有连接,否则请认为该服务器已受到攻击。(这假设该漏洞在公告之前未被利用。)如果您的服务器仅在内部暴露,则是否需要更改密钥将取决于采取了哪些其他安全措施。
有什么影响?
该漏洞允许任何客户可以连接到您的 SSL 服务器,从服务器检索大约 64kB 的内存。客户端无需以任何方式进行身份验证。通过重复攻击,客户端可以在连续尝试中转储内存的不同部分。
攻击者可能能够获取的关键数据之一是服务器的 SSL 私钥。利用此数据,攻击者可以冒充您的服务器。
如何在服务器上恢复?
使所有受影响的服务器脱机。只要它们运行,就有可能泄露关键数据。
升级
libssl1.0.0
软件包,并确保所有受影响的服务器都已重新启动。
您可以使用“grep 'libssl”检查受影响的进程是否仍在运行。(已删除)' /proc//地图`生成新密钥。这是必要的,因为该错误可能允许攻击者获取旧私钥。请按照最初使用的相同步骤操作。
- 如果您使用由证书颁发机构签名的证书,请将您的新公钥提交给您的 CA。获取新证书后,请将其安装在您的服务器上。
- 如果您使用自签名证书,请将其安装在您的服务器上。
- 无论哪种方式,都要将旧密钥和证书移开(但不要删除它们,只要确保它们不再被使用即可)。
现在你有了新的未被破解的密钥,你可以使你的服务器重新上线。
撤销旧证书。
损害评估:为 SSL 连接提供服务的进程内存中的任何数据都可能被泄露。这可能包括用户密码和其他机密数据。您需要评估这些数据可能是什么。
- 如果您正在运行允许密码验证的服务,那么在漏洞公布前不久连接的用户的密码应被视为已被泄露。(早一点,因为密码可能在内存中保留了一段时间而未被使用。)检查您的日志并更改任何受影响用户的密码。
- 同时使所有会话 cookie 无效,因为它们可能已被泄露。
- 客户端证书没有受到损害。
- 自漏洞出现之前不久交换的任何数据可能仍保留在服务器的内存中,因此可能已泄露给攻击者。
- 如果有人记录了旧的 SSL 连接并检索了您的服务器的密钥,他们现在就可以解密他们的记录。(除非增强体质是确定的——如果你不知道,那就不是。)
如何在客户端上恢复?
客户端应用程序受影响的情况很少。服务器端的问题是任何人都可以连接到服务器并利用该漏洞。为了利用客户端,必须满足三个条件:
- 客户端程序使用了有缺陷的OpenSSL库版本来实现SSL协议。
- 客户端连接到恶意服务器。(例如,如果您连接到电子邮件提供商,则无需担心。)这一定是在服务器所有者意识到此漏洞之后发生的,因此大概是在 2014-04-07 之后。
- 客户端进程的内存中保存着机密数据,这些数据不会与服务器共享。(因此,如果您只是运行程序
wget
下载文件,则不会泄露任何数据。)
如果您在 2014-04-07 晚上 UTC 和升级 OpenSSL 库之间执行了此操作,则客户端进程内存中的所有数据都将被泄露。
参考
答案3
要查看 Ubuntu 上安装的 OpenSSL 版本,请运行:
dpkg -l | grep openssl
如果您看到以下版本输出,则应包含 CVE-2014-0160 的补丁。
ii openssl 1.0.1-4ubuntu5.12 Secure Socket Layer (SSL)...
看着https://launchpad.net/ubuntu/+source/openssl/1.0.1-4ubuntu5.12,它显示了修复了哪些类型的错误:
...
SECURITY UPDATE: memory disclosure in TLS heartbeat extension
- debian/patches/CVE-2014-0160.patch: use correct lengths in
ssl/d1_both.c, ssl/t1_lib.c.
- CVE-2014-0160
-- Marc Deslauriers <email address hidden> Mon, 07 Apr 2014 15:45:14 -0400
...
答案4
对于那些不想进行全服务器软件包升级的人来说。我今天阅读了很多指南,apt-get upgrade openssl
===apt-get upgrade
这将应用您的机器所需的所有安全修复。太棒了,除非您明确依赖某个旧软件包版本。
这是在运行 Apache 2 的 Ubuntu 12.04 LTS 上所需的最少操作:
去这个地址并证明您存在漏洞。您应该使用您的 Web 服务器的直接外部地址。如果您使用负载均衡器(例如 ELB),您可能不会直接联系您的 Web 服务器。
运行以下 1 行程序来升级软件包并重新启动。是的,我看到所有指南都说您应该有一个晚于 2014 年 4 月 4 日的时间戳,但在我看来情况并非如此。
apt-get 更新 && apt-get 安装 openssl libssl1.0.0 && /etc/init.d/apache2 重启
确保您安装了适当的软件包版本,并再次检查您的网络服务器是否存在漏洞。
关键包如下,我使用下面的命令确定了这些信息,然后编辑掉了多余的部分(您不需要了解太多有关我的机器的状态的信息)。
$ dpkg -l | grep ssl
ii libssl-dev 1.0.1-4ubuntu5.12 SSL development libraries, header files and documentation
ii libssl1.0.0 1.0.1-4ubuntu5.12 SSL shared libraries
ii openssl 1.0.1-4ubuntu5.12 Secure Socket Layer (SSL)* binary and related cryptographic tools
1.0.1-4ubuntu5.12
不应包含该漏洞。请再次访问以下网站并测试您的 Web 服务器,以确保情况确实如此。