一种新型分析信息流的方法

文档序号:7839936阅读:195来源:国知局
专利名称:一种新型分析信息流的方法
技术领域
本发明是属于信息安全技术领域,涉及一种信息流分析技术应用于系统进行隐通 道分析的方案,具体地说涉及一种基于系统源代码搜索隐通道的信息流分析方法。
背景技术
自隐通道问题提出以来,各国的信息安全专家,以及计算机、数学、通讯等方面的 相关学者通过广泛地研究发现,隐通道在信息安全方面特别是信息的机密性泄露方面具有 一定的危害性。搜索出系统中存在的隐通道是进行隐通道分析工作的前提和基础。在众多 隐通道搜索方法中,信息流分析法较为弓I人关注。信息流分析法是最早提出的隐通道搜索方法,分为语法信息流方法和语义信息流 方法。Derming的信息流格模型是语法信息流方法的典型代表。此方法的核心思想是,任 何对系统安全策略的违反(包含隐通道),都将体现为对“格(Lattice)”定义的破坏。通 常,语法信息流分析方法的分析步骤是(1)将信息流附加在每条语句之后。以赋值语句a =b为例,产生由b到a的信息流,用a —b表示。(2)定义安全信息流策略,如果有信息 流a —b,则a的安全级必须支配b的安全级。(3)将流策略应用于形式化顶级描述或源代 码,生成信息流公式,例如a : = b语句的流公式为SL(a)彡SL(b),其中SL(a)和SL(b)分 别表示变量a和b的安全级。(4)证明信息流公式的正确性,如果无法证明某个流公式的正 确性,则需要进一步对语句进行语义分析。该方法的优点在于不会漏掉可能产生隐通道的 非法信息流,但同时也产生大量的伪非法流,需要通过手工的语义分析消除伪非法流。此后,Tsai等人对信息流分析方法作了很大的改进,增加了语义分析,提出了一种 基于语义信息流分析的隐通道搜索方法,即一种语义信息流方法。此方法的核心思想是(1)分析编程语言的语义、代码和内核中使用的数据结构,发现变量的可见性和可修改性;(2)解决变量的别名问题,确定变量的间接可修改性;C3)对源代码进行信息流分析,确定 变量的间接可见性。改进的语义信息流方法可以发现大量伪非法流。信息流分析法既可以应用于系统形式化顶级描述,也可以应用于系统源代码进行 隐通道分析。对于一些形式化语言,已经有了成功的自动信息流分析工具,能够对系统的 形式化顶级描述作比较完全的信息流分析。但形式化描述与具体实现的系统源代码之间 总是有差别的,而目前比较有影响的应用于系统源代码的信息流自动分析工具仅见He与 Gligor研制的工具。目前基于系统形式化顶级描述分析信息流的隐通道搜索方法缺陷为简化工作量、得到较高的工作效率,目前主要是基于系统顶级描述进行系统中 的隐通道搜索工作。因为与系统源代码相比较,系统顶级描述简单易懂,对分析人员的要求 相对较低,从而省去很多繁琐的工作。然而,尽管这样可以得到较高的工作效率,但由于系 统顶级描述并没有真实地体现系统实现的细节,所以搜索结果的精度并不高,会出现漏报 和错报的情况。目前基于系统源代码分析信息流的隐通道搜索方法缺陷
由于源代码复杂难懂,直接针对系统源代码分析信息流的工作量很大,目前这类 搜索方法缺乏行之有效的自动化工具,需要辅之以手工操作分析源代码中的信息流,对分 析人员的要求相当高,显然对于较大规模的系统来说,工作效率低,容易出错。He与Gligor 研制的自动化工具应用了系统强制安全模型在源代码中的解释,不能区分伪非法流与真实 非法流。

发明内容
本发明的目的是解决基于系统源代码搜索隐通道的问题。基于程序设计语言语 义,设计一套系统源代码中信息流的描述方法,结合共享资源矩阵法,提出一种基于系统源 代码搜索隐通道的信息流分析方法。本发明方法利用二叉树结构来描述系统源代码中的信息流,通过遍历树将这些信 息存放在直观、易于理解的信息流向图中,为搜索隐通道提供信息流分析结果,再以此作为 输入,构造共享资源矩阵,分析系统中的隐通道。本发明的技术方案是一种基于系统源代码搜索隐通道的信息流分析方法,包括 下列步骤(1)扫描系统源代码借助程序设计语言编译系统中的词法分析程序,扫描系统源代码,分别识别出源 代码中的函数和函数中的语句、变量;根据扫描程序识别出的函数以及函数调用语句,确定 函数间的调用关系,给出每个函数的函数依赖集。(2)构造信息流树根据扫描程序识别出的能产生信息流的语句和变量,作为信息流分析的输入,对 语句中的信息流进行分析,采用一种二叉树结构来存放语句中的信息流信息,称之为“信息 流树”。信息流树的构造方法如下针对能产生信息流的各类语句,依据语句信息流规则,分别给出各类语句树段的 构造规则,并且定义了由语句树段生成函数信息流树的规则;当扫描程序识别出某类信息流语句时,根据此类语句的信息流树构造规则,先生 成语句树段,用来记录此语句中的信息流;再根据函数信息流树的构造规则,由函数中各语句的信息流树生成函数信息流 树,从而获得各个函数中的信息流。(3)信息流树剪枝通过分析函数内部信息流的特点,结合信息流的传递性,给出信息流树剪枝的依 据;利用剪枝依据,将函数中与隐通道分析无关的信息流树枝剪掉,得到只记录函数 中与共享变量相关的信息流信息。(4)生成信息流向图根据遍历算法,对函数信息流树进行遍历,生成函数的信息流向图,图中记录函数 中共享变量的可见性和可修改性信息,即信息流分析的结果。(5)生成共享资源矩阵并搜索隐通道根据函数的信息流向图,以函数依赖集为单位,获得依赖集中函数间的共享变量可见性和可修改性信息,并生成用于共享资源矩阵隐通道搜索方法进行隐通道分析的矩阵 结构;然后再以共享资源矩阵作为输入,搜索隐通道,输出系统中存在的隐通道序列。为说明信息流树结构,这里介绍几个和信息流树相关的定义。①结点信息流树中的最小单位,对应着函数各语句中的语句关键字(如if, while等)、运算符(如“=”)及变量。为能描述出所有的信息流,我们定义了三种结点 “stmt”结点为语句结点;“var”结点为变量结点,记录信息流中源变量和目标变量的信息 (如变量名,变量类型等信息);“nullstmt”结点没有任何意义,仅用于嵌套控制语句中控 制语句紧邻出现的情况,用此结点作为一个过渡结点。②语句树段结点按照一定的规则所构成的用来描述一条语句中信息流的二叉 树,称为语句树段。对函数中每一条语句,都要构造其语句树段,用来描述语句中的信息流。③信息流树也是一种二叉树,由若干个语句树段连接而成,用来描述一个函数中 的信息流。信息流树对应着函数,而构成信息流树的这些语句树段则分别对应着函数中的 各条语句。对于上述系统源代码扫描步骤,进一步说明如下为实现一个基于系统源代码的隐通道搜索工作的自动化,首先要解决的是自动扫 描并分析系统源代码,根据扫描结果构造出用于信息流分析的函数信息流树,并且确定函 数间的相互调用关系,即函数依赖集。为达到这一目的,考虑到一个语言的编译程序可以对 源代码进行扫描并分析,借助高级语言编译系统中的词法分析程序,来完成对系统源代码 的扫描。词法分析器以源程序作为输入,将其转化为记号输出。记号是指从源程序读入的 一组字符串(如变量名、关键字、常数),通过词法分析器转化输出的形式,而读入的这一组 字符串就称为记号的一个词素。程序设计语言中常把标识符(包括变量名、数组名、函数名 等等)、关键字、操作符、常量、文字串和标点符号作为记号处理。一个记号往往会对应多个 词素,例如,高级语言中常用id作为标识符的记号,如pi、D2这两个不同的变量名,在以记 号形式输出时都表示为id,这样不足以区分不同的标识符。因此,词法分析器必须为这个记 号提供附加的信息,称之为记号的属性,与记号构成一个二元式输出。上述信息流树构造步骤进一步包括如下步骤首先分类定义程序设计语言的语句信息流规则(以C语言为例),然后依据语句信 息流规则,给出各类语句树段的构造方法;在此基础上,构造函数信息流树。(1)所述语句信息流规则在Tsai和Gligor给出的简单信息流规则的基础上,针对高级语言中语句各自的 特点,将语句分为赋值语句、函数返回值语句、函数调用语句、控制语句和嵌套控制语句五 类,分别给出它们的信息流规则。①赋值语句信息流规则规则1. Iva = vb ;则有信息流vb_ > va ;规则1. 2va—或 va++ ;则有信息流va_ > va ;规则1. 3va = vb ;且va,vb均为指针,则有信息流vb_ > va, va- > vb ;规则1. 4va = &vb ;且 va 为指针,则有信息流vb_ > va, va- > vb ;规则1. 5va = vb op. ..op vn ;其中op代表运算符,则有信息流vb_ > va,...,vn- > va0②函数返回值语句信息流规则规则2. Ireturn (va);则有信息流va_ > *,其中,*代表语句所在的函数;规贝Ij 2. 2return (va op. . . op vn);贝Ij有信息、流:va- > 氺,...,vn_ > 氺。③函数调用语句信息流规则规则3. Iva = F (χ);其中F (χ)代表函数,则有信息流x_ > va ;规则3. 2F(x);则有χ- > *,其中*代表语句所在的函数;规贝丨J3. 3va = F(xl, . . . , xn);则有信息流:xl_ > va, . . . , xn- > va ;规贝丨J 3. 4F(xl,…,xn);则有 xl_ >*,···,xn- > *。④控制语句信息流规则规则4. 1对于下面四条语句if / while (va op-com K) vb=m; if / while (va op-com K) vb++;if / while (va op-com K) vb—;if / while (va op-com K) Vb=F(X)JiJ^thl: va->vb;规贝丨J 4. 2if/while(va op_com K) {vb = ml ;· . . ;vn = mn ;};则有信息流:va- > vb, . . . , va- > vn ;规贝Ij 4. 3switch (va) (case :vb = ml ;· . . ;default :vn = mn ;);贝Ij 有信息流 va- > vb, . . . , va- > vn ;规则 4. 4if/whi Ie (va op_com K) return ;则有信息流:va- > * ;规贝 1J 4. 5switch (va) (case :return ;. . . ;default :return ; );则有信息流va_ >氺;规贝丨J 4. 6if/while(va op_com K) {vb = ml ;…;return ;};则有信息流:va- > vb, . . . , va- > 氺;规贝Ij 4. 7switch (va) (case :vb = m ;. . . default :return ;);贝Ij有信息、流va_ > vb, . . . , va- > 氺;规贝丨J4. 8if/while(F (χ) op_com K) va = m ;则有信息流:x_ > va ;规则4. 9if/while(F (χ) op_com K) return ;则有信息流χ- > * ;规贝丨J4. 10 if/while (F (χ) op_com K) {va = ml ;. . . vn = mn ;};则有信息流:x_ > va, . . . , χ- > vn ;规则4· 11 if/while (F (χ) op_com K) {va = ml ;· · · return ;};则有信息流x_ > va, . . . , χ- > * ;规贝丨J4. 12if/while(F(xl,. . ·,xn)op_com K) {va = ml ;· · · };则有信息流:xl_ >va, xl_ >...,..., xn- > va, xn- > ...;
规贝丨J 4. 13if (va op_com K) {vb = m ;· vb, . . . ;va- > vc...; · } else {vc = η ;· · · };贝Ij有信息流va_ >
规则 4. 14if/while ((va op_com Kl)op_log. . . op_log(vn op一com Kn)) {vm = m ;. . . };则有信息流:va- > vm, va- >...,..., vn- > vm, vn- > · · ·。规贝Ij 4. 15va = (vb op. . . vn) ? vc :vd ;贝U有信息、流vb_ > va, . . . , vn- > va。⑤嵌套控制语句信息流规则规则5.权利要求
1.一种基于系统源代码搜索隐通道的信息流分析方法,其特征在于,所述信息流分析 方法包括下列步骤(1)借助程序设计语言编译系统中的词法分析程序,扫描系统源代码,分别识别出源代 码中的函数和函数中的语句、变量;(2)根据扫描程序识别出的函数以及函数调用语句,确定函数间的调用关系,构造语句 树段,给出每个函数的函数依赖集;(3)根据扫描程序识别出的能产生信息流的语句和变量,作为信息流分析的输入,构造 函数信息流树,并进行剪枝;(4)遍历函数信息流树,输出每个函数的信息流向图;(5)根据函数依赖集和它的信息流向图,以函数依赖集为单位,获得依赖集中函数间的 共享变量可见性和可修改性信息,生成共享资源矩阵;(6)以共享资源矩阵作为输入,搜索隐通道,输出系统中存在的隐通道序列。
2.根据权利要求1所述的分析方法,其特征在于,所述扫描系统源代码步骤中具体采 用词法分析程序对系统源代码进行扫描。
3.根据权利要求1所述的分析方法,其特征在于,所述语句信息流规则中,将语句分为 赋值语句、函数返回值语句、函数调用语句、控制语句和嵌套控制语句五类,分别给出它们 的信息流规则。
4.根据权利要求1所述的分析方法,其特征在于,所述语句树段构造规则是语句信息 流的源变量信息始终记录在左孩子变量结点中,而语句信息流的目标变量信息始终记录在 右孩子变量结点中。
5.根据权利要求1所述的分析方法,其特征在于,所述剪枝算法包括以下步骤(1)对函数中的语句,构造语句树段,若语句为简单语句,则按步骤(2)处理;若语句为 嵌套控制语句,则按步骤C3)处理;(2)对函数中简单语句树段进行遍历,遍历的过程中查看是否需要剪枝遍历源变量 结点时,按步骤⑷处理;遍历目标变量结点时,按(5)处理;遍历非变量结点时,无需任何 处理;(3)函数中嵌套控制语句的信息流树进行遍历,遍历的过程中查看是否需要剪枝遍 历目标变量结点时,按步骤(5)处理;遍历源变量结点时,查看以它为源变量的目标变量结 点若有某一目标变量结点与其记录的变量相同,则无需任何处理;否则,按步骤⑷处理; 遍历非变量结点时,无需任何处理;(4)对源变量结点,考察已生成的函数信息流树中的每一个变量结点,若其中某一变 量结点是它父结点的右孩子,且与该源变量结点记录的是同一变量,则分以下两种情况处 理①记录的是局部变量,则将这一变量结点的父结点的左子树复制,并替换该源变量结占.^ w\ ②记录的是全局变量,则将这一变量结点的父结点的左子树复制,并作为该源变量结 点的左子树;(5)对目标变量结点,考察已生成的函数信息流树中的每一个变量结点,若其中某一变 量结点是它父结点的右孩子,且与该结点记录的是同一变量,则分以下三种情况处理①这一变量结点有左子树,则用“nullstmt”类型结点替换它;②这一变量结点无左子树,且它的父结点和右孩子结点均为语句结点,则将它所在的 语句树段从树中删除;③这一变量结点无左子树,且它的父结点或右孩子结点不是语句结点,则仅将此变量 结点从信息流树中删除;(6)将经过剪枝处理的语句树段连到函数信息流树中;(7)对函数中每一条语句,重复以上步骤,直到函数体结束;(8)对得到的函数信息流树考察其所有变量结点,若某一变量结点是它父结点的左孩 子,且结点中记录的是局部变量,则将该变量结点从树中删除;(9)对得到的函数信息流树考察其每一个语句树段,对简单语句树段,按步骤(10)处 理;对嵌套控制语句树段,按步骤(11)处理;(10)对简单语句树段,若其中某一变量结点是它父结点的右孩子,且它记录的是局部 变量,则分以下两种情况处理①这一变量结点的父结点和右孩子结点均为语句结点,则将此树段从信息流树中删除;②这一变量结点的父结点或右孩子结点是变量结点,则仅将此结点从语句树段中删除;(11)对嵌套控制语句树段,若其中某一变量结点是它父结点的右孩子,且它记录的是 局部变量,则分以下两种情况处理①这一变量结点的父亲结点和右孩子结点都不是变量结点,则用null类型结点代替 此结点;②这一变量结点的父亲结点或右孩子结点是变量结点,则仅将此右子树结点从语句树 段中删除。
6.根据权利要求1所述的分析方法,其特征在于,由函数信息流树生成信息流向图的 方法如下(1)信息流树线索化在构造语句树段时,令源变量结点的右子树指针始终指向其后生成的目标变量或null 类型结点,并令目标变量结点的右子树指针也始终指向其后生成的结点;(2)遍历线索化的信息流树,生成信息流向图 ①遍历语句树段寻找目标变量的过程a)对树中某一语句树段中的一个源变量结点,设有一指针Q,令其指向该源变量结点 的右指针指向的结点;b)如果Q指向结点是变量类型结点,表示该结点记录的是目标变量,找到一条信息流, 将信息流信息写入信息流向图中;c)若此结点左指针不为空,则Q指向其左指针指向的结点,跳至步骤b);若其左指针为 空,则Q指向其右指针指向的结点。若Q为空,或Q指向结点为语句结点,或Q指向结点与 源变量结点不在同一语句结点下,则此次遍历结束;d)如果Q指向结点是语句类型结点,则Q指向它的右指针指向的结点,跳至步骤b);e)如果Q指向结点是null类型结点,表示则Q指向它的左子树结点,跳至步骤b);②寻找源变量结点过程设P为指向信息流树中某一源变量结点的指针,假设根据上述遍历语句树段中目标变 量结点的过程,已经找出了所有以P指向结点为源变量的信息流的目标变量结点,接下来 要找到树中下一个源变量结点,进行遍历,则在树中寻找下一个源变量结点的过程如下a)如果P的左指针不为空,则P指向它的左指针指向的结点,此结点即为要找的下一个 源变量结点,寻找过程结束;b)如果P的左指针为空,则P指向它的右指针指向的结点;c)跳至第f)步,直至P的左指针不为空;d)指向它的左指针指向的结点;e)如果P指向结点是语句结点,则P指向它的左指针指向的结点,此结点即为要找的下 一个源变量结点,寻找过程结束。
全文摘要
一种基于系统源代码搜索隐通道的信息流分析方法,在信息流分析过程中利用信息流树结构来描述系统源代码中的信息流,通过遍历信息流树将这些信息存放在直观、易于理解的信息流向图中,从而为搜索隐通道提供信息流分析结果,再以信息流向图作为输入,构造共享资源矩阵,搜索并分析系统中的隐通道。本发明方法可以提高隐通道搜索工作的精度。
文档编号H04L29/06GK102043925SQ20091023388
公开日2011年5月4日 申请日期2009年10月23日 优先权日2009年10月23日
发明者李骁淳, 鞠时光 申请人:镇江雅迅软件有限责任公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1