NoReboot 漏洞挾「假關機」神技來襲!惡意軟體將神鬼不覺常駐 iPhone

作者 | 發布日期 2022 年 01 月 10 日 8:15 | 分類 Apple , iPhone , 網路 Telegram share ! follow us in feedly


一般而言,手機用戶只要透過簡單的關機動作,就能將惡意程式碼消除殆盡,這是因為傳統惡意攻擊活動很難在手機系統重新啟動後還能持續常駐系統。但這宛如常識的簡單動作似乎不再靈光,因日前安全商 ZecOps 旗下安全研究人員鑽研出新攻擊手法,劫持並模擬 iPhone 用戶關機程序,實際上手機系統仍保持運作狀態,惡意軟體也能持續在背景進行諸如監控使用者行為的勾當。 

ZecOps 安全研究人員將這個全新的攻擊技術稱之為「禁止重啟動」(NoReboot)技術,並視之為惡意軟體得以持續常駐在 iPhone 系統中的終極漏洞。該公司並在自家官方部落格展示如何透過假關機手法來掩護遠端惡監控行為,同時並將NoReboot概念驗證(PoC)原始碼上傳 GitHub 上供人下載研究。

由於 NoReboot 手法模擬的關機程序就跟真關機沒兩樣,所以使用者無法區分真假關機的差異。使用者深信手機已關機,表面上螢幕關閉的 iPhone 系統不但正常運行,且保持連網狀態,遠端駭客可像手機主人為所欲為做任何事。這無異為遠端惡意攻擊提供最佳掩護。

駭客首先會在三個關機程序植入惡意程式碼

在日常正常狀況下,透過同時按下音量調小鍵與電源鍵,手機螢幕會隨即出現「滑動來關機」的滑塊,在滑動之後,手機就會正常關機。這個關機程序會涉及三個背景執行程序:InCallService、SpringBoard 及 backboardd。NoReboot 攻擊手法的第一步就是將惡意程式碼植入到這三個背景執行程序中。

一般而言,當使用者滑動「滑動來關機」滑塊來關機時,系統應用程式  /Applications/InCallService.app 會立即將關機訊息發送給專責絕大多數 UI 互動的 SpringBoard 程序。運用 NoReboot 攻擊手法的 ZecOps 安全研究人員透過 Objective-C 方法的掛鉤,成功將上述關機訊息加以劫持,一旦 InCallService 系統應用程式不再發送訊息給 SpringBoard 後,該系統應用程式反而會通知 SpringBoard 及 backboardd 觸發安全人員原先植入的惡意程式碼。

該惡意程式碼會迫使 SpringBoard 跳出,並阻止它再度啟動。由於 SpringBoard 專門負責對使用者行為的回應與互動,所以該程序一旦停擺,會讓手機看起來就和關機一樣沒什麼反應。這時遠端攻擊者可以大喇喇地透過手機鏡頭及麥克風監控使用者的一舉一動,完全不用擔心行藏會被發現。

一旦駭客取得根權限,惡意軟體恐永遠「長住」iOS 系統中

安全研究人員並指出,NoReboot 攻擊手法可以內建到可對使用者一舉一動加以偵測的惡意軟體中,如此一來,使用者一旦有任何嘗試關機的舉動就會被立即偵測,研究人員就可以立即展開關機程序的劫持與假造。除此之外,也可搭配能模擬「手機快沒電」狀態的惡意軟體,遠端攻擊者便可以理所當然地進行假關機作業。

通常手機關機後再啟動時,螢幕上會出現 Apple logo,這個例行的程序,NoReboot 也能透過前述惡意程式碼的植入來加以模擬。通常 SpringBoard 程序完成並跳出後,backboardd 接著會掌管螢幕,該程序會將使用者開機時按下按鍵與釋放按鍵的確切時間(通常開機必須長按電源鍵,然後再釋放),加以記錄並嵌入到全域性字典物件中。NoReboot 能透過 Objective-C 方法將該嵌入檔進行掛鉤以便攔劫 backboardd 程序。

不僅如此,該嵌入檔會釋出 SpringBoard,並在嵌入的 dylib 檔中觸發某特殊程式碼區塊,進而運用本地端 SSH 金鑰的存取來獲得根權限,接著並重啟使用者空間。一旦如此,惡意攻擊者能夠藉此退出所有程序,然後在不觸及系統核心的情況下重啟 iOS 系統。之後,即使 iOS 系統再怎麼更新,惡意程式碼都能在無法數次這樣的系統重啟後持續正常運行。

NoReboot 漏洞無法被修補,唯有內建硬體式系統狀態指示機制才有解

ZecOps 安全研究人員警告指出,基本上 NoReboot「漏洞」無法被修補,因為它完全沒有利用任何 iOS 系統漏洞。可怕的是,這個「漏洞」適用於所有版本的 iPhone,目前唯一可行的防範之道,就是由 Apple 出面為 iPhone 內建硬體式休眠/喚醒/開關機狀態指示器。

再者,因為 NoReboot 必須搭配惡意軟體才能進行其他更進一步的攻擊,所以使用者應該為自己的 iPhone 手機進行標準化惡意軟體及木馬程式掃描作業,並在下載與安裝新 App 時展開例行性的審查預防措施,以防止 NoReboot 的進一步為害。

(首圖來源:ZecOps