- 相關推薦
基于Perl的DoS工具設計與實現(xiàn)
摘 要:本文設計并實現(xiàn)了一個基于Perl腳本語言的Dos攻擊工具,利用半連接原理攻擊WEB服務。本攻擊工具分掃描模塊和攻擊模塊,具有HTTP DoS,HTTPS DoS,Cache avoidance和HTTPReady Bypass攻擊功能。充分利用系統(tǒng)的超線程性能和Perl腳本特性,代碼量少,對Linux下的WEB服務攻擊效果較好。
【關鍵詞】Dos Perl 攻擊 工具
在Linux下使用Perl腳本語言設計開發(fā)的DoS攻擊工具,可以利用單一機器占用網絡帶寬很少的情況下對目標服務器的WEB服務發(fā)動攻擊。它通過向目標服務器發(fā)送半HTTP連接來消耗服務器資源,且所需數(shù)據(jù)包相對于一般的洪泛式DoS攻擊工具要少很多,所以具有一定的隱蔽性。目標服務器采用超線程技術則發(fā)動的攻擊會更有效,因為隨著攻擊的進行服務器會限制它所允許的線程數(shù),若攻擊者的機器上也采用超線程則攻擊效果會大大增強。
1 攻擊原理
通過發(fā)送半連接(HTTP請求)來保持連接的暢通,并周期性發(fā)送HTTP Headers來避免套接口關閉來達到消耗目標主機資源,關閉WEB服務的目的。由于有效地將攻擊連接偽裝為合法連接從而躲過了偵測系統(tǒng)的防御。同時當攻擊正在進行時,日志文件并不會被寫入,直到連接請求完畢。所以攻擊者能夠使目標在一段時間內服務無法被訪問,同時攻擊行為不會被管理員發(fā)現(xiàn)。
2 主要模塊劃分
Perl腳本語言開發(fā)的DoS工具主要由兩大部分組成,分別是掃描模塊和攻擊模塊。掃描模塊包括目標主機掃描模塊,攻擊主機掃描模塊,目標主機連接超時時間測試掃描模塊。攻擊模塊包括常規(guī)HTTP Dos攻擊模塊,HTTPS Dos攻擊模塊,HTTPReady Bypass模塊, Cache avoidance模塊。
2.1 掃描模塊
2.1.1 目標主機掃描模塊
探測目標主機的服務是否可用及是否采用超線程技術,通過向目標服務器發(fā)送合法請求來實現(xiàn)。
2.1.2 本地主機掃描模塊
探測攻擊者的主機是否采用超線程技術。由于超線程技術的特點,使得擁有超線程技術的攻擊者的攻擊效果會比未擁有的要好很多。
2.1.3 目標主機連接超時時間測試掃描模塊
找出目標機器服務的連接超時時間,這個時間對于攻擊來說至關重要,將攻擊者發(fā)送的半連接超時時間設置得與被攻擊者的越接近,攻擊效果越好,但必須小于被攻擊者的連接超時時間,否則攻擊失效。
2.2 攻擊模塊
2.2.1 HTTP DoS攻擊模塊
通過向目標周期性地發(fā)送請求,導致目標服務器無法響應合法用戶請求。攻擊目標的超時時間越短它的資源被消耗得也越快。連接數(shù)與攻擊目標的連接數(shù)越接近越好,因為這能減少的嘗試次數(shù)以及相關的帶寬。
2.2.2 HTTPS DoS攻擊模塊
實現(xiàn)方式與HTTP DoS攻擊模塊相似,不同之處在于本模塊需要對數(shù)據(jù)通過協(xié)議加密后再發(fā)送。
2.2.3 HTTPReady Bypass模塊
通過將發(fā)送的請求消息從GET改為POST來實現(xiàn)。這是在HTTP DoS失效的情況下使用,實現(xiàn)方法為把GET請求方法改為POST請求方法,這樣就可以繞過HTTPReady的保護。
2.2.4 Cache avoidance模塊
本通過改變請求消息頭使得目標服務器的溢出,從而拒絕服務。
3 難點實現(xiàn)
3.1 掃描模塊
本工具的掃描模塊分為目標主機掃描模塊,攻擊者主機掃描模塊,目標主機連接時間掃描模塊。
3.1.1 攻擊主機掃描模塊
此模塊的主要任務是通過調用Config模塊來檢測主機是否使用超線程技術,代碼為:
$Config{usethreads}
如果使用則執(zhí)行代碼:
$usemultithreading = 1;
use threads;
use threads::shared;
攻擊者的主機是否采用采用超線程技術對于攻擊效果而言影響比較大,因為攻擊原理是向目標主機發(fā)送半HTTP Request請求從而導致目標主機拒絕服務,所以攻擊連接數(shù)對攻擊效果的影響至關重要,連接數(shù)越多攻擊效果越好,所以擁有超線程技術的主機才產生的攻擊效果會更好。
3.1.2 目標主機掃描模塊
此模塊的主要任務是檢測目標主機的HTTP服務是否可用,具體方法為向服務器發(fā)送一個合法的GET請求消息:
if ($cache) {
$rand = "?" . int( rand(99999999999999) );
}else {
$rand = "";
}
my $primarypayload =
"GET /$rand HTTP/1.1\r\n"
. "Host: $sendhost\r\n"
. "User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.503l3; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; MSOffice 12)\r\n"
. "Content-Length: 42\r\n";
如果套接字建立成功而且請求得到合法響應,則說明目標服務器的服務工作正常,則可以進行下一步操作。 3.1.3 目標主機連接時間掃描模塊
此模塊的主要功能為探測目標服務器上的超時時間,這個選項是手動。了解目標機器的超時時間是非常必要的,因為攻擊目標的超時時間越短則資源被消耗得也越快,但如果設置得小于被攻擊電腦的連接超時時間,則又容易導致攻擊效果銳減。以下為具體實現(xiàn)代碼:
for ( my $i = 0 ; $i <= $#times ; $i++ ) {
print "Trying a $times[$i] second delay: \n";
sleep( $times[$i] );
if ( print $sock "X-a: b\r\n" ) {
print "\tWorked.\n";
$delay = $times[$i]
}
其中變量sock只指的HTTP Request的底層通信連接,這里為TCP連接,當然,如果需要改變?yōu)閁DP連接可以直接修改相關代碼。最后,測試的大致超時時間為變量delay的值,單位為秒。
3.2 攻擊模塊
攻擊模塊包括HTTP DoS攻擊模塊,HTTPS DoS攻擊模塊,HTTPReady Bypass模塊,cache avoidence模塊。它的攻擊流程如圖1所示。
3.2.1 HTTP DoS
這個攻擊模塊是本工具的基本攻擊模塊,它通過設置三個參數(shù):-timeout,-num,-tcpto然后借由這些參數(shù)向服務器發(fā)動襲擊,timeout參數(shù)是指目標服務器HTTP Request的超時時間,這里也把它作為發(fā)送攻擊的間隔時間。這樣設置使得攻擊者所發(fā)起的HTTP Request符合規(guī)范,攻擊的隱蔽性大大增強,而且還不會導致主機負載過高而向管理員告警。這里使用GET請求方法向目標發(fā)起連接。實現(xiàn)攻擊的前提是要在攻擊者與目標服務器間建立完整的TCP連接。
3.2.2 HTTPS DoS
此模塊針對采用了HTTPS協(xié)議的WEB服務器。它通過用IO::SOCKET::SSL構造一個符合SSL3.0協(xié)議的sock對象來偽裝自己,從而欺騙主機,成功發(fā)送HTTP Request半連接,實現(xiàn)為:
if ($ssl) {
if (
$sock = new IO::Socket::SSL(
PeerAddr => "$host",
PeerPort => "$port",
Timeout => "$tcpto",
Proto => "tcp",
}
)
{…}
}
3.2.3 Cache avoidance
根據(jù)RFC2616的描述,HTTP1.1通常應用于能通過采用緩存技術提高性能的分布式信息系統(tǒng)。HTTP/1.1中緩存可以在許多情況下排除發(fā)送請求和發(fā)送完整響應。前者減少了網絡回路的數(shù)量;利用一個“過期(expiration)”機制來達到此目的。后者減少了網絡應用的帶寬;用“驗證(validation)”機制來達到此目的。利用這個特點,我們新增了一個功能,即Cache avoidance。核心思路就是發(fā)送大量服務器地址相同但是URL中請求文件的文件名不同的GET請求消息來消耗網絡資源。因為這樣可以“繞過”緩存機制,使得攻擊者發(fā)送的每一個請求都會到達目標機器,而且由于頁面不存在,每一次請求都會消耗目標WEB服務器的資源,最終導致DoS。具體的實現(xiàn)方法利用了Perl強大的正則表達式和srand()函數(shù)以及rand()函數(shù)。具體代碼如下:
if ($cache) {
$rand = "?" . int( rand(99999999999999) );
}
my $primarypayload =
"GET /$rand HTTP/1.1\r\n"
. "Host: $sendhost\r\n"
. "User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.503l3; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; MSOffice 12)\r\n"
. "Content-Length: 42\r\n";
4 功能、性能測試
4.1 功能測試
4.1.1 系統(tǒng)平臺
Fedora 14。
4.1.2 目標服務器系統(tǒng)
版本為httpd-2.2.10-2的Apache服務器。
4.1.3 測試環(huán)境
在一臺物理主機上建立一個虛擬機,它的操作系統(tǒng)為Fedora 14,物理主機的操作系統(tǒng)為Windows XP sp3。
各個模塊的功能測試如表1所示。
測試結果表明攻擊效果較好,但HTTPS DoS有時會攻擊失效,這還需要改進?傮w而言,攻擊效率較高,設計思路清晰,特別是在攻擊時不會造成目標服務器負載明顯上升,也不會造成內存使用明顯增加,而且還不會對其它無關聯(lián)服務造成損害,這是設計之初沒有想到的意外驚喜。
4.2 性能測試
4.2.1 測試環(huán)境
FEDORA 14,INTEL(R) CORE(TM) DUO CPU T2350 @ 1.86GHZ 1.86GHZ,1.96GB內存。
4.2.2 具體過程
建立500個SOCKET連接,DOS 服務器192.168.1.123的80端口,設置CONNECTION的超時時間為200秒。如果不知道連接超時時間,那么就用下面的命令,讓COBRA自動完成。
SLOWLORIS.PL -DNS 192.168.1.123 -PORT 80 -TEST。
這是一個慢啟動的過程,得出測試數(shù)據(jù)需要一定的時間。所以建議首先用NMAP之類的工具得出目標機器的WEB服務器操作系統(tǒng)版本,然后根據(jù)自己的經驗估計一個時間。TIMEOUT值太大,可能被服務器主動斷開連接,太短發(fā)送的數(shù)據(jù)包就越多,攻擊者的主機壓力太大。DOS效果如表2所示。
由于作者時間、精力、水平有限,所以只能列出少部分能夠被攻陷和不能夠被攻陷的服務器操作系統(tǒng)名稱。能夠攻陷的有:Apache 1.x, Apache 2.x, dhttpd, lighttpd。目前還無法攻陷的有:IIS6.0, IIS7.0,nginx, Cherokee, Squid。值得注意的是本工具運行在Windows系列操作系統(tǒng)上的攻擊效果不太好,主要是限制了最大連接數(shù),所以應盡量運行在類似UNIX的操作系統(tǒng)上。
5 結論
本文詳細闡述了Perl語言開發(fā)的針對WEB服務的DoS工具的設計與實現(xiàn)。從測試結果中可以得知,此工具基本達到了設計要求,能夠實現(xiàn)利用單一機器對目標服務器的WEB服務進行打擊,打擊隱蔽性非常高,對目標服務器CPU、內存的負載影響非常小,而且在攻擊時日志文件不會產生記錄。但由于一些技術上的問題,本工具對于一些應用較廣的WEB服務器的攻擊還是不能很好實現(xiàn),還需要在以后的版本中加以改進,其亮點就在于用Perl編寫,利用它的一些強大功能使得工具小巧精悍,其中的Cache avoidance模塊極具特色,它利用了HTTP協(xié)議的一些特點而造成目標網絡資源的大量消耗。
參考文獻
[1]Wang Y,Lin C,Li Q L, et al.A queueing analysis for the denial of service (DoS)attacks in computer networks[J].Computer Networks,2007, 51(12):3564-3573.
[2]陳誠,孫一品,鐘求喜等.基于通用多核平臺的入侵檢測系統(tǒng)研究[J].計算機科學,2012,39(3):71-74. DOI:10.3969/j.issn.1002-137X.2012(03):015.
[3]Jonsson E.An integrated framework for security and dependability[C]//Proceedings of the 1998 workshop on New security paradigms.ACM,1998:22-29.
【基于Perl的DoS工具設計與實現(xiàn)】相關文章:
企業(yè)知識管理的實現(xiàn)技術和工具的電商論文05-02
都市頻道制作網的設計與實現(xiàn)05-29
基于web的異地并行設計與制造系統(tǒng)研究06-02