TCP--- 當用戶進行一次標准的TCP連接時,會有一個3次握手過程。首先是請求服務方發送一個SYN消息,服務方收到SYN後,會向請求方回送一個SYN-ACK表示確認,當請求方收到SYN-ACK後,再次向服務方發送一個ACK消息,這樣,一次TCP連接建立成功。但是TCP-SYN flood在實現過程中只進行前2個步驟:當服務方收到請求方的SYN-ACK確認消息後,請求方由於采用源地址欺騙等手段使得服務方收不到ACK回應,於是,服務方會在一定時間處於等待接收請求方ACK消息的狀態。對於某台服務器來說,可用的TCP連接是有限的,如果惡意攻擊方快速連續地發送此類連接請求,該服務器可用的TCP連接隊列將很快被阻塞,系統可用資源急劇減少,,網絡可用帶寬迅速縮小,長此下去,網絡將無法向用戶提供正常的服務。
UDP---- 由於UDP(用戶數據包協議)在網絡中的應用比較廣泛,基於UDP攻擊種類也較多。如今在Internet上提供WWW和Mail等服務設備通常是使用Unix的服務器,它們默認一些被惡意利用的UDP服務,如echo和chargen服務,它會顯示接收到的每一個數據包,而原本作為測試功能的chargen服務會在收到每一個數據包時隨機反饋一些字符,如果惡意攻擊者將這2個UDP服務互指,則網絡可用帶寬將很快耗盡。
ICMP----由於在早期的階段,路由器對包的最大尺寸都有限制,許多操作系統對TCP/IP棧的實現在ICMP包上都是規定64KB,並且在對包的標題頭進行讀取之後,要根據該標題頭裡包含的信息來為有效載荷生成緩沖區,當產生畸形的,聲稱自己的尺寸超過ICMP上限的包也就是加載的尺寸超過64K上限時,就會出現內存分配錯誤,導致TCP/IP堆棧崩潰,致使接受方當機。如果對方的操作系統已經可以防御堆棧崩潰,也占去許多帶寬。
Smurf----一個簡單的smurf攻擊通過使用將回復地址設置成受害網絡的廣播地址的ICMP應答請求(ping)數據包來淹沒受害主機的方式進行,最終導致該網絡的所有主機都對此ICMP應答請求作出答復,導致網絡阻塞,比ping of death洪水的流量高出一或兩個數量級。更加復雜的Smurf將源地址改為第三方的受害者,最終導致第三方雪崩。
tfn2k的程序及分析:在你執行$tar zxvf tfn2k.tgz以後在src目錄下就是源文件,其中主要的兩個文件就是tfn.c和td.c你可以看一下Makefile文件SERVER_OBJ = pass.o aes.o base64.o cast.o flood.oip.o process.o tribe.o td.oCLIENT_OBJ = pass.o aes.o base64.o cast.o ip.o tribe.o tfn.o可以看出tfn和td各是由哪些.o鏈接而成的。
tfn.c:
tfn和td的網絡通訊是經過CAST-256算法(RFC 2612)加密,還可能混雜了許多虛假數據包。參看security_through_obscurity()和encode64()等函數。
盡管tfn沒有密碼保護,每一個發送給td的命令都有一個16位二進制形式的數在ICMP_ECHOREPLY包的id域。這個序列號通常是0x0000,這樣看起來更象ping初始包的響應。參看passchk()函數。
tfn_sendto()函數是根據hosts.txt向td發命令。
usage()函數是使用幫助。
td.c:
td的守護程序是完全沉默的,它不會對接收到的命令有任何回應。客戶端重復發送每一個命令20次(RETRY=20),並且認為守護程序應該至少能接收到其中一個。如果沒有接收到需要重新發送,你也可以修改RETRY(tfn.c文件中)的值。
守護進程為每一個攻擊產生子進程(td.c文件中)。
在看td.c文件時有些迷惑,它作為服務器端並沒有綁定固定的端口,後來才明白從tfn到td的通訊是通過ICMP_ECHOREPLY數據包完成,這樣在tfn和td就沒有任何基於TCP或UDP的通訊了。td試圖通過修改argv[0]內容以掩飾自己。偽造的進程名在編譯時指定,因此每次安裝時都有可能不同。這個功能使TFN2K偽裝成代理端主機的普通正常進程。只是簡單地檢查進程列表未必能找到td(及其子進程),在你運行#./td以後,在運行#ps -af可能根本就找不到td.(不要以為它沒有運行啊!)。
td.c的tribe_cmd()是根據id(0--10)執行命令,它要調用process.c中的函數。
process.c中的commerce_syn(),commerce_udp(),commerce_icmp(),commerce_mix(),commerce_smurf()等函數就是發動攻擊的具體程序,根據id(0--11)分別對應著tcp,udp,icmp,mix,smurf等攻擊。防御措施:
見下列鏈接文章,我就不重復了。
其它DDoS工具
1. Trinoo: 它是基於UDP flood的攻擊軟件,它向被攻擊目標主機的隨機端口發出全零的4字節UDP包,在處理這些超出其處理能力垃圾數據包的過程中,被攻擊主機的網絡性能不斷下降,直到不能提供正常服務,乃至崩潰,它對IP地址不做假,此攻擊方法用得不如TFN多。2. Stacheldraht:對命令來源做假,而且可以防范一些路由器用RFC2267過濾。若檢查出有過濾現象,它將只做假IP地址最後8位,從而讓用戶無法了解到底是哪幾個網段的哪台機器被攻擊。此外,它還具有自動更新功能,可隨軟件的更新而自動更新。