CN111966346B - 应用系统的污点分析方法及装置 - Google Patents
应用系统的污点分析方法及装置 Download PDFInfo
- Publication number
- CN111966346B CN111966346B CN202010938928.XA CN202010938928A CN111966346B CN 111966346 B CN111966346 B CN 111966346B CN 202010938928 A CN202010938928 A CN 202010938928A CN 111966346 B CN111966346 B CN 111966346B
- Authority
- CN
- China
- Prior art keywords
- variable
- call
- graph
- pruning
- data propagation
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/34—Graphical or visual programming
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Debugging And Monitoring (AREA)
Abstract
本说明书的实施例提供用于应用系统的污点分析的方法及装置。在该方法中,根据调用关系图来生成控制流图,所述调用关系图通过使用第一调用关系构建算法来根据应用系统的程序代码中的应用层代码构建。此外,使用控制流图来对应用系统的程序代码进行污点分析;并且在污点分析结果指示调用语句在调用关系图中不存在边关系时,使用第二调用关系构建算法来在调用关系图中为该调用语句扩展边关系。
Description
技术领域
本说明书实施例通常涉及安全领域、软件工程、软件编译或程序分析领域,尤其涉及应用系统的污点分析方法及装置。
背景技术
近年来,工业界对静态污点分析技术的需求越来越高,尤其是具有高可扩展性和正确性的污点分析工具。污点分析技术可以帮助工业界跟踪数据传播链路,由此解决很多复杂场景中的数据问题,比如,隐私泄露、资损分析、变更管控、数据一致性等。
鉴于此,提出了污点分析工具Flowdroid和Ptaint。然而,在将污点分析工具Flowdroid和Ptaint应用于工业界应用处理时面临严重的性能问题及正确性问题。
发明内容
鉴于上述,本说明书实施例提供应用系统的污点分析方法及装置。利用该污点分析方法和装置,可以提升污点分析的性能和精度。
根据本说明书实施例的一个方面,提供一种用于应用系统的污点分析的方法,包括:根据调用关系图来生成控制流图,所述调用关系图通过使用第一调用关系构建算法来根据所述应用系统的程序代码中的应用层代码构建;使用所述控制流图来对应用系统的程序代码进行污点分析;以及在污点分析结果指示调用语句在所述调用关系图中不存在边关系时,使用第二调用关系构建算法来在所述调用关系图中为该调用语句扩展边关系。
可选地,在上述方面的一个示例中,使用第二调用关系构建算法来在所述调用关系图中为该调用语句扩展边关系包括:使用第二调用关系构建算法来在所述调用关系图和所述控制流图中为该调用语句扩展边关系,所述方法还包括:根据所述扩展后的控制流图生成数据流图。
可选地,在上述方面的一个示例中,根据所述扩展后的控制流图生成数据流图包括:根据所述扩展后的控制流图构建候选数据传播路径;对所述候选数据传播路径进行剪枝处理;以及基于经过剪枝处理后的候选数据传播路径,生成所述数据流图。
可选地,在上述方面的一个示例中,所述数据流图的节点包括代码字段或数据库字段,以及边关系表示字段之间的数据流向。
可选地,在上述方面的一个示例中,所述污点分析包括考虑调用点上下文信息的污点分析,对所述候选数据传播路径进行剪枝处理包括:基于调用点上下文信息来对所述候选数据传播路径进行剪枝处理。
可选地,在上述方面的一个示例中,所述调用点上下文信息包括可跨过程访问变量的变量使用信息。
可选地,在上述方面的一个示例中,基于调用点上下文信息来对所述候选数据传播路径进行剪枝处理包括:基于可跨过程访问变量的变量使用信息来确定候选数据传播路径中是否存在变量使用信息不一致;以及在确定候选数据传播路径中存在变量使用信息不一致时,对该候选数据传播路径进行剪枝处理。
可选地,在上述方面的一个示例中,所述污点分析包括考虑变量使用点与变量定义点之间的关系的污点分析,对所述候选数据传播路径进行剪枝处理包括:基于变量使用点与变量定义点之间的关系来对所述候选数据传播路径进行剪枝处理。
可选地,在上述方面的一个示例中,基于变量使用点与变量定义点之间的关系来对所述候选数据传播路径进行剪枝处理包括:在程序代码中的第一变量被赋值为堆变量时,基于所述变量使用点与变量定义点之间的关系来搜索所述第一变量的别名变量,所述第一变量为过程内使用的局部变量;判断所述别名变量在后续程序代码中是否使用;以及在所述别名变量在后续程序代码中未被使用时,剪枝与所述别名变量关联的候选数据传播路径。
可选地,在上述方面的一个示例中,基于变量使用点与变量定义点之间的关系来对所述候选数据传播路径进行剪枝处理包括:在程序代码中的第一变量被赋值为堆变量时,将所述第一变量映射到调用上下文或者调用方法中的第二变量,所述第一变量为过程间使用的局部变量;基于变量使用点与变量定义点之间的关系来搜索所述第二变量的别名变量;判断所述别名变量在后续程序代码中是否使用;以及在所述别名变量在后续程序代码中未被使用时,剪枝与所述别名变量关联的候选数据传播路径。
可选地,在上述方面的一个示例中,所述第一调用关系构建算法的精度高于所述第二调用关系构建算法的精度,以及所述第一调用关系构建算法的性能低于所述第二调用关系构建算法的性能。
可选地,在上述方面的一个示例中,所述程序代码包括经过代码转换后的程序代码。
可选地,在上述方面的一个示例中,所述代码转换包括:对程序代码进行补包处理、类替换和/或方法替换;在方法调用附近插入语句;和/或在方法的开始或结束处插入语句。
可选地,在上述方面的一个示例中,所述污点分析包括基于切片的并行污点分析。
可选地,在上述方面的一个示例中,所述切片包括基于程序入口点切分得到的切片或者基于污染起点切分得到的切片。
可选地,在上述方面的一个示例中,所述方法还包括:确定所述程序代码的程序入口点、污染起点和污染终点。
根据本说明书的实施例的另一方面,提供一种用于应用系统的污点分析的装置,包括:控制流图生成单元,根据调用关系图来生成控制流图,所述调用关系图通过使用第一调用关系构建算法来根据所述应用系统的程序代码中的应用层代码构建;污点分析单元,使用所述控制流图来对应用系统的程序代码进行污点分析;以及边关系扩展单元,在污点分析结果指示调用语句在所述调用关系图中不存在边关系时,使用第二调用关系构建算法来在所述调用关系图中为该调用语句扩展边关系。
可选地,在上述方面的一个示例中,在污点分析结果指示调用语句在所述调用关系图中不存在边关系时,所述边关系扩展单元使用第二调用关系构建算法来在所述调用关系图和所述控制流图中为该调用语句扩展边关系,所述装置还包括:数据流图生成单元,根据所述扩展后的控制流图生成数据流图。
可选地,在上述方面的一个示例中,所述数据流图生成单元包括:数据传播路径构建模块,根据所述扩展后的控制流图构建候选数据传播路径;剪枝处理模块,对所述候选数据传播路径进行剪枝处理;以及数据流图生成模块,基于经过剪枝处理后的候选数据传播路径,生成所述数据流图。
可选地,在上述方面的一个示例中,所述数据流图的节点包括代码字段或数据库字段,以及边关系表示字段之间的数据流向。
可选地,在上述方面的一个示例中,所述污点分析包括考虑调用点上下文信息的污点分析,所述剪枝处理模块基于调用点上下文信息来对所述候选数据传播路径进行剪枝处理。
可选地,在上述方面的一个示例中,所述调用点上下文信息包括可跨过程访问变量的变量使用信息,所述剪枝处理模块:基于可跨过程访问变量的变量使用信息来确定候选数据传播路径中是否存在变量使用信息不一致;以及在确定候选数据传播路径中存在变量使用信息不一致时,对该候选数据传播路径进行剪枝处理。
可选地,在上述方面的一个示例中,所述污点分析包括考虑变量使用点与变量定义点之间的关系的污点分析,所述剪枝处理模块基于变量使用点与变量定义点之间的关系来对所述候选数据传播路径进行剪枝处理。
可选地,在上述方面的一个示例中,所述剪枝处理模块:在程序代码中的第一变量被赋值为堆变量时,基于变量使用点与变量定义点之间的关系来搜索所述第一变量的别名变量,所述第一变量为过程内使用的局部变量;判断所述别名变量在后续程序代码中是否使用;以及在所述别名变量在后续程序代码中未被使用时,剪枝与所述别名变量关联的候选数据传播路径。
可选地,在上述方面的一个示例中,所述剪枝处理模块:在程序代码中的第一变量被赋值为堆变量时,将所述第一变量映射到调用上下文或者调用方法中的第二变量,所述第一变量为过程间使用的局部变量;基于变量使用点与变量定义点之间的关系来搜索所述第二变量的别名变量;判断所述别名变量在后续程序代码中是否使用;以及在所述别名变量在后续程序代码中未被使用时,剪枝与所述别名变量关联的候选数据传播路径。
可选地,在上述方面的一个示例中,所述装置还包括:代码转换单元,对所述应用系统的应用框架进行代码转换,所述污点分析单元使用所述控制流图来对经过代码转换后的程序代码进行污点分析。
可选地,在上述方面的一个示例中,所述装置还包括:要素确定单元,确定所述程序代码的程序入口点、污染起点和污染终点。
可选地,在上述方面的一个示例中,所述装置还包括:切片处理单元,对所述污点分析的分析任务进行切片处理,其中,所述污点分析包括基于切片的并行污点分析。
根据本说明书的实施例的另一方面,提供一种电子设备,包括:至少一个处理器,以及与所述至少一个处理器耦合的存储器,所述存储器存储指令,当所述指令被所述至少一个处理器执行时,使得所述至少一个处理器执行如上所述的污点分析方法。
根据本说明书的实施例的另一方面,提供一种机器可读存储介质,其存储有可执行指令,所述指令当被执行时使得所述机器执行如上所述的污点分析方法。
附图说明
通过参照下面的附图,可以实现对于本说明书内容的本质和优点的进一步理解。在附图中,类似组件或特征可以具有相同的附图标记。
图1示出了隐私数据泄露过程的示例示意图。
图2示出了基于Flowdroid的应用系统的污点分析过程的示例示意图。
图3示出了根据本说明书的实施例的用于应用系统的过程调用的污点分析的方法的示例流程图。
图4A和图4B示出了根据本说明书的实施例的经过代码转换后的应用程序的程序代码的示例示意图。
图5示出了根据本说明书的实施例的用于对应用程序的程序代码进行污点分析的过程的示例示意图。
图6示出了根据本说明书的实施例的数据流图的生成过程的示例流程图。
图7示出了根据本说明书的实施例的基于调用点上下文信息的剪枝处理过程的示例示意图。
图8示出了根据本说明书的实施例的基于变量使用点与变量定义点之间的关系的剪枝处理过程的一个示例的流程图。
图9示出了根据本说明书的实施例的过程内分析的代码示例。
图10示出了根据本说明书的实施例的基于变量使用点与变量定义点之间的关系的剪枝处理过程的另一示例的流程图。
图11示出了根据本说明书的实施例的过程间分析的代码示例。
图12示出了根据本说明书的实施例的用于应用系统的污点分析的装置的示例流程图。
图13示出了根据本说明书的实施例的数据流图生成单元的一个实现示例的方框图。
图14示出了根据本说明书的实施例的剪枝处理模块的一个实现示例的方框图。
图15示出了根据本说明书的实施例的剪枝处理模块的另一实现示例的方框图。
图16示出了根据本说明书的实施例的用于实现应用系统的污点分析过程的电子设备的示意图。
具体实施方式
现在将参考示例实施方式讨论本文描述的主题。应该理解,讨论这些实施方式只是为了使得本领域技术人员能够更好地理解从而实现本文描述的主题,并非是对权利要求书中所阐述的保护范围、适用性或者示例的限制。可以在不脱离本说明书内容的保护范围的情况下,对所讨论的元素的功能和排列进行改变。各个示例可以根据需要,省略、替代或者添加各种过程或组件。例如,所描述的方法可以按照与所描述的顺序不同的顺序来执行,以及各个步骤可以被添加、省略或者组合。另外,相对一些示例所描述的特征在其它例子中也可以进行组合。
如本文中使用的,术语“包括”及其变型表示开放的术语,含义是“包括但不限于”。术语“基于”表示“至少部分地基于”。术语“一个实施例”和“一实施例”表示“至少一个实施例”。术语“另一个实施例”表示“至少一个其他实施例”。术语“第一”、“第二”等可以指代不同的或相同的对象。下面可以包括其他的定义,无论是明确的还是隐含的。除非上下文中明确地指明,否则一个术语的定义在整个说明书中是一致的。
在工业界应用中,单个应用内存在大量过程间调用(如service层方法调用dao层接口以获取数据库中的数据),应用之间存在服务调用(如通过rpc,rest方式进行的服务调用),也就是说,单个应用中的数据可以通过服务调用的方式传播到其他应用。如果数据被调用方应用非法使用,则会引发数据安全问题,比如隐私泄露、资产受损等。
图1示出了隐私数据泄露过程的示例示意图。如图1所示,假设应用app_1所具有的数据库中的数据列IDCard被标注为隐私数据。响应于来自应用app_2的远程过程调用,数据列IDCard的隐私数据会被从数据库中检索出,并且经过若干转换层(POJO转换层)后发送给应用app_2。应用app_2进一步将该隐私数据暴露给其它应用。最终,应用app_n得到该隐私数据,将其存储为自身数据库中的数据列IDinfo并示出给用户。在这种情况下,如果应用app_n的用户不知道数据列IDinfo来源于私有数据IDCard,则会存在隐私数据被滥用的安全风险。
鉴于上述,需要对应用系统的过程调用期间的数据传播进行跟踪分析。污点分析技术被广泛地应用于数据传播跟踪分析。污点分析技术是指分析数据在程序中传播的技术。污点分析是数据安全领域中分析隐私泄露、代码漏洞的重要手段,在安全领域和软件工程领域中有着十分广泛的应用。污点分析过程主要包括污染源标记、污染传播规则指定和污点传播三个方面。污染源指不受信任的数据,如用户敏感数据、不受信任的外部输入。污染传播规则是根据程序指令和函数的语义,指定如何扩散污染数据的推理规则。比如,a=source,b=a,sink=b,则变量source的数据污染会影响到sink的数据。污点分析技术包括静态污点分析和动态污点分析。
污点分析包括三个要素:污染起点(Source)、污染终点(Sink)以及程序分析入口(Entry Point)。在污点分析过程中,需要根据程序分析入口来构建过程(函数)间调用的调用关系图(Call Graph)。Call Graph用于呈现计算机程序中的过程(函数)间调用关系。Call Graph中的节点由程序代码中的过程(例如,方法)组成,以及Call Graph中的边(也可以称为“边关系”)用于表示过程(例如,方法)之间的调用关系。
污点分析技术的示例可以包括静态污点分析工具Flowdroid及Ptaint(基于Doop)。在基于Flowdroid的应用系统的污点分析过程中,污点分析的对象是程序的源码或中间表示(中间码,或者在Java框架下为字节码),由此可以将污点传播中的显式流静态分析转化为针对程序中的静态数据依赖的分析。
在进行污点分析时,首先,针对应用程序的所有程序代码,根据程序间的函数调用关系构建调用关系图(Call Graph),调用关系图也可以称为调用图。然后,在函数间或函数内根据不同程序特性进行具体污点分析。显式污点传播的示例可以包括但不限于直接赋值传播、通过函数(过程)调用传播以及通过别名(指针)传播等。
图2示出了基于Flowdroid的应用系统的污点分析过程的示例示意图。下面以图2中示出的Java程序为例进行说明。
在图2中示出的示例中,第3行程序代码中的变量b为初始污点标记变量。第4行程序代码将一个包含变量b的算术表达式的计算结果直接赋值给变量c,由于变量c和变量b之间具有直接的赋值关系,污点标记可以直接从赋值语句右部的变量传播到左部变量。这种污点传播方式为直接赋值传播。
接着,变量c被作为实参传递给第5行程序代码中的函数foo,由此c上的污点标记通过函数调用传播到函数foo的形参z。z的污点标记又通过直接赋值传播到第8行程序代码中的x.f。由于foo的另外两个参数对象x和y都是对对象a的引用,二者之间存在别名。因此,x.f的污点标记可以通过别名传播到第9行程序代码的污点传播终点(污点汇聚点,或者污染终点)sink(y.f),从而导致发生隐私数据泄露。
基于Flowdroid的污点分析方案可以提供高精度的污点分析。然而,然而,在Flowdroid分析时需要预先加载整个应用程序并为整个应用程序的程序代码构建CallGraph。应用程序的代码包括应用层代码和库文件代码,并且一个企业应用中的库文件的占比约为92%,但是其中只有很少一部分代码会传播污染,由此针对库文件的污点分析大部分都是不必要的,从而导致基于Flowdroid的污点分析在性能方面存在严重问题。
此外,企业应用中会大量使用native方法、库及框架(如Spring框架)。native方法、缺失的库及框架动态生成的代码对静态分析都是不可见的,这些隐藏的逻辑被称为隐式依赖。在存在隐式依赖的情况下,Flowdroid所提供的Call Graph构建方案会存在漏边和误边,从而导致漏报和误报问题严重,由此导致基于Flowdroid的污点分析在正确性方面存在严重问题。
此外,在存在非平衡边的情况下,不能保证污点分析的准确性。而且,Flowdroid方案在污点分析过程中,每当堆对象中的对象被赋值时就发起指针分析,导致性能较差。
鉴于上述,本说明书的实施例提供一种用于应用系统的污点分析方法。在该方法中,首先,针对应用系统的程序代码中的应用层代码,使用第一调用关系构建算法来构建初始Call graph。接着,根据初始Call graph来生成控制流图,并使用控制流图来对程序代码进行污点分析。在分析出调用语句在初始Call graph中不存在边关系时,使用第二调用关系构建算法来在初始Call graph中为该调用语句扩展边关系,由此得到最终的Callgraph。利用该污点分析方法,由于仅仅对程序代码中的应用层代码以及部分必需的库文件代码构建较小规模的Call Graph,并且污点分析在较小规模的Call Graph上进行,从而大量减少了污点分析的工作量,提升了污点分析的性能。
术语“污点分析”在狭义上是指针对所关注数据的污点分析。在本说明书中,术语“污点分析”应该被广义地解释为针对程序代码所涉及的所有数据或者所有被访问数据的污点分析。此外,在本说明书中,术语“污染”可以与“数据传播”互换使用。此外,在本说明书中,术语“应用系统”也可以被理解为“应用”、“应用程序”或者“安装有应用程序的系统”。
下面将参照附图来详细描述根据本说明书的实施例的用于应用系统的污点分析的方法及装置。
图3示出了根据本说明书的实施例的用于应用系统的污点分析的方法300的示例流程图。
如图3所示,在步骤310,对应用系统的应用框架进行代码转换。即,在应用框架的层面上,对应用系统的程序代码进行代码转换。在一个示例中,程序代码可以是程序源代码或者是对程序源代码进行编译处理后得到的中间代码。例如,在程序源代码是Java代码的情况下,中间代码可以是字节码。代码转换例如可以包括:对程序代码进行补包处理、类替换和/或方法替换;在方法调用附近插入语句;和/或在方法的开始或结束处插入语句。通过对应用系统的应用框架进行代码转换,可以模拟应用框架的功能,模拟污染起点和污染终点,以及调用隐式方法的回调函数。在一个示例中,可以根据配置文件来对程序代码进行代码转换。图4A和图4B示出了根据本说明书的实施例的经过代码转换后的应用程序的程序代码的示例示意图。例如,图4B中所插入的第19行代码是在方法的开始或结束处插入语句的示例。在图4B中,注解的变量在xml配置文件中关联的类型为SampleServiceImpl,由此,图4B中所插入的第19行代码将变量初始化为SampleServiceImpl实例,从中间代码层来看,第19行代码被插入到ServerFacadeImple的默认构造方法的开始。换言之,第19行代码被插入到方法的开始处。此外,在图4B中,第4行的方法调用前后插入了语句,用于标记方法输入为污染起点source(第3行代码),以及标记返回结果为污染终点sink(第5行代码)。
在如上对程序代码进行代码转换后,在320,确定污点分析的各个要素,即,程序入口点,污染起点和污染终点。程序入口点的确定方法非常简单。通常,可由外部访问的方法和控制器方法被确认为是程序入口点。程序入口点被使用来构建过程(函数)间调用的Call Graph。输入数据可以被认为是污染起点(Source),以及输出数据可以被认为是污染终点(Sink)。输入数据的示例可以包括:程序入口点的输入参数、远程过程调用的返回值、可由数据库检索的字段。输出数据的示例可以包括:程序入口点的返回值、远程过程调用的参数以及可被保存到数据库的字段。在本说明书的一个示例中,所述字段包括代码字段或数据库字段。例如,图4A中第9行中的“source.id”和“dto.id”中的字段“id”。
然而,没有显式语句或方法可以用来配置污染起点或污染终点。例如,图4B的第22行中的getSamplesByName的返回值被污染并且被发送出,并且列表中的元素的名称或ID字段应该被标记为污染终点。为此,在第2-14行模拟调用上述方法的方法getSamplesByNameWrap。在调用之前,注入语句来将该变量标记为污染终点(第3行),并且在调用之后,注入语句来模拟该被污染的数据被写入污染终点(第5到12行)。
在如上得到程序入口点,污染起点和污染终点后,在330,使用第一调用关系构建算法来针对应用层代码构建Call Graph(即,初始Call graph)。在第一调用关系构建算法选择时,只关注算法精度,比如可以选择精度高的算法,比如,Spark算法,而无需关注算法性能。
要说明的是,310-330的操作可以是预先完成的。在如上得到初始Call Graph后,执行针对应用系统的污点分析过程。例如,针对应用系统的过程间调用的污点分析过程。
在340,根据初始Call Graph来生成控制流图。控制流图是过程的抽象表现,通常在编译器及静态分析中使用,代表了程序执行过程中会遍历到的所有路径。在本说明书的实施例中,控制流图还可以包括过程间的控制流,如调用流(call flow),返回流(returnflow)等。控制流图中的节点可以由程序代码中的语句或者基本块(basic block)组成,边表示节点之间的运行控制流向。接着,在350,使用控制流图来对应用系统的程序代码进行污点分析。
图5示出了根据本说明书的实施例的用于对应用程序的程序代码进行污点分析的过程的示例示意图。
在图5中,最左边示出的示图是基于Main()和foo()构建的初始Call Graph。在该Call Graph中,main()、foo()、source()和Sink()是节点,各个节点之间的连线表示边。如图5所示,main()与foo()和Sink()之间存在边关系,以及foo()与source()之间存在边关系。
中间示出的示图是控制流图,也称为过程间控制流程(ICFG)。在该控制流图示例中,x=new X(),x.f=source(),return x,b=foo(a)以及sink(b.f)是节点,b=foo(a)与x=new X()、return x和sink(b.f)之间存在边关系,x=new X()与x.f=source()、x.f=source()与return x以及b=foo(a)与sink(b.f)之间存在边关系。
最右边的示图是应用系统的过程调用的数据流图,也可以称为数据流转图。在本说明书的一个示例中,数据流图中的节点为字段,边为字段之间的数据流向,即,数据传播方向或者数据流转关系。在一个示例中,所述字段可以包括代码字段或数据库字段。在一个示例中,所述字段例如可以包括变量字段。
在进行污点分析时,首先基于初始Call Graph构建ICFG。随后,基于ICFG计算污点传播情况(污点分析)。在计算污点传播情况时,如果碰到调用语句,则检查该调用语句在初始Call Graph中是否存在边关系。如果在初始Call Graph中存在对应的边关系,则继续向下计算。
如果碰到调用语句并且该调用语句在Call Graph中不存在对应的边关系,则在360,使用第二调用关系构建算法来在Call Graph中为该调用语句扩展边关系。第二调用关系构建算法的精度低于第一调用关系构建算法,但是第二调用关系构建算法的性能优于第一调用关系构建算法。第二调用关系构建算法的示例例如可以包括CHA算法。
此外,可选地,在一个示例中,如果碰到调用语句并且该调用语句在Call Graph中不存在对应的边关系,则在使用第二调用关系构建算法来在Call Graph中为该调用语句扩展边关系的同时,还可以使用第二调用关系构建算法来在控制流图中为该调用语句扩展边关系,由此得到扩展后的控制流图。
此外,可选地,在一个示例中,在如上得到扩展后的控制流图后,在370,根据扩展后的控制流图生成数据流图,由此得到应用系统的数据传播路径。在本说明书的实施例中,数据传播路径是从污染起点到污染终点的数据传播路径,例如,如图5中所示出的数据传播路径x.f=source()->sink(b.f)。
图6示出了根据本说明书的实施例的数据流图的生成过程600的示例流程图。
如图6所示,在610,根据扩展后的控制流图构建候选数据传播路径。接着,在620,对候选数据传播路径进行剪枝处理。所述剪枝处理可以采用本领域中任何合适的剪枝处理算法来实现。然后,在630,基于经过剪枝处理后的候选数据传播路径,生成数据流图。
要说明的是,图6中示出的示例包括针对候选数据传播路径的剪枝处理过程,在本说明书的其它实施例中,也可以不包括针对候选数据传播路径的剪枝处理。
此外,可选地,在一个示例中,在进行污点分析时可以考虑调用点上下文信息。相应地,对候选数据传播路径进行剪枝处理可以包括基于调用点上下文信息来对所述候选数据传播路径进行剪枝处理。污点分析
在一个示例中,所述调用点上下文信息可以包括可跨过程访问变量的变量使用信息。相应地,在基于调用点上下文信息来对所述候选数据传播路径进行剪枝处理时,基于可跨过程访问变量的变量使用信息来确定候选数据传播路径中是否存在变量使用信息不一致。在确定候选数据传播路径中存在变量使用信息不一致时,认为该候选数据传播路径是错误数据传播路径,对该候选数据传播路径进行剪枝处理。在确定候选数据传播路径中存在变量使用信息一致时,认为该候选数据传播路径是正确数据传播路径,保留该候选数据传播路径。
图7示出了基于调用点上下文信息实现的剪枝处理过程的示例示意图。
图7示出了企业应用中的常见非平衡路径。在图7中,实线框表示程序代码,实线箭头表示调用关系,最上面的两个实线框表示两个路径的入口。路径1为:Entry1#queryByName()->Exedutor#exec(cb)->Cb1#query()->Dao1#queryByName(name),污染起点为Dao1#queryByName(name)的返回数据(DAO层),污染终点为其方法调用入口处(facade层)。路径2为:Entry2#queryByPid()->Executor#exec(cb)->Cb2#query()->Dao#2queryByRid(r id),污染起点为Dao#queryByRid(rid)的返回数据(DAO层),污染终点为其方法调用入口处(facade层)(entry2)。在基于Flowdroid的方案中,从污染起点开始分析,在该示例中,污点分析的起点是污染起点Dao1#queryByName和Dao2#queryByRid(rid),在此之前的调用上下文未知,因此通常注入一个空的上下文并往后传播。当分析到Executor#exec(cb)时,其上下文仍然为空,并被认为两个调用点Entry1和Entry2都是合理的。然而,对于路径1,只能返回Entry1,路径2只能返回Entry2,最终导致2个误报的数据传播路径。
在图7的实现方案中,假设Cb1#query()中的变量res1被污染。在Cb1#query()中,知道this变量的类型为Cb1,且包含一个名为query的方法,由此将这些信息加入到其上下文中,并令其随着return边返回到调用者方法中,以供在后续分析过程参考。在后续分析时,一旦发现上下文信息矛盾(不一致),则进行剪枝。具体来说,该上下文信息到达Executor#exec(cb)时,由于Cb1#query()中的变量this对应于Executor#exec(cb)中的变量cb,因此,将上下文信息this:Cb1更新为cb:Cb1。类似地,当到达Entry1#queryByName()和Entry2#queryByRid()时,发现Entry2#queryByRid()中的cb2在上下文中被声明为Cb1类型,但实际使用时是Cb2类型,从而发生变量使用信息矛盾(即,变量使用信息不一致),由此确定从Cb1#query()到Entry2#queryByRid()的数据传播路径是错误数据传播路径,由此对该错误数据传播路径进行剪枝处理。
此外,可选地,在一个示例中,在进行污点分析时,还可以考虑变量使用点与变量定义点之间的关系。相应地,对候选数据传播路径进行剪枝处理包括:基于变量使用点与变量定义点之间的关系(use-def关系)来对候选数据传播路径进行剪枝处理。
图8示出了根据本说明书的实施例的基于变量使用点与变量定义点之间的关系的剪枝处理过程800的一个示例的流程图。图8中示出的示例是基于过程内使用的局部变量的处理过程(过程内分析)。
如图8所示,在810,判断程序代码中的第一变量(当前变量)是否被赋值为堆变量。这里,第一变量为过程内使用的变量。如果第一变量未被赋值为堆变量,则返回到810继续监控。
在程序代码中的第一变量被赋值为堆变量时,在820,基于变量使用点与变量定义点之间的关系来搜索第一变量的别名变量。
在搜索出第一变量的别名变量后,在830,判断别名变量在后续程序代码中是否使用。
如果别名变量在后续程序代码中未被使用,则在840,剪枝与该别名变量关联的候选数据传播路径。换言之,只要通过该别名变量的候选数据传播路径都被剪枝。
如果别名变量在后续程序代码中被使用,则在850,保留与该别名变量关联的候选数据传播路径。
图9中示出了根据本说明书的实施例的过程内分析的代码示例。下面结合图9中示出的代码示例来对图9中示出的剪枝处理过程进行说明。
如图9所示,在代码示例1中,source()表示污染起点,sink()表示污染终点。每当被传播的变量被赋值到一个堆变量中时,会为其搜索别名。在该示例中,第三行代码被传播的变量被赋值给堆变量b.id,因此开启搜索b的别名变量,然后发现a是b的别名,进而从第1行开始继续搜索与a有关的数据传播流(污染流)。在此例中,变量a并没有在后面代码中使用到,因此针对变量a的分析是不必要的,从而如果在Call Graph中存在与变量a对应的边关系,则进行剪枝处理。
图10示出了根据本说明书的实施例的基于变量使用点与变量定义点之间的关系的剪枝处理过程的另一示例的流程图。图10中示出的示例是基于过程间使用的局部变量的处理过程(过程间分析)。
如图10所示,在1010,判断程序代码中的第一变量(当前变量)是否被赋值为堆变量。这里,第一变量为过程间使用的变量。如果第一变量未被赋值为堆变量,则返回到1010继续监控。
在程序代码中的第一变量被赋值为堆变量时,在1020,将第一变量映射到调用上下文或者调用方法中的第二变量。
在1030,基于变量使用点与变量定义点之间的关系来搜索第二变量的别名变量。
在1040,判断别名变量在后续程序代码中是否使用。
如果别名变量在后续程序代码中未被使用,则在1050,剪枝与该别名变量关联的候选数据传播路径。
如果别名变量在后续程序代码中被使用,则在1060,保留与该别名变量关联的候选数据传播路径。
图11中示出了根据本说明书的实施例的过程间分析的代码示例。下面结合图11中示出的代码示例来对图10中示出的剪枝处理过程进行说明。
对于过程间分析,除了通过参数、返回值及this相关的变量正向向后传播的污染,企业代码中通常还存在跨过程的反向的别名情况。如图10所示,在代码示例2中,result变量在一个内部类中被引用且被污染,然后返回到外部类方法中后最终被传入数据传播终点。由此,先将第一变量映射到调用上下文或者调用方法中的第二变量,即不同过程或不同类之间的变量映射,然后使用过程内分析方法来进行基于变量使用点与变量定义点之间的关系的剪枝处理。
如上参照图3到图11描述了根据本说明书的实施例的用于应用系统的污点分析的方法。
在上述污点分析方法中,通过仅仅对程序代码中的应用层代码以及部分必需的库文件代码构建较小规模的Call Graph,并且污点分析在较小规模的Call Graph上进行,从而大量减少了污点分析的工作量,提升了污点分析的性能。由此,可以为大规模的企业应用,尤其是存在大量使用native方法、库、及框架导致的隐式依赖的情况下,提供高效且具有高准确率和召回率的污点分析方案。
此外,在上述污点分析方法中,通过使用考虑调用点上下文信息的污点分析,可以从数据流图中剪枝错误数据传播路径,从而提升污点分析的准确性。此外,通过仅仅为可跨过程访问的变量增加上下文信息,并且对于每个方法,这些上下信息只计算一次,从而可以在引入性能开销极小的情况下提升污点分析的准确性。
此外,在上述污点分析方法中,通过use-def分析来为局部变量的搜索别名和进行剪枝,可以降低别名分析的复杂度,实现比全局搜索及按需搜索更快的性能。此外,通过判读定义使用关系,可以剪枝数据流图中的错误数据传播路径。
此外,在上述污点分析方法中,通过对应用层代码采用精度高的第一调用关系构建算法来构建Call Graph,可以所构建的Call Graph的整体准确率。此外,使用精度相对较低但性能更好的第二调用关系构建算法来实现针对Call Graph和控制流图的边关系扩展,可以高效地实现漏边回补,进而保证召回率。
此外,可选地,在一个示例中,在如上得到应用系统的数据流图后,所述方法还可以包括:根据数据流图得到应用系统的数据传播路径列表;以及将应用系统的数据传播路径列表保存在关系型数据库,以供在应用系统包括多个应用系统时使用来与其它应用系统的数据传播路径列表一起创建跨应用系统的数据传播路径列表。数据传播路径列表的示例可以如表1所示。
| 边数据ID | 污染起点 | 污染终点 |
| 0001 | x.f=source() | Sink(b.f) |
| …… | …… | …… |
表1
此外,可选地,在一个示例中,所述跨应用系统的数据传播路径列表被表征为数据传播路径图数据。例如,在如上得到单应用系统的数据传播路径列表后,将所得到的单应用系统的数据传播路径列表保存到关系型数据库。随后,同步到离线数据仓库,最终再同步到图数据库,由此得到跨应用系统的数据传播路径图数据。利用该跨应用系统的数据传播路径图数据,可以应用于数据泄露、变更管理、数据一致性检查等应用场景中。
此外,可选地,在一个例中,污点分析可以包括基于切片的并行污点分析。换言之,可以将污点分析任务切分为多个切片任务,并且将所得到的切片任务分发到不同的服务器来进行并行污点分析。在一个示例中,所述切分处理可以包括基于程序入口点的切分处理,或者基于污染起点(Source)的切分处理。相应地,所述切片可以包括基于程序入口点切分得到的切片或者基于污染起点切分得到的切片。
此外,要说明的是,图3中示出的仅仅是例示实施例,在本说明书的其它实施例中,可以不包括操作310、320、330和370中的一个、多个或者全部。
图12示出了根据本说明书的实施例的用于应用系统的污点分析的装置(下文中称为“污点分析装置”)1200的示例流程图。如图12所示,污点分析装置1200包括代码转换单元1210、要素确定单元1220、切片处理单元1230、控制流图生成单元1240、污点分析单元1250、边关系扩展单元1260和数据流图生成单元1270。
代码转换单元1210被配置为对应用系统的应用框架进行代码转换。代码转换单元1210的操作可以参考上面参照图3描述的310的操作。
要素确定单元1220被配置为确定程序代码的程序入口点、污染起点和污染终点。相应地,污点分析包括基于程序入口点、污染起点和污染终点的污点分析。要素确定单元1220的操作可以参考上面参照图3描述的320的操作。
切片处理单元1230被配置为对污点分析的分析任务进行切片处理。相应地,污点分析包括基于切片的并行污点分析。
控制流图生成单元1240被配置为根据调用关系图来生成控制流图,所述调用关系图通过使用第一调用关系构建算法来根据应用系统的程序代码中的应用层代码构建。控制流图生成单元1240的操作可以参考上面参照图3描述的340的操作。
污点分析单元1250被配置为使用控制流图来对应用系统的程序代码进行污点分析。污点分析单元1250的操作可以参考上面参照图3描述的350的操作。
边关系扩展单元1260被配置为在污点分析结果指示调用语句在第一调用关系图中不存在边关系时,使用第二调用关系构建算法来在所述调用关系图中为该调用语句扩展边关系。调用关系图扩展单元1260的操作可以参考上面参照图4描述的360的操作。
此外,可选地,在一个示例中,边关系扩展单元1260还可以被配置为在污点分析结果指示调用语句在第一调用关系图中不存在边关系时,使用第二调用关系构建算法来在控制流图中为该调用语句扩展边关系。数据流图生成单元1270被配置为根据扩展后的控制流图来生成数据流图。
图13示出了根据本说明书的实施例的数据流图生成单元1300的一个实现示例的方框图。如图13所示,数据流图生成单元1300包括数据传播路径构建模块1310、剪枝处理模块1320和数据流图生成模块1330。
数据传播路径构建模块1310被配置为根据扩展后的控制流图构建候选数据传播路径。剪枝处理模块1320被配置为对候选数据传播路径进行剪枝处理。数据流图生成模块1330被配置为基于经过剪枝处理后的候选数据传播路径,生成数据流图。
要说明的是,图13中示出的仅仅是数据流图生成单元的例示性实施例,在本说明书的其它实施例中,数据流图生成单元也可以不包括剪枝处理模块。
此外,可选地,在一个示例中,所述污点分析包括考虑调用点上下文信息的污点分析。剪枝处理模块1320被配置为基于调用点上下文信息来对所述候选数据传播路径进行剪枝处理。
此外,可选地,在一个示例中,调用点上下文信息可以包括可跨过程访问变量的变量使用信息。相应地,剪枝处理模块1320被配置为基于可跨过程访问变量的变量使用信息来确定候选数据传播路径中是否存在变量使用信息不一致;以及在确定候选数据传播路径中存在变量使用信息不一致时,对该候选数据传播路径进行剪枝处理。
此外,可选地,在一个示例中,所述污点分析包括考虑变量使用点与变量定义点之间的关系的污点分析。污点分析剪枝处理模块1320被配置为基于变量使用点与变量定义点之间的关系来对候选数据传播路径进行剪枝处理。
图14示出了根据本说明书的实施例的剪枝处理模块1400的一个实现示例的方框图。如图14所示,剪枝处理模块1400包括别名变量搜索子模块1410、变量续用判断子模块1420和剪枝处理子模块1430。
别名变量搜索子模块1410被配置为在程序代码中的第一变量被赋值为堆变量时,基于变量使用点与变量定义点之间的关系来搜索第一变量的别名变量,第一变量为过程内使用的局部变量。
变量续用判断子模块1420被配置为判断别名变量在后续程序代码中是否使用。
剪枝处理子模块1430被配置为在别名变量在后续程序代码中未被使用时,剪枝与该别名变量关联的候选数据传播路径。
图15示出了根据本说明书的实施例的剪枝处理模块1500的另一实现示例的方框图。如图15所示,剪枝处理模块1500包括变量映射子模块1510、别名变量搜索子模块1520、变量续用判断子模块1530和剪枝处理子模块1540。
变量映射子模块1510被配置为在程序代码中的第一变量被赋值为堆变量时,将第一变量映射到调用上下文或者调用方法中的第二变量,第一变量为过程间使用的局部变量。
别名变量搜索子模块1520被配置为基于变量使用点与变量定义点之间的关系来搜索第二变量的别名变量。
变量续用判断子模块1530被配置为判断别名变量在后续程序代码中是否使用。
剪枝处理子模块1540被配置为在别名变量在后续程序代码中未被使用时,剪枝与该别名变量关联的候选数据传播路径。
此外,可选地,在一个示例中,污点分析装置还可以包括数据传播路径确定单元和保存单元。所述数据传播路径确定单元被配置为根据数据流图得到应用系统的数据传播路径列表。所述保存单元被配置为将应用系统的数据传播路径列表保存在关系型数据库,以供在包括多个应用系统时使用来与其它应用系统的数据传播路径列表一起创建跨应用系统的数据传播路径列表。
此外,要说明的是,可选地,在一个示例中,污点分析装置还可以包括调用关系图构建单元。所述调用关系图沟通单元被配置为通过使用第一调用关系构建算法来根据应用系统的程序代码中的应用层代码构建调用关系图。在另一示例中,调用关系图构建单元也可以利用边关系扩展单元来实现。
此外,可选地,在另一示例中,污点分析装置可以不包括代码转换单元、要素确定单元、切片处理单元和数据流图生成单元中的一个、多个或全部。
如上参照图1到图15,对根据本说明书实施例的污点分析方法和污点分析装置进行了描述。上面的污点分析装置可以采用硬件实现,也可以采用软件或者硬件和软件的组合来实现。
图16示出了根据本说明书的实施例的用于实现应用系统的污点分析的电子设备1400的示意图。如图16所示,电子设备1600可以包括至少一个处理器1610、存储器(例如,非易失性存储器)1620、内存1630和通信接口1640,并且至少一个处理器1610、存储器1620、内存1630和通信接口1640经由总线1660连接在一起。至少一个处理器1610执行在存储器中存储或编码的至少一个计算机可读指令(即,上述以软件形式实现的元素)。
在一个实施例中,在存储器中存储计算机可执行指令,其当执行时使得至少一个处理器1610:根据调用关系图来生成控制流图,所述调用关系图通过使用第一调用关系构建算法来根据所述应用系统的程序代码中的应用层代码构建;使用控制流图来对应用系统的程序代码进行污点分析;以及在污点分析结果指示调用语句在调用关系图中不存在边关系时,使用第二调用关系构建算法来在调用关系图中为该调用语句扩展边关系。
应该理解,在存储器中存储的计算机可执行指令当执行时使得至少一个处理器1610进行本说明书的各个实施例中以上结合图1-15描述的各种操作和功能。
根据一个实施例,提供了一种比如机器可读介质(例如,非暂时性机器可读介质)的程序产品。机器可读介质可以具有指令(即,上述以软件形式实现的元素),该指令当被机器执行时,使得机器执行本说明书的各个实施例中以上结合图1-15描述的各种操作和功能。具体地,可以提供配有可读存储介质的系统或者装置,在该可读存储介质上存储着实现上述实施例中任一实施例的功能的软件程序代码,且使该系统或者装置的计算机或处理器读出并执行存储在该可读存储介质中的指令。
在这种情况下,从可读介质读取的程序代码本身可实现上述实施例中任何一项实施例的功能,因此机器可读代码和存储机器可读代码的可读存储介质构成了本发明的一部分。
可读存储介质的实施例包括软盘、硬盘、磁光盘、光盘(如CD-ROM、CD-R、CD-RW、DVD-ROM、DVD-RAM、DVD-RW、DVD-RW)、磁带、非易失性存储卡和ROM。可选择地,可以由通信网络从服务器计算机上或云上下载程序代码。
本领域技术人员应当理解,上面公开的各个实施例可以在不偏离发明实质的情况下做出各种变形和修改。因此,本发明的保护范围应当由所附的权利要求书来限定。
需要说明的是,上述各流程和各系统结构图中不是所有的步骤和单元都是必须的,可以根据实际的需要忽略某些步骤或单元。各步骤的执行顺序不是固定的,可以根据需要进行确定。上述各实施例中描述的装置结构可以是物理结构,也可以是逻辑结构,即,有些单元可能由同一物理实体实现,或者,有些单元可能分由多个物理实体实现,或者,可以由多个独立设备中的某些部件共同实现。
以上各实施例中,硬件单元或模块可以通过机械方式或电气方式实现。例如,一个硬件单元、模块或处理器可以包括永久性专用的电路或逻辑(如专门的处理器,FPGA或ASIC)来完成相应操作。硬件单元或处理器还可以包括可编程逻辑或电路(如通用处理器或其它可编程处理器),可以由软件进行临时的设置以完成相应操作。具体的实现方式(机械方式、或专用的永久性电路、或者临时设置的电路)可以基于成本和时间上的考虑来确定。
上面结合附图阐述的具体实施方式描述了示例性实施例,但并不表示可以实现的或者落入权利要求书的保护范围的所有实施例。在整个本说明书中使用的术语“示例性”意味着“用作示例、实例或例示”,并不意味着比其它实施例“优选”或“具有优势”。出于提供对所描述技术的理解的目的,具体实施方式包括具体细节。然而,可以在没有这些具体细节的情况下实施这些技术。在一些实例中,为了避免对所描述的实施例的概念造成难以理解,公知的结构和装置以框图形式示出。
本公开内容的上述描述被提供来使得本领域任何普通技术人员能够实现或者使用本公开内容。对于本领域普通技术人员来说,对本公开内容进行的各种修改是显而易见的,并且,也可以在不脱离本公开内容的保护范围的情况下,将本文所定义的一般性原理应用于其它变型。因此,本公开内容并不限于本文所描述的示例和设计,而是与符合本文公开的原理和新颖性特征的最广范围相一致。
Claims (30)
1.一种用于应用系统的污点分析的方法,包括:
根据调用关系图来生成控制流图,所述调用关系图通过使用第一调用关系构建算法来根据所述应用系统的程序代码中的应用层代码构建;
使用所述控制流图来对应用系统的程序代码进行污点分析;以及
在污点分析结果指示调用语句在所述调用关系图中不存在边关系时,使用第二调用关系构建算法来在所述调用关系图中为该调用语句扩展边关系,
其中,所述第一调用关系构建算法包括算法精度高的调用关系构建算法,以及所述第二调用关系构建算法的精度低于所述第一调用关系构建算法,并且所述第二调用关系构建算法的性能优于所述第一调用关系构建算法。
2.如权利要求1所述的方法,其中,使用第二调用关系构建算法来在所述调用关系图中为该调用语句扩展边关系包括:
使用第二调用关系构建算法来在所述调用关系图和所述控制流图中为该调用语句扩展边关系,
所述方法还包括:
根据所述扩展后的控制流图生成数据流图。
3.如权利要求2所述的方法,其中,根据所述扩展后的控制流图生成数据流图包括:
根据所述扩展后的控制流图构建候选数据传播路径;
对所述候选数据传播路径进行剪枝处理;以及
基于经过剪枝处理后的候选数据传播路径,生成所述数据流图。
4.如权利要求3所述的方法,其中,所述数据流图的节点包括代码字段或数据库字段,以及边关系表示字段之间的数据流向。
5.如权利要求4所述的方法,其中,所述污点分析包括考虑调用点上下文信息的污点分析,对所述候选数据传播路径进行剪枝处理包括:
基于调用点上下文信息来对所述候选数据传播路径进行剪枝处理。
6.如权利要求5所述的方法,其中,所述调用点上下文信息包括可跨过程访问变量的变量使用信息。
7.如权利要求6所述的方法,其中,基于调用点上下文信息来对所述候选数据传播路径进行剪枝处理包括:
基于可跨过程访问变量的变量使用信息来确定候选数据传播路径中是否存在变量使用信息不一致;以及
在确定候选数据传播路径中存在变量使用信息不一致时,对该候选数据传播路径进行剪枝处理。
8.如权利要求4所述的方法,其中,所述污点分析包括考虑变量使用点与变量定义点之间的关系的污点分析,对所述候选数据传播路径进行剪枝处理包括:
基于变量使用点与变量定义点之间的关系来对所述候选数据传播路径进行剪枝处理。
9.如权利要求8所述的方法,其中,基于变量使用点与变量定义点之间的关系来对所述候选数据传播路径进行剪枝处理包括:
在程序代码中的第一变量被赋值为堆变量时,基于所述变量使用点与变量定义点之间的关系来搜索所述第一变量的别名变量,所述第一变量为过程内使用的局部变量;
判断所述别名变量在后续程序代码中是否使用;以及
在所述别名变量在后续程序代码中未被使用时,剪枝与所述别名变量关联的候选数据传播路径。
10.如权利要求8所述的方法,其中,基于变量使用点与变量定义点之间的关系来对所述候选数据传播路径进行剪枝处理包括:
在程序代码中的第一变量被赋值为堆变量时,将所述第一变量映射到调用上下文或者调用方法中的第二变量,所述第一变量为过程间使用的局部变量;
基于变量使用点与变量定义点之间的关系来搜索所述第二变量的别名变量;
判断所述别名变量在后续程序代码中是否使用;以及
在所述别名变量在后续程序代码中未被使用时,剪枝与所述别名变量关联的候选数据传播路径。
11.如权利要求1所述的方法,其中,所述第一调用关系构建算法的精度高于所述第二调用关系构建算法的精度,以及所述第一调用关系构建算法的性能低于所述第二调用关系构建算法的性能。
12.如权利要求1所述的方法,其中,所述程序代码包括经过代码转换后的程序代码。
13.如权利要求12所述的方法,其中,所述代码转换包括:
对程序代码进行补包处理、类替换和/或方法替换;
在方法调用附近插入语句;和/或
在方法的开始或结束处插入语句。
14.如权利要求1所述的方法,其中,所述污点分析包括基于切片的并行污点分析。
15.如权利要求14所述的方法,其中,所述切片包括基于程序入口点切分得到的切片或者基于污染起点切分得到的切片。
16.如权利要求1所述的方法,还包括:
确定所述程序代码的程序入口点、污染起点和污染终点。
17.一种用于应用系统的污点分析的装置,包括:
控制流图生成单元,根据调用关系图来生成控制流图,所述调用关系图通过使用第一调用关系构建算法来根据所述应用系统的程序代码中的应用层代码构建;
污点分析单元,使用所述控制流图来对应用系统的程序代码进行污点分析;以及
边关系扩展单元,在污点分析结果指示调用语句在所述调用关系图中不存在边关系时,使用第二调用关系构建算法来在所述调用关系图中为该调用语句扩展边关系,
其中,所述第一调用关系构建算法包括算法精度高的调用关系构建算法,以及所述第二调用关系构建算法的精度低于所述第一调用关系构建算法,并且所述第二调用关系构建算法的性能优于所述第一调用关系构建算法。
18.如权利要求17所述的装置,其中,在污点分析结果指示调用语句在所述调用关系图中不存在边关系时,所述边关系扩展单元使用第二调用关系构建算法来在所述调用关系图和所述控制流图中为该调用语句扩展边关系,
所述装置还包括:
数据流图生成单元,根据所述扩展后的控制流图生成数据流图。
19.如权利要求18所述的装置,其中,所述数据流图生成单元包括:
数据传播路径构建模块,根据所述扩展后的控制流图构建候选数据传播路径;
剪枝处理模块,对所述候选数据传播路径进行剪枝处理;以及
数据流图生成模块,基于经过剪枝处理后的候选数据传播路径,生成所述数据流图。
20.如权利要求19所述的装置,其中,所述数据流图的节点包括代码字段或数据库字段,以及边关系表示字段之间的数据流向。
21.如权利要求20所述的装置,其中,所述污点分析包括考虑调用点上下文信息的污点分析,所述剪枝处理模块基于调用点上下文信息来对所述候选数据传播路径进行剪枝处理。
22.如权利要求21所述的装置,其中,所述调用点上下文包括可跨过程访问变量的变量使用信息,所述剪枝处理模块:
基于可跨过程访问变量的变量使用信息来确定候选数据传播路径中是否存在变量使用信息不一致;以及
在确定候选数据传播路径中存在变量使用信息不一致时,对该候选数据传播路径进行剪枝处理。
23.如权利要求20所述的装置,其中,所述污点分析包括考虑变量使用点与变量定义点之间的关系的污点分析,所述剪枝处理模块基于变量使用点与变量定义点之间的关系来对所述候选数据传播路径进行剪枝处理。
24.如权利要求23所述的装置,其中,所述剪枝处理模块:
在程序代码中的第一变量被赋值为堆变量时,基于变量使用点与变量定义点之间的关系来搜索所述第一变量的别名变量,所述第一变量为过程内使用的局部变量;
判断所述别名变量在后续程序代码中是否使用;以及
在所述别名变量在后续程序代码中未被使用时,剪枝与所述别名变量关联的候选数据传播路径。
25.如权利要求23所述的装置,其中,所述剪枝处理模块:
在程序代码中的第一变量被赋值为堆变量时,将所述第一变量映射到调用上下文或者调用方法中的第二变量,所述第一变量为过程间使用的局部变量;
基于变量使用点与变量定义点之间的关系来搜索所述第二变量的别名变量;
判断所述别名变量在后续程序代码中是否使用;以及
在所述别名变量在后续程序代码中未被使用时,剪枝与所述别名变量关联的候选数据传播路径。
26.如权利要求17所述的装置,还包括:
代码转换单元,对所述应用系统的应用框架进行代码转换,
所述污点分析单元使用所述控制流图来对经过代码转换后的程序代码进行污点分析。
27.如权利要求17所述的装置,还包括:
要素确定单元,确定所述程序代码的程序入口点、污染起点和污染终点。
28.如权利要求27所述的装置,还包括:
切片处理单元,对所述污点分析的分析任务进行切片处理,
其中,所述污点分析包括基于切片的并行污点分析。
29.一种电子设备,包括:
至少一个处理器,以及
与所述至少一个处理器耦合的存储器,所述存储器存储指令,当所述指令被所述至少一个处理器执行时,使得所述至少一个处理器执行如权利要求1到16中任一所述的方法。
30.一种机器可读存储介质,其存储有可执行指令,所述指令当被执行时使得所述机器执行如权利要求1到16中任一所述的方法。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN202010938928.XA CN111966346B (zh) | 2020-09-09 | 2020-09-09 | 应用系统的污点分析方法及装置 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN202010938928.XA CN111966346B (zh) | 2020-09-09 | 2020-09-09 | 应用系统的污点分析方法及装置 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| CN111966346A CN111966346A (zh) | 2020-11-20 |
| CN111966346B true CN111966346B (zh) | 2022-05-10 |
Family
ID=73391977
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| CN202010938928.XA Active CN111966346B (zh) | 2020-09-09 | 2020-09-09 | 应用系统的污点分析方法及装置 |
Country Status (1)
| Country | Link |
|---|---|
| CN (1) | CN111966346B (zh) |
Families Citing this family (6)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN112926058B (zh) * | 2021-03-25 | 2024-07-16 | 支付宝(杭州)信息技术有限公司 | 代码处理方法、污点分析方法和装置 |
| CN113176990B (zh) * | 2021-03-25 | 2022-10-18 | 中国人民解放军战略支援部队信息工程大学 | 一种支持数据间关联分析的污点分析框架及方法 |
| CN113392404B (zh) * | 2021-06-15 | 2023-04-07 | 浙江网商银行股份有限公司 | 漏洞检测方法、装置及电子设备 |
| CN114637992A (zh) * | 2022-03-03 | 2022-06-17 | 阿里云计算有限公司 | 软件函数调用行为数据的处理方法及装置 |
| CN117272331B (zh) * | 2023-11-23 | 2024-02-02 | 北京安普诺信息技术有限公司 | 基于代码疫苗的跨线程漏洞分析方法、装置、设备及介质 |
| CN120803462B (zh) * | 2025-09-09 | 2025-12-05 | 软安科技有限公司 | 代码分析路径剪枝方法、装置、设备及存储介质 |
Citations (5)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN1508681A (zh) * | 2002-12-17 | 2004-06-30 | 国际商业机器公司 | 用于在赋值语句中查找归约变量的方法和系统 |
| CN105550594A (zh) * | 2015-12-17 | 2016-05-04 | 西安电子科技大学 | 安卓应用文件的安全性检测方法 |
| CN106940773A (zh) * | 2017-01-10 | 2017-07-11 | 西安电子科技大学 | 基于静态污点数据分析的隐私泄漏漏洞检测确认方法 |
| CN107229867A (zh) * | 2017-06-12 | 2017-10-03 | 北京奇虎科技有限公司 | 内核漏洞挖掘方法、装置、计算设备及计算机存储介质 |
| CN111611586A (zh) * | 2019-02-25 | 2020-09-01 | 上海信息安全工程技术研究中心 | 基于图卷积网络的软件漏洞检测方法及装置 |
Family Cites Families (4)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US7509298B2 (en) * | 2006-03-31 | 2009-03-24 | International Business Machines Corporation | System and method for a logical-model based application understanding and transformation |
| US8584246B2 (en) * | 2009-10-13 | 2013-11-12 | International Business Machines Corporation | Eliminating false reports of security vulnerabilities when testing computer software |
| US20140130153A1 (en) * | 2012-11-08 | 2014-05-08 | International Business Machines Corporation | Sound and effective data-flow analysis in the presence of aliasing |
| US9811322B1 (en) * | 2016-05-31 | 2017-11-07 | Oracle International Corporation | Scalable provenance generation from points-to information |
-
2020
- 2020-09-09 CN CN202010938928.XA patent/CN111966346B/zh active Active
Patent Citations (5)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN1508681A (zh) * | 2002-12-17 | 2004-06-30 | 国际商业机器公司 | 用于在赋值语句中查找归约变量的方法和系统 |
| CN105550594A (zh) * | 2015-12-17 | 2016-05-04 | 西安电子科技大学 | 安卓应用文件的安全性检测方法 |
| CN106940773A (zh) * | 2017-01-10 | 2017-07-11 | 西安电子科技大学 | 基于静态污点数据分析的隐私泄漏漏洞检测确认方法 |
| CN107229867A (zh) * | 2017-06-12 | 2017-10-03 | 北京奇虎科技有限公司 | 内核漏洞挖掘方法、装置、计算设备及计算机存储介质 |
| CN111611586A (zh) * | 2019-02-25 | 2020-09-01 | 上海信息安全工程技术研究中心 | 基于图卷积网络的软件漏洞检测方法及装置 |
Also Published As
| Publication number | Publication date |
|---|---|
| CN111966346A (zh) | 2020-11-20 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| CN111966346B (zh) | 应用系统的污点分析方法及装置 | |
| US12204431B2 (en) | Method and system for the on-demand generation of graph-like models out of multidimensional observation data | |
| US8392465B2 (en) | Dependency graphs for multiple domains | |
| US7490265B2 (en) | Recovery segment identification in a computing infrastructure | |
| CN111966718B (zh) | 用于应用系统的数据传播追踪的系统及方法 | |
| CN114116065B (zh) | 获取拓扑图数据对象的方法、装置、及电子设备 | |
| CN111610978A (zh) | 一种小程序转换方法、装置、设备及存储介质 | |
| US20140172850A1 (en) | Method, apparatus, and computer-readable medium for optimized data subsetting | |
| JP2017534996A (ja) | クラウドサービスインフラストラクチャのためのドメイン固有言語を提供し実行するシステム及び方法 | |
| Nayak et al. | Automatic Test Data Synthesis using UML Sequence Diagrams. | |
| US20220337620A1 (en) | System for collecting computer network entity information employing abstract models | |
| CN111258565A (zh) | 小程序的生成方法、系统、服务器及存储介质 | |
| CN104572085A (zh) | 应用程序的分析方法及装置 | |
| US10268461B2 (en) | Global data flow optimization for machine learning programs | |
| CN113495728A (zh) | 依赖关系确定方法、装置、电子设备及介质 | |
| JP7513116B2 (ja) | コールグラフ作成装置、コールグラフ作成方法及びプログラム | |
| JP2018169693A (ja) | 情報処理装置、情報処理方法および情報処理プログラム | |
| US20120254259A1 (en) | Flexible order of authoring for data integration solutions | |
| CN116578282A (zh) | 代码生成方法、装置、电子设备及介质 | |
| CN116610568A (zh) | 一种识别代码的依赖关系的方法、装置、设备及介质 | |
| US20230113941A1 (en) | Data confidence fabric view models | |
| CN103744678B (zh) | 基于寄存器传输语言确定静态函数调用关系的方法 | |
| CN114860566A (zh) | 源代码测试方法、装置、电子设备及存储介质 | |
| Böhme et al. | A penny a function: towards cost transparent cloud programming | |
| CN116432185B (zh) | 一种异常检测方法、装置、可读存储介质及电子设备 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| PB01 | Publication | ||
| PB01 | Publication | ||
| SE01 | Entry into force of request for substantive examination | ||
| SE01 | Entry into force of request for substantive examination | ||
| GR01 | Patent grant | ||
| GR01 | Patent grant | ||
| CP03 | Change of name, title or address |
Address after: 310000 Zhejiang Province, Hangzhou City, Xihu District, Xixi Road 543-569 (continuous odd numbers) Building 1, Building 2, 5th Floor, Room 518 Patentee after: Alipay (Hangzhou) Digital Service Technology Co.,Ltd. Country or region after: China Address before: 310000 801-11 section B, 8th floor, 556 Xixi Road, Xihu District, Hangzhou City, Zhejiang Province Patentee before: Alipay (Hangzhou) Information Technology Co., Ltd. Country or region before: China |
|
| CP03 | Change of name, title or address |