殭屍網路研究系列文章之二 設計自動識別系統
殭屍網路(botnet)研究的常規研究方法中,第一種是使用蜜網技術研究。該方法從殭屍程式(bot)入手研究botnet的特徵,這種方法利用了botnet的可傳播性,通過蜜罐手段獲得用於傳播擴散的bot程式樣本,然後逆向分析這些樣本,從而獲得這些bot程式中所包含的連線botnet伺服器所需要的屬性值,這樣就可以深入地跟蹤botnet,獲得botnet的情況。
這種方法的優點是能夠有效地捕獲比較活躍的botnet,並且準確率比較高,同時,由於可以獲得程式中包含的一些特徵值,可以對botnet進行更深層的研究。但這種方法對於不再傳播的botnet是無法捕獲的。
第二種方法是基於網路流量的研究。這種方法是將botnet的行為特徵通過流量變化反應出來,然後通過統計這些特徵流量來判斷botnet的存在。這種研究方法能夠通過對閘道器流量的分析來判斷botnet存在的可能性,但botnet的流量往往會淹沒在海量的閘道器流量中,很難被有效地區分出來。 原因如下:
第一,botnet是一種惡意行為,擁有這些botnet的人極不願意讓其他人登入到他的伺服器中去,同時也為了防止其他***奪取其botnet,他會有意地隱藏伺服器的基本資訊,如連入的使用者數、可見的使用者數、伺服器內所建立的頻道等,這些資訊本來是需要公布給聊天者的,現在卻被***者有意隱藏了。
第二,由於加入到botnet伺服器中的所謂使用者nickname是由bot程式生成,所以這些bot的nickname應符合一定的生成演算法,也就帶有了某些規律,如ip位址表示法(就是將被感染了bot程式的主機的ip位址所在國的三位縮寫放在開頭,然後在後面加入指定長度的隨機數字,如usa|8028032,cha|8920340)和系統表示法(將被感染bot程式的主機的系統作為開始的字母如xp、2000等,然後再在後面加上指定長度的隨機數字,如xp|8034,2000|80956)。這些命名的特徵可以從得到的bot原始碼中發現並總結出來。這些使用者的nickname的規律性和正常的irc server中的使用者nickname的隨意性是不相同的。圖1就是擷取的兩個帶有命名規律的botnet的使用者nickname集。
第三,由於botnet中的感染bot程式的主機是在不知情的情況下被控制的,所以在沒有botnet控制者指令的條件下是不會有所行為的,所以他們的行為也會不同於正常的irc server中的聊天者的行為,更形象地講他們的行為更像乙個個殭屍。
由於以上原因,在irc協議的botnet伺服器中,存在著可以提取的有別於正常irc伺服器的特徵屬性,通過統計和使用一定的模式識別演算法,最後可以將這些特徵屬性構成用來判斷伺服器性質的判斷條件。
系統設計
通過上面的分析可以看到,要獲取這些資訊,需要有可以自動登入的irc客戶端程式,同時要有乙個比較合理的識別演算法以便提高使用這些資訊作為判斷標準的準確率。本著這樣的設計思路,這裡給出botnet自動識別系統。
本系統分為四個模組,分別為資料收集模組、樣本集建立模組、規則集模組以及檢測模組。
資料收集模組
根據目前botnet存在的情況,針對irc botnet進行研究,在網路中蒐集bot惡意樣本分析報告,從而得到有關botnet的伺服器位址資訊,以及登入指定頻道的資訊,將所需要的伺服器位址資訊、登入口令、登入頻道名稱、登入頻道所需密碼以及nickname的命名規則提取出來存入到資料庫中供採集異常樣本時使用。另一方面將網路中正常的irc伺服器的位址資訊也提取出來,供採集正常的樣本時使用。
樣本集建立模組
將異常和正常的資料集中的登入資訊作為輸入,登入到相關的irc伺服器中,獲取指定的伺服器資訊,存入到後台資料庫形成異常樣本庫和正常樣本庫。
規則集模組
使用貝葉斯演算法對樣本集中的異常樣本和正常樣本進行統計,得到各個屬性在botnet判斷中所佔比例,這樣就形成了可用於判斷的規則庫。隨著樣本數的不斷增加,不斷地修正各屬性的概率和判斷閾值,這樣就可以逐漸提高判斷的準確性。同時要不斷總結可用來判斷的新屬性,擴充套件規則集。
檢測模組
在cernet閘道器中提取使用irc協議預設的通訊埠6667的相關資訊,得到存在於cernet中的irc伺服器位址或與cernet主機建立聯絡的伺服器位址,然後登入到這些irc伺服器中,通過同樣的特徵採集方法得到能夠用來判斷的伺服器特徵,再通過檢測器,比對與規則集中的條件相符的屬性,採用復合概率的方法計算出符合條件的各規則的總的概率,與規定的概率閾值進行比較,得出判斷結論。根據得到的結果再存入不同的樣本集中,這樣就可以不斷地增加樣本。
系統的實現
在系統模型的各個設計模組中,採集樣本和統計判斷概率是關鍵部分,所以主要介紹這兩部分的實現。
殭屍程式客戶端模擬
採集botnet樣本。實現方法是編寫乙個模擬的irc客戶端程式,能夠應答各種irc協議的指令,並且將登入伺服器後回饋的各種資訊選擇出來填寫到後台資料庫中儲存,這樣就可以得到後續所需要的判斷屬性。在採集過程中盡可能多地保留各種資訊。因為在獲得botnet樣本時,有些資訊是被控制者有意修改和掩蓋的,所以往往會有某些屬性擾亂我們的判斷,只有盡可能多地比對各種屬性才能有比較準確的判斷。
殭屍網路判定流程
統計判斷概率部分是採用貝葉斯演算法和復合概率的方法來實現的。首先要統計出某個屬性在botnet樣本中的出現概率,然後再統計出這個屬性在正常irc server樣本中出現的概率,根據貝葉斯公式得到出現該屬性時伺服器為botnet伺服器的概率。依次將所有能夠採集到的屬性都進行這樣的統計計算,就形成了乙個判斷條件列表。每乙個需要判斷的伺服器都先相應地進行屬性採集,然後對照這個判斷列表,利用復合概率的計算方法得到最終的概率。
具體實現是這樣的。
p(ti|a1) i=1,2,3,4,5,6為該伺服器為botnet伺服器的事件發生時,即已知為botnet伺服器時存在ti屬性的概率,計算方法為(a1是botnet伺服器這個事件的發生):
p(ti|a1)=存在ti的botnet伺服器數/總的botnet伺服器數;
p(ti|a2) i=1,2,3,4,5,6 為該伺服器不是botnet伺服器的事件發生時,即已知該伺服器為正常irc伺服器時存在ti屬性的概率,計算方法為(a2為不是botnet伺服器的事件發生時):
p(ti|a2)=存在ti屬性的正常樣本的伺服器數/總的正常伺服器數;
根據貝葉斯公式:
p(a1|ti)= p(ti|a1)*p(a1)/[p(ti|a1)*p(a1)+p(ti|a2)*p(a2)]
假定先驗概率p(a1)=p(a2)=50%,這樣就可以計算出p(a1|ti),就形成了判斷列表。當給定乙個伺服器位址後,根據獲取的屬性特徵,得到可判斷的概率,公式為:
p(a|t)=p1*p2*p3….*pn/p1*p2*p3…pn+(1-p1)(1-p2)(1-p3)*…(1-pn)
其中pi=p(a1|ti)。
系統優缺點分析
系統具備如下優點。
第一,從閘道器資料出發,直接找到用於botnet控制的核心伺服器。在乙個閘道器中有著大量的基於irc協議的通訊資訊,可以為我們提供很好的irc server位址,通過上面的識別判斷方法可以對這些server位址進行過濾,將botnet server從這些資訊中挑選出來。
第二,判斷方法明確簡單,誤報率低。這些用來判斷的屬性都是從真正的在網路中存在的botnet樣本中挑選出來的,所以比較直接明了,可以很快將具有這些屬性的server與普通的irc server區分開來。
第三,具有可擴充套件性,可以不斷地通過新增用來判斷的屬性和樣本數量,不斷提高判斷的準確性。隨著對irc協議的深入分析,以及對botnet特徵的全面理解,可以加強判斷的條件,使系統由可判斷有較明顯差別的botnet server到細緻地區分有較小差別的botnet。
但是,系統還存在如下侷限性。
第一,漏報率比較高。botnet伺服器按照生成的形式粗略地分為兩類:一類是依託大的irc servers,在這樣的伺服器上建立惡意頻道,以便形成可控的botnet。這種botnet的優勢是規模龐大,***力強,同時還可以節省自身的資源,但被發現的機率也比較大,而且一旦被發現,botnet就會被irc server的系統管理員所控制,損失嚴重。另外一類botnet是獨自建立的irc server,由***自己控制,這種botnet規模雖然小,但容易控制,隨時可以隱藏自身,並且有著很好的可遷移性。
對於第一類botnet,本系統目前存在較大誤差,還需要獲得botnet更詳細的登入資訊,做進一步的判斷,才能夠得出更好的識別效果。
第二,該系統的檢測物件是針對irc協議的botnet,也可以擴充套件到基於這種集中控制的botnet。但是對於目前已經存在的基於p2p結構的botnet,由於不存在核心控制的伺服器,無法利用本識別系統進行判別。
任何一種檢測方法都不是萬能的,比較有效的方法是將幾種各有所長的方法集中起來,形成乙個整體,這樣才能夠最大限度地提高判斷的準確性。我們下一步的工作就是著重解決對依託合法的irc server建立的botnet的判斷,同時研究逐漸發展起來的基於p2p結構的botnet,找到行之有效的判斷方法。
LAMP系列文章之二 原始碼級別研究Apache?
要展開這個話題,我想首先需要解決好為什麼需要這樣做的問題。原始碼級別看待 apache 首先需要解決態度問題哈。然而,看看計算機書架上的 apache 的書,幾乎都是講如何使用 apache 的,很少有對 apache 進行原始碼級別研究的,可是,功利一點的角度來看,很多大公司在進行招聘的時候,又希...
LAMP系列文章之二 原始碼級別研究Apache?
要展開這個話題,我想首先需要解決好為什麼需要這樣做的問題。原始碼級別看待 apache 首先需要解決態度問題哈。然而,看看計算機書架上的 apache 的書,幾乎都是講如何使用 apache 的,很少有對 apache 進行原始碼級別研究的,可是,功利一點的角度來看,很多大公司在進行招聘的時候,又希...
LAMP系列文章之二 原始碼級別研究Apache?
時間有限,待完善。要展開這個話題,我想首先需要解決好為什麼需要這樣做的問題。原始碼級別看待apache,首先需要解決態度問題哈。追溯apache的歷史,從tin berners lee 然而,看看計算機書架上的apache的書,幾乎都是講如何使用apache的,很少有對apache進行原始碼級別研究...