笔记:非法tcp报文以及防火墙过滤

来源:互联网 发布:复杂网络建模仿真工具 编辑:程序博客网 时间:2024/06/05 11:09
 

一、非法TCP报文攻击

在TCP报文的报头中,有几个标志字段:

1.  SYN:连接建立标志,TCP SYN报文就是把这个标志设置为1,来请求建立连接。

2.  ACK:回应标志,在一个TCP连接中,除了第一个报文(TCP SYN)外,所有报文都设置该字段作为对上一个报文的响应。

3.  FIN: 结束标志,当一台主机接收到一个设置了FIN标志的TCP报文后,会拆除这个TCP连接。

4.  RST:复位标志,当IP协议栈接收到一个目标端口不存在的TCP报文的时候,会回应一个RST标志设置的报文。

5.  PSH:通知协议栈尽快把TCP数据提交给上层程序处理。

非法TCP报文攻击是通过非法设置标志字段致使主机处理的资源消耗甚至系统崩溃,例如以下几种经常设置的非法TCP报文:

1.        SYN 比特和FIN比特同时设置的TCP报文

正常情况下,SYN标志(连接请求标志)和FIN标志(连接拆除标志)不能同时出现在一个TCP报文中,而且RFC也没有规定IP协议栈如何处理这样的畸形报文。因此各个操作系统的协议栈在收到这样的报文后的处理方式也不相同,攻击者就可以利用这个特征,通过发送SYN和FIN同时设置的报文,来判断操作系统的类型,然后针对该操作系统,进行进一步的攻击。

2.        没有设置任何标志的TCP报文

正常情况下,任何TCP报文都会设置SYN,FIN,ACK,RST,PSH五个标志中的至少一个标志,第一个TCP报文(TCP连接请求报文)设置SYN标志,后续报文都设置ACK标志。有的协议栈基于这样的假设,没有针对不设置任何标志的TCP报文的处理过程,因此这样的协议栈如果收到了这样的报文可能会崩溃。攻击者利用了这个特点,对目标主机进行攻击。

3.        设置了FIN标志却没有设置ACK标志的TCP报文

正常情况下,除了第一报文(SYN报文)外,所有的报文都设置ACK标志,包括TCP连接拆除报文(FIN 标志设置的报文)。但有的攻击者却可能向目标主机发送设置了FIN标志却没有设置ACK标志的TCP报文,这样可能导致目标主机崩溃。

4.建立TCP连接(通过3次握手实现)
假如服务器A和客户机B通信。
(1)B->;A。当B要和A通信时,B首先向A发一个SYN标记的包,告诉A请求建立连接。只有当A收到B发来的SYN包,才可以建立连接,除此之外别无它法。因此,如果你的防火墙丢弃所有的发往外网接口的SYN包,那么你将不能让外部任何主机主动建立连接。
(2)B<-A。接着,A收到后会发一个对SYN包的确认包(SYN/ACK)回去,表示对第一个SYN包的确认,并继续握手操作。
(3)B->;A。B收到SYN/ACK包后,B发一个确认包(ACK),通知A连接已建立。至此,3次握手完成,一个TCP连接完成。
需要注意的是,当3次握手完成、连接建立以后,TCP连接的每个包都会设置ACK位。这就是为何连接跟踪很重要的原因了,没有连接跟踪,防火墙将无法判断收到的ACK包是否属于一个已经建立的连接。
2.1.2 结束TCP连接(通过4次握手实现)
假如服务器A和客户机B通信。注意,由于TCP连接是双向连接,因此关闭连接需要在两个方向上做。
(1)B->;A。当B要与A结束通信时,B首先向A发一个FIN标记的包,告诉A请求结束连接。由于连接还没有关闭,FIN包总是打上ACK标记。没有ACK标记而仅有FIN标记的包不是合法的包,并且通常被认为是恶意的。
(2)B<-A。A送出ACK包给B,表示成功地中止B->;A传输通道。不过A->;B可能还有数据包需要传送,所以A->;B传输通道仍旧继续畅通,直到传输完毕才会进入下一步。
(3)B<-A。当A完成B<-A的传输后,便送出ACK/FIN包。
(4)B->;A。B送出ACK包给A进行确认。
2.1.3 发送连接复位包结束TCP连接
4次握手不是结束TCP连接的唯一方法。有时,如果主机需要尽快关闭连接(或连接超时,端口或主机不可达),RST包将被发送。注意,由于RST包不是 TCP连接中的必须部分,可以只发送RST包(即不带ACK标记)。但在正常的TCP连接中RST包可以带ACK确认标记。注意,RST包是可以不要收方进行确认的。
2.1.4 无效的TCP标记
至此,已经看到了SYN、ACK、FIN、和RST标记。另外,还有PSH和URG标记。
最常见的非法组合是SYN/FIN包。注意,由于SYN包是用来初始化连接的,它不可能和FIN以及RST标记一起出现,这也是一个恶意攻击。
当网络中出现别的一些组合(如SYN/FIN/PSH、SYN/FIN/RST、SYN/FIN/RST/PSH),很明显网络肯定受到了攻击。
另外,已知的非法包还有FIN(无ACK标记)和“NULL”包。如同早先讨论的,由于ACK/FIN包的出现是为了结束一个TCP连接,那么正常的 FIN包总是带有ACK标记的。“NULL”包就是没有任何TCP标记的包(URG、ACK、PSH、RST、SYN、FIN都为0)。
在正常的网络活动下,到目前为止TCP协议栈不可能产生带有上面提到的任何一个标记组合的TCP包。当你发现这些不正常的包时,肯定有人对你的网络不怀好意。另外利用tcp报文的其他字段的漏洞也可以进行网络攻击如果字段mss,序列号,确认号。

原创粉丝点击