源地址验证SAV技术白皮书
Copyright © 2022 新华三技术有限公司 版权所有,保留一切权利。
非经本公司书面许可,任何单位和个人不得擅自摘抄、复制本文档内容的部分或全部,并不得以任何形式传播。
除新华三技术有限公司的商标外,本手册中出现的其它公司的商标、产品标识及商品名称,由各自权利人拥有。
本文中的内容为通用性技术信息,某些信息可能不适用于您所购买的产品。
互联网体系结构在设计之初,假设所有网络成员均是可信的,没有考虑网络成员不可信带来的安全威胁。随着互联网的开放式蓬勃发展,网络成员的可靠性无法得到保障。而网络设备只基于报文的目的IPv6地址对报文进行转发,不对转发报文的IPv6源地址的真实性进行任何验证,使得伪造IPv6源地址的攻击大量出现。基于真实IPv6源地址的网络计费、管理、监控和安全认证都无法正常进行,对互联网基础设施和上层应用都造成了严重的危害。
SAV(Source Address Validation,源地址验证)是一种真实IPv6源地址验证体系结构,能够实现在IPv6环境下的IPv6源地址验证、真实身份溯源,对非法攻击流量进行阻断,提升IPv6网络的安全性。
SAV技术能够在互联网中实现不同粒度的IPv6源地址验证,对互联网的安全和应用提供如下便利:
· 易于追踪攻击事件,定位攻击者。确保源地址的真实性,可以防止攻击者隐匿自己的身份和位置,使得攻击行为的溯源变得简单。
· 可以解决基于伪造源地址的攻击。如今许多大规模的网络攻击手段都基于伪造源地址技术(比如DDoS),消除了伪造源地址的报文即消除了这些攻击,网络环境将变得更加安全。
· 支持基于源地址的网络计费和管理。报文源地址的真实性,为基于源地址的网络计费、管理、监控以及安全认证等业务正常准确运行提供了保证。
SAV很好地适应了现在的互联网分层体系,支持分层部署在网络不同位置、满足不同粒度需求的源地址验证。根据在网络中部署位置的不同,SAV体系包含如下三种技术:
· SAVI(Source Address Validation Improvement,源地址有效性验证):部署在接入网,在接入层面提供主机粒度的源地址验证,保证接入主机的合法性。
· SAVA(Source Address Validation Architecture,源地址验证架构):部署在骨干网连接接入网的边界设备上,在管理域内提供IPv6前缀粒度的保护能力,以保护核心设备不被仿冒源地址的非法主机攻击。
· SMA(State Machine based Anti-spoofing,基于状态机的伪造源地址检查):部署在AS间,在AS域间提供AS粒度的源地址验证能力,以保护本AS内的主机和服务器不被仿冒源地址的非法主机攻击。
图1 SAV体系结构
SAVI功能可以用于过滤接口上收到的IPv6报文,可以防止IPv6源地址非法的DHCPv6协议报文、ND协议报文和IPv6数据报文形成攻击。配合其它安全功能,可在设备上生成IPv6地址与客户端接入端口的绑定关系表项,根据该绑定表项对报文IPv6源地址进行检查。如果报文信息与某绑定表项匹配,则认为该报文为合法报文,正常转发;否则将该报文丢弃。
与SAVI配合使用的安全功能包括DHCPv6 Snooping、ND Snooping和IP Source Guard中IPv6静态绑定表项功能。
· DHCPv6 Snooping是DHCPv6的一种安全特性,用来保证客户端从合法的服务器获取IPv6地址,并可以记录DHCPv6客户端IPv6地址与MAC地址的对应关系。
· ND Snooping功能用于二层交换网络环境,设备通过侦听ND或者数据报文来创建ND Snooping表项,该表项内容包括报文的源IPv6地址、源MAC地址、所属VLAN和报文入端口等信息。
· IP Source Guard功能用于对接口收到的报文进行过滤控制,通常配置在接入用户侧的接口上,以防止非法用户报文通过,从而限制了对网络资源的非法使用(比如非法主机仿冒合法用户IP接入网络),提高了接口的安全性。
本节以SAVI与DHCPv6 Snooping功能配合为例,介绍SAVI运行机制。如图2所示,DHCPv6 client1通过DHCPv6自动方式获取IPv6地址,Switch上开启了DHCPv6 Snooping功能和SAVI功能。
(1) DHCPv6 client1通过广播的形式发送DHCPv6请求报文,Switch将请求报文通过信任端口发送给DHCPv6 Server。DHCP Server将含有IPv6地址信息的DHCPv6 Reply报文回复给Switch。
(2) Switch上的配置的DHCPv6 Snooping功能通过监听DHCPv6 client1与DHCPv6 server之间交互的DHCPv6报文,记录DHCPv6 Snooping表项,该表项包括DHCPv6 client1的MAC地址、获取到的IPv6地址、Switch与DHCPv6 client1连接的端口及该端口所属的VLAN等信息。
(3) Switch根据记录的DHCPv6 Snooping表项信息生成DHCPv6 Snooping绑定表项。比如,Switch通过监听client1和DHCPv6 Server之间的DHCPv6报文,获取到client1的MAC地址为2-2-2、client1从DHCPv6 server分配到的IPv6地址为100::1、Switch与client1相连的接口为Inerface A、Interface A所属VLAN为VLAN 10,根据这些信息生成了一条DHCPv6 Snooping绑定表项。
(4) 假设此时client2想要仿冒client1的IPv6源地址发送攻击报文,Switch收到报文后,查找DHCPv6 Snooping的绑定表项发现没有与之匹配的表项,无法通过报文合法性检查,因此该报文将被丢弃,防止了非法报文形成的攻击。
图2 SAVI运行机制(与DHCPv6 Snooping功能配合)
此场景中,与配置SAVI功能的设备(Switch)连接的主机只能通过DHCPv6方式动态获取地址。在Switch上开启SAVI功能后,SAVI对报文源IPv6地址合法性检查过程如下:
(1) 在Switch上配置DHCPv6 Snooping功能,将Switch与DHCPv6 server相连的接口设置为信任端口,使得DHCPv6 Client能通过DHCPv6服务器获取IPv6地址。
(2) 在连接DHCPv6 Client的接口上开启DHCPv6 Snooping地址表项记录功能,在接口上监听DHCPv6报文,生成DHCPv6 Snooping表项。
(3) 在VLAN 2中开启ND Detection功能,在连接DHCPv6 Client的所有接口上开启IPv6接口绑定功能,利用动态生成的DHCPv6 Snooping表项对接口收到的DHCPv6协议报文、ND协议报文(除RA、RR报文)报文和IPv6数据报文进行源地址的合法性检查,确保接入用户的合法性。
图3 DHCPv6-Only场景典型组网图
此场景中,与配置SAVI功能的设备(Switch)连接的主机只能通过无状态自动配置方式动态获取地址。在Switch上开启SAVI功能后,SAVI对报文源IPv6地址合法性检查过程如下:
(1) 在Switch上配置ND Snooping表项获取功能,通过ND报文的源地址(包括全球单播地址和链路本地地址)生成ND Snooping表项。
(2) 将Switch上与园区网络网关相连的接口配置为ND信任端口,与Host相连的所有端口采用默认配置(即为ND非信任端口)。
(3) 在VLAN 2中开启ND Detection功能,在连接Host的所有接口上开启IPv6接口绑定功能,利用动态生成的ND Snooping表项对接口收到的ND报文和IPv6数据报文进行源地址的合法性检查,确保接入用户的合法性。
图4 SLAAC-Only场景典型组网图
此场景中,与配置SAVI功能的设备(Switch)连接的主机可以通过DHCPv6方式和无状态自动配置方式两种动态获取地址。在Switch上开启SAVI功能后,SAVI对报文源IPv6地址合法性检查过程如下:
(1) 在Switch上配置DHCPv6 Snooping功能,将Switch与DHCPv6 server相连的接口设置为信任端口,使得DHCPv6 Client能通过DHCPv6服务器获取IPv6地址。
(2) 在连接DHCPv6 Client的接口上开启DHCPv6 Snooping地址表项记录功能,在接口上监听DHCPv6报文,生成DHCPv6 Snooping表项。
(3) 在Switch上配置ND Snooping表项获取功能,通过ND报文的源地址(包括全球单播地址和链路本地地址)生成ND Snooping表项。
(4) 将Switch上与园区网络网关相连的接口配置为ND信任端口,与Host相连的所有端口采用默认配置(即为ND非信任端口)。
(5) 在VLAN 2中开启ND Detection功能,在连接DHCPv6 Client 和Host的所有接口上开启IPv6接口绑定功能,使Switch根据DHCPv6 Snooping、ND Snooping表项,对从所有接口收到DHCPv6协议报文、ND协议报文和IPv6数据报文进行源地址合法性检查,确保接入用户的合法性。
图5 DHCPv6与SLAAC混合场景典型组网图
可在上述三种场景中,同时叠加配置IP Source Guard中IPv6静态绑定表项,使得指定IPv6地址、MAC地址的DHCPv6协议报文、ND报文和IPv6数据报文能够通过源地址合法性检查。
在IPv6网络中,IPv6 uRPF(unicast Reverse Path Forwarding,单播反向路径转发)功能可以用来防范基于IPv6源地址欺骗的攻击。在多接入(同一接入网络通过多台边界设备接入骨干网)的组网中,当出现路由不对称(即报文进入设备的入接口和设备去往报文IPv6源地址的出接口不一致)时,若在边界设备A和B的Interface 1接口上均开启严格型uRPF功能,边界设备A和B会将接入网络中合法的用户报文错误地判断为IPv6源地址伪造报文,将其丢弃。SAVA可以解决此类场景下合法报文被误判为伪造报文的问题。
图6 SAVA产生背景
SAVA是一种根据设备的路由信息检查攻击报文的技术,用来防范基于IPv6源地址欺骗的攻击,主要部署在与接入网相连的骨干网内边界设备上。在设备的接入网侧接口上开启SAVA功能后,设备会为该接入网络中的所有的网络前缀生成SAVA表项。该接口收到IPv6报文后,如果存在报文IPv6源地址对应的SAVA表项,则认为该IPv6源地址合法,转发该报文;否则,表示报文IPv6源地址不应该存在于接入网络中,报文非法,被丢弃。
边界设备A和边界设备B各自与接入网相连的接口上均开启SAVA功能,同时边界设备B上配置了同步远端路由条目的Tag。以边界设备B为例,SAVA表项生成过程如图7所示,分为如下几个步骤:
(1) 边界设备A和B分别从本地学习的、到达接入网络的路由信息中获取用户前缀,这些路由信息包括与接入网络相连的直连路由、静态路由和动态路由。本例中以静态路由为例来说明。
(2) 边界设备A为本地学习的、到达接入网络的路由信息通过路由策略配置特定路由信息的Tag,并将此路由信息引入骨干网的动态路由协议中。
(3) 边界设备B通过动态路由协议学习到设备A发布的带有Tag的路由信息。如果路由信息中的Tag值与边界设备B上配置的同步远端路由条目的Tag值相同,则边界设备B从该路由信息中获取边界设备A学习到的合法用户前缀信息,用于生成SAVA表项。
(4) 边界设备B将根据本地路由和远端同步路由获取到的所有的合法用户前缀信息来生成与该接口绑定的SAVA表项。SAVA表项信息包含合法用户前缀、前缀长度和绑定的接口。
图7 SAVA表项生成过程
此场景中,接入网络中的用户直接通过边界设备A和B双归属接入骨干网。接入网络具有多个网段。边界设备上,接入网络侧的接口地址前缀只有部分与接入网络内合法用户前缀相同。
在边界设备A和B与接入网络侧相连的接口上均配置SAVA功能后,边界设备A和B将根据本地路由和远端同步路由获取到的所有的合法用户前缀信息来生成与该接口绑定的SAVA表项,解决了严格型uRPF只根据本地路由表来检查造成的误判断。通过配置SAVA功能,接入网络中所有来自合法前缀的用户发送的报文,均能在任意边界设备上通过源地址验证,访问骨干网。
图8 边界设备与接入网络直连场景典型组网图
此场景中,接入网络的用户通过一台中间设备接入到边界设备A和B。接入网络的上下行流量可能存在不对称的情况。比如,路由收敛完毕后,边界设备B到接入网络的路径为边界设备B→设备C→设备D→边界设备A→设备E→接入网络,接入网络到边界设备B的路径为接入网络→设备E→边界设备B。
在边界设备A和B与接入网络侧相连的接口上均配置SAVA功能后,接入网络中所有来自合法前缀的用户的报文,均能在任意边界设备通过源地址验证,访问骨干网。
图9 边界设备与接入网络非直连场景典型组网图
此场景中,同一接入网络通过位于不同AS的边界设备接入到骨干网。接入网络的上下行流量可能存在不对称的情况。比如,路由收敛完毕后,边界设备B到接入网络的路径边界设备B→设备C→设备D→边界设备A→设备E→接入网络,接入网络到边界设备B的路径为接入网络→设备E→边界设备B。
在边界设备A和B与接入网络侧相连的接口上均配置SAVA功能后,接入网络中所有来自合法前缀的用户发送的报文,均能在任意边界设备上通过源地址验证,访问骨干网。其中,每个AS域内设备之间通过域内路由协议(比如OSPFv3)同步路由条目,AS域间设备通过BGP协议同步路由条目。
图10 边界设备与接入网络非直连跨AS场景典型组网图
SMA是一种IPv6自治系统间端到端的源地址验证方案,通过在AS之间建立信任联盟来进行IPv6源地址的验证。在地址域的边界设备AER上部署SMA功能,在AER上检查报文的源IPv6地址和报文标签,实现防止伪造源IPv6地址的攻击。
SMA体系主要由ACS(AS Control Server,AS控制服务器)和AER(AS Edge Router,AS边界路由器)构成,如图11所示。
图11 SMA体系结构
· 子信任联盟:彼此信任的一组AD(Addrees Domain,地址域)组成的集合,通过子信任联盟号来标识,如图12中的sub-alliance 1。
· 信任联盟:SMA体系中所有AD的集合。
· AD(Addrees Domain,地址域):同一个机构下所管理的所有IP地址部署的范围,是子信任联盟管理的对象,通过地址域编号来标识,比如,上图中的AD 1101、AD 1200和AD 1201。同一个子联盟内的不同的地址域可以分成不同的地址域层级,最多可以划分为4层。比如,上图中的Level 0、Level 1和Level 2。其中,Level 0为最高地址级别,Level 2为最低地址级别。例如,首先以县市为单位划分多个一级地址域,再以机构为单位划分多个二级地址域(比如学校、企事业单位),以楼宇或部门为单位划分三级地址域。
¡ 边界地址域:当前层级的地址域中与其他层级相连的地址域。比如,图12中的AD 1201。
¡ 非边界地址域:除了边界地址域的其他地址域。比如,图12中的AD 1101和AD 1200。
当一个地址域划分了更低级别的地址域后,原地址域中所有的设备都必须从属于更低级别的地址域中。如图12所示,Level 0的地址域中划分了低一级别的地址域Level 1,那么属于Level 0的所有设备都必须从属于划分后的Level 1地址域。
· ACS(AS Control Server,AS控制服务器):每个层级的地址域都需要有相应的ACS,用于和其它地址域内的ACS交互信息,并向本地址域内的AER宣告、更新注册信息、前缀信息以及状态机信息。具体来讲,ACS具有如下功能:
¡ 与属于相同信任联盟中各子信任联盟的其他ACS建立连接,交互各地址域内的IPv6地址前缀、状态机等信息。
¡ 向本地址域AER宣告和更新联盟映射关系、地址前缀信息以及状态机生成的标签信息。
· AER(AS Edge Router,AS边界路由器):负责接收ACS通告的IPv6地址前缀、标签等信息,并在地址域之间转发报文。一个AER可以是多个不同层级地址域的边界路由器。AER上的接口可配置为如下两种类型:
¡ Ingress接口:连接到本地址域内部未开启SMA功能的路由器的接口。
¡ Egress接口:连接到其他地址域的AER的Egress接口。
· 目前,我司设备只能作为AER。
· 为了提高安全性,ACS与ACS之间、ACS与AER之间的通信均基于TCP协议,并可配置为基于SSL(Secure Sockets Layer,安全套接字层)的连接。
· ACS之间互相协商用于生成和更新标签的状态机,并将状态机部署到本地址域的AER上。报文在通过地址域边界时需要根据地址域级别替换SMA标签。
· SMA标签作为一个新类型的Option加入IPv6的Destination Option Header中,这种新定义的Option称作SMA Option。
SMA通过在AER上检查报文的源IPv6地址和报文标签实现对伪造源IPv6地址攻击的防御。报文在通过地址域边界时需要根据地址域级别替换SMA标签。报文离开地址域时,根据源IPv6地址和当前AER同属的最低级别地址域替换标签;报文进入地址域时,根据目的IPv6地址和当前AER同属的最低级别地址域替换标签。
AER接收到报文后,处理过程如图12所示。
(1) 检查接收报文的接口类型是否为Ingress。
¡ 若接口类型是Ingress,则进入步骤(2)。
¡ 若接口类型是Egress,则进入步骤(3)。
¡ 若属于当前地址域,则继续按照IPv6路由表转发该报文。
¡ 若不属于当前地址域,则丢弃报文。
(3) 检查报文目的IPv6地址是否属于本子联盟:
¡ 若不属于本子联盟,则继续按照IPv6路由表转发该报文。
¡ 若属于本子联盟,则进入步骤(4)。
(4) 检查报文的目的IPv6地址是否属于本地址域以及本域内更低级别地址域:
¡ 若不属于,则继续按照IPv6路由表转发该报文。
¡ 若属于,则进入步骤(5)。
¡ 校验成功,进入步骤(6)。
¡ 校验失败,丢弃该报文。
¡ 若不需要,删除报文标签后,继续按照IPv6路由表转发该报文。
¡ 若需要,则将报文标签替换为低级别地址域标签,继续按照IPv6路由表转发该报文。
报文中携带的Common level(AER与IPv6前缀所属的公共地址域最高级别)与收到报文接口的地址域进行比较,若Commen level比接口的地址域级别高,报文就不需要向本地址域内更低级别的地址域转发,否则就需要向本地址域内更低级别的地址域转发。
低级别地址域内的AER收到报文后,继续按照如上步骤进行处理。
图12 AER接收报文时的处理过程
当AER从Egress口接收到报文并发往其他地址域时,处理过程如图13所示。
(1) 判断报文源地址前缀是否属于当前地址域。
¡ 若属于,对报文添加标签后,继续按照IPv6路由表转发该报文。
¡ 若不属于,则进入步骤(2)。
¡ 若是,则需要校验标签,进入步骤(3)。
¡ 若不是,则继续按照IPv6路由表转发该报文。
¡ 校验成功,替换为高级别地址域标签后,继续按照IPv6路由表转发该报文。
¡ 校验失败,丢弃该报文。
图13 AER发送报文时的处理过程
如图14所示,AER b是二级地址域AD 1200的边界路由器,AER c是二级地址域AD 1201的边界路由器;AER d是一级地址域AD 1100和二级地址域AD 1201的边界路由器,AER e是一级地址域AD 1101的边界路由器。AD 1201是AD 1100的边界地址域,AD 1100、AD 1101和AD 1200是非边界地址域。AD 1100、AD 1101和AD 1200和AD 1201同属于子联盟1。
ACS和AER之间使用SSL或者TCP建立连接,在AER上可以收到由ACS发送的IPv6地址前缀及标签信息。AER将根据该地址前缀及标签信息检查报文,防止伪造源IPv6地址的攻击。
图14 SMA典型组网图
· RFC 6602:FCFS SAVI: First-Come, First-Served Source Address Validation Improvement for Locally Assigned IPv6 Addresses
· RFC 7039:Source Address Validation Improvement (SAVI) Framework
· RFC 7513:Source Address Validation Improvement (SAVI) Solution for DHCP
· RFC 8074:Source Address Validation Improvement (SAVI) for Mixed Address Assignment Methods Scenario
· draft-li-savnet-intra-domain-problem-statement-00:Source Address Validation in Intra-domain Networks (Intra-domain SAVNET) Gap Analysis, Problem Statement and Requirements
· draft-wu-savnet-inter-domain-problem-statement-00:Source Address Validation in Inter-domain Networks (Inter-domain SAVNET) Gap Analysis, Problem Statement and Requirements