通常情况下,路由器收到数据报文后,获取到数据包中的目的IP地址,针对目的IP地址查找本地路由转发表,如果有对应转发表项则转发数据报文;否则,将报文丢弃。由此看来,路由器转发报文时,并不关心数据包的源地址。这就给源地址欺骗攻击有了可乘之机。
源地址欺骗攻击为入侵者构造出一系列带有伪造源地址的报文,频繁访问目的地址所在设备或者主机;即使响应报文不能到达攻击者,也会对被攻击对象造成一定程度的破坏。
URPF(Unicast Reverse Path Forwarding,单播逆向路径转发)的主要功能是用于防止基于源地址欺骗的网络攻击行为。路由器接口一旦使能URPF功能,当该接口收到数据报文时,首先会对数据报文的源地址进行合法性检查,对于源地址合法性检查通过的报文,才会进一步查找去往目的地址的转发表项,进入报文转发流程;否则,将丢弃报文。
URPF对报文源地址的合法性检查分为严格(strict)型和松散(loose)型两种:
l 严格型URPF:不但要求路由器转发表中,存在去往报文源地址的路由;而且还要求报文的入接口与转发表中去往源地址路由的出接口一致,只有同时满足上述两个条件的报文,才被认为是合法报文。在一些特殊情况下(如存在非对称路径),严格型检查会错误的丢弃非攻击报文。
图一 非对称路径示意图
l 松散型URPF:仅要求路由器的转发表中,存在去往报文的源地址路由即可,不再检查报文的入接口与转发表中去往源地址的路由的出接口是否一致。当用户网络中存在非对称路径等无法保证报文入接口和设备去往源地址路由出接口一致的情况下,可以配置松散型URPF检查。
图二 URPF基本检查流程图
严格型和松散型检查是URPF两个基本检查机制;部分设备在此基础上,还进一步增加了缺省路由检查以及ACL检查功能,进而将URPF检查实现的更灵活和全面。
图三 URPF增加高级特性检查流程图
特别情况下,设备在严格型URPF检查的基础上再增加链路层检查,即在确认路由转发表中存在去往源地址的路由以及出接口后,再增加检查ARP表项,确保报文的源MAC地址和查到的ARP表项中的MAC地址一样才允许报文通过。链路层检查功能对于运营商用单个三层以太网接口接入大量PC机用户时较适合部署。
诸如TCP Syn Flood、UDP flood 和ICMP flood等攻击,都可能通过借助源地址欺骗的方式攻击目标设备或者主机,造成被攻击者系统性能严重的降低,甚至导致系统崩溃。URPF就是网络设备为了防范此类攻击而使用的一种常用技术。
不同厂家的不同产品对URFP功能的支持情况有所不同,具体应用中,请查看相关产品手册,以确认设备的实现情况。