摘要
本報告提供 NGate 行動惡意軟體的詳細技術分析,該軟體透過利用近場通訊 (Near Field Communication, NFC) 轉送攻擊向量,促成未經授權的現金提款。NGate 的運作方式是將自身註冊為受害者 Android 裝置上的主機卡類比 (Host Card Emulation, HCE) 支付服務,擷取卡的 NFC 交換 (APDU 指令),並將此資料連同受害者的 PIN 碼轉送到攻擊者控制的自動櫃員機 (Automated Teller Machine, ATM) 裝置。分析重點在於惡意軟體的核心組件,包括其 Android Manifest 設定、複雜的原生設定載入機制,以及用於轉送操作的通訊協定。報告強調使用進階的逆向工程概念,例如基於憑證的密鑰衍生和動態設定,以了解惡意軟體的韌性和操作流程。
1. 簡介
NGate 惡意軟體代表了行動銀行威脅的顯著演進,超越了傳統的網路釣魚和認證竊取,直接促成欺詐性的實體交易。此攻擊利用了 NFC 轉送技術,這是一種中間人攻擊形式,其中兩方(受害者的卡和 ATM)之間的通訊被攻擊者攔截並轉發。在 NGate 的環境 中,受害者被社交工程誘騙安裝一個偽裝成銀行驗證工具的惡意 Android 應用程式 [1]。核心技術創新在於應用程式能夠作為虛擬支付卡,擷取敏感的交易資料,並安全地將其傳輸到攻擊者的基礎設施。
2. 技術架構與執行流程
NGate 應用程式的結構旨在確保其核心功能能夠早期且隱蔽地初始化。執行流程在安裝後首次啟動時立即開始,優先設定 NFC 攔截和命令與控制 (C2) 通訊通道。
2.1. Android Manifest 設定
應用程式的能力基本在其
AndroidManifest.xml
檔案中定義。該惡意軟體請求必要的權限,並註冊一個關鍵服務以啟用 NFC 轉送功能。
以下程式碼片段說明了主機卡類比(HCE) 服務的註冊 [1]:
<service android:name="rha.dev.me.nfc.hce.ApduService" android:permission="android.permission.BIND_NFC_SERVICE" android:exported="true"> <intent-filter> <action android:name="android.nfc.cardemulation.action.HOST_APDU_SERVICE"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> <meta-data android:name="android.nfc.cardemulation.host_apdu_service" android:resource="@xml/hce"/> </service>
<action android:name="android.nfc.cardemulation.action.HOST_APDU_SERVICE"/>
標籤向 Android 作業系統發出信號,表明此服務能夠處理應用程式協定資料單元 (Application Protocol Data Unit, APDU) 指令,有效地允許應用程式模擬支付卡。此外,相關的
<aid-group android:category="payment">
宣告確保當終端嘗試啟動支付交易時,應用程式會被 NFC 堆疊優先處理 [1]。
2.2. 原生設定載入與混淆
NGate 採用的一個關鍵防禦和混淆技術是將其 C2 基礎設施和操作參數隱藏在加密的資產檔案中。Java 進入點
rha.dev.me.util.Globals
負責載入原生程式庫並啟動設定程序 [1]。
- // Java Globals Class (Partial)
- static {
- System.loadLibrary("app"); // Loads libapp.so
- }
- /* renamed from: b */
- public static void m28b(Context context) {
- f476b = context;
- init(context);
- loadNConfig(context, context.getAssets());
- }
- public static native void init(Context context);
- public static native void loadNConfig(Context context, AssetManager assetManager);
- // ... other native flags
核心邏輯位於原生共享物件
libapp.so
中,它執行以下關鍵步驟:
-
密鑰衍生:
該程式庫呼叫一個函數,例如
get_cert_sha,以衍生一個 32 位元組 的解密密鑰。此密鑰是從 APK 簽署憑證 的 SHA-256 雜湊值 產生的 [1]。此機制作為一種防篡改檢查;如果 APK 被重新簽署,解密密鑰將會不正確,導致失敗。 -
解密與解析:
衍生的密鑰用於解密來自
assets/____資源的十六進位制 blob。產生的明碼資料包含定義惡意軟體設定的鍵值對,包括 C2 端點 (例如91.84.97.13:5653) [1]。
這種使用憑證衍生密鑰進行設定解密是一種穩健的技術,使靜態分析複雜化。分析師試圖提取設定時,首先需要正確識別密鑰衍生演算法,然後將其應用於所分析樣本的特定簽署憑證。使用像 Rizin 這樣的工具進行 static analysis 等技術,允許進行反組譯和 pattern matching,對於追蹤原生函數呼叫和理解密鑰衍生邏輯至關重要 [2]。
原生程式庫還實現了一種稱為
safeExit()
模式的防禦機制,如果設定載入或解密失敗,則停用應用程式的啟動器,進一步阻礙自動化分析 [1]。
2.3. 操作流程圖
NGate 惡意軟體的整體技術流程,從初始化到最終轉送,可視化如下:
Malicious App] --> B(App Starts:
Java Entry Point); B --> C{Load libapp.so}; C --> D[Native:
Get APK
Signing Certificate]; D --> E[Native:
Calculate
SHA-256 Hash]; E --> F[Native:
Derive
Decryption Key]; F --> G[Native:
Decrypt
assets/____ Config]; G -- Success --> H[Native:
Parse C2 Config]; G -- Failure --> I["Native:
safeExit() -
Disable Launcher"]; H --> J[Java:
Initialize
HCE Service]; J --> K["Victim
Taps Card &
Enters PIN"]; K --> L(Android NFC Stack
Invokes ApduService); L --> M[ApduService
Captures
APDU Commands]; M --> N[Send
APDU + PIN
to
C2:
91.84.97.13:5653]; N --> O[Attacker Device
at ATM]; O --> P[Attacker Replays
APDU to ATM]; P --> Q[Unauthorized
Cash Withdrawal];
3. NFC 轉送機制與 APDU 處理
NGate 攻擊的核心是對 Android 中主機卡類比(HCE) 功能的利用。HCE 允許任何應用程式模擬 NFC 卡,回應由 NFC 讀取器(在此案例中為 ATM 的卡讀取器)發送的 APDU 指令。
當受害者將實體卡貼近手機時,手機的 NFC 讀取器模式被啟動,讀取卡的資料。同時,惡意應用程式的 HCE 服務準備好作為轉送端點。應用程式擷取卡的資料以及隨後通常在卡和 ATM 之間發生的 APDU 交換。
ApduService
類別是指定用於處理這些交換的組件。該服務從 NFC 堆疊接收 APDU 指令,並負責產生適當的 APDU 回應。在合法的 HCE 應用程式中,此服務將包含處理交易的邏輯。在 NGate 中,此服務作為一個通道,透過 socket 連線將原始 APDU 指令和擷取的 PIN 碼轉發到 C2 伺服器 [1]。
由
libapp.so
公開的原生標誌,例如
reader()
和
vts()
,暗示了動態切換應用程式 NFC 角色的能力。
reader()
標誌可能控制負責讀取實體卡的組件,而
vts()
(虛擬終端服務) 或類似標誌則控制 HCE 模擬角色,允許惡意軟體管理轉送操作的兩端。
4. C2 通訊與資料外洩分析
C2 通訊在設定成功載入後啟動,建立一個 socket 連線到 hardcoded 的 IP 和 port,
91.84.97.13:5653
[1]。透過此通道傳輸的資料是攻擊中最關鍵的部分:擷取的 APDU 指令和受害者的 PIN 碼。
PIN 碼是透過向受害者顯示的螢幕鍵盤收集的,偽裝成卡驗證程序 [1]。然後,此 PIN 碼與原始的 NFC 交易資料捆綁在一起。傳輸原始 APDU 指令是必要的,因為交易是有狀態的;ATM 發送一系列指令,而卡(或作為卡運作的 HCE 服務)必須正確回應每一個指令。透過轉送原始 APDU 串流,攻擊者確保交易狀態在網際網路轉送過程中得以維持。
使用原生程式庫進行設定和 C2 設定提供了一層隱蔽性和複雜性。原生程式碼可以管理 socket 連線、加密和資料序列化,使得在沒有動態分析或模擬的情況下分析通訊協定變得困難。例如,可以使用 dynamic analysis 技術,該技術涉及在受控環境中執行程式碼,並使用 IAT hooking 來攔截 API 呼叫,以觀察在傳輸前應用於 APDU 和 PIN資料的確切資料格式和加密 [2]。
5. 結論
NGate 惡意軟體活動展示了結合社交工程與進階行動惡意軟體能力的複雜技術方法,用於金融詐欺。利用 Android 的 HCE 功能進行 NFC 轉送,結合由憑證衍生密鑰保護的穩健原生設定載入機制,突顯了現代行動威脅日益增加的複雜性。未來的研究應專注於開發能夠對原生二進位檔執行 pattern matching 的自動化工具,以快速識別和提取密鑰衍生邏輯和 C2 設定,從而減輕此類韌性惡意軟體所帶來的威脅。