关闭广告

前几天,苹果发布了第一百个 iOS 7.0.6 更新,关于我们通知您的发布。许多人可能会感到惊讶的是,旧版 iOS 6(版本 6.1.6)和 Apple TV(版本 6.0.2)也发布了该更新。这是一个安全补丁,因此苹果无法承担仅更新其部分设备的费用。更重要的是,这个问题也影响了 OS X。据苹果发言人 Trudy Muller 表示,将尽快发布 OS X 更新。

为什么这次更新有如此多的炒作?系统代码中存在缺陷,导致 ISO/OSI 参考模型关系层的安全传输中的服务器验证被绕过。具体来说,该错误是在进行服务器证书验证的部分中错误的 SSL 实现。在进一步解释之前,我更愿意描述基本概念。

SSL(安全套接字层)是用于安全通信的协议。它通过通信双方的加密和认证来实现安全。身份验证是对所呈现的身份的验证。例如,在现实生活中,您说出您的姓名(身份)并出示您的 ID,以便对方可以验证(身份验证)。然后,身份验证又分为验证,这只是国民身份证或身份证明的一个例子,当有关人员无需您提前向他出示即可确定您的身份时。

现在我将简要介绍服务器证书。在现实生活中,您的证书可能是身份证。一切都基于非对称密码学,其中每个主体拥有两个密钥 - 私有密钥和公共密钥。整个美妙之处在于消息可以用公钥加密并用私钥解密。这意味着只有私钥的所有者才能解密该消息。同时,无需担心将密钥传递给通信双方。该证书是主体的公钥加上其信息并由证书颁发机构签名。例如,在捷克共和国,捷克共和国的认证机构之一是 Česká Pošta。借助证书,iPhone 可以验证它是否确实与给定服务器进行通信。

SSL在建立连接时使用非对称加密,即所谓的 SSL 握手。在此阶段,您的 iPhone 验证它是否正在与给定服务器进行通信,同时,借助非对称加密,建立对称密钥,该密钥将用于所有后续通信。对称加密速度更快。正如已经写过的,在服务器验证期间已经发生错误。我们来看看导致这个系统漏洞的代码。

static OSStatus
SSLVerifySignedServerKeyExchange(SSLContext *ctx, bool isRsa,
SSLBuffer signedParams, uint8_t *signature, UInt16 signatureLen)

{
   OSStatus err;
   …

   if ((err = SSLHashSHA1.update(&hashCtx, &serverRandom)) != 0)
       goto fail;
   if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0)
       goto fail;
       goto fail;
   if ((err = SSLHashSHA1.final(&hashCtx, &hashOut)) != 0)
       goto fail;
   …

fail:
   SSLFreeBuffer(&signedHashes);
   SSLFreeBuffer(&hashCtx);
   return err;
}

在第二种情况下 if 你可以看到下面两个命令 失败;。这就是绊脚石。然后,此代码会导致在应验证证书的阶段执行第二个命令 失败;。这会导致第三个条件被跳过 if 并且根本不会有服务器验证。

这意味着任何了解此漏洞的人都可以向您的 iPhone 提供虚假证书。你或如果您使用 iPhone,您会认为自己正在加密通信,而您和服务器之间存在攻击者。这种攻击称为 中间人攻击,大致翻译为捷克语 中间人攻击人之中。只有当攻击者和受害者位于同一网络时,才能在 OS X 和 iOS 中利用此特定缺陷进行攻击。因此,如果您尚未更新 iOS,最好避开公共 Wi-Fi 网络。 Mac 用户仍应小心他们连接到哪些网络以及在这些网络上访问哪些网站。

令人难以置信的是,如此致命的错误怎么会出现在 OS X 和 iOS 的最终版本中。这可能是对编写得不好的代码进行了不一致的测试。这意味着程序员和测试人员都会犯错误。对于苹果来说,这似乎不太可能,因此有人猜测这个错误实际上是一个后门,即所谓的后门。 后门。他们说最好的后门看起来像是微妙的错误,这并非没有道理。然而,这些只是未经证实的理论,所以我们会假设有人犯了一个错误。

如果您不确定您的系统或浏览器是否不受此错误的影响,请访问该页面 gotofail.com。如下图所示,OS X Mavericks 7.0.1 中的 Safari 10.9.1 包含一个错误,而 iOS 7.0.6 中的 Safari 一切正常。

资源: iMore, 路透社
.