[情報] 解析7.0.6更新的安全性漏洞
本文章只是想說明一下7.0.6到底更新了什麼
對實際更新的操作和效能沒有什麼幫助(汗)
當做知識看看就好XD
Apple最近發佈了iOS 7.0.6,更新內容只講了是有關SSL的安全性更新。乍聽
之下好像不是什麼嚴重的大更新。
但是在許多安全專家開始仔細研究後,發現其實Apple出了一個相當大的包,
影響非常之大,造成的原因卻又簡單的好笑。
首先我們要先了解什麼是SSL。SSL是網路連線的一種加密認證方式,普遍應
用在各大網站的登入系統來避免Man In The Middle攻擊。
舉例來說,你今天想要進行網路購物,你勢必要輸入你的信用卡號碼傳給網
站。所謂Man In The Middle攻擊,就是攻擊者假扮成你要購物的網站,從中
拿走了你的信用卡資料。然後為了不讓你察覺,他當然也會把這份資料送去
給真正的購物網站,拿到購物網站的回應後再傳回給你。這樣在你的眼中,
你還是正常的消費,但是信用卡資料卻已經神不知鬼不覺的被盜取了。同樣
的原理,你的email或者網路銀行的帳號密碼,都可以這樣被盜取。
所以SSL的存在就是為了阻止這件事情。你也許注意到許多網站在登入時你的
網址都會從http://變成https://,這就表示SSL已經啟動。SSL會認證跟你溝
通的對象,確定對方真的是他所宣稱的網站而不是攻擊者所偽裝的。背後的
原理就像是我們使用親筆簽名來確認是否為本人一樣,使用數位簽名來確認
對方的身分。
那Apple出了什麼包呢?基本上在過去的半年多,所有Apple的產品,SSL的認
證機制都是壞掉的。也就是如果你使用Apple的產品在公開的網路環境登入任
何網站,你的資料基本上相當容易被盜取。在過去幾個月也許知道這個漏洞
的人不多,所以也許沒有太多的攻擊事件,但是就在幾天前漏洞曝光,利用
此漏動的攻擊者將會大幅增加。
這邊有個測試網站,它會顯示你的瀏覽器是否受此漏洞影響:
https://gotofail.com
問題講完了 現在來講解決方案。iOS的使用者,請更新到7.0.6。已經JB的人
,evasi0n團隊已經更新了工具可以支援7.0.6,只要更新->重新JB->重新裝
回所有tweak,或者可以直接到Cydia安裝SSLPatch這個tweak
MacOSX的使用者...很抱歉Apple還沒有出更新檔...所以現在盡量避免使用公
共無線網路登入任何網站(特別是跟金錢相關的)...等到Apple有更新檔請第
一時間更新。(有個非官方的更新,但是不推薦)
Update: Apple已釋出10.9.2的OSX更新
好,現在來講講到底是什麼原因造成這種大漏洞的。說來好笑,只是因為某
份程式碼多了一行...
在C語言裡面,判斷是是這樣寫的:
if (條件)
{
條件成立要做的事情;
條件成立要做的另一件事情;
…
}
但是C又有另一個設計,就是如果要做的事情可以一行寫完,那可以不用寫那
兩個{},你可以寫成這樣:
if (條件)
一行就可以做完的事情;
但是如果你這樣寫,就要特別小心,像以下這種狀況:
if (條件)
第一件事情;
第二件事情;
這種狀況乍看之下跟前面的例子一樣,實際上只有第一件事情是條件符合才
會執行,第二件事情是無論如何都會被執行...因為只有if下面那行才跟條件
判斷有關係...
這就是Apple出的包,以下是它的程式碼:
static OSStatus
SSLVerifySignedServerKeyExchange(SSLContext *ctx, bool isRsa,
SSLBuffer signedParams,
uint8_t *signature, UInt16
signatureLen)
{
...
if ((err = ReadyHash(&SSLHashSHA1, &hashCtx)) != 0)
goto fail;
if ((err = SSLHashSHA1.update(&hashCtx, &clientRandom)) != 0)
goto fail;
if ((err = SSLHashSHA1.update(&hashCtx, &serverRandom)) != 0)
goto fail;
if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0)
goto fail;
goto fail; <---- *** DANGER ***
if ((err = SSLHashSHA1.final(&hashCtx, &hashOut)) != 0)
goto fail;
err = sslRawVerify(ctx,
ctx->peerPubKey,
dataToSign,
dataToSignLen,
signature,
signatureLen);
...
fail:
SSLFreeBuffer(&signedHashes);
SSLFreeBuffer(&hashCtx);
return err;
}
這段程式碼就是SSL在認證簽名用的,整個函數會檢查簽名是否為真然後回傳
檢查結果,傳回0就是正確,傳回非0就是錯誤。本來這段程式碼是沒有問題
的,每個判斷式會檢查一樣東西,認證成功會檢查下一樣東西,認證不成功
會跳到最下面的3行程式碼,此時err應該不會是0,所以整個函數回傳非0的
值,認證失敗。
問題是某處連續出現的兩個goto fail,只有第一個跟它上面的if有關,會考
慮條件判斷。後面那個goto fail不管怎麼樣都會被執行到!!! 也就是認證到
一半就跳到下面那三行程式碼,此時err當然是0,函數回傳了0,直接宣布認
證通過...
對,錯誤就是這麼簡單,多了一行goto fail,可以影響全世界不知道多少的
用戶,讓整個SSL認證機制完全無效,寫程式真的不能不小心啊…
最後,請記得更新你的系統。隨著Apple發表這個更新檔並且被挖出了相關漏
洞資訊,攻擊者會增加的非常快速。
--
◢◤ ◢███◤ ◢◤
◤ ◢◤ ◢◤◤ ◢◤◤ ◢◤
◢◤ ◢███◤◤ ◢◤◤ ◢◤ ◢◤ ◢██◤ ◢███◤
◢◤◤ ◢◤ ◤ ◢◤◤ ◢◤◤◢◤◤ ◢◤◤◤ ◢◤◤◢◤◤
◢◤◤ ◢◤◤ ◢◤◤ ◢███◤◤ ◢█◤ ◢███◤◤
◤ ◤ ◤ ◤ ◤ ◤
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 76.94.199.254
推
02/25 12:25, , 1F
02/25 12:25, 1F
推
02/25 12:26, , 2F
02/25 12:26, 2F
推
02/25 12:30, , 3F
02/25 12:30, 3F
推
02/25 12:32, , 4F
02/25 12:32, 4F
推
02/25 12:32, , 5F
02/25 12:32, 5F
推
02/25 12:35, , 6F
02/25 12:35, 6F
→
02/25 12:35, , 7F
02/25 12:35, 7F
推
02/25 12:36, , 8F
02/25 12:36, 8F
推
02/25 12:36, , 9F
02/25 12:36, 9F
推
02/25 12:37, , 10F
02/25 12:37, 10F
推
02/25 12:42, , 11F
02/25 12:42, 11F
推
02/25 12:46, , 12F
02/25 12:46, 12F
推
02/25 12:47, , 13F
02/25 12:47, 13F
推
02/25 12:48, , 14F
02/25 12:48, 14F
推
02/25 12:52, , 15F
02/25 12:52, 15F
推
02/25 12:54, , 16F
02/25 12:54, 16F
推
02/25 12:55, , 17F
02/25 12:55, 17F
→
02/25 12:59, , 18F
02/25 12:59, 18F
→
02/25 13:00, , 19F
02/25 13:00, 19F
推
02/25 13:03, , 20F
02/25 13:03, 20F
推
02/25 13:06, , 21F
02/25 13:06, 21F
推
02/25 13:06, , 22F
02/25 13:06, 22F
→
02/25 13:06, , 23F
02/25 13:06, 23F
→
02/25 13:06, , 24F
02/25 13:06, 24F
推
02/25 13:08, , 25F
02/25 13:08, 25F
→
02/25 13:08, , 26F
02/25 13:08, 26F
推
02/25 13:09, , 27F
02/25 13:09, 27F
→
02/25 13:12, , 28F
02/25 13:12, 28F
→
02/25 13:14, , 29F
02/25 13:14, 29F
推
02/25 13:14, , 30F
02/25 13:14, 30F
推
02/25 13:15, , 31F
02/25 13:15, 31F
推
02/25 13:16, , 32F
02/25 13:16, 32F
推
02/25 13:21, , 33F
02/25 13:21, 33F
推
02/25 13:22, , 34F
02/25 13:22, 34F
推
02/25 13:30, , 35F
02/25 13:30, 35F
→
02/25 13:30, , 36F
02/25 13:30, 36F
推
02/25 13:30, , 37F
02/25 13:30, 37F
→
02/25 13:31, , 38F
02/25 13:31, 38F
推
02/25 13:33, , 39F
02/25 13:33, 39F
還有 110 則推文
還有 3 段內文
推
02/26 02:09, , 150F
02/26 02:09, 150F
※ 編輯: iPluto 來自: 24.199.19.190 (02/26 02:43)
※ 編輯: iPluto 來自: 24.199.19.190 (02/26 02:58)
推
02/26 03:58, , 151F
02/26 03:58, 151F
推
02/26 04:18, , 152F
02/26 04:18, 152F
推
02/26 05:30, , 153F
02/26 05:30, 153F
推
02/26 09:25, , 154F
02/26 09:25, 154F
推
02/26 09:44, , 155F
02/26 09:44, 155F
推
02/26 11:21, , 156F
02/26 11:21, 156F
→
02/26 12:20, , 157F
02/26 12:20, 157F
推
02/26 14:19, , 158F
02/26 14:19, 158F
推
02/26 15:47, , 159F
02/26 15:47, 159F
推
02/26 20:00, , 160F
02/26 20:00, 160F
推
02/26 20:25, , 161F
02/26 20:25, 161F
→
02/26 20:26, , 162F
02/26 20:26, 162F
推
02/26 21:19, , 163F
02/26 21:19, 163F
推
02/26 21:39, , 164F
02/26 21:39, 164F
因為跟瀏覽器有關
OSX上Chrome也是安全的
但是因為系統很多服務以及app是會用到SSL的
即使你都用Puffin上網
但是如果你用了Apple內建的Mail軟體 一樣會受這個漏洞影響
所以還是更新OS最實際...
推
02/26 21:50, , 165F
02/26 21:50, 165F
推
02/26 23:43, , 166F
02/26 23:43, 166F
→
02/26 23:44, , 167F
02/26 23:44, 167F
推
02/26 23:55, , 168F
02/26 23:55, 168F
推
02/27 01:17, , 169F
02/27 01:17, 169F
→
02/27 01:17, , 170F
02/27 01:17, 170F
推
02/27 01:37, , 171F
02/27 01:37, 171F
推
02/27 01:54, , 172F
02/27 01:54, 172F
推
02/27 02:31, , 173F
02/27 02:31, 173F
→
02/27 02:31, , 174F
02/27 02:31, 174F
→
02/27 02:42, , 175F
02/27 02:42, 175F
→
02/27 02:42, , 176F
02/27 02:42, 176F
※ 編輯: iPluto 來自: 24.199.19.190 (02/27 02:45)
推
02/27 12:31, , 177F
02/27 12:31, 177F
→
02/27 12:31, , 178F
02/27 12:31, 178F
噓
02/27 14:17, , 179F
02/27 14:17, 179F
→
02/27 14:18, , 180F
02/27 14:18, 180F
→
02/27 14:23, , 181F
02/27 14:23, 181F
推
02/27 14:30, , 182F
02/27 14:30, 182F
推
02/27 14:33, , 183F
02/27 14:33, 183F
推
03/01 02:11, , 184F
03/01 02:11, 184F
推
03/01 13:18, , 185F
03/01 13:18, 185F
推
03/07 11:58, , 186F
03/07 11:58, 186F