行動
行蹤隱密的 Android 惡意程式 MMRat 利用冒牌應用程式商店從事銀行詐騙
趨勢科技行動應用程式信譽評等 (MARS) 團隊發現了一個完全沒被發現的全新 Android 銀行木馬程式,叫作「MMRat」,它從 2023 年 6 月開始便一直在攻擊行動裝置用戶。
趨勢科技行動應用程式信譽評等 (MARS) 團隊發現了一個完全沒被發現的全新 Android 銀行木馬程式,叫作「MMRat」(趨勢科技偵測名稱:AndroidOS_MMRat.HRX),它從 2023 年 6 月開始便一直在攻擊行動裝置用戶。此惡意程式是以其獨特的應用程式套件名稱「com.mm.user」來命名,它能擷取使用者輸入的資料和螢幕畫面,還能藉由各種技巧從遠端遙控受害的裝置,讓駭客能在受害裝置上從事銀行詐騙。
不僅如此,MMRat 使用了一種基於 Protobuf 的特殊客製化幕後操縱 (C&C) 通訊協定,Protobuf 是一個用來將結構化資料序列化的開放原始碼資料格式。這項能力很少在 Android 銀行木馬程式上看到,但確能在傳輸大量資料時提高效能。
散播方式分析
根據我們的分析顯示,大多數的 MMRat 樣本都是從一系列偽裝成官方應用程式商店的類似網路釣魚網站下載而來。這些網站之間的主要差別在於使用的語言不同,也就是 MMRat 集團所瞄準的受害地區。不過,這些網路釣魚連結到底是如何進入受害者的裝置,目前還不清楚。
在本文撰寫當時,此惡意程式還沒被 VirusTotal 發現,證明他們躲避偵測的技巧相當成功。一些使用類似技巧 (例如鍵盤側錄與螢幕截圖) 的其他類似惡意程式,比方說 GigabudRat 和 Vultur,在其攻擊過程當中也同樣有著強大的躲避偵測能力。
MMRat 如何執行銀行詐騙
- MMRat 的攻擊程序如下:
- 受害者下載並安裝 MMRat。
- 受害者授予 MMRat 所需的權限。
- MMRat 開始與遠端伺服器通訊並傳送大量資料,包括:裝置狀態、個人資料、鍵盤側錄資料。
- 當受害裝置沒在使用時,駭客就會從遠端喚醒裝置,解鎖螢幕,然後執行銀行詐騙。過程中,駭客也可能擷取螢幕畫面,以便在伺服器端即時看到裝置的畫面。
- 最後,MMRat 會將自己解除安裝,清除惡意程式在系統上的所有痕跡。
MMRat 分析
正如前面提到,MMRat 能夠擷取使用者輸入的資料、螢幕畫面,並從遠端遙控受害的裝置。它非常仰賴 Android 的「無障礙」(Accessibility) 服務與 MediaProjection API 來運作。
假冒與常駐行為
為了避免讓人起疑,MMRat 經常偽裝成政府單位或交友軟體,並且在啟動時向受害者顯示網路釣魚網站。因此,它會註冊一個接收器來接收系統事件,包括系統開關機、重新啟動等事件。在收到這些事件時,惡意程式就會啟動一個 1x1 大小的點陣圖活動來確保自己能一直執行。
與遠端伺服器的網路通訊
在初始化無障礙服務時,MMRat 會與駭客的遠端伺服器建立連線。值得注意的是,MMRat 會使用同一台伺服器上的不同連接埠作為不同用途:
連接埠 | 通訊協定 | 說明 |
---|---|---|
8080 | HTTP | 資料外傳 |
8554 | RTSP | RTSP 視訊串流 |
8887 | 客製化 | 幕後操縱 (C&C) |
表 1:MMRat 使用同一台伺服器上的不同連接埠作為不同用途。
其 C&C 通訊協定特別之處在於它是根據 Netty (一種網路應用程式框架) 以及前面提到的 Protobuf 而客製化,並擁有設計完善的訊息結構。
在 C&C 通訊方面,駭客使用一種通用的結構來表示所有的訊息類型,並使用「oneof」關鍵字來表示不同的資料類型。我們將其 C&C 通訊中使用的主要 Protobuf 結構重新整理在圖 4 當中。
「PackType」是一個數值,用來代表 C&C 指令,而「pack」欄位則內含 C&C 指令的詳細資料。
表 2 顯示惡意程式用到的 C&C 指令定義及對應的說明。由於它採用雙向通訊,因此我們將 C&C 指令分成伺服器指令與用戶端指令兩種。伺服器指令是發送到用戶端的指令,用戶端指令則是發送到伺服器。
名稱 | 類型 | 說明 |
---|---|---|
LOGIN_ADMIN | 無 | 無 |
TOUCH | 伺服器 | 執行手勢 |
ACCESSIBLE_GLOBAL | 伺服器 | 使用無障礙服務執行全域動作 |
INPUT_TEXT | 伺服器 | 設定目前聚焦節點的文字 |
LAYOUT_SHOW (2) | 伺服器 | 啟用/停用使用者終端機狀態 |
REQUEST_PERMISSION | 無 | 無 |
USER_TERMINAL_STATE | 用戶端 | 傳送 UserState 訊息到遠端伺服器 |
OPERATIONAL_LOG | 用戶端 | 傳送鍵盤側錄資料到遠端伺服器 |
UNLOCK_SCREEN | 伺服器 | 使用偷來的密碼解鎖螢幕畫面 |
INPUT_PASSWORD | 伺服器 | 輸入微信和支付寶的密碼 |
CLICK_TEXT | 伺服器 | 點選節點 |
OPEN_BLACK_MASK | 伺服器 | 將其檢視設為可見/不可見 |
LAYOUT_READER | 用戶端 | 傳送蒐集到的節點資訊到遠端伺服器 |
PING | 用戶端 | Ping 心跳訊號 |
PONG | 用戶端 | Pong 心跳訊號 |
MEDIA_STREAM (2) | 伺服器 | 開始擷取螢幕畫面或相機錄影 |
MICROPHONE | 伺服器 | 設定畫面錄影時的麥克風狀態 |
UNINSTALL_APP | 伺服器 | 自我解除安裝 |
WAKE_UP_DEVICE | 伺服器 | 喚醒裝置 |
APP_OPT | 伺服器 | 顯示/隱藏圖示 |
表 2:MMRat C&C 指令與說明。
蒐集裝置狀態與個人資訊
MMRat 會蒐集各種裝置狀態及個人資訊,包括:網路資料、螢幕資料、電池資料、已安裝的應用程式,以及通訊錄。
- 網路資料:訊號強度與網路類型等等。
- 螢幕資料:螢幕是否已鎖定、使用中的應用程式,以及螢幕上目前顯示的活動。
- 電池資料:裝置電池的狀態資訊。
- 通訊錄:使用者的聯絡人清單。
- 已安裝的應用程式:裝置上已安裝的應用程式清單。
為了即時蒐集上述資料,MMRat 會設定一個每秒執行一次的計時器工作,再搭配一個每 60 秒重置一次的計數器,來確定不同任務的執行時間。
MMRat 會特別蒐集受害者的通訊錄和已安裝的應用程式清單,我們相信駭客的目的是要蒐集個人資訊來確定受害者符合他們原先設定的目標。例如,受害者的聯絡人符合特定地理條件,或者已安裝了某種應用程式,這些資訊可用於後續的惡意活動。
自動核准權限
MMRat 一旦取無障礙功能的權限,就能利用它來授予自己其他權限和修改設定。例如,在前面的資料蒐集階段,MMRat 可自動授予自己「READ_CONTACTS」(讀取通訊錄) 的權限來蒐集聯絡人資料。
圖 4 中的程式碼顯示 MMRat 如何自動獲得其他權限。其作法是啟動系統對話方塊來自動核准要求的權限。這個自動核准功能會在畫面上找到「OK」(確定) 或相關關鍵字的按鈕,然後使用無障礙功能來模擬點選動作。這表示 MMRat 可以不需要使用者幫忙操作,自己就能授予自己一些執行惡意活動時所需要的權限。
擷取動作與使用者輸入
MMRat 會透過無障礙服務,利用鍵盤側錄功能來擷取使用者輸入並錄製動作。這些資料可用來取得受害者的登入憑證和錄製受害者的操作,以便之後可在裝置上回放。
有別於其他鍵盤側錄惡意程式會針對特定的情境 (例如只有在受害者使用銀行應用程式時側錄鍵盤輸入),MMRat 會記錄使用者的每一個動作,然後透過 C&C 通道上傳到伺服器。很顯然 MMRat 背後的駭客想要從受害者身上蒐集大量的動作記錄,來判斷惡意程式下一步該怎麼做。
每一筆記錄都是一個 LogInfo 結構,並使用 Protobuf 來將它序列化。
message LogInfo {
string packageName = 1;
string className = 2;
string content = 3;
}
除了傳統的鍵盤側錄之外,惡意程式還對螢幕解鎖圖案特別感興趣。如果它偵測到使用者正在解鎖裝置,惡意程式就會蒐集使用者所畫的解鎖圖案,並透過 C&C 通道上傳到伺服器。如此一來,就算受害者的裝置已經鎖定,駭客還是有辦法進入裝置。
擷取螢幕畫面
MMRat 可即時擷取受害裝置的螢幕畫面,並將畫面串流到遠端伺服器。在擷取螢幕畫面時,惡意程式主要是使用 MediaProjection API 來側錄受害者的螢幕畫面。不過,趨勢科技也發現惡意程式還會使用另一種方法來擷取螢幕畫面以避開 FLAG_SECURE 保護機制,這就是某些惡意程式所稱的「使用者終端機狀態」(user terminal state)。
根據我們的觀察,擷取螢幕畫面是為了搭配遠端遙控功能使用,讓駭客在執行銀行詐騙時能看到裝置的即時狀態。有別於擷取登入憑證,我們發現惡意程式會不斷檢查是否有收到進一步指令,並且在 30 秒內未收到指令時,就自動停止串流螢幕畫面。
Android MediaProjection API
為了方便利用 MediaProjection API 將視訊串流至遠端伺服器,MMRat 會使用一個名為「rtmp-rtsp-stream-client-java」的開放原始碼程式框架。此框架可用來側錄螢幕畫面,並透過 Real Time Streaming Protocol (即時串流通訊協定,簡稱 RTSP) 將畫面資料即時串流到遠端伺服器。在收到「MEDIA_STREAM」指令之後,MMRat 可側錄兩種類型的資料:螢幕和相機 (根據發出的組態設定)。
例如,當側錄螢幕資料時,MMRat 會啟動一個名為「DisplayActivity」的活動。這個活動會呼叫「createScreenCaptureIntent」來請求錄製的權限,進而觸發一個系統對話方塊來要求使用者核准權限。正如前面提到,這個系統對話方塊會透過自動點選的方式自動核准權限。
一旦錄製的權限被核准,MMRat 就會開始錄製螢幕畫面並呼叫前述開放原始碼框架所提供的 API 功能「startStream」將資料串流到 C&C 伺服器。
使用者終端機狀態
「使用者終端機狀態」(user terminal state) 這個擷取螢幕畫面的作法與透過 MediaProjection API 的作法截然不同。正如其名,MMRat 不會將螢幕畫面錄製成視訊,而是使用無障礙服務,每一秒循環擷取視窗內所有的子節點一次,然後透過 C&C 通道將擷取到的資料上傳。因此,擷取的內容只有文字,沒有圖形使用者介面,所以就好像早期的「終端機」一樣。
儘管這樣的作法有點粗糙,而且駭客還需要在伺服器端執行一些資料重整的動作,但卻能有效蒐集遠端監視及遙控所需的資訊 (例如要點選和輸入哪個地方)。由於這種方法並不需靠 MediaProjection API,因此可繞過 FLAG_SECURE 的保護機制,這是一個可用來防止螢幕畫面或錄製被擷取的視窗旗標。
除此之外,搭配 Protobuf 與 Netty 客製化通訊協定也有助於提升效能,這在即時傳輸大量螢幕畫面資料時特別有用,如此駭客就能達到類似視訊串流的效果。
遠端遙控
MMRat 惡意程式會透過無障礙服務來遙控受害裝置,執行一些像手勢、解鎖螢幕、輸入文字之類的動作。若再搭配偷來的登入憑證,駭客就能執行銀行詐騙。
正如前面「MMRat 如何執行銀行詐騙」一節所述,我們相信在遠端遙控之前,MMRat 就會先執行一些前置步驟來避免使用者發現:
- 喚醒:惡意程式會利用無障礙服務來模擬點兩下螢幕的動作以喚醒裝置。
- 解鎖螢幕:惡意程式會使用之前偷到的解鎖圖案來解鎖螢幕。
最後,MMRat 會在受害者未使用手機時遙控裝置。
隱藏痕跡
MMRat 惡意程式會在收到 C&C 指令「UNINSTALL_APP」時將自己刪除。此行為通常會在銀行詐騙執行之後,這使得追蹤其活動更加困難。
結論與建議
MMRat 是一個強大的 Android 銀行木馬程式,對行動裝置用戶帶來相當大的威脅,尤其在東南亞地區。其主要功能,如:鍵盤側錄、螢幕錄製以及遠端遙控,都能讓它迅速有效地執行銀行詐騙。
使用者可採取以下建議來防範此惡意程式:
- 只從官方來源下載應用程式。MMRat 一般是經由假扮成官方應用程式商店的網路釣魚網站下載。因此,請務必只使用可信賴的平台 (如 Google Play 商店或 Apple App Store)。
- 定期更新裝置軟體。更新當中通常也會包含一些安全強化功能來防範最新威脅,例如 MMRat。
- 在授予無障礙權限時請務必小心謹慎。MMRat 就是利用 Android 的無障礙服務來執行各種惡意活動。請務必仔細查看應用程式請求的權限。
- 在您的設備上安裝可靠的安全解決方案。如此可協助您偵測並消除威脅,不讓威脅有機會造成損害。
- 對於自己的個人資訊和銀行資料應隨時保持警覺。MMRat 的最終目的是從事銀行詐騙,因此,請小心您在網路上分享的資訊,以及您提供給應用程式的個人資料。
趨勢科技目前已加入 Google 的 App Defense Alliance (應用程式防護聯盟,簡稱 ADA),該聯盟會在應用程式上架到 Google Play 商店之前預先偵測它是否為惡意程式,藉此提升使用者安全。身為聯盟的一員,趨勢科技將與 Google 密切合作,確保使用者不受駭客侵害,建立一個更安全的數位資訊交換世界。
入侵指標資料
如需本文提到的入侵指標完整清單,請至此處。