Necurs僵尸網(wǎng)絡(luò)再次肆虐,威力強(qiáng)大可進(jìn)行DDoS攻擊
前言
Necurs僵尸網(wǎng)絡(luò)是世界上最大的惡意網(wǎng)絡(luò)之一,曾經(jīng)用于傳播各種致命威脅,但是在很長(zhǎng)一段時(shí)間內(nèi)它都沒有再出現(xiàn)過(guò),似乎是已經(jīng)消失了。然而現(xiàn)在,它又回來(lái)了,已知的主要功能是發(fā)送大量垃圾郵件,這里面最引人注目的是Locky勒索軟件。然而,Necurs并不僅僅是一個(gè)垃圾郵件程序,它是一個(gè)模塊化的惡意軟件,包含了一個(gè)主僵尸網(wǎng)絡(luò)模塊、一個(gè)用戶級(jí)Rootkit,并且它可以動(dòng)態(tài)加載其它模塊。
幾年以來(lái),已經(jīng)有很多對(duì)它的研究,包括它的Rootkit(1、2、3)、DGA、通信協(xié)議和垃圾郵件模塊,然而,除了它的垃圾郵件模塊,其它模塊沒有太多的公共信息。
幾個(gè)月之前,我們?cè)谝恍┍籒ecurs感染的系統(tǒng)中注意到,Necurs除了使用常用的80通信端口以外,它還使用了一個(gè)IP集和多個(gè)不同的端口,它的通信協(xié)議似乎發(fā)生了變化,下圖顯示了該網(wǎng)絡(luò)流量的示例:
最近,在Necurs僵尸網(wǎng)絡(luò)的一個(gè)解密的C2通信數(shù)據(jù)中,我們觀察到了一個(gè)請(qǐng)求,目的是加載兩個(gè)不同的模塊,每一個(gè)模塊包含了不同的參數(shù)列表。下圖是解密的C2服務(wù)器響應(yīng)數(shù)據(jù)包:
上半部分是C2服務(wù)器對(duì)垃圾郵件模塊的響應(yīng)數(shù)據(jù),這是Necurs的知名模塊,參數(shù)是C2服務(wù)器的地址(鏈接),可以從該地址上接收到新垃圾郵件活動(dòng)的通知。下半部分是C2服務(wù)器對(duì)一個(gè)未知模塊的響應(yīng)數(shù)據(jù),通過(guò)判斷響應(yīng)數(shù)據(jù)中的參數(shù)值,我們看到它使用了5222端口。
我們是在2016年9月注意到這個(gè)模塊的,該模塊的編譯時(shí)間是“2016年8月23日”,這個(gè)時(shí)間表明該模塊是從這個(gè)時(shí)候開始應(yīng)用的。當(dāng)然,也有可能相同模塊的另一個(gè)版本在以前部署過(guò),只是沒有被注意到。
我們下載了該模塊,并對(duì)它進(jìn)行逆向分析,試圖了解它到底實(shí)現(xiàn)了什么功能。第一眼看上去,它好像是一個(gè)簡(jiǎn)單的SOCKS/HTTP代理模塊,但是當(dāng)我們看到該僵尸程序可以接收C2服務(wù)器的命令時(shí),我們意識(shí)到這是一個(gè)新添加的命令,它可以引起僵尸主機(jī)向任意目標(biāo)無(wú)限循環(huán)的發(fā)送HTTP或UDF請(qǐng)求,這種方式只能解釋為是DDOS攻擊??紤]到Necurs僵尸網(wǎng)絡(luò)的規(guī)模很大,這將是非常有趣的,規(guī)模這么大的僵尸網(wǎng)絡(luò)可能會(huì)產(chǎn)生強(qiáng)大的DDOS攻擊力。
需要注意的是我們還沒有看到Necurs被用于DDOS攻擊,我們只是在它加載一個(gè)模塊中看到了它有這種能力。
接下來(lái)的內(nèi)容里,我們會(huì)對(duì)該模塊進(jìn)行技術(shù)分析,詳細(xì)介紹它的C2協(xié)議、SOCKS/HTTP代理功能、和DDOS攻擊功能。
一、模塊啟動(dòng)/初始化
當(dāng)該模塊被僵尸程序加載后,它會(huì)執(zhí)行以下初始化操作:
1.對(duì)參數(shù)進(jìn)行解析,并將解析結(jié)果存儲(chǔ)到一個(gè)內(nèi)部C2地址列表中。
2.用以下信息填充一個(gè)內(nèi)存數(shù)據(jù)結(jié)構(gòu)(下圖中的botsettings數(shù)據(jù)結(jié)構(gòu)),它包含了以下信息:
- 僵尸主機(jī)ID:根據(jù)收集的獨(dú)特系統(tǒng)信息產(chǎn)生的唯一標(biāo)識(shí)。
- 內(nèi)部IP地址:通過(guò)檢查出站套接字連接google.com時(shí)所用的IP地址。
- 外部IP地址:通過(guò)ipv4.icanhazip.com或checkip.dyndns.org網(wǎng)站得到的主機(jī)外部IP地址。
- 可用帶寬:通過(guò)從微軟下載Windows 7 Service Pack 1文件來(lái)測(cè)量下載速度。
- SOCKS/HTTP代理服務(wù)端口:大于1024的一個(gè)隨機(jī)監(jiān)聽端口。
3.檢查系統(tǒng)是否運(yùn)行在NAT后面:通過(guò)檢查出站套接字IP地址是否與本地地址、外部地址相匹配。如果系統(tǒng)沒有在NAT后面,該僵尸程序會(huì)開啟一個(gè)SOCKS/HTTP代理服務(wù),監(jiān)聽一個(gè)大于1024的隨機(jī)端口。
botsettings的數(shù)據(jù)結(jié)構(gòu)如下圖:
二、C2通信協(xié)議
在初始化之后,該僵尸程序會(huì)循環(huán)進(jìn)入主C2連接過(guò)程,除非另有指令,否則,在這個(gè)過(guò)程中,它會(huì)每隔10秒鐘嘗試連接一次當(dāng)前C2服務(wù)器,如果連接當(dāng)前的C2服務(wù)器失敗了,它會(huì)嘗試連接C2地址列表中的下一個(gè)C2服務(wù)器。
該通信協(xié)議代碼是二進(jìn)制的,并且使用了自定義算法進(jìn)行了加密/模糊。發(fā)送到服務(wù)器的信息(消息)采用了相似的數(shù)據(jù)結(jié)構(gòu)(請(qǐng)看下圖中botmsg和c2msg結(jié)構(gòu)),并包含了下面的數(shù)據(jù):
1.密鑰:32位加密密鑰。
2.加密頭:消息本身的一個(gè)被加密的頭部數(shù)據(jù)結(jié)構(gòu)(下圖中botmsgheader和c2msgheader結(jié)構(gòu)),里面的信息用密鑰加密了,包含了以下信息:
- 消息類型:定義了發(fā)送的消息/命令類型,大小為1字節(jié)。
- 載荷長(zhǎng)度:發(fā)送的載荷長(zhǎng)度。
- 頭部HASH:代表了消息中第一字節(jié)的HASH值(key,msgtype,unknown和datalength)。
- 數(shù)據(jù)HASH:載荷的HASH,用于檢查數(shù)據(jù)的完整性。
3.加密的載荷:一組被發(fā)送的數(shù)據(jù),用密鑰的反向值加密過(guò)。
這就是僵尸程序發(fā)送到C2服務(wù)器的三種類型的消息,可以通過(guò)頭部信息中的msgtype字節(jié)來(lái)區(qū)分它們。通常,有以下三種類型的消息:
1.信標(biāo)(msgtype 0):這是僵尸程序每10秒鐘發(fā)送會(huì)給C2服務(wù)器的主要消息,該消息的結(jié)構(gòu)是前面提到過(guò)的botsettings結(jié)構(gòu)。
2.連通性檢查(msgtype 1):這是一個(gè)簡(jiǎn)單的虛擬消息,除了加密的消息頭,不包含其它數(shù)據(jù)。這個(gè)消息是在僵尸程序連接C2服務(wù)器超時(shí)時(shí)發(fā)送的,目的是查看當(dāng)前C2服務(wù)器還能不能用。
3.代理回連(proxybackconnect)(msgtype 2):在僵尸主機(jī)收到C2的開啟socks回連命令時(shí),僵尸主機(jī)會(huì)建立到C2服務(wù)器的連接,并給C2服務(wù)器發(fā)送這條消息,并且會(huì)將發(fā)送這條消息時(shí)建立的套接字(復(fù)用該套接字)直接用到SOCKS/HTTP代理連接中,這樣做的好處是連接發(fā)起動(dòng)作看起來(lái)就像是代理客戶端發(fā)起的。
作為信標(biāo)的響應(yīng)包,C2服務(wù)器發(fā)送給僵尸程序的消息(或命令)也有三種類型,也可以通過(guò)頭部信息中的msgtype字節(jié)來(lái)區(qū)分它們:
1.開始回連代理(start proxybackconnect)(msgtype 1):
起初,僵尸主機(jī)給C2服務(wù)器發(fā)送一個(gè)代理回連(proxybackconnect)消息,然后,C2服務(wù)器給僵尸主機(jī)發(fā)送這條(start proxybackconnect)消息,告訴僵尸主機(jī)開始回連代理會(huì)話。該會(huì)話的套接字將會(huì)被重用,允許作為一個(gè)代理被僵尸程序使用,即使僵尸主機(jī)在防火墻之后,并且沒有建立到它的直接連接。
2.睡眠(msgtype 2):
這會(huì)使僵尸主機(jī)睡眠5分鐘。
3.開始DDOS(msgtype 5):
該命令下達(dá)后,會(huì)對(duì)消息有效負(fù)載中指定的目標(biāo)開始進(jìn)行DDoS攻擊,攻擊活動(dòng)有兩種模式:
- HTTP洪水攻擊:如果消息載荷的前幾個(gè)字節(jié)是“http:/”,僵尸程序會(huì)對(duì)目標(biāo)開啟HTTP洪水攻擊。
- UDP洪水攻擊:如果消息載荷的前幾個(gè)字節(jié)不是“http:/”,僵尸程序會(huì)對(duì)目標(biāo)開啟UDP洪水攻擊。
三、代理功能
該SOCKS/HTTP代理服務(wù)和命令,允許僵尸網(wǎng)絡(luò)擁有者將該僵尸主機(jī)作為一個(gè)代理(HTTP,SOCKSv4和SOCKv5協(xié)議)來(lái)使用,并使用兩種操作模式來(lái)進(jìn)行中繼連接(直接代理和回連代理)。
在直接代理模式下,客戶端會(huì)連接代理服務(wù),然會(huì)代理服務(wù)會(huì)將連接轉(zhuǎn)向到目的地,如下圖所示:
這只有在僵尸主機(jī)沒有受到NAT和防火墻保護(hù)時(shí)才有可能,這種情況在大多數(shù)僵尸網(wǎng)絡(luò)中是不行的。
在代理回連模式下,客戶端會(huì)連接到代理控制器,然后會(huì)從代理控制器的可用代理池中獲得一個(gè)出站代理,并通過(guò)它來(lái)進(jìn)行連接中繼。如下圖所示:
這種操作模式有幾個(gè)優(yōu)點(diǎn)。最大的一個(gè)優(yōu)點(diǎn)是,即使被感染的系統(tǒng)運(yùn)行在NAT后面也能正常工作,并且,這將允許僵尸網(wǎng)絡(luò)能連接到內(nèi)部網(wǎng)絡(luò)資源中,就好像是來(lái)自內(nèi)部機(jī)器的連接。這種代理的另一個(gè)常見用法是可以頻繁的變換IP地址,方法是通過(guò)頻繁和自動(dòng)的改變僵尸主機(jī)的配置(充當(dāng)代理的僵尸主機(jī))。
簡(jiǎn)要的看一下這種代理方法是如何實(shí)施的,下圖顯示的是該C2命令處理函數(shù)的一部分:
在僵尸程序收到C2發(fā)來(lái)的“開始回連代理”(startproxybackconnect)命令時(shí)(msgtype 1),僵尸程序會(huì)向C2服務(wù)器發(fā)送一個(gè)“回連代理”(proxybackconnect)命令(msgtype 2),然后,C2服務(wù)器會(huì)使用相同的套接字(該套接字所在的連接是僵尸主機(jī)給C2服務(wù)器發(fā)送proxybackconnect命令的套接字),并進(jìn)入到startprocessincoming函數(shù)(請(qǐng)看上圖)中處理實(shí)際的代理工作。這意味著用于連接C2服務(wù)器的通信連接同時(shí)也被用于了代理連接中。Processincomming函數(shù)會(huì)從傳入連接中讀取2字節(jié)(直接代理或通過(guò)回接代理),然后,它會(huì)檢查前面的值是否是5(SOCKSv5)、4(SOCKSv4)、或包含數(shù)字和字母(HTTP代理)然后,它會(huì)調(diào)用每個(gè)支持協(xié)議的相應(yīng)函數(shù),去處理實(shí)際的代理工作。
四、DDOS攻擊功能
DDOS攻擊方法可能是該模塊最有趣、最意想不到的一個(gè)功能,這個(gè)模塊只包含了兩個(gè)基本的DDOS攻擊方法,沒有類似于“源IP地址欺騙”或“放大技術(shù)”的特殊功能。然而,考慮到Necurs僵尸網(wǎng)絡(luò)的規(guī)模(每24小時(shí)有超過(guò)100萬(wàn)個(gè)活性IP),即使是最基本的技術(shù)也能產(chǎn)生非常強(qiáng)大的攻擊力。
來(lái)看一下它是怎么實(shí)施的,在僵尸程序接收到開始DDOS(startDDOS)命令后(msgtype 5),如果在消息的有效載荷中發(fā)現(xiàn)“http:/”字符串,那么就調(diào)用HTTPflood函數(shù),如果沒有,就調(diào)用UDPFlood函數(shù),如下圖所示:
1. HTTP洪水攻擊模式
使用該模式后,僵尸程序會(huì)開啟16個(gè)線程用于HTTP攻擊工作,并會(huì)發(fā)送一個(gè)無(wú)限循環(huán)的HTTP請(qǐng)求。下圖顯示的是16個(gè)線程隊(duì)列,及發(fā)送HTTP請(qǐng)求的部分代碼:
HTTP請(qǐng)求使用了以下格式的字符串:
2. UDP洪水攻擊
UDP洪水攻擊工作時(shí),會(huì)發(fā)送一個(gè)128字節(jié)到1024字節(jié)之間的隨機(jī)載荷,該函數(shù)包含了一個(gè)0.1秒的睡眠,這個(gè)時(shí)間是根據(jù)可用帶寬而定的(在僵尸程序初始化時(shí)生成),可能是為了避免在DDoS攻擊時(shí)失去對(duì)僵尸主機(jī)的訪問(wèn)。下圖顯示了UDP洪水攻擊的主循環(huán):
五、結(jié)論
盡管主要以其垃圾郵件模塊而著稱,但是Necurs是一個(gè)模塊化的惡意軟件,它可以被用于多種不同的目的。在本文中,我們主要分析了該惡意軟件的DDOS功能和添加SOCKS/HTTP代理功能。盡管我們還沒有看到Necurs實(shí)施過(guò)DDOS攻擊,但是這種能力目前已經(jīng)被Necurs部署到了被感染的系統(tǒng)上,并且考慮到該僵尸網(wǎng)絡(luò)的規(guī)模,它可以產(chǎn)生強(qiáng)大的攻擊力。