寫在前面的話
當前的Android生態環境中充斥著各種類型的惡意軟件,每一款惡意軟件都有其自己獨特的一面。在大多數情況下,它們的目標都是竊取用戶數據,然后將其出售以換取金錢。但某些惡意軟件則可以被歸類為間諜軟件,因為它們的唯一目的就是通過竊取盡可能多的用戶數據來監控用戶,并盡可能地在目標設備上隱藏更久的時間。
最近,研究人員對一款名為SpyNote的惡意軟件進行了跟蹤和分析。SpyNote是一款間諜軟件,它可以通過Smishing短信詐騙(例如惡意SMS消息)的形式來傳播,并敦促目標用戶使用短信提供的鏈接來下載和安裝該應用程序。毫無疑問,惡意軟件的托管和下載都不會在官方的Play Store上完成。
在這篇文章中,我們將對SpyNote間諜軟件進行深入分析,并描述SpyNote中的一些突出功能和間諜軟件的一些典型特征。
SpyNote樣本
我們分析的SpyNote樣本SHA256如下:
bad77dca600dc7569db4de97806a66fa969b55b77c24e3a7eb2c49e009c1f216
包名如下:
Glasgow.pl.dimensional
Manifest文件
跟平時分析Android惡意軟件一樣,我們首先會分析其AndroidManifest.xml文件,如下圖所示,雖然SpyNote求的權限列表不是很全面,但我們確實看到它請求了一些可疑的權限。其中包括READ_SMS、PROCESS_OUTGOING_CALLS、CAMERA、RECORD_AUDIO、WRITE_EEXTERNAL_STORAGE和BIND_ACCESSILITY_SERVICE等。盡管對這些權限的請求并不總是表示惡意行為,但這些是間諜軟件請求的典型權限。

入口點
下一步就是要確定這個可疑的間諜軟件的入口點,并找到SpyNote為此所使用的方法。在第一次檢查時,我們發現AndroidManifest.xml中使用的幾種方法可以作為“入口點”。為了深入觀察其行為,我們在測試Android設備上安裝了SpyNote并觀察其行為,這有助于將手機上觀察到的行為與代碼關聯起來。
一般來說,我們有下列幾種方法來為應用程序創建入口點:
1、通過處理MAIN和LAUNCHER類型Intent的啟動器Activity;
2、后臺運行的服務;
3、廣播接收器,當系統發送應用程序期望的廣播時被調用;
4、應用程序中定義的attachBaseContext方法聲明;
App隱藏
安裝后,我們注發現在應用程序啟動器中是看不到該應用程序的。不過,在“手機設置”->“應用程序”菜單中進行簡單檢查,即可顯示該應用程序已成功安裝。因此,我們可以推斷SpyNote應該使用了隱藏技術以避免其被發現安裝在了目標用戶的設備上。
間諜軟件因為要盡可能久地安裝在目標設備中,因此一般會使用下列幾種方法來實現隱藏以避免檢測:
1、使用setComponentEnabledSetting在運行時隱藏App;
2、在AndroidManifest.xml中不指定啟動器Activity Intent(CATEGORY_LAUNCHER);
如下圖所示,SpyNote的啟動器Activity并沒有CATEGORY_LAUNCHE,這樣就可以達到隱藏的目的了,而且下圖還顯示了MAIN Activity的類名稱:

從“最近使用的應用”中隱藏
根據Android文檔的描述,“最近使用的應用”頁面是一個系統級UI,可以列出最近訪問的活動和任務。用戶可以在列表中導航,選擇要繼續的任務,或者通過滑動將任務從列表中刪除。

除了隱藏安裝之外,SpyNote還會將其從Android設備的“最近使用的應用”頁面中隱藏自己的活動,這一點可以通過在AndroidManifest.xml中將android:excludeFromRecents屬性設置為true來實現。
啟動隱藏的App
對于間諜軟件來說,保持隱藏是至關重要的。然而,這就提出了一個問題:“目標設備如何啟動間諜軟件應用程序,從而竊取數據”?
惡意軟件一般可以通過下列幾種方法來啟動隱藏的App:
1、通過SMS短信發送命令,惡意軟件接收到了“新短信”的廣播之后,則顯示隱藏的App圖標;
2、收到外部觸發條件后啟動App(例如撥打電話廣播、在Manifest文件中為指定URL添加intent過濾器等);
3、使用一個單獨的啟動器App,這個App只會向惡意軟件發送intent,惡意軟件接收到intent后便會啟動;
分析后發現,SpyNote惡意軟件應用程序可以通過外部觸發器啟動。為此,我們創建了一個“Hello World” Android應用程序,具體如下圖所示。它只發送必要的intent,收到intent之后,惡意軟件App便會啟動:

權限
啟動之后,SpyNote便會請求BIND_ACCESSILITY_SERVICE權限,一旦目標用戶授予該權限,SpyNote就會利用該權限來自行授予自己多個其他所需權限,包括android.permission.PROCESS_OUTGOING_CALLS、android.pPermission.RECORD_AUDIO和android.permission.WRITE_EXTRENAL等:

SpyNote首先會依次請求Manifest文件中定義的所有權限,它不會等待目標用戶授權這些權限,而是生成一個“點擊”事件來復制用戶的“點擊”行為,從而自行授予所有請求的權限。
頑固的服務
SpyNote啟動后,我們發現它會運行兩個名稱經過模糊處理的服務,根據AndroidManifest.xml,我們可以確認這些是在兩個名為C71和C38的類中實現的。對代碼的進一步調查表明,這些服務就是我們所說的“頑固服務”,而這種服務的主要目標是讓關閉惡意軟件應用程序變得非常困難。
SpyNote通過注冊一個名為“RestartSensor”的廣播接收器(一個允許我們注冊系統或應用程序事件的Android組件)來實現此功能。此廣播接收器是唯一的,因為系統上沒有其他接收器能夠處理SpyNote在即將關閉時生成的特定廣播。
每當SpyNote服務即將關閉時,就會調用該服務的onDestroy方法。onDestroy方法本身生成一個“RestartSensor”廣播。這是特定于此應用程序的廣播,系統上的任何其他應用程序都無法生成。在接收到該廣播后,廣播處理程序(它是先前注冊的唯一接收器)將重新啟動服務:

下圖是上述流程的代碼實現部分,SpyNote首先在AndroidManifest.xml文件中聲明了一個廣播接收器。每當試圖關閉以銷毀惡意服務時,onDestroy方法都會生成“RestartSensor”廣播,廣播接收器然后便會重新啟動服務:

C2網絡通信
SpyNote在竊取到目標用戶數據之后,需要將其發送給威脅行為者。在我們正在分析的SpyNote示例中,C2通信是作為間諜軟件服務初始化的一部分立即建立的。SpyNote的C2所使用的IP地址和端口使用了Base64編碼:

電話錄音
SpyNote甚至還會將目標用戶的來電記錄為.wav文件,并將文件發送到C2服務器。它首先授予自己“READ_CALL_LOG”權限,而這個權限則要“歸功”與之前拿到的ACCESSILITY_SERVICE權限,它還會為系統廣播intent “PHONE_STATE”額外定義一個廣播接收器。
當目標用戶接到來電時,電話狀態會發生變化,廣播接收器也會被觸發。廣播接收器中的代碼會檢查目標用戶是否接聽了電話,一旦確認,就會開始錄制音頻:

圖像捕捉/截圖
SpyNote使用了MediaProjectionAPI來捕捉目標用戶Android設備上的圖像信息。
MediaProjection API允許應用程序捕獲設備內容,這些內容可以錄制或投射到電視等其他設備。然后,這些捕獲的內容被呈現到中間的“虛擬顯示器”,這是媒體投影的核心。最后,Surface會從“虛擬顯示器”中獲取這些圖像并渲染這些圖像。
為了實現圖片捕捉或屏幕截圖,SpyNote注冊了一個onImageAvailableListener,只要有新的圖像可用,就會調用該偵聽器,并將捕捉到的圖像存儲為JPG文件并發送至C2服務器:

記錄和竊取數據
間諜軟件的一些核心功能是監視、記錄和提取用戶數據,SpyNote也不例外。SpyNote成功啟動后,它會創建一個新的日志文件,并開始記錄目標用戶執行的各種操作。
擊鍵記錄是SpyNote的另一個核心功能,它會在自己的日志文件中以Base64字符串的形式記錄目標用戶按下的所有擊鍵信息,其中包括用戶數據和密碼憑證等內容:

難以卸載
由于SpyNote是是隱藏的,用戶無法“長按”應用程序圖標并將其卸載。然而,每當用戶通過“設置”導航到應用程序時,SpyNote都會關閉菜單屏幕,從而防止其被卸載,這可能是因為SpyNote獲取了BIND_ACCESSILITY_SERVICE權限。
而且目標用戶也無法通過開發者選項停止SpyNote的服務,用戶唯一的選擇就是執行出廠設置。
總結
SpyNote是一種典型的Android端間諜軟件,它能夠記錄和竊取各種信息,包括按鍵、通話日志、已安裝應用程序的信息等。它隱藏在目標用戶的設備上,很難被注意到,這也使得卸載變得極其棘手。目前,目標用戶唯一的選擇是執行設備出廠重置以刪除惡意軟件。
入侵威脅指標IoC
bad77dca600dc7569db4de97806a66fa969b55b77c24e3a7eb2c49e009c1f216
37[.]120[.]141[.]140:7775
參考文獻
https://blog.f-secure.com/take-a-note-of-spynote/
一顆小胡椒
一顆小胡椒
上官雨寶
前沿信安資訊陣地
FreeBuf
ManageEngine卓豪
安全內參
尚思卓越
嘶吼專業版
安全圈
007bug
ManageEngine卓豪