王志,蔡亞運,劉露,賈春福
(南開大學 計算機與控制工程學院,天津 300071)
僵尸網絡[1~4]和其他惡意軟件(如蠕蟲)的一個重要不同之處是僵尸網絡由命令與控制協議(C&C protocol)驅動,即僵尸網絡的控制者(bot master)通過遠程控制命令與多臺受控主機(bot)進行通信。這種控制機制使僵尸網絡具有靈活性、私密性、可控性,使攻擊者能夠以極低的代價獲得強大的分布式計算能力和豐富的信息資源,例如發動分布式拒絕服務攻擊[5]、發送大量的垃圾郵件[6]、分發間諜程序和廣告程序、竊取僵尸主機的用戶信息等。僵尸網絡是當前網絡安全的最大威脅,而且在不斷地演化和變異,并已經滲透到移動互聯網、云計算平臺、甚至工業控制系統中,如圖1所示,其危害已經影響到國家安全,甚至到軍事安全等多個重要領域。

圖1 僵尸網絡的演化進程
對僵尸網絡的研究可以歸納為5個方面:檢測[7~16]、追蹤[17~23]、測量[24~26]、預測[27~33]和對抗[34~36],如圖2所示。僵尸網絡自身也在不斷地進行變異,逐漸增強其自我保護能力[7,16,37]。因此,防治僵尸網絡的唯一辦法就是連續不斷地跟蹤僵尸網絡技術的新進展,探索僵尸網絡所固有的脆弱性,研究更加高效、準確、全面的僵尸網絡分析和防治技術以應對新的網絡安全威脅。

圖2 僵尸網絡的研究內容
僵尸網絡的脆弱性之一就是僵尸程序執行過程中的路徑信息泄露問題。泄露的路徑信息是僵尸網絡內部命令控制邏輯關系的二進制表示,利用動態污點分析、符號執行、約束求解等技術可以對這些路徑信息進行收集、形式化表示和推理,實現逆向構建僵尸網絡的命令控制模型[19]。但是,二進制執行軌跡中缺乏高級語言里的類型信息、結構信息等,而且CPU、操作系統等的控制邏輯都混雜在執行軌跡的路徑信息中,導致路徑信息的形式化推理過程復雜、耗時,并受到路徑空間爆炸問題的制約,難以保證路徑空間遍歷的全面性。
與執行軌跡泄露的路徑信息一樣,僵尸程序不同的執行軌跡對二進制代碼塊的覆蓋信息也是易于收集,本文通過挖掘這些覆蓋信息的內在規律,提出了一種二進制代碼覆蓋率分析算法,不需要對二進制代碼進行中間表示與約束求解,在較小的時間開銷和空間開銷下,實現從僵尸程序的執行軌跡中快速發掘僵尸網絡的控制命令集合。在不考慮ROP[38]和代碼移動[39]的情況下,該方法能夠通過計算有效代碼空間是否被全覆蓋來驗證發現的僵尸網絡命令集合是否全面。
目前,僵尸網絡命令與控制協議的分析方法主要有2類:基于流量的分析和基于二進制代碼的分析。
基于流量的分析方法有 CUI等人[40]提出的通過統計網絡數據流中不同協議字段的出現次數來推斷協議結構的方法等。
基于二進制代碼的分析利用 IDAPro,W32Dasm等工具對二進制代碼進行靜態反匯編,Vigna[41]提出了利用反匯編方法靜態地提取二進制代碼中包含的信息來還原高級語言的語義。CABALLERO等人[42]提出通過對緩沖區解析自動逆向分析僵尸網絡通信協議的方法。CHO等人[23]提出了使用協議狀態機分析僵尸網絡命令與控制協議的方法。這些方法主要集中在僵尸網絡通信協議的格式上,分析僵尸程序發送和接收信息的語法格式及每個域的語義。這些方法能夠實現協議字段的自動劃分和具有特殊協議字段的識別,但是缺乏對控制命令的全面性和完整性的證明。LIM等人[43]提出一種基于系統API調用和控制依賴圖的提取控制命令的方法。該方法靜態地從僵尸程序可執行文件中提取觸發API級行為的命令字符串及其和API調用實參的關系。該方法可以有效地提取出部分僵尸程序的控制命令,但對系統API調用有較強的依賴性,且不能處理經壓縮的或加密的僵尸程序。王志等人[44]利用惡意代碼的路徑信息泄露問題提出了推理惡意代碼的主機環境依賴性的方法,并通過二進制代碼插裝技術削弱了惡意代碼對主機環境的感知能力,但是該方法沒有對網絡環境的依賴性進行分析,不能推理僵尸程序的惡意行為與網絡輸入數據之間的依賴關系。
僵尸程序的路徑空間具有復雜性,直接進行路徑空間的遍歷會遇到路徑空間爆炸問題。本文利用動態執行軌跡對代碼塊的覆蓋率將靜態的代碼空間與動態的路徑空間建立了聯系,提出了一種基于統計特征分析的僵尸網絡控制命令發掘方法,利用僵尸程序執行軌跡對二進制代碼塊的覆蓋信息的內在規律,從有限的執行軌跡集合中,實現對僵尸網絡控制命令空間的快速發掘。基于覆蓋率的分析方法減少了對路徑空間遍歷的依賴性,時間和空間開銷較小,更具有實用性。
3.1.1 執行軌跡與路徑空間
執行軌跡是僵尸程序路徑空間中一條路徑的執行過程的詳細記錄,其中記錄了執行過程中CPU所執行過的每一條指令、指令執行前后的 CPU標志位狀態、與指令相關的寄存器和內存等。執行軌跡中雖然缺乏高級語言源代碼中的結構信息、類型信息等,但是它詳細記錄了高級語言中各種算法、數據結構、邏輯關系在 CPU上用二進制機器代碼的具體實現過程,是程序語義的二進制表示,其中就包含了程序內在的控制邏輯關系。
執行軌跡的獲取通常是使用虛擬機技術或二進制代碼插裝技術實現,例如基于QEMU[45]虛擬機的BitBlaze[46]平臺和Intel公司提供的二進制代碼插裝工具Pin[47]。目前,CPU的主頻已經達到GHz級別,每秒鐘 CPU執行的指令數量將是千萬級的,因此一條詳細的程序執行軌跡的體積非常龐大。通常,執行軌跡的捕獲過程會使用動態污點傳播技術,只記錄部分指令的執行過程,從而減小執行軌跡的體積。
執行軌跡記錄了程序一條路徑的執行過程。程序所有可達的路徑集合構成了這個程序的路徑空間。二進制代碼的路徑空間可以用一個二叉樹表示,根節點就是程序的入口點(entry point),路徑分支是由執行軌跡中的 CPU條件跳轉指令通過判斷跳轉條件是否滿足而產生。執行軌跡是路徑空間這棵二叉樹從根節點到一個葉子節點的路徑。路徑空間與控制流圖的區別是路徑空間中沒有循環結構,而控制流圖中有循環結構。由于程序中有些循環結構的退出條件的不確定性,導致路徑空間爆炸問題,從而限制了通過遍歷路徑空間實現對程序內部控制邏輯關系的挖掘。對路徑空間遍歷時通常會采用一些啟發式的方法,例如離線(offline)分析中限制循環的展開次數,或者在線(online)分析中限制循環的執行時間等。
3.1.2 基本塊(basic block)與代碼空間
基本塊是一段順序執行的CPU 指令序列,其中只有一個入口和一個出口。基本塊的第一條指令被執行了,后面的指令會順序執行,直到最后一條指令,中間沒有控制流的跳轉。執行軌跡中的CPU指令數量非常大,在控制邏輯的分析中,一般不以CPU指令為最小單位,而是以基本塊為最小單位,路徑空間中二叉樹的每一個節點都是一個基本塊。
程序的代碼空間是程序中所有 CPU指令的集合。利用基本塊的定義可以對程序的代碼空間進行劃分,進而用基本塊的集合表示代碼空間。代碼空間與路徑空間都是程序的一種表示方式,代碼空間是有限的,遍歷代碼空間的開銷較低,而路徑空間由于路徑爆炸問題導致遍歷路徑空間的開銷非常大。本文一個研究內容就是在一定的前提條件下,利用遍歷代碼空間模擬對路徑空間的遍歷,實現對僵尸網絡控制命令集合完整性和全面性的驗證。
3.1.3 執行軌跡的基本塊覆蓋
路徑空間是對僵尸程序動態執行過程的描述,而代碼空間是對僵尸程序靜態代碼分布的描述。本文通過路徑空間的執行軌跡對代碼空間的基本塊覆蓋信息,將僵尸程序的路徑空間與代碼空間建立聯系,如圖3所示。
路徑空間是用二叉樹表示的,描述了程序的動態執行過程,從根節點到一個葉子節點的路徑就是一條執行軌跡。代碼空間是用有限個基本塊組成的集合表示的,其中不包含執行時的先后順序與執行次數,只是對代碼所在內存空間的一個劃分。

圖3 路徑空間的執行軌跡在代碼空間覆蓋的基本塊集合
如果在程序的執行過程中,某些基本塊被執行,則稱這些被執行的基本塊被執行軌跡覆蓋。被一條執行軌跡覆蓋的基本塊是代碼空間的一個子集。基本塊的覆蓋信息是指被執行路徑覆蓋的所有基本塊的執行信息,其中包括被覆蓋基本塊的執行順序與執行次數。
基本塊被執行軌跡覆蓋的信息包括兩部分:覆蓋率和覆蓋次數。覆蓋率PBB描述的是一個基本塊被執行軌跡覆蓋的頻繁程度N是當all前已捕獲的執行軌跡的總數, Ncover是覆蓋該基本塊的執行軌跡數量。覆蓋次數VBB描述的是基本塊在不同執行軌跡中被執行的頻繁程度,它是一個向量,VT1,VT2,… ,VTn表示基本塊BB在執行軌跡T1,T2,…,Tn中被覆蓋的次數。
根據基本塊BB在已捕獲的執行軌跡中的覆蓋率PBB和覆蓋次數VBB,可以將基本塊分成5類,如表1所示。

表1 基于覆蓋率和覆蓋次數的基本塊分類規則
根據基本塊是否被所有已捕獲的執行軌跡覆蓋,把基本塊分成2類:第一類是被當前軌跡都覆蓋到的基本塊,PBB=100%;第二類是只被部分執行軌跡覆蓋到的基本塊,PBB<100%。PBB=100%的基本塊根據其在不同執行軌跡中的覆蓋次數是否具有相似性可以分成2類:類型1和類型2。類型1的基本塊是PBB=100%,且在某2個執行軌跡中被執行的次數具有相似性,即;類型2的基本塊是,且基本塊在不同的執行軌跡中的執行次數沒有相似性,即的基本塊根據其是否只被唯一的一條執行軌跡覆蓋也可以分成2類:類型3和類型4。類型3的基本塊是PBB<100%,且存在至少2條執行軌跡Ti和且 VTj!= 0 ;類型 4的基本塊是且只有唯一的一條執行軌跡執行了該基本塊,在其他執行軌跡中的執行次數都是0。
僵尸程序的執行軌跡是其程序語義在 CPU上的二進制表示,其中包含了僵尸網絡的命令控制邏輯。本節將詳細介紹如何利用基本塊的覆蓋率分析從僵尸程序的執行軌跡中發掘出其所在僵尸網絡的控制命令集合。
3.3.1 命令控制邏輯所在基本塊的特征分析
僵尸程序的命令控制邏輯的實現方式主要有循環結構和分支結構2類,偽代碼如下所示。
基于循環結構的命令控制邏輯的偽代碼為
While
{If (input==cmd){Trigger related behaviors}cmd=next commanding command set
}
基于if-else分支結構的命令控制邏輯的偽代碼為
if (input==cmd_1)
{trigger related behaviors
}
else if (input== cmd_2)
{
trigger related behaviors
}
…
else if (input == cmd_n)
{trigger related behaviors
}…
這些命令控制邏輯會分散到幾個不同的基本塊中。僵尸程序的一條執行軌跡會覆蓋上百萬個基本塊,即使去掉了操作系統空間、動態鏈接庫DLL等非來自于僵尸程序所在文件的基本塊后,執行軌跡中還會有成千上萬的基本塊。如何從大量的基本塊中發掘出包含僵尸程序命令控制邏輯的基本塊是一個挑戰。
將僵尸程序基本塊的功能主要分成了3類:預處理、命令控制邏輯與攻擊行為。預處理功能主要包括代碼和數據的加密解密、接入僵尸網絡、控制命令的偵聽、Rootkit與注入等自我隱藏功能,多態、變型等躲避殺毒軟件的功能等;命令控制邏輯就是要挖掘的對象,它負責對僵尸網絡控制命令的解析,并觸發命令所對應的攻擊行為;攻擊行為是指由控制命令所觸發各種惡意行為,例如,DDoS攻擊、發送垃圾郵件、盜取用戶數據等。
3.3.2 基于循環結構的命令控制邏輯基本塊的特
征分析
本文分析命令控制邏輯功能的基本塊與其他2種功能的基本塊在執行軌跡覆蓋率和覆蓋次數上的差異,實現對僵尸網絡控制命令的挖掘。首先,從執行軌跡的基本塊覆蓋率上,預處理功能的基本塊和命令控制邏輯的基本塊在每條執行軌跡上都會被執行,因此它們的覆蓋率PBB=100%,而攻擊行為的基本塊由于不同命令所觸發的攻擊行為不同,所以某一攻擊行為的基本塊不會出現在所有的執行軌跡中,所以其覆蓋率PBB<100%;其次,從覆蓋次數上分析,預處理功能的基本塊在僵尸程序每次運行時的執行過程具有相似性,因此在某 2個執行軌跡中被執行的次數會具有相似的情況,即。命令控制邏輯所在的基本塊雖然每條執行軌跡都會執行,但是對于不同的控制命令控制邏輯基本塊的執行次數是具有差異性的。通過分析可以得到 2條識別命令控制邏輯基本塊的規則。
通過規則1和規則2可以過濾掉大量的非控制邏輯基本塊。從Zeus、Agobot和Sdbot的實驗結果發現,雖然有大量的代碼塊被過濾,符合規則1和規則2的代碼塊仍然很多,因此需要繼續去除噪音的方法。提出了2種去除噪音的策略:策略1是增加執行軌跡的數量,從而增強規則1和規則2的過濾效果。增加執行軌跡的數量可以發現軌跡間覆蓋率的更多差異,從而減少PBB=100%的基本塊數量,增加規則1的過濾強度;增加執行軌跡的數量也會使覆蓋次數向量 VBB= ( VT1,VT2,… ,VTn)變長,更容易發現相似的覆蓋次數,從而增加規則2的過濾強度;策略2是不增加執行軌跡的數量,通過創建噪音過濾規則實現對基本塊的二次過濾,由于僵尸網絡的控制命令數量并不是很多,因此命令控制邏輯基本塊的覆蓋次數的上限是比較少的。設置一個閾值th,覆蓋次數超過th的基本塊就認為是噪音;又對命令控制邏輯基本塊的在執行軌跡里的執行順序進行分析,僵尸程序在進行完邏輯判斷后通常會立即響應這些命令,即觸發響應的攻擊行為,因此命令控制邏輯基本塊后面跟著的應該是攻擊行為基本塊,只有唯一的一條執行軌跡覆蓋該基本塊。噪音的過濾規則如下。
規則 4 BBi滿足規則 1、規則 2、規則 3,且
識別循環結構命令控制邏輯代碼塊的偽代碼如下。
算法1 循環結構命令控制邏輯基本塊識別算法輸入:TRACES僵尸程序執行軌跡集合;
th覆蓋次數的閾值
輸出:SET_BB僵尸程序命令控制邏輯基本塊集合
Searching(TRACES, th){SET_BB={}; //基本塊集合
SET_PBB={};//基本塊覆蓋率集合
SET_VBB={};//基本塊覆蓋次數集合
foreach(t in TRACES){
(SET_BB, SET_PBB, SET_VBB)=update_coverage(t);//更新基本塊的覆蓋信息
}// 根據4個規則過濾非命令控制邏輯的基本塊SET_BB = analyzing with the RULES (SET_BB, SET_PBB, SET_VBB, th);
return SET_BB;
}
算法的輸入是執行軌跡集合 TRACES和覆蓋次數的閾值 th,輸出是找到的包含僵尸網絡命令控制邏輯的基本塊。算法的執行過程主要分為兩部分:收集執行軌跡集合 TRACES中的基本塊覆蓋信息;根據4個已定義的規則對非命令控制基本塊進行過濾。
3.3.3 基于分支結構的命令控制邏輯基本塊的特
征分析
分支結構的命令控制邏輯基本塊的覆蓋信息特征不同于循環結構的覆蓋信息特征,其不同點主要在以下2個方面:首先,基本塊的覆蓋率不一致,基于循環結構的基本塊在不同的執行軌跡中都會被覆蓋PBB=100%,但是基于if-else分支結構的基本塊并不是全部被 100%覆蓋。因為僵尸程序對控制命令的理解過程總是從if開始,這樣if所在的基本塊的覆蓋率Pif=100%,而且覆蓋次數Vif=(1, 1,…,1),每個執行軌跡只執行1次,因此if所在的基本塊是第一類基本塊;然后,如果 if所在基本塊不能告訴僵尸程序如何理解控制命令,那么按順序一個 else接著一個 else的對控制命令進行理解。當知道了如何去響應這個命令后,僵尸程序就不會再繼續執行后面的else代碼了。因此,else所在的基本塊的覆蓋率Pelse<100%,Velse=(1 or 0, 1 or 0,…,1 or 0),而且不同 else基本塊的總覆蓋次數(n是捕獲的執行軌跡數量)也是不一致的。因此可以總結出如下識別規則。
在執行軌跡中,if所在的基本塊后面會跟著若干個else基本塊。但是,僵尸程序中基于分支結構的命令控制邏輯并不像高級語言源代碼中的 if-else結構那樣非常規范。在真實的僵尸程序執行軌跡里面,分支結構的命令控制邏輯基本塊中會夾雜著很多噪音,例如預處理功能基本塊與命令控制基本塊混雜在一起等。因此,要得到清晰的命令控制邏輯的分支結構,需要對噪音基本塊進行過濾。這些夾雜的噪音一般是屬于第 4類基本塊,也就是 PBB=去掉噪音基本塊后,if基本塊后面的else基本塊的數量也是有其內在規律性的,即不同的執行軌跡中if后面的else基本塊的數量是不一致的,即?Ti,Tj,Num(BBelsein Ti)!=Num(BBelsein Tj)。因此可以總結出如下識別規則
規則5 ? Ti, Tj,
Num(BBelsein Ti)!=Num(BBelsein Tj)
識別分支結構命令控制邏輯代碼塊的偽代碼如下。
算法2 分支結構命令控制邏輯基本塊識別算法輸入:TRACES僵尸程序執行軌跡集合;
輸出:SET_BB僵尸程序命令控制邏輯if基本塊Searching(TRACES){
SET_BB={}; //基本塊集合
SET_PBB={};//基本塊覆蓋率集合
SET_VBB={};//基本塊覆蓋次數集合foreach (t in TRACES){
//更新基本塊的覆蓋信息
(SET_BB, SET_PBB, SET_VBB) = update_coverage(t);
}
// 根據5個規則定位if基本塊的位置
SET_BB = analyzing with the RULES (SET_BB, SET_PBB, SET_VBB);
return SET_BB;}
為了驗證基于覆蓋率分析的僵尸網絡控制命令發掘方法的有效性,在 Zeus、Agobot和 Sdbot僵尸網絡的樣本上進行了實驗分析。實驗環境為Intel Core2 Quad Q9400 2.66 GHz處理器、4 GB內存、Ubuntu 12.04操作系統。
針對僵尸網絡Zeus、Agobot和Sdbot,分別捕獲到了5條不同的執行軌跡。實驗設計分為兩部分:首先,使用BitBlaze的Vine對僵尸程序的執行軌跡進行靜態分析,通過對路徑約束關系的收集、形式化表示和約束求解來分析僵尸網絡的命令控制邏輯,如圖4~圖6所示;然后,利用覆蓋率分析的方法,定位僵尸網絡命令控制邏輯所在的基本塊,進而對基本塊進行逆向分析發掘僵尸網絡的控制命令,分析結果如圖7~圖9所示。

圖4 Zeus的執行軌跡信息

圖5 Agobot的執行軌跡信息

圖6 Sdbot的執行軌跡信息

圖7 利用覆蓋率分析定位Zeus控制命令基本塊
圖4 ~圖6中,包括CPU指令數量、基本塊的數量和路徑約束關系的數量。捕獲的Zeus的5條執行軌跡的CPU指令數平均為804.2萬,基本塊的數量平均為17.6萬,使用污點分析和符號執行去收集執行軌跡中的路徑約束關系的時間開銷和空間開銷非常龐大。Zeus的執行軌跡平均每條含有15.6萬條路徑約束條件,使用Vine對這些路徑約束進行求解,能夠得到有效解的只有幾十個,而且這些路徑約束條件與僵尸網絡的控制邏輯沒有直接聯系。對僵尸網絡 Agobot和 Sdbot執行軌跡的分析結果與 Zeus的類似,分析過程需要消耗吉比特級別的存儲空間和十幾個小時進行約束求解,結果顯示大部分路徑分支的觸發條件無法通過約束求解找到,有解的路徑分支與僵尸網絡的命令控制邏輯沒有直接的聯系。

圖8 利用覆蓋率分析定位Agobot控制命令基本塊
圖7 和圖8是利用算法1對Zeus和Agobot執行軌跡的分析結果。n表示調用識別算法時所輸入的執行軌跡的數量,實驗中分別使用了3組、4組和5組執行軌跡進行基本塊的覆蓋率分析,實驗結果表明輸入的執行軌跡數量越多,命令控制邏輯基本塊的定位越準確。但是,隨著執行軌跡的數量增多,必然將增加捕獲執行軌跡的時間開銷和空間開銷。
Zeus和Agobot的實驗結果表明,5條執行軌跡就可以準確定位到命令控制基本塊,其需要的執行軌跡數量遠小于進行路徑約束條件分析時所需的執行軌跡數量。
Threshold表示調用基于循環結構的識別算法時所輸入的覆蓋次數的閾值,在實驗中分別將threshold設置為1 000和100,實驗結果表明閾值定位的越小,基本塊的定位越準確。但是覆蓋次數閾值不能小于僵尸網絡控制命令的數量,如果小于則會導致沒有基本塊能滿足所有的規則。

圖9 利用分支結構的覆蓋率分析定位到的if基本塊特征
僵尸網絡Sdbot所使用的命令控制邏輯是基于分支結構的,利用算法2分支結構命令控制邏輯基本塊識別算法對捕獲的Sdbot執行軌跡進行覆蓋率分析。通過分支結構中if基本塊的5個特征,成功定位到Sdbot控制邏輯的位置。圖9是對if基本塊后面所跟的else基本塊數量,發現不同軌跡中if基本塊后面所跟else基本塊的數量是不相同的,數量越多說明控制命令在控制邏輯處理過程中的位置越靠后。執行軌跡1、3、4中else基本塊數量都超過了1 000,逆向分析這些基本塊發現在基于分支結構的控制邏輯的識別過程中有大量的計算代碼,這些計算過程也是if-else結構的一部分,而且覆蓋信息滿足定義的規則。
利用覆蓋率分析方法定位到命令控制邏輯基本塊后,使用逆向分析技術可以很容易的找到僵尸網絡的控制命令集合,Zeus找到了25條控制命令,Agobot中找到了98條控制命令,Sdbot找到了50條命令。利用這些控制命令,構造了控制命令數據分組,這些控制命令所觸發的執行軌跡覆蓋了僵尸程序代碼空間95%以上的代碼,因此可以說明覆蓋率分析方法找到的控制命令集合能夠全面觸發僵尸程序的各種功能模塊。
本文所提出的基于覆蓋率分析的僵尸網絡控制命令發掘方法是一種基于統計特征的分析方法,擴展了當前利用路徑約束關系求解的推理方法,將僵尸網絡命令控制協議的分析方法從路徑空間的遍歷擴展到代碼空間的覆蓋特征分析,是一種全新的分析思路。
該基于統計特征的分析方法不需要對二進制代碼進行中間表示與約束求解,分析過程的時間開銷和空間開銷小,并能根據代碼空間是否被全覆蓋來驗證發現的僵尸網絡命令空間是否能全面觸發僵尸網絡的各個功能模塊,具有一定的實用性。
但是,該分析方法需要預先捕獲足夠數量的僵尸網絡執行軌跡才可以進行統計特征分析,因此不能用于檢測未知的僵尸網絡。
該方法是一種對僵尸程序代碼空間統計特征的分析方法,其前提條件是代碼空間是可見的,而且各個代碼基本塊的功能性是確定的。因此,該方法會受到代碼空間混淆技術的干擾,例如代碼移動(code mobility)混淆技術[39]可以將部分代碼變成在可控環境下是不可見的;面向返回的編程技術ROP(return-oriented programming)[38]可以動態地將代碼塊任意組裝成不同的功能模塊,破壞了代碼塊由其功能性所產生的統計特征。而且,僵尸網絡的演化和變異速度很快,需要進一步挖掘僵尸程序執行軌跡集合對代碼空間的覆蓋信息中內在的本質的規律性,實現更高效地逆向構建僵尸網絡的命令控制協議。
本文提出了一種基于覆蓋率分析的僵尸網絡控制命令發掘方法,對僵尸網絡命令控制協議的分析提供了一種全新的思路,引入了輕量級的基于統計特征分析與識別的發掘方法。僵尸網絡的執行軌跡對命令控制邏輯所在代碼塊的覆蓋率具有一定的規律性,從中可以快速準確地定位到命令控制邏輯所在的基本塊,并提取出僵尸程序可執行的控制命令集合。該方法不需要對二進制代碼的路徑約束關系進行形式化表示和求解,時間和空間開銷小,具有實用性。利用該方法對僵尸網絡Zeus、Agobot和Sdbot的執行軌跡進行分析,結果表明該方法能夠快速準確地發掘出僵尸網絡的控制命令集合,并驗證了該命令集合所對應的執行軌跡可以覆蓋僵尸程序95%以上的代碼空間。
[1] 諸葛建偉, 韓心慧, 周林等. 僵尸網絡研究[J]. 軟件學報, 2008,19(3): 702-715.ZHUGE J W, HAN X H, ZHOU L, et al. Research and development of Botnets[J]. Journal of Software, 2008, 19(3): 702-715.
[2] 方濱興, 崔翔, 王威. 僵尸網絡綜述[J]. 計算機研究與發展, 2011,48(8): 1315-1331.FANG B X, CUI X, WANG W. Survey of Botnets[J]. Journal of Computer Research and Development, 2011, 48(8): 1315-1331.
[3] 王天佐, 王懷民, 劉波等. 僵尸網絡中的關鍵問題[J]. 計算機學報,2012, 35(6): 1192-1208.WANG T Z, WANG H M, LIU B, et al. Some critical problems of Botnets[J]. Chinese Journal of Computers, 2012, 35(6): 1192-1208.
[4] 江健, 諸葛建偉, 段海新等. 僵尸網絡機理與防御技術[J]. 2012,23(1): 82-96.JIANG J, ZHUGE J W, DUAN H X, et al. Research on Botnet mechanisms and defenses[J]. Journal of Software, 2012, 23(1):82-96.
[5] NAZARIO J. DDoS attack evolution[J]. Network Security, 2008, 7:7-10.
[6] HUSNA H, PHITHAKKITNUKOON S, PALLA S, et al. Behavior analysis of spam Botnets[A]. IEEE COMSWARE[C]. Bangalore, India,2008. 246-253.
[7] FREILING F, HOLZ T, WICHERSKI G. Botnet tracking: exploring a root-cause methodology to prevent distributed denial-of-service attacks[A]. Proc of the ESORICS’05[C]. Milan, Italy, 2005.319-335.
[8] BAECHER P, KOETTER M, HOLZ T, et al. The nepenthes platform:an efficient approach to collect malware[A]. Proc of the RAID’06[C].Hamburg, Germany, 2006.165-184.
[9] 金鑫, 李潤恒, 甘亮等. 基于通信特征曲線動態時間彎曲距離的IRC僵尸網絡同源判別方法[J]. 計算機研究與發展, 2012, 49(3):481-490.JIN X, LI R H, GAN L, et al. IRC Botnets' homology identifying method based on dynamic time warping distance of communication feature curves[J]. Journal of Computer Research and Development,2012, 49(3): 481-490.
[10] GU G, PORRAS P, YEGNESWARAN V, et al. BotHunter: detecting malware infection through ids-driven dialog correlation[A]. Proc of the 16th USENIX Security Symp[C]. Boston, Massachusetts, USA,2007. 167-182.
[11] GU G, PERDISCT R, ZHANG J, et a1. BotMiner: clustering analysis of network traffic for protocol- and structure-independent botnet detection[A]. Proc of the 17th USENIX Security Symp[C]. San Jose,California, USA, 2008.269-286.
[12] GU G, ZHANG J, LEE W. BotSniffer: detecting botnet command and control channels in network traffic[A]. Proc of the NDSS[C]. San Diego, USA, 2008.
[13] 王威, 方濱興, 崔翔. 基于終端行為特征的 IRC僵尸網絡檢測[J].計算機學報, 2009, 32(10): 1980-1988.WANG W, FANG B X, CUI X. IRC Botnet detection based on host behavior[J]. Chinese Journal of Computers, 2009, 32(10): 1980-1988.
[14] HOLZ T, GORECKI C, RIECK C, et al. Detection and mitigation of fast-flux service networks[A]. Proc of the NDSS[C]. San Diego, USA,2008.
[15] CHING-HSIANG H, HUANG C Y, CHEN K T. Fast-flux bot detection in real time[A]. Proc of the RAID[C]. Menlo Park,California, USA, 2011. 464-483.
[16] 王海龍, 龔正虎, 侯捷. 僵尸網絡監測技術研究進展[J]. 計算機研究與發展, 2010, 47(12):2037-2048.WANG H L, GONG Z H, HOU J. Overview of Botnet detection[J].Journal of Computer Research and Development, 2010, 47(12): 2037-2048.
[17] FREILING F, HOLZ T, WICHERSKI G. Botnet tracking: exploring a root-cause methodology to prevent denial of service attacks[A]. Proc of the ESORICS[C]. Milan, Italy, 2005. 319-335.
[18] RAJAB M, ZARFOSS J, MONROSE F, et al. A multifaceted approach to understanding the Botnet phenomenon[A]. Proc of the 6th ACM SIGCOMM Conf on Internet Measurement[C]. Pisa, Italy, 2006. 41-52.
[19] JUAN C, PONGSIN P, CHRISTIAN K, et al. Dispatcher: enabling active botnet infiltration using automatic protocol reverseengineering[A]. Proc of the CCS 2009[C]. Chicago, IL, USA, 2009.
[20] 6K2A1N-6I3C4H. C, KREIBICH C, LEVCHENKO K, et al. Spamalytics: an empirical analysis of spam marketing conversion[A]. Proc of the CCS 2008[C]. Alexandria,VA, USA , 2008. 3-14.
[21] 應凌云, 楊軼, 馮登國等. 惡意軟件網絡協議的語法和行為語義分析方法[J]. 軟件學報, 2011, 22(7): 1676-1689.YING L Y, YANG Y, FENG D G, et al. Syntax and behavior semantics analysis of network protocol of malware[J]. Journal of Software, 2011,22(7): 1667-1689.
[22] 劉豫, 王明華, 蘇璞睿等. 基于動態污點分析的惡意代碼通信協議逆向分析方法[J]. 電子學報, 2012, 40(4): 661-668.LIU Y, WANG M H, SU P R, et al. Communication protocol reverse engineering of malware using dynamic taint analysis[J]. Acta Electronica Sinica, 2012, 40(4): 661-668.
[23] CHO C, BABIC D, SHIN E, et al. Inference and analysis of formal models of botnet command and control protocols[A]. Proc of the CCS 2010[C]. Chicago, IL, USA, 2010. 426-439.
[24] KANG B, ERIC C, LEE C, et al. Towards complete node enumeration in a peer-to-peer Botnet[A]. Proc of the CCS 2009[C]. Chicago, IL,USA, 2009. 23-34.
[25] STONE-GROSS B, COVA M, CAVALLARO L, et al. Your Botnet is my botnet: analysis of a Botnet takeover[A]. Proc of the CCS 2009[C].Chicago, IL, USA, 2009. 635-647.
[26] DAGON D, ZOU C, LEE W. Modeling botnet propagation using time zones[A]. Proc of the NDSS[C]. San Diego, USA, 2006. 235-249.
[27] VOGT R, AYCOCK J, JACOBSON M. Army of botnets[A]. Proc of the NDSS[C]. San Diego, USA, 2007. 111-123.
[28] WANG P, WU L, CUNNINGHAM R, et al. Honeypot detection in advanced Botnet attacks[J]. International Journal of Information and Computer Security, 2010, 4(1): 30-51.
[29] WANG W, FANG B, CUI X, et al. A user ID-centralized recoverable Botnet: structure research and defense[J]. International Journal of Innovative Computing, Information and Control, 2010, 6(4):
[30] 4Z3E0N7G-4 3Y1, 7S.HIN K, HU X. Design of SMS commanded-and-controlled and P2P-structured mobile botnets[A]. Proc of the 5th ACM Conf on Security and Privacy in Wireless and Mobile Networks[C]. Tucson,Arizona, USA, 2012. 137-148.
[31] SINGH K, SENGAL S, JAIN N, et al. Evaluating Bluetooth as a medium for Botnet command and control[A]. Proc of the Int Conf on Detection of Intrusions and Malware, and Vulnerability Assessment[C].Bonn, Germany, 2010. 61-80.
[32] CUI X, FANG B, YIN L, et al. Andbot: towards advanced mobile Botnets[A]. Proc of the 4th USENIX Workshop on Large-scale Exploits and Emergent Threats[C]. Berkeley, California, USA,[
33] Z2H01A1O.1 1S., LEE P, LUI J, et al. Cloud-based push-styled mobile botnets:a case study of exploiting the cloud to device messaging service[A].Proc of the Annual Computer Security Applications Conf (ACSAC 2012)[C]. Florida, USA, 2012.119-128.
[34] AMINI P, PIERCE C. Kraken Botnet infiltration[EB/OL]. http://dvlabs. tippingpoint.com.
[35] CHIA Y, JUAN C. Botnet infiltration: finding bugs in botnet command and control[EB/OL]. http://www.eecs.berkeley.edu/~chiayuan/cs261/cs261_cho.pdf, 2009.
[36] DAVIS C, FERNANDEZ J, NEVILLE S, et al. Sybil attacks as a mitigation strategy against the storm Botnet[A]. Proc of the 3rd Int Conf on Malicious and Unwanted Software[C]. Alexandria, Virginia,USA, 2008. 32-40.
[37] BARFORD P, YEGNESWARAN V. An inside look at Botnets[J].Malware Detection, 2007,27: 171-191.
[38] SHACHAM H. The geometry of innocent flesh on the bone:return-into-libc with-out function calls (on the x86)[A]. Proc of the 14th ACM Conf on Computer and Communications Security[C].Alexandria, VA, USA, 2007.552-561.
[39] FALCARIN P, CARLO S, CABUTTO A, et al. Exploiting code mobility for dynamic binary obfuscation[A]. Proc of the World Congress on Internet Security[C]. London, UK, 2011. 114-120.
[40] CUI W, KANNAN J, WANG H J. Discoverer: automatic protocol reverse engineering from network traces[A]. Proc of 16th USENIX Security Symposium on USENIX Security Symposium[C]. Boston,MA, USA, 2007. 1-14.
[41] VIGNA G. Static disassembly and code analysis[J]. Malware Detection,2007,27:19-41.
[42] CABALLERO J, POOSANKAM P, KREIBICH C, et al. Bidirectional Protocol Reverse Engineering: Message Format Extraction and Field Semantics Inference[R]. 2009.
[43] LIM J, REPS T. BCE: Extracting Botnet Commands from Bot Executables[R]. 2010.
[44] 王志, 賈春福, 魯凱. 基于環境敏感分析的惡意代碼脫殼方法[J].計算機學報, 2012, 35(4): 693-702.WANG Z, JIA C F, LU K. Malicious hidden-code extracting based on environment-sensitive analysis[J]. Chinese Journal of Computers, 2012,35(4): 693-702.
[45] Qemu[EB/OL]. http://wiki.qemu.org, 2013.
[46] SONG D, BRUMLEY D, YIN H, et al. BitBlaze: a new approach to computer security via binary analysis[A]. Intl Conf on Information Systems Security(ICISS 2008)[C]. Hyderabad, India, 2008. 1-25.
[47] Pin: a dynamic binary instrumentation tool[EB/OL]. http://software. intel.com/en-us/articles/pin-a-dynamic-binary-instrumentation-tool, 2013.