An In-depth Look Into SDN Topology Discovery Mechanisms: Novel Attacks and PracticalCountermeasures
摘要
软件定义网络(SDN)是一种新的网络方法,它通过将控制平面与数据平面解耦,彻底改变了现有的网络架构。研究人员已经表明,SDN网络非常容易受到安全攻击。例如,对手可以篡改控制器的网络拓扑视图,以劫持主机的位置或创建虚假的互交换链接。这些攻击可以用于各种目的,从模拟主机到绕过middleboxes或拦截网络流量。已经提出了几种对策来减轻拓扑攻击,但迄今为止还没有对它们所提供的安全水平进行全面的分析。因此,批判性分析是更好地理解现有解决方案可能的局限性并建立更强的防御的重要一步。
在本文中,我们评估了现有的SDN中网络拓扑发现机制的实际安全性。我们的分析揭示了针对拓扑攻击的最先进对策中的6个漏洞:TopoGuard, TopoGuard+, SPV 和 SecureBinder。我们表明,这些漏洞可以在实践中被利用来操纵控制器上的网络拓扑视图。此外,我们还提出了两种新的拓扑攻击,称为拓扑冻结和反向循环,它们利用了广泛使用的Floodlight控制器中的漏洞。我们负责任地向Floodlight披露了这些漏洞。虽然我们表明很难完全根除这些攻击,但我们建议采取修复措施来减轻它们。针对我们的研究结果,我们详细介绍了进一步改进现有对策的实际方法。
介绍
软件定义网络(SDN)是一种新的网络范式,作为一种在数据中心和企业环境[25]中开发更动态、灵活和可编程网络的技术,它正在获得发展势头。SDN提出将控制逻辑(即控制平面)与网络设备的数据转发功能解耦。SDN的一个主要好处是,它提供了集中化的控制。SDN范例假设网络的智能位于一个逻辑上集中的控制器中,允许底层的网络基础设施成为简单的转发设备[52]。控制器维护几个核心服务,负责执行网络中的关键功能,例如,路由或网络拓扑发现。SDN的另一个重要方面是它的可编程性。通过使用应用程序,在控制器之上运行,并打开标准的应用程序编程接口,控制器可以轻松地重新编程和收集来自网络设备的统计数据。SDN应用程序是一种基于软件的程序,设计用于执行网络中的高级任务,如平衡负载、定义访问控制列表规则或监控流量。该控制器通常有一个北行和一个南行的接口,以分别与应用程序和数据平面进行通信。OpenFlow通信协议在2011年由开放网络基金会(ONF)标准化,是南向接口[28]事实上的开源标准。OpenFlow协议已经受到了研究社区[23]的广泛关注,目前正在现实世界的SDN网络中使用,如谷歌的B4网络[17]。
使用OpenFlow,控制器安装流规则来指导交换机如何处理数据包。交换机包含多个流表,每个流表都有自己的流规则集。流程规则由三个字段组成:(i)匹配标准、(ii)操作(例如,删除数据包)和(iii)优先级。每次交换机接收到头部不匹配任何流规则的包时,交换机就将该包封装在OpenFlowpacket_in中并将其转发给控制器。后者然后通过OpenFlowpacket_out在交换机中安装一个流规则。从现在起,如果交换机接收到具有相同报头的数据包,那么只要流规则仍然有效,它就会使用以前缓存的流规则。
尽管有其好处,但SDN还是扩大了攻击面,并带来了新的安全挑战。一些研究人员已经表明,对应用程序、控制和数据平面[18,24,27,41,44,45,50,54]发起安全攻击是可能的,而其他工作已经提出了提高SDN网络[5,35,37,38,47,51,53]安全性的对策。在这些攻击中,针对网络拓扑的拓扑攻击是最危险的类型之一。虽然拓扑攻击是由于网络安全社区[22,42]众所周知,SDN网络中这类攻击的后果可能比传统网络[2]更严重。在传统网络中,对手只能通过说服一组特定(假)拓扑事件的交换机/路由器来篡改一小部分网络的拓扑结构。相反,SDN依赖于使用一个具有完全网络可见性的逻辑集中的控制器。由于控制器包含所有的网络拓扑信息,对手可以影响网络的任何部分,而不管它们在网络中的位置如何。使问题更加复杂的是,启用SDN的交换机缺乏足够的逻辑和能力来实现传统的对策,如动态地址解析协议(ARP)检查。
在控制器上维护一个真正的网络拓扑视图是至关重要的。SDN的核心服务和应用程序需要实时和准确的拓扑信息来正确地执行其任务。如果对手破坏了网络拓扑结构,他们就可以通过受损的机器来重定向流量。这允许绕过middleboxes或执行中间人员(MiTM)或拒绝服务(DoS)攻击。此外,对手还可以模拟主机来接收他们的流量。对于处理大量流量的服务器,这尤其危险。
贡献
本文证明了保护SDN拓扑发现机制不仅意味着设计安全的拓扑防御,而且还意味着在控制器上正确地实现拓扑服务。总之,这项工作的贡献如下:
1、我们对针对拓扑攻击的最先进的防御系统进行了系统的安全分析(见脚注1)。这导致在TopoGuard, TopoGuard+, Stealthy Probing-Based Verification(SPV) and SecureBinder中发现了6个漏洞。我们建议并实施对 TopoGuard/TopoGuard+的攻击,并提供对SPV和SecureBinder的其他攻击的明确证据(第5节)。
2、我们在主要的SDN控制器之一Floodlight的拓扑服务中发现了重要的安全漏洞。按照负责任披露的原则,我们将Floodlight通知了我们发现的漏洞。然后,我们介绍并实际演示了两种新的攻击,即拓扑冻结和反向循环,它们会严重损害控制器的网络视图。由于完全消除这些攻击需要对Floodlight控制器进行重大更改,因此我们提出了减轻此类攻击的实际方法(第6节)。
3、基于我们的发现,我们还讨论了进一步强化现有拓扑对策的可能方法,以防止链路制造和主机位置劫持攻击(第7节)。
相关工作
Hong等人。[15]和Dhawan等人。[11]是第一个展示了对手如何在控制器上毒害网络拓扑视图,从而在交换机之间创建假链接(即链路伪造攻击)或模拟受害者主机(即主机位置劫持攻击)的人。为了回应这些攻击,洪等人。[15]和Dhawan等人。[11]分别设计了TopoGuard 和 SPHINX。TopoGuard通过(i)向拓扑包添加完整性检查(ii)标记交换机端口以避免主机将拓扑包传播到网络以及(iii)检查前后条件(即验证主机在移动到新的网络位置)来防止这些攻击。SPHINX提出了一个通过验证所有网络更新来检测攻击的发生(不仅仅是拓扑攻击)的通用框架。为了实现其目标,SPHINX构造了每对端点之间观察到的流量的流图,并将其与过去的图进行比较,以发现异常。然而,无论是TopoGuard还是SPHINX都不能阻止复杂的拓扑攻击。例如,对手仍然可以通过欺骗受害者主机的MAC地址或利用主机传输的时间,即从一个网络位置移动到另一个网络位置,来执行主机位置劫持攻击。
skowyra等人。发现了两种针对TopoGuard的拓扑攻击,称为端口遗忘和端口探测[40]。他们还提出了TopoGuard+,这是TopoGuard的扩展版本,它还可以检查可疑的端口复置事件,并跟踪交换机间链路的延迟。后者允许检测到使用带外信道中继拓扑数据包的对手的链路制造攻击。阿里法等人提出了另一种检测基于中继的链路制造攻击的方法。作者开发了一种名为SPV的安全解决方案,它可以定期向网络注入探测数据包,以寻找假的交换机间链路。Jero等人。介绍了安全绑定器[19],这是一种安全解决方案,它使用修改后的802.1x认证协议将所有主机网络标识符绑定在一起。但是,前两种解决方案只能防止某些攻击;SPV只适用于查找假链接,而安全绑定器只专注于防止主机位置劫持攻击。
本文广泛分析了TopoGuard、TopoGuard+, SPV and SecureBinder的安全性,并探讨了进一步改进它们的可能研究方向。
背景知识
本节提供了了解SDN中当前拓扑发现机制的背景。然后,我们简要回顾了其他研究人员提出的最先进的拓扑攻击和防御。
SDN中的拓扑发现机制
下面,我们将描述在SDN中发现网络拓扑结构的过程。随后,我们介绍了主机跟踪服务(HTS)和链路发现服务(LDS),这是涉及网络拓扑发现的两个主要控制器核心服务。
网络拓扑发现是控制器学习的过程:(i)网络设备(例如,交换机)、(ii)交换机之间的链路和(iii)主机在网络中的位置。第一种是当交换机建立TCP连接-理想情况下是使用TLS/SSL-并与控制器执行OpenFlow握手时。所有的交换机都有一个唯一的标识符,称为数据路径ID(DPID)。需要注意的是,交换机本身不支持任何发现链接或跟踪主机的机制。对于交换机间的链路发现,控制器依赖于链路发现服务(LDS),而主机跟踪服务(HTS)则用于跟踪主机的位置。接下来,我们将更详细地描述HTS和LDS。
Host Tracking Service (HTS)
主机跟踪服务(HTS)维护有关主机(例如,MAC和IP地址)及其在网络中的位置的信息,即连接主机的交换机的DPID和端口号。要发现主机位置,HTS利用当主机发送一个交换机没有安装任何流规则的数据包时触发的OpenFlowpacket_in数据包。这将导致HTS在主机配置文件表中创建一个条目,并将主机标识符绑定到其当前的网络位置。每当主机迁移到新的网络位置时,都将按照前面描述的步骤更新主机配置文件表。类似地,如果主机与交换机断开连接,后者将通过发送包含端口下事件的OpenFlow数据包来通知控制器。在这种情况下,HTS将立即继续删除主机配置文件表中的相应条目。
Link Discovery Service (LDS)
链路发现服务(LDS)会发现并跟踪交换机之间的链路。在大多数SDN控制器中,LDS都是基于OpenFlow发现协议(OFDP)[3]的。上图说明了控制器可以发现两个交换机(用S1和S2表示)之间的单向链接的过程。首先,控制器将链路层发现协议(LLDP)包封装在OpenFlowpacket_out包中,并将其发送给S1,S1又将LLDP包转发给S2。随后,S2将LLDP数据包封装在OpenFlowpacket_in中,并将其发送到控制器,允许LDS发现从S1到S2的单向链路。按照同样的方法,控制器还可以推断出是否存在反向链接,即从S2到S1。为了解释SDN网络的动态情况,我们定期执行这个过程。删除现有的交换机间链路(i)如果交换机检测到端口断开,或(ii)如果在一定时间内未收到LLDP数据包。
现有的拓扑攻击和防御系统
在本节中,我们将总结现有的拓扑攻击和已提出的旨在减轻这些攻击的防御措施。拓扑攻击通常假定对手对网络拓扑有一些知识,并且可以学习受害者主机的网络标识符。这些都是现实的假设。网络拓扑信息可以使用标准的路径跟踪工具(如跟踪工具)或应用侦察技术(如[41])进行恢复。类似地,由于SDN网络使用与传统网络相同的(ARP协议(DHCP),对手获得受害者主机的网络标识符相对简单。
TopoGuard (NDSS’15)
Hong等人。确定了两种被称为主机位置劫持和链接伪造的拓扑攻击,它们在过去几年的[15]中受到了极大的关注。Hong等人。还引入了TopoGuard,这是一种阻止对手执行两种攻击的安全解决方案。TopeGuard认为能够控制一个或多个主机的对手,即控制器和交换机是完全受信任的。TopoGuard还假设使用SSL/TLS来保护控制器和每个交换机之间的控制通道。
攻击
在主机位置劫持攻击中,对手的目标是让控制器相信受害者的主机会移动到另一个网络位置。为此目的,控制一个或多个主机的对手可以使用受害者主机的网络标识符(例如,IP和/或MAC地址)来发送数据包。这将导致HTS更新受害者主机的网络位置信息。只要受害者主机保持空闲状态,此攻击就可以成功启动。另一方面,在链接伪造攻击中,对手的目标是在交换机之间创建假链接。上图显示了对手创建这种假链接的几种方法。例如,对手可以修改合法的LLDP包,甚至可以制作有效的LLDP包。另一种方法是使用带内或带外信道在两个网络位置之间中继LLDP数据包。在所有这些情况下,对手都设法欺骗控制器,当该链路实际上不存在时,让他们相信存在一个新的交换机间链路。所有穿越此链接的数据包都将被对手丢弃或拦截。
对策
关于主机位置劫持攻击,Hong等人。建议在接受主机迁移有效之前先检查前和后条件。这种方法背后的直觉是,所有真正的主机迁移都会产生一系列需要依次发生的事件。本质上,这意味着主机需要先离开当前的网络位置,才能连接到新的交换机。更具体地说,控制器首先等待从主机最初连接处的交换机接收下端口,然后检查主机在初始网络位置是否仍然可访问。只有满足这些条件,控制器才接受迁移有效,主机可以从其新的网络位置发送数据包。尽管这是一个非常简单的对策,但它能够检测到主机似乎同时位于两个位置的攻击。
为了防止链接制造攻击,Hong等人。建议(i)保护LLDP数据包的完整性,以及(ii)避免主机参与LLDP传播过程。为了确保LLDP的完整性,我们在LLDP数据包中添加了一个控制器签名字段——通过DPID和源交换机的端口号计算字段。这可以防止对手精心制作伪造的LLDP数据包。为了保证LLDP数据包只被发送到交换机,我们设计了一种端口标记策略来识别哪种类型的设备连接到每个交换机端口。该方法考虑了三种可能的状态:(i)HOST、(ii) SWITCH或(iii)ANY。HOST表示主机连接到交换机端口, SWITCH是指连接交换机的情况,而如果没有连接任何设备,则使用ANY。最初,所有的交换机端口都被标记为ANY。端口标签将根据每个端口上的交换机接收到的第一种流量类型进行更新。但是,对于他们的方法来说,能够“忘记”端口类型也很重要。回想一下,SDN网络应该在动态环境中使用,其中主机可以拔掉电源并被交换机取代(反之亦然)。每次检测到端口向下事件时,即当主机与交换机断开连接时,将端口类型重置为任何类型,可以满足此要求。这种端口标记策略可以防止控制多个主机的对手中继LLDP数据包,因为这些数据包只被发送到交换机端口。
TopoGuard+ (DSN’18)
skowyra等人。提出了两种新的拓扑攻击,称为端口遗忘和端口探测,即使在TopoGuard[40]存在的情况下也可以成功地进行。此外,Skowyra等人。设计并实现了一个名为TopoGuard扩展,名为TopoGuard+,它不仅可以防止端口失忆攻击,还可以检测基于通过带外信道中继LLDP数据包的链路制造攻击。TopoGuard+防御控制一个或几个主机的敌人。假设控制器和开关是可信的。
攻击
在端口遗忘攻击中,对手的目标是绕过TopoGuard中提出的端口标记技术。对手可以断开并重新连接其主机的网络接口,以将交换机端口重置到任何端口。这可以让主机模拟交换机的行为,将(假)LLDP包传输到控制器。
在端口探测攻击中,对手利用受害者主机迁移到新网络位置的时间,绕过TopoGuard中用来阻止主机位置劫持攻击的机制。此攻击利用了在主机传输时,主机的标识符不绑定到任何网络位置的事实。提出了一种隐蔽、准确地检测受害者主机离开其网络位置的技术。更重要的是,作者证明了主机迁移可以被远程恶意触发。
对策
TopoGuard+进行扩展功能,包括两个新模块:(i)控制消息监视器(CMM)和(ii)链路延迟检查器(LLI)。CMM使控制器能够在LLDP传播期间识别可疑的端口类型重置。为此目的,控制器监视流量,如果在LLDP数据包进行中接收到端口上或端口下,并发出警报。这使得TopoGuard+可以抵抗端口遗忘的攻击。然而,CMM模块无法检测到链路依赖于使用带外通道的制造攻击。为了抵御此类攻击,我们使用了LLI模块。该模块通过跟踪交换机之间的真实链接的延迟来检测假链接。
Stealthy Probing-Based Verification (ESORICS’18)
阿里等人。提出了SPV,一种基于隐形探测的检测方法,用于检测任何类型的链路伪造攻击[4]。与大多数现有的工作类似,SPV假设SDN控制器可信的,并且SDN控制器和交换机之间的控制通道受到保护。与其他作品相比,SPV认为对手不仅可以控制主机,还可以控制网络内的一些交换机。作者假设对手可以使用一个低带宽的带外信道来创建虚假的交换机间链路。然而,作者承认,SPV无法防御通过带外信道转发所有流量的对手,因为这将创建一个实际上类似于网络中真正链接的链接。
对策
为了验证交换机间链路的合法性,SPV依赖于使用与正常通信量无法区分的探测数据包。为此,SPV将侦听网络流量,并维护主机发送的参考数据包列表。这还包括从哪里发送这些数据包的交换机的DPID。为了验证链接,SPV从以前存储在列表中的参考包中随机选择一个参考包。为了保证SPV的安全性,引用数据包不能是以前被此链路中涉及的两个交换机中的任何一个使用过的数据包。SPV提出使用探测数据包,其中一些字段匹配那些正常流量,而一些字段是随机的。具体来说,探测包从随机选择的参考包中获取Ethernet_type和有效负载长度,而随机选择源和目标MAC/IP地址/IP地址。与OFDP协议类似,SPV将探测包发送给发送方交换机,发送方交换机又将其转发给目标交换机。在接收到探测包后,目标开关将其发送回控制器。他们的方法的核心思想简单而有效;如果探测数据包返回到控制器,则在这些交换机之间存在一个链接。否则,SPV得出结论认为该链接是假的,并将其从控制器上的网络拓扑视图中删除。
此外,还设计了一种机制来处理丢失的探测数据包(例如,由于链路故障)。在这种情况下,SPV通过获取第一个探测包并使用线性扫描算法[21,32]来生成一个新的探测包。新的探测包与第一个探测包只是略有不同,然后按照前面描述的过程被发送到发送方交换机。
SecureBinder (USENIX’17)
Jero等人。发现了一种名为Persona Hijacking的攻击,它利用了SDN[19]中标识符绑定机制的固有弱点。除了提出了一种非常有效和危险的攻击外,Jero等人。引入了SecureBinder,一种防御机制,可以用来击败主机位置劫持攻击,包括在TopoGuard+中引入的端口探测攻击。SecureBinder假设对手可以控制一个或多个主机。其余的网络组件被认为是受信任的。
攻击
Persona Hijacking劫持包括两个阶段:(i)IP接管和(ii)流中毒。在IP接管阶段,对手的目标是破坏IP地址与受害者主机的MAC地址之间的绑定。如果对手说服DHCP服务器释放受害者的IP地址,以便将自己的MAC地址绑定到它身上,那么对手就可以成功地启动此攻击。只有当DHCP服务器在将IP地址分配给新主机之前检查该IP地址是否正在使用时,才需要进行流中毒阶段。该阶段包括破坏受害者的MAC地址与其网络位置之间的绑定的所有必要步骤。从本质上讲,对手利用交换机上的流规则不一致性来将流量重定向到自己。这种攻击可以让对手完全接管对手,并成为受害者标识符的所有者.
对策
SecureBinder使用修改后的802.1x身份验证协议[34]将所有主机的标识符绑定在一起,该协议还额外检查主机MAC地址是否有效,即在授权主机列表中。控制器扮演认证器的角色,允许主机(即请求者)在认证成功后访问网络。连接到控制器的身份验证器服务器包含一个数据库,该数据库将每个主机的MAC地址与其证书绑定。
此外,SecureBinder利用SDN架构来确保所有的绑定控制流量都被直接发送到控制器(而不是被广播到网络)。这可以防止对手嗅探交换的控制包以建立绑定,并允许控制器执行多个跨层检查,以便在更新绑定时验证绑定。