发布信息

关于TCPSYN拒绝服务攻击的一些常见问题

作者:软荐小编      2023-09-28 22:04:45     135

1.1 TCP SYN拒绝服务攻击

一般情况下,TCP连接的建立需要经过三次握手过程,即:

1. 确定发起方向目标计算机发送TCP SYN消息;

2、目标计算机收到SYN报文后,在内存中创建TCP连接控制块(TCB),然后向发起方发回TCP ACK报文,等待发起方的响应;

3. 发起方收到TCP ACK 消息后,回复ACK 消息,TCP 连接建立。

使用此过程,一些恶意攻击者可以执行所谓的 TCP SYN 拒绝服务攻击:

1、攻击者向目标计算机发送TCP SYN报文;

2. 目标计算机收到此消息后,建立TCP连接控制结构(TCB),并回复ACK,并等待发起方的响应;

3. 发起方没有向目标计算机回复ACK消息,导致目标计算机处于等待状态。

可以看出,如果目标计算机接收到大量的TCP SYN报文但没有收到发起方的第三个ACK响应,就会一直等待。 如果有很多半连接处于这种尴尬的状态,目标计算机的资源就会被耗尽。 (TCB控制结构TCB一般是有限的)已经耗尽,无法响应正常的TCP连接请求。

1.2 ICMP洪水

一般情况下,为了对网络进行诊断,一些诊断程序,如PING,会发送ICMP响应请求报文(ICMP ECHO)。 接收到 ICMP ECHO 后,接收计算机将响应 ICMP ECHO Reply 消息。 这个过程需要CPU处理,在某些情况下可能会消耗大量资源,例如处理分片时。 这样,如果攻击者向目标计算机发送大量 ICMP ECHO 消息(产生 ICMP 洪水),则目标计算机将忙于处理这些 ECHO 消息arp攻击源查找软件,而无法继续处理其他网络数据消息。 这也是拒绝服务攻击(DOS)。

1.3 UDP洪水

原理与ICMP泛洪类似。 攻击者向目标计算机发送大量的UDP消息,导致目标计算机忙于处理这些UDP消息而无法继续处理正常的消息。

1.4 端口扫描

根据TCP协议规范,当计算机收到TCP连接建立请求报文(TCP SYN)时,会进行以下处理:

1、如果请求的TCP端口打开,则响应TCP ​​ACK消息并建立TCP连接控制结构(TCB);

2. 如果请求的 TCP 端口未打开,则响应 TCP RST(TCP 标头中的 RST 标志设置为 1)消息,告诉发起计算机该端口未打开。

相应地,如果IP协议栈收到UDP报文,则进行如下处理:

1、如果报文的目的端口开放,则将UDP报文发送给上层协议(UDP)进行处理,不响应报文(上层协议根据处理结果响应的报文除外);

2. 如果报文的目的端口未开放,则向发起方响应ICMP 不可达报文,告知发起方计算机UDP 报文的端口不可达。

利用这一原理,攻击者的计算机可以通过发送适当的消息来确定目标计算机的哪些 TCP 或 UDP 端口是打开的。 流程如下:

1、发送TCP SYN或UDP报文,端口号从0开始依次递增(端口号是16位数字,所以最大为65535,数量非常有限);

2、如果收到此TCP报文的RST报文或此UDP报文的ICMP不可达报文,则说明该端口未开放;

3.反之,如果收到了这个TCP SYN报文的ACK报文,或者没有收到这个UDP报文的ICMP报文,则说明TCP端口是开放的,而UDP端口也可能是开放的(因为有些实现即使 UDP 端口未打开,也可能不会响应 ICMP 不可达消息)。

如果这样继续下去,你就可以轻松确定目标计算机上打开了哪些 TCP 或 UDP 端口,然后针对该端口的具体编号来进行下一次攻击。 这就是所谓的端口扫描攻击。

1.5 分片IP报文攻击

为了传输较大的IP数据包,IP协议栈需要根据链路接口的MTU对IP数据包进行分片。 通过在适当的 IP 标头中填写分段指示字段,接收计算机可以轻松地对这些 IP 数据包进行分段。 组装碎片消息。

当目标计算机处理这些分片消息时,它会缓存最先到达的分片消息,然后等待后续的分片消息。 这个过程会消耗一些内存和IP协议栈的一些数据结构。 。 如果攻击者只向目标计算机发送一条分片消息,而不是发送所有分片消息,则攻击者的计算机将永远等待(直到内部计时器到期)。 如果攻击者发送大量的分片报文,分片报文会消耗目标计算机的资源,导致无法响应正常的IP报文。 这也是DOS攻击。

1.6 SYN位和FIN位同时置位

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

1. SYN:连接建立标志。 TCP SYN报文将该标志设置为1以请求建立连接;

2. ACK:响应标志。 在 TCP 连接中,除了第一个消息(TCP SYN)外,所有消息都将此字段设置为对前一个消息的响应;

3. FIN:结束标志。 当计算机接收到设置了FIN标志的TCP报文时,它将断开TCP连接;

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

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

一般情况下,SYN标志(连接请求标志)和FIN标志(连接拆除标志)不能同时出现在TCP报文中。 而且,RFC并没有规定IP协议栈如何处理这种格式错误的消息。 因此,各种操作系统的协议栈对此类消息的处理方式不同。 攻击者可以利用这一特性,同时发送设置的SYN和FIN报文来判断操作系统的类型,然后对操作系统进行进一步的攻击。

1.7 没有设置任何标志的TCP消息攻击

正常情况下,任何TCP报文都会至少设置SYN、FIN、ACK、RST和PSH这五个标志之一。 第一个 TCP 消息(TCP 连接请求消息)设置 SYN 标志,后续消息都设置 SYN 标志。 ACK 标志。 一些协议栈基于这种假设,对于不设置任何标志的TCP消息没有处理过程。 因此,如果这样的协议栈接收到这样的消息,则可能会崩溃。 攻击者利用此功能来攻击目标计算机。

1.8 设置FIN标志但未设置ACK标志的TCP消息攻击

正常情况下,除了第一个报文(SYN报文)之外的所有报文中都会设置ACK标志,包括TCP连接拆除报文(设置了FIN标志的报文)。 但是,某些攻击者可能会向目标计算机发送设置了 FIN 标志但未设置 ACK 标志的 TCP 消息,这可能会导致目标计算机崩溃。

1.9 死亡之ping

TCP/IP规范要求IP报文的长度在一定范围内(例如0-64K)。 然而,某些攻击计算机可能会向目标计算机发送超过64K的PING数据包,导致目标计算机的IP协议栈崩溃。

1.10 地址猜测攻击

与端口扫描攻击类似,攻击者通过发送大量目标地址不断变化的ICMP ECHO报文来判断目标计算机是否存在。 如果收到相应的ECMP ECHO REPLY消息,则说明目标计算机存在,可以针对该计算机进行下一步的攻击。

1.11 泪滴攻击

对于一些较大的IP数据包,需要进行分片传输,以满足链路层的MTU(最大传输单元)要求。 例如,当一个4500字节的IP报文在MTU为1500的链路上传输时,需要将其分为3个IP报文。

IP 标头中有一个偏移字段和一个分段标志(MF)。 如果 MF 标志设置为 1,则表明该 IP 数据包是一个大 IP 数据包的片段。 偏移量字段表明该片段在整个IP数据包中。 例如,如果一个4500字节的IP数据包被分片(MTU为1500),则三个分片中的offset字段的值为:0、1500、3000。这样接收端就可以成功根据此信息组装 IP 数据包。

如果攻击者破坏了这种正常情况,将offset字段设置为错误的值,即可能发生重合或断线,从而可能导致目标操作系统崩溃。 例如,将上面的偏移量设置为0、1300、3000。这称为泪滴攻击。

1.12 带有源路由选项的IP数据包

为了实现一些附加功能,IP协议规范在IP报头中添加了选项字段。 该字段可以选择性地携带一些数据,以指示中间设备(路由器)或最终目标计算机对这些IP数据包的附加处理。

源路由选项就是其中之一。 从名称中可以看出,源路由选项的作用是指示中间设备(路由器)如何转发数据包,即明确指示数据包的传输路径。 例如,如果一个IP数据包明确经过三台路由器R1、R2和R3,则可以在源路由选项中明确指定这三台路由器的接口地址。 这样,无论三台路由器上的路由表如何,IP数据包都会依次经过R1、R2、R3。 而且,这些带有源路由选项的IP数据包在传输过程中,其源地址和目的地址不断发生变化。 因此,通过适当设置源路由选项,攻击者可以伪造一些合法的IP地址,并骗入Internet。

1.13 带有记录路由选项的IP数据包

记录路由选项也是一个IP选项。 携带该选项的IP报文每次经过路由器时,路由器都会在选项字段中填写自己的接口地址。 这样,当这些数据包到达目的地时,数据包所经过的整个路径都会记录在选项数据中。

通过这样的消息,可以很容易地判断出该消息所走的路径,从而使攻击者很容易发现攻击的弱点。

1.14 具有未知协议字段的IP数据包

在IP数据包头中,有一个协议字段。 该字段指示IP数据包携带什么协议。 例如,如果该字段的值为1,则表示该IP报文携带ICMP报文。 如果是6,则为TCP等。目前该字段的分配值均小于100。因此,协议字段大于100的IP报文可能是非法的。 此类消息可能会影响某些计算机操作系统的协议栈。 进行破坏。

1.15 IP地址欺骗

一般情况下,路由器转发报文时,只根据报文的目的地址查找路由表,而不考虑报文的源地址。 因此,这可能会面临一个危险:如果攻击者向目标计算机发送数据包,发送一条消息,并将消息的源地址填写为第三方的IP地址。 这样,消息到达目标计算机后,目标计算机就可以对不知情的第三方计算机做出响应。 这就是所谓的IP地址欺骗攻击。

比较著名的SQL Server蠕虫病毒就是利用了这个原理。 病毒(可以理解为攻击者)向运行SQL Server解析服务的服务器发送解析服务的UDP消息。 消息的源地址填写为另一台运行SQL Server解析程序的服务器(SQL Server 2000以后)。 版本),因此由于SQL Server解析服务存在漏洞,UDP消息可能会在两台服务器之间来回发送,最终导致服务器或网络瘫痪。

1.16 WinNuke攻击

NetBIOS作为一种基本的网络资源访问接口,广泛应用于文件共享、打印共享、进程间通信(IPC)以及不同操作系统之间的数据交换等。 NetBIOS一般运行在LLC2链路协议上,是一种基于组播的网络访问接口。 为了在TCP/IP协议栈上实现NetBIOS,RFC规定了一系列的交互标准,以及几个常用的TCP/UDP端口:

139:NetBIOS会话服务的TCP端口;

137:NetBIOS名称服务的UDP端口;

136:NetBIOS数据报服务的UDP端口。

早期版本的WINDOWS操作系统(WIN95/98/NT)的网络服务(文件共享等)是建立在NetBIOS之上的。 因此,这些操作系统都开放了139端口(最新版本的WINDOWS 2000/XP/2003等,为了兼容性,也实现了NetBIOS over TCP/IP功能,开放了139端口)。

WinNuke攻击利用WINDOWS操作系统的漏洞,向139端口发送一些TCP带外(OOB)数据包。但是,这些攻击包与普通OOB数据包不同的是,它们的指针字段与数据。 实际位置不匹配,即存在重叠,因此WINDOWS操作系统在处理这些数据时会崩溃。

1.17 陆地攻击

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

1.18 脚本/ActiveX 攻击

脚本是可执行的脚本,一般是用一些脚本语言编写的,比如常见的JAVA script、VB script等。这些脚本在执行时需要专门的解释器将其翻译成计算机指令并在本地计算机上运行。 这种脚本的优点是可以用少量的程序编写完成大量的功能。

这种script的一个重要应用就是将其嵌入到WEB页面中,以执行一些静态WEB页面标记语言(HTML)无法完成的功能,如本地计算、数据库查询和修改、系统信息的提取等。 这些脚本在带来便利和强大功能的同时,也为攻击者提供了便捷的攻击渠道。 如果攻击者编写一些破坏系统的脚本,然后将其嵌入到WEB页面中,一旦这些页面被下载到本地计算机,这些脚本就会以计算机当前用户的权限执行。 这样,script 就可以与当前用户拥有的任何权限一起使用。 ,你可以想象这些恶意script的威力有多大。 这称为脚本攻击。

ActiveX是一个建立在微软组件对象模型(COM)之上的控制对象,它几乎是Windows操作系统的基本结构。 可以简单理解为这些控制对象是由方法和属性组成的。 方法是一些操作,属性是一些具体的数据。 这个控制对象可以被应用程序加载,然后访问它的方法或属性来完成一些特定的功能。 可以说COM提供了一种二进制兼容模型(所谓二进制兼容是指程序模块与调用编译环境甚至操作系统无关)。 但需要注意的是,这种对象控件本身不能执行,因为它没有自己的进程空间,只能被其他进程加载并调用其方法和属性。 此时这些控件就处于加载进程的进程空间中。 运行,类似于操作系统的可加载模块,例如DLL库。

ActiveX 控件可以嵌入到 WEB 页面中。 浏览器在本地下载这些页面的同时,也会相应下载其中嵌入的ActiveX控件,这样这些控件就可以运行在本地浏览器进程空间中(ActiveX空间没有自己的进程空间,只能被其他进程加载和调用) ),因此,根据当前用户的权限,ActiveX会更具破坏性。 如果恶意攻击者编写一个包含恶意代码的ActiveX控件,然后将其嵌入到WEB页面中,并被浏览用户下载并执行,那么破坏性的影响将会非常大。 这就是所谓的 ActiveX 攻击。

1.19 蓝精灵攻击

ICMP ECHO 请求数据包用于诊断网络。 当计算机收到此类消息时,它将使用 ICMP ECHO REPLY 响应消息的源地址。 正常情况下,计算机不会检查ECHO请求的源地址。 因此,如果恶意攻击者将ECHO的源地址设置为广播地址,那么计算机在恢复REPLY时就会使用该广播地址作为目的。 地址,以便本地网络上的所有计算机都必须处理这些广播消息。 如果攻击者发送足够多的ECHO请求消息,则生成的REPLY广播消息可能会淹没整个网络。 这称为蓝精灵攻击。

攻击者除了将ECHO消息的源地址设置为广播地址外,还可能将源地址设置为子网广播地址,这样子网上的计算机可能会受到影响。

1.20 虚拟终端(VTY)耗尽攻击

这是一种针对网络设备的攻击,比如路由器、交换机等,为了方便远程管理,这些网络设备一般都会有一些TELNET用户界面,即用户可以通过TELNET去到设备,并对这些设备进行管理。

通常,这些设备的TELNET用户界面数量是有限的,例如5个或10个。这样,如果攻击者同时与同一网络设备建立5个或10个TELNET连接,这些设备的远程管理界面就会被攻击。设备将被占用。 这样,如果合法用户进一步远程管理这些设备,TELNET连接资源就会丢失。 因被占领而失败。

1.21 路由协议攻击

为了在网络设备之间交换路由信息,经常运行一些动态路由协议。 这些路由协议可以完成建立路由表、分发路由信息等功能。 常见的路由协议有RIP、OSPF、IS-IS、BGP等。这些路由协议虽然方便了路由信息的管理和传输,但也存在一些缺陷。 如果攻击者利用路由协议的这些权限来攻击网络,可能会导致网络设备的路由表混乱(足以导致网络中断)。 大量的网络设备资源被消耗,甚至网络设备瘫痪。

下面列出了一些常见的路由协议攻击方法和原理:

1.21.1 针对RIP协议的攻击

RIP,即路由信息协议,通过周期性(通常为30S)的路由更新消息来维护路由表。 如果运行RIP路由协议的路由器从接口接收到路由更新消息,它将分析其中包含的路由信息​​,并将其与自己的路由表进行比较。 如果路由器认为该路由信息比它所拥有的更有效,它就会将该路由信息引入到自己的路由表中。

这样,如果攻击者向运行RIP协议的路由器发送人为构造的、具有破坏性的路由更新报文,就很容易搞乱路由器的路由表,造成网络中断。

如果运行RIP路由协议的路由器启用了路由更新信息的HMAC验证,则可以在很大程度上避免这种攻击。

1.21.2 OSPF路由协议攻击

OSPF,即开放最短路径优先,是一种广泛使用的链路状态路由协议。 该路由协议基于链路状态算法,具有收敛速度快、平滑、消除环路等优点。 它非常适合大型计算机网络。 OSPF路由协议通过建立邻接关系来交换路由器本地的链路信息,进而形成全网的链路状态数据库。 基于这个数据库,路由器可以很容易地计算出路由表。

可见,如果攻击者冒充合法路由器与网络中的路由器建立邻接关系,并向网络中输入大量链路状态广播(LSA,构成链路状态数据库的数据单元)攻击路由器,它会引导路由器形成不正确的网络拓扑,导致整个网络的路由表紊乱,导致整个网络瘫痪。

当前版本的WINDOWS操作系统(WIN 2K/XP等)都实现了OSPF路由协议功能,因此攻击者可以很容易地利用这些操作系统的路由功能模块进行攻击。

与RIP类似,如果OSPF启用消息验证功能(HMAC验证),则可以很大程度上避免这种攻击。

1.21.3 针对IS-IS路由协议的攻击

IS-IS路由协议,即中间系统到中间系统,是ISO提出的用于路由ISO的CLNS网络服务的协议。 该协议也是基于链路状态的,其原理与OSPF类似。 IS-IS 路由协议已扩展为在IP 网络中运行并为IP 数据包选择路由。 该路由协议还通过建立邻居关系并收集路由器本地链路状态来完成链路状态数据库同步。 该协议的邻居关系建立比OSPF简单,并且省略了OSPF特有的一些特性,使得协议简单明了,更具可扩展性。

对该协议的攻击与 OSPF 类似。 模拟软件与运行该协议的路由器建立邻居关系,然后将大量的链路状态数据单元(LSP)传递给攻击路由器,从而可以得到整个网络路由器的链路状态数据库。 不一致(因为全网所有路由器的链路状态数据库需要同步到同一状态),导致路由表与实际情况不一致,造成网络中断。

与OSPF类似,如果运行该路由协议的路由器启用了IS-IS协议单元(PDU)HMAC验证功能,则可以很大程度上避免这种攻击。

1.22 对设备转发表的攻击

为了合理、有限地转发数据,网络设备上一般会建立一些寄存器表项,如MAC地址表、ARP表、路由表、快速转发表,以及一些基于较多报文头字段的表,如多层表等。切换表。 、流项表等。这些表结构存储在设备的本地存储器或者芯片的片内存储器中,数量有限。 如果攻击者通过发送适当的数据报使设备创建大量此类表,则设备的存储结构将被耗尽,设备将无法正常转发数据或崩溃。

下面介绍几个常见表项的攻击原理:

1.22.1 MAC地址表攻击

MAC地址表一般存在于以太网交换机上。 以太网通过分析接收到的数据帧的目的MAC地址来检查本地MAC地址表,然后做出适当的转发决策。

这些MAC地址表一般都是通过学习得到的。 交换机收到数据帧后,有一个学习过程。 流程如下:

a) 提取数据帧的源MAC地址和接收数据帧的端口号;

b) 检查MAC地址表,查看该MAC地址是否存在以及对应的端口是否匹配;

c) 如果本地MAC地址表中不存在该MAC地址,则创建MAC地址表项;

d) 如果存在,但对应的出端口与接收数据帧的端口不匹配,则更新表;

e) 如果存在且端口匹配,则继续下一步。

分析这个过程可以看出,如果攻击者向交换机发送大量不同源MAC地址的数据帧,交换机可能会填满其本地MAC地址表。 一旦MAC地址表溢出,交换机就无法继续学习到正确的MAC表项。 从而可能会产生大量的网络冗余数据,甚至导致交换机死机。

构造一些具有不同源MAC地址的数据帧是非常容易的。

1.22.2 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接收。

1.22.3 对流项表的攻击

为了加快转发效率,一些网络设备建立了所谓的流缓存。 所谓流可以理解为一台计算机上的进程与另一台计算机上的进程之间的数据流。 如果显示在TCP/IP协议上,就是由五元组(源IP地址、目的IP地址、协议号、源端口号、目的端口号)共同确定的所有数据包。

流缓存表一般采用五元组索引。 每当设备收到IP数据包时,首先会分析IP头,提取对应的五元组数据,进行HASH运算,然后根据运算结果进行查询。 流缓存arp攻击源查找软件,如果搜索成功,就会根据搜索结果进行处理。 如果查找失败,则会创建一个新的流缓存项,并检查路由表,根据路由表查询结果填充流缓存,然后转发数据包(具体来说并不无论转发发生在流项创建之前还是之后)。

可见,如果攻击者发送大量源IP地址或目的IP地址发生变化的数据包,可能会导致设备创建大量的流项,因为不同的源IP地址和不同的目的IP地址对应到不同的流量。 。 这可能会导致流缓冲区溢出。

相关内容 查看全部