数据流分析方法和装置制造方法

文档序号:6518127阅读:433来源:国知局
数据流分析方法和装置制造方法
【专利摘要】本发明涉及一种数据流分析方法和装置。公开一种方法,所述方法包括:使用适合于程序污染分析的程序数据流模型,利用基于所述程序的堆模型从污染源到所述堆中的实体来跟踪信息。执行所述跟踪以便所述信息与污染传播相关,并且针对所述堆中的所述实体以字段敏感的方式执行所述跟踪。所述方法包括:基于所述跟踪的输出,执行数据流分析以便确定从所述污染源通过数据流路径到使用所述污染的汇的污染流。
【专利说明】数据流分析方法和装置
【技术领域】
[0001]本发明一般地涉及程序代码的静态分析,更具体地说,涉及数据流分析。
【背景技术】
[0002]本节旨在为下面公开的本发明提供背景或上下文。此处的描述可以包括概念,这些概念可以被贯彻,但不一定是先前构想、实现或描述的概念。因此,除非在此另外明确指明,否则本节中描述的内容不是本申请中的描述的现有技术,并且不认为通过包括在本节中而成为现有技术。
[0003]污染分析包括搜索从不可信输入点(源)到敏感消费者(汇(sink))的数据流。在静态版本的污染分析中,检查程序而不执行构成程序的代码。相反,创建程序的模型。这种模型可以包括通常使用流图表示的数据流,该流图是在程序执行期间可能遍历程序的所有路径的表示。这些数据流是潜在的安全问题,除非每个数据流经过致使数据安全的操作(例如杀毒器)。给定调用图G,静态污染分析算法典型地包括两个阶段:
[0004]I)遍历G以便在代码中查找源、汇和杀毒器:
[0005]?源是通过字段读取指令获得的值,或者是从调用返回到某些方法(称为源方法)的值;
[0006]?汇可以是 某些对象的字段或者是给定方法(称为汇方法)的参数;以及
[0007]?杀毒器只是方法。
[0008]2)从源开始执行过程间数据流分析,以便判定是否具有到达汇而未由杀毒器拦截的污染流。该分析以源结构定义的变量为种子。即,字段读取指令和源方法使用污染值设置种子,并且通过数据流分析遵循污染值以便确定污染流。
[0009]尽管这种分析是有利的,但这些常规分析仍然具有问题。可以出现的一个问题包括混淆(aliasing),其中在一个实例中,多个对象的多个字段引用同一值。混淆还可以涉及堆中的关系,即,同一对象的多个本地名称。众所周知,堆是程序用于动态存储器分配的存储器区域。就污染分析而言,用于仿真正在运行的程序的模型还仿真该程序的堆。堆中的混淆将存在问题,因为如果具有多个本地名称的对象被污染,则所有的多个本地名称也应该标记为被污染。但是,许多污染分析工具没有考虑或者不能处理堆中的混淆。

【发明内容】

[0010]在一个示例性实施例中,公开一种方法,所述方法包括:使用适合于程序污染分析的程序数据流模型,利用基于所述程序的堆模型从污染源到所述堆中的实体来跟踪信息。执行所述跟踪以便所述信息与污染传播相关,并且针对所述堆中的所述实体以字段敏感的方式执行所述跟踪。所述方法包括:基于所述跟踪的输出,执行数据流分析以便确定从所述污染源通过数据流路径到使用所述污染的汇的污染流。
[0011]在另一示例性实施例中,一种装置包括:被配置为使用适合于程序污染分析的程序数据流模型,利用基于所述程序的堆模型从污染源到所述堆中的实体来跟踪信息的模块,其中执行所述跟踪以便所述信息与污染传播相关,并且针对所述堆中的所述实体以字段敏感的方式执行所述跟踪;以及被配置为基于所述跟踪的输出,执行数据流分析以便确定从所述污染源通过数据流路径到使用所述污染的汇的污染流的模块。
【专利附图】

【附图说明】
[0012]图1是示出跟踪被污染访问路径的代码段;
[0013]图2是没有堆问题的代码段;
[0014]图3是具有堆问题的代码段;
[0015]图4是图3的代码段的堆图的可视化;
[0016]图5是根据本发明的示例性实施例的示例性逻辑流程图的框图,其示出示例性方法的操作、包含在计算机可读存储器中的计算机程序指令的执行结果和/或在硬件中实现的逻辑执行的功能;
[0017]图6是根据本发明的示例性实施例的示例性逻辑流程图的框图,其示出图5中的方框的示例性操作,并且进一步示出示例性方法、包含在计算机可读存储器中的计算机程序指令的执行结果和/或在硬件中实现的逻辑执行的功能;以及
[0018]图7是适合于执行本发明的示例性实施例的系统的框图。
【具体实施方式】
[0019]通过参考图1-7描述此处的示例性实施例。具体地说,对图5和6的某些方框的描述参考其它附图。图5是根据本发明的示例性实施例的示例性逻辑流程图的框图,其示出示例性方法的操作、包含在计算机可读存储器中的计算机程序指令的执行结果和/或在硬件中实现的逻辑执行的功能,图6是图5中的一个方框执行的操作的类似框图。
[0020]首先,通过对程序进行静态建模(S卩,不执行程序),执行污染分析以便确定被污染数据流。可以执行污染分析以便输出通过程序的被污染路径集合。可以进一步执行污染分析以便例如检查被污染路径集合,并且例如通过判定任何被污染路径是否具有针对被污染数据执行的正确操作(例如,在正确位置),针对被污染路径执行额外分析以致使数据安全。这种额外分析将减少被污染路径的数量。
[0021]如上所述,无论是否执行污染分析,必须以某种方式从污染源到使用污染的汇来跟踪污染。本公开的其余部分假设已经创建(图5的方框510)程序的数据流模型,该模型适合于污染分析并且包含数据流路径。此类数据流模型包括有向图,例如调用图或超图。注意,方框515在下面描述。
[0022]堆中的实体和调用图中的数据流之间具有关系。具体地说,堆中的实体(例如局部变量和引用对象的字段)可能是数据流的一部分,因此可以传递被污染信息。但是,因为堆中的混淆,其中混淆包括同一对象在堆中的多个本地名称,除非以字段敏感方式跟踪和管理混淆,否则可能无法找到所有受影响的数据流。例如,变量P和r可以引用同一对象,但在典型的堆分析中,它们可以具有相同的本地名称,因此污染可能仅与变量之一关联。
[0023]因此,在图5的方框520中,使用堆模型从污染源到堆中的实体(例如,局部变量和引用对象的字段)来执行信息跟踪。执行跟踪以便信息与污染传播相关,并且以字段敏感的方式执行跟踪。本公开的下一部分提供有关该方框的其它详细信息。[0024]一种处理污染的方式是通过访问路径。为了发现易受攻击的数据流路径,污染分析应维护程序的存储不可信值的所有堆位置集合。一种执行该操作的单纯方式是对整个堆(包括所有有利位置)进行显式建模,然后在分析期间的每个点处跟踪堆的哪些部分被污染。通常,该解决方案极其昂贵,因此也不可扩展,例如0.Tripp、M-Pistoia, S.J.Fink、M.Sridharan 和 0.Weisman 的 TAJ:Effective Taint Analysis of Web Applications(TAJ:ffeb应用的有效污染分析)(2009年ACM SIGPLAN编程语言设计和实现会议的会议记录,2009年)中所述。此处的示例性解决方案使用堆的无存储视图(参见A.Deutsch的AStoreless Model of Aliasing and Its Abstractions Using Finite Representationsof Right-regular Equivalence Relations (使用右正则等价关系的有限表示的混淆及其抽象的无存储模型)(1992年国际计算机语言会议的会议记录,1992年)),该视图不是显式表示堆,而是仅跟踪与污染传播相关的信息;即,哪些序列的局部变量和字段解引用可能导致不可信数据。为了描述示例性分析如何跟踪污染,首先介绍如何在具体设置中应用无存储表示:针对污染分析问题采取标准具体语义,其中定义程序状态和程序状态下的表达式计算。使用以下语义域:
[0025]L∈ objects
[0026]V∈ Val=objects U {null}
[0027]pEnv=VarId — Val
[0028]h∈ Heap=objectsXFieldId — Val
[0029]o =<L, P , h> ∈States=2obj0Cts X Env X Heap
[0030]其中objects表示动态分配的对象的无界集合,VarId和FieldId分别是局部变量和字段标识符的集合。此外,e表示“是其元素”,U表示并集,一表示“映射到”,X表示笛卡尔乘积,它包括通过采取第一集合中的元素和第二集合中的元素获得的所有对的集合:AXB={(a,b):a e A,b e B。因此,程序状态σ维护被分配对象的集合L、将局部变量映射到值的环境P,以及从被分配对象的字段到值的映射h。
[0031]如上所述,示例性分析执行的数据流分析基于“访问路径”的概念(参见S.Fink、E.Yahav> N.Dor、G.Ramalingam 和 Ε.Geay 的 Effective Typestate Verification in thePresence of Aliasing(当存在混淆时的有效类型状态验证)(ACM软件测试和分析国际研讨会,2006年)。形式上,访问路径是一个对〈V,<fl,...,fn>>,其中V是局部变量,fI,..., fn是字段标识符(它们标识对象中的字段,其中字段存储对象的状态)。使用环境P和堆h在具体状态σ下计算访问路径〈^〈€1,...,^1?将产生满足以下条件的唯一堆分配的对象ο:
[0032]
Bol.....011-O1 =p(v)ao2 = Λ (ο, , / I) λ...λ a = h (ο.,, fn)
[0033]使得ο, O1,...,οη e L,其中L是σ中的被分配对象的集合。此外,3表示“存在”,“.”表示“使得”,Λ表示“与”。如果不存在此类对象O,则计算结果失败丄。
[0034]在状态σ下计算为对象O的所有访问路径的集合是对象O的合理表示,因为访问路径之间的混淆变得显式,因此可以以合理方式处理通过堆的流。遗憾的是,通常即使在具体设置中也不能保证该集合是有限的,这是由于堆中的循环所致(例如,递归结构和反向指针导致)。即使集合是有限的,深层嵌套的对象也可以产生非常长的链。[0035]这在示例性实施例中针对被跟踪访问路径的长度强制界限k,以便可以处理静态分析。然后对于长度大于k的访问路径,通过以特殊符号*替换其后缀(在前k个字段标识符之后),合理地接近(或放宽)访问路径。在具体状态σ下计算放宽后的访问路径〈V,,fl,...,fk, *?将产生L中可从对象〈V,<fl,...,fk?通过(零个或多个)堆边到达的所有对象。实际上,已经发现设置k=5非常适合。
[0036]访问路径是表示污染流的自然方式。例如,考虑图1中的程序段。第I行处的源语句产生种子访问路径〈P,ε>,其中ε表示空的字段标识符序列(空的原因是document.URL最初未知,并且将被设置为种子)。注意,语句“var q= ”指示变量q被初始化为空集合。接下来,第3行处的赋值产生另一个被污染访问路径〈!,ε>。第4行处的语句(写入字段f)导致出现第三访问路径<q,<f>>其在第5行处使赋值到达汇字段“location”,并且导致标记漏洞。
[0037]为了传播被污染访问路径,建议的示例性分析采用Reps-Horwitz-Sagiv (RHS)算法的新颖扩展。参见T.Reps、S.Horwitz和Μ.Sagiv 的Precise Interprocedural DataflowAnalysis via Graph Reachability (通过图可达性进行精确的过程间数据流分析)(第22届ACM SIGPLAN-SIGACT编程语言原理研讨会的会议记录,1995年)。RHS算法提供高度精确的静态分析框架,以便将大量数据流问题转变为图可达性问题。具体地说,污染传播以源为种子。每次在指令中使用被污染访问路径时,分析相应地污染在该指令中定义的访问路径。
[0038]污染传播过程需要驱动,因为仅当污染到达访问路径时才实例化访问路径,这使得该算法非常高效。该算法的另一个重要特性是算法对上下文敏感:每个方法可以采取多个污染行为,具体取决于调用算法的上下文一精确度的关键要求。
[0039]此外,此处的示例性分析增强了 RHS,因为示例性分析可以处理涉及堆中的混淆关系(即,同一对象的多个本地名称)的问题。原始RHS算法中没有该特性,原始算法不适用于对涉及在不同过程中建立的混淆关系的问题进行建模。
[0040]首先,在没有混淆问题的简单实例中示出示例性算法如何工作,然后提供关于如何处理堆的讨论。
[0041]关于基本污染分析算法,如果没有任何堆混淆问题,则污染分析很简单:可以使用标准Reps-Horwitz-Sagiv (RHS)求解器计算精确的满足所有可行路径的解决方案。参见上面引用的T.Reps等人的文章。在图2中使用实例示出该分析如何工作。
[0042]第7行处的“document.URL”的读取是污染源,其生成被污染访问路径<ρ,ε > (例如,在该简单实例中,为污染分配P)。P的值流到第9行处的“id”的调用。对“id”的分析(行1-3)揭示该函数仅从其参数到其返回值传播污染,因此针对“id”函数建立关系摘要{X,ε}—〈ret,ε >(其中ret是表示方法的返回值的特权符号),并且将该关系摘要传播到“id”的调用方。注意,该关系摘要是模块化的,因为针对函数确定关系摘要之后,可以针对函数的每个调用简单地重用关系摘要。还应注意,该关系摘要是本发明的一个方面。将该摘要应用于第9行处的主方法将生成访问路径〈r,ε >被污染的事实。
[0043]摘要{X,ε } —〈ret,ε >被称为是关系的,因为如果程序中具有另一个“id”调用以便传递到“id”的参数未被污染,则在这种情况下返回值完全不会被污染。因此,当在被调用方处生成摘要并将其传播到调用方时,仅当相关先决条件适用于调用方时才将摘要应用于该调用方。从这个意义上说,该分析是上下文敏感的:根据调用上下文执行污染传播。下面将介绍具有对“id”方法的两个调用的实例一一个调用具有被污染参数,另一个调用具有未被污染参数。还应注意,关系摘要还提供字段敏感性,因为关系摘要还根据上下文敏感性来修改字段。
[0044]继续图2的实例,在第10行将变量r的值传递到“set”函数。“set”函数(行4-6)包含字段写入指令,该指令将污染从其第一参数传播到其第二参数的字段f ;即,函数创建非空访问路径。在这种情况下,函数的关系摘要是{y,ε}—<z,〈f>>。向“set”的调用方应用该摘要将添加<q,<f>>被污染的事实。这将为真,因为将关系摘要应用于“set (r,q) ”的调用语句将产生Ir,ε} — <q,〈f>>。访问路径<r,ε >已经被确定为被污染,但访问路径<q, <f>>先前未被确定为被污染。当分析结束时,将获知访问路径〈P, ε >、<r, ε >和<q, <f?被污染,这是精确的结果。
[0045]关于可以处理混淆的完整污染分析算法,图2中的程序是无混淆程序:同一堆位置从来没有多个名称。即,<q,〈f>>是给定位置的唯一名称。但是,假设某个其它变量指向同一位置;在这种情况下,上面的规则可能使我们漏掉变量的字段f也被污染的事实。例如,考虑图3中的非常类似的程序中的变量q和s ;变量q和变量s均引用同一对象(对象g,其最初被设置为空集合),因此由其中一个变量产生的任何污染一定传送到另一个变量。因此,示例性污染分析算法扩展RHS算法,以便还根据在调用图构造期间计算的指针分析模型考虑堆混淆。即,在图5的方框510中,创建适合于污染分析的程序数据流模型。该数据流模型例如可以是有向图(例如调用图或超图),并且将包含数据流路径(例如其表示)。创建数据流模型还可以包括针对程序使用的变量计算指针分析模型,例如作为数据流模型的一部分或其附件(图5的方框515)。指针分析模型(其可以是指向图)是堆的数学表示,通常表示为二分图,其中节点可以是两种类型之一:实例键(表示对象抽象)和指针键(表示字段标识符)。从实例键到指针键的边表示以下事实:实例键表示的对象的类具有指针键表示的字段标识符。从指针键到实例键的边表示以下事实:在程序执行期间,指针键表示的字段标识符可以指向实例键表示的对象。
[0046]作为图5的方框520的一个实例,例如在图5的方框525中示出从污染源到实体来执行信息跟踪,其中以字段敏感的方式执行跟踪。在方框525,执行指针分析模型的字段敏感分析,以便将抽象对象的字段彼此区分开,并将不同抽象对象的字段彼此区分开。图6是使用指针分析模型执行字段敏感分析的一个实例的框图。即,在另一示例性实施例中,为了解析混淆关系,构造指针分析模型的抽象,即“堆图”。这在图6的方框605中进行。堆图是二分图H=〈B U Δ,Χ>,其中B是程序中的环境和堆指针一即,局部变量和引用对象的字段(例如,通过字段指针键)的集合,Δ是参与指针分析解决方案的对象抽象的集合,X是图中的边集合。从指针P到抽象对象O的边P — O表示字段P可以指向对象O。从抽象对象O到字段P的边O — P表示O拥有字段(例如,在这种情况下为字段指针)Ρ。该抽象允许构造这种堆图,因为抽象是字段敏感的,意味着抽象将抽象对象的字段彼此区分开以及将不同抽象对象的字段彼此区分开。参见B.G.Ryder的Dimensions of Precision in ReferenceAnalysis of Object-Oriented Languages (面向对象的语言的引用分析中的精确度维度)(第12届国际编译器构造会议,2003年,特邀论文)。图4示出图3中的程序的堆图的一种可视化。在图4中,矩形内部具有“q”(作为实例)的矩形指示局部变量“q”的指针;三角形内部具有“g”(作为实例)的三角形指示字段“g”的指针;以及圆形指示抽象对象。
[0047]在图3的程序中,与图2相比具有两个更改。第一更改是对“id”的额外调用(第11行),其定义变量S,第二更改是更复杂的“set”函数(行4-7)。首先按照如上所述继续分析,针对〈P,ε >和<r, ε >查找污染。
[0048]对“set”的调用示出堆问题。赋值“X.f=y”建立摘要{y, ε } — <x,〈f>>,但这明显不够:“x.f”与“z.g.f”引用同一位置,并且分析需要捕获此类污染。有关字段写入语句的影响的合理推理需要查找与“set”的词法范围中的〈X,<f>>混淆的访问路径集合(的保守近似)。原始RHS算法未对此进行处理。另一方面,本示例性分析发现〈X,<f>>的混淆,如下所述。
[0049]每次污染流入访问路径(图6的方框610)时,本示例性分析执行在此称为Aliases的函数以便确定局部混淆(例如,方框630),然后继续基于RHS的污染传播(图5的方框530)。基于RHS的污染传播在上面引用的T.R印s等人的文章中描述。通过方框620和625示出图6的方框610的一个实例。具体地说,在方框620中,针对程序中被首次分析的函数,确定将函数的输入参数(多个)映射到函数的返回值(多个)的关系摘要。示例性关系摘要已经在上面描述,并且还在下面描述。在方框625中,使用一个/多个关系摘要以字段敏感方式确定污染流入给定访问路径。注意,针对那些已经具有关系摘要的函数,将跳过方框620。
[0050]针对以局部变量为根的给定访问路径,可以定义函数Aliases (方框630),该函数返回满足以下条件的所有访问路径:
[0051]I)访问路径以局部变量为根(方框635)。这相当于测试将isL0Cal(v)计算为true ο
[0052]2)这些局部变量属于同一方法(方框640)。这相当于测试methodOf (v)=method0f(w)。
[0053]3)访问路径与给定访问路径混淆(方框650)。这相当于测试使用对函数(在此称为PathTo)的两个调用获得的抽象对象集合具有非空交集。
[0054]除了三个条件(I) - (3)之外,可以在方框650中将访问路径(4)截断为长度k。
[0055]在数学上,Aliases函数可以使用某些非常直观的辅助函数,包括将访问路径长度限制为给定界限(例如,方框650中的k)的Truncate,以及计算可通过给定访问路径到达的抽象对象集合(方框650)的PathTo。为了计算可通过给定访问路径到达的抽象对象集合(方框650),可以使用函数(在此称为FieldName)。如果给出B中的字段指针,则函数FieldName返回FieldId (即,字段标识符集合,如上所述)中的对应字段标识符。这是有用的,因为如上面解释的,本示例性分析依赖字段敏感算法,并且因此区分不同抽象对象的字段指针键,即使当此类字段指针键表示具有相同名称的字段时也是如此。从某种意义上说,针对方框630,可以通过执行图形遍历计算可通过给定路径到达的当前抽象对象。上面提供的实例是用于通过给定路径执行图形遍历的一种技术,但还可以使用其它技术。
[0056]在方框660中,输出(例如,返回)在方框630中确定的访问路径。在图5的方框530中,根据在方框520中执行的跟踪的输出,执行数据流分析以便确定从污染源通过数据流路径到使用污染的汇的污染流。数据流分析可以是上面引用的T.Reps等人的文章中描述的基于RHS的污染传播。即,访问路径可以与数据流模型中的对应数据流路径关联,以便确定哪些数据流路径可以被污染。在图5的方框535中,使用被污染数据流路径,根据这些路径执行一个或多个操作。例如,在方框540中,可以输出被污染数据流路径的指示。作为另一个实例,在方框545中,可以执行额外分析。此类分析可以包括判定任何被污染数据流路径是否具有致使数据安全的正确操作。一旦发现被污染的数据流路径,存在许多为所属【技术领域】的技术人员已知的不同选项,并且方框540和545只是此类选项的两个实例。
[0057]为了返回到图3和4的实例,在该实例中,z实际上是同一方法的局部变量(例如,参见图3 ),并且全局指针分析记录g字段可以命名的对象的g字段可以与X指向同一对象;因此,将z的堆路径<g,f>解析为与X的<f>相同的抽象对象。路径足够短,不需要截断路径。这在图4中示出,其中从“set.X”通过f的路径与从“set.z”通过字段g和f的路径导向同一抽象对象。
[0058]因此,示例性分析针对“set”函数计算关系摘要{y,ε} — <z,<g,f>>。在调用方位置(第12行)应用该摘要将添加访问路径<s,<g, f>>。再次地,这是不完整的,因为s和q表示同一对象,因此再次地,在图6的方框630中执行的操作发现额外访问路径。
[0059]注意,对“id”的额外调用(图3的第11行)不添加污染信息,因为变量q最初未被污染。上面讨论的示例性上下文敏感污染传播分析避免了将〈S,ε>添加到被污染访问路径集合,该添加将使分析非常粗略并生成大量虚假肯定。实际上,使用本实例针对变量s计算的被污染访问路径〈S,<g, f?比访问路径〈S,ε >精确得多。
[0060]该用于解析混淆关系的示例性算法就字段而言是流不敏感的,意味着该算法不考虑针对字段的强大更新;即,如果在两个不同程序点处为对象O的字段f分配值V和值W,则分析保守地认为字段f指向值集合{V,w}。流不敏感性可以在构建调用图和指向图(分别为图5中的方框510和图5中的方框515)时执行,并且可以在构建堆图(图6的方框605)时进一步完善。相反,流敏感分析尝试确定首先和最后执行哪个写入指令,并且根据该信息,所述分析报告字段f指向值V或`值W。
[0061]尽管流敏感分析可能看似更精确,但使用该分析并非始终合理。例如对于JavaScript而言如此。在JavaScript中,程序的执行通常是事件驱动的一例如基于点击按钮或者与用户界面(UI)小部件的交互一无法始终确定某些例程的执行顺序。尝试断言执行顺序可能导致不合理的结果。因此,为了保证合理性,在一个示例性实施例中,选择保守地使分析针对字段而言是流不敏感的。
[0062]但是,在过程内部,分析可以针对局部变量而言是流敏感的,因此如果使用SSA(静态单一赋值)形式,则考虑针对局部变量的强大更新。这是因为SSA创建变量版本以便确保每个变量仅被赋值一次,这间接地提供将访问路径限制为长度k的措施。
[0063]转到图7,示出适合于执行本发明的示例性实施例的示例性系统。该系统包括计算机系统700,计算机系统700包括一个或多个处理器705、一个或多个存储器710、一个或多个用户输入接口 720 (例如,触摸屏接口、鼠标接口、键盘接口等)以及一个或多个网络接口 725。一个或多个存储器710包括计算机可读代码715 (其包括应用接口 717,例如Web浏览器)和程序780。计算机系统700的用户(未示出)使用应用接口 717将程序780发送到计算机系统750,计算机系统750针对程序780执行污染分析并发回结果797。计算机系统700包括(如图7中所示)或者耦合到具有用户界面735的显示器730,用户(未示出)可以通过显示器730例如查看结果797。还可以通过用户界面735查看程序780。[0064]该实例是网络实例,其中计算机系统700与另一个计算机系统750通信,计算机系统750包括一个或多个处理器755、一个或多个存储器760以及一个或多个网络接口 785。一个或多个存储器760包括包含污染分析程序770的计算机可读代码765,污染分析程序770针对程序780执行上述部分或全部操作以便生成结果797。一个或多个存储器760还包括程序780、堆图790、数据流模型795和结果797。在该实例中,数据流模型795包括指针分析模型796,然而两个模型795、796可以分离。计算机系统700、750通过网络740 (例如,因特网)通信。在该实例中,计算机系统700是客户端,计算机系统750是服务器。应用接口 717可以如同污染分析程序770的Web接口那样简单,或者可以更复杂,例如小程序或客户端程序。
[0065]在非网络实例中,计算机750的用户将程序780提供给计算机系统750,并且例如通过计算机系统750中的或者连接到计算机系统750的显示器(未示出)接收结果797。
[0066]所属【技术领域】的技术人员知道,本发明的各个方面可以实现为系统、方法或计算机程序产品。因此,本发明的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、驻留软件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。此外,本发明的各个方面还可以实现为在一个或多个计算机可读介质中的计算机程序产品的形式,该计算机可读介质中包含计算机可读的程序代码。
[0067]可以采用一个或多个计算机可读介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是一但不限于一电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
[0068]计算机可读的信号介质可以包括例如在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括一但不限于一电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
[0069]计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括一但不限于一无线、有线、光缆、RF等等,或者上述的任意合适的组合。
[0070]可以以一种或多种程序设计语言的任意组合来编写用于执行本发明的各个方面的操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言一诸如Java、Smalltalk、C++等,还包括常规的过程式程序设计语言一诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络一包括局域网(LAN)或广域网(WAN) —连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
[0071]上面参照根据本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本发明的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。
[0072]也可以把这些计算机程序指令存储在计算机可读介质中,这些指令使得计算机、其它可编程数据处理装置、或其它设备以特定方式工作,从而,存储在计算机可读介质中的指令就产生出包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的指令的制造品(article of manufacture)0
[0073]也可以把计算机程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机或其它可编程装置上执行的指令提供实现流程图和/或框图中的一个或多个方框中规定的功能/动作的过程。
[0074]在此使用的术语只是为了描述特定的实施例并且并非旨在作为本发明的限制。如在此所使用的,单数形式“一”、“一个”和“该”旨在同样包括复数形式,除非上下文明确地另有所指。还将理解,当在此说明书中使用时,术语“包括”和/或“包含”指定了声明的特性、整数、步骤、操作、元素和/或组件的存在,但是并不排除一个或多个其它特性、整数、步骤、操作、元素、组件和/或其组的存在或增加。
[0075]下面权利要求中的对应结构、材料、操作以及所有功能性限定的装置或步骤的等同替换,旨在包括任何用于与在权利要求中具体指出的其它元件相组合地执行该功能的结构、材料或操作。出于示例和说明目的给出了对本发明的描述,但所述描述并非旨在是穷举的或是将本发明限于所公开的形式。在不偏离本发明的范围和精神的情况下,对于所属【技术领域】的普通技术人员来说许多修改和变化都将是显而易见的。实施例的选择和描述是为了最佳地解释本发明的原理和实际应用,并且当适合于所构想的特定使用时,使得所属【技术领域】的其它普通技术人员能够理解本发明的具有各种修改的各种实施例。
【权利要求】
1.一种数据流分析方法,包括: 使用适合于程序污染分析的程序数据流模型,利用基于所述程序的堆模型从污染源到所述堆中的实体来跟踪信息,其中执行所述跟踪以便所述信息与污染传播相关,并且针对所述堆中的所述实体以字段敏感的方式执行所述跟踪;以及 基于所述跟踪的输出,执行数据流分析以便确定从所述污染源通过数据流路径到使用所述污染的汇的污染流。
2.根据权利要求1的方法,其中跟踪信息进一步包括使用指针分析模型执行字段敏感分析,以便将所述堆中的抽象对象的字段彼此区分开并将所述堆中的不同抽象对象的字段彼此区分开。
3.根据权利要求2的方法,其中所述字段敏感分析区分不同抽象对象的字段指针键,即使当此类字段指针键表示具有相同名称的字段时也是如此。
4.根据权利要求2的方法,其中所述指针分析模型包括指向图。
5.根据权利要求2的方法,还包括通过分析所述程序确定所述数据流模型,并且通过分析所述程序确定所述指针分析模型。
6.根据权利要求2的方法,其中使用指针分析模型执行字段敏感分析进一步包括创建堆图,所述堆图包括具有所述程序中的环境和堆指针的第一集合与具有参与所述指针分析模型的所述抽象对象的第二集合的交集,并且还包括连接所述第一和第二集合的元素的边
口 O
7.根据权利要求6的方法,其中具有所述程序中的环境和堆指针的第一集合包括所述堆中的局部变量和引用所述堆中的对象的字段。
8.根据权利要求6的方法,其中跟踪信息进一步包括: 确定污染流入给定访问路径,其中每个访问路径是将变量与字段标识符集合相链接的对,并且其中可以评估访问路径以便产生在所述堆中分配的唯一对象; 确定与所述给定访问路径对应的满足条件集合的所有访问路径,所述确定所有访问路径的步骤使用所述堆图;以及 输出所确定的满足所述条件集合的访问路径。
9.根据权利要求8的方法,其中使用特定环境和给定堆在所述程序的特定具体状态下执行访问路径评估,以便在所述给定堆中产生所述唯一对象。
10.根据权利要求8的方法,其中确定污染流入给定访问路径进一步包括使用所述程序中的函数的关系摘要映射来确定污染流入所述给定访问路径。
11.根据权利要求10的方法,其中确定污染流入给定访问路径进一步包括针对所述程序中被首次分析的函数,确定将所述函数的一个或多个输入参数映射到所述函数的一个或多个返回值的关系摘要。
12.根据权利要求8的方法,其中所述条件集合包括: 所有访问路径中的所述访问路径以局部变量为根; 所述局部变量属于同一方法;以及 所有所述访问路径均与所述给定访问路径混淆。
13.根据权利要求12的方法,其中所述条件集合进一步包括:可以将所有所述访问路径截断为特定长度。
14.根据权利要求1的方法,其中以针对字段而言还为流不敏感的方式执行所述跟踪信息的步骤,其中响应于在两个不同程序点为所述堆中的对象ο的字段f分配值V和值W,所述字段f被视为指向值集合Iv, w}。
15.根据权利要求14的方法,其中所述跟踪信息进一步包括构建调用图和指向图,并且其中当构建至少所述调用图和指向图时,执行流不敏感性。
16.根据权利要求1的方法,还包括输出通过执行所述数据流分析而确定为被污染的所述数据流路径的指示。
17.一种数据流分析装置,包括: 被配置为使用适合于程序污染分析的程序数据流模型,利用基于所述程序的堆模型从污染源到所述堆中的实体来跟踪信息的模块,其中执行所述跟踪以便所述信息与污染传播相关,并且针对所述堆中的所述实体以字段敏感的方式执行所述跟踪;以及 被配置为基于所述跟踪的输出,执行数据流分析以便确定从所述污染源通过数据流路径到使用所述污染的汇的污染流的模块。
18.根据权利要求17的装置,其中被配置为跟踪信息的模块进一步包括被配置为使用指针分析模型执行字段敏感分析,以便将所述堆中的抽象对象的字段彼此区分开并将所述堆中的不同抽象对象的字段彼此区分开的模块。
19.根据权利要求18的装置,其中所述字段敏感分析区分不同抽象对象的字段指针键,即使当此类字段指针键表示具有相同名称的字段时也是如此。
20.根据权利要求18的装置,其中所述指针分析模型包括指向图。
21.根据权利要求18的装置,还包括被配置为通过分析所述程序确定所述数据流模型并且通过分析所述程序确定所述指针分析模型的模块。
22.根据权利要求18的装置,其中被配置为使用指针分析模型执行字段敏感分析的模块进一步包括被配置为创建堆图的模块,所述堆图包括具有所述程序中的环境和堆指针的第一集合与具有参与所述指针分析模型的所述抽象对象的第二集合的交集,并且还包括连接所述第一和第二集合的元素的边集合。
23.根据权利要求22的装置,其中具有所述程序中的环境和堆指针的第一集合包括所述堆中的局部变量和引用所述堆中的对象的字段。
24.根据权利要求22的装置,其中被配置为跟踪信息的模块进一步包括: 被配置为确定污染流入给定访问路径的模块,其中每个访问路径是将变量与字段标识符集合相链接的对,并且其中可以评估访问路径以便产生在所述堆中分配的唯一对象; 被配置为确定与所述给定访问路径对应的满足条件集合的所有访问路径的模块,所述确定所有访问路径使用所述堆图;以及 被配置为输出所确定的满足所述条件集合的访问路径的模块。
25.根据权利要求24的装置,其中使用特定环境和给定堆在所述程序的特定具体状态下执行访问路径评估,以便在所述给定堆中产生所述唯一对象。
26.根据权利要求2 4的装置,其中被配置为确定污染流入给定访问路径的模块进一步包括被配置为使用所述程序中的函数的关系摘要映射来确定污染流入所述给定访问路径的模块。
27.根据权利要求26的装置,其中被配置为确定污染流入给定访问路径的模块进一步包括被配置为针对所述程序中被首次分析的函数,确定将所述函数的一个或多个输入参数映射到所述函数的一个或多个返回值的关系摘要的模块。
28.根据权利要求24的装置,其中所述条件集合包括: 所有访问路径中的所述访问路径以局部变量为根; 所述局部变量属于同一装置;以及 所有所述访问路径均与所述给定访问路径混淆。
29.根据权利要求28的装置,其中所述条件集合进一步包括:可以将所有所述访问路径截断为特定长度。
30.根据权利要求17的装置,其中以针对字段而言还为流不敏感的方式执行被配置为跟踪信息的模块,其中响应于在两个不同程序点为所述堆中的对象ο的字段f分配值V和值W,所述字段f被视为指向值集合{v, w}。
31.根据权利要求30的装置,其中被配置为确定污染流入给定访问路径的模块进一步包括被配置为构建调用图和指向图的模块,并且其中当构建至少所述调用图和指向图时,执行流不敏感性。
32.根据权利要求17的装置,还包括被配置为输出通过执行所述数据流分析而确定为被污染的所述数据流路径的指示的模块。
【文档编号】G06F9/44GK103809966SQ201310548222
【公开日】2014年5月21日 申请日期:2013年11月7日 优先权日:2012年11月8日
【发明者】J·杜比, S·A·瓜尔涅里, M·皮斯托亚, O·特里普 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1