當前位置: 華文世界 > 手機

剖析Android端SpyNote惡意軟體技術

2023-12-05手機

介紹

Android 威脅環境充滿了各種型別的惡意軟體,每種惡意軟體都為該領域帶來了自己的獨創性。盡管每種 Android 惡意軟體都有其自己的惡意議程,但大多數情況下的典型目標是竊取使用者數據,尤其是可用於惡意目的甚至稍後出售的個人數據。僅根據議程,某些惡意軟體可以歸類為間諜軟體,因為它們的唯一目標是透過竊取盡可能多的使用者數據來監視使用者,並在保持隱藏的情況下盡可能長時間地竊取。這與資訊竊取者的目標略有不同——資訊竊取者通常是竊取使用者憑據和信用卡資訊以進行轉售。

在值得註意的間諜軟體中,最近備受關註的一款是 SpyNote。該間諜軟體應用程式透過簡訊(即惡意簡訊)進行傳播,敦促受害者從提供的連結安裝該應用程式。當然,托管和下載發生在官方 Play 商店應用程式之外,以防止 Google Play 商店進行的安全評估阻止該間諜軟體的傳播。

在本文中,我們根據最近的分析描述了該惡意軟體應用程式的一些突出功能。這些功能是間諜軟體的典型特征(包括跟蹤軟體,其具有不同的傳播機制 - 這是另一篇文章的主題)。

SpyNote 功能

我們使用 sha256 分析了 SpyNote 樣本 – bad77dca600dc7569db4de97806a66fa969b55b77c24e3a7eb2c49e009c1f216(包名稱:Glasgow.pl.Dimension)

清單檔

與典型的 Android 惡意軟體分析一樣,我們透過檢視 AndroidManifest.xml 檔開始分析。圖 1 顯示了 Manifest 檔的快照。盡管 SpyNote 請求的許可權列表不是很詳盡,但我們確實看到了一些可疑的許可權請求。其中包括 READ_SMS、PROCESS_OUTGOING_CALLS、CAMERA、RECORD_AUDIO、WRITE_EXTERNAL_STORAGE 和 BIND_ACCESSIBILITY_SERVICE。盡管對這些許可權的請求並不總是表明存在惡意行為,但這些是間諜軟體請求的典型許可權。

圖 1. SpyNote 請求的可疑許可權

入口點

根據(一篇)

Android 文獻, 有多種方法可以為您的應用程式建立入口點:

  • 處理 MAIN 和 LAUNCHER 型別意圖的啟動器活動。
  • 服務在背景執行。
  • 當系統發送應用程式期望的廣播之一時呼叫的廣播接收器。
  • Application中定義的attachBaseContext方法的聲明
  • 對於我們的分析,下一個邏輯步驟是辨識這個可疑間諜軟體應用程式的入口點,並找到 SpyNote 使用的方法。第一次檢查時,我們發現 AndroidManifest.xml 中使用的幾個方法可以作為「入口點」。為了獲得更多理解,我們在 Android 裝置上安裝 SpyNote 並觀察其行為。這有助於將手機上觀察到的行為與程式碼關聯起來。

    隱藏的應用程式

    安裝後,我們註意到應用程式啟動器中看不到該應用程式。然而,在「電話設定」->「應用程式」選單中進行簡單檢查即可顯示該應用程式已成功安裝。我們可以推斷該應用程式正在隱藏以避免被發現。

    對於間諜軟體來說,隱藏的原因是為了避免被發現,並盡可能長時間地繼續其竊取使用者數據的目標。間諜軟體可以使用多種方法來實作此隱藏功能:
    • 使用 setComponentEnabledSetting 在執行時隱藏應用程式
    • 在 AndroidManifest.xml 中不提供啟動器活動類別 (CATEGORY_LAUNCHER)(對應於包含 ACTION_MAIN 的意圖)

    如圖 2 所示,SpyNote 中的啟動器活動缺少 CATEGORY_LAUNCHER 類別。這使得該應用程式隱藏在手機上。圖 2 還顯示了主要活動的類名。

    圖 2. 缺少「啟動器」類別導致應用程式隱藏

    從「最近」中排除

    除了隱藏自身之外,SpyNote 還采取了額外的步驟來隱藏其活動,使其不顯示在「最近使用的應用程式」螢幕(顯示最近使用的應用程式的螢幕)中。它透過在 Androidmanifest.xml 中定義內容android:excludeFromRecents並將其設定為「true」來實作此目的。

    根據 Android 文件,「最近螢幕」是一個系統級 UI,列出了最近存取的活動和任務。使用者可以瀏覽列表,選擇要恢復的任務,或者透過滑動來從列表中刪除任務」。通常透過點選螢幕底部的漢堡選單或從底部滑動螢幕來存取此功能。

    啟動隱藏的應用程式

    圖 3.「最近」螢幕

    間諜軟體應用程式可透過多種方式啟動隱藏的應用程式:

    • 攻擊者透過簡訊發送命令。間諜軟體應用程式接收「收到簡訊」的廣播,然後取消隱藏應用程式圖示。

    • 收到外部觸發後啟動應用程式:

    – 接收撥出電話的廣播並觸發應用程式

    – 在清單檔中添加針對特定 URL 的意圖過濾器。每當受害者瀏覽到該 URL 時,惡意軟體就會啟動。例如,可以透過發送簡訊等方式說服受害者存取該 URL。

    • 使用單獨的啟動器應用程式,僅將所需的意圖發送到惡意軟體應用程式,惡意軟體應用程式在收到此意圖後啟動。

    對於間諜軟體來說,保持隱藏至關重要。然而,這提出了一個問題:「受害者將如何啟動間諜軟體應用程式以竊取數據」?

    SpyNote 惡意軟體應用程式可以透過外部觸發器啟動。我們建立了一個簡約的「Hello World」風格的 Android 應用程式(如圖 4 所示),它僅發送必要的意圖(執行操作的「意圖」)。收到意圖後,惡意軟體應用程式將啟動主要活動。

    圖 4. 啟動隱藏惡意軟體的外部觸發器應用程式

    許可權

    啟動後,SpyNote 主要請求 BIND_ACCESSIBILITY_SERVICE 許可權,一旦受害者授予該許可權,惡意軟體就會向自己授予多個其他所需許可權(android.permission.PROCESS_OUTGOING_CALLS、android.permission.RECORD_AUDIO、android.permission.WRITE_EXTRENAL 等,如圖 1 所示)。 1)

    圖 5. 使用輔助服務自行授予許可權

    數位。圖5顯示了受害者授予BIND_ACCESSIBILITY_SERVICE許可權後的步驟:

    1. 間諜軟體應用程式一一請求清單檔中提到的所有許可權,並且
    2. 它不是等待受害者授予這些許可權,而是生成一個「點選」筆畫來復制使用者的點選,從而自行授予所有請求的許可權。

    頑固服務

    啟動 SpyNote 後,我們可以從手機設定中驗證它是否使用模糊的服務名稱執行兩個服務。然而,根據 AndroidManifest.xml,我們可以確認這些是在名為 C71 和 C38 的兩個類中實作的。

    對程式碼的進一步調查表明,這些服務就是我們所說的「頑固服務」。頑固服務的主要目標是讓受害者或 Android 系統本身很難關閉惡意軟體應用程式。

    SpyNote 透過註冊一個名為「RestartSensor」的廣播接收器(一個允許您註冊系統或應用程式事件的 Android 元件)來實作此功能。該廣播接收器是獨一無二的,因為系統上沒有其他接收器能夠處理 SpyNote 在即將關閉時生成的特定廣播。

    每當 SpyNote 服務即將關閉時,該服務的 onDestroy 方法就會被呼叫。onDestroy 方法本身會生成一個「RestartSensor」廣播。這是特定於該應用程式的廣播,不能由系統上的任何其他應用程式生成。收到此廣播後,廣播處理常式(即先前註冊的唯一接收器)將重新啟動服務。圖6展示了這個過程。

    圖 6. Diehard 服務 – 自行重新開機

    圖 7. 透過程式碼螢幕截圖顯示了此過程。間諜軟體套用首先在 AndroidManifest.xml 檔中聲明一個廣播接收器。每當嘗試關閉以銷毀惡意服務時,onDestroy 方法都會生成「RestartSensor」廣播。然後廣播接收器重新啟動服務。

    圖 7. SpyNote 為防止終止其服務而采取的步驟

    C2通訊

    正如典型的間諜軟體一樣,被盜數據只有在發送回威脅行為者時才有用。這種滲透是透過與攻擊者的命令和控制 (C2) 伺服器建立連線來發生的。辨識此類 C2 伺服器並阻止與其通訊可以幫助防止任何個人數據泄露。

    在我們正在分析的 SpyNote 範例中,C2 通訊是作為間諜軟體服務初始化的一部份立即建立的。簡單地搜尋「connect」呼叫,就會發現 C2 通訊的存在。C2 IP 和埠采用 base64 編碼,如圖 8 所示。

    圖 8. C2 通訊

    電話錄音

    SpyNote 將間諜活動更進一步,甚至將受害者的來電記錄為 .wav 檔,並將這些檔發送到 C2 伺服器。它透過首先授予自己「 READ_CALL_LOG 」許可權(這要歸功於之前授予的 ACCESSIBILITY_SERVICE 許可權)來實作此目的,並另外為系統廣播意圖「 PHONE_STATE 」定義廣播接收器。

    當受害者接到來電時,電話狀態會發生變化,並觸發廣播接收器。廣播接收器中的程式碼檢查受害者是否已接聽電話,一旦確認,就開始錄制音訊。圖 9 顯示了執行此惡意活動的程式碼片段。

    圖 9. 電話錄音

    影像捕捉/螢幕截圖

    該間諜軟體使用MediaProjection API 來捕獲受害者手機的影像。

    MediaProjection API 允許應用程式捕獲可以錄制或投射到其他裝置(例如電視)的裝置內容。內容始終是從真實的顯示裝置捕獲的。然後將捕獲的內容渲染到中間「虛擬顯視器」,這是媒體投影的核心。最後,Surface 是所捕獲影像的消費者。它從「虛擬顯視器」獲取這些影像並渲染它們。

    為了實作這一點,SpyNote 註冊了一個 onImageAvailableListener,只要有新影像可用,就會呼叫此偵聽器。然後,惡意軟體應用程式直接將捕獲的影像數據作為 JPG 檔發送到 C2 伺服器。所有這些如圖 10 所示。

    圖 10. 間諜軟體使用 ImageReader 截取螢幕截圖

    記錄和竊取數據

    間諜、記錄和泄露使用者數據是任何間諜軟體的一些核心「功能」。SpyNote 也不例外。成功啟動後,它會建立一個新的日誌檔,並開始記錄受害者執行的各種操作。

    按鍵記錄是 SpyNote 的另一個核心功能,惡意軟體應用程式會將受害者輸入的所有按鍵記錄為 Base64 字串在其自己的日誌檔中。由於其自己的日誌檔,間諜軟體應用程式可以直接保存偵聽的使用者數據(例如憑據)。例如,我們在解鎖需要輸入密碼的裝置螢幕後檢查了 SpyNote 的日誌檔。圖 11 顯示了 SpyNote 建立的日誌檔以及其中捕獲的螢幕解鎖密碼。

    圖 11. 間諜軟體資訊記錄器

    捕獲的動作的其他一些範例包括螢幕開/關、螢幕解鎖密碼、主螢幕上顯示的應用程式列表、移動手勢等。

    解除安裝困難

    所有間諜軟體的目標都是最大限度地在受害者裝置上停留,並提取盡可能多的資訊。SpyNote 作為隱藏應用程式啟動其活動,還透過使解除安裝過程變得困難來確保更長的永續性。

    由於該應用程式是隱藏的,受害者無法「長按」應用程式圖示並將其解除安裝。受害者解除安裝應用程式的下一個選項是轉到「設定」→「應用程式」並解除安裝。

    然而,只要受害者透過「設定」導航到應用程式,SpyNote 就會透過關閉選單螢幕來防止這種情況發生。這是可能的,因為間諜軟體獲取了 BIND_ACCESSIBILITY_SERVICE 許可權。

    受害者也無法透過開發人員選項停止該間諜軟體的服務,因為如前所述,該惡意軟體在裝置上執行著「頑固服務」。受害者最終只能選擇恢復出廠設定,從而在此過程中遺失所有數據。

    概括

    SpyNote 樣本是一種間諜軟體,它會記錄和竊取各種資訊,包括擊鍵、通話記錄、已安裝應用程式的資訊等。它隱藏在受害者的裝置上,因此很難被註意到。這也使得解除安裝變得極其棘手。受害者剩下的唯一選擇是執行恢復出廠設定以刪除惡意軟體。

    F-Secure 將此樣本檢測為「Malware.Android/Bankbot.FLJI.Gen」。

    轉譯自:https://blog.f-secure.com/take-a-note-of-spynote/