基于SDN开发DDoS攻击检测和防御程序 (一):简介

很久之前就说过等毕设结束后会把所有的东西放在blog上,一直拖了很久。按照毕设论文的顺序和组织形式,我再加以补充和完善之后会陆续放上来,如果不是太忙的话。。感兴趣的读者可以持续关注。

摘要

当前,SDN是网络领域炙手可热的创新技术,其提出的控制与转发分离和网络可编程化被认为是传统网络发展的未来。上至运营商、互联网巨头,下至通信设备厂商、高校和研究机构都在大力发展和推进SDN架构。于此同时,欺骗攻击和DDoS攻击从互联网普及以来就对网络安全造成了深远的影响,因此对SDN网络环境中的攻击检测和防御则显得至关重要。

本文主要阐述了基于SDN控制器的攻击检测程序的编写,实现了在数据平面进行数据包的快速转发,在控制平面对流量进行检测以识别常见的网络攻击,包括识别局域网欺骗攻击和常见的DDoS攻击。SDN控制器采用开源控制器Ryu,SDN网络仿真环境采用Mininet,OpenFlow交换机采用Open vSwitch,编程语言为Python。

本设计的主要成果包括:应用程序接受数据包并进行MAC地址学习,对于合法流量进行基于MAC地址的二层转发。同时对入站数据包和新建连接检测恶意数据包和攻击行为,识别常见的网络攻击并进行记录,最后根据策略过滤相应的攻击报文。应用程序支持REST API获取和提交参数,对实时攻击流量进行绘图分析。

关键词: SDN;DDoS;攻击检测;Ryu控制器;Python

本设计主要研究内容

本设计涉及SDN控制器应用开发、流量检测、DDoS攻击识别与防御、防御测试等方面的内容,主要内容如下:
基于Ryu控制器的击检测程序的编程。对合法流量下发流表以进行二层转发,对于非法流量识别攻击类型,统计并阻断相应的攻击。基于Ryu开发框架,需要研究Ryu提供的API接口。

程序需要检测局域网攻击和DDoS攻击,前者包括MAC欺骗、IP欺骗、ARP欺骗、ICMP重定向欺骗等攻击;后者包括ICMP Flood、TCP Flood、UDP Flood等。为此,本论文将会研究上述攻击的原理和流量特征,深入数据包报文层面对其进行分析,最后提出基于攻击原理的检测方案。

最后,使用网络工具构建恶意报文实现对上述攻击的模拟,以测试程序对网络攻击的检测能力。

研究的攻击种类

研究方法

总结

1. 绪论

1.1 背景和意义

根据《阿里云2015年下半年云盾互联网DDoS状态和趋势报告》,在2015年下半年,阿里云安全团队共监控到DDoS攻击事件超过10万次,较2015年上半年攻击事件增加了32%。其中流量达到300Gbps以上的攻击次数达到66次。相对于2015年上半年,环比增加127%。最大攻击峰值流量为477Gbps,超越了2014年峰值为 453.8Gbps的DDoS攻击防御记录。

同样,根据华为云安全中心发布的《2014僵尸网络与DDoS攻击专题报告》,2014年是各类UDP类反射放大攻击和大报文SYN Flood肆意横行的一年。几乎每个月都会发生超百G的DDoS攻击,攻击流量峰值带宽一再被刷新,2014年年初达到400Gbps,年底已经达到500Gbps。

当前,DDoS攻击已经给数据中心和互联网产业带来了严重而深远的影响,本设计旨在于SDN架构中开发应用程序以检测DDoS攻击流量并对其进行过滤。充分利用SDN转发与控制平面相分离的特性,对合法流量进行转发,对攻击流量进行记录、统计和过滤。实现了对局域网攻击(MAC欺骗、IP欺骗、ARP欺骗、ICMP重定向)、DDoS攻击(ICMP Flood、TCP Flood、UDP Flood)的检测和防御。

1.2 研究现状

目前,SDN领域的应用开发都集中在流量工程、链路调度、负载均衡等方向,以DDoS检测和防御为主的研究和实现尚处于初期。

日本Sakura Internet利用SDN提供的细粒度的报文改写功能实现DDoS检测和清洗过程中的流量迁移[3],并未使用SDN控制器对DDoS攻击进行检测。而应用安全方案提供商Radware公司已经推出DefenseFlow软件产品[4],该产品采用SDN技术,能够以纯网络服务的形式为用户提供DoS和DDoS攻击防护。同样,国内解决方案提供商华为也已发布基于SDN技术的Anti-DDoS云清洗方案[5],利用SDN对网络的可视化和灵活控制力,可快速发现攻击流量的源头,并实现快速阻断;同时利用SDN的“敏捷”特性,还可实现智能引流清洗。

华为和Radware公司提供的都是商用解决方案,DDoS检测和防御技术并未公布其实现细节。南京邮电大学肖甫等学者在南京邮电大学学报上发表了“SDN环境下基于KNN的DDoS攻击检测方法”,提出了一种在SDN环境下基于KNN算法的模块化DDoS攻击检测方法,该方法选取SDN网络的5个关键流量特征,采用优化的KNN算法对选取的流量特征进行流量异常检测,最后基于NOX控制器和NetFPGA交换机进行了试验验证。证明了相对其他的分类检测算法,所提的监测方案具有更高的识别率和更低的误报率[6]。

2. 技术背景概述

2.1 SDN架构

SDN(Software Defined Networking,软件定义网络)不同于传统网络架构,是一种新兴的基于软件的网络架构及技术,其最大的特点在于具有松耦合的控制平面与数据平面、支持集中化的网络状态控制、实现底层网络设施对上层应用的透明[7]。SDN改变了网络的组织和管理模式,通过开放的接口和标准的南北向协议,使得底层网络不再依赖于具体的硬件和嵌入式网络操作系统,逻辑拓扑和流量调度不再受限于物理连接方式,取而代之的是以灵活高效的软件编程方式实现底层网络的配置。通过SDN能够有效地解决当前网络组网灵活性差、全局性流量工程和链路调度的优化、网络设备配置复杂且各不兼容等问题。

如图所示,SDN的架构可以分为三层,由上层的应用层、中间的控制层和底层的基础设施层构成。基础设施层由网络设备和硬件组成,负责数据包的转发、处理和状态收集。控制层由SDN控制器组成,主要负责转发策略、网络状态维护和资源编排等。应用层由控制器上的业务应用组成,通过API接口和控制器进行交互。按照接口与控制层的位置关系,前者通常被称作南向接口,后者被称作北向接口[7]。

SDN架构

SDN具有以下三大基本特征:

  • 集中控制: 逻辑上集中的控制能够支持获得网络资源的全局信息并根据业务需求进行资源的全局调配和优化,例如流量工程、负载均衡等[7]。
  • 开放接口: 目前南向接口OpenFlow协议已成为标准,北向接口在控制器上都是开放的,这使得可以通过开放接口来编写业务所需要的服务,实现更加细粒度、自定义的需求等。
  • 网络虚拟化: 由于接口开放且南北向相互独立,这使得在以控制器为核心的SDN架构中,上层应用仅关心控制器的接口实现而无需关心底层网络的实现、控制器和交换机的交互等,使得底层网络对上层应用和服务实现透明,网络脱离硬件从而实现虚拟化。

本设计即建立在SDN的集中控制和开放接口的特征上。通过集中控制,SDN控制器可获得全局的拓扑、设备和状态信息,建立设备信息表作为防止欺骗报文的依据。开放接口体现在本设计通过SDN控制器Ryu提供的API接口完成开发,通过其北向接口使得业务应用能够便利地调用底层的网络资源和能力。

2.2 OpenFlow协议

2.2.1 概述

OpenFlow(OpenFlow Switch Specification)是标准化组织ONF唯一确定的控制器南向接口,它本身是一份设备规范。该规范规定了作为SDN基础设施层转发设备的OpenFlow交换机的基本组件和功能要求,以及用于由远程控制器对交换机进行控制的OpenFlow协议[8]。

OpenFlow协议的核心思想是将传统网络中完全由交换机、路由器控制的数据包的转发过程,转化为由OpenFlow交换机和控制器(Controller)分别完成的独立过程,即实现了转发与控制的解藕。在传统网络中,交换机、控制器根据路由算法、路由策略、MAC转发等控制协议分别进行数据包级别的转发,缺没有数据流的概念。而在OpenFlow网络中,统一的SDN控制器取代了各个交换、路由设备上的控制平面,控制器会基于全局的拓扑、链路信息来实现集中控制,OpenFlow交换机将仅作为数据平面,根据控制器下发的策略实现数据转发。OpenFlow提供的标准南向接口使得底层的转发设备可以被统一控制和管理,而其具体的物理实现将被透明化,从而实现设备的虚拟化[9]。由此,OpenFlow实现了软件独立于硬件,让硬件标准化,软件平台化,信息中心化。

OpenFlow协议从发布至今已经已经经历多种版本。从2009年发布第一个商用版本v1.0,此后经历了v1.1、v1.2、v1.3、v1.4、v1.5等多个版本,目前最新版本为v1.5.1。本论文选取目前业界支持最为广泛的v1.3版本作为研究基础,同时后文的开发程序将仅以v1.3作为支持版本。

如图所示,一台OpenFlow交换机由以下几个部分组成。OpenFlow交换机通过安全信道和SDN控制器以OpenFlow协议通信,而控制器以OpenFlow协议控制交换机。交换机内部以一个或者多个流表以及一个组表组成,多级流表之间有严格的次序要求并按照流水线(pipeline)进行处理。

2.2.2 流表

当OpenFlow交换机中存在多个流表时,每个流表又包含多个流表项。如图所示,OpenFlow的流水线处理定义了数据包如何在多级流表间进行处理。

一张流表由各个流表项组成,而每个流表项包含如表所示的组成部分:

| 匹配域 | 优先级 | 计数器 | 指令 | 超时定时器 | Cookie |

各字段含义如下:

  • 匹配域用来匹配数据包。这部分由入站端口、包头信息和流表间可选的元信息组成。
  • 优先级定义了流表项的匹配顺序。
  • 计数器将在收到匹配的数据包时进行更新。
  • 指令字段指明交换机对匹配的数据包进行的操作
  • 超时定时器是一个流表项的最长有效时间或最大空闲时间
  • Cookie由控制器定义,用于标识该流表

2.2.3 包匹配流程

当数据包到达交换机时,交换机对于数据包的匹配流程如图所示。先从表0开始匹配,如果匹配到某张表则更新其中的计数器并执行相应的指令,如果存在跳转指令则跳转到表n中去处理,如果不存在则立即执行操作集中的操作。当数据包没有匹配到任何一个流表时,如果存在table-miss条目则转发至控制器,否则丢弃该数据包。

2.2.4 匹配域

匹配域从OpenFlow v1.0版本中的12种扩充到v1.3版本中的40种,涵盖了OSI七层模型中的下四层大部分数据包的包头字段。以v1.3版本为例,截取部分控制器Ryu匹配域支持的字段如表所示。

参数 描述
in_port 交换机入站端口
in_phy_port 交换机物理入站端口
metadata 于流表间传递的元信息
eth_dst 目的MAC地址
eth_src 源MAC地址
eth_type 以太网类型
vlan_vid VLAN ID
vlan_pcp VLAN优先级
ip_dscp IP头DSCP(差分服务)字段
ip_ecn IP头ECN(拥塞通知)字段
ip_proto 协议类型
ipv4_src IPv4源地址
ipv4_dst IPv4目的地址
tcp_src TCP源端口
tcp_dst TCP目的端口
udp_src UDP源端口
udp_dst UDP目的端口
sctp_src SCTP源端口
sctp_dst SCTP目的端口
icmpv4_type ICMP type(类型)字段
icmpv4_code ICMP code(代码)字段
arp_op ARP opcode(类型)字段
arp_spa ARP发送者IPv4地址
arp_tpa ARP目标IPv4地址
arp_sha ARP发送者物理地址
arp_tha ARP目标物理地址
ipv6_src IPv6源地址
ipv6_dst IPv6目的地址
ipv6_flabel IPv6流标签
icmpv6_type ICMPv6 type(类型)字段
icmpv6_code ICMPv6 code(代码)字段
mpls_label MPLS标签字段
mpls_tc MPLS TC(流量等级)字段
tcp_flags TCP Flag(标志)字段

2.3 Ryu控制器

本设计采用开源方案Ryu作为SDN控制器。Ryu是一个基于组件的SDN开发框架,其完全采用python编写,代码可读性强。Ryu提供了良好的API供开发者创建网络管理与控制的应用程序。支持多种管理SDN网络设备的南向协议,诸如Openflow,Netconf,OF-config等。对于Openflow,Ryu完整支持1.0,1.2,1.3,1.4,1.5版本和Nicira的扩展版本。

2.4 DDoS攻击

DDoS(Distributed Denial of Service)是分布式拒绝服务攻击的缩写,它是一种利用多台计算机向指定目标服务器发送攻击数据包,导致目标服务器系统资源或带宽耗尽,从而对正常业务请求出现拒绝服务的攻击行为,是目前最强大、最难防御的攻击之一。常见的DDoS攻击分为如下两类:

1) 协议缺陷型
利用TCP,DNS等互联网协议的缺陷,向服务器发送无用却必须处理的数据包来抢占服务器系统资源,从而达到影响正常业务服务的目的。常见的攻击类型包括:SYNF LOOD,ACKF LOOD,DNS Flood等。

2) 流量阻塞型
通过发送大量满负载垃圾数据包到目标服务器,使链路带宽耗尽,从而达到影响正常业务服务的目的。常见的攻击类型包括UDP Flood,ICMP Flood等。
当前,DDoS攻击的数目、规模、类型都大幅上涨,其中主要是针对数据中心的3层和4层大流量DDoS攻击。SDN可以快速响应和更新流量的策略与规则,支持更深层次的数据包分析,对于防御网络攻击有很大帮助,可以为更复杂的环境提供更高级的网络监控功能。

2.5 SDN环境

本文研究的实验环境基于Mininet网络仿真环境和Open vSwitch虚拟交换机。Mininet是一个轻量级的软件定义网络系统平台,同时提供了对OpenFlow协议的支持,通过这个平台可以真实的模拟网络架构和操作。Open vSwitch是运行在虚拟化平台上的虚拟交换机,同时对OpenFlow协议提供了支持,本论文以Open vSwitch作为OpenFlow交换机。

2.6 REST编程接口

REST(Representational State Transfer)是一种软件架构风格,利用HTTP协议实现和应用程序API间的数据通信。本设计中,使用REST API来提供对配置文件的获取和修改

2.7 MySQL数据库

MySQL是一种关系型数据库,本设计利用该数据库存放各种攻击检测的统计记录。

2.8 编程语言

Python是一种面向对象、解释型、动态数据类型的高级程序设计语言。本设计所有开发工作皆用Python完成。

如果您觉得这篇文章对您有帮助,不妨支持我一下!