關閉廣告

前幾天,蘋果發布了第一百個 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, 路透社
.