當前位置:
首頁 > 新聞 > 以Predator為例,全面揭秘信息竊取軟體的技術細節

以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等密碼管理軟體。

十二、總結

這一信息泄露軟體並不複雜,但它們卻足以對被感染用戶產生不可逆轉的影響。其中,電子郵件賬戶和其他軟體/平台賬戶是攻擊者重點關注的內容。由此提醒廣大用戶,應該具有良好的安全意識,並在使用計算機的過程中注重安全性。防護惡意軟體,並不是依靠一個簡單的安全產品就能實現的,還需要從方方面面多加註意。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 嘶吼RoarTalk 的精彩文章:

iOS越獄主要步驟揭秘
RtPOS惡意軟體分析

TAG:嘶吼RoarTalk |