CN112199292B - 一种基于规则定义的Java污点分析方法 - Google Patents

一种基于规则定义的Java污点分析方法 Download PDF

Info

Publication number
CN112199292B
CN112199292B CN202011115176.3A CN202011115176A CN112199292B CN 112199292 B CN112199292 B CN 112199292B CN 202011115176 A CN202011115176 A CN 202011115176A CN 112199292 B CN112199292 B CN 112199292B
Authority
CN
China
Prior art keywords
sink
taint
source
function
point
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
Application number
CN202011115176.3A
Other languages
English (en)
Other versions
CN112199292A (zh
Inventor
王盛
杨智霖
欧鹏程
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hunan Panlian Xin'an Information Technology Co ltd
Original Assignee
Hunan Panlian Xin'an Information Technology Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Hunan Panlian Xin'an Information Technology Co ltd filed Critical Hunan Panlian Xin'an Information Technology Co ltd
Priority to CN202011115176.3A priority Critical patent/CN112199292B/zh
Publication of CN112199292A publication Critical patent/CN112199292A/zh
Application granted granted Critical
Publication of CN112199292B publication Critical patent/CN112199292B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/562Static detection
    • G06F21/563Static detection by source code analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Health & Medical Sciences (AREA)
  • Quality & Reliability (AREA)
  • General Health & Medical Sciences (AREA)
  • Virology (AREA)
  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本发明具体公开了一种基于规则定义的Java污点分析方法,所述方法包括:S1、定义Java语言中source点和sink点的规则并形成格式化的规则;S2、定义Java语言的污点传播规则;S3、根据步骤S1中所定义的Java语言中source点和sink点的规则和步骤S2中所定义的污点传播规则,构建Java语言中每个污点的传播路径以对Java污点进行分析。本发明通过对Java语言中source点和sink点的规则以及对污点传播规则进行定义,从而构建出Java语言中污点的传播路径并进行追踪,通过将程序中的污点构建与source点规则、sink点规则和pass点规则的定义相分离,使得污点传播分析具有自定义性和可扩展性,因此,用户可以在不了解静态分析核心技术的情况下构造出对Java污点进行分析的自定义污染分析规则。

Description

一种基于规则定义的Java污点分析方法
技术领域
本发明涉及源代码分析技术领域,尤其涉及一种基于规则定义的Java污点分析方法。
背景技术
现有的污点分析技术大多是基于指针分析的技术,指针分析技术主要是为指针变量构建指针流图(PFG),即:为各指针变量之间的引用传递/相互引用关系构建一个关系图。这种分析存在一个问题,就是当静态分析源代码时,遇到一些不可直接进入函数继续进行分析的节点。比如Java语言中JNI提供的native方法,不能够再深入地进行分析,因为JNI接口调用层的两侧为不同的编程语言:Java和C/C++语言,且另一侧的C/C++编程语言一般会被编译成二进制的代码,所以分析起来相当困难。另外,污点安全分析工具主要是针对用户的代码进行分析,也不需要再进行深入分析。
发明内容
本发明的目的是提供一种基于规则定义的Java污点分析方法,所述方法通过定义Java语言中的source点和sink点的规则以及对污点传播规则进行定义,从而构建出每个污点的传播路径并进行追踪,使得污点传播分析具有自定义性和可扩展性,因此,用户可以在不了解静态分析核心技术的情况下构造自定义污染分析规则以对Java污点进行分析。
为解决上述技术问题,本发明提供一种基于规则定义的Java污点分析方法,所述方法包括以下步骤:
S1、定义Java语言中source点和sink点的规则以形成格式化的规则;
S2、定义Java语言的污点传播规则;
S3、根据步骤S1中所定义的Java语言中source点和sink点的规则和步骤S2中所定义的污点传播规则,构建Java语言中每个污点的传播路径以对Java污点进行分析。
优选地,所述步骤S1中source点的规则具体包括source标识、第一命名空间、第一类名、第一函数名和第一flags,其中,所述source标识表示sourse点ID,第一命名空间、第一类名第一和函数名用于确定程序中的source函数并进行匹配,第一flags表示source点返回数据所携带的污点信息。
优选地,所述步骤S1中sink点的规则具体包括sink标识、第二命名空间、第二类名、第二函数名和第二flags,其中,所述sink标识表示sink点ID,第二命名空间、第二类名和第二函数名用于确定程序中的sink函数并进行匹配,第二flags表示sink点返回数据所携带的污点信息。
优选地,所述步骤S2中的污点传播规则是指类实例化、函数传参和赋值中的至少一种。
优选地,所述步骤S2中的污点传播规则具体包括Pass标识、第三命名空间、第三类名、第三函数名和第三flags,其中,所述Pass标识表示pass点ID,第三命名空间、第三类名和第三函数名用于确定程序中的Pass函数并进行匹配,第三flags包括用于过滤掉流向sink点污点数据的+flags和-flags。
优选地,所述步骤S3的具体实现方式为:根据source点和sink点的规则分别对source点和sink点进行匹配,同时根据污点传播规则对pass点进行匹配,然后将匹配到的source点、pass点和sink点连接成边以形成一条污染路径,进而实现对Java污点的分析。
与现有技术比较,本发明通过定义Java语言中的source点和sink点的规则以及对污点传播规则进行定义,从而构建出每个污点的传播路径并进行追踪,使得污点传播分析具有自定义性和可扩展性,因此,用户可以在不了解静态分析核心技术的情况下构造出自定义污染分析规则以对Java污点进行分析。
附图说明
图1是本发明一种基于规则定义的Java污点分析方法的流程图,
图2是本发明中source函数和sink函数之间的调用关系以及污点传播的路径指向图。
具体实施方式
为了使本技术领域的人员更好地理解本发明的技术方案,下面结合附图对本发明作进一步的详细说明。
如图1所示,一种基于规则定义的Java污点分析方法,所述方法包括以下步骤:
S1、定义Java语言中source点和sink点的规则以形成格式化的规则;
S2、定义Java语言的污点传播规则;
S3、根据步骤S1中所定义的Java语言中source点和sink点的规则和步骤S2中所定义的污点传播规则,构建Java语言中每个污点的传播路径以对Java污点进行分析。
本实施例中,首先对Java语言中source点和sink点的规则进行定义,同时对污点传播规则进行定义,进而构建出Java语言中污点的传播路径并进行追踪,通过将程序中的污点构建与source点规则、sink点规则和污点传播规则定义相分离,使得污点传播分析具有自定义性和可扩展性,对于一些开发人员而言,每个人都有一套自己对程序的某种source函数->sink函数感兴趣的规则,既可以根据本发明的技术方案在不修改程序的源代码的情况下,进行规则扩展,换句话说,对于不同用户,如果他们对一个程序源代码的source函数->sink函数的兴趣侧重点不同,就可以针对不同的兴趣侧重点来定义不同的规则,系统将为其生成不同的source函数->sink函数的传播路径。因此,用户可以在不了解静态分析核心技术的情况下构造出自定义污染分析规则以实现对Java污点进行分析。
其中,所述步骤S1中source点的规则具体包括source标识、第一命名空间、第一类名、第一函数名和第一flags,其中,所述source标识表示sourse点ID,第一命名空间、第一类名第一和函数名用于确定程序中的source函数并进行匹配,第一flags表示source点返回数据所携带的污点信息。
本实施例中,每个source点均由五个部分组成:source标识(source id),第一命名空间(1th NameSpace),类名(1th ClassName),函数名(1th FunctionName),1th flags。通过“第一命名空间、第一类名和第一函数名”能够唯一确定程序中出现的source函数(即程序中出现的source函数必可以表示成“第一命名空间.第一类名.第一函数名”的形式),进而能够对程序中的source函数进行匹配,从而得到一个source点,其中第一flags是指source点返回数据所携带的的污点信息,用一个表示。设定程序中出现source函数为x=source(),假设等号右侧的函数可以表示成“1th namespace1.1th classname1.1thsource”这种形式,如果我们系统中预定义了一个规则(source 1:1th namespace1.1thclassname1.1th source,{1,2}),通过匹配,可以得出source函数x=source()能够匹配到id为1的source规则,并且通过等号赋值,使得其携带了污点为{1,2}的第一flags信息。
其中,所述步骤S1中sink点的规则具体包括sink标识、第二命名空间、第二类名、第二函数名和第二flags,其中,所述sink标识表示sink点ID,第二命名空间、第二类名和第二函数名用于确定程序中的sink函数并进行匹配,第二flags表示sink点返回数据所携带的污点信息。
本实施例中,sink点的规则定义为:(Sink Id:2nd NameSpace.2ndClassName.2nd FunctionName,2nd flags)。每个Sink点均通过“第二命名空间.第二类名.第二函数名”唯一确定程序中出现的sink函数,在对sink函数进行匹配成功后,需要验证从source点到sink点这条路径的flags信息,如果第一flags信息和第二flags信息不一致,那么就认为这条从source点到sink点的污染路径无效。设定程序中出现的sink函数调用为“sink(x)”,假设这个sink函数调用可以唯一地表示为“2nd namespace2.2ndclassname2.2nd sink”;如果我们的系统中预定义了6个规则,即:
“(Sink 1:2nd namespace2.2nd classname2.2nd sink,{1})”
“(Sink 2:2nd namespace2.2nd classname2.2nd sink,{2})”
“(Sink 3:2nd namespace2.2nd classname2.2nd sink,{1,2})”
“(Sink 4:2nd namespace2.2nd classname2.2nd sink,{1,3})”
“(Sink 5:2nd namespace2.2nd classname2.2nd sink,{2,3})”
“(Sink 6:2nd namespace2.2nd classname2.2nd sink,{3})”,
那么我们认为,id为1,2,3的规则都能匹配成功。也就是说对于sink函数调用“sink(x)”而言,x为被source点污染的变量,并且其携带的第一flags污点信息为{1,2}。而sink点不仅仅要函数唯一标识要匹配上,而且sink点的第二flags也需要是被污染数据第一flags的子集。例如sink点规则1,2,3中的{1},{2},{1,2}就是被污染数据第一flags{1,2}的子集。
其中,所述Java语言的污点传播规则是指类实例化、函数传参和赋值中的至少一种。
其中,所述步骤S2中的污点传播规则具体包括Pass标识、第三命名空间、第三类名、第三函数名和第三flags,其中,所述Pass标识表示pass点ID,pass点表示根据污点传播规则匹配到的程序位置,第三命名空间、第三类名和第三函数名用于确定程序中的Pass函数并进行匹配,第三flags包括用于过滤掉流向sink点污点数据的+flags和-flags。
本实施例中,所述污点传播规则是指类实例化、函数传参和赋值中的至少一种,其污点传播规则也是通过函数签名的方式进行定义,污点传播规则定义为:(Pass Id:3rdNameSpace.3rd ClassName.3rd FunctionName,3rd flags)。每个污点传播规则通过(3rdNameSpace.3rd ClassName.3rd FunctionName)来匹配程序中出现的pass函数,其中第三flags包括+flags和-flags,它的作用是过滤掉流向sink点的污点数据。比如说对于污点数据x,它的第二flags信息为{1,2}。对于一个pass函数调用“pass(x)”,它的唯一标识为“3rdnamespace3.3rd classname3.3rd pass”。如果一个污点传播规则为(pass 1:3rdnamespace3.3rd classname3.3rd pass,{-1})。那么在匹配pass(x)后,污点数据x的第三flags就变成了{2}。对与pass函数中的-1,需要找到污点数据x的第一flags中为1的数并将其删除。类似的,对于pass规则中第三flags信息为{+3}的,匹配完“pass(x)”后,污点数据x的污点信息变成{1,2,3}。
特别需要说明的,对于形如“x=y”的赋值pass规则,我们认为y所携带的污点数据直接传递给x。
其中,所述步骤S3的具体实现方式为:根据source点和sink点的规则分别对source点和sink点进行匹配,同时根据污点传播规则对pass点进行匹配,然后将匹配到的source点、pass点和sink点连接成边以形成一条污染路径,进而实现对Java污点的分析。本实施例中,针对程序中每个函数,通过分别匹配其source点,pass点,sink点,并将匹配到的source点、pass点和sink点连接成边以形成一条污染路径,进而实现对Java污点的分析;其中针对污点传播规则,例如“x=y”,可以得到其一条污点传播路径,即y->x。
为了更好理解本发明的工作原理和技术效果,下面以一个污点传播分析为例进行详细说明。
如图2所示,图2示出了两个函数(即函数function A和函数function B)之间的调用关系,以及污点传播路径的指向图。其中x=source()表示函数A中受污染的变量x的污染源,通过匹配source()函数调用的规则来标识污染源点x,往下继续进行分析,利用pass函数y=x赋值形式的规则将污染数据x传播给y。
然后通过B(y)实现函数之间的调用关系,函数之间的调用使得函数A中被污染的y变量传递给函数B内的参数变量arg0,此时x作为污染源点已经跨函数传递到了函数B内的arg0变量;同理,通过pass函数赋值规则,将arg0变量污点传播给函数B中的变量z。
最后,程序源码中的“sink(z)”函数调用,通过sink点规则进行sink函数匹配,即可认为其是一个污染点的终点,可能会发生安全缺陷,实现了对Java污点的分析。
以上对本发明所提供的一种基于规则定义的Java污点分析方法进行了详细介绍。本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。

Claims (2)

1.一种基于规则定义的Java污点分析方法,其特征在于,所述方法包括以下步骤:
S1、首先定义Java语言中source点和sink点的规则以形成格式化的规则,其中,source点的规则具体包括source标识、第一命名空间、第一类名、第一函数名和第一flags,其中,所述source标识表示sourse点ID,第一命名空间、第一类名第一和函数名用于确定程序中的source函数并进行匹配,第一flags表示source点返回数据所携带的污点信息;sink点的规则具体包括sink标识、第二命名空间、第二类名、第二函数名和第二flags,其中,所述sink标识表示sink点ID,第二命名空间、第二类名和第二函数名用于确定程序中的sink函数并进行匹配,第二flags表示sink点返回数据所携带的污点信息,确定程序中的sink函数并进行匹配时,sink点不仅仅要函数唯一标识匹配上,而且sink点的第二flags需要是第一flags的子集;
S2、定义Java语言的污点传播规则,其具体实现方式为:根据source点和sink点的规则分别对source点和sink点进行匹配,同时根据污点传播规则对pass点进行匹配,然后将匹配到的source点、pass点和sink点连接成边以形成一条污染路径,进而实现对Java污点的分析,其中,污点传播规则具体包括Pass标识、第三命名空间、第三类名、第三函数名和第三flags,其中,所述Pass标识表示pass点ID,第三命名空间、第三类名和第三函数名用于确定程序中的Pass函数并进行匹配,第三flags包括用于过滤掉流向sink点污点数据的+flags和-flags;
S3、根据步骤S1中所定义的Java语言中source点和sink点的规则和步骤S2中所定义的污点传播规则,构建Java语言中每个污点的传播路径以对Java语言中的污点进行分析。
2.如权利要求1所述的基于规则定义的Java污点分析方法,其特征在于,所述步骤S2中的污点传播规则是指类实例化、函数传参和赋值中的至少一种。
CN202011115176.3A 2020-10-19 2020-10-19 一种基于规则定义的Java污点分析方法 Active CN112199292B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011115176.3A CN112199292B (zh) 2020-10-19 2020-10-19 一种基于规则定义的Java污点分析方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011115176.3A CN112199292B (zh) 2020-10-19 2020-10-19 一种基于规则定义的Java污点分析方法

Publications (2)

Publication Number Publication Date
CN112199292A CN112199292A (zh) 2021-01-08
CN112199292B true CN112199292B (zh) 2022-07-01

Family

ID=74010227

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011115176.3A Active CN112199292B (zh) 2020-10-19 2020-10-19 一种基于规则定义的Java污点分析方法

Country Status (1)

Country Link
CN (1) CN112199292B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112817877B (zh) * 2021-04-19 2021-07-13 腾讯科技(深圳)有限公司 异常脚本检测方法、装置、计算机设备和存储介质

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104102879B (zh) * 2013-04-15 2016-08-17 腾讯科技(深圳)有限公司 一种消息格式的提取方法和装置
CN104021084A (zh) * 2014-06-19 2014-09-03 国家电网公司 一种Java源代码缺陷检测方法及装置
CN104765687B (zh) * 2015-04-10 2017-07-21 江西师范大学 基于对象跟踪和污点分析的j2ee程序漏洞检测方法
CN106940773B (zh) * 2017-01-10 2019-10-25 西安电子科技大学 基于静态污点数据分析的隐私泄漏漏洞检测确认方法
CN109145603A (zh) * 2018-07-09 2019-01-04 四川大学 一种基于信息流的Android隐私泄露行为检测方法和技术
CN111723382A (zh) * 2020-07-24 2020-09-29 江西师范大学 动态Android程序漏洞验证方法和装置
CN111737150B (zh) * 2020-07-24 2023-09-15 江西师范大学 面向Java EE程序SQLIA漏洞的污点分析和验证方法及装置

Also Published As

Publication number Publication date
CN112199292A (zh) 2021-01-08

Similar Documents

Publication Publication Date Title
JP5042315B2 (ja) ソースコード内のセキュリティ脆弱性の検出
CN112394942B (zh) 基于云计算的分布式软件开发编译方法及软件开发平台
US7640538B2 (en) Virtual threads in business process programs
JPH11110225A (ja) 最適化装置及び最適化装置に適用されるプログラムが記録された記録媒体
Zhang et al. Aspect Composition in the Motorola Aspect-Oriented Modeling Weaver.
CN112199292B (zh) 一种基于规则定义的Java污点分析方法
CN115022026A (zh) 一种区块链智能合约威胁检测装置及方法
Küster et al. Dependent and conflicting change operations of process models
US9612829B2 (en) System and method for pattern based services extraction
Livadas et al. An optimal algorithm for the construction of the system dependence graph
US20090064092A1 (en) Visual programming language optimization
US9396239B2 (en) Compiling method, storage medium and compiling apparatus
Al Maruf et al. Facilitating reuse of functions in embedded software
Tragatschnig et al. Modeling change patterns for impact and conflict analysis in event-driven architectures
Weigert et al. Generating test suites to validate legacy systems
US20090271766A1 (en) Methods, systems and computer program products for improving program performance by anti-refactoring
CN107765655B (zh) 以消息路由系统扩展mes功能的方法、系统及可读介质
Wang et al. DPVK-an eclipse plug-in to detect design patterns in Eiffel systems
JP2002116911A (ja) オブジェクト指向プログラムの自動生成装置
Ovchinnikova et al. The algorithm of transformation from UML sequence diagrams to the Topological Functioning Model
Lambers Sufficient Criteria for Consistent Behavior Modeling with Refined Activity Diagrams: Long Version
US7743076B2 (en) Extensible action sequences coordinating independently created components
CN116244702A (zh) 一种基于混合模式的安卓软件静态分析方法
CN114756251A (zh) 基于Android安装文件和开发行为的移动软件生态系统识别方法
JP2003036186A (ja) 別名検索装置、別名検索方法及び別名検索用プログラム

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