- 常见网络攻击方式介绍
- 一、 TCP SYN 拒绝服务攻击
- 二、 ICMP 洪水
- 三、 UDP 洪水
- 四、 端口扫描
- 五、 分片 IP 报文攻击
- 六、 SYN 比特和 FIN 比特同时设置
- 七、 没有设置任何标志的 TCP 报文攻击
- 八、 设置了 FIN 标志却没有设置 ACK 标志的 TCP 报文攻击
- 九、 死亡之 PING
- 十、 地址猜测攻击
- 十一、 泪滴攻击
- 十二、 带源路由选项的 IP 报文
- 十三、 带记录路由选项的 IP 报文
- 十四、 未知协议字段的 IP 报文
- 十五、 IP 地址欺骗
- 十六、 WinNuke 攻击
- 十七、 Land 攻击
- 十八、 Script/ActiveX 攻击
- 十九、 Smurf 攻击
- 二十、 虚拟终端( VTY )耗尽攻击
- 二十一、 路由协议攻击
- 二十二、针对设备转发表的攻击
常见网络攻击方式介绍
一、 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 连接请求。
因而现在tcp三握手已经和原来有所不同,当第三次握手失败时的处理操作,服务器并不会重传ack报文,而是直接发送RTS报文段,进入CLOSED状态。这样做的目的是为了防止SYN洪泛攻击。
二、 ICMP 洪水
正常情况下,为了对网络进行诊断,一些诊断程序,比如 PING 等,会发出 ICMP 响应请求报文( ICMP ECHO ),接收计算机接收到 ICMP ECHO 后,会回应一个 ICMP ECHO Reply 报文。而这个过程是需要CPU 处理的,有的情况下还可能消耗掉大量的资源,比如处理分片的时候。这样如果攻击者向目标计算机发送大量的 ICMP ECHO 报文(产生 ICMP 洪水),则目标计算机会忙于处理这些 ECHO 报文,而无法继续处理其它的网络数据报文,这也是一种拒绝服务攻击( DOS )。
三、 UDP 洪水
原理与 ICMP 洪水类似,攻击者通过发送大量的 UDP 报文给目标计算机,导致目标计算机忙于处理这些UDP 报文而无法继续处理正常的报文。
四、 端口扫描
根据 TCP 协议规范,当一台计算机收到一个 TCP 连接建立请求报文( TCP SYN )的时候,做这样的处理:
- 如果请求的 TCP 端口是开放的,则回应一个 TCP ACK 报文,并建立 TCP 连接控制结构( TCB)
- 如果请求的 TCP 端口没有开放,则回应一个 TCP RST (TCP 头部中的 RST 标志设为 1 )报文,告诉发起计算机,该端口没有开放
相应地,如果 IP 协议栈收到一个 UDP 报文,做如下处理:
- 如果该报文的目标端口开放,则把该 UDP 报文送上层协议( UDP )处理,不回应任何报文(上层协议根据处理结果而回应的报文例外)
- 如果该报文的目标端口没有开放,则向发起者回应一个 ICMP 不可达报文,告诉发起者计算机该 UDP 报文的端口不可达
利用这个原理,攻击者计算机便可以通过发送合适的报文,判断目标计算机哪些 TCP 或 UDP 端口是开放的,过程如下:
- 发出端口号从 0 开始依次递增的 TCP SYN 或 UDP 报文(端口号是一个 16 比特的数字,这样最大为65535 ,数量很有限)
- 如果收到了针对这个 TCP 报文的 RST 报文,或针对这个 UDP 报文的 ICMP 不可达报文,则说明这个端口没有开放
- 相反,如果收到了针对这个 TCP SYN 报文的 ACK 报文,或者没有接收到任何针对该 UDP 报文的 ICMP 报文,则说明该 TCP 端口是开放的, UDP 端口可能开放(因为有的实现中可能不回应 ICMP 不可达报文,即使该 UDP 端口没有开放)
这样继续下去,便可以很容易的判断出目标计算机开放了哪些 TCP 或 UDP 端口,然后针对端口的具体数字,进行下一步攻击,这就是所谓的端口扫描攻击。
五、 分片 IP 报文攻击
为了传送一个大的 IP 报文, IP 协议栈需要根据链路接口的 MTU 对该 IP 报文进行分片,通过填充适当的IP 头中的分片指示字段,接收计算机可以很容易的把这些 IP 分片报文组装起来。
目标计算机在处理这些分片报文的时候,会把先到的分片报文缓存起来,然后一直等待后续的分片报文,这个过程会消耗掉一部分内存, 以及一些 IP 协议栈的数据结构。 如果攻击者给目标计算机只发送一片分片报文,而不发送所有的分片报文,这样攻击者计算机便会一直等待(直到一个内部计时器到时) ,如果攻击者发送了大量的分片报文,就会消耗掉目标计算机的资源,而导致不能响应正常的 IP 报文,这也是一种DOS 攻击
。
六、 SYN 比特和 FIN 比特同时设置
在 TCP 报文的报头中,有几个标志字段:
- SYN:连接建立标志, TCP SYN 报文就是把这个标志设置为 1 ,来请求建立连接;
- ACK :回应标志,在一个 TCP 连接中,除了第一个报文( TCP SYN )外,所有报文都设置该字段,作为对上一个报文的相应;
- FIN :结束标志,当一台计算机接收到一个设置了 FIN 标志的 TCP 报文后,会拆除这个 TCP 连接;
- RST:复位标志,当 IP 协议栈接收到一个目标端口不存在的 TCP 报文的时候,会回应一个 RST 标志设置的报文;
- PSH:通知协议栈尽快把 TCP 数据提交给上层程序处理。
正常情况下, SYN 标志(连接请求标志)和 FIN 标志(连接拆除标志)是不能同时出现在一个 TCP 报文中的。而且 RFC 也没有规定 IP 协议栈如何处理这样的畸形报文,因此,各个操作系统的协议栈在收到这样的报文后的处理方式也不同,攻击者就可以利用这个特征,通过发送 SYN 和 FIN 同时设置的报文,来判断操作系统的类型,然后针对该操作系统,进行进一步的攻击。
七、 没有设置任何标志的 TCP 报文攻击
正常情况下,任何 TCP 报文都会设置 SYN,FIN ,ACK ,RST ,PSH 五个标志中的至少一个标志,第一个 TCP 报文( TCP 连接请求报文)设置 SYN 标志,后续报文都设置 ACK 标志。有的协议栈基于这样的假设,没有针对不设置任何标志的 TCP 报文的处理过程,因此,这样的协议栈如果收到了这样的报文,可能会崩溃。攻击者利用了这个特点,对目标计算机进行攻击。
八、 设置了 FIN 标志却没有设置 ACK 标志的 TCP 报文攻击
正常情况下, ACK 标志在除了第一个报文( SYN 报文)外,所有的报文都设置,包括 TCP 连接拆除报文(FIN 标志设置的报文)。但有的攻击者却可能向目标计算机发送设置了 FIN 标志却没有设置 ACK 标志的TCP 报文,这样可能导致目标计算机崩溃。
九、 死亡之 PING
TCP/IP 规范要求 IP 报文的长度在一定范围内(比如, 0-64K ),但有的攻击计算机可能向目标计算机发出大于 64K 长度的 PING 报文,导致目标计算机 IP 协议栈崩溃。
十、 地址猜测攻击
跟端口扫描攻击类似,攻击者通过发送目标地址变化的大量的 ICMP ECHO 报文,来判断目标计算机是否存在。如果收到了对应的 ECMP ECHO REPLY 报文,则说明目标计算机是存在的,便可以针对该计算机进行下一步的攻击。
十一、 泪滴攻击
对于一些大的 IP 包,需要对其进行分片传送,这是为了迎合链路层的 MTU (最大传输单元)的要求。比如,一个 4500 字节的 IP 包,在 MTU 为 1500 的链路上传输的时候,就需要分成三个 IP 包。在 IP 报头中有一个偏移字段和一个分片标志( MF),如果 MF 标志设置为 1,则表面这个 IP 包是一个大 IP 包的片断,其中偏移字段指出了这个片断在整个 IP 包中的位置。
例如,对一个 4500 字节的 IP 包进行分片( MTU 为 1500 ),则三个片断中偏移字段的值依次为: 0 ,1500 ,3000 。这样接收端就可以根据这些信息成功的组装该 IP 包。如果一个攻击者打破这种正常情况,把偏移字段设置成不正确的值,即可能出现重合或断开的情况,就可能导致目标操作系统崩溃。比如,把上述偏移设置为 0,1300 ,3000 。这就是所谓的泪滴攻击。
十二、 带源路由选项的 IP 报文
为了实现一些附加功能, IP 协议规范在 IP 报头中增加了选项字段,这个字段可以有选择的携带一些数据,以指明中间设备(路由器)或最终目标计算机对这些 IP 报文进行额外的处理。
源路由选项便是其中一个,从名字中就可以看出,源路由选项的目的,是指导中间设备(路由器)如何转发该数据报文的,即明确指明了报文的传输路径。比如,让一个 IP 报文明确的经过三台路由器 R1 ,R2,R3 ,则可以在源路由选项中明确指明这三个路由器的接口地址,这样不论三台路由器上的路由表如何,这个 IP 报文就会依次经过 R1,R2,R3 。而且这些带源路由选项的 IP 报文在传输的过程中,其源地址不断改变,目标地址也不断改变,因此,通过合适的设置源路由选项,攻击者便可以伪造一些合法的 IP 地址,而蒙混进入网络。
十三、 带记录路由选项的 IP 报文
记录路由选项也是一个 IP 选项,携带了该选项的 IP 报文,每经过一台路由器,该路由器便把自己的接口地址填在选项字段里面。这样这些报文在到达目的地的时候,选项数据里面便记录了该报文经过的整个路径。通过这样的报文可以很容易的判断该报文经过的路径,从而使攻击者可以很容易的寻找其中的攻击弱点。
十四、 未知协议字段的 IP 报文
在 IP 报文头中,有一个协议字段, 这个字段指明了该 IP 报文承载了何种协议 ,比如,如果该字段值为 1,则表明该 IP 报文承载了 ICMP 报文,如果为 6,则是 TCP,等等。目前情况下,已经分配的该字段的值都是小于 100 的,因此,一个带大于 100 的协议字段的 IP 报文,可能就是不合法的,这样的报文可能对一些计算机操作系统的协议栈进行破坏。
十五、 IP 地址欺骗
一般情况下,路由器在转发报文的时候,只根据报文的目的地址查路由表,而不管报文的源地址是什么,因此,这样就 可能面临一种危险: 如果一个攻击者向一台目标计算机发出一个报文, 而把报文的源地址填写为第三方的一个 IP 地址,这样这个报文在到达目标计算机后, 目标计算机便可能向毫无知觉的第三方计算机回应。这便是所谓的 IP 地址欺骗攻击。
比较著名的 SQL Server 蠕虫病毒,就是采用了这种原理。该病毒(可以理解为一个攻击者)向一台运行SQL Server 解析服务的服务器发送一个解析服务的 UDP 报文,该报文的源地址填写为另外一台运行 SQL Server 解析程序( SQL Server 2000 以后版本)的服务器,这样由于 SQL Server 解析服务的一个漏洞,就可能使得该 UDP 报文在这两台服务器之间往复,最终导致服务器或网络瘫痪。
十六、 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 操作系统在处理这些数据的时候,就会崩溃。
十七、 Land 攻击
LAND 攻击利用了 TCP 连接建立的三次握手过程,通过向一个目标计算机发送一个 TCP SYN 报文(连接建立请求报文)而完成对目标计算机的攻击。与正常的 TCP SYN 报文不同的是,LAND 攻击报文的源 IP 地址和目的 IP 地址是相同的
,都是目标计算机的 IP 地址。这样目标计算机接收到这个 SYN 报文后,就会向该报文的源地址发送一个 ACK 报文,并建立一个 TCP 连接控制结构( TCB ),而该报文的源地址就是自己,因此,这个 ACK 报文就发给了自己。
这样如果攻击者发送了足够多的 SYN 报文,则目标计算机的 TCB 可能会耗尽,最终不能正常服务。这也是一种 DOS 攻击。
十八、 Script/ActiveX 攻击
Script 是一种可执行的脚本,它一般由一些脚本语言写成,比如常见的 JAVA SCRIPT ,VB SCRIPT 等。
这些脚本在执行的时候,需要一个专门的解释器来翻译,翻译成计算机指令后,在本地计算机上运行。这种脚本的好处是,可以通过少量的程序写作,而完成大量的功能。
这种 SCRIPT 的一个重要应用就是嵌入在 WEB 页面里面,执行一些静态 WEB 页面标记语言(HTML )无法完成的功能,比如本地计算,数据库查询和修改,以及系统信息的提取等。这些脚本在带来方便和强大功能的同时,也为攻击者提供了方便的攻击途径。如果攻击者写一些对系统有破坏的SCRIPT ,然后嵌入在 WEB 页面中,一旦这些页面被下载到本地,计算机便以当前用户的权限执行这些脚本,这样,当前用户所具有的任何权限, SCRIPT 都可以使用,可以想象这些恶意的 SCRIPT 的破坏程度有多强。这就是所谓的 SCRIPT 攻击。
ActiveX 是一种控件对象,它是建立在 MICROSOFT 的组件对象模型( COM )之上的,而 COM 则几乎是 Windows 操作系统的基础结构。可以简单的理解,这些控件对象是由方法和属性构成的,方法即一些操作,而属性则是一些特定的数据。这种控件对象可以被应用程序加载,然后访问其中的方法或属性,以完成一些特定的功能。可以说, COM 提供了一种二进制的兼容模型(所谓二进制兼容,指的是程序模块与调用的编译环境,甚至操作系统没有关系) 。但需要注意的是,这种对象控件不能自己执行,因为它没有自己的进程空间,而只能由其它进程加载,并调用其中的方法和属性,这时候,这些控件便在加载进程的进程空间运行,类似与操作系统的可加载模块,比如 DLL 库。
ActiveX 控件可以嵌入在 WEB 页面里面,当浏览器下载这些页面到本地后,相应地也下载了嵌入在其中的 ActiveX 控件,这样这些控件便可以在本地浏览器进程空间中运行 (ActiveX 空间没有自己的进程空间,只能由其它进程加载并调用) ,因此,当前用户的权限有多大, ActiveX 的破坏性便有多大。如果一个恶意的攻击者编写一个含有恶意代码的 ActiveX 控件,然后嵌入在 WEB 页面中,被一个浏览用户下载后执行,其破坏作用是非常大的。这便是所谓的 ActiveX 攻击。
十九、 Smurf 攻击
ICMP ECHO 请求包用来对网络进行诊断,当一台计算机接收到这样一个报文后,会向报文的源地址回应一个 ICMP ECHO REPLY。一般情况下,计算机是不检查该 ECHO 请求的源地址的,因此,如果一个恶意的攻击者把 ECHO 的源地址设置为一个广播地址,这样计算机在恢复 REPLY 的时候,就会以广播地址为目的地址,这样本地网络上所有的计算机都必须处理这些广播报文。 如果攻击者发送的 ECHO 请求报文足够多,产生的 REPLY 广播报文就可能把整个网络淹没。这就是所谓的 smurf 攻击。
除了把 ECHO 报文的源地址设置为广播地址外,攻击者还可能把源地址设置为一个子网广播地址,这样,该子网所在的计算机就可能受影响。
二十、 虚拟终端( VTY )耗尽攻击
这是一种针对网络设备的攻击,比如路由器,交换机等。这些网络设备为了便于远程管理,一般设置了一些 TELNET 用户界面,即用户可以通过 TELNET 到该设备上,对这些设备进行管理。
一般情况下,这些设备的 TELNET 用户界面个数是有限制的,比如, 5 个或 10 个等。这样,如果一个攻击者同时同一台网络设备建立了 5 个或 10 个 TELNET 连接,这些设备的远程管理界面便被占尽,这样合法用户如果再对这些设备进行远程管理,则会因为 TELNET 连接资源被占用而失败。
二十一、 路由协议攻击
网络设备之间为了交换路由信息,常常运行一些动态的路由协议,这些路由协议可以完成诸如路由表的建立,路由信息的分发等功能。常见的路由协议有 RIP ,OSPF ,IS-IS ,BGP 等。这些路由协议在方便路由信息管理和传递的同时,也存在一些缺陷,如果攻击者利用了路由协议的这些权限,对网络进行攻击,可能造成网络设备路由表紊乱(这足可以导致网络中断) ,网络设备资源大量消耗,甚至导致网络设备瘫痪。
下面列举一些常见路由协议的攻击方式及原理:
1、 针对 RIP 协议的攻击
RIP ,即路由信息协议,是通过周期性(一般情况下为 30S )的路由更新报文来维护路由表的,一台运行RIP 路由协议的路由器, 如果从一个接口上接收到了一个路由更新报文, 它就会分析其中包含的路由信息,并与自己的路由表作出比较,如果该路由器认为这些路由信息比自己所掌握的要有效,它便把这些路由信息引入自己的路由表中。
这样如果一个攻击者向一台运行 RIP 协议的路由器发送了人为构造的带破坏性的路由更新报文,就很容易的把路由器的路由表搞紊乱,从而导致网络中断。如果运行 RIP 路由协议的路由器启用了路由更新信息的 HMAC 验证,则可从很大程度上避免这种攻击。
2、 针对 OSPF 路由协议的攻击
OSPF ,即开放最短路径优先,是一种应用广泛的链路状态路由协议。该路由协议基于链路状态算法,具有收敛速度快,平稳,杜绝环路等优点,十分适合大型的计算机网络使用。 OSPF 路由协议通过建立邻接关系,来交换路由器的本地链路信息,然后形成一个整网的链路状态数据库,针对该数据库,路由器就可以很容易的计算出路由表。
可以看出,如果一个攻击者冒充一台合法路由器与网络中的一台路由器建立邻接关系,并向攻击路由器输入大量的链路状态广播( LSA ,组成链路状态数据库的数据单元) ,就会引导路由器形成错误的网络拓扑结构,从而导致整个网络的路由表紊乱,导致整个网络瘫痪。
当前版本的 WINDOWS 操作系统( WIN 2K/XP 等)都实现了 OSPF 路由协议功能,因此一个攻击者可以很容易的利用这些操作系统自带的路由功能模块进行攻击。跟 RIP 类似,如果 OSPF 启用了报文验证功能( HMAC 验证),则可以从很大程度上避免这种攻击。
3、 针对 IS-IS 路由协议的攻击
IS-IS 路由协议,即中间系统到中间系统,是 ISO 提出来对 ISO 的 CLNS 网络服务进行路由的一种协议,这种协议也是基于链路状态的,原理与 OSPF 类似。 IS-IS 路由协议经过 扩展,可以运行在 IP 网络中,对 IP 报文进行选路。这种路由协议也是通过建立邻居关系, 收集路由器本地链路状态的手段来完成链路状态数据库同步的。该协议的邻居关系建立比 OSPF 简单,而且也省略了 OSPF 特有的一些特性,使该协议简单明了,伸缩性更强。
对该协议的攻击与 OSPF 类似,通过一种模拟软件与运行该协议的路由器建立邻居关系,然后传颂给攻击路由器大量的链路状态数据单元( LSP),可以导致整个网络路由器的链路状态数据库不一致(因为整个网络中所有路由器的链路状态数据库都需要同步到相同的状态) ,从而导致路由表与实际情况不符, 致使网络中断。与 OSPF 类似,如果运行该路由协议的路由器启用了 IS-IS 协议单元( PDU )HMAC 验证功能,则可以从很大程度上避免这种攻击。
二十二、针对设备转发表的攻击
为了合理有限的转发数据,网络设备上一般都建立一些寄存器表项,比如 MAC 地址表, ARP 表,路由表,快速转发表,以及一些基于更多报文头字段的表格,比如多层交换表,流项目表等。这些表结构都存储在设备本地的内存中,或者芯片的片上内存中,数量有限。如果一个攻击者通过发送合适的数据报,促使设备建立大量的此类表格,就会使设备的存储结构消耗尽,从而不能正常的转发数据或崩溃。
下面针对几种常见的表项,介绍其攻击原理:
1、针对 MAC 地址表的攻击
MAC 地址表一般存在于以太网交换机上,以太网通过分析接收到的数据幀的目的 MAC 地址,来查本地的MAC 地址表,然后作出合适的转发决定。
这些 MAC 地址表一般是通过学习获取的,交换机在接收到一个数据幀后,有一个学习的过程,该过程是这样的:
a) 提取数据幀的源 MAC 地址和接收到该数据幀的端口号;
b) 查 MAC 地址表,看该 MAC 地址是否存在,以及对应的端口是否符合;
c) 如果该 MAC 地址在本地 MAC 地址表中不存在,则创建一个 MAC 地址表项;
d) 如果存在,但对应的出端口跟接收到该数据幀的端口不符,则更新该表;
e) 如果存在,且端口符合,则进行下一步处理。
分析这个过程可以看出,如果一个攻击者向一台交换机发送大量源 MAC 地址不同的数据幀,则该交换机就可能把自己本地的 MAC 地址表学满。一旦 MAC 地址表溢出,则交换机就不能继续学习正确的 MAC 表项,结果是可能产生大量的网络冗余数据,甚至可能使交换机崩溃。
而构造一些源 MAC 地址不同的数据幀,是非常容易的事情。
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 接收到。
3、针对流项目表的攻击
有的网络设备为了加快转发效率,建立了所谓的流缓存。所谓流,可以理解为一台计算机的一个进程到另外一台计算机的一个进程之间的数据流。如果表现在 TCP/IP 协议上,则是由(源 IP 地址,目的 IP 地址,协议号,源端口号,目的端口号)五元组共同确定的所有数据报文。
一个流缓存表一般由该五元组为索引,每当设备接收到一个 IP 报文后,会首先分析 IP 报头,把对应的五元组数据提取出来,进行一个 HASH 运算,然后根据运算结果查询流缓存,如果查找成功,则根据查找的结果进行处理,如果查找失败,则新建一个流缓存项,查路由表,根据路由表查询结果填完整这个流缓存,然后对数据报文进行转发(具体转发是在流项目创建前还是创建后并不重要) 。
可以看出,如果一个攻击者发出大量的源 IP 地址或者目的 IP 地址变化的数据报文,就可能导致设备创建大量的流项目,因为不同的源 IP 地址和不同的目标 IP 地址对应不同的流。这样可能导致流缓存溢出。