一.ARP欺骗
用户上线后,在网关上生成用户的ARP表项。如果此时其中的一个用户(攻击者)通过发送ARP欺骗报文,修改正常用户或网关的ARP表项,即可以轻易的窃取其他用户的信息或阻碍其他用户正常访问网络。
- 攻击手段
如图所示,用户上线后,在网关上生成用户的ARP表项,用户可以正常访问网络。若此时攻击者向正常用户或网关发送ARP欺骗报文来修改它们的ARP表项,将可能产生如下网络危害:
(1)如果攻击者冒充网关,向局域网内正常用户发送伪造的网关ARP报文,此时网络中正常用户访问网关的流量会被重定向到一个错误的MAC地址,导致该用户无法正常访问外网或数据信息被攻击者窃取。
(2)如果攻击者冒充正常用户,向网关发送错误的ARP报文,此时网关发给该正常用户的所有数据全部重定向到一个错误的MAC地址,导致该用户无法正常访问外网。 - 解决方案
针对通过DHCP服务器获取地址的场景,动态ARP检测技术可有效的解决ARP带来的安全隐患。动态ARP检测(Dynamic ARP Inspection)应用在设备的二层接口上,利用DHCP Snooping绑定表来防御ARP攻击。当设备收到ARP报文时,将此ARP报文中的源IP、源MAC、端口、VLAN信息和DHCP Snooping绑定表的信息进行比较,如果信息匹配,说明是合法用户,则允许此用户的ARP报文通过,否则认为是攻击,丢弃该ARP报文。
启用动态ARP检测功能后,当攻击者连接到交换机并试图发送虚假的ARP响应时,交换机会根据DHCP Snooping绑定表检测到这种攻击行为,并会丢弃这个ARP数据包,并向管理员发出警报。此时,可有效的防止中间人攻击对设备产生的影响。
二.DHCP欺骗
- DHCP Server仿冒者攻击
(1)攻击手段
由于DHCP服务器和客户端之间没有认证机制,所以如果在网络上随意添加一台DHCP服务器,它就可以为客户端分配IP地址以及其他网络参数。如果该DHCP服务器分配错误的IP地址和其他网络参数,将会对网络造成非常大的危害。
如图所示,DHCP发现报文(DHCPDISCOVER)是以广播形式发送,无论是合法的DHCP Server,还是非法的DHCP Server仿冒者都可以接收到DHCP Client发送的DHCP发现报文。
如果此时DHCP Server仿冒者回应给DHCP Client仿冒信息,如错误的网关地址、错误的DNS服务器、错误的IP等信息,如图3所示。DHCP Client将无法获取正确的IP地址和相关信息,导致正常客户无法访问网络或信息安全受到严重威胁。
(2)解决方法
为了防止DHCP Server仿冒者攻击,可使用DHCP Snooping的“信任(Trusted)/不信任(Untrusted)”工作模式。把某个物理接口设置为“信任(Trusted)”或者“不信任(Untrusted)”。凡是从“不信任(Untrusted)”接口上收到的DHCP Reply(Offer、ACK、NAK)报文直接丢弃,这样可以隔离DHCP Server仿冒者攻击。如图所示。
2.IP/MAC欺骗攻击
(1)攻击者向服务器发送带有合法用户IP和MAC的报文,令服务器误以为已经学到这个合法用户的IP和MAC,但真正的合法用户不能从服务器获得服务,如图所示。
(2)解决方法
该攻击可以通过在DHCP中继上开启DHCP snooping来解决。
① 对于配置静态IP地址的用户,由于没有通过DHCP请求而获得IP,所以没有对应的DHCP Snooping绑定表项,该用户发出的ARP、IP报文会被丢弃,从而防止该用户非法使用网络。只能通过配置静态DHCP Snooping绑定表来允许静态IP用户访问网络。
② 对于盗用其他合法用户IP地址的用户,同样由于不是自己通过DHCP请求而获得IP的,IP对应的DHCP Snooping绑定表项中的MAC以及接口与盗用者的不一致,盗用者发出的ARP、IP报文会被丢弃,从而防止该盗用者非法使用网络。
DHCP Snooping绑定表中的表项分为两种:
① 通过命令行配置的静态表项,只能通过命令行删除。
② 通过DHCP Snooping功能自动学习到的动态表项,并根据DHCP租期进行老化。
为了防止非法用户通过正常的手段从DHCP地址池获得地址进入内网,可以进行如下配置:把整段IP和FFFF-FFFF-FFFF做ARP绑定,用一个IP再删一条绑定。
三.IP源路由欺骗
- 攻击过程
IP协议是TCP/IP协议族中面向连接的、非可靠传输的网络层协议,它不保持任何连接状态信息,也不提供可靠性保障机制,这使得我们可以在IP数据报的源地址和目的地址字段填入任何满足要求的IP地址,从而实现使用虚假IP地址或进行IP地址盗用的目的。
在IPV4的报文头部的option选项中,它包括两种类型的源路由:松散的源站选路和严格的源站选路。如图所示。
(1)松散的源站选路:发送端指明数据流必须经过的IP地址清单,但是也可以经过除这些地址以外的一些地址。
(2)严格的源站选路:发送端指明IP数据包必须经过的确切地址。如果没有经过这一确切路径,数据包会被丢弃,并返回一个ICMP报文。
源站选路给攻击者带来了很大的便利。攻击者可以使用假冒地址A向受害者B发送数据包,并指定了宽松的源站选路或者严格的源站选路(如果确定能经过所填入的每个路由的话),并把自己的IP地址X.X.X.X填入地址清单中。当B在应答的时候,也应用同样的源路由,因此,数据包返回被假冒主机A的过程中必然会经过攻击者X.X.X.X。这样攻击者就能获得完整的会话信息。攻击过程如图所示。
入侵详细过程模拟:(1)首先想办法down掉User的主机(ARP欺骗,……)。(2)Attacker伪装User的IP与Server通信,发送数据包,数据包是严格的源站选择的,经过的路线为: Attacker->R1->R2->R3->R4->Server。(3)由于伪装的是User的IP,正确的回包线路:Server->R4->R3->R5->User但因为严格的源站选择的,回包线路变成了Server->R4->R3->R2->R1->Attacker。(4)这样Attacker就可以利用User的IP地址身份权限进行非法活动了。 - 防范手段
(1)IP Source Guard功能基于绑定表对IP报文进行匹配检查。对于DHCP动态分配地址的用户,使能DHCP Snooping功能后会生成动态绑定表;对于静态分配地址的用户,需要手工建立静态绑定表。当设备在转发IP报文时,将此IP报文中的源IP、源MAC、端口、VLAN信息和绑定表的信息进行比较,如果信息匹配,说明是合法用户,则允许此用户正常转发,否则认为是攻击,丢弃该IP报文。
(2)URPF(Unicast Reverse Path Forwarding)是单播逆向路径转发的简称,其主要功能是防止基于源地址欺骗的网络攻击行为。单播逆向路径转发之所以称为“逆向”,是针对正常的路由查找而言的。一般情况下,路由器接收到报文,获取报文的目的地址,针对目的地址查找转发表,如果找到了就转发报文,否则丢弃该报文。而URPF通过获取报文的源地址和入接口,在转发表中查找源地址对应的接口是否与入接口匹配,如果不匹配,则认为源地址是伪装的,直接丢弃该报文。通过这种方式,URPF能够有效地防范网络中通过修改报文源IP地址而进行恶意攻击行为。
四.DNS欺骗
- DNS的工作过程:
step1. 当我们搜索www.test.com时,会先查看本地浏览器缓存和操作系统hosts文件中有没有域名与IP地址的对应关系,有的话返回结果,没有则进入下一步。
step2. 向本地缓存DNS查询,如果在家用路由器上选择了“自动获取DNS服务器地址”,那么本地缓存DNS就是ISP网络服务提供商默认的DNS服务器,本地缓存DNS会查询缓存池中有没有域名与IP地址的对应关系,有的话返回结果(大约90%的域名解析都到这里就已经完成了,所以本地缓存DNS承担了大部分域名的解析工作),没有则进入下一步。
step3. 本地缓存DNS向根DNS发起查询请求。根DNS返回com域的权威名字服务器(顶级域DNS)的NS记录和对应IP地址。注:NS(Name Server)是域名服务器,用来指定该域名由哪个DNS服务器来进行解析。
step4. 本地缓存DNS向顶级域DNS发起www.test.com查询请求。
step5. 顶级域DNS返回test.com域的权威DNS的NS记录和IP地址。
step6. 本地缓存DNS继续向test.com的权威DNS发起www.test.com查询请求。
step7. test.com的权威DNS应答www.test.com查询请求。
step8. 本地缓存DNS将应答结果保存在本地缓存,并将结果应答给客户端。
由于整个域名解析请求的过程中DNS没有提供认证机制,查询者在收到应答时无法确认应答信息的真假,每一台DNS服务器也无法知道请求域名服务的主机或者其他的DNS服务器是否合法,所以这个过程就很容易被黑客利用,进行DNS欺骗,达到用户不能访问特定的网站或者访问的是假网站的目的。 - DNS缓存投毒
(1)DNS缓存投毒是攻击者先向缓存服务器发送一个不存在域名的请求报文,例如abc.test.com,触发缓存服务器向权威DNS发出查询请求,同时攻击者向缓存服务器发送大量的伪造回应报文,以期在真正的权威DNS回应到达之前命中缓存服务器的请求信息,将恶意权威DNS地址置入缓存服务器缓存项中,而恶意权威DNS服务器中记录了错误的网站域名和IP地址对应关系。结果导致abc.test.com的解析地址是错误的。
这个子域名解析错误其实影响不大,毕竟攻击者发送的请求域名通常是不存在的,但由于投毒修改了缓存服务器中缓存的权威DNS地址,所以在缓存周期内,不仅访问abc.test.com子域名时返回的IP地址是错误的,所有访问test.com主域名返回的IP地址都是错误的。这就是DNS缓存投毒的过程。
(2)解决方案
对于DNS缓存投毒,个人用户很难单单靠设置解决。如果得知已投毒,可以通过修改Hosts的方法,手动设置域名正确的IP地址。或者借助于专业的安全设备。