一种C语言程序数据泄露的检测方法及系统技术方案

技术编号:32461356 阅读:20 留言:0更新日期:2022-02-26 08:50
本发明专利技术公开了一种C语言程序数据泄露的检测方法及系统,该方法包括:接收携带有信息流标注的C语言程序;对所述信息流标注进行提取并解析,获取数据访问规则标签;基于预设规则,确定所有程序点的上下文安全级别;基于隐蔽存储通道两端的数据访问规则标签和所述程序点的上下文安全级别大小判断所述隐蔽存储通道是否存在数据泄露。本发明专利技术通过对指针自身及所指对象添加安全级别,并使用程序上下文安全级别跟踪程序控制结构,可以有效地对C语言程序中的隐蔽存储数据泄露进行检测。中的隐蔽存储数据泄露进行检测。中的隐蔽存储数据泄露进行检测。

【技术实现步骤摘要】
一种C语言程序数据泄露的检测方法及系统


[0001]本专利技术涉及程序语言数据安全
,具体涉及一种C语言程序数据泄露的检测方法及系统。

技术介绍

[0002]计算机技术的发展进步是一把双刃剑:一方面它使数据的处理、传播更加迅速、方便;另一方面也使数据机密性的保护面临更严峻的考验。数据机密性的保护是指程序不让窃密者通过其所能得到的输出数据等信息来获取或推断程序中的机密数据(如用户密码)。传统的解决安全问题的方法(例如访问控制、代码检测和加解密方法等)不能有效地处理程序中的隐蔽通道问题。基于语言的安全技术使用基于编程语言的理论和实现的技术(包括语义、类型、分析和验证等)来解决安全问题。自二十世纪九十年代以来,基于语言的信息流安全分析技术的研究一直成为国际上的研究热点。
[0003]这些研究大多针对简单的模型语言。目前实用的信息流安全编程语言主要有美国的Jif和法国的Flow Caml。这两种语言分别以Java和OCaml为基础,对传统的类型系统进行扩展,用以描述信息流安全属性,设计独立于普通类型系统的信息流类型系统对信息流安全进行检查。
[0004]Jif和Flow Caml都是基于信息流类型系统对信息流安全进行检查,即对普通类型系统的进行扩展(普通类型上增加安全级别标识)。因为这些标识作为语言的组成部分,所以无法直接使用Java语言或Ocaml语言编译器,需要设计专门的编译器。
[0005]Jif分析的对象是Java语言。Java语言没有指针概念,因此Java程序中不会存在基于别名的共享存储通道。Flow Caml分析的对象是Ocaml语言。Ocaml语言没有复杂的跳转语句,因此Ocaml程序中不会存在基于跳转的隐式存储通道。C语言的指针和跳转语句使用极其灵活,方便编程的同时也会引起比Java和Ocaml更严重的数据泄露,C语言程序中存在下列隐蔽存储数据泄露通道:
[0006]1、直接赋值的显式存储通道;例如赋值l=h。窃密者可以通过1直接获得数据h。
[0007]2、基于程序控制结构的隐式存储通道;例如if(h>0)l=1 else 1=0。窃密者同样可以通过1推断出有关h的信息。
[0008]3、基于别名的共享存储通道。例如
[0009][0010]窃密者通过判断r1存储值是否发生变化,就能推断有关h的信息。
[0011]基于C语言程序中存在的上述隐蔽存储数据泄露通道,亟需研究一种检测C语言程序数据泄露的方法。

技术实现思路

[0012]针对上述现有技术存在的问题,本专利技术提供了一种C语言程序数据泄露的检测方法及系统,实现对基于跳转的隐式存储通道的数据泄露检测和对基于别名的共享存储通道的数据泄露检测,该技术方案如下:
[0013]一方面,提供了一种C语言程序数据泄露的检测方法,该方法包括:
[0014]接收携带有信息流标注的C语言程序;
[0015]对所述信息流标注进行提取并解析,获取数据访问规则标签;
[0016]基于预设规则,确定所有程序点的上下文安全级别,所述程序点的上下文安全级别表征程序点所在控制结构反映出来数据的访问规则信息;
[0017]基于隐蔽存储通道两端的数据访问规则标签和所述程序点的上下文安全级别大小判断所述隐蔽存储通道是否存在数据泄露。
[0018]另一方面,提供了一种C语言程序数据泄露的检测系统,该系统包括:
[0019]C语言程序接收模块,用于接收携带有信息流标注的C语言程序;
[0020]信息流标注解析模块,用于对所述信息流标注进行提取并解析,获取数据访问规则标签;
[0021]程序点上下文安全级别确定单元,用于基于预设规则,确定所有程序点的上下文安全级别,所述程序点的上下文安全级别表征程序点所在控制结构反映出来数据的访问规则信息;
[0022]数据泄露分析模块,用于基于隐蔽存储通道两端的数据访问规则标签和所述程序点的上下文安全级别大小判断所述隐蔽存储通道是否存在数据泄露。
[0023]本专利技术的一种C语言程序数据泄露的检测方法及系统,具备如下有益效果:
[0024]1、本专利技术的一种C语言程序数据泄露的检测方法,采用信息流标注对数据的访问规则进行描述,并以C语言注释的形式存在程序中,信息流分析完毕后,可直接使用现有的C语言编译器编译。
[0025]2、通过对C程序中跳转语句的使用增加一些约束,使得程序中跳转操作较为规矩,
使得对跳转语句所在程序点的程序上下文对后续语句的影响的分析简单,有助于对基于跳转的隐式存储通道进行检测。
[0026]3、通过先确定跳转语句所在程序点的上下文安全级别,再分析跳转语句对后续程序点上下文安全级别的影响,得到函数体内所有程序点的上下文安全级别,方便对基于控制结构的隐式存储通道进行检测。
[0027]4、考虑到C程序中的别名主要由指针引起,对C指针进行相关操作时,分别对指针自身及所指对象的安全级别进行适当的约束,对指针所指对象和指针本身添加访问规则标签,可以有效地检测基于别名的共享存储通道,更精确地分析指针相关操作引起的别名数据泄露。
[0028]5、对于C程序中局部变量的数据访问规则标签,既可以人工标注,也可以由局部变量访问规则标签自动推断模块自动推断,提高了访问规则标签标注效率。
附图说明
[0029]图1是本申请实施例中一种C语言程序数据泄露的检测方法的流程图;
[0030]图2是本申请实施例中一种C语言程序数据泄露的检测系统的结构框图。
具体实施方式
[0031]为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
[0032]以下对本申请实施例中的部分用语进行解释说明,以便于本领域技术人员理解。
[0033](1)机密性:数据不泄露给非授权用户、实体或进程,或供其利用的特性。对抗对手的被动攻击,保证信息不泄露给未授权的人。
[0034](2)完整性:数据未经授权不能进行改变的特性。即信息在存储或传输过程中保持不被修改、不被破坏或丢失的特性。对抗对手主动攻击,防止信息被未经授权的篡改。
[0035](3)程序信息流安全:程序能保护重要数据的机密性和完整性。
[0036](4)隐蔽通道:一种能够从高敏感级向低敏感级发送信息的机制。
[0037]下面结合附图及具体实施例对本申请作进一步详细的说明。
[0038]Jif和Flow Caml都是基于信息流类型系统对信息流安全进行检查,即对普通类型系统的进行扩展(普通类型上增加安全级别标识)。因为这些标识作为语言的组成部分,所以无法直接使用Java语言或Ocaml语言编译器,需要设计专门的编译器。
[0039]本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种C语言程序数据泄露的检测方法,其特征在于,包括:接收携带有信息流标注的C语言程序;对所述信息流标注进行提取并解析,获取数据访问规则标签;基于预设规则,确定所有程序点的上下文安全级别,所述程序点的上下文安全级别表征程序点所在控制结构反映出来数据的访问规则信息;基于隐蔽存储通道两端的数据访问规则标签和所述程序点的上下文安全级别大小判断所述隐蔽存储通道是否存在数据泄露。2.根据权利要求1所述的一种C语言程序数据泄露的检测方法,其特征在于,所述携带有信息流标注的C语言程序,信息流标注以C语言注释的形式存在程序中,具体包括:(1)计算主体和代理关系:计算主体的定义标注在允许全局声明的地方,计算主体的代理关系紧跟在计算主体的定义的后面;(2)标签变量:标签变量在允许全局声明的地方定义;(3)函数信息流标签:描述函数的形参、返回值及副作用的数据访问规则,所述函数信息流标签插在函数声明或定义之前;(4)局部变量信息流标签,所述局部变量信息流标签插在局部变量定义处;(5)降密标签:所述降密标签包括函数权限声明和降密语句;其中,在数据类型为指针时,所述指针的信息流标注包括指针所指对象的信息流标签和指针自身的信息流标签。3.根据权利要求1所述的一种C语言程序数据泄露的检测方法,其特征在于,所述对所述信息流标注进行提取并解析,获取数据访问规则标签,还包括:对于携带有信息流标注的C语言程序中未添加信息流标注的局部变量,通过自动推断得到未添加信息流标注的局部变量的数据访问规则标签;所述通过自动推断得到未添加信息流标注的局部变量的数据访问规则标签,包括:约束方程提取:给函数体中没有数据访问规则标签的每个局部变量赋予一个新的标签变量,根据函数体中局部变量读写使用限制得到所述标签变量的约束方程,所述约束方程具有下列形式:L1<:L2,其中<:表示偏序关系,L1和L2是访问规则标签和标签变量的最小上界运算表达式;约束方程范式化步骤,范式化约束方程为P
1i
<:其中P
1i
是基本访问规则或标签变量;约束方程求解:采用迭代算法计算局部变量的标签变量的取值,包括如下步骤:(1)将待推导标签变量初始化为标签最大值;(2)对约束集合中的约束依次进行遍历,当遇到不满足的约束时,如果约束的左边是待推导的标签变量,则修改所述标签变量的取值为当前值和当前值的最大下界,其他标签变量的取值保持不变,进入步骤(3);如果约束集合中所有不满足的约束的左边不是待推导的标签变量,则得到矛盾,报告错误;(3)重复步骤(2),直至所有约束都满足或得到矛盾。4.根据权利要求1所述的一种C语言程序数据泄露的检测方法,其特征在于,所述基于预设规则,确定所有程序点的上下文安全级别之前,还包括:
对程序中的跳转语句和判断表达式的使用进行约束条件检测,在程序中的跳转语句和判断表达式的使用满足约束条件时,进入下一步,所述约束条件用于使程序中跳转操作更规矩,所述约束条件包括:(1)如果判断表达式包含短路计算逻辑算符,则该表达式不允许包含函数调用和赋值语句;(2)跳转语句不得跳转到选择和循环语句中;(3)逆向跳转语句构成循环,不得有其它跳转语句跳转到这个循环内部;(4)循环语句内不能有逆向goto语句跳出;(5)switch语句每个分支必须以跳转语句结尾;(6)不允许语句表达式。5.根据权利要求4所述的一种C语言程序数据泄露的检测方法,其特征在于,所述基于预设规则,确定所有程序点的上下文安全级别,包括:将函数体内所有语句程序点的上下文安全级别都初始化为标签最小值;确定跳转语句所在程序点的程序上下文安全级别;分析跳转语句对跳转语句所在程序点的后续程序点的程序上下文安全级别的影响,调整跳转语句所在程序点的后续程序点的程序上下文安全级别。6.根据权利要求5所述的一种C语言程序数据泄露的检测方法,其特征在于,所述确定跳转语句所在程序点的程序上下文安全级别,包括:(1)对于条件语句,将条件语句的两个分支的上下文安全级别确定为:条件语句的上下文安全级别和条件表达式访问规则标签的最小上界;(2)对于循环语句,判断循环语句循环体中是否存在跳转语句且跳转语句非continue,如果是,则进入步骤(3),否则,进入步骤(4);(3)将循环体所包含的跳转语句的上下文安全级别的最小上界作为循环语句的新的上下文安全级别重新计算所述循环体各个程序点的上下文安全级别,重复该步骤,直到所述循环体各个程序点的上下文安全级别不再变化为止,获得跳转语句所在程序点的程序上下...

【专利技术属性】
技术研发人员:黄海军杜准王立东
申请(专利权)人:安徽中科国创高可信软件有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1