以Predator為例,全面揭秘信息竊取軟體的技術細節
一、概述
我們主要針對一個竊取用戶信息的惡意軟體Predator the thief進行深入分析,該軟體使用C/C++語言編寫。與當今主流的惡意軟體一樣,該惡意軟體可以作為構建器(Builder),也可以通過C&C渠道下載額外的惡意軟體。
我們對這一惡意軟體進行了詳細分析,並對其中的一些重點功能模塊進行了詳細拆解和分析。本文適合初級逆向工程師或惡意軟體分析人員閱讀,希望通過我們的分析,能讓大家輕鬆了解惡意軟體所使用的某些技術或技巧,並掌握應對方法。
二、信息竊取軟體的典型生命周期
對於如今的大多數信息竊取軟體來說,其執行順序幾乎相同,但逃避檢測技術則根據所使用的C&C通信方式而有所不同。舉例來說,在Predator中,設置過程非常簡單,但如果攻擊者在其C&C上部署了載入程序(Loader),就會有所不同了。
Predator the thief的生命周期:
三、準備階段
在竊取敏感數據之前,Predator首先需要進行一些基本的設置才能正常工作。所有的配置,都是逐步載入到內存之中的。
1、EBX設置為循環的長度(在我們所分析的樣本中,長度為0x0F);
2、ESI保存所有函數地址;
3、EAX將從ESI獲取一個地址,並將其移動到EBP-8;
4、調用EBP(在這時,配置函數將解壓縮一些數據,並將其保存到棧中);
5、ESI的位置現在提前4位;
6、EDI遞增,直至該值與EBX值相等;
7、當EDI == EBX時,也就表示所有必須的配置值都已經存儲到棧中。此時,惡意軟體的主要部分便可以啟動。
通過x32dbg,使用簡單的命令就可以進行查看。
go 0x0040101D
如我們所見,這是C&C存儲的位置,該內容已經保存到了棧中。
惡意軟體使用這種方式,存儲如下內容:
·C&C域名
·%APPDATA%文件夾
·Predator文件夾
·Predator壓縮文件的臨時名稱和位置
·發送給C&C伺服器的壓縮文件名稱
·等等…
惡意軟體在%APPDATA%/Roaming路徑下創建Predator文件夾(ptst)。值得注意的是,其名稱是通過XOR操作後的硬編碼字元串保存的,而並非隨機生成。我們猜測,這有可能是「Predator The Stealer」的快捷方式。
信息竊取過程中,臨時存檔的文件名為「zpar.zip」。
四、反逆向機制
當我們終於來到惡意軟體的主要模塊時,發現定址獲得的結果是一個循環0x06400000次的文本。這應該是惡意軟體設計的反逆向工程機制。
五、混淆技術
5.1 大規模使用的XOR操作
在分析中我們發現,該樣本中幾乎所有字元串都經過了XOR操作。但是,這種混淆技術很容易發現,並且是最易於解密的一種方式。在這裡,XOR操作的目的只是為了減慢惡意軟體分析的速度。
5.2 使用GetProcAddress的替代方案
為了避免直接調用來自不同庫的模塊,惡意軟體使用一些傳統的機制,逐一搜索特定的API請求,並將其存儲到寄存器中。此外,它還允許將對模塊的直接調用隱藏到簡單的寄存器調用中。
首先,解密XOR運算後的字元串(一個DLL)。針對這種情況,惡意軟體要調用的特定模塊需要用到kernel32.dll。
解密完成後,該庫使用LoadLibraryA進行載入。隨後,明文內容「CreateDirectoryA」被PUSH到EDX中,這是惡意軟體需要使用到的模塊。
現在,惡意軟體需要從kernel32.dll中檢索並導出函數CreateDirectoryA的地址。通常,需要通過GetProcAddress來實現。但由於GetProcAddress是眾多安全防護機制重點關注的目標,該惡意軟體換用了另一種方式來獲取該值。
該字元串和kernel32.dll的IMAGE_DOS_HEADER都將一起被發送到func_GetProcesAddress_0。我們可以在導出表(Export Table)的幫助下,手動獲取到想要的函數地址的指針。我們接下來仔細查看其中的代碼。
struct IMAGE_EXPORT_DIRECTORY {
long Characteristics;
long TimeDateStamp;
short MajorVersion;
short MinorVersion;
long Name;
long Base;
long NumberOfFunctions;
long NumberOfNames;
long *AddressOfFunctions;
long *AddressOfNames;
long *AddressOfNameOrdinals;
}
結構IMAGE_EXPORT_DIRECTORY中,必須要包含三個欄位:
·AddressOfFunctions:包含模塊中函數相對值地址(RVA)的數組;
·AddressOfNames:包含模塊中所有函數的數組,以升序排列;
·AddressOfNamesOrdinals:一個16位數組,其中包含AddressOfNames所有相關的函數名稱。
源代碼:https://en.wikibooks.org/wiki/X86_Disassembly/Windows_Executable_Files
在保存了這三個數組的絕對位置後,循環過程非常簡單。
1、抓取一個函數的相對值地址(RVA);
2、獲取該函數的名稱;
3、將字元串與所需字元串進行比較。
在這裡,詳細分析一下其實現方式:
如果我們對ds:[eax+edx*4]進行仔細查看,發現其中存儲了kernel32.dll導出表函數的所有相對值地址。
下一條指令是eax,ecx,用於計算AddressOfNames數組中字元串值的準確位置。
DLLBaseAddress + AddressOfNameRVA[i] = Function Name 751F0000 + 0C41D4 = CreateDirectoryA
經過比較後,發現二者匹配,所以對procAddress進行存儲。首先,保存函數的序號(Ordinal Number),然後藉助該值,獲取函數地址位置,並保存到ESI中。
ADD ESI, ECXProcAddress = Function Address + DLLBaseAddress
經過反彙編後,大致如下:
procAddress的代碼如下:
至此,一切妥當,函數的地址已經保存到EAX中,只需要等待調用即可。
六、反虛擬機技術
在這裡,使用了一個簡單的反虛擬機技術,來防止惡意軟體在虛擬機上運行。這也是Predator所使用的唯一的反分析技術。
首先,通過LoadLibraryA,動態載入User32.dll(經過XOR處理),然後使用User32.dll請求EnumDisplayDevicesA模塊。在這裡,惡意軟體希望獲取當前使用顯示器的「設備描述」值。
完成後,將該結果與一些特定值進行比對(同樣經過了XOR處理):
Hyper-V
VMware
VirtualBox
如果字元串匹配,那麼就會重定向到名為func_VmDetectedGoodBye的函數。
如何繞過這種反虛擬機技術?
為了繞過惡意軟體的這種檢測技術,我們將DriverDesc的REG_SZ值修改為。
然後,便成功繞過了這一檢測。
七、信息竊取部分
接下來,我們分析這一惡意軟體的主要目的,也就是它如何完成信息竊取的。目前,我對大部分代碼進行了反彙編,得到了惡意軟體在ptst存儲庫上設置的所有文件夾,並將其壓縮後發送到C&C伺服器。
文件夾
·Files:保存特定路徑中所有文本或文檔文件。
·FileZilla:從FTP中獲取1-2個文件。
·WinFTP:從FTP中獲取1個文件。
·Cookies:保存來自不同瀏覽器的Cookie內容。
·General:通用數據。
·Steam:竊取賬戶登錄信息。
·Discord:竊取賬戶登錄信息。
文件
·Information.log
·Screenshot.jpeg:當前屏幕截圖。
7.1 竊取Telegram數據
惡意軟體通過檢查計算機上是否存在KeyPath「SoftwareMicrosoftWindowsCurrentVersionUninstall\_is1」的方法,來驗證計算機是否安裝了Telegram。
那麼,這個KeyPath中的內容是什麼呢?在深入分析代碼後,我們發現惡意軟體會獲取InstallLocation的值,這是主機上Telegram的安裝位置。
重新創建路徑(在這裡,所有字元串也都被異或)
%TELEGRAM_PATH%
Telegram Desktop
data
D877F783D5D3EF8C
文件夾D877F783D5D3EF8C是存儲所有Telegram緩存的位置,這也是惡意軟體想要獲取的敏感數據。此外,在此過程中,還會檢查map*文件(例如map1),該文件實際上是加密密鑰。所以,攻擊者如果獲取到這一文件夾中的內容,就能夠訪問目標用戶的應用軟體數據。
7.2 竊取Steam數據
該惡意軟體用於竊取某個特定軟體中數據的技術,在大多數情況下都是類似的。這樣一來,就能極大的幫助我們理解這一惡意軟體。
首先,惡意軟體檢查HKCUSoftwareValveSteam中的SteamPath鍵值,獲取正確的Steam存儲位置。在獲取該位置之後,才能進一步找到保存Steam賬戶信息的相關文件。
通過func_FindFiles,檢查計算機上是否存在ssfn文件。如果存在,會將其複製到位於%APPDATA%/XXXX的惡意軟體臨時文件夾中。同樣,針對config.vdf也進行相同的操作。
那麼,這些文件有什麼意義呢?經過搜索,我們發現了Reddit上的一篇文章,主要介紹了ssfn文件允許在用戶登錄期間繞過SteamGuard防護機制。
那麼,第二個文件的作用呢?在這裡,可以找到關於用戶賬戶,以及計算機上安裝的所有應用程序的相關信息。此外,如果找到了有效的ConnectCache欄位,就可以在不經Steam身份驗證的情況下登錄賬戶。其內容類似如下:
"ConnectCache"{
"STEAM_USERNAME_IN_CRC32_FORMAT""SOME_HEX_STUFF"
}
攻擊者想要竊取的最後一個文件是loginusers.vdf。該文件有多種用途,但最主要的是用於手動對離線狀態的賬戶進行設置。
有關Steam信息竊取的更多詳情,Kapersky曾經發布過一次非常完整的分析。
7.3 竊取加密貨幣錢包
該惡意軟體支持竊取多個數字錢包,包括:Ethereum、Multibit、Electrum、Armory、Bytecoin、Bitcoin等。
與之前一樣,相關的文件都經過了XOR操作。
7.4 竊取FTP軟體數據
該惡意軟體支持對兩個FTP軟體的信息竊取,包括FileZilla和WinFTP。
這部分模塊非常簡單,只會對以下3個文件進行搜索,如果找到,會將其複製,以實現竊取過程:
%APPDATA%Filezillasitemanager.xml
%APPDATA%Filezilla
ecentservers.xml
%PROGRAMFILES%WinFtp ClientFavorites.dat
7.5 竊取瀏覽器數據
在本文,將不對惡意軟體竊取瀏覽器數據的過程做過多解釋,因為目前已經有很多文章都詳細解釋了此類型惡意軟體是如何獲取Web數據的。建議大家閱讀@coldshell撰寫的文章。
Predator的主要目標是如今流行的Chrome、Firefox和Opera瀏覽器。該惡意軟體支持對眾多瀏覽器進行信息竊取,包括:Amigo、BlackHawk、Chromium、Comodo Dragon、Cyberfox、Epic Privacy Browser、Google Chrome、IceCat、K-Meleon、Kometa、Maxthon5、Mozilla Firefox、Nichrome、Opera、Orbitum、Pale Moon、Sputnik、Torch、Vivaldi、Waterfox。
惡意軟體使用SQLite,從瀏覽器中提取數據,並將其保存到名為vlmiyg.col的臨時文件中。
該過程非常簡單:
1、竊取SQL瀏覽器文件;
2、通過SQLite,將提取到的數據保存到臨時文件中;
3、讀取文件,並將其中的內容保存到特定名稱的文本文件中(針對每種瀏覽器創建一個文件)。
如果找到表單數據或身份認證憑據,則會將這部分內容保存到通用存儲庫的相應文件(forms.log、password.log、cards.log)中。
7.6 竊取Discord數據
如果檢測到計算機上安裝了Discord,惡意軟體將搜索https_discordapp_*localstorage,並將其複製到ptst文件夾中。該文件包含所有關於賬戶的敏感信息,如果將該文件複製到攻擊者計算機的正確目錄中,那麼攻擊者可以無需身份驗證直接進行登錄
Predator會對多個位置進行檢查。主要將竊取3個文件夾(Desktop、Downloads、Documents)中的數據。每次,其執行的任務都是相同的,會通過GetFileAttributesA搜索4種類型的文件:*.doc、*.docx、*.txt、*.log。
如果找到,就會將其複製到名為Files的文件夾內。
7.7 產生Information.log
在上述任務完成後,惡意軟體將生成摘要文件,該文件包含被感染計算機的特定和敏感數據。其中,DFIR文件適用於標識惡意軟體名稱的組件,其中包含惡意軟體的名稱和版本信息。
首先,向該文件中寫入被感染計算機的用戶名稱、計算機名稱和操作系統版本:
User name: lolilol
Machine name: Computer
OS version: Windoge 10
隨後,通過GetClipBoardData複製剪貼板中的內容:
Current clipboard:
--------------
Omelette du fromage
保存啟動目錄下的內容:
Startup folder: C:UserslolilolAppDataLocalTemppredator.exe
將計算機的一些硬體信息保存到文件中:
CPU info: Some bad CPU | Amount of kernels: 128 (Current CPU usage: 46.112917%)
GPU info: Fumik0_ graphical displayAmount of RAM: 12 GB (Current RAM usage: 240 MB)
Screen resolution: 1900x1005
列出計算機上所有賬戶:
Computer users:
lolilol
Administrator
All Users
Default
Default User
Public
接下來的一部分內容,是一些看上去非常奇怪的外部信息,我們沒有對這部分信息進行深入猜測。這部分內容是在Payload中進行了硬編碼。
最後一部分奇怪的信息,是在被感染主機執行信息竊取操作的事件,這個信息可能用於惡意軟體開發者調試功能。
Additional information:Compile time: Aug 31 2018Grabbing time: 0.359375 second(s)
八、C&C通信
為了記錄Information.log,將會使用GET請求,獲取一些被感染用戶的網路數據。
首先,在請求中設置如下內容:
User-agent
Content-type
API URL ( /api/info.get )
最終得到結果如下所示:
Amsterdam;Netherlands;52.3702;4.89517;51.15.43.205;Europe/Amsterdam;1012;
當請求完成後,惡意軟體使用循環和判斷語句,合併所獲得的數據。
任務完成後,將保存到Information.log中。
City: Nopeland
Country: NopeCountry
Coordinates: XX.XXXX N, X.XXXX W
IP: XXX.XXX.XXX.XXX
Timezone: Nowhere
Zip code: XXXXX
壓縮包並不完整,它的作用只是將信息傳送到C&C伺服器。
現在,惡意軟體會將一些信息,附加到gate.get請求的參數中,分別從p1到p7,例如:
·p1:竊取賬戶的數量
·p2:竊取Cookie的數量
·p4:竊取表單的數量
·……
結果如下:
在POST請求發出後,惡意軟體會將所有內容清空,隨後退出。
Predator C&C伺服器Web界面的背景比較花哨:
九、版本更新:V2.3.7
在我們分析的過程中,這一惡意軟體又推出了新的版本,接下來,我們將對新版本的變化進行分析。
針對新的版本,如果從頭進行研究,無疑性價比是比較低的。因此,我們找到了惡意軟體編寫者發布的修改日誌,只關注這些惡意軟體編寫者指出的變化部分。
惡意軟體進行版本升級,通常會在兩個方面進行改動。一是代碼優化,以使惡意軟體運行速度更快,或者使其更為輕量化。二是增加功能,使惡意軟體具有更強大的能力。
正如我們所看到的,右側V2.3.7代碼比左側V2.3.5要長很多,但其主幹部分都是相同的。
9.1 互斥體
在2.3.7版本中,增加了一個互斥體(Mutex),該互斥體與一個名為SyystemServs的特定字元串集成在一起。
9.2 XOR與混淆
在C&C請求期間,URL參數是逐位元組生成的,並且經過了XOR操作。
例如:
push 04
...
push 61
...
push 70
...
最後結果為:
這是一個非常基礎和簡單的功能,但足以減慢我們的安全研究進度。這一部分調整就是新版本代碼變長的主要原因。
9.3 載入工具
在此前分析中,我們沒有見到這一載入工具(Loader)。在新版本中,集成了一個載入工具,用於向被感染主機推送其他的Payload。該內容可以通過GET請求輕鬆識別:
/api/download.get
該API請求允許惡意軟體將URL轉化為文本格式,然後下載,並將其保存到磁碟。隨後使用ShellExecuteA來執行下載的Payload。
此外,還有一些其他調整,但我們認為沒有必要對這些變化進行詳細說明。如果大家好奇,可以自行探索發現。
十、IoC
10.1 V2.3.5
·299f83d5a35f17aa97d40db667a52dcc | 加殼樣本
·3cb386716d7b90b4dca1610afbd5b146 | 脫殼後樣本
10.2 V2.3.7
·cbcc48fe0fa0fd30cb4c088fae582118 | 脫殼後樣本
10.3 HTTP模式
·GET – /api/info.get
·POST – /api//gate.get?p1=X&p2=X&p3=X&p4=X&p5=X&p6=X&p7=X
·GET – /api/download.get
10.4 MITRE ATT&CK
V2.3.5
Discovery – Peripheral Device Discovery
Discovery – System Information Discovery
Discovery – System Time Discovery
Discovery – Query Registry
Credential Access – Credentials in Files
Exfiltration – Data Compressed
V2.3.7
Discovery – Peripheral Device DiscoveryDiscovery – System Information DiscoveryDiscovery – System Time DiscoveryDiscovery – Query RegistryCredential Access – Credentials in FilesExfiltration – Data CompressedExecution – Execution through API
10.5 惡意軟體作者
·Alexuiop1337
10.6 Yara規則
rule Predator_The_Thief : Predator_The_Thief {
meta:
description = "Yara rule for Predator The Thief v2.3.5 & +"
author = "Fumik0_"
date = "2018/10/12"
strings:
$mz = { 4D 5A }
$hex1 = { BF 00 00 40 06 }
$hex2 = { C6 04 31 6B }
$hex3 = { C6 04 31 63 }
$hex4 = { C6 04 31 75 }
$hex5 = { C6 04 31 66 }
$s1 = "sqlite_" ascii wide
condition:
$mz at 0 and all of ($hex*) and all of ($s*)
}
十一、安全建議
1、避免將文件存儲在默認位置(例如:Desktop、Documents、Downloads),建議放在自定義的目錄下。
2、避免運行破解版本或其他非官方版本的遊戲,這些非官方版本的遊戲往往不能及時更新,特別是Fortnite的遊戲。
3、在運行軟體的過程中使用容器,從而降低竊取數據的風險。
4、在每次訪問後刷新一次瀏覽器,並且不要將密碼直接保存在瀏覽器中,不要使用自動填充功能。
5、不要在所有網站都使用相同的密碼,儘可能選用雙因素認證(2FA)。
6、針對一些重要數據,在計算機中準備一些迷惑性的文件,這樣攻擊者即使成功竊取,也會受到誤導。
7、使用Vault等密碼管理軟體。
十二、總結
這一信息泄露軟體並不複雜,但它們卻足以對被感染用戶產生不可逆轉的影響。其中,電子郵件賬戶和其他軟體/平台賬戶是攻擊者重點關注的內容。由此提醒廣大用戶,應該具有良好的安全意識,並在使用計算機的過程中注重安全性。防護惡意軟體,並不是依靠一個簡單的安全產品就能實現的,還需要從方方面面多加註意。


TAG:嘶吼RoarTalk |