第三章 基于 SDN 的安全策略扩展
现有的 SDN 安全策略如 X-trace[1]是适用于复杂网络的故障排除策略,跟踪记录与转发操作相关的日志信息,特别是重点跟踪不同的协议的数据包,从端到端的通信过程中的推断出故障事件的因果相关性,利用日志来进行故障排除。Netreplay[2]的故障排除范围包括持续性故障,不同于端到端的故障排除方案,在网络设备中不记录任何日志信息。由于现有的 SDN安全策略无法深入解决网络故障的排除、以及策略本身的安全问题,因此需要构造可移植、高可靠性、易于操作的安全策略来解决。本章 3.2 节主要介绍基于依赖关系图的回溯策略,3.3 节介绍基于因果图的故障排除策略,3.4 节对现有的故障排除中的难点进行方案扩展,改进现有安全策略的不足,并介绍设计和实现的思路。
3.1 基于依赖关系图的回溯策略
图 3.1 网络问题进行基于来源回溯的故障排除过程,V1 显示了在时间t = 5时刻 DNS(Domain Name System,域名系统)请求到达 DNS 服务器。向前回溯有 V2、V3,DNS 服务器先从交换机 S2 处收到请求数据包,S2 之前是交换机 S1;另外左侧表示 V10、V11,交换机通过端口 5 被连接到 DNS 服务器,中间 V4 表示检测流规则是否存在。V5-V7 是流规则安装过程,在时间t = 2时刻完成,V8 表示将 DNS 数据包交给控制器,V9 表示控制器下发给交换机流规则。图 3.1 中 NDlog[45]是用来方便地表示事件以及事件之间的关系,NDlog 中节点的状态建模为表,每个表中包含许多的元组。基元组可以手动插入,派生元组从其他元组派生出来。NDlog 程序由一组规则组成,描述了元组彼此间 的派生关系,如规则A(@X,P):B(@X,Q),Q = 3 P说,元组A(@X,P)派生自于节点 X,另一个B(@X,Q)元组在该节点上,且Q = 3 P.来源表示为事件的 DAG(DirectedAcyclic Graph, 有向无环图),其中顶点事件和边具有直接的因果关系。
对于 SDN 系统中的阳性事件,通过对阳性事件的来源回溯找到对故障的合理解释,下面介绍这种回溯的实现方法:每当事件发生时或产生一些新的网络状态,系统都保存着其原因事件序列,当用户请求对阳性事件的说明时,系统递归找到每个事件和它的直接原因,直到达到一个设置的“基本事件”(如外部输入),无法进一步说明为止。结果可以被表示为 DAG,其中每个顶点表示一个事件和每条边代表一个直接的因果关系。在数据库文献的相关术语中,称为事件的来源[46](Provenance),即阳性的来源,上面主要介绍阳性事件的回溯。对于更加复杂的阴性事件的来源,则通过假设“故障为什么没有发生”,一直倒推至“没有发生”结果,这样就转化为阳性事件的来源回溯。
对阴性事件的来源回溯,虽然不能直接通过阳性事件来解释,但可以为阴性事件构造一个类似的“回溯”:不确定实际事件是否发生,可以简单地找到包括丢失的事件所有可能发生的路径,然后找出故障的位置,即某个事件没有发生的原因。利用一种反向推理递归生成的故障的解释:当 Web 请求到达的 Web 服务器,请求将不得不出现在某个最近的交换机,实际并没有到达,而这样的请求只可能来自中间的交换机,并最终来到连接用户的交换机。但是只当下面的事件发生时才发送请求:(1)有实际请求,(2)匹配的流表项,动作是转发至用户,(3)没有匹配的更高优先级的流表项。条件(1)和(2)满足,但条件(3)不满足,因为 DNS 服务器的流表项优先级更高。那么优先级较高的流表项又来自哪,这可以通过阳性事件的来源回溯找到原因。
3.2 基于因果图的故障排除策略
ATPG[47](Automatic Test Packet Generation,自动测试数据包生成)用于对转发规则、链路规则、丢弃规则,以及拥塞、带宽可达性的问题进行故障排除,例如通过测试节点通过发送测试报文的验证可达性和性能。MCS[48](Minimal Causal Sequences,最小因果序列)提供一个基于黑盒测试的方法,将事件序列的所有子序列重放,选出一个最小序列,即减小任何一个事件就不能重现错误。MCS 和 ATPG 直接通过控制层进行故障排除,不需要改变数据层面内容。两种方法的不同之处是 ATPG 用于测试网络的低级别的配置,判断是否可以发现故障,而没有检查高层次的策略的能力。MCS 则对于高层次的故障排除,如策略一致性问题更有效。两者共同的不足是都没有重视故障发现问题,因此更多的是依靠管理员的经验。尽管故障排除工具的可靠性不断提高,仍然有许多很难回答的问题[37],如:从 A 点到 B 点的数据包中间发生了什么他们走过哪些路径数据包报头部在他们经过的路径上有哪些改动为了回答这些问题,可能需要重放的数据包的历史轨迹。一个数据包的历史对应于它遍历网络的路径,还包括在该路径上的每跳做过的修改。
当遇到网络安全问题(例如,转发黑洞),图 3.2 表明主控制器发生故障,导致链路错误不能被正确处理。由于交换机流表没有更新,在切换到备份控制器后因为缺少流表项,导致链路黑洞故障。查找这类故障排除是非常耗时的,因为开发人员得到的日志不可能像图中那么清楚,所以可能需要花费数小时研读上 GB 的日志文件。MCS[46]将系统记录到的所有日志序列分类,然后将子序列选择性重放,找到一个能导致故障发生的最小序列,即减小任何一个事件就不能重现错误。STS(SDN Troubleshooting System,SDN 故障排除系统)是实现 MCS的故障排除系统。使用 STS 可以在分布式数据库中并发事件、错误的故障转移逻辑和死锁,下面介绍具体的步骤。
将特定时刻的网络的转发状态定义为配置 C,它包含了所有的转发表项以及活跃的网络元素。控制软件是包括一个或多个处理进程,进程将外部网络事件序列E = e1→ e2→ em(如链路故障)作为输入,并产生一个网络配置序列的C = c1,c2,,cn.常量指的是谓词 P 相关的转发状态(表示安全的常量,例如无环)。若P(C)是假,表示配置 C 违反常量,即P(C)。假设由 L 是质量保证(QualityAssurance)试验环境产生的日志。日志 L 含有事件的序列τL= e1→ i1→ i2→ e2→ em→ ip,其包括外部事件的EL= e1,e2,em和内部事件的IL= i1,i2,ip,内部事件由控制软件触发(例如 OpenFlow 的消息)。事件EL包括时间戳{(ek,tk)},跟随系统的时钟。
日志 L 重放涉及外部事件的EL,可能还要考虑系统的内部事件IL的发生。重放表示为replay(τ),重放replay(τ)的输出是配置CR= c1,c2,,cn.理想的情况是重放再现了原作配置顺序,正常情况下往往需要重复多次。如果日志 L 的配置CL= c1,c2,,cn违反了谓词 P(即ci∈CLP(ci)),同时重放的配置CR包含等效错误(即ci∈CLP(ci))那么我们说replay() =CR再现了这次故障。
发现日志 L 表现违反常量后,需要找到重现违反常量的最小故障事件集合。定义 MCS为一个序列τM,其中外部事件的EM∈ τM是EL的子序列,使得重放replay(τM)再现违反常量,但对于所有EM的子序列EN,没有τN使得重放replay(τN)再现故障。虽然 MCS 不一定是全局极小,有可能该EL重现这个违反是更小的子序列,但不是该 MCS 的子序列。
上面重点介绍现有故障排除策略在 SDN 系统内故障的发生、跟踪、回溯等方面的优势和不足之处,通过典型故障排除方案的分析表明,因果关系分析能够输出最小故障事件集合,但是不能确定故障原因,而来源回溯则不能主动发现故障,因此提出扩展的 SDN 安全策略进行完善故障发现和故障定位的不足之处。
3.3 扩展的 SDN 安全策略
SDN 在网络创新方面提供了一些希望,拥有硬件无关的基于软件的集中控制能力,并使用开放标准的控制通信协议,使调试和故障排除的创新更加容易。通过 SDN 引入的灵活性和可编程特点确实为网络应用创新开辟了新的途径,在全局视图开发上层应用来调试、排除、验证和测试网络故障。传统网络中故障排除是由网络管理员在终端上对获取到的数据包进行收集分析,根据已知的网络拓扑结构确定故障的类型及位置。然而网络拓扑结构的复杂性,链路状态的不确定性,软硬件结构的多样性给传统网络的故障调试、分析、排除带来很大的困难。虽然 SDN 网络也面临着控制器可扩展性、接口兼容性、应用软件可靠性等问题,但是对开发者来说,这些困难可以通过技术创新来解决,而技术创新在传统网络中恰恰是最困难的事情,而在 SDN 中是相对容易的事情。
显然 SDN 回溯的好处是通过 NOS 更加方便配置和管理网络元素,使用逻辑上的集中控制的方式来提高网络元素的转发效率。NOS 的关键是给开发者提供了拓扑抽象层和网络服务的通用应用编程接口,包括常用的网络服务如网络状态和网络拓扑信息更新、设备发现和网络配置查询。网络管理员编写应用策略时不再需要关心数据平面的差异,以及路由元件间的底层细节问题。通过 NOS 降低开发新的网络协议的难度,甚至可以说 NOS 提供了一个能够促进应用程序创新的开发环境,因此为了解决复杂的难题,扩展 SDN 的安全策略的特点如下:
(1)基于应用层策略
基于应用层的回溯策略,管理员通过下发回溯策略即可得到数据包路径;回溯策略不同于控制器下发的转发策略,而是转发策略的逆向策略[50]
;逆向策略不占用数据层资源;在 SDN应用层通过调用逆向策略接口输出完整数据包路径。
(2)基于用户意向
仅靠网络管理员对 IP 地址和端口等低级特征进行人工操作费时费力,通过意向策略对用户意向进行定义,由策略自动转化成低级特征。借助意向策略的自动进行匹配,网络管理员可以对数据包进行先进行一次过滤。
(3)支持分类策略
利用路径查询方法作为来源回溯在数据层的扩展,在数据层将对发生在不同位置的故障分类数据包捕获,分析输出的查询结果得到故障原因。对于故障原因有阳性事件、阴性事件两种,回溯基本包括了所有发生和可能发生的故障,因此通过扩展后的来源回溯可以满足主动发现网络中故障的需求。
3.3.1 逆向转发技术
本节介绍逆向转发技术[49]的定义和使用方法,是论文第四章中意向回溯策略使用的底层技术。给定任一策略 P 和任意数据包 x,y,定义P1为 P 的逆向策略。对于数据包 x,P 作用到x后得到的数据包集中包含y,同理P1作用到数据包y得到的数据包集合中也必须含有x.
逆向策略的计算规则按策略可以分成过滤(Filter)、修改(Modify)、串行(Sequential)和并行(Parallel)四类,针对不同的策略给出定义及其对应的逆向转换方法。对于同一交换机而言,根据定义显然过滤策略和逆向策略是相同的。
(1)过滤策略定义为[q],q 是过滤策略的谓词,将其代入公式 3.1,逆向策略如公式 3.2:
由于回溯的逆向策略是运行在控制器上,所以并不对数据平面产生影响。SDN 回溯策略通过把完整数据包为输入参数,根据逆向转发规则进行深度搜索,计算出回溯路径。数据包是用户确定的,这也限制了回溯应用范围决定于用户的意向。只有在事先对数据包做过分析,并且只有掌握数据包分析方法的用户才有能力使用这种方案。
3.3.2 路径查询技术
本节介绍路径查询[50]技术的原语和使用方法,是论文第五章中故障排除策略的底层技术。路径查询只有当数据包满足查询条件时,数据包才会进行计数、采样、或发送到控制器进一步的分析。通过在数据平面捕获数据包,用户制定查询计划中仅限于这些满足查询条件的数据包,对网络的影响很小。
如表 3.1 谓词表示为 pred.路径查询的基本组成部分的是使用布尔谓词(predicate)在指定的位置匹配数据包。谓词可搭配标准的数据包报头字段,如:srcip = 10.0.0.1&dstip = 10.0.0.2以及该数据包的位置(交换机和接口)。谓词的真和假是分别指的是匹配所有数据包和不匹配数据包,其组合方法通过连词(&),析取(|),和否定()。该语言还提供了依赖于拓扑的谓词结构,如 ingress()谓词匹配所有从入口进入网络的数据包,这些入口可能是连接着主机或另一个管理域中的设备。同样,egress()谓词匹配那些在出口处离开网络的数据包。
查询路径表示为 path.网络路径可以通过使用常规的路径查询原语进行联接组合使用:
连接(^),析取(|),重复(*),合取(&)和否定(~)。以连接组合符(^)为例:给定两个子路径查询 p1 和 p2,p1^p2会指定满足查询 p1 的路径,到下一个交换机,然后从该点满足查询 p2 的路径。其他类似解释还有:(p1 |p2)指定满足任一查询 p1 或 p2 的路径;p1 说明指定的路径对零个或多个重复满足查询 p1 的路径;p1&p2指定同时满足查询 p1 和 p2 的路径,和 p1说明不满足查询 p1 的路径。
查询捕获位置表示为 location.网络管理员沿着数据包转发的路径在指定位置捕获满足查询条件:(1)下游捕获,数据包的实际转发轨迹满足查询。(2)上游捕获,指进入网络后(还未实际转发)的转发轨迹满足查询。(3)接合处捕获,在上游和下游中间。这三种方案之间的差别如图 3.3 所示。相同的查询在三个位置可能查询结果也不同,因为网络的转发策略在不同位置可能会发生改变,或由于网络拥塞和故障导致数据包在转发过程中丢失。对于使用查询 p 时,网络管理人员编写 p.down()表示该查询 p 在下游捕获数据包的,p.up()在上游捕获,p.updown()表示查询 p 同时捕获上游和下游的数据包。spilce(p1,p2)查询 p 捕获在路径中间的数据包,其中 p= p1^p2.综上,网络管理员能够编写全局视图的路径查询策略来捕获匹配查询条件的数据包。
3.3.3 网络分层技术
论文第四、五章中的 SDN 安全策略处于分层结构的策略层,既需要对自身策略进行检查,也需要对策略的结果时行检查。随着通信网络变得越来越先进,而它们的规模、复杂性、速度和异质性的程度方面越来越大。如果既要实时处理网络中的通信信息,同时还要在系统中进行故障定位,故障定位程序也要访问整个系统的日志信息。根据经验得出的结论是,在大型网络中的故障定位的过程,应该以分布的方式来执行,数据处理节点与管理节点的分割,其中每个管理者支配一个子集,每个子集在网络硬件和软件组成的协议层或网络域边界内。
对于没有分层的框架,错误传播在水平方向之间进行,也能在垂直方向从上到下进行。
但是有的故障可能超越层的边界,在故障管理系统中虽然设置有指示故障,但是没有检测到发生在其管理域的范围内的故障,因此这造成无法检测的现有故障所有症状,这也是所有分布式通信系统中共有的问题,需要通过分层故障排除技术[51]解决。如图 3.4 所示将 SDN 网络分成如下面几层:
策略层(Policy View)指网络策略,既描述了一定的条件和设置,也包括要如何在网络上进行操作。比如访问控制策略描述了从连接开始到断开,网络访问和授权过程中如果发现错误不是人为错误,意味着错误与配置和解析有关。
逻辑层(Logical View)是指用户看到的抽象的拓扑结构,而逻辑拓扑和物理拓扑不必是相同的。比如两个虚拟交换机可以真正代表一个物理交换机,或者一个虚拟交换机可以代表上百个物理交换机。此处的可能性有很多,同时也很复杂,特别是当网络中有多个控制器时。
需要回答的问题是:“如何确保任何时候两个控制器看到相同的逻辑视图到”这里发现的错误可能是策略转换过程中的误译。
物理层(Physical View)是网络的物理拓扑,包括交换机、路由器和它们之间的连接。
这是物理网络的准确视图,出现的逻辑错误可能来自于故障转移或同步错误。
设备层(Device View)是在设备上的固件,包括转发表多级映射。在这层发现的错误往往是低层次的问题,比如像内存损坏和寄存器配置错误。
基于分层协议栈系统性故障排除,如图 3.4 所示 SDN 中的 4 层抽象,通过垂直分层的方法对不同抽象层的错误进行隔离,可以有效而且快速的对发生在不同层面的网络错误进行故障排除。SDN 状态层是按层分割后的表示,每一层代表并控制它自己的域。在一个层中产生“错误”将体现或触发自身和其他层之间的错误,比如物理层上错误行为会体现在逻辑层和物理层之间,不会出现在两层之外。
3.4 本章小结
本章分析目前 SDN 安全策略不足之处是无法根据用户意向特征,自己定义安全策略,并且在 SDN 分层协议栈的框架下没有解决故障主动发现的问题,因此提出在应用层策略、用户意向、分类策略方面进行扩展,完善现有 SDN 安全策略的不足。