一种面向软件定义网络的控制器安全性定量分析方法与流程

文档序号:12123275阅读:397来源:国知局
一种面向软件定义网络的控制器安全性定量分析方法与流程

本发明涉及一种开源计算机软件安全性定量分析方法,特别是涉及一种面向软件定义网络的控制器安全性定量分析方法。



背景技术:

软件定义网络(Software Defined Network,SDN)的控制转发互相分离、虚拟化、动态可编程三大优势使其成为解决当前网络难题的首选。当前开源及商业控制器普遍基于模块化设计,使用虚拟化的方法实现,不仅控制器的基本架构有所差异,并且由于实现虚拟化控制器所用的编程语言不同,如NOX使用C++实现,POX、Ryu使用Python,Floodlight和OpenDaylight使用Java等,导致不同类型控制器在性能、安全性上存在较大差异。如Floodlight控制器的北向REST API实现中未对资源加以认证保护导致攻击者可以利用该漏洞实现对控制器的越权访问。攻击者通过对控制器流表的篡改,可以造成全网的拒绝服务,或者将流表目的地址修改为特定的目标,实现目标的信息窃取等。

因此如何对已有的控制器进行安全性度量比较,选择符合用户安全需求的控制器成为SDN组网的重要前提。当前针对控制器的安全性分析主要通过定性的方法进行,如分析控制器与交换机之间是否采用认证和加密算法,分析控制器北向REST API访问是否采用访问控制机制,分析控制器应用程序执行环境是否采用沙箱隔离机制等等。但是,上述方法仅能够定性分析控制器所采用的安全机制,无法比较不同安全机制下控制器的安全性。此外,由于控制器和上述安全机制均是通过编程实现的软件产品,上述方法也无法确定安全机制在代码实现中是否存在脆弱性。

因此对不同控制器的安全性进行比较仍然可以采用传统的软件安全性比较方法,如使用软件漏洞检测的方法,比如源码审计工具Coverity、动态漏洞检测工具BitBlaze等,通过检测不同控制器的漏洞数目和漏洞威胁等级,比较控制器之间的安全性。但是该方法存在以下两个方面的不足:(1)同一个漏洞在不同的攻击者手中可能产生不同的攻击效果,漏洞威胁等级无法准确评估;(2)漏洞数目与漏洞威胁之间无法建立对应的量化关系,如100个中等威胁等级的漏洞与1个高危等级的漏洞无法实现定性和定量的比较。因此无法通过上述依赖于漏洞检测的方法对待测软件进行准确的安全性评估。

对此微软Michael提出使用相对攻击面熵值计算法(Relative Attack Surface Quotient,RASQ)度量系统的安全性,具体做法是:首先根据经验确定Windows中常被用于攻击的进程、服务等,如open sockets、动态web页面、用户账户管理;Michael定义20个攻击向量,然后为每个攻击向量中的元素根据经验赋予一定的权值;最后对每个攻击向量计算元素加权值,将所有攻击向量权值累加即可得到系统安全性的量化值。

由于RASQ的方法在选择攻击向量和对攻击向量进行赋值时过度的依赖经验,并且仅能用于操作系统安全性度量中,因此Manadhata等对RASQ进行改进,提出攻击面的量化度量方法。与RASQ方法相比,该方法在攻击向量的选择和攻击向量赋值方面不再依赖经验,度量结果更加的客观,通用性更强。但是上述方法根据操作系统的安全机制度量应用软件的脆弱性,未对应用软件本身的安全性进行量化度量,并且上述方法没有针对攻击类型进行分析,实用性和指导性有所欠缺,如某种网络环境中需要控制器具备很强的抗拒绝服务攻击的能力,那么用上述方法无法完成安全性度量。



技术实现要素:

本发明克服了现有技术中,网络环境中控制器的实用性和指导性有所欠缺的问题,提供一种度量结果更加客观,通用性更强的面向软件定义网络的控制器安全性定量分析方法。

本发明的技术解决方案是,提供一种具有以下步骤的面向软件定义网络的控制器安全性定量分析方法:包括下述步骤:

1)对控制器源码进行预处理,筛选出需要进行量化分析的代码模块;

2)根据1)中代码模块生成所有入口点和出口点函数的调用图,从图中得出每个入口点和出口点的前置和后置序列数;

3)将源码插装编译并执行,监控执行过程,根据2)中生成的调用图得出协议接口、数据项资源的前置和后置序列数;

4)根据2)和3)中的前置和后置序列数,计算入口点、出口点、协议接口,以及数据项资源的TE值;

5)对4)中得到的TE值加权计算得到控制器脆弱集的TE值。

在1)中保被测控制器是开源的,根据被测对象的主进程、核心组件或者根据定量分析的目标选择代码模块进行后续的分析,定量分析的目标为针对特定组件进行定量分析。

在2)中,调用图使用第三方IDE环境,如PyChar、Eclipse手动构建,或者通过编写脚本程序,自动搜索完成;入口点包含直接入口点和间接入口点,出口点包含直接出口点和间接出口点。

在3)中,需要修改或者在源码特定位置添加监控代码,编译执行后,动态跟踪控制器执行过程中使用的协议接口和访问的数据资源;协议接口是南向协议所采用的通信接口,数据资源是指全网拓扑结构和流表。在4)和5)中,TE值是根据后置序列数与前置序列数的比值得到的,并且加权计算脆弱集的TE值时,将入口点、出口点、协议接口、数据资源的权值均设为1。

与现有技术相比,本发明面向软件定义网络的控制器安全性定量分析方法具有以下优点:本发明提出一种基于Threat/Effort模型(以下简称TE模型)的控制器脆弱性定量分析方法,与RASQ和改进的RASQ方法相比,TE模型不依赖于控制器底层操作系统的安全机制,而是从控制器的代码实现定量分析控制器的脆弱性。TE模型对被测对象的入口和出口进行形式化建模,定义控制器资源的前置和后置条件,根据条件量化计算每个资源的TE值,加权得出控制器的脆弱性量化值。同时本发明引入攻击指数,在量化评估中计算控制器的攻击指数可以分析不同控制器的抗拒绝服务攻击的能力。

本发明面向软件定义网络的控制器安全性定量分析方法,根据控制器的脆弱集模型,从控制器的代码实现定量分析控制器的脆弱性。与当前定性分析的方法相比,该方法可以得到量化的具体值,评价标准更加详实可靠。

本发明面向软件定义网络的控制器安全性定量分析方法,不仅可以分析不同类型控制器的安全性,对同一控制器的不同版本也可以提供量化的分析,可以同时为控制器的选择和控制器的安全开发提供参考。

附图说明

图1是本发明面向软件定义网络的控制器安全性定量分析方法中控制器脆弱集量化度量的流程图;

图2是本发明面向软件定义网络的控制器安全性定量分析方法中出/入口点TE值计算流程图;

图3是本发明面向软件定义网络的控制器安全性定量分析方法中协议接口、数据资源TE值计算流程图;

图4是本发明面向软件定义网络的控制器安全性定量分析方法中直接入口点函数与数据流向关系图;

图5是本发明面向软件定义网络的控制器安全性定量分析方法中间接入口点函数与数据流向关系图。

具体实施方式

下面结合附图和具体实施方式对本发明面向软件定义网络的控制器安全性定量分析方法作进一步说明:

实施例一:参见图1,本发明具体包括下述步骤:

1)对控制器源码进行预处理,筛选出需要进行量化分析的代码模块;

2)根据1)中代码模块生成所有入口点和出口点函数的调用图,从图中得出每个入口点和出口点的前置和后置序列数;

3)将源码插装编译并执行,监控执行过程,根据2)中生成的调用图得出协议接口、数据项资源的前置和后置序列数;

4)根据2)和3)中的前置和后置序列数,计算入口点、出口点、协议接口,以及数据项资源的TE值;

5)对4)中得到的TE值加权计算得到控制器脆弱集的TE值。

在2)中,选择的源码中不存在间接入口点和间接出口点,生成的调用图数目相对少,计算TE值更加快速。

在3)中,无循环路径存在,不需要经过重复节点复制的过程即可完成调用图的生成。

所述的面向软件定义网络的控制器安全性定量分析方法,包括:

步骤一:删除源码中的非核心代码,从筛选后的源码中按照入口点和出口点的定义扫描代码,提取满足条件的入口点和出口点;

步骤二:按照函数调用图生成方法从提取到的入口点和出口点生成调用图,从图中计算得到前置和后置序列数,按照公式计算TE值;

步骤三:监控编译后的控制器执行过程,根据协议格式筛选得到协议接口和数据资源的访问情况,根据步骤二中生成的调用图,得到二者的前置和后置序列数,再次按照公式计算TE值;

步骤四:根据步骤二和步骤三的TE值计算结果,按照加权公式得到控制器脆弱集的TE值。

下面详细说明步骤一、步骤二、步骤三、步骤四所包含的相关内容:

(一)步骤一:

从筛选后的源码中提取入口点和出口点,需要根据入口点和出口点的定义进行。二者的定义如下:

使用C表示SDN控制器的集合,对于给定控制器c,c∈C,定义控制器c的网络环境为Nc,Nc=<U,D,T>,其中集合U表示用户集,集合D表示数据集,集合T表示集合C中除去c外的子集,即T=C/{c}。需要指出的是在SDN网络中,U中的元素可能为主机,也可能是交换机,D可能为流表、拓扑等信息,T表示与该控制器相连的所有控制器,攻击者通过控制U实施攻击行为。

定义控制器源代码中负责接收(直接或间接)网络输入的API函数为系统的入口点。对于该API函数a,存在直接入口点和间接入口点两种类型。

1.直接入口点

对于控制器c,以下三种情况下称c直接从网络中接收数据:(1)用户U(图1(A))或者控制器c'(图1(B))调用函数a,并且将数据项d(d∈D)输入到a中;(2)函数a从数据集合D中直接读取数据(图1(C));(3)a调用控制器c'的函数,从被调函数的返回值中得到数据项d(如图1(D))。

定义1.直接入口点:定义控制器c的输入函数为a,当a至少满足下面三个条件之一时称a为c的直接入口点:(1)用户U包含输出函数a(图1(A));(2)控制器c'(c'∈T)包含输出函数a(图1(B)和图1(D));(3)数据集合D包含输出函数a(图1(C))。

2.间接入口点

对于控制器c,以下两种情况下称c间接的从网络中接收数据:(1)控制器c中存在函数a1,a1直接从SDN网络中接收数据项d,并将其作为函数a的输入传递给a(图5(A)),或者a接收a1的返回值d作为输入(图5(B));(2)控制器c中存在函数a2,a2间接的从SDN网络中接收数据项d,并将其作为函数a的输入传递给a(图5(C)),或者a接收a2的返回值d作为输入(图5(D));例如对于控制器负责认证的函数,其接收用户的登陆信息,但是将该登陆信息传递给认证模块的其它函数进行处理,此时该函数即为系统的一个间接入口点。

对于控制器c,输入函数a,如果a直接接收网络输入的数据项d,并且a的后续函数依赖于d的值,那么d属于函数a的后置条件,表示为d∈Res(a.post),其中符号Res(p)表示函数p包含的资源集合。

定义2.间接入口点:控制器c的内部函数a,当a至少满足下述两个条件之一时称a为c的间接入口点:(1)存在直接入口点a1,并且存在数据项d,d∈Res(a1.post)∧d∈Res(a.pre)(图5(A)和图5(B));(2)存在间接入口点a2,并且存在数据项d,d∈Res(a2.post)∧d∈Res(a.pre)(图5(C)和图5(D))。控制器c的入口点集合是直接入口点和间接入口点的合集。

类似的可以给出直接出口点和间接出口点的定义,如下。

定义3.直接出口点:控制器c的输出函数a,当函数a至少满足下述三个条件之一时称a为c的直接出口点:(1)用户U调用输出函数a;(2)控制器c'(c'∈T)调用输出函数a;(3)数据集合D调用输出函数a。

定义4.间接出口点:控制器c的中间函数a,当函数a至少满足下述两个条件之一时称a为c的间接出口点:(1)存在直接输出点a1,满足并且存在数据项d,d∈Res(a.post)∧Res(a1.pre);(2)存在间接输出点a2,满足并且存在数据项d,d∈Res(a.post)∧Res(a2.pre)。控制器c的输出点集合为直接输出点和间接输出点的合集。

通常攻击者利用控制器资源集合的子集完成对控制器的攻击,如利用控制器的入口点、出口点、协议,以及数据资源向控制器发送数据或者从控制器中窃取数据。因此控制器的脆弱集是由入口点集合、出口点集合、协议集合,以及数据资源集合构成。

(二)步骤二:

生成入口点和出口点的调用图,得到前置和后置序列数,计算TE值。TE值的计算需要根据如下定义进行。

定义5.给定控制器c,网络环境Nc,则c的脆弱集可用以下三元组表示,其中是入口点和出口点集合,是协议接口集合,是数据资源集合。

因此,对于同一控制器的两个版本或者两个功能相似的控制器,比较上述三元组的大小可以得出二者安全性差异。

为实现脆弱集的量化度量,本发明引入经济学中的效费比模型(即TE模型)对控制器资源的脆弱集进行度量。效费比包含两个方面:一是攻击者利用该资源能够对控制器造成的损害大小(即threat,T值,用r.th表示),二是攻击者为获取该资源需要付出的努力程度(即effort,E值,r.ef),前者越高,同时后者越低,那么该资源对控制器的安全威胁越大。本发明使用全序符号>表示资源对脆弱集影响的大小,对于两个资源r1和r2,如果前者对脆弱集的影响比后者大,那么二者的效费比关系可以表示为r1>r2

定义6.资源TE值定义:给定控制器c,以及c的两个资源r1和r2,当且仅当满足下述三个条件之一时r1≥r2成立:

(1)r1.th≥r2.th∧r2.ef≥r1.ef;

(2)r1.th=r2.th∧r2.ef≥r1.ef;

(3)r1.th≥r2.th∧r2.ef=r1.ef;

将定义8与控制器脆弱集三元组结合,可得到如下定义。

定义7.脆弱集TE值定义:给定控制器c,其中的两个函数a1和a2,两个协议接口p1和p2,两个数据项d1和d2,属性at∈{th,ef},当且仅当满足下述三个条件之一时<a1,p1,d1>><a2,p2,d2>成立:

(1)a1.at>a2.at∧p1.at≥p2.at∧d1.at≥d2.at;

(2)a1.at≥a2.at∧p1.at>p2.at∧d1.at>d2.at;

(3)a1.at≥a2.at∧p1.at≥p2.at∧d1.at>d2.at。

根据脆弱集只能对给定的两个控制器做出定性的判断,如一个控制器的脆弱集相对于另一个来说较大,无法对控制器脆弱集给出定量的度量。需要给出基于TE模型的效费比计算方法,据此实现控制器脆弱性的定量度量。

如果攻击者获得了对高权限函数的访问权,那么攻击者能对控制器造成的威胁会更大。因此,从攻击者的角度看,付出更多以获取具有高权限的资源是值得的。因此,使用效费比可以刻画资源对脆弱集的影响程度,控制器的TE值表示为其中η也称资源的效费比。

定义映射函数dera:api→η,完成函数到效费比的映射。在实际计算时资源的效费比时需要对资源的属性赋值,通常是具体的数值。例如计算一个函数的效费比可以通过函数优先级以及访问权限对函数赋予一定的数值,具有较高权限的函数赋值大于较低权限的函数。

前置和后置序列数的计算可以按照下述方法进行。

在控制器脆弱集中,函数a的T值是其后置条件,T值描述了函数a可以调用的其它函数的数目,即函数调用序列中位于a后的函数数目,因此在一定程度上可以表示函数a对脆弱集的贡献,T值越大,a可以调用的函数越多,这种序列也越多。类似的,函数a的E值描述了可以调用函数a的其它函数的数目,即在函数调用序列中位于a之前的,可以直接调用a的函数,这种序列越多,函数a的E值就越少。因此a的效费比可以由函数a所在序列的序列数决定,对于函数a1和a2,dera(a1)>dera(a2)表示函数a1出现的序列数多于a2

(三)步骤三:

监控编译后的控制器执行过程,得到协议接口和数据资源的访问情况,根据步骤二中生成的调用图,得到二者的前置和后置序列数,计算TE值;

对于协议接口p,如果p出现在函数a1,2,...,n的前置条件中,那么p的T值可以用n表示,如果a1,2,...,n出现在p的前置条件中,那么p的E值也可以用n表示。对于数据项d的效费比计算也可以采用类似的方法。

(四)步骤四:

根据步骤二和步骤三的TE值计算结果,加权得到控制器脆弱集的TE值。计算加权TE值需要根据如下定义进行。

定义8.给定控制器c,其脆弱集为则控制器c的脆弱集量化值为

根据定义8即可完成控制器脆弱集的TE值加权计算。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1