tcp连接建立浅析

8-04 725 views

一、概述:在日常运维过程中,我们时常遇到某个服务访问慢,在排除了服务和网络原因时候,这时候就需要考虑是否服务受到了tcp协议的攻击了。基于tcp的常见攻击手段有:Land 攻击(通过icmp漏洞攻击)arp攻击(通过arp漏洞攻击) TCP SYN拒绝服务攻击(通过tcp漏洞攻击)

ddos攻击(分布式拒绝服务攻击)

Land 攻击:

LAND攻击利用了TCP连接建立的三次握手过程,通过向一个目标计算机发送一个TCP SYN报文(连接建立请求报文)而完成对目标计算机的攻击。与正常的TCP SYN报文不同的是,LAND攻击报文的源IP地址和目的IP地址是相同的,都是目标计算机的IP地址。这样目标计算机接收到这个SYN报文后,就会向该报文的源地址发送一个ACK报文,并建立一个TCP连接控制结构(TCB),而该报文的源地址就是自己,因此,这个ACK报文就发给了自己。这样如果攻击者发送了足够多的SYN报文,则目标计算机的TCB可能会耗尽,最终不能正常服务。这也是一种DOS攻击。

TCP SYN拒绝服务攻击:

攻击者向目标计算机发送一个TCP SYN报文;目标计算机收到这个报文后,建立TCP连接控制结构(TCB),并回应一个ACK,等待发起者的回应; 而发起者则不向目标计算机回应ACK报文,这样导致目标计算机一致处于等待状态。

可以看出,目标计算机如果接收到大量的TCP SYN报文,而没有收到发起者的第三次ACK回应,会一直等待,处于这样尴尬状态的半连接如果很多,则会把目标计算机的资源(TCB控制结构,TCB,一般情况下是有限的)耗尽,而不能响应正常的TCP连接请求。

arp攻击:

ARP表是IP地址和MAC地址的映射关系表,任何实现了IP协议栈的设备,一般情况下都通过该表维护IP地址和MAC地址的对应关系,这是为了避免ARP解析而造成的广播数据报文对网络造成冲击。ARP表的建立一般情况下是通过二个途径:

1、 主动解析,如果一台计算机想与另外一台不知道MAC地址的计算机通信,则该计算机主动发ARP请求,通过ARP协议建立(前提是这两台计算机位于同一个IP子网上);

2、 被动请求,如果一台计算机接收到了一台计算机的ARP请求,则首先在本地建立请求计算机的IP地址和MAC地址的对应表。

因此,如果一个攻击者通过变换不同的IP地址和MAC地址,向同一台设备,比如三层交换机发送大量的ARP请求,则被攻击设备可能会因为ARP缓存溢出而崩溃。

针对ARP表项,还有一个可能的攻击就是误导计算机建立正确的ARP表。根据ARP协议,如果一台计算机接收到了一个ARP请求报文,在满足下列两个条件的情况下,该计算机会用ARP请求报文中的源IP地址和源MAC地址更新自己的ARP缓存:

1、 如果发起该ARP请求的IP地址在自己本地的ARP缓存中;

2、 请求的目标IP地址不是自己的。

可以举一个例子说明这个过程,假设有三台计算机A,B,C,其中B已经正确建立了A和C计算机的ARP表项。假设A是攻击者,此时,A发出一个ARP请求报文,该请求报文这样构造:

1、 源IP地址是C的IP地址,源MAC地址是A的MAC地址;

2、 请求的目标IP地址是A的IP地址。

这样计算机B在收到这个ARP请求报文后(ARP请求是广播报文,网络上所有设备都能收到),发现B的ARP表项已经在自己的缓存中,但MAC地址与收到的请求的源MAC地址不符,于是根据ARP协议,使用ARP请求的源MAC地址(即A的MAC地址)更新自己的ARP表。

这样B的ARP混存中就存在这样的错误ARP表项:C的IP地址跟A的MAC地址对应。这样的结果是,B发给C的数据都被计算机A接收到。

这些攻击都是可以通过tcp报文分析出来的,通过抓包工具:Sniffer,wireshark。这里我们主要分析下tcp的链接建立和释放过程

二、tcp连接建立:

图解tcp三次握手建立连接

1.客户端发送一个SYN包给服务器,然后等待应答。

2.服务器端回应给客户端一个ACK=1、SYN=1的TCP数据段。

3.客户必须再次回应服务器端一个ACK确认数据段。

三、tcp连接释放:

图解tcp四次挥手释放连接

1.TCP客户端发送一个FIN,关闭客户端到服务器端的数据传送。(客户端不再发送报文给服务器端,但可接受服务器端报文)
2.服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。
3.服务器关闭客户端的连接,发送一个FIN给客户端。(服务器端关闭到客户端的数据传送)
4.客户段发回ACK报文确认,并将确认序号设置为收到序号加1。

四、TCP状态图解

状态说明:

 

 

redis 主从复制及keepalived高可用

前言及思路: 这边的思路是以3作为主,4作为从,110作为VIP漂移地址,应用通过110的6379端口访问redis数据库。 正常运行下,当主节点3宕机后,VIP飘逸到4上,...

阅读全文

jenkins对gethub分支的管理

一、背景 现在很多开发的代码都托管在github上。而github会有多个不同的代码分支,我们在使用jenkins构建时需要选择不同的github分支进行构建。 二、测试准备...

阅读全文

redis的数据库持久化机制

一、redis的 rdb 和 aof 持久化的区别 aof,rdb是两种 redis持久化的机制。用于crash后,redis的恢复。 rdb的特性如下: fork一个进程,遍历hash table,利用...

阅读全文

欢迎留言