iPhone 用戶關不掉的 USB 連線附贈 wifi 攻擊氣窗

洪朝貴
ckhung@cyut.edu.tw
朝陽科技大學資訊管理系

摘要

不論是 android 或 iphone, 都允許用戶從電腦透過 usb 線下指令操作自己的手機。 因為 「操作」 包含讀取私密資料及安裝 app, 所以用戶應該要在有警覺的情況下才啟用; 用完之後也應該盡速關閉。 透過 usb 連線下指令操作, 可以有多種不同的選項, 例如僅允許一次或此後永遠允許這部電腦、 是否也允許這部電腦從 wifi 無線連線等等。 Android 的連線方式稱為 adb, 它的使用者介面把這些選項分開來處理, 在啟用最危險的選項之前, 用戶必須先跨過多個提醒關卡, 以避免意外觸發這個功能。 然而 iphone 的相對應功能 (透過 62078 埠的 lockdownd 服務) 卻只在 「是否允許」 一道關卡上把關, 至於其他選項則是一次全開。 早在 2010 年就已有軟體使用了這項機制與 iPhone 連線, 2013 年時出現了公開的討論及要求蘋果修補的聲音。 到了 2018 年, 賽門鐵克的 (Symantec) 正式回報問題, 但蘋果的回應方式卻是文不對題; 危險的 「附贈 wifi 攻擊氣窗」 依舊大開。

關鍵字: 資訊安全、 蘋果電腦、 BadUSB、 使用者介面

一、 不經雲端的 「手機與電腦連線」

手機與電腦之間想要傳檔案, 許多人會選擇透過雲端的帳號, 例如先上傳到 google drive 或 iCloud 或 dropbox, 再從另一部裝置下載回來。 但這是個習慣有點奇怪: 手機與電腦的距離, 明明只有幾十公分, 為什麼傳個檔案卻需要繞道加洲, 橫跨太平洋兩趟呢?

幸好 android 手機生態系裡, 在 2001 年時出現 otg 技術, 之後便逐漸有越來越多的手機開始支援 「讀取隨身碟」 功能。 (需要 micro usb 公 - Type A 母的 otg 轉接頭) 蘋果則遲至 2019 年才推出支援直接讀取一般 usb 隨身碟的 iOS 13 作業系統。 [1] 如此一來, 手機與電腦便可透過隨身碟間接傳檔。

在上述的連接方式中, 手機扮演的角色稱為 host, 因為手機這頭會主動發出讀取或寫入的命令, 而隨身碟那頭則是被動地回應手機下達的指令。 然而, 若是手機跟電腦直接以 usb 線連接, 通常電腦會扮演主動的 host 角色, 而手機則扮演被動的角色, 稱為 guest, 也就是電腦對手機下達指令。 這樣的連線方式, 除了可以省略隨身碟、 直接傳檔, 還可以從電腦上把 app 安裝到手機裡去, 或是讀取手機隱私資料等等, 彈性更大, 安全風險也更高。 在 android 手機上, 這種連線機制稱為 adb (android debug bridge), 因為這通常是保留給程式設計師從電腦上連至手機除錯用的功能; 而在 iPhone 上, 這種連線機制沒有名稱, 我們姑且稱之為 62078, 因為這是 iPhone 手機上接收電腦命令時所開啟的埠號。

電腦透過 usb 連線或 wifi 連線來操作手機, 風險極高, 特別是透過 wifi 的情況下, 用戶可能渾然不覺。 Android 預設關閉 wifi 遙控; 而 iPhone 用戶則無法輕易地關閉 (永遠開啟的) 附贈的 wifi 遙控功能。

二、 Android 的防護措施

Google 似乎並不鼓勵一般用戶啟用 adb 功能。 用戶必須在版本名稱上點七次、 被告知已成為開發者、 點進開發者選項, 然後才可以啟用 adb。 這部分跟資安保護沒有直接關係, 倒是提高心理障礙的效果可能比較顯著。

當手機透過 usb 線連上一部初次見面的電腦, 電腦並啟動連線請求時, Anddroid 手機會顯示電腦的 RSA 公鑰指紋 (可以把它想成是電腦自取的獨特暱稱) 並詢問用戶是否要信任這部電腦。 因為, 一旦信任了這部電腦, 接下來它就可以對你的手機為所欲為了。 通常這本來就是用戶想做的事, 因為 usb 線長度有限, 這部電腦必然也就在手機用戶身邊。 (除非它偽裝成 usb 充電座) 在此同時, 如果勾選 「永遠信任這部電腦」, 則不只這一次, 以後隨時再與這部電腦連線, 都會自動放行。 如果這是手機用戶自身的電腦, 通常都會勾選這個選項; 如果是別人的電腦, 那麼當然就不建議永遠信任。

Android 手機上另有一個選項, 如果勾選了, 則任何電腦都可以透過 wifi 對手機提出 adb 連線請求。 這是比較危險的選項, 一般不太建議啟用。 一旦啟用, 手機被遙控的風險將隨時存在, 但警戒心卻會因為沒有實體的 usb 線而降低。 預設當然也是不啟用的。

最後, Android 手機上還有一個 「撤銷 USB 偵錯授權」 (revoke USB debugging authorization) 的選項, 可以清除曾經信任的所有電腦, 要求未來任何的 adb 連線請求一律都要重新確認一次。 理想上, 如果可以多一個 「取消最新一筆的信任記錄」 選項, 可能會更實用一些。 但無論如何, 至少 單就使用者介面而言, Android 手機的 adb 連線選項設計清楚且合理, 有足夠的自由度讓用戶自行決定需要何種程度的便利、 願意承受多少的資安風險。

三、 iPhone 上永遠修補不起來的 "usb 資安漏洞"

iPhone 上也有類似的機制, 但拖了十年、 用戶與資安大廠反應了多次, 它的資安問題卻至今仍未解決。

資安專家 Jonathan Zdziarski 於 2013 年六月時在部落格寫道 [2]:

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

簡單地說, 一旦有電腦成功連進蘋果手機的 62078 埠, 就可以對它為所欲為 -- 就像 Android 手機的 adb 連線一樣。 那麼蘋果的 62078 埠, 是不是也像 Android 一樣有著適當的保護呢?

最大的問題就是蘋果的設計。 手機不會問用戶是否要允許 (企圖 usb 連線的) 裝置與你配對。 它就這麼直接幫你配對了。 每...一...次。 所以一連上線之後幾秒之內, 就建立了一筆新的配對記錄。 更糟的是, 這個配對記錄就這麼一輩子跟著你的手機, 除非用戶決定要 (從 iCloud 的備份?) 還原 iPhone。 也就是說, (自從你上次還原之後) 任何曾經與你手上的手機 (在你有意識或無意識的動作下) 配對過的裝置, 都可以存取你手機上的任何個人資料。 有沒有覺得有一點噁心了呢?
...
雖然配對過程一定要透過 usb, 但只要配對過之後, 那個裝置就可以透過 usb 或 wifi 操作你的手機, 就算你把 wifi 同步功能關掉也沒用。 這意謂著一名駭客只需要爭取到配對的幾秒鐘 usb 連線, 之後只要有網路就可以無限期下載你的個人資料。

蘋果在 2013 年九月釋出 iOS 7, 加上了 「usb 連線時會詢問用戶是否同意」 的機制, 但對於上述其他問題都沒有處理。 到了 2018 年四月, 終於有資安大廠出來說話了。 賽門鐵克的 Roy Iarchy 公開描述了 62078 埠的資安 "漏洞" [3]:

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

如果略過技術細節, 專注於安全流程的重大漏洞, 可以這樣比喻:

  1. 2010 年 (或更早), 一小個自由軟體社群發現: 只需要在正門 (usb) 喊出正確的通關密語 (所有 iPhone 通用的; 與你的密碼無關), 就可以從正門進入你家 (iPhone)。 只要這麼進過一次, 從此以後就可以從廁所的氣窗 (也就是 wifi) 任意自由進出。
  2. 2013 年蘋果釋出 iOS 7。 此後凡是有陌生人要從正門進入你家, 你都會被通知, 必須你同意, 他才能進來。
  3. 2018 年賽門鐵克把這個 "漏洞" 通知蘋果, 蘋果的處置是: 以後凡是有陌生人要從正門進入你家, 你都會被通知, 而且你需要拿出鑰匙 (密碼) 才能放他進來。
  4. 但是 「暫時信任他一次, 就被蘋果強迫信任他一輩子」 的問題, 蘋果拒絕處理。 「同意他從正門進入, 蘋果就同時強迫你也必須同意他以後可以從廁所氣窗進入」 這個問題, 蘋果也拒絕處理。

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

五、 結論與建議

對於出門在外的旅人而言, usb 充電座經常是保持手機清醒的救星。 但是充電座連到哪裡去? 連到一個單純的交流電變壓器, 還是連到一部電腦? iPhone 用戶只要有一次不小心同意陌生電腦連線, 從此以後這部電腦就可以隨時透過 wifi 連到 62078 埠遙控他的手機。 這也就是每隔一陣子就浮上新聞檯面的 JuiceJacking 攻擊。

從賽門鐵克的公開批評與蘋果的無動於衷看來, 一般用戶想要對蘋果提出建議或抗議恐怕不切實際。 網友 pwnsdx 撰寫了一份停用 62078 服務的教學文, 但只適用於已越獄的 iPhone, 且步驟較繁瑣。 [4] 對於沒有越獄的絕大多數用戶而言, 比較實際的做法可能是: 用 iTunes 把資料備份到 iCloud、 "Erase All Content and Settings"、 再從 iTune 還原備份的資料。 [5] Android 手機上簡單明瞭的 「撤銷」 選項, 在 iPhone 上卻沒有相似的功能, 而需要靠這種 (不對稱的) 備份還原大工程來達成。 這不禁令人好奇: 蘋果為什麼堅持非得要你把資料備份到他們的雲端, 不然就得開啟 wifi 廁所氣窗歡迎入侵者隨時光臨? 我們的世界, 與 「資訊大廠全面任意宰治衣食父母」 的距離, 已經越來越近了。

參考資料

  1. Keller, Joseph (2019), How to free up storage space on your iPhone. Retrieved from https://www.imore.com/how-use-external-hard-drives-your-iphone-or-ipad
  2. Zdziarski, Jonathan (2013), How Juice Jacking Works, and Why It’s a Threat. Retrieved from https://www.zdziarski.com/blog/?p=2345
  3. Iarchy, Roy (2018), iOS Trustjacking – A Dangerous New iOS Vulnerability. Retrieved from https://symantec-enterprise-blogs.security.com/blogs/feature-stories/ios-trustjacking-dangerous-new-ios-vulnerability
  4. Sabri (2015). How to finally disable this ******* Wi-Fi Sync port (62078) on iOS. Retrieved from https://gist.github.com/pwnsdx/cc82feb97f451f26c24b
  5. Zovi, Dino Dai (2014). iOS Lockdown Diagnostic Services. Retrieved from https://gist.github.com/ddz/b6879ba86fc7ddc2e26f