難以移除的手機木馬程式xHelper

在去年中發現到木馬程式 xHelper 大規模的攻擊活動後,至今已接近一年,該惡意程式仍然保持活躍,原因是 xHelper 即使用戶把它刪除或重置成出廠設定,仍然能保留在裝置之內。

認識 xHelper 的運作方式
根據現時仍然活躍的樣本 Trojan-Dropper.AndroidOS.Helper.h 的分析結果,惡意程式偽裝成知名的手機清潔工具或加速應用程式,實際上完全沒有相關功能。在安裝之後,所課的清潔工具便會消失,無論在上畫面或程式選單內都沒有蹤影,只可以在系統設定中的已安裝應用程式中找到。

木馬的內容經過加密放在 /assets/firehelper.jar 內,由於加密有部份於早期版本相同,所以解密相對容易,它之後的工作是發送受害者手機資料 (android_id、生產商、型號、韌體版本等) 到指定網站,並下載另一個惡意模組 Trojan-Dropper.AndroidOS.Agent.of。

惡意程式解密後便會啟動它的內容,它的操作方式令模組更難被分析,之後便是另一惡意程式 Trojan-Dropper.AndroidOS.Helper.b 的解密與運作,最後是執行 Trojan-Downloader.AndroidOS.Leech.p 進一步感染裝置。Leech.p 的工作是下載 HEUR:Torjan.AndroidOS.Triada.dd,內裡具備大量漏洞工具去取得受害者裝置的深層權限。

由於惡意程式儲存在應用程式的資料夾,所以其他程式無法存取,這種 Matryoshka 風格的方式讓攻擊者隱藏蹤跡,並使用保安方案已知的惡意模組。惡意程式主要能夠取得中國生產商的 Android 6 和 7 裝置的深層權限 (包括 ODM),取得權限後 xHelper 可以直接安裝惡意檔案在系統分區。

系統分區一般在系統啟動時以唯讀模式掛載,不過由於取得深層權限,木馬程式以寫入模式重新掛載和執行主要工作,Triada 的慣用技倆包括重新掛載系統分區去安裝程式,在分析中 com.diag.patches.vm8u 被安裝,內裡偵測到 Trojan-Dropper.AndroidOS.Tiny.d,而且數個執行檔被複製到 /system/bin 資料夾 和數個檔案複製到 /system/xbin 之內。

那些檔案透過 install-recovery.sh 執行,讓 Triada 於系統啟動時執行,這些檔案存放的資料夾被設定為不可修改,增加了刪除惡意程式的難度,因為即使有超級用戶權限,系統也不容許對那些資料夾進行修改,不過通過 chattr 指令能刪除這個設定,從而應對惡意程式的自我防護機制。

為了防止用戶通過以寫入模式重新掛載系統分區的方式刪除惡意程式,攻擊者使用了另一種防護技術去防止修改系統 library /system/lib/libc.so,這個 library 含有裝置內接近全部執行檔案的指令編碼,Triada 加入自己的編碼到 Libc 的掛載功能,藉此防止用戶以寫入模式掛載系統分區。

此外,木馬程式下載和安裝其他惡意的程式,例如 HEUR:Trojan-Dropper.AndroidOS.Necro.z,並刪除深層存取管理的應用程式,例如 Superuser。

移除 xHelper 的方法
單純移除 xHelper 並不能令系統完全「消毒」,因為 com.diag.patches.vm8u 會重新安裝 xHelper 和其他惡意程式,不過如果用戶在 Android 智能手機設有復原 (Recovery) 模式,於完全從系統分區移除所有惡意程式前,用戶可以從原本的韌體中抽取 libc.so 檔案去取代被感染的檔案。不過,直接把裝置 reflash 應該比較簡單和可靠。

要注意一點,被 xHelper 攻擊的韌體有時候含有預先安裝了的惡意程式,在這種情況下 reflash 也無補於事,所以應該考慮安裝其他韌體,但其他韌體存在令裝置無法正常運作的風險,使用前需小心查看清楚。

資料來源:Securelist