2019年12月9日 星期一

讓 iPhone 與 iPad 數秒內淪陷的 62078 蘋果後門

「如果微軟像胖虎一樣惡霸, 那麼蘋果比小夫陰險一百倍。」 我經常用這句話及 指紋解鎖 一事來簡短評論蘋果電腦。 最近特別推薦兩組搜尋關鍵詞: 「生物辨識 國家機器」 fingerprints usernames not passwords。 其他蘋果後門案例比較難以三言兩語解釋給麻瓜聽, 例如 airdropOperation Triangulation假的「關閉隱私資訊傳送」騙人的 VPN 與防火牆finfisherMDMiMessageiCloud金鑰VPN+OCSP Find my iPhone與 FBI 的曖昧、... 等等。 今天要談的蘋果 usb + wifi 後門也是如此。

最近 美國政府突然再次呼籲勿使用公共USB充電站。 從 紐約時報的報導 裡的連結跟關鍵詞出發, 我簡單摘要爬文心得: 透過 usb 充電入侵手機的方式, 通稱為 juice jacking。 從實作的角度來看, 至少有兩大類很不一樣的方式。 一類是適用於攻擊 android/iOS/windows/MacOS/linux 所有作業系統的 BadUSB -- 所以 任何人的 usb 充電線都應該要戴保險套 ; 另一類則是蘋果的 usb + wifi 後門, 也就是本文的主題。 本文的主要參考資料是資安專家 Jonathan Zdziarski 寫的 How Juice Jacking Works, and Why It’s a Threat 跟 Sabri Haddouche 寫的 How to finally disable this ******* Wi-Fi Sync port (62078) on iOS

先談一下 android 手機上一個很實用的機制。 我在課堂上都鼓勵學生啟用 android 手機的 adb 傳檔功能, 除了傳檔之外, 也可以 在電腦上實鏡展演手機操作。 一旦啟用, 每當手機與一部陌生電腦接上 usb 資料連線 (不含「僅與充電座進行電力連線」) 的時候, 手機都會跳出警告訊息, 問你是否要信任這部電腦。 一旦信任, 那部電腦就可以對手機為所欲為。 預設情況下, 信任是暫時的 (僅限這一次連線); 如果是自己的電腦, 當然就可以勾選永久信任。 如果你想要的話, android 手機也允許信任的電腦 透過 wifi 進行無線 adb 連線, 但我都勸學生及讀者不要啟用。 身為一位通識等級的資訊安全老師, 我認為 adb 連線機制這樣的設計很正常合理。

蘋果的 iphone 也有類似的機制。 但是跟 google 的公開透明 (提供 adb 連線文件與程式碼) 形成強烈的對比, 蘋果的連線機制甚至沒有正式的名字, 我能找到的最好的相關關鍵詞是 62078 (埠號) 或 lockdownd (手機那頭的服務名稱)。 所以高手們只好透過逆向工程 (還好目前 TPM 噩夢 尚未成真, 逆向工程尚屬合法) 在 2010 年左右釋出開放原始碼的 libimobiledevice 函式庫 讓三大桌機作業系統皆可與 iOS 裝置溝通, 而不必受限於蘋果官方所提供的工具。

以下引用 Zdziarski 那篇 2013 年 6 月的文章:

iPhone 手機上有一個 lockdownd 隨時傾聽從 62078 埠傳來的指令。 只要連到這個埠、 以正確的協定下指令, 即可啟動手機上的諸多服務, 包含 (可以下載你個資的) 「備份」 功能及 (iTunes 會用到的) 「安裝軟體」 功能。 還有其他服務 (讓電腦端) 可以啟動封包監聽以及用各種方式下載個資。 事實上其中有一些蘋果的服務我只能稱之為後門 -- 它可以從你的手機下載個資, 過程卻毫不加密。 想要從 iOS 裝置讀資料出來或寫東西進去, 都要靠這個關鍵服務 (lockdownd)。 從 2010 年起, 就有許多開發者與駭客把這程式碼納入他們各自的專案。 有些商業資安鑑識公司用這個服務從 iPhone 上撈出他們自家產品的資訊, 而有一些更狂野的駭客則拿它來偷裸照、 盜竊身份等等。

當然, 其中一個 「應用」 就是 Juice Jacking -- 當你把 iPhone 連到一個陌生的 usb 充電座時, 不會想到牆後面可能是一部惡意的電腦, 正渴望著透過 62078 埠喚醒你手機上的 lockdownd 來替它服務。

最大的問題就是蘋果的設計。 手機不會問用戶是否要允許 (企圖 usb 連線的) 裝置與你配對。 它就這麼直接幫你配對了。 每...一...次。 所以一連上線之後幾秒之內, 就建立了一筆新的配對記錄。 更糟的是, 這個配對記錄就這麼一輩子跟著你的手機, 除非用戶決定要 (從 iCloud 的備份?) 還原 iPhone。 也就是說, (自從你上次還原之後) 任何曾經與你手上的手機 (在你有意識或無意識的動作下) 配對過的裝置, 都可以存取你手機上的任何個人資料。 有沒有覺得有一點噁心了呢?

還不急著吐, 更噁心的還在後面:

雖然配對過程一定要透過 usb, 但只要配對過之後, 那個裝置就可以透過 usb 或 wifi 操作你的手機, 就算你把 wifi 同步功能關掉也沒用。 這意謂著一名駭客只需要爭取到配對的幾秒鐘 usb 連線, 之後只要有網路就可以無限期下載你的個人資料。

所謂的 「有網路就可以...」 指的應該是與你在同一個 wifi 區網或同一個電信數據區網。 所以他又補充: 駭客 (或是諸如 NSA 之類的政府監控機關) 還可以利用 「已知的無線網路」 強迫你的手機加入他的網路, 或是若能成功入侵電信業者, 也就能夠透過電信數據網路操作你的手機。

以上這些現象, 完全不是 「程式設計的疏忽」 所能解釋的。 任何一位具有正常水準資安常識的程式設計師, 都不可能犯這種錯誤, 更何況這個 lockdownd 服務如此地重要, 參與開發的必然是蘋果公司眾多菁英當中的超級菁英。 不~可~能~ 是疏忽。 在我看來, 這些就是刻意開啟的後門無誤。 Zdziarski 又丟下了更可怕的一句話:

還有幾個我不能夠公開說的後門, 可以讓攻擊者從你的裝置下載你個人資訊, 不管你有沒有啟用備份加密機制、 不管你的手機是否進入鎖定狀態。

Zdziarski 的那篇文章貼出的時間, 大約也就是 Snowden 爆料 NSA 的 PRISM 等等監聽機制的前後。 而蘋果也在此時新推出的 iOS 7 上面加上了 「usb 連線時會詢問用戶是否同意」 的機制, 但對上述其他問題都沒有處理。 到了 2014 年, 甚至已有 簡體中文教學文解說此一 "漏洞"。 Sabri 的文章及補救教學最早是 2015 年 4 月張貼出來的; 最後一次更新是 2016 年 1 月。 直到今天, 他的文章還是這麼說的: 「已經聯絡過蘋果了, 但他們卻從未回應。」 會不會是他後來沒再維護這個網頁了呢? 我在搜尋的過程當中, 感到很詭異: 這麼嚴重的 "漏洞", 竟然很難找到主流媒體或資安媒體的報導。 從 2018 年 5 月的一個 quora 提問 2019 年 5 月的一個 slackexchange 提問 看來, 蘋果應該是到了晚近依舊沒有把這個 "漏洞" 封起來。

iPhone 的 「是否信任」 訊息說 「when connected」 這部電腦可以存取你的資料 [12/9 下午] 噗友 @irvinfly 找到 2018 年 4 月 關於 Trustjacking 的報導, 描述的基本上就是 62078 後門。 文中提到 iOS 7 的補救方式, 但也指出蘋果對其他的問題依舊沒有處理:

(看到 "是否信任" 訊息時) 用戶被誤導, 以為這(信任)只在實體連線時有效, 所以就假設拔線之後他的私人資料就安全了。 ... 攻擊者可以利用這個漏洞在受害裝置上安裝惡意的 apps, 甚至可以把既有的 app 換成一個修改過的版本, 看起來跟原來的 app 一模一樣, 但其實卻可以在 app 開啟時監控用戶, 甚至可以利用未公開的 API 全程 (不限 app 開啟時的意思?) 監控其他活動。
...
在我們以盡責的方式 (意指先私下通知, 隔一段時間後才公開此文) 向蘋果揭露之後, 蘋果 (在 iOS 11) 加了一個機制, 確認只有 iOS 裝置用戶才能選擇信任陌生電腦。 方式是在用戶確認信任一部電腦時, 要求用戶輸入密碼。 如圖所示, 用戶看到的訊息依舊會令他誤以為斷線之後就可以確保他的私密資料是安全的。 ... 蘋果並沒有全面性地回應 Trustjacking 的問題。 一旦用戶選擇信任那部有問題的電腦, 本文所描述的其他攻擊照樣繼續有效。

android adb vs iphone 62078: 哪些東西蘋果拒絕讓你用開關控制? [2020/7/7 改寫並補圖] 右圖對照了 android 的 adb 與蘋果的 62078 埠兩者設計的重要差異。 在 android 上面, 大致上每一件事有一個獨立的開關: 要不要對這部電腦開啟 usb? 要不要把它寫入永久信任的清單? 要不要對已信任的所有電腦開啟 wifi? 即使是 「永久信任」 的電腦, 也可以透過 「銷毀永久信任清單」 的方式讓用戶一次取消對所有電腦的信任。 不是很方便, 但至少有退路。

可是 iPhone 的設計卻是把用戶的手腳綁起來、 對 (正當或惡意入侵的) 企圖連線者大開方便之門:

  1. 2010 年 (或更早), 一小個自由軟體社群發現: 只需要在正門 (usb) 喊出正確的通關密語 (所有 iPhone 通用的; 與你的密碼無關), 就可以從正門進入你家 (iPhone)。 只要這麼進過一次, 從此以後就可以從 (你不會注意到的) 廁所氣窗 (也就是 wifi) 任意自由進出。
  2. 2013 年蘋果釋出 iOS 7。 此後凡是有陌生人要從正門進入你家, 你都會被通知, 必須你同意, 他才能進來。 一旦同意了, 就被蘋果強迫信任他一輩子 -- 圖中以 「真空安全鈕」 而非開關來示意, 這是為了強調 這是沒有回頭路的決定
  3. 2018 年賽門鐵克把這個 "漏洞" 通知蘋果, 蘋果的處置是: 以後凡是有陌生人要從正門進入你家, 你需要拿出鑰匙 (密碼) 從裡面 開鎖, 才能放他進來。 (為什麼不是要求 電腦那頭從外面 拿出鑰匙、 證明這就是你自己?)
  4. 但是 「暫時信任他一次, 就被蘋果強迫信任他一輩子」 的問題, 蘋果拒絕處理。

所以到了 2019 年的現在, "漏洞" 依舊存在: 陌生人只需要騙你同意過一次, 光明正大地從正門進來、 讓你看著他從正門離開, 然後你就會安心地進臥房睡覺了。 之後, 他依舊可以不定時地、 不驚擾你地從廁所氣窗進你家。 更糟的是: iPhone 沒有提供任何簡單明瞭的開關讓你可以關閉廁所氣窗 (wifi) 或撤銷所有已信任的裝置。 十年前就公開的漏洞, 就連 Symantec 這樣重量級的公司在 (已經太晚了的) 2018 年向蘋果的回報, 依舊被蘋果顧左右而言他應付掉了。 我個人不相信蘋果沒有能力處理這個拖了十年的問題。 我認為蘋果根本就不願意處理, 因為這是它刻意留的後門。

撰文過程發現幾件引人遐想的事, 也順便記載。 維基百科 寫道: 「蘋果的 iOS 採取了多個資安措施以減小攻擊面, 包含不再允許裝置自動掛載 usb 硬碟, 也釋出安全更新以修補諸如 Mactans 所提出的漏洞」 但卻並未提供蘋果安全更新公告的相關連結。 而且「自動掛載」根本就不是這個 "漏洞" 的重點啊! 想要用網路時光機手動備份 Zdziarski 那篇文章時, 網路時光機說: This URL has been excluded from the Wayback Machine. 我只好自己手動備份: 文字版圖片版。 2017 年, 蘋果延攬 iPhone 破解專家 Jonathan Zdziarski, 而 Zdziarski 也關閉了他的 twitter 帳號。

[感謝噗友 @irvinfly 提供 Trustjacking 資訊並指正錯誤。]

* * * * *

(本文也刊載於 T 客邦)

6 則留言:

  1. 另一個網頁備份服務,可作Wayback無法使用時的替代
    http://archive.ph/t8CEN

    回覆刪除
  2. 不知道這位所謂通識等級的資安老師標題中的後門在哪?

    『所以到了 2019 年的現在, "漏洞" 依舊存在: 陌生人只需要騙你同意過一次, 光明正大地從正門進來、 讓你看著他從正門離開, 然後你就會安心地進臥房睡覺了。 之後, 他依舊可以不定時地、 不驚擾你地從側門進你家。』

    不需使用者同意就能直接存取才叫做後門,
    選擇信任此裝置日後能直接存取叫做正常,

    完全看不懂這位通識等級的資訊安全老師在扯什麼東西。



    回覆刪除
  3. 補上截圖 (取自 symantec 的 trustjacking 文章)
    並標示出誤導用戶的用語 「when connected」。

    想像任何一位曾經到過你家維修的木工/水電/熱水器/電視/冰箱/有線..師傅。
    你開門讓他進來過一次, 因為當時你信任他,
    也以為你只給他這一次的信任 (when connected)。
    但事實是: 從此以後他就可以不驚擾你地自由進出你家。

    如果你跟我一樣覺得蘋果 (1) 用語誤導
    (2) 不給「暫時信任」的選項, 很奇怪。
    那麼這篇文章對你就有幫助了。

    當然啦, 有些人看到蘋果的語言
    "when connected", 還是能夠把它理解為
    「只要幫他開過一次門, 從此以後我永遠信任此人」
    那麼這篇文章對你而言就只是大驚小怪,沒什麼價值了。

    回覆刪除
  4. 作者已經移除這則留言。

    回覆刪除
  5. 新增一張 "android adb vs iOS 62078" 的對照圖, 更清楚地看出蘋果的設計完全不合邏輯。

    回覆刪除
  6. 我用的苹果VPN在Window上能用,但在ios上竟然不能用,這不知道是什麼原因,所以要選擇更多的VPN嗎?

    回覆刪除

請見 留言審核及授權政策