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运算,然后根据运算结果查询流缓存,如果查找成功,则根据查找的结果进行处理,如果查找失败,则新建一个流缓存项,查路由表,根据路由表查询结果填完整这个流缓存,然后对数据报文进行转发(具体转发是在流项目创建前还是创建后并不重要)。
可以看出,如果一个攻击者发出大量的源ip地址或者目的ip地址变化的数据报文,就可能导致设备创建大量的流项目,因为不同的源ip地址和不同的目标ip地址对应不同的流。这样可能导致流缓存溢出。