陈 镭,杨章静,黄 璞
(1. 南京审计大学 信息工程学院,江苏 南京 211815;2. 南京大学 计算机软件新技术国家重点实验室,江苏 南京 210232)
软件定义网络(software defined networking,SDN)作为一种新型的网络架构[1-2],把网络控制平面与数据平面进行分离。其中控制平面拥有网络全局视图,集中管控网络资源,数据平面只转发数据,大大简化了网络的配置和管理。SDN 这一颠覆性的理念被认为将对未来网络产生革命性的影响,在很大程度上代表了未来网络的发展方向,因此将SDN 引入计算机网络教学是必然趋势。计算机网络课程教学,十分注重实践教学,通过各种不同的组网实验,让学生理解和掌握计算机网络的基本原理。
目前大多高校SDN 教学实验中普遍存在实体硬件设备不足及实验场地的限制,很难大规模开展SDN实体设备教学实验。学生在SDN 的学习上操作受限,难以深入理解SDN 实验教学的原理和内涵。虚拟仿真实验具有成本低、效率高、功能全、灵活等优点,是高等教育信息化建设和实验教学的重要手段,在SDN教学实验中可以发挥重要的作用[3-6]。
本文详细介绍了SDN 的背景知识;对比展示了SDN环境下几种不同的DoS攻击场景[7],包括控制平面、数据平面及网络主机遭受洪范式或隐藏式拒绝服务(denial of service,DoS)攻击的不同特点;采用轻量级网络仿真平台Mininet 搭建SDN 网络,使用Floodlight控制器软件和sFlow 流量监控软件,设计并实现了SDN环境下的洪范式和隐藏式DoS 攻击和防御仿真实验[8]。
开放式网络基金会(ONF)提出的OpenFlow 协议,初步实现了SDN 的核心思想,如图1 所示,SDN架构从底向上分别是基础设施层、控制层和应用层。
基础设施层由支持OpenFlow 协议的交换机组成,负责数据包的匹配和转发。控制层获取底层交换机的信息,实时维护网络拓扑和状态,并为应用层提供服务接口。应用层包含各种业务和应用,通过控制层提供的接口调用、编排网络资源。底层网络设备只负责数据转发,控制层集中掌控网络资源,通过应用程序就可以完成SDN 全局网络的管理。这种架构大大降低了网络的复杂度和搭建成本,加速了网络部署周期,提高了网络管理的灵活性。
图1 SDN 三层架构图
流表是交换机数据转发功能的核心。OpenFlow1.0协议中规定每个流表项由3 部分组成:包头域、计数器和动作。
包头域用于数据包的包头内容进行匹配,共有12个匹配项,如表1 所示。包含了传统网络2 层到4 层的寻址信息(Mac、IP、端口)。OpenFlow 交换机可以看成是一种广义的转发设备,同时具备了传统网络交换机、路由器、防火墙的功能。
计数器用于统计匹配到的数据包信息,可以对交换机中的每个数据流、端口、队列、流表分别统计。
动作是指对匹配到的数据包的后续处理方式。OpenFlow 交换机如果没有定义动作,默认情况下数据包被丢弃。常见的动作有:转发、丢弃、排队等。
表1 流表包头域
当主机h1 与主机h2 进行通信时,如图2 所示,大致包含以下步骤[9]:
步骤1 主机h1 向交换机s1 发送到主机h2 的数据包;交换机s1 查询流表,若s1 的流表中有匹配项,则转到步骤4。
步骤2 s1 流表中无匹配项,则s1 通过Packet-In消息将数据包转发给控制器。
步骤3 控制器收到s1 的请求信息后,生成相应的应答策略,并通过Packet-Out 消息下发至s1。
步骤4 s1 执行流表中的应答策略,将数据包转发至交换机s2。当交换机s2 收到数据包以后,若s2 的流表中有匹配项,则转到步骤7;若s2 的流表中无匹配项,则转到步骤5。
步骤5 与步骤2 相似,s2 流表中无匹配项,则s2 通过Packet-In 消息将数据包转发给控制器。
步骤6 与步骤3 相似,控制器收到s2 的请求信息后,生成相应的应答策略,并通过Packet-Out 消息下发至s2。
步骤7 s2 执行流表中的应答策略,将数据包转发至主机h2。
图2 基于OpenFlow 的SDN 工作流程
DoS 攻击通过在短时间内向目标网络或主机发送大量的数据包,占满带宽和服务资源。当正常用户进行网络通信时,就会出现请求异常或服务出错。DoS攻击简单有效,对正常的网络通信造成严重影响,是网络安全领域关注的重点。
(1)控制器洪范式攻击[10]。当一个数据包没有匹配到任何流表项时,若交换机缓存未满,交换机将缓存报文内容,并将报文头封装在Packet-In 消息中转发给控制器;一旦交换机缓存满了,交换机会直接将整个报文都封装在Packet-In 消息中转发给控制器,这种方式会大大加重控制器的负担。此外,控制器有一个路径计算模块,当大量伪造的数据包到来时,控制器无法计算出完整的路径信息,会占用控制器大量计算资源,导致控制器无法提供正常服务。
(2)控制器隐藏式攻击[11]。控制器的拓扑发现机制会受到一种隐藏式DoS 攻击影响。控制器周期性地向所有交换机下发封装有LLDP(链路层发现协议)帧的Packet-Out 消息。攻击者在探测LLDP 帧周期的基础上,对交换机之间链路发起DoS 攻击,造成LLDP帧连续丢失,使得控制器误以为该链路断开,无法准确获取网络拓扑信息。
(1)交换机洪范式攻击[12]。OpenFlow 交换机流表的存储能力通常有限,攻击者针对交换机发起洪范式DoS 攻击,短时间内产生大量的虚假流请求,出现大量的无用流表项,这些规则将填满交换机流表,从而导致合法流量被丢弃。
(2)交换机隐藏式攻击[13]。SDN 将数据层的控制能力完全抽离,数据层完全失去了主动监管网络流量的可能性,因此,数据层隐藏式DoS 攻击变得可行。数据层隐藏式DoS 攻击通过在流表中产生长期存在的流表规则,从而达到占用流表的攻击目的。
当攻击者的目标是网络主机时,会操纵僵尸网络向目标主机发送大量并发攻击流,从控制器和交换机的角度看,这些流量是正常流量,因为都是合法主机发送的合法数据流,但这些流量最终在目标主机处聚合,形成总量很大的异常流量[14],导致目标主机工作瘫痪。
当网络流量压力比较大,而又无法确认当前流量是否为攻击流时,可以采用通过流表项将大量的流量转发到网络中的监控设备(例如防火墙),以此转移交换机的压力,也可以设置IP 地址的黑白名单,实现对数据流的辅助处理(见表2)。
表2 SDN 环境下DoS 攻击特点及应对方法
硬件环境:Intel(R) Core(TM) i5-8500U CPU @3.00 GHz 处理器,8 GB DDR4 内存,240 GB SSD 硬盘。
软件环境:Ubuntu14.04 64 位操作系统,JDK1.7,Mininet 2.2.1,Open vSwith2.0.2,OpenFlow1.0 协议,Floodlight 0.9 版本控制器,sFlow-rt 2.0。
Mininet 是一套扩展性很强的网络仿真实验平台,除了可以用于SDN 网络实验,还可以用于传统网络实验。Mininet 能够在一台单独的计算机上虚拟出网络主机、网络链路和交换设备等,组成一个完整的虚拟网络。Floodlight 控制器是一个模块化、高可用、支持OpenFlow 协议的控制器。sFlow 是一款实时监测网络流量的监控软件。sFlow 有Agent 和Collector 两个模块,Agent 内嵌于网络转发设备(如交换机、路由器),获取设备接口的统计信息,将信息封装成报文发送给Collector,Collector 对报文分析、汇总、生成流量报告。
(1)启动Floodligh 控制器。
进入 floodlight 目录,输入命令 java -jar target/floodlight.jar
(2)创建网络拓扑,连接控制器。
mn --controller=remote,ip=192.168.1.1,port=6633 --topo single,3 --switch ovsk,protocols=OpenFlow10
(3)浏览器访问Floodlight。
打开Floodlight 控制器的管理地址:http://localhost:8080/ui/index.html。从图形界面可看到,Mininet 成功连接到Floodlight,并可以看到Mininet 生成的网络拓扑。
(4)配置sFlow Agent。
先要在虚拟交换机端口处配置 Agent,这样Collector 才能对收集到的流量信息进行分析和呈现。切换到交换机s1 窗口,开启OvS 的sFlow 功能,配置Agent 的命令如下:
ovs-vsctl -- --id=@sflow create sflow agent=eth0 target="192.168.1.1:6343" header=128 sampling=10 polling=1 -- set bridge s1 sflow=@sflow
参数说明:agent,监控 eth0 网卡产生的流量;target,sFlow-rt 的ip,默认端口6343;bridge,需要开启sFlow 的网桥;sampling,采样率,表示每隔多少个Packet 取样一次;polling,轮询时间,每隔多少秒轮询一次。
(5)配置sFlow-rt Collector。
保持Mininet 运行的终端,再打开一个新的终端窗口,进入sFlow-rt 安装目录,输入./start.sh 命令,启动 sFlow-rt。sFlow Collector 的默认监听端口为6343,通过浏览器输入http://localhost:8008 打开监控页面。Agent 配置成功后,可以通过对其WebUI 中的Agents选项卡中192.168.1.1条目的网络流量进行查看。
最终本文实验网络拓扑如图3 所示。网络中一共有1 台虚拟交换机s1,s1 上连接3 台客户机,分别为h1、h2、h3,为了方便测试网络连通性,在Mininet平台中对网络执行指令pingall,可测试出主机间能够相互通信。同时,s1 的其他端口分别连接Floodlight控制器和sFlow Collector 端。
图3 SDN 环境下DoS 攻防实验网络拓扑图
(1)模拟发起洪范式DoS 攻击。
在Mininet 终端中执行,h1 ping -f h2,-f 参数的意思是Ping Flood,模拟Flood Attack。可以看到,监测流量迅速飙升,如图4 中第1 阶段所示。在系统终端执行top 命令,查看到CPU 占用率也会突然增高。
图4 洪范式DoS 攻防实验效果图
(2)控制器向SDN 交换机增加流表规则。
通过Floodlight 控制器提供的RESTful 接口向交换机s1 下发流表,丢弃攻击流量。在Floodlight 控制器中增加流表的命令如下:
curl -d "{"switch": "00:00:00:00:00:00:00:01","name":"flow-drop","cookie":"0","priority":"32768",in_port":"1","active":"true","eth_type":"0x0800","ip_proto":"0x01","idle_timeout":"0","actions":"output=no-forwar d"}" http://192.168.1.1:8080/wm/staticflowpusher/json
参数说明:name,给流表命名;cookie,流表规则标识;priority,优先级;in_port,入端口;active,是否激活;eth_type,以太网类型;ip_proto,协议类型;idle_timeout,存活时间;actions,动作。
上述流表下发到s1 以后,监测流量迅速下降,如图4 中第2 阶段所示。所有经过交换机1 号端口的ICMP 流量都不会被转发出去,其他类型的流量(如HTTP)则可以正常转发,即h1 向h2 发送的Flood Attack 数据包迅速地被完全Drop 掉了,成功实现了对洪范式DoS 攻击的防御。
(3)删除SDN 交换机中流表规则。
为证明确实是因为添加了"flow-drop"流表项,阻断了Dos 攻击流量,最后通过Floodlight 控制器提供的RESTful 接口向交换机s1 下发删除流表命令:
curl -X DELETE -d "{"name":"flow-drop"}"http://192.168.1.1:8080/wm/staticflowpusher/json
上述流表下发到s1 以后,监测到流量又迅速飙升,如图4 中第3 阶段所示,从而可以证明SDN 交换机中的流表项拥有管控流量的能力。
默认的流表规则采用空闲超时机制,即在规定时间内,如果没有数据包匹配,则该流表规则超时被删除;如果有数据包匹配,则重新更新存活时间,该机制使得一种数据层隐藏式DoS 攻击变得可行,从而达到长期占用流表的目的。
一条流表规则的基本字段主要有:cookie,流表规则标识;priority,优先级,范围为0-65535,值越大,优先级越高;match,匹配规则;action,动作;packets,流表已匹配包数;bytes,流表已匹配字节数;age,流表已存在时间;timeout,存活时间,没有数据包匹配,流表会在到达给定时间后被自动删除。
(1)模拟隐藏式DoS 攻击。
因timeout 时间默认设置为5 s,所以在Mininet终端中执行指令,h1 ping –i 4 h2,-i 参数模拟每隔4 s从h1 主机(1 号端口)向h2 主机(2 号端口)发送ping 指令数据包。
(2)周期性查询流表规则。
周期性的通过Floodlight 控制器的UI 界面查询交换机s1 中的流表规则如图5 所示。从图5 中可看出,在timeout 为5 s 的情况下,当一条流表规则age 时间很长,而且匹配的packets 相对不多的情况下,很有可能是针对SDN 交换机的隐藏式DoS 攻击造成的。
图5 OpenFlow1.0 交换机中端口和流表项
(3)删除长期存在的流表规则。
对被怀疑为隐藏式DoS 攻击的流表规则,通过Floodlight 控制器提供的RESTful 接口向交换机s1 下发删除流表命令进行删除:curl -X DELETE -d"{"cookie":"90071992524740992"}" http://192.168.1.1:8080/wm/staticflowpusher/json。
SDN 可以对网络流量进行实时监控、提取、分析,及时调整流量。本文采用网络仿真平台Mininet 搭建SDN 网络,使学生在SDN 的学习中不受硬件条件的限制,降低了学习门槛,提高了学生实践的灵活性。结合使用Floodlight 控制器软件和sFlow 流量监控软件,展示了拓扑创建、主机间联通测试、流表下发、流量监测等过程,最后以SDN 环境下的洪范式和隐藏式DoS 攻防案例进行实验教学,使学生能够深入理解SDN 网络的机理和内涵。