※ 本文為 chann.bbs. 轉寄自 ptt.cc 更新時間: 2014-02-25 13:42:13
看板 iPhone
作者 標題 [情報] 解析7.0.6更新的安全性漏洞
時間 Tue Feb 25 12:22:57 2014
本文章只是想說明一下7.0.6到底更新了什麼
對實際更新的操作和效能沒有什麼幫助(汗)
當做知識看看就好XD
對實際更新的操作和效能沒有什麼幫助(汗)
當做知識看看就好XD
Apple最近發佈了iOS 7.0.6,更新內容只講了是有關SSL的安全性更新。乍聽
之下好像不是什麼嚴重的大更新。
但是在許多安全專家開始仔細研究後,發現其實Apple出了一個相當大的包,
影響非常之大,造成的原因卻又簡單的好笑。
首先我們要先了解什麼是SSL。SSL是網路連線的一種加密認證方式,普遍應
用在各大網站的登入系統來避免Man In The Middle攻擊。
舉例來說,你今天想要進行網路購物,你勢必要輸入你的信用卡號碼傳給網
站。所謂Man In The Middle攻擊,就是攻擊者假扮成你要購物的網站,從中
拿走了你的信用卡資料。然後為了不讓你察覺,他當然也會把這份資料送去
給真正的購物網站,拿到購物網站的回應後再傳回給你。這樣在你的眼中,
你還是正常的消費,但是信用卡資料卻已經神不知鬼不覺的被盜取了。同樣
的原理,你的email或者網路銀行的帳號密碼,都可以這樣被盜取。
站。所謂Man In The Middle攻擊,就是攻擊者假扮成你要購物的網站,從中
拿走了你的信用卡資料。然後為了不讓你察覺,他當然也會把這份資料送去
給真正的購物網站,拿到購物網站的回應後再傳回給你。這樣在你的眼中,
你還是正常的消費,但是信用卡資料卻已經神不知鬼不覺的被盜取了。同樣
的原理,你的email或者網路銀行的帳號密碼,都可以這樣被盜取。
所以SSL的存在就是為了阻止這件事情。你也許注意到許多網站在登入時你的
網址都會從http://變成https://,這就表示SSL已經啟動。SSL會認證跟你溝
通的對象,確定對方真的是他所宣稱的網站而不是攻擊者所偽裝的。背後的
原理就像是我們使用親筆簽名來確認是否為本人一樣,使用數位簽名來確認
對方的身分。
原理就像是我們使用親筆簽名來確認是否為本人一樣,使用數位簽名來確認
對方的身分。
那Apple出了什麼包呢?基本上在過去的半年多,所有Apple的產品,SSL的認
證機制都是壞掉的。也就是如果你使用Apple的產品在公開的網路環境登入任
何網站,你的資料基本上相當容易被盜取。在過去幾個越也許知道這個漏洞
的人不多,所以也許沒有太多的攻擊事件,但是就在幾天前漏洞曝光,利用
此漏動的攻擊者將會大幅增加。
證機制都是壞掉的。也就是如果你使用Apple的產品在公開的網路環境登入任
何網站,你的資料基本上相當容易被盜取。在過去幾個越也許知道這個漏洞
的人不多,所以也許沒有太多的攻擊事件,但是就在幾天前漏洞曝光,利用
此漏動的攻擊者將會大幅增加。
這邊有個測試網站,他會顯示你的瀏覽器是否受此漏洞影響:
https://gotofail.com
問題講完了 現在來講解決方案。iOS的使用者,請更新到7.0.6。已經JB的人
,evasi0n團隊已經更新了工具可以支援7.0.6,只要更新->重新JB->重新裝
回所有tweak,或者可以直接到Cydia安裝SSLPatch這個tweak
,evasi0n團隊已經更新了工具可以支援7.0.6,只要更新->重新JB->重新裝
回所有tweak,或者可以直接到Cydia安裝SSLPatch這個tweak
MacOSX的使用者...很抱歉Apple還沒有出更新檔...所以現在盡量避免使用公
共無線網路登入任何網站(特別是跟金錢相關的)...等到Apple有更新檔請第
一時間更新。(有個非官方的更新,但是不推薦)
共無線網路登入任何網站(特別是跟金錢相關的)...等到Apple有更新檔請第
一時間更新。(有個非官方的更新,但是不推薦)
好,現在來講講到底是什麼原因造成這種大漏洞的。說來好笑,只是因為某
份程式碼多了一行...
在C語言裡面,判斷是是這樣寫的:
if (條件)
{
條件成立要做的事情;
條件成立要做的另一件事情;
…
}
但是C又有另一個設計,就是如果要做的事情可以一行寫完,那可以不用寫那
兩個{},你可以寫成這樣:
if (條件)
一行就可以做完的事情;
但是如果你這樣寫,就要特別小心,像以下這種狀況:
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的
值,認證失敗。
檢查結果,傳回0就是正確,傳回非0就是錯誤。本來這段程式碼是沒有問題
的,每個判斷式會檢查一樣東西,認證成功會檢查下一樣東西,認證不成功
會跳到最下面的3行程式碼,此時err應該不會是0,所以整個函數回傳非0的
值,認證失敗。
問題是某處連續出現的兩個goto tail,只有第一個跟它上面的if有關,會考
慮條件判斷。後面那個goto fail不管怎麼樣都會被執行到!!! 也就是認證到
一半就跳到下面那三行程式碼,此時err當然是0,函數回傳了0,直接宣布認
證通過...
慮條件判斷。後面那個goto fail不管怎麼樣都會被執行到!!! 也就是認證到
一半就跳到下面那三行程式碼,此時err當然是0,函數回傳了0,直接宣布認
證通過...
對,錯誤就是這麼簡單,多了一行goto fail,可以影響全世界不知道多少的
用戶,讓整個SSL認證機制完全無效,寫程式真的不能不小心啊…
最後,請記得更新你的系統。隨著Apple發表這個更新檔並且被挖出了相關漏
洞資訊,攻擊者會增加的非常快速。
--
◢◤ ◢███◤ ◢◤
◤ ◢◤ ◢◤◤ ◢◤◤ ◢◤
◢◤ ◢███◤◤ ◢◤◤ ◢◤ ◢◤ ◢██◤ ◢███◤
◢◤◤ ◢◤ ◤ ◢◤◤ ◢◤◤◢◤◤ ◢◤◤◤ ◢◤◤◢◤◤
◢◤◤ ◢◤◤ ◢◤◤ ◢███◤◤ ◢█◤ ◢███◤◤
◤ ◤ ◤ ◤ ◤ ◤
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 76.94.199.254
推 :很詳細的說明,推一下1F 02/25 12:25
推 :XD2F 02/25 12:26
推 :實用推3F 02/25 12:30
推 :實用推 看PTT長知識4F 02/25 12:32
推 :推一個5F 02/25 12:32
推 :如果都沒在用公用網路的人還要更新嗎? 都只用自己的3G跟6F 02/25 12:35
→ :家裡的wifi
→ :家裡的wifi
推 :好厲害!長知識了8F 02/25 12:36
推 :推!9F 02/25 12:36
推 :專業推10F 02/25 12:37
推 :太專業了..11F 02/25 12:42
推 :長知識 推!!12F 02/25 12:46
推 :這漏洞是大學生等級的吧XDDD13F 02/25 12:47
推 :專業又講得很淺顯易懂真不容易!謝謝好文長知識14F 02/25 12:48
推 :說明推!15F 02/25 12:52
推 :不愧是i大..16F 02/25 12:54
推 :多學了一些17F 02/25 12:55
→ :專業推!18F 02/25 12:59
→ :話說為什麼會有ios的source code?19F 02/25 13:00
推 :原本iphone4留在ios5 不過一看到SSL漏洞就馬上升級了..20F 02/25 13:03
推 :SSL漏洞是重大問題 除非手機完全不會輸入帳號密碼21F 02/25 13:06
推 :err初始給0? 應該不會吧@@22F 02/25 13:06
→ :本來不想更 但看到你這篇馬上更新....23F 02/25 13:06
→ :只能升成iOS7才有解嗎? 實在不想用那醜陋的介面....24F 02/25 13:06
推 :iOS7哪會醜 我很喜歡25F 02/25 13:08
→ :扁平化很可愛
→ :扁平化很可愛
推 :推!終於清楚了27F 02/25 13:09
→ :if迴圈就算只有一行我都習慣要{}以免發生這樣的情形28F 02/25 13:12
→ :很多語言都有這樣的寫法~只是這種寫法常被當作厲害寫法29F 02/25 13:14
推 :為了那一行要重新JB跟設定 好麻煩阿 ><30F 02/25 13:14
推 :專業大推31F 02/25 13:15
推 :推推推32F 02/25 13:16
推 :太白癡了吧天啊33F 02/25 13:21
推 :CS學生推~34F 02/25 13:22
推 :如果是"過去半年多"的話 那受災戶應該只有iOS7吧?35F 02/25 13:30
→ :iOS6"理論上"不必擔心這點
→ :iOS6"理論上"不必擔心這點
推 :專業推37F 02/25 13:30
→ :啊抱歉,應該是iOS6.0才不用擔心...6.1應該也有問題38F 02/25 13:31
推 :是只有iOS 7有這個漏洞嗎,iOS 6以前的呢?39F 02/25 13:33
推 :專業給推!!!!!!40F 02/25 13:34
推 : 蘋果的程式 都沒再審核嗎? 為何BUG會上架41F 02/25 13:35
推 :bug不是說找就找,寫程式最難也花最多實績的就是debug42F 02/25 13:38
→ : 時間
→ : 時間
→ :OSX10.9.2和iOS7.1全都還沒修補QQ44F 02/25 13:40
推 :這樣子ios6也需要擔心嗎?45F 02/25 13:40
--
※ 看板: iOS 文章推薦值: 0 目前人氣: 0 累積人氣: 587
回列表(←)
分享