[情報] 解析7.0.6更新的安全性漏洞

看板iOS作者 (鍵盤Apple Genius)時間10年前 (2014/02/25 12:23), 編輯推噓134(136248)
留言186則, 141人參與, 最新討論串1/1
本文章只是想說明一下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
XD
02/25 12:26, 2F

02/25 12:30, , 3F
實用推
02/25 12:30, 3F

02/25 12:32, , 4F
實用推 看PTT長知識
02/25 12:32, 4F

02/25 12:32, , 5F
推一個
02/25 12:32, 5F

02/25 12:35, , 6F
如果都沒在用公用網路的人還要更新嗎? 都只用自己的3G跟
02/25 12:35, 6F

02/25 12:35, , 7F
家裡的wifi
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
這漏洞是大學生等級的吧XDDD
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
不愧是i大..
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
話說為什麼會有ios的source code?
02/25 13:00, 19F

02/25 13:03, , 20F
原本iphone4留在ios5 不過一看到SSL漏洞就馬上升級了..
02/25 13:03, 20F

02/25 13:06, , 21F
SSL漏洞是重大問題 除非手機完全不會輸入帳號密碼
02/25 13:06, 21F

02/25 13:06, , 22F
err初始給0? 應該不會吧@@
02/25 13:06, 22F

02/25 13:06, , 23F
本來不想更 但看到你這篇馬上更新....
02/25 13:06, 23F

02/25 13:06, , 24F
只能升成iOS7才有解嗎? 實在不想用那醜陋的介面....
02/25 13:06, 24F

02/25 13:08, , 25F
iOS7哪會醜 我很喜歡
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
if迴圈就算只有一行我都習慣要{}以免發生這樣的情形
02/25 13:12, 28F

02/25 13:14, , 29F
很多語言都有這樣的寫法~只是這種寫法常被當作厲害寫法
02/25 13:14, 29F

02/25 13:14, , 30F
為了那一行要重新JB跟設定 好麻煩阿 ><
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
CS學生推~
02/25 13:22, 34F

02/25 13:30, , 35F
如果是"過去半年多"的話 那受災戶應該只有iOS7吧?
02/25 13:30, 35F

02/25 13:30, , 36F
iOS6"理論上"不必擔心這點
02/25 13:30, 36F

02/25 13:30, , 37F
專業推
02/25 13:30, 37F

02/25 13:31, , 38F
啊抱歉,應該是iOS6.0才不用擔心...6.1應該也有問題
02/25 13:31, 38F

02/25 13:33, , 39F
是只有iOS 7有這個漏洞嗎,iOS 6以前的呢?
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
高三正學C語言中 嗚嗚..好像很難
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
感謝喔 我目前還沒碰到ssl認證加密的問題XD
02/26 20:25, 161F

02/26 20:26, , 162F
這樣說我就懂了XD ios真是很常用判斷式來確認 感謝~~
02/26 20:26, 162F

02/26 21:19, , 163F
厲害 這回真的是"專業"問題了XDD
02/26 21:19, 163F

02/26 21:39, , 164F
6.1.3, 用safari點測試網頁不安全,用puffin卻安全?
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
推文看到有人說10.6也有更新,請問有辦法只更新到10.6嗎?
02/26 23:43, 166F

02/26 23:44, , 167F
我怕更新到10.7跑不動...
02/26 23:44, 167F

02/26 23:55, , 168F
筆誤..上面說的是ios6及ios7
02/26 23:55, 168F

02/27 01:17, , 169F
這漏洞八成是git auto merge造成的 因為行數不對mer成兩行
02/27 01:17, 169F

02/27 01:17, , 170F
乖小孩記得即使if內容只有一行也要加大括號喔
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
checkpatch.pl不會讓有括號的一行if進到kernel裡的
02/27 02:31, 173F

02/27 02:31, , 174F
所以對大神來說亂加括號真的很醜
02/27 02:31, 174F

02/27 02:42, , 175F
3GS可以只更新到6.1.6 不然你可以JB然後裝Patch XD
02/27 02:42, 175F

02/27 02:42, , 176F
usoko說的沒錯 這八成是merge出來的 沒有人會自己這樣寫...
02/27 02:42, 176F
※ 編輯: iPluto 來自: 24.199.19.190 (02/27 02:45)

02/27 12:31, , 177F
專業推!之前gmail的確有被盜用,還是更新較心!謝謝解
02/27 12:31, 177F

02/27 12:31, , 178F
惑!
02/27 12:31, 178F

02/27 14:17, , 179F
Man in midle 引用錯誤
02/27 14:17, 179F

02/27 14:18, , 180F
Man in middle SSL 根本防不了。
02/27 14:18, 180F

02/27 14:23, , 181F
Key 被拿走了 還是可以被 sniffer
02/27 14:23, 181F

02/27 14:30, , 182F
尤其是不小心吃了偽CA
02/27 14:30, 182F

02/27 14:33, , 183F
另外,我先前說的 SSL 完全防不了,是我的錯誤。
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
文章代碼(AID): #1J31gdCL (iOS)