掌桥专利:专业的专利平台
掌桥专利
首页

一种基于TrustZone的OpenFlow交换机安全转发方法

文献发布时间:2024-04-29 00:47:01


一种基于TrustZone的OpenFlow交换机安全转发方法

技术领域

本发明设计可信计算双体系架构技术领域中一种基于Trustzone的可信双体系架构保护交换机安全转发的方法。

背景技术

OpenFlow交换机是一种可编程、灵活的SDN网络设备,被广泛应用于数据中心、企业网络、无线网络等领域,用于控制和管理网络流量。然而由于目前的商业OpenFlow交换机存在软件漏洞,使得攻击者可以通过入侵交换机内存篡改流表来达到恶意转发数据包的目的。例如,攻击者可以篡改流表规则,将数据包转发到自己的设备,以实现中间人攻击。或者,攻击者篡改流表规则,将数据包转发到无效的目的地,从而实现服务拒绝攻击。因此,为保障网络安全,需要采取一系列措施来加强对OpenFlow交换机的安全防护,保护OpenFlow交换机免受各种攻击和威胁。

为了解决攻击者恶意修改OpenFlow交换机的问题,研究者们提出很多想法,目前的解决方案主要是在整个SDN网络中进行检测,一种是对网络层数据包进行封装,添加数据头,并通过该数据头监控数据包的转发行为是否符合控制平面策略。另一种是在交换机中添加测试流表,并通过控制器来测试交换机的流规则是否与控制器视图一致。

但是基于整个SDN网络的检测方案忽略了对交换机可信性的验证,交换机中的程序和流表在启动过程或者运行过程中都可能遭受攻击,基于整个SDN网络的检测方法会被绕过。在OpenFlow交换机不同版本的代码中存在着安全漏洞,攻击者可以利用这些漏洞进行攻击,例如:缓冲区溢出、代码注入等。通过这种方式,攻击者可以劫持软件正常的控制流,进而执行攻击者注入或者重写的代码。这样一来,攻击者便可以绕过现有的检测方案,并且不会向控制器发出警告。

TrustZone技术将系统划分为REE和TEE,TEE提供安全保护,可主动访问REE。安全机制在TEE中运行,隔离REE中的攻击,确保应用的安全。TCB实施安全策略,发现攻击时通过控制策略确保REE的安全。利用TrustZone的思想可以解决交换机可信性的验证问题,对交换机中的程序和流表在启动过程或者运行过程中进行检测,保证其安全。

综上所述,本发明基于Trustzone技术的双体系架构可满足OpenFlow交换机对安全的需求的思想,针对目前检测OpenFlow交换机转发安全中存在的问题,对于改变原有的OpenFlow交换机的架构,提出了新的想法和思路。因此,本发明提出了一种基于TrustZone的OpenFlow交换机安全转发方法。

发明内容

为了解决交换机中的程序和流表在启动过程或者运行过程中被篡改的问题,本发明基于Trustzone双体系架构的思想,改变了原有的OpenFlow交换机的架构,将双体系架构思想应用于OpenFlow交换机来解决交换机转发功能被篡改的问题,提出了一种基于TrustZone的OpenFlow交换机安全转发方法。

为了达到本发明的目的,本发明在双体系架构中部署OpenFlow交换机,其中OpenFlow交换机我们使用OpenvSwitch来进行模拟,我们将OpenvSwitch部署在REE中,并且增加了TableCheck模块,ForwordCheck模块和ProCheck_CA模块,其次在TEE中部署了ProCheck_TA模块以及Store模块。并且基于此架构我们提出了动态度量机制和数据包转发抽样检测机制。通过动态度量机制对交换机流表以及检测模块运行时代码段进行安全度量,通过数据包转发抽样检测机制检测交换机转发功能是否正常。

基于Trustzone的交换机转发验证架构。在此架构中包含TableCheck、ForwordCheck模块、ProCheck_CA、ProCheck_TA、Store五个主模块:

1.TableCheck模块。TableCheck模块位于REE中,它的目的是检查交换机中的流表是否正确。

2.ForwordCheck模块。ForwordCheck模块位于REE中,ForwordCheck模块的基本思想是验证交换机是否正确地执行了发送数据包的规则。

3.ProCheck_CA模块。ProCheck_CA模块位于REE中,它的作用是计算程序代码段的基准值,并发送给ProCheck_TA模块进行保存和校验。

4.ProCheck_TA模块。ProCheck_TA模块则被置于TEE中,它的作用是将TEE中保存的程序基准值与ProCheck_CA模块动态获取的基准值进行对比,以判断进程运行时代码是否被篡改。

5.Store模块。Store模块位于TEE中,主要用来存放度量摘要的基准信息。

动态度量机制。动态度量机制是对交换机流表以及检测模块运行时代码段进行动态度量,判断其状态是否可信。交换机流表的动态度量由TableCheck模块完成,通过将交换机中的流表存储至布隆过滤器来得到1个位数组,再与存储在控制器中的流表对应的位数组作比较,判断流表是否可信。对检测模块的动态度量在度量交换机流表前进行,防止检测模块遭受攻击后,提供的服务不再可信。

数据包转发抽样检测机制。当数据包进入交换机时,交换机提取数据包头。ForwordCheck模块根据数据包头判断该数据包是否需要抽样检测。如果需要,当数据包即将离开交换机时,ForwordCheck模块会验证其转发端口是否与交换机中规定的一致。

一种基于TrustZone的OpenFlow交换机安全转发方法(TZOVS),其特征在于:TZOVS系统引入了TrustZone的双体系架构,将Open vSwitch置于REE中运行,其中REE负责确保交换机的正常运行,TEE作为可信执行环境,存储和验证关键信息,从而形成一个安全、稳定的执行环境。

所述双体系架构包含五个模块,TableCheck模块位于REE中用于检查交换机中的流表是否正确。通过布隆过滤器对比控制器中的流表,判断敏感应用的状态是否可信,从而提高安全性。

ForwordCheck模块位于REE中,用于验证交换机是否正确执行发送数据包的规则。并通过数据包抽样转发,显著降低了检测机制对交换机性能的影响。

ProCheck_CA模块位于REE中,负责计算程序代码段的基准值,并发送基准值到ProCheck_TA模块,以加强对运行时代码的安全监测。

ProCheck_TA模块位于TEE中,判断交换机中的进程运行时代码是否遭到篡改,从而提高系统整体安全性。

Store模块位于TEE中,用于存放度量摘要的基准信息,增加系统的安全性和稳定性。

所述双体系架构提出动态度量机制和数据包转发抽样检测机制。

动态度量机制,通过TableCheck模块对交换机流表进行动态度量,利用布隆过滤器对比控制器中的流表,确保交换机状态的可信性。对检测模块(包括ForwordCheck模块,TableCheck模块以及ProCheck_CA模块)的动态度量在度量交换机流表前进行,防止检测模块受到攻击后,提供的服务不再可信。数据包转发抽样检测机制,当数据包进入交换机时,ForwordCheck模块根据数据包头判断是否进行抽样检测。如有需要,ForwordCheck模块会验证数据包的转发端口是否与交换机中规定的一致,以提高对数据包的安全性监测。

此架构中ForwordCheck模块的执行流程:

步骤21,交换机执行初始化操作,ForwordCheck模块创建一个LRU链表LRUList,其中key=(srcIP,dstIP,srcMAC,dstMAC,Inport),srcIP表示数据包源IP地址,dstIP表示数据包目的IP地址,srcMAC表示数据包源MAC地址,dstMAC表示数据包目的MAC地址,Inport表示数据包进入交换机的端口号,Fnum表示同一数据流的数据包进入交换机的次数。

步骤22,设置检测因子θ和σ。θ表示需要进行检测的数据包与无需检测的数据包的比值。σ表示同一数据流的抽样比率。

步骤23,当交换机接收到数据包m时,提取出对应的key。

步骤24,系统会根据1:θ的比例判断是否需要对数据包m进行抽样。如果是,执行步骤25,如果不是,跳过该数据包。

步骤25,判断数据包的key是否存在于LRUList,如果不存在,执行步骤26,如果存在,执行步骤27。

步骤26,在LRUList中添加对应的key,并将其Fnum设置为1,执行步骤27。

步骤27,判断数据包的key在LRUList中对应的Fnum值,如果(Fnum–1)%σ=0,执行步骤28,否则,跳过该数据包。

步骤28,使用匹配函数Func来获取数据包m的转发端口,其中,Func是一个匹配函数,接受数据包m和流表R作为输入,并返回数据包m的转发端口p。

p=Func(m,R)

步骤29,跟踪数据包m的转发,获取其实际的转发端口outPort。

步骤210,判断p与outPort是否相等。如果不相等,执行步骤211;如果相等,说明交换机正常。

步骤211,交换机向控制器发出示警。

此架构中TableCheck模块的执行流程:

步骤31,控制器新建位数组Hsc。

步骤32,控制器使用多个哈希函数H

步骤33,控制器将哈希值h

步骤34,控制器下发流表项。

步骤35,TableCheck模块向控制器请求对应的流表Hash值Hsc。

步骤36,控制器下发Hsc给交换机。

步骤37,TableCheck模块使用OVS提供的ovs-ofctl接口获取交换机中的流表flowtables。

步骤38,TableCheck模块过滤掉流表中的变化字段得到过滤后的流表flowtable。

步骤39,TableCheck模块按照与控制器相同的算法,计算出交换机中流表flowtable对应的位数组Hs。

步骤310,TableCheck模块将控制器中的位数组Hsc与交换机计算出的位数组Hs比较,如果相同,表示交换机中的流表正确,如果不相同,执行步骤311。

步骤311,交换机向控制器发出示警。

步骤312,控制器重新下发流表。

4、根据权利要求1所述的一种基于TrustZone的OpenFlow交换机安全转发方法,其特征在于:此架构中ProCheck模块的执行流程:

步骤41,ProCheck_CA模块获取待检测模块的进程标识符,包括TableCheck模块和ForwardCheck模块。

步骤42,根据进程标识符查找对应的代码段地址。

步骤43,获取进程代码段的起止位置start_code和end_code。

步骤44,将代码段映射至可访问的内存区域,实现对代码段的读取。

步骤45,计算代码段对应的Hash值。

步骤46,将计算出的哈希值发送到ProCheck_TA模块。

步骤47,ProCheck_TA模块查看Init参数值,如果Init等于1,则为初始化阶段,执行步骤48,否则为校验阶段,执行步骤410。

步骤48,在安全存储Store中创建安全文件。

步骤49,将待检测模块对应的度量值保存至安全存储Store中。

步骤410,取出安全存储Store中待检测模块的可信基准值hash_base。

步骤411,比较待检测模块的度量值hash和可信基准值hash_base,如果hash等于hash_base,设置EM中的state为trusted,否则设置state为untrusted。

步骤412,将比较结果发送到ProCheck_CA模块。

步骤413,ProCheck_CA判断度量结果,如果state的值为trusted,表明模块可信,则不干扰待检测模块的正常运行,结束检测;否则,执行步骤414

步骤414,强制终止待检测模块的运行。

步骤415,上报控制器。

本发明提出了一种基于TrustZone的OpenFlow交换机安全转发方法。改变了传统的OpenFlow交换机架构,在OpenFlow交换机中添加了检测模块和监控模块,解决了交换机中的程序和流表在启动过程或者运行过程中被篡改的问题此外,本发明还基于设计的架构提出了动态度量机制和数据包转发抽样检测机制,保障交换机的安全运行。

附图说明

图1是本发明的总体架构示意图

图2是本发明ForwordCheck模块工作流程示意图

图3是本发明TableCheck模块工作流程示意图

图4是本发明ProCheck模块工作流程示意图

具体实施方式

以下将结合附图所示的具体实施方式对本发明进行详细描述。

图1是本发明基于TrustZone的OpenFlow交换机安全转发方法的总体架构图,如图1所示。

本发明利用Trustzone的双体系架构,在双体系架构中部署OpenFlow交换机,其中OpenFlow交换机我们使用Open vSwitch(OVS)来进行模拟,我们将OVS安装在REE中,并且添加了TableCheck、ForwordCheck、ProCheck_CA、ProCheck_TA和Store五个主模块:

1.TableCheck模块。位于REE中的TableCheck模块旨在验证交换机中的流表配置是否正确。

2.ForwordCheck模块。同样位于REE中的ForwordCheck模块的核心思想是确认交换机是否正确执行了发送数据包的规则。

3.ProCheck_CA模块。REE中的ProCheck_CA模块负责计算程序代码段的基准值,并发送给ProCheck_TA模块进行保存和校验。

4.ProCheck_TA模块。ProCheck_TA模块则位于TEE中,其任务是比对TEE中保存的程序基准值与ProCheck_CA模块动态获取的基准值,以判断OVS中的进程运行时代码是否被篡改。

5.Store模块。位于TEE中的Store模块主要用于存储度量摘要的基准信息。

在此架构下,ForwordCheck模块用来检测OpenFLow交换机中的Datapath是否按照流表正确转发数据包;TableCheck模块则用来保证ForwordCheck模块使用流表的正确性。然而在引入检测模块的同时,检测模块自身也会被攻击者攻击。因此我们设计了ProCheck模块,其中ProCheck_CA模块负责将检测模块的运行时代码度量值发送给ProCheck_TA模块,而ProCheck_TA则用来检测交换机中的运行时代码是否正确。

图2是ForwordCheck模块工作流程示意图,如图2所示。

为描述对度量过程,首先对交换机流表和端口等进行形式化描述,如下:

端口p被定义为(SwitchID,PortID),其中PortID∈{1,2,3,...n,⊥}表示编号为SwitchID交换机上的端口号。其中⊥符号表示丢弃端口。数据包头被定义为h,H被定义为交换机流表中匹配字段的集合,H

下面依据上述形式化语言描述,详细说明ForwordCheck模块的工作流程:

步骤21,交换机执行初始化操作,ForwordCheck模块创建一个LRU链表LRUList,其中key=(srcIP,dstIP,srcMAC,dstMAC,Inport),Fnum表示同一数据流的数据包进入交换机的次数。

步骤22,设置检测因子θ和σ。θ表示需要进行检测的数据包与无需检测的数据包的比值。σ表示同一数据流的抽样比率。

步骤23,当交换机接收到数据包m时,提取出对应的key。

步骤24,系统会根据1:θ的比例判断是否需要对数据包m进行抽样。如果是,执行步骤25,如果不是,跳过该数据包。

步骤25,判断数据包的key是否存在于LRUList,如果不存在,执行步骤26,如果存在,执行步骤27。

步骤26,在LRUList中添加对应的key,并将其Fnum设置为1,执行步骤27。

步骤27,判断数据包的key在LRUList中对应的Fnum值,如果(Fnum–1)%σ=0,执行步骤28,否则,跳过该数据包。

步骤28,使用匹配函数Func来获取数据包m的转发端口,其中,Func是一个匹配函数,接受数据包m和流表R作为输入,并返回数据包m的转发端口p。

p=Func(m,R)

步骤29,跟踪数据包m的转发,获取其实际的转发端口outPort。

步骤210,判断p与outPort是否相等。如果不相等,执行步骤211;如果相等,说明交换机正常。

步骤211,交换机向控制器发出示警。

图3是TableCheck模块工作流程示意图,如图3所示,包括:

步骤31,控制器新建位数组Hsc。

步骤32,控制器使用多个哈希函数H

步骤33,控制器将哈希值h

步骤34,控制器下发流表项。

步骤35,TableCheck模块向控制器请求对应的流表Hash值Hsc。

步骤36,控制器下发Hsc给交换机。

步骤37,TableCheck模块使用OVS提供的ovs-ofctl接口获取交换机中的流表flowtables。

步骤38,TableCheck模块过滤掉流表中的变化字段得到过滤后的流表flowtable。

步骤39,TableCheck模块按照与控制器相同的算法,计算出交换机中流表flowtable对应的位数组Hs。

步骤310,TableCheck模块将控制器中的位数组Hsc与交换机计算出的位数组Hs比较,如果相同,表示交换机中的流表正确,如果不相同,执行步骤311。

步骤311,交换机向控制器发出示警。

步骤312,控制器重新下发流表。

图4是本发明ProCheck模块工作流程示意图,如图4所示,包括:

为描述对度量过程,首先对被度量实体和数据交互过程进行形式化描述,如下:

定义1.1被测实体可以表示如下:

EM=

其中PID表示的是被测目标的进程标识符。state表示度量目标的状态,可以赋值trusted、untrusted或者null。当state为null时表示尚未度量目标的状态。data表示传输内容,用来传输被测目标的hash值或来自Store模块的可信基准值。

定义1.2度量值的传递可以表示如下:

这表示度量值从REE中的CA模块传输到TEE中的TA模块,Init可以取值0或者1,当Init取值为1时,表示CA首次发送该度量值数据给TA。这里EM的定义在定义1.1中已经给出,EM中的state设置为空,data中存储CA模块计算的哈希值。

定义1.3测量结果的传递可以表示如下:

这表示测量结果从TEE中的TA模块传输到REE中的CA模块,Init值设置为null,使用EM中的state表示应用是可信的还是不可信的。

定义1.4可信基准值的保存可以表示如下:

这表示可信基准值被TA模块保存到TEE的Store安全存储中,EM中的state在这里设置为null,data字段被设置为计算出的代码段度量值。

下面依据上述形式化语言描述,详细说明ProCheck模块的工作流程:

步骤41,ProCheck_CA模块获取待检测模块的进程标识符,包括TableCheck模块和ForwardCheck模块。

步骤42,根据进程标识符查找对应的代码段地址。

步骤43,获取进程代码段的起止位置start_code和end_code。

步骤44,将代码段映射至可访问的内存区域,实现对代码段的读取。

步骤45,计算代码段对应的Hash值。

步骤46,将计算出的哈希值发送到ProCheck_TA模块。

步骤47,ProCheck_TA模块查看Init参数值,如果Init等于1,则为初始化阶段,执行步骤48,否则为校验阶段,执行步骤410。

步骤48,在安全存储Store中创建安全文件。

步骤49,将待检测模块对应的度量值保存至安全存储Store中。

步骤410,取出安全存储Store中待检测模块的可信基准值hash_base。

步骤411,比较待检测模块的度量值hash和可信基准值hash_base,如果hash等于hash_base,设置EM中的state为trusted,否则设置state为untrusted。

步骤412,将比较结果发送到ProCheck_CA模块。

步骤413,ProCheck_CA判断度量结果,如果state的值为trusted,表明模块可信,则不干扰待检测模块的正常运行,结束检测;否则,执行步骤414。

步骤414,强制终止待检测模块的运行。

步骤415,上报控制器。

应当理解,虽然本说明书根据实施方式加以描述,但是并非每个实施方式仅包含一个独立的技术方案,说明书的这种叙述方式仅仅是为了清楚起见,本领域的技术人员应当将说明书作为一个整体,各个实施方式中的技术方案也可以适当组合,按照本领域技术人员的理解来实施。

以上所列出的一系列详细说明仅仅是针对本发明的可行性实施方式的具体说明,它们并非用于限制本发明的保护范围,凡是未脱离发明技艺精神所作的等效实施方式或变更均应包含在本发明的保护范围之内。

相关技术
  • 一种基于OpenFlow交换机的流表匹配方法和装置
  • 一种基于OpenFlow协议的OpenFlow交换机报文安全监控方法
  • 一种基于OpenFlow协议的OpenFlow交换机报文安全监控方法
技术分类

06120116593017