1. 程式人生 > 其它 >iPhone的Wi-Fi晶片漏洞利用POC公佈,趕緊更新系統吧

iPhone的Wi-Fi晶片漏洞利用POC公佈,趕緊更新系統吧

本週,谷歌 Project Zero 專案的研究員 Gal Beniamini 公佈了 iPhone Wi-Fi 韌體的漏洞利用 POC。這個漏洞(CVE-2017-11120)是個記憶體損壞(memory corruption)漏洞,存在於 iPhone 和其他蘋果產品(Android 手機、Apple TV 、 Apple Watch 和其他智慧 TV 等)所使用的 Broadcom 晶片中,影響 iOS 10 及更早的 iOS 版本。本週 iOS 11 版本釋出後,漏洞才修復。

攻擊詳情

攻擊者只需 iPhone 的 MAC 地址或網路埠 ID, 就可以利用這個漏洞,在目標裝置中執行惡意程式碼並建立後門,進而向韌體發出遠端讀/寫命令,輕鬆實現遠端控制 Wi-Fi 晶片。入侵成功之後,攻擊者 “可以與後門進行互動,通過分別呼叫 ‘read_dword’ 和 ‘write_dword’ 功能獲得對韌體的讀 / 寫訪問。”

Beniamini 釋出的漏洞報告稱:

該漏洞利用 iPhone 7 上的 Wi-Fi 韌體進行程式碼執行,存檔的密碼是 “rrm_exploit”。這個漏洞利用已經針對 iOS 10.2(14C92) 上的 Wi-Fi 韌體進行了測試,但可以適用於包括 iOS 10.3.3 及以下的所有 iOS 版本,只是其中有些符號可能需要針對不同版本的 iOS 進行調整。此外, 9.44.78.27.0.1.56 版本中的 BCM4355C0 晶片系統也存在這個漏洞。

此前其實也出現過類似的漏洞,都是通過本地 Wi_Fi 網路遠端接管智慧手機:

今年 4 月份,Gal Beniamini 在 Broadcom WiFi SoC(晶片軟體)中發現的漏洞; 今年夏天 Exodus Intelligence 研究員 Nitay Artenstein 披露的影響 Broadcom BCM43xx 系列 WiFi 晶片的 BroadPwn 關鍵遠端程式碼執行漏洞(CVE-2017-3544);

因為目前尚未有辦法檢測使用者的裝置是否在執行有漏洞的 BCM4355C0 版本韌體,最好的辦法還是將 iPhone 更新到沒有漏洞的 iOS 11 版本。在最新的 tvOS 版本中,蘋果也修復了這個漏洞。此外,本月初 Google 也在 Android 安全公告 2017-09-05 中修復 Nexus、Pixel 裝置以及 Android 裝置上解決了這個問題,不過安卓使用者需要耐心等待手機廠商更新。

POC 重點及檔案下載

6 月份 Beniamini 就已經發現並提交了這個漏洞,他在 Project Zero 網頁中記錄了這個問題:

Broadcom 韌體中有一個典型的 RRM Neighbor 報告響應框架:

RRM Neighbor 報告響應框架

在韌體版本為 9.44.78.27.0.1.56 的 BCM4355C0 SoC 上,RRM 相鄰報告響應框架由 RAM 函式 0x1B0FE8(代表 ROM 函式 0xABBBC)處理。 此函式主要可以驗證對話令牌(這是一個單位元組欄位,如果攻擊者提前不知道也可以輕易暴力破解)。 然後,該函式將 Neighbor 報告響應框架的內容複製到堆分配的緩衝區中,隨後呼叫 0xAC0A8 的內部 ROM 功能,以儲存每個給定的“操作類”(見9.4.2.37)的 Neighbor 數目。

以下是這個函式的近似高階邏輯:

int function_AC0A8(..., uint8_t* nrrep_buffer, ...) {  ...  //Find and increment neighbor in given channel for given OP-Class  int res = function_AC07C(..., nrrep_buffer, ...);  //If there's no entry for the given OP-Class, create and populate it  if (!res) {    uint8_t* buffer = malloc(456);    if ( !buffer ) {      ...    }    else {      buffer[4] = nrrep_buffer[16];              //Operational Class      uint8_t channel_number = nrrep_buffer[17]; //Channel Number      uint16_t* chan_neighbor_count_arr = (uint16_t*)(buffer + 6);      chan_neighbor_count_arr[channel_number]++;            ...    }  }  ...}

如上所述,該韌體儲存了緩衝區的連結列表,每個“操作類別”都有一個列表。 每個緩衝區長為 456 位元組,用於儲存含有每個通道 Neighbor 數目的陣列。 輸入條目的結構如下:

然而,由於“通道數目”欄位未被驗證,所以攻擊者可以任意地提供較大的值。 當最大允許通道數目為 0xE0 時,通過提供較大的值(如 0xFF),上述函式會將 16 位 word 增加到超出堆分配緩衝區的邊界,從而執行 OOB 寫入操作。 請注意,內部函式 0xAC07C 中也存在相同的未驗證問題。

在漏洞報告中,Beniamini 還分享了重要檔案和漏洞利用步驟:

所附檔案包含以下目錄:

-hostapd-2.6 :在exploit中使用 的hostapd 的修改版本。此版本的 hostapd 為配置可以支援802.11k RRM,尤其支援 Neighbor 報告。而且,這個版本的 hostapd 可用於新增各種命令,同時可實現整個漏洞利用過程中使用的動作框架的注入和接收; -exploit:即 exploit 本身。

要實現漏洞利用,必須執行以下步驟:

  • 將 SoftMAC 無線 dongle 連線到計算機並啟用(如TL-WN722N)
  • 編譯提供的 hostapd 版本
  • 修改“hostapd-2.6 / hostapd / hostapd.conf”下的“介面”設定,與你的介面名稱相匹配;
  • 在“exploit / conf.py”下方設定以下設定: -HOSTAPD_DIR :上述編譯的 hostapd 二進位制目錄 -TARGET_MAC :被入侵裝置的 MAC 地址 -AP_MAC :你的無線 dongle 的 MAC 地址 -INTERFACE - 你的無線 dongle 介面的名稱
  • 通過執行“exploit / assemble_backdoor.sh”來組合後門 shellcode
  • 執行 hostapd 以及上面提供的配置檔案,廣播 Wi-Fi 網路(“test80211k”)
  • 將目標裝置連線到網路
  • 執行“exploit / attack.py”

按照上述步驟,可以安裝簡易後門,對韌體進行讀/寫。還可以與後門進行互動,通過分別呼叫 “read_dword” 和 “write_dword” 功能來獲得對韌體的R / W訪問。