如何快速破解識別APT28網(wǎng)絡(luò)攻擊流量

近期,歐洲多國大選開始,去年涉嫌網(wǎng)絡(luò)攻擊干預(yù)美國總統(tǒng)選舉的APT28又開始活躍了。相繼有德國、丹麥等國紛紛指責(zé)APT28的大肆入侵攻擊行為。而就在最近的法國大選中,有安全專家分析稱,APT28可能已經(jīng)針對首輪投票勝出的紐埃爾·馬克龍(Emmanuel Macron)開展了網(wǎng)絡(luò)攻擊活動。難道APT28又要用鍵盤來操控法國大選了嗎?
在這里,讓我們來看看安全公司Redsocks security如何通過網(wǎng)絡(luò)流量來快速識別和破解APT28攻擊行為。
一、分析簡介
2016年底,Redsocks security發(fā)現(xiàn)了一個APT28使用的過期域名,原本Redsocks security希望通過sinkhole該域名對APT28進(jìn)行一探究竟,卻發(fā)現(xiàn)該域名使用了異常復(fù)雜的加密通信機制。盡管之前像ESET等其它安全公司認(rèn)為APT28使用了RC4加密算法,但還未發(fā)現(xiàn)APT28具體使用的RC4算法和密鑰屬性。在這里,Redsocks security通過對APT28經(jīng)常使用的X-Agent樣本進(jìn)行動態(tài)分析,破解其整體攻擊入侵的網(wǎng)絡(luò)流量行為。以下為分析中APT28經(jīng)常使常用到的一例X-Agent木馬程序樣本文件:
Sinkhole (槽洞)攻擊:通過引誘攻擊者發(fā)起的流量通過一個已被控制接管的節(jié)點,一旦流量數(shù)據(jù)經(jīng)過該控制節(jié)點,接管者就可以對其網(wǎng)絡(luò)流量數(shù)據(jù)進(jìn)行分析篡改,判斷攻擊者的攻擊手法和入侵行為。
由于涉及到對APT28攻擊行為的網(wǎng)絡(luò)通信機制破解,所以分析過程包括以下幾個方面:
- 執(zhí)行X-Agent木馬和其釋放的惡意程序
- 對X-Agent木馬進(jìn)行網(wǎng)絡(luò)行為觀察
- 破解APT28通信加密機制和算法
Redsocks security通過全網(wǎng)探測和url模式比對,發(fā)現(xiàn)了大量APT28使用的控制端和服務(wù)器,為破解調(diào)查破解APT28通信機制奠定了基礎(chǔ)。
二、X-agent釋放的惡意程序(dropper)
該樣本惡意程序dropper包含兩個步驟功能。首先,向Windows系統(tǒng)文件夾內(nèi)釋放一個ose00000.exe程序和一個惡意dll文件,該dll文件名通常來說是固定的,不會隨著執(zhí)行行為和目標(biāo)系統(tǒng)而改變,如在此例中我們分析的83D2CDE2-8311-40CB-B51DEBE20FA803D1.dll,但極少情況下會隨著木馬功能而改變,如我們發(fā)現(xiàn)的其它釋放樣本文件xpool.dll;其次,通過釋放的惡意dll文件調(diào)用系統(tǒng)shell32庫中的ShellExecuteW方法函數(shù),之后,以rundll32.exe進(jìn)程身份和”C:\Windows\83D2CDE2-8311-40CB-B51DEBE20FA803D1.dll,init”參數(shù)完成對ShellExecuteW方法的進(jìn)一步調(diào)用執(zhí)行,在逆向分析中,我們可以從rundll32執(zhí)行動作中觀察到這一行為。另外,我們還發(fā)現(xiàn)了惡意進(jìn)程會調(diào)用ZwMapViewOfSection方法對目標(biāo)系統(tǒng)進(jìn)行內(nèi)核Hook以系統(tǒng)提權(quán)。最終,木馬程序?qū)詒undll32.exe和ose00000.exe兩個進(jìn)程形成系統(tǒng)駐留。
三、X-agent的木馬行為分析(rootkit)
83D2CDE2-8311-40CB-B51D-EBE20FA803D1.dll其實就是X-agent木馬安裝在系統(tǒng)內(nèi)的rootkit,通過該rootkit實現(xiàn)鍵盤記錄和遠(yuǎn)程控制。
1. X-agent架構(gòu)
如下圖所示,X-agent的程序結(jié)構(gòu)相對復(fù)雜,在功能實現(xiàn)和通信機制方面都具有模塊化的架構(gòu):
2. X-agent的程序執(zhí)行
整個木馬程序的執(zhí)行從rundll32.exe進(jìn)程加載dll文件調(diào)用初始化函數(shù)開始,首先它執(zhí)行了獲得目標(biāo)系統(tǒng)磁盤序列號等信息的kernel32.GetVolumeInformationW方法調(diào)用,并初始化一些全局變量:
之后,初始化模塊功能實現(xiàn)惡意功能執(zhí)行,本例樣本程序中包括3方面功能模塊:
- 在樣本逆向代碼中為modKey的鍵盤記錄模塊
- 為modFS的文件系統(tǒng)控制模塊
- 為modProcRet的遠(yuǎn)程Shell控制模塊
完成以上功能初始化后,攻擊者結(jié)合CHOPSTICK后門為不同任務(wù)創(chuàng)建了不同的線程,當(dāng)然了,攻擊者也會針對不同的配置和系統(tǒng)構(gòu)造不同的功能和內(nèi)核控制模塊AgentKernel:
所有任務(wù)線程由功能和內(nèi)核控制模塊進(jìn)行控制操作,并負(fù)責(zé)與遠(yuǎn)程C&C服務(wù)器進(jìn)行通信,受害系統(tǒng)身份和支持運行的功能模塊等信息將通過一個ID號為標(biāo)識的數(shù)據(jù)包發(fā)送至攻擊者C&C端。所有這些信息將被保存在臨時文件夾下名為“edg6EF885E2.tmp”的文件中。
報告分析樣本使用WinInet API并通過HTTP信道進(jìn)行通信。與C&C端發(fā)送數(shù)據(jù)之前,惡意程序通信線程會通過測試“adobeincorp.com” 域名解析,檢查與遠(yuǎn)程C&C服務(wù)器的網(wǎng)絡(luò)連通性,如果解析失敗,則轉(zhuǎn)向兩個硬編碼IP進(jìn)行直連。通信通道成功連通后,惡意程序就會通過內(nèi)置的功能模塊發(fā)送不同的URL請求信息和POST數(shù)據(jù)。然而,與C&C端的所有通信都是加密的??傊?,X-agent木馬在受害者系統(tǒng)中會執(zhí)行以下一連串行為:
- 調(diào)用KERNEL32.GetVolumeInformationW
- 創(chuàng)建至少5個不同的任務(wù)線程
- 向臨時文件夾內(nèi)edg6EF885E2.tmp文件讀寫數(shù)據(jù)
- 調(diào)用socket.connect測試C&C端連通性
- 加密與C&C端的URL和POST數(shù)據(jù)通信
- 向C&C端發(fā)送get請求
- 向C&C端發(fā)送post請求
- 調(diào)用WININET Http APIs向C&C端對受害者系統(tǒng)發(fā)起控制信息
3. X-agent網(wǎng)絡(luò)通信流量分析
為了破解APT28網(wǎng)絡(luò)通信流量,我們首先得了解X-agent使用的通信模式。在我們分析X-agent樣本中,其一前一后向遠(yuǎn)程C&C端發(fā)送了http get和post請求。除一串請求字符以外,其余http頭信息都是固定的。X-agent發(fā)起的URL請求如下所示:
- /webhp?rel=psy&hl=7&ai=L2Bd93t_o-jl022K1Og4Bm9mSk8QO88K_3ZQZuKcoPwur-5Q7Y=
其中,“/webhp?rel=psy&hl=7&ai=”和最后的“=”標(biāo)記在所有的執(zhí)行動作中都是一樣的,而其余51個編碼字符“L2Bd93t_o-jl022K1Og4Bm9mSk8QO88K_3ZQZuKcoPwur-5Q7Y”則包含了木馬客戶端的請求發(fā)起時間戳和ID標(biāo)記;另外,木馬程序發(fā)送的POST數(shù)據(jù)則附加在“=”之后,為71個字符的加密串,解密后如下所示:
藍(lán)色部分為受害者系統(tǒng)標(biāo)記ID,黃色部分為數(shù)據(jù)發(fā)送方模塊ID,綠色部分為遠(yuǎn)程C&C端使用的由#符號分隔的一系列功能模塊數(shù)據(jù)。以下為X-agent的HTTP通信實現(xiàn)結(jié)構(gòu):
四、X-agent的通信加密機制
X-agent會對所有g(shù)et或post請求的有用數(shù)據(jù)進(jìn)行加密,加密后的數(shù)據(jù)會被添加進(jìn)一些額外的字節(jié)并被轉(zhuǎn)化為BASE64編碼,如下為X-agent的通信模式結(jié)構(gòu):
時間戳為包含系統(tǒng)時間的BASE64數(shù)據(jù),之后,又添加生成了8字節(jié)的BASE64隨機數(shù)據(jù),而加密后的真實數(shù)據(jù)(cypher)則為16字節(jié)之后的信息,其中包含一些初始字節(jié)信息,如數(shù)據(jù)令牌(data token)和
受害系統(tǒng)ID等。而數(shù)據(jù)令牌(data token)中則包含了一個硬編碼字符串“V4MGNxZWlvcmhjOG9yZQ”,以下為X-agent的消息結(jié)構(gòu)流程分解:
最終,其BASE64數(shù)據(jù)基于RFC 4648和一個動態(tài)函數(shù)生成,并基于以下排列生成:
- ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_
1. 加密模塊
加密過程由兩個參數(shù)調(diào)用,調(diào)用指針指向兩個數(shù)據(jù)結(jié)構(gòu),包含以下兩方面加密類實現(xiàn)數(shù)據(jù):
- 加密種子
- 加密數(shù)據(jù)
其中,加密種子是硬編碼方式固定的,初始函數(shù)通過立即尋址方式把其復(fù)制到數(shù)據(jù)段區(qū)域進(jìn)行加密:
之后,在代碼中,4個隨機字節(jié)被追加到種子之后成為54字節(jié)數(shù)據(jù),這種結(jié)構(gòu)形成了加密過程的關(guān)鍵所在。例如,從AgentKernel獲取的默認(rèn)初始請求為39字節(jié),其中包括:受害系統(tǒng)ID、模塊ID、支持模塊信息,這些信息被封裝為20個字節(jié)的數(shù)據(jù)令牌(data token)、4個字節(jié)的受害系統(tǒng)ID和2個字節(jié)的模塊ID數(shù)據(jù)。其中數(shù)據(jù)令牌(data token)被遠(yuǎn)程C&C端用來進(jìn)行加密校驗。在使用了RC4算法創(chuàng)建密碼之后,加密程序?qū)蚱渲刑砑?字節(jié)的隨機值并把整體數(shù)據(jù)轉(zhuǎn)化為兼容BASE64的URL,并向其中生成7字節(jié)的時間戳信息。整個過程如下:
- 生成隨機的4字節(jié)信息;
- 使用RC4算法加密消息;
- 向消息中添加8字節(jié)隨機值;
- 把消息轉(zhuǎn)化為BASE64的URL;
- 在消息中生成7字節(jié)的時間戳信息。
2. RC4算法
RC4是基于字節(jié)排列的流密碼算法,在此我們不作重點討論,以下為X-agent使用的RC4算法實現(xiàn)代碼,其中算法涉及到的參數(shù)包含4字節(jié)的隨機值、加密種子和明文數(shù)據(jù):
五、如何破解X-agent數(shù)據(jù)
如前所述,X-agent加密過程的中的唯一隨機性是把4隨機字節(jié)附加到50字節(jié)的加密種子數(shù)據(jù)之后,由于 RC4算法是同步的流密碼加密機制,必須使用同樣的加密密鑰key才能實現(xiàn)解密。所以,解鈴還需第鈴人,X-agent加密機制的破解必須使用相同的RC4算法和調(diào)用參數(shù)才能實現(xiàn)。最終轉(zhuǎn)變生成的密碼消息(cypher)除時間戳和隨機字節(jié)之外,必須與其http請求對應(yīng)的數(shù)據(jù)一致。當(dāng)然了,可以利用暴力攻擊方法枚舉所有可能值(0到2的32次方-1)來破解RC4算法,如果其破解結(jié)果包含一個硬編碼字符串“V4MGNxZWlvcmhjOG9yZQ”,則可以證明這就是APT28的網(wǎng)絡(luò)通信行為,因為該字符串為APT28在網(wǎng)絡(luò)通信中使用的數(shù)據(jù)令牌(data token)內(nèi)容,并且這種破解操作可以在任何普通的個人電腦上快速實現(xiàn)完成,整個過程也就是幾秒鐘的事。具體技術(shù)分析參考Redsocks報告。