FakeSpy捲土重來攻擊日本
一、前言
FortiGuard實驗室最近發現了一些惡意流量,其C2伺服器位於中國境內。惡意連結所使用的域名與日本最知名的快遞服務商非常相似。根據我們的分析,建立該連結的網站屬於虛假網站,並且會傳播Android惡意軟體。
初步分析時,這個Android檔案非常像趨勢研究人員在2018年6月份發現的FakeSpy惡意軟體,但根據我們分析平臺的處理結果,雖然該樣本在程式碼上基於FakeSpy,但這款新變種還包含新的功能,並且惡意活動勢力不斷增長。
二、網頁分析
初步分析樣本後,我們發現了一個域名: hxxp://sagawa-ba[.]com
。
圖1. 偽造的日本快遞官網
眼尖的讀者可能會發現,該網站偽裝的是日本的某家快遞服務公司。然而仔細檢查後,我們可以看到該網站並沒有使用SSL證書,並且頁面佈局也不正確。
在分析頁面原始碼時,我們首先注意到的是其中的Mark of the Web(MOTW)註釋。MOTW是Windows XP SP2開始引入的一個安全機制,現在每一個瀏覽器都會部署該機制,在使用者下載Web頁面和指令碼到本地磁碟時提高使用者的安全性。
圖2. 主頁面的MOTW標誌
這行註釋表明該頁面最早下載自某個頁面,然後再上傳到其他頁面中,以便新增一些新的“功能”。新增的一個主要功能是包含 kk
函式的一段指令碼。我們還觀察到頁面中註釋掉了一個彈出訊息,可能表明攻擊程式碼仍在研發中。 kk
函式很簡單,會開啟網站的 pp.html
頁面,一旦終端使用者點選網站時就會呼叫該函式。
圖3. 主頁面中的重定向指令碼
跟隨重定向程式碼,我們可以看到如下錯誤資訊,聲稱出於安全原因,使用者需要輸入手機號碼。
圖4. 出於“安全”原因彈出來的手機號碼頁面
分析處理輸入欄位的指令碼後,我們發現使用者輸入的資料會直接傳送到惡意伺服器,其中cookie欄位用來發送使用者輸入的移動手機號碼。之後瀏覽器會跳轉到下一個頁面,呼叫 pp2.html
。該頁面中同樣包含被註釋的程式碼段,可能表明攻擊程式碼仍在研發中。
圖5. 手機號碼傳送指令碼
進入下一頁,惡意網站會要求我們輸入“確認”碼:
圖6. 手機號的“確認”碼
當我們檢查輸入欄位的程式碼時,可以發現其中依然包含註釋程式碼,但這次程式碼與之前的 pp.html
JavaScript程式碼非常相似。很有可能是開發者複製貼上程式碼後,在投入實際環境中前忘了刪掉其中的註釋,也有可能將這些註釋程式碼留在頁面中用來測試。
圖7. 確認碼的驗證程式碼
分析該指令碼,我們可以看到指令碼會呼叫 validate()
函式,檢查使用者提供的程式碼是否包含4個數字。如果滿足該條件,網站就會將程式碼傳送到服務端,將使用者重定向到 loding1.html
頁面。不幸的是,我們沒有從伺服器那獲取任何響應資料。但該元素可能用來幫使用者訂閱付費服務,或者用來驗證使用者提供的是真實的手機號,該頁面只為使用者“服務”一次。
除了該指令碼外,該頁面還包含一個定時器指令碼。這裡有趣的是,該頁面的註釋中包含一些中文字元。
圖8. 帶有中文註釋的自定義定時器程式碼
接下來,如果我們我們分析 loding1.html
原始碼,可以找到負責處理伺服器返回資料的另一個指令碼,指令碼中我們還是可以找到中文註釋,還有一條韓文註釋。這可能表明攻擊者存在程式碼複用,沒有翻譯中文字元,或者也有可能是中國攻擊者和韓國攻擊者合作的結果。
圖9. 帶有中文和韓文註釋的頁面載入指令碼
在搜尋程式碼模式時,我們發現這些有趣的地方並不足以作為追蹤釣魚網站開發者的證據。雖然釣魚頁面中的 setInterval('newArticleCheck()', 2000);
程式碼與2015年韓國人 쥬리앙
(Juriang)在Q&A PHP論壇上使用的程式碼樣式、函式名以及語法相匹配,但我們無法肯定新的攻擊程式碼由同一個人開發,有可能其他人直接複用了PHP論壇上的程式碼。
圖10. 論壇上發現的同樣的程式碼特徵
觀察網站的主邏輯後,我們決定分析分析其他功能的頁面程式碼,此時我們發現頁面上存在安裝 sagawa.apk
Android應用的程式碼:
圖11. Android應用安裝連結
不幸的是,此時該連結已失效,會跳轉到一箇中文404頁面:
圖12. 中文404頁面
完成對該網站的初步檢查後,我們分析了該域名的WHOIS資訊。該伺服器位於臺灣地區,域名註冊時間為2018年7月16日。
圖13. C2伺服器位置資訊
令人驚訝的是,我們發現惡意活動並不僅限於這個域名。我們可以找到347個域名,這些域名對快遞官網域名的第一部分或者最後一部分域名做了修改。攻擊者使用如下3個郵箱來註冊這些域名。
mantianxing0111[at]yahoo.co.jp (註冊104個域名) 2509677308[at]qq.com (註冊55個域名) 21449497[at]qq.com (註冊188個域名)
圖14. 偽造域名部分列表
我們決定檢查該列表中的某些域名。這些網站大部分都已註冊,但沒被使用過。某些域名已連線到託管伺服器(託管伺服器主要位於臺灣地區),但並不包含網頁內容。然而,某些網站上的確包含同樣的釣魚頁面。
我們針對性檢查了結尾為 -iso.com
以及 -wow.com
的那些域名。在檢查過程中,我們發現了另一個指令碼,該指令碼與 -ba.com
網站上的指令碼非常相似,但並不會將使用者重定向到電話號碼頁面,而是在使用者點選網頁時,下載 sagawa.apk
應用。以 -wow.com
結尾的域名並不會收集使用者手機號碼,也不像 -ba.com
的域名那樣包含 pp.html
、 pp2.html
或者 loding1.html
頁面。此外,該域名會使用英文的404頁面。
圖15. 投放 sagawa.apk
應用的指令碼
三、應用分析
我們分析的APK雜湊值為 92cd2e43bf85703f92a493668be3d777c3d3cfab3f674b62bd334ddc082ac50d
。
首先我們分析的是APK檔案的內容。
我們使用內部分析工具分析樣本,分析報告部分內容如下圖所示。應用的包名為 fang.tang.sha
,除了與正常APK檔案一樣包含 classes.dex
外,還包含適配不同架構的一個庫( libxxn.so
)、一個asset檔案( nini.dll
)。這已經是一個危險標誌:正常Android應用不需要依賴MS Windows庫。
圖16. APK報告摘抄
快速檢查後,我們發現 nini.dll
其實是經過加密處理的一個檔案,這引起了我們的好奇心,決定開始分析apk檔案。
首先我們分析了 AndroidManifest.xml
檔案,其中包含應用的大部分資訊,比如許可權資訊、Activity和服務資訊等。我們首先注意到應用會請求大量可疑許可權:
圖17. APK過濾器
圖18. APK許可權
然而還有另一處重要細節, classes.dex
檔案中並不包含 AndroidManifest
中的類和函式。應用使用的所有Activity以及服務都需要提前在 Manifest
中提前宣告,宣告不存在的類並沒有意義。這裡可以推測出來,應用在執行期間會動態載入其他一些程式碼。
應用在執行時會啟動一個 webview
,顯示攻擊者正在偽造的快遞服務主頁。應用會請求註冊為處理SMS的預設應用並在後臺執行,無視電池優化策略。與此同時,應用圖示會從介面中消失,並在後臺保持執行。
由於應用與使用者的互動較少,因此我們來看一下應用程式碼。
應用的執行流程非常簡單:應用首先載入 libxxn.so
,然後執行 run()
函式(位於 Java_taii_YANGG_run
共享物件中)。該函式會解密 nini.dll
檔案,載入解密後的檔案(在我的測試裝置上該檔案位於 /data/user/0/fang.tang.sha/app_cache
目錄中)。應用會動態載入該檔案,我們可以在 adb logcat
命令的輸出中驗證這一點:
圖19. adb logcat輸出
該檔案在載入後就會被立即刪除,加大取證難度。幸運的是,我們可以使用FRIDA(非常方便靈活的一個開源套件)來停止執行流程,在檔案被刪除前儲存該檔案。
ofollow,noindex" target="_blank">FRIDA 是逆向Android應用的一款工具(並且功能不侷限於此),也能適用於多個架構,可以在root和非root裝置上使用(非root裝置上需要進一步配置)。大家可以訪問 Github頁面 下載我所使用的指令碼。
攻擊載荷
釋放出來的 mycode.jar
檔案中包含一個 classes.dex
檔案,惡意軟體使用 libxxn.so
庫中的 DexClassLoader
函式來載入該檔案。
載荷看起來像是FakeSpy(2018年6月份發現的一款惡意軟體)的變種,包含前一代版本所具備的大部分功能,但同樣包含一些新功能。
功能分析
圖20. SMS資訊收集
惡意軟體會請求成為預設的SMS應用,因此該應用具備攔截SMS訊息的能力並不奇怪。當裝置接收到訊息時,應用會記錄訊息中的所有信息,並將其傳送給C2伺服器。
圖21. C2通訊資料中包含目標號碼
此外,這款惡意軟體還可以建立SMS併發送至其他裝置。實際上這也是惡意軟體的傳播方式。移動裝置一旦被感染,就會開始與C2伺服器通訊,在SMS中嵌入指向攻擊者控制域名的連結,嘗試通過SMS感染其他手機號對應的裝置。
在圖22中,我們使用FRIDA控制 SMSmanager
這個Android類,然後修改其中的 sendTextMessage()
函式,只記錄下惡意訊息內容,並沒有實際傳送惡意訊息。
圖22. 傳送給目標的SMS
惡意軟體還可以獲取當前裝置上已安裝的所有應用列表以及其他資訊(如IMEI以及手機號),將這些資訊以JSON檔案形式傳送給C2伺服器。利用這種方法,攻擊者可以獲取該裝置的所有狀態資訊。
圖23. 傳送至C2伺服器的應用資訊
最後,惡意軟體還可以向伺服器傳送完整的崩潰報告。
異常特徵
該樣本中包含一些奇怪的特徵,因此我們認為惡意軟體仍處於開發狀態。
C2伺服器地址以 URL
名稱儲存在 sharedPreferences
中,這個值最開始設定為 125.227.0.22
,但可以在應用執行過程中通過 ChangeIP()
函式動態修改,該函式會檢查執行時間是否已超過1分鐘,如果滿足該條件,則從加密的字串中解出新的C2伺服器IP地址。該字串指向一個推特賬戶,其使用者名稱包含新的IP地址,可以使用簡單的字串操作進行解碼。
圖24. 用於獲取新C2地址的推特賬戶
然而,即便dex檔案中存在解密程式碼,根據我們的分析,惡意軟體似乎從來不會使用這段程式碼。相反,應用會在活動期間始終與第一個C2地址通訊。我們嘗試將HTTP流量重定向修改後的C2地址,但並沒有收到任何響應。
惡意軟體同樣包含指向 /sdcard/new.apk
檔案的多處引用,可以利用給定的URL下載檔案,然後檢查裝置是否包含名為 ni.vb.bi
的一個應用,如果包含該應用,則不會安裝下載的檔案。然而,在執行期間惡意軟體永遠不會呼叫下載檔案的函式。
圖25. 安裝 new.apk
的函式
惡意軟體的一個類中包含 main()
和 System.out.println()
函式,Android APK中並不需要這些函式,但在Java檔案中很常見,這表明開發者可能想測試某些功能,或者只是從其他源中複製貼上程式碼。
圖26. 測試main()函式
惡意軟體還會請求Device Admin許可權,並且包含一個 DeviceAdminReceiver
類,但從來沒有請求許可權來使用這個類,因此這個類永遠無法發揮作用。
圖27. Device Admin函式
在分析過程中,我們發現惡意樣本幾乎每天都會更新證書,表明另一端至少有某些人在維護整個基礎設施。
四、總結
總而言之,參與此次攻擊活動的幕後黑手擁有大量域名,這些域名偽造的是日本快遞服務商的真實域名,這意味著他們正在為攻擊活動投入大量時間及域名,但可能仍在考慮從這些資源中獲取豐厚利潤的方法。利用攻擊者郵箱註冊的域名大多數處於非活躍狀態,但這並不意味著這些域名永遠不會被使用。網站上存在的指令碼、註釋以及無用的程式碼行可能表明攻擊者仍在改進攻擊方式,嘗試使用不同的方法來實現他們的既定目標。
不幸的是,我們無法確定攻擊者為什麼要收集手機號,但可以猜測攻擊者會利用這些資訊來發起其他惡意攻擊,或者將這些資訊售賣給其他攻擊者。
這款惡意軟體以及此次攻擊活動似乎仍處於早期研發階段。惡意軟體基於已有程式碼庫開發而來,但攻擊者嘗試改進程式碼,新增其他功能,有些功能目前仍沒有發揮作用,但可能在將來會有所變化。
五、解決方案
Fortinet產品可以防禦此類攻擊,已將釋放器標識為 Android/Agent.CIJ!tr
,將攻擊載荷標識為 Android/Fakespy.Z!tr
。
六、IOC/">IOC
釋放器雜湊值:
24072be590bec0e1002aa8d6ef7270a3114e8fe89996837a8bc8f6a185d9690e 92cd2e43bf85703f92a493668be3d777c3d3cfab3f674b62bd334ddc082ac50d 01caceb86d3e2a383eeab4af98c55a2ec7b82ae0972594866b13fc0c62c93d74
攻擊載荷雜湊值:
b7f4850b243649cdba97fd3bb309aa76fe170af80fa9c6ee5edd623dac2ce4e2 00ce9ffe9cca59df86125747c3a2e548245bf1b0607bc8f080fd3c501d9fc3f0
C2伺服器地址:
sagawa-ba[.]com sagawa-wow[.]com sagawa-iso[.]com
我們的Web Filter服務同樣會過濾出其他344個域名。