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