一個典型的蠕蟲病毒有兩個功能型部件:傳播和破壞,流行的蠕蟲病毒(計算機愛好者,學習計算機基礎,電腦入門,請到本站http://.,我站同時提供計算機基礎知識教程,計算機基礎知識試題供大家學習和使用),大都是利用操作系統或者應用程序的漏洞(以弱口令和溢出最為常見),但常常並不會對宿主機造成“致命”的破壞。這兩個特點使蠕蟲病毒比普通電腦病毒傳播得更快,影響力更大。一般來說,單一的蠕蟲病毒只針對某種特定的漏洞進行攻擊,所以一旦這種漏洞得到大范圍修補,病毒也就沒有了生存空間。
更新這種設計,我把傳播部件拆分開來:把掃描、攻擊和破壞腳本化,主程序則負責解析這些腳本。例如針對FTP弱口令進行掃描,我們可以定義如下腳本:
UID = Is cript-0A21-2331-X #隨機唯一編號
USING TCP;
PORT 21;
SEND “USER anonymous”;
SEND CRLF;
SEND “PASS 計算機基礎知識http://.)/Upfiles/BeyondPic/dnaq/2009-09/20090928154848416.gif style="cursor: pointer" alt="點此在新窗口浏覽圖片" onmousewheel="return bbimg(this)" onload="javascript:resizepic(this)" border="0"/>[email protected]”
SEND CRLF;
IF (FIND “200”) RESULT OK;
NEXT;
解析了這段腳本後(我想這種腳本是很容易讀懂的),我們再定義一系列的過程,把我們的蠕蟲體Upload上去,一次完整的傳播動作就完成了。如果是溢出漏洞,為了簡單起見我們可以采集遠程溢出的數據包,然後修改IP地址等必要數據,再轉發溢出數據包進行溢出(這種情況下要實現connect-back就不容易了,不過這些具體問題就待有心人去研究吧),例如:
USING RAW;
IP OFFSET AT 12;
SEND “\x1A\xB2\xCC” ……
主程序在完成傳播後留下一個後門,其他宿主機可以通過這個後門與本地的蠕蟲病毒同步傳播腳本,這樣每次有新的漏洞產生,宿主機的傳播方式可以很快地得到升級。我們當然不會僅滿足於這樣一個蠕蟲程序,掃描/攻擊腳本的傳播過程也是需要仔細處理的。
我們希望適應力(Fitness)最強的腳本得到廣泛的應用(看起來有點類似 蟻群算法 和 GA),所以我們要求得每個個體的Fitness,當它和另一個體取得聯系的時候就可以決定誰的傳播腳本將取代另一個:
Fitness = Number of host infected / Number of host scanned
但也不能僅憑Fitness就修改傳播腳本,我個人覺得一個合適的概率是75%,20%的機會保持各自的傳播腳本,剩下的5%則交換腳本。這樣在維持每種腳本都有一定生存空間的情況下使適應性最好的個體得到更多的傳播機會,同時,一些在某種網絡環境下適應性不強的腳本也有機會嘗試不同的網絡環境。
融合多種傳播方式的蠕蟲病毒設計.