王嘉楠,吴军平
(1.武汉邮电科学研究院烽火学院,湖北武汉 430074;2.烽火通信科技股份有限公司,湖北武汉 430073)
海量设备的接入使得互联网的规模快速扩大,一方面提升了用户的体验,另一方面5G 安全也面临不小的挑战,其安全防护需要各界相互配合、共同努力,体系化、立体化地做好5G 安全防护[1]。网络规模扩大的同时还增加了大量需要上送CPU 处理的报文和针对CPU的恶意攻击报文,CPU的处理压力与日俱增,为防范各种攻击,保障网络和业务安全,迫切需要对交换机进行加固[2-3]。NP芯片可用微码编程,其高速响应的特点正适合应用于通信领域分组业务中包处理、协议分析的任务[4]。
在位于网络边缘的交换机和路由器端口上绑定ACL,将其以太帧头部信息、多协议标签交换(Multi-Protocol Label Switching,MPLS)的标记、端口号等字段作为匹配信息,根据匹配结果决定数据包是转发或丢弃,过滤接入的用户和数据报文,以此完成对数据报文安全性的校验和网络某一连接流量的限制[5-7]。
高端路由器上执行数据包转发的是包转发引擎PFE(Packet Forwarding Engine),通常是位于上行或下行接口板的NP芯片。NP芯片不仅要实现报文接收、解析、转发、交换、封装,还要进行其他处理,其中包过滤就是一项十分关键的处理。从应用到包过滤分为3 个部分:流分类、流动作和流策略[8]。先设定ACL 匹配规则,再针对某类流量定义流动作,将流分类和流动作关联后应用到相应接口上。
根据不同的匹配层次和不同的匹配信息可以定义多种规则,如表1 所示[9-10]。
表1 ACL分类信息
但是由于NP芯片自身暂不支持INTF_ACL的绑定,所以INTF_ACL 在后续的应用中默认为全匹配,全部执行“通过”动作,从而使ETH_ACL的规则编号扩展为1~1 999,使用报文接口和以太帧头部信息同时进行匹配。
ACL的实现需要网络处理平台中各层联通,大致将网络平台分为平台侧和驱动侧,主要完成对数据的配置及下发、数据间逻辑关系的映射、数据结构的转换并写入底层的NP芯片。通过在NP芯片上预先编码,微码侧能够对流入的流量按照写入的配置进行解析和转发,实现相应功能。
网管网元管理接口将配置下发到网络操作平台后,平台中的网元管理接口子系统(Network Entity Management Subsystem)将配置传递到统一业务管理子系统(Unified Service Management Subsystem),根据所需功能定义在USM 中构建平台中FDPO的字段和数据结构,同时设计依赖链关系,主控盘通过映射模型构建ID 管理组件中的DDPO,并且选择相应的映射关系,然后将配置下发到业务盘,业务盘中UDM组件负责业务的配置处理,接收到主控数据后,从FDPO 中构建出DDPO,通过MAC 地址状态查询组件、性能采集和事件告警组件后,下发到SDA。
FDPO 中的依赖链关系由ACL_RULE 建立,ACL_RULE 包含了acl_id(ACL 编号)、match_type(匹配类型)、etype(以太帧中以太类型字段)、dst_mac/src_mac(目的MAC 地址和源MAC 地址)、ovid/ivid(内外层和内层VLAN 号)、dscp(IP 头部中DSCP 字段)等属性。FDPO之间的迭代关系有两种:依赖关系和父子关系,两种关系的建立都需要使用外键作为连接桥梁,其中,acl_id 就是用来完成迭代关系的外键。
通过外键acl_id 索引到ACL_ACL 结构,ACL_ACL 包含了acl_id、acl_type 和phook 等属性。通过外键logic_port_index 索引到IFMGR_IF_NET,再由IFMGR_IF_NET 中的外键索引到IFMGR_IF_LAG。其中,所有字段的数据均由网络操作平台下发。
SDA 层主要完成从FDPO 中将依赖链关系映射到DDPO 中,同时转换部分数据。DDOP 元素与FDPO 元素为一对一或一对多映射,使用工具生成简单映射代码,复杂映射需要通过手写映射函数实现映射关系。DDPO 涉及3 种操作:创建、更新和删除。DDPO 所需的FDPO 数据完整时才会触发DDPO的创建,只有在DDPO的数据发生变化之后才会触发更新操作,删除操作可以通过FDPO 更新改变key值和删除Start FDPO 来触发。PSN 层完成DDPO 到微码数据类型的转换和配置的下发,将获取的数据下发到NP芯片,处理数据流。
ACL 分为KEY 和DATA 两个部分,KEY 即为匹配的规则,DATA 为进行的动作。驱动侧有两种KEY的模板,支持INTF_ACL 和IP_ACL,DATA的动作包括通过、拒绝和镜像到CPU 等。定义匹配规则时,可以对KEY 值部分进行任意比特的掩码操作,取相应有效位。查找时按照访问列表中的语句顺序查找,首先判断当前业务是否配置了ACL,存在则从acl_id 最小的开始,一旦匹配到其中某一匹配条件就结束匹配,不检查后续的语句。
1)定义table acl_160_te0 和table acl_320_te0 两种表项,使用不同大小的三态内容寻址存储器表(Ternary Content Addressable Memory,TCAM)分别处理ETH_ACL 和IP_ACL,微码侧定义的TCAM 表项如图1 所示。TCAM 使用的逐条匹配法足以保证查找的准确性和有效性[11]。
图1 微码侧定义TCAM表项的代码
其中,key_tpye 对应驱动侧KEY的部分,value_type 对应驱动侧DATA的部分。struct ethernet_header_key 中定义了以太帧头部信息,struct acl_320_request_t 中定义了镜像过滤、IPv4、IPv6 和携带MPLS 标签的报文的数据结构。
2)在入/出接口处理流程中判断acl_id范围,进入对应流程中,从报文的首部读取相应的信息匹配规则,得到返回数据acl_response,判断其中acl_action是否为deny,是则做丢包处理,反之则读取其他信息或进入业务功能处理流程中(如RFC2544、Remark 或NetFlow等)执行相应acl_action,从而实现包过滤。
测试方案:以Egress 侧带有MPLS 标签的ACL 流程为例完成测试。在设备中使能ACL 功能,然后进入镜像流程。使用Spirent Testcenter 仪表配置带有MPLS 标签的二层业务流量,从pipo0的5 槽5 口(逻辑口:0x1c)进入,再从3 槽0 口(逻辑口:0x1d)发出,同时将流镜像到3 槽8 口(逻辑口:0x1f),若在6 槽0口的出口计数,有流量通过就可以证明带有标签的NNI 侧160_ACL 匹配成功。
测试步骤:
1)登陆到主控:进入到NP芯片的pipo0 上,打印各个端口流量的收发情况,确定0x1c、0x1d 和0x1f 端口的收发情况,查询逻辑出口0x1d的配置情况,获取acl_id 信息;
2)根据acl_id 查询硬表信息:key+mask、mirror_to_port镜像流走入0x1f口,获取contid后查找出端口计数,验证到ACL已经匹配成功,如图2、图3所示。
图2 查询该acl_id硬表的配置
图3 获取计数结果
开启防攻击功能后,需要在报文上送CPU 之前进行检查,提前过滤掉有缺陷的、有欺骗性质的、洪泛攻击的报文,从而保证路由器在受到来自网络的攻击时仍然保持与其他设备正常通信的能力,提供持续而稳定的服务。由于大量的网络攻击主要是信令攻击,所以通过协议联动(Relative)、黑桶(Black)、白名单、用户自定义4 种策略将ACL 功能绑定在设备接口上,如图4 所示。所谓协议联动,就是各协议模块根据互相建立的会话信息来自动下发协议类型、端口号、IP 地址等数据配置ACL 规则,将可以正常上送的报文加入到协议联动桶中。用户可以根据实际需求选择防攻击的策略,配置信令报文匹配规则、优先级、上送速率,达到拦截攻击报文、降低CPU占用率、保证正常业务处理能力等目的。
图4 开启防攻击信令后上送流程
3.2.1 防攻击策略
1)识别到畸形报文(如目的地址为网络的A、B、C 类地址广播地址的Smurf 攻击报文、长度大于64 K的Ping of Death 攻击报文、源IP 地址和目的IP 地址相等的Land 攻击报文等)后直接丢弃[12-14]。
2)在逻辑接口配置相关信令,提取使能开关,当该接口的开关使能时才对该信令执行提取操作,否则默认丢弃,如图5 所示。
图5 相关信令提取使能开关
3)配置全局开关,全局开关打开后才提取信令,否则默认丢弃,如图6 所示。
图6 全局开关的配置
4)防攻击协议联动桶命中后,已经被识别为正常信令的报文以高优先级上送,如图7 所示。
图7 协议联动桶的配置
5)防攻击黑桶配置的限速处理如图8 所示。
图8 黑桶的配置
3.2.2 防攻击测试
测试方案:进入主控配置视图创建防攻击策略后使能畸形报文开关,将防攻击策略与端口槽位绑定,提交配置。通过仪表向设备发送正常IPv4 报文以及特征是源IP 地址和目的IP 地址均为192.85.1.1的TCP SYN 报文的land 畸形攻击报文、源IP 地址为255.255.255.255的ICMP Request 畸形攻击报文,然后使用tcpdump 抓包分析报文。再进入配置中去除使能开关,提交配置后继续发送混合的报文流量,继续使用Tcpdump 抓包对比两次抓到的报文。
通过对比可以验证,在使能畸形报文防攻击开关后,打开正常的IPv4 流、Smurf 攻击报文流和Land攻击报文流时,本机Tcpdump 抓不到攻击报文,能抓到正常的数据报文流;在关闭使能畸形报文防攻击开关后,再打开Smurf 攻击报文流、Land 攻击报文流和正常的IPv4 流,本机Tcpdump 抓到了攻击报文,如图9、图10 所示。实验结果表明,基于NP芯片配置ACL 能够防止恶意攻击报文对CPU的冲击,有效降低CPU的占用率,保证正常通信服务质量。
图9 打开使能开关后获取的报文
图10 关闭使能开关后获取的报文
5G 时代带来了机遇的同时也带来了挑战,各种数据流量的接入对网络提出了更高的要求,也向网络安全发起了挑战[15-16],可以看出,对接入的数据流量进行流策略包过滤是非常必要的。通过测试可以验证,基于NP芯片实现ACL 包过滤,同时将ACL 应用在防止报文攻击上,在信令报文上送CPU 之前先基于IP 地址、源端口和目的端口、以太类型等数据对报文筛选过滤实现限速的目的,有效拦截了攻击报文,防止上送过程中CPU 频繁处理非正常报文后卡死,也可以更加合理地分配网络带宽资源,提高通信质量和服务保障能力。可见,在数据业务高速发展的时代,ACL 是十分重要的功能。