CN111737150B - 面向Java EE程序SQLIA漏洞的污点分析和验证方法及装置 - Google Patents
面向Java EE程序SQLIA漏洞的污点分析和验证方法及装置 Download PDFInfo
- Publication number
- CN111737150B CN111737150B CN202010725417.XA CN202010725417A CN111737150B CN 111737150 B CN111737150 B CN 111737150B CN 202010725417 A CN202010725417 A CN 202010725417A CN 111737150 B CN111737150 B CN 111737150B
- Authority
- CN
- China
- Prior art keywords
- source
- sink
- analysis
- taint
- stain
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
- G06F11/3612—Software analysis for verifying properties of programs by runtime analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3628—Software debugging of optimised code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3644—Software debugging by instrumenting at runtime
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/958—Organisation or management of web site content, e.g. publishing, maintaining pages or automatic linking
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/577—Assessing vulnerabilities and evaluating computer system security
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Software Systems (AREA)
- Computer Security & Cryptography (AREA)
- Quality & Reliability (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Computing Systems (AREA)
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Abstract
本发明涉及一种面向Java EE程序SQLIA漏洞的污点分析和验证方法的装置。所述方法包括:对Source进行预处理和分类得到真实可靠的Source集合;应用多重关系匹配存在潜在安全漏洞的(Source,Sink)对;结合静态污点分析和活跃变量分析过滤不可能存在污点传播路径的(Source,Sink)对;对所述Java EE程序进行插桩,然后在执行所述Java EE程序的同时进行动态污点分析并生成Trace;将每条Trace与静态分析结果的(Source,Sink)对进行匹配,判断是否存在真实污点传播路径,获取真实污点传播路径的漏洞集合。达到可以准确检测和定位Java EE程序的潜在SQLIA安全漏洞,提高网站安全性的效果。
Description
技术领域
本发明属于计算机安全领域,涉及一种面向Java EE程序SQLIA漏洞的污点分析和验证方法及装置。
背景技术
不可信WEB软件正在破坏金融、医疗、国防、能源和其他关键基础设施。Open WebApplication Security Project项目在2017年十大关键Web应用安全漏洞报告中将SQLIA列在第一位。使用未经验证的外部输入数据是SQLIA漏洞产生的主要原因,外部输入数据亦被称为污点数据,即tainted data,指那些外部非可信实体数据源输入到应用程序的数据,包括从HTML表单中提交的数据、客户端Cookies获得的数据、URL中的参数、外部流数据和外部文件输入数据等,追踪和阻止对这些污点数据的使用称为污点分析。
污点分析为明确划分污点数据在程序中传播的各个阶段,将传播污点的方法分为以下几类:
Source:源方法,指返回外部不可信数据的方法。
Sanitizer:验证方法,由开发人员自定义,如果污染数据经过验证函数处理,那么该污点数据转为可信数据。
Sink:使用方法,指使用污染数据的数据库操作方法。
发明内容
基于此,有必要可以准确检测和定位Java EE程序的潜在SQLIA安全漏洞的污点分析和验证方法及装置。
一种面向Java EE程序SQLIA漏洞的污点分析和验证方法,其特征在于,所述方法包括:
对Source进行预处理和分类得到真实可靠的Source集合;
应用多重关系匹配存在潜在安全漏洞的(Source, Sink)对;
结合静态污点分析和活跃变量分析过滤不可能存在污点传播路径的(Source,Sink)对;
对所述Java EE程序进行插桩,然后在执行所述Java EE程序程序的同时进行动态污点分析并生成Trace;
将每条Trace与静态分析结果的(Source,Sink)对进行匹配,判断是否存在真实污点传播路径,获取真实污点传播路径的漏洞集合。
可选的,所述将每条Trace与静态分析结果的(Source,Sink)对进行匹配,判断是否存在真实污点传播路径,获取真实污点传播路径的漏洞集合,包括:
搜索每条Trace存在的(Source,Sink)对;
逐一与静态分析结果的(Source, Sink)对集合匹配,匹配成功则定位了一条真实污点传播路径;
获取真实污点传播路径的漏洞集合。
可选的,所述Java EE程序进行插桩,然后在执行所述Java EE程序程序的同时进行动态污点分析并生成Trace包括:
静态遍历程序的每条语句,根据污点传播规则判断其是否需要插桩;
根据每条语句的语句类型进行相应插桩,插入一条调用辅助类相应方法的语句;
根据插桩代码动态跟踪的污点传播信息打印相应的代码片断Trace。
可选的,所述结合静态污点分析和活跃变量分析过滤不可能存在污点传播路径的(Source, Sink)对,包括:
对文件内进行污点传播以及进行跨文件污点传播;
活跃变量分析过滤不可能存在污点传播路径的(Source, Sink)。
可选的,所对文件内进行污点传播,包括:根据Request和Session对象传播的污点信息获取目标文件的污点信息集合;对所述目标文件开启新一轮文件内污点传播分析;
所述进行跨文件污点传播,包括:在所述目标文件中仅保留和传播被读写的属性所对应的污点状态值,并以此作为文件内污点传播的初始taintset,继续污点传播分析
可选的,所述活跃变量分析过滤不可能存在污点传播路径的(Source, Sink)对,包括:
根据活跃变量分析的结果是否满足以下两个条件中的一条来判定(Source,Sink)对是否被裁减:
①在每条从Source到Sink的执行路径上都存在一个点,在该点的所有活跃变量都是可信变量;
②Source语句返回的变量不属于Source点的活跃变量集合;
如果满足其中一条,那么每条路径都不可能有污点信息传播到Sink,确定所述(Source,Sink)对是不可能存在污点传播路径的。
可选的,所述应用多重关系匹配存在潜在安全漏洞的(Source, Sink)对,包括:
判断Source和Sink是否位于相同文件的相同方法;如果是,则确定为存在潜在安全漏洞的(Source, Sink)对;
判断Source和Sink是否可以根据相同Request信息的GetAttribute方法返回值和SeAttribute参数匹配;如果是,则确定为存在潜在安全漏洞的(Source, Sink)对;
判断Source和Sink是否可以根据Session信息的GetAttribute方法返回值和SeAttribute参数匹配;如果是,则确定为存在潜在安全漏洞的(Source, Sink)对;
判断Source是否作为方法调用语句的参数传递给Sink所在方法;如果是,则确定为存在潜在安全漏洞的(Source, Sink)对。
可选的,所述对Source进行预处理和分类得到真实可靠的Source集合,包括:
根据预定义的Source和Sink方法列表从程序代码中提取所有的Source和Sink语句,对每条Source语句的参数进行静态数据流分析,排除不是读取外部输入的Source语句得到真实可靠的Source集合。
一种面向Java EE程序SQLIA漏洞的污点分析和验证装置,其特征在于,所述装置包括:
预处理模块,用于对Source进行预处理和分类得到真实可靠的Source集合;
匹配模块,用于应用多重关系匹配存在潜在安全漏洞的(Source, Sink)对;
过滤模块,用于结合静态污点分析和活跃变量分析过滤不可能存在污点传播路径的(Source, Sink)对;
动态污点分析模块,用于对所述Java EE程序进行插桩,然后在执行所述Java EE程序程序的同时进行动态污点分析并生成Trac;
验证模块,用于将每条Trace与静态分析结果的(Source,Sink)对进行匹配,判断是否存在真实污点传播路径,获取真实污点传播路径的漏洞集合。
一种计算机可读存储介质,所述计算机可读存储介质中存储有一个或一个以上的指令,其特征在于,所述一个或一个以上的指令被电子设备内的处理器执行时实现上述面向Java EE程序SQLIA漏洞的污点分析和验证方法。
静态污点分析指在不运行代码的方式下,对代码进行词法、语法、静态语义分析从而找出软件潜在的安全漏洞。动态污点分析在整个系统运行过程中追踪污点传播,检测污点变量是否在未验证情况下使用。
本发明结合静态分析和动态验证方法,可以准确检测和定位Java EE程序的潜在SQLIA安全漏洞。静态分析设计Source预处理过程获取真实Source集合,提出多重关系匹配方法定位存在潜在安全漏洞的(Source, Sink)对,结合静态污点分析和活跃变量分析过滤不可能存在污点传播路径的(Source, Sink)对。动态验证对程序进行插桩,在执行程序的同时进行动态污点分析并生成Trace,然后基于Trace验证静态分析结果的(Source,Sink)对是否存在真实的污点传播路径。
本发明应用开源编译工具组Ant对Jsp和Java代码进行批量编译,基于开源Java编译优化框架Soot平台实现,将Java字节码或源代码转换为中间代码Jimple,应用Soot提供的代码插桩接口设计基于污点传播的插桩功能。
本发明的有益效果是设计一种面向Java EE程序SQLIA漏洞的污点分析和验证方法,应用静态分析提取可能存在污点传播路径的(Source,Sink)对,大量裁剪无需验证的(Source,Sink)对;应用动态验证方法,对程序进行基于污点传播规则的插桩,根据预先录制的测试路径集合执行插桩后的程序产生污点传播相关的Trace,最后将Trace中的(Source,Sink)对与静态分析结果的(Source,Sink)对进行匹配,可以准确检测和定位潜在的SQLIA安全漏洞。
本发明的设计方案可以准确检测和定位Java EE程序的潜在SQLIA安全漏洞,提高网站安全性。
附图说明
图1是本发明一个实施例中面向Java EE程序SQLIA漏洞的污点分析和验证方法的示意图;
图2是本发明一个实施例中Source方法预处理的示意图;
图3是本发明一个实施例中多重关系匹配方法的示意图;
图4是本发明一个实施例中活跃变量分析的示意图;
图5是本发明一个实施例中插桩效果的示意图;
图6是本发明一个实施例中测试路径的示意图;
图7是本发明一个实施例中 Trace的示意图。
具体实施方式
为了便于理解本发明,下面将参照相关附图对本发明进行更全面的描述。附图中给出了本发明的较佳实施方式。但是,本发明可以以许多不同的形式来实现,并不限于本文所描述的实施方式。相反地,提供这些实施方式的目的是使对本发明的公开内容理解的更加透彻全面。
请参阅图1-图7,本发明的一个实施例提供了一种面向Java EE程序SQLIA漏洞的污点分析和验证方法,该方法可以包括:
步骤A1,对Source进行预处理和分类得到真实可靠的Source集合;
本发明根据Source方法读取的参数是否对应外部输入,将Source语句分为原生Source(参数对应外部输入)和非原生Source(参数不对应外部输入);
本发明静态分析Java EE程序对应的Jimple代码,收集后续分析需要的各种辅助信息,包括程序中所有的Source和Sink语句、Jsp和Java文件名、Jsp中的表单、Servlet映射信息、Session信息、Request信息和自定义方法调用语句;
本发明从Jsp类的字节码中定位各类表单代码,并且收集action、method字段值以及表单内代码对应的行号;
本发明在Java EE程序对应的字节码中收集Request信息,分析Request.setAttribute、Request.getAttribute和usebean语句,获取各类Request对象的属性值。
本发明在Java EE程序中收集Session信息,分析Seesion.setAttribute、Session.getAttribute语句,获取Session对象的各种属性值。
本发明判断原生Source的方法包括:基于Servlet映射寻找来源action、基于action确定来源Jsp及对应表单、基于表单内容确定对应来源,如果来源为外部输入就判断Source为原生Source;
本发明首先获取Source语句所在类,根据预先收集的Servlet映射关系寻找对应的Servlet及其action属性,然后根据action属性映射对应的提交表单以及所属Jsp代码,接着遍历对应表单所属方法的Jimple代码序列,定位对应的外部输入语句中的value字段是否为变量,判定该Source是否原生Source;
本发明把所有原生Source放入原生Source集合,对于非原生Source,首先在表单所属方法中搜索原生Source,如果没有则进一步搜索读取Request属性语句和读取Session属性语句,并且与其他文件中的设置Request属性语句和设置Session属性语句进行匹配,然后在其他文件中定位原生Source,可能会定位到多条原生Source,最后建立这些原生Source与非原生Source的映射关系并加入非原生Source集合;如果找不到任何原生Source与非原生Source相对应,则不分析该非原生Source;
本发明的Source方法预处理过程能够捕捉所有的原生Source以及和原生Source形成映射关系的非原生Source。
本发明根据预定义的Source和Sink方法列表从程序代码中提取所有的Source和Sink语句,对每条Source语句的参数进行静态数据流分析,排除不是读取外部输入的Source语句,根据自定义多重关系匹配规则过滤不可能存在SQLIA漏洞的(Source,Sink)对,然后应用静态污点分析结合活跃变量分析对剩余的(Source,Sink)对进行分析,进一步裁剪不存在污点传播路径的(Source,Sink)对,保留可能存在潜在SQLIA漏洞的(Source,Sink)对。具体的,请参见步骤A2的说明。
步骤A2,应用多重关系匹配存在潜在安全漏洞的(Source, Sink)对;
本发明根据Java EE程序中Source和Sink的位置和跨文件传播的特点,提出了一种多重关系匹配方法,定位存在潜在可执行路径的(Source,Sink)对;
本发明提出的多重关系匹配方法包括:1)相同方法匹配,判断Source和Sink是否位于相同文件的相同方法;2)相同Request信息匹配,判断Source和Sink是否可以根据相同Request信息的GetAttribute方法返回值和SeAttribute参数匹配;3)Session信息匹配,判断Source和Sink是否可以根据Session信息的GetAttribute方法返回值和SeAttribute参数匹配;4)方法参数匹配,判断Source是否作为方法调用语句的参数传递给Sink所在方法;
本发明过滤不满足上述任何一种匹配规则的(Source,Sink)对,判定不存在从Source到Sink的潜在可执行路径;
本发明的多重关系匹配方法支持Request和Session对象属性的常量传播,对于匹配成功的(Source,Sink)对,如果Source不是原生Source,将该Source替换为映射的原生Source;
步骤A3,结合静态污点分析和活跃变量分析过滤不可能存在污点传播路径的(Source, Sink)对;
步骤A3的具体实现可以为:对文件内进行污点传播以及进行跨文件污点传播;活跃变量分析过滤不可能存在污点传播路径的(Source, Sink)对。
具体的,本发明设计一套符号集合描述污点传播过程,status表示变量的污点状态取值集合,包括污染(tainted)和可信(trusted),locs表示在语句中污点变量可能出现的位置集合,包括等式左值Lvalue、等式右值Rvalue、调用方法对象base和方法参数arg_i,i表示参数的下标顺序;vars表示程序中出现的变量及访问路径集合,如a, a.f, a[i],class.f等;taint_info记录各个位置的变量是否被污染,taint_set记录每条语句的所有污点变量的位置集合;Г函数跟踪记录每个变量和当前语句不同位置的污点状态,操作符∪计算两个污点状态值的并,两个相同状态值的并值不变,而trusted∪tainted=tainted;
本发明使用符号Use表示语句使用的变量集合,符号Def表示语句定义的变量集合,使用system_method表示系统类方法集合,使用custom_method表示自定义方法集合,使用method表示被调用方法,使用taint_custom(method)表示自定义方法的方法内污点传播策略,如果method有返回值,那么返回该值的污点状态,使用SetXX表示属性XX的Set方法集合,使用GetXX表示属性XX的Get方法集合;
本发明的文件内污点传播分析赋值语句和方法调用语句;
本发明分析赋值语句时,污点信息由Rvalue传播到Lvalue,Lvalue和Rvalue包括多种类型:
(a)a=C,Lvalue是变量a,Rvalue是常量C,常量赋值消除左值的污点状态,将污点变量验证为可信变量;
(b) a=b,Rvalue为变量b,a=b binop c,Rvalue为二元表达式,a = unop b,Rvalue为一元表达式,a=b.f,Rvalue为对象实例的成员变量,a=class.f,Rvalue为全局静态变量,a.f=b,Lvalue为对象实例的成员变量,class.f=b,Lvalue为全局静态变量,对于上述任意情形,Rvalue的污点状态为当前语句使用的所有变量的污点状态值的并值;
(c) a = b[i],Rvalue为数组元素且索引为变量,a=b[constant],Rvalue为数组元素且索引为常量,当右值为数组元素时,污点传播采用保守策略,Rvalue的污点状态值为所有在程序中出现的数组元素的污点状态值的并值;
(d) b[i] = a,Lvalue为数组元素且索引为变量,b[constant] = a,Lvalue为数组元素且索引为常量,当Lvalue为数组元素时,把Rvalue的污点状态值赋予Lvalue即可,不需要修改其他数组元素;如果该元素是tainted,那么所有数组元素的并值也是tainted;如果该元素被验证为trusted,那么不影响其他元素的污点状态,保证污点传播的可靠性;
(e) a=invoke_expr b.f (arg_1, arg_2 ...),将方法调用语句分为三类,一是对象属性的Get方法即GetXX,二是库方法system_method,三是自定义方法custom_method;GetXX方法没有参数,直接返回对象b的属性XX的值,因此Lvalue的污点状态等于对象b的属性XX的污点状态值;如果system_method的实例对象b或任意参数的污点状态为tainted,Lvalue的污点状态保守地设置为tainted;对于自定义方法,根据方法内污点传播taint_custom计算返回值的污点状态;
(f) a=new_expr (arg_1, arg_2...),Rvalue为创建对象表达式,如果表达式中的任意参数的污点状态为tainted,那么Lvalue为tainted,否则为trusted;
本发明分析方法调用语句时,将形如invoke b.f (arg_1, arg_2...)的语句分为三类,一是对象属性的Set方法即SetXX,二是库方法system_method,三是自定义方法custom_method;对于Set方法,修改对象b的属性XX为相应参数的污点状态;对于没有返回值的system_method,没有给出任何定义,忽略库方法可能改变全局变量的污点状态,忽略可能改变对象b和参数对象的属性的污点状态,忽略对象b可能受到参数的污点传播而改变污点状态;对于custom_method,根据方法内污点传播taint_custom改变其他变量的污点状态。
本发明对于传播方法taint_custom,在静态分析和动态分析阶段有所不同;静态分析采用标准的方法内数据流分析,根据赋值语句和方法调用语句定义的相应传播规则在控制流图中传播污点信息,遇见分支语句时进行变量的污点状态并值计算,如果存在循环,则迭代分析至污点状态集合为最小不动点;动态分析伴随着指令的顺序执行,根据每条指令的污点传播规则动态修改相应变量的污点状态;
本发明的跨文件污点传播分析Request和Session对象的属性读写语句,如getParameter和setAttribute,根据属性的键值对信息传播污点值。在文件内污点传播过程结束后,根据Request和Session对象传播的污点信息获取目标文件的污点信息集合,然后对目标文件开启新一轮文件内污点传播分析;跨文件污点传播在目标文件中仅保留和传播被读写的属性所对应的污点状态值,并以此作为文件内污点传播的初始taintset,继续污点传播分析;
本发明将活跃变量分析与污点传播方法相结合,在活跃变量分析时仅仅记录可能是污点的活跃变量,即在标准活跃变量分析基础上,根据自定义的污点传播语义,计算每条指令位置的活跃污点变量;如果污点变量通过方法调用参数传递,根据预定义的实参和形参的映射关系计算新的活跃变量;如果通过Request对象的属性方法传递,根据Request对象的键值对计算新的活跃变量;如果通过Session对象的属性方法传递,根据Session对象的属性和活跃变量的匹配关系计算新的活跃变量;
本发明的裁剪方法根据活跃变量分析的结果是否满足以下两个条件中的一条来判定(Source,Sink)对是否被裁减:
①在每条从Source到Sink的执行路径上都存在一个点,在该点的所有活跃变量都是可信变量;
②Source语句返回的变量不属于Source点的活跃变量集合;
如果满足其中一条,那么每条路径都不可能有污点信息传播到Sink,即Source与Sink之间不可能存在真实污点传播路径;
步骤A4,对所述Java EE程序进行插桩,然后在执行所述Java EE程序程序的同时进行动态污点分析并生成Trac;
本发明的基于污点传播的插桩定义一个辅助类用于实现污点传播,设置不同的静态方法用于实现不同语句的污点传播语义;静态遍历程序的每条语句,根据污点传播规则判断其是否需要插桩,并且根据语句类型进行相应插桩,插入一条调用辅助类相应方法的语句并传入相应参数,不需要插桩的语句类型包括definitionstmt、ifstmt、return和goto语句等;
本发明插桩Source语句时,新建一条调用静态方法的Jimple语句并将该语句的各种信息作为方法参数传入,传入语句的字符串表示、左值、方法调用的实参、语句所属类名,然后将新建语句插入Source语句后面;
本发明插桩赋值语句时,根据赋值语句的不同类型分别新建一条Jimple语句调用辅助类的不同方法,传入的参数包括左值和方法调用的实参用于跟踪污点变量传播,传入语句自身和所属类名用于在Trace中记录产生污点传播的语句;如果右值为InvokeExpr类型,那么额外传入右值调用方法的实例对象和方法签名信息用于跟踪污点变量传播;
本发明插桩方法调用语句时,如果调用语句是Request或者Session的对象属性方法,那么传入参数包括调用语句自身、request或session属性名、request或session属性值、被调用的方法签名;否则,传入调用语句的实参、实例对象和方法签名信息用于跟踪污点变量传播,传入调用语句自身和所属类名用于在Trace中记录产生污点传播的语句。
本发明的动态验证基于污点传播规则对Jimple中间代码进行插桩,执行插桩后程序获得污点传播的指令序列Trace,基于Trace验证静态分析结果的Source和Sink之间是否存在真实污点传播路径;
本发明应用自动化测试工具对插桩后部署的网站进行自动测试,根据插桩代码动态跟踪的污点传播信息打印相应的代码片断Trace,然后将每条Trace与静态分析结果的(Source,Sink)对进行匹配,判断是否存在真实污点传播路径;
步骤A5,将每条Trace与静态分析结果的(Source,Sink)对进行匹配,判断是否存在真实污点传播路径,获取真实污点传播路径的漏洞集合。
本发明的面向Trace的动态污点验证过程首先对原始WEB程序进行人工测试,尽量覆盖程序中所有可能执行数据库操作的路径,同时应用自动测试工具录制浏览器与WEB程序的交互过程,录制的路径集合作为自动化测试模块对插桩后的WEB程序进行自动测试;主要记录交互过程,定位特定页面元素并执行对应操作,如点击链接和元素赋值等。
本发明的污点验证过程通过重放执行录制的测试路径实现,在程序执行时,插桩代码记执行动态污点传播并输出与污点传播相关的指令序列形成Trace;然后搜索每条Trace存在的(Source,Sink)对,逐一与静态分析结果的(Source, Sink)对集合匹配,匹配成功则定位了一条真实污点传播路径,同时验证了静态分析结果的(Source,Sink)对是真实的SQLIA漏洞。
本发明的方法总体架构分为静态分析和动态验证两部分。静态分析包括包括Source预处理过程、多重关系匹配方法、跨文件的污点传播方法和基于活跃变量分析的裁剪方法,动态验证括基于污点传播的插桩和面向Trace的污点验证。
本发明的静态分析首先根据预定义的Source和Sink方法列表从程序代码中提取所有的Source和Sink语句,对每条Source语句的参数进行静态数据流分析,排除不是读取外部输入的Source语句;接着,根据自定义多重关系匹配规则过滤不可能存在SQLIA漏洞的(Source,Sink)对;然后,应用静态污点分析结合活跃变量分析对剩余的(Source,Sink)对进行分析,进一步裁剪不存在污点传播路径的(Source,Sink)对,保留可能存在潜在SQLIA漏洞的(Source,Sink)对;
本发明结合静态分析和动态验证方法,可以准确检测和定位Java EE程序的潜在SQLIA安全漏洞。静态分析设计Source预处理过程获取真实Source集合,提出多重关系匹配方法定位存在潜在安全漏洞的(Source, Sink)对,结合静态污点分析和活跃变量分析过滤不可能存在污点传播路径的(Source, Sink)对。动态验证对程序进行插桩,在执行程序的同时进行动态污点分析并生成Trace,然后基于Trace验证静态分析结果的(Source,Sink)对是否存在真实的污点传播路径。
本发明应用开源编译工具组Ant对Jsp和Java代码进行批量编译,基于开源Java编译优化框架Soot平台实现,将Java字节码或源代码转换为中间代码Jimple,应用Soot提供的代码插桩接口设计基于污点传播的插桩功能。
本发明的有益效果是设计一种面向Java EE程序SQLIA漏洞的污点分析和验证方法,应用静态分析提取可能存在污点传播路径的(Source,Sink)对,大量裁剪无需验证的(Source,Sink)对;应用动态验证方法,对程序进行基于污点传播规则的插桩,根据预先录制的测试路径集合执行插桩后的程序产生污点传播相关的Trace,最后将Trace中的(Source,Sink)对与静态分析结果的(Source,Sink)对进行匹配,可以准确检测和定位潜在的SQLIA安全漏洞。
本发明的设计方案可以准确检测和定位Java EE程序的潜在SQLIA安全漏洞,提高网站安全性。
以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施方式仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
Claims (6)
1.一种面向Java EE程序SQLIA漏洞的污点分析和验证方法,其特征在于,所述方法包括:
对Source进行预处理和分类得到真实可靠的Source集合;
应用多重关系匹配存在潜在安全漏洞的(Source, Sink)对;
结合静态污点分析和活跃变量分析过滤不可能存在污点传播路径的(Source, Sink)对;
对所述Java EE程序进行插桩,然后在执行所述Java EE程序的同时进行动态污点分析并生成Trace;
将每条Trace与静态分析结果的(Source,Sink)对进行匹配,判断是否存在真实污点传播路径,获取真实污点传播路径的漏洞集合;
所述结合静态污点分析和活跃变量分析过滤不可能存在污点传播路径的(Source,Sink)对,包括:对文件内进行污点传播以及进行跨文件污点传播;活跃变量分析过滤不可能存在污点传播路径的(Source, Sink);
所述对文件内进行污点传播,包括:根据Request和Session对象传播的污点信息获取目标文件的污点信息集合;对所述目标文件开启新一轮文件内污点传播分析;所述进行跨文件污点传播,包括:在所述目标文件中仅保留和传播被读写的属性所对应的污点状态值,并以此作为文件内污点传播的初始taintset,继续污点传播分析;
所述活跃变量分析过滤不可能存在污点传播路径的(Source, Sink)对,包括:
根据活跃变量分析的结果是否满足以下两个条件中的一条来判定(Source,Sink)对是否被裁减:
①在每条从Source到Sink的执行路径上都存在一个点,在该点的所有活跃变量都是可信变量;
②Source语句返回的变量不属于Source点的活跃变量集合;
如果满足其中一条,那么每条路径都不可能有污点信息传播到Sink,确定所述(Source,Sink)对是不可能存在污点传播路径的;
所述应用多重关系匹配存在潜在安全漏洞的(Source, Sink)对,包括:
判断Source和Sink是否位于相同文件的相同方法;如果是,则确定为存在潜在安全漏洞的(Source, Sink)对;
判断Source和Sink是否可以根据相同Request信息的GetAttribute方法返回值和SeAttribute参数匹配;如果是,则确定为存在潜在安全漏洞的(Source, Sink)对;
判断Source和Sink是否可以根据Session信息的GetAttribute方法返回值和SeAttribute参数匹配;如果是,则确定为存在潜在安全漏洞的(Source, Sink)对;
判断Source是否作为方法调用语句的参数传递给Sink所在方法;如果是,则确定为存在潜在安全漏洞的(Source, Sink)对。
2.根据权利要求1所述的方法,其特征在于,所述将每条Trace与静态分析结果的(Source,Sink)对进行匹配,判断是否存在真实污点传播路径,获取真实污点传播路径的漏洞集合,包括:
搜索每条Trace存在的(Source,Sink)对;
逐一与静态分析结果的(Source, Sink)对集合匹配,匹配成功则定位了一条真实污点传播路径;
获取真实污点传播路径的漏洞集合。
3.根据权利要求1所述的方法,其特征在于,所述Java EE程序进行插桩,然后在执行所述Java EE程序的同时进行动态污点分析并生成Trace,包括:
静态遍历程序的每条语句,根据污点传播规则判断其是否需要插桩;
根据每条语句的语句类型进行相应插桩,插入一条调用辅助类相应方法的语句;
根据插桩代码动态跟踪的污点传播信息打印相应的代码片段Trace。
4.根据权利要求1所述的方法,其特征在于,所述对Source进行预处理和分类得到真实可靠的Source集合,包括:
根据预定义的Source和Sink方法列表从程序代码中提取所有的Source和Sink语句,对每条Source语句的参数进行静态数据流分析,排除不是读取外部输入的Source语句得到真实可靠的Source集合。
5.一种面向Java EE程序SQLIA漏洞的污点分析和验证装置,其特征在于,所述装置包括:
预处理模块,用于对Source进行预处理和分类得到真实可靠的Source集合;
匹配模块,用于应用多重关系匹配存在潜在安全漏洞的(Source, Sink)对;
所述应用多重关系匹配存在潜在安全漏洞的(Source, Sink)对,包括:
判断Source和Sink是否位于相同文件的相同方法;如果是,则确定为存在潜在安全漏洞的(Source, Sink)对;
判断Source和Sink是否可以根据相同Request信息的GetAttribute方法返回值和SeAttribute参数匹配;如果是,则确定为存在潜在安全漏洞的(Source, Sink)对;
判断Source和Sink是否可以根据Session信息的GetAttribute方法返回值和SeAttribute参数匹配;如果是,则确定为存在潜在安全漏洞的(Source, Sink)对;
判断Source是否作为方法调用语句的参数传递给Sink所在方法;如果是,则确定为存在潜在安全漏洞的(Source, Sink)对;
过滤模块,用于结合静态污点分析和活跃变量分析过滤不可能存在污点传播路径的(Source, Sink)对;
所述结合静态污点分析和活跃变量分析过滤不可能存在污点传播路径的(Source,Sink)对,包括:
对文件内进行污点传播以及进行跨文件污点传播;
活跃变量分析过滤不可能存在污点传播路径的(Source, Sink);
所述对文件内进行污点传播,包括:根据Request和Session对象传播的污点信息获取目标文件的污点信息集合;对所述目标文件开启新一轮文件内污点传播分析;
所述进行跨文件污点传播,包括:在所述目标文件中仅保留和传播被读写的属性所对应的污点状态值,并以此作为文件内污点传播的初始taintset,继续污点传播分析;
所述活跃变量分析过滤不可能存在污点传播路径的(Source, Sink)对,包括:
根据活跃变量分析的结果是否满足以下两个条件中的一条来判定(Source,Sink)对是否被裁减:
①在每条从Source到Sink的执行路径上都存在一个点,在该点的所有活跃变量都是可信变量;
②Source语句返回的变量不属于Source点的活跃变量集合;
如果满足其中一条,那么每条路径都不可能有污点信息传播到Sink,确定所述(Source,Sink)对是不可能存在污点传播路径的;
动态污点分析模块,用于对所述Java EE程序进行插桩,然后在执行所述Java EE程序的同时进行动态污点分析并生成Trace;
验证模块,用于将每条Trace与静态分析结果的(Source,Sink)对进行匹配,判断是否存在真实污点传播路径,获取真实污点传播路径的漏洞集合。
6.一种计算机可读存储介质,所述计算机可读存储介质中存储有一个或一个以上的指令,其特征在于,所述一个或一个以上的指令被电子设备内的处理器执行时实现权利要求1至4中任一所述的面向Java EE程序SQLIA漏洞的污点分析和验证方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010725417.XA CN111737150B (zh) | 2020-07-24 | 2020-07-24 | 面向Java EE程序SQLIA漏洞的污点分析和验证方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010725417.XA CN111737150B (zh) | 2020-07-24 | 2020-07-24 | 面向Java EE程序SQLIA漏洞的污点分析和验证方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111737150A CN111737150A (zh) | 2020-10-02 |
CN111737150B true CN111737150B (zh) | 2023-09-15 |
Family
ID=72657689
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010725417.XA Active CN111737150B (zh) | 2020-07-24 | 2020-07-24 | 面向Java EE程序SQLIA漏洞的污点分析和验证方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111737150B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112199292B (zh) * | 2020-10-19 | 2022-07-01 | 湖南泛联新安信息科技有限公司 | 一种基于规则定义的Java污点分析方法 |
CN112926058A (zh) * | 2021-03-25 | 2021-06-08 | 支付宝(杭州)信息技术有限公司 | 代码处理方法、污点分析方法和装置 |
CN113254945A (zh) * | 2021-06-08 | 2021-08-13 | 中国人民解放军国防科技大学 | 基于污点分析的web漏洞静态检测方法、系统和介质 |
CN113722721B (zh) * | 2021-11-03 | 2022-03-11 | 北京鸿渐科技有限公司 | 一种基于值依赖图的源库模式Java安全漏洞检测方法 |
CN116451228B (zh) * | 2023-04-23 | 2023-10-17 | 北京安普诺信息技术有限公司 | 动态污点追踪方法、装置及相关在线污点传播分析系统 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008299723A (ja) * | 2007-06-01 | 2008-12-11 | Hitachi Systems & Services Ltd | プログラム検証方法、プログラム検証装置 |
CN103995782A (zh) * | 2014-06-17 | 2014-08-20 | 电子科技大学 | 一种基于污点不变集的污点分析方法 |
CN104765687A (zh) * | 2015-04-10 | 2015-07-08 | 江西师范大学 | 基于对象跟踪和污点分析的j2ee程序漏洞检测方法 |
CN106709356A (zh) * | 2016-12-07 | 2017-05-24 | 西安电子科技大学 | 基于静态污点分析和符号执行的安卓应用漏洞挖掘方法 |
CN106940773A (zh) * | 2017-01-10 | 2017-07-11 | 西安电子科技大学 | 基于静态污点数据分析的隐私泄漏漏洞检测确认方法 |
CN107832619A (zh) * | 2017-10-10 | 2018-03-23 | 电子科技大学 | Android平台下应用程序漏洞自动化挖掘系统及方法 |
CN109002721A (zh) * | 2018-07-12 | 2018-12-14 | 南方电网科学研究院有限责任公司 | 一种信息安全漏洞的挖掘分析方法 |
CN109462583A (zh) * | 2018-10-31 | 2019-03-12 | 南京邮电大学 | 一种基于静态和动态相结合的反射型漏洞检测方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11017094B2 (en) * | 2018-01-03 | 2021-05-25 | Beijing Jingdong Shangke Information Technology Co., Ltd. | System and method for java deserialization vulnerability detection |
-
2020
- 2020-07-24 CN CN202010725417.XA patent/CN111737150B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008299723A (ja) * | 2007-06-01 | 2008-12-11 | Hitachi Systems & Services Ltd | プログラム検証方法、プログラム検証装置 |
CN103995782A (zh) * | 2014-06-17 | 2014-08-20 | 电子科技大学 | 一种基于污点不变集的污点分析方法 |
CN104765687A (zh) * | 2015-04-10 | 2015-07-08 | 江西师范大学 | 基于对象跟踪和污点分析的j2ee程序漏洞检测方法 |
CN106709356A (zh) * | 2016-12-07 | 2017-05-24 | 西安电子科技大学 | 基于静态污点分析和符号执行的安卓应用漏洞挖掘方法 |
CN106940773A (zh) * | 2017-01-10 | 2017-07-11 | 西安电子科技大学 | 基于静态污点数据分析的隐私泄漏漏洞检测确认方法 |
CN107832619A (zh) * | 2017-10-10 | 2018-03-23 | 电子科技大学 | Android平台下应用程序漏洞自动化挖掘系统及方法 |
CN109002721A (zh) * | 2018-07-12 | 2018-12-14 | 南方电网科学研究院有限责任公司 | 一种信息安全漏洞的挖掘分析方法 |
CN109462583A (zh) * | 2018-10-31 | 2019-03-12 | 南京邮电大学 | 一种基于静态和动态相结合的反射型漏洞检测方法 |
Non-Patent Citations (1)
Title |
---|
秦彪等.《面向Android应用的静态污点分析结果的正确性验证》.《计算机应用》.2019,(第10期),3018-3027. * |
Also Published As
Publication number | Publication date |
---|---|
CN111737150A (zh) | 2020-10-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111737150B (zh) | 面向Java EE程序SQLIA漏洞的污点分析和验证方法及装置 | |
US11087002B2 (en) | Using the same query language for static and dynamic application security testing tools | |
Alhuzali et al. | {NAVEX}: Precise and scalable exploit generation for dynamic web applications | |
Wei et al. | Practical blended taint analysis for JavaScript | |
US20170270303A1 (en) | Integrated Interactive Application Security Testing | |
Gupta et al. | JS‐SAN: defense mechanism for HTML5‐based web applications against javascript code injection vulnerabilities | |
US20060282897A1 (en) | Secure web application development and execution environment | |
Shar et al. | Auditing the XSS defence features implemented in web application programs | |
CN111723382A (zh) | 动态Android程序漏洞验证方法和装置 | |
EP3433782B1 (en) | Integrated interactive application security testing | |
CN111859380A (zh) | Android App漏洞的零误报检测方法 | |
Sjösten et al. | Essentialfp: Exposing the essence of browser fingerprinting | |
Li et al. | Large-scale third-party library detection in android markets | |
KR100670209B1 (ko) | 파라미터 상태 추적을 통한 웹 응용프로그램 취약점의소스코드 분석 장치 및 방법 | |
US20150121508A1 (en) | Method, a computer program and apparatus for analyzing symbols in a computer | |
Klein et al. | Hand sanitizers in the wild: A large-scale study of custom javascript sanitizer functions | |
Brito et al. | Study of JavaScript Static Analysis Tools for Vulnerability Detection in Node. js Packages | |
Su et al. | A sanitizer-centric analysis to detect cross-site scripting in PHP programs | |
Hallo et al. | A survey on SQL injection attacks, detection and prevention techniques-a tertiary study | |
CN114936369A (zh) | 基于标记的sql注入攻击主动防御方法、系统及存储介质 | |
Shi et al. | Precise (Un) Affected Version Analysis for Web Vulnerabilities | |
Medeiros et al. | Effect of coding styles in detection of web application vulnerabilities | |
CN113849817A (zh) | 一种JavaScript原型链污染漏洞的检测方法及装置 | |
CN115270139B (zh) | 一种IoT设备网络服务自动化漏洞分析方法及系统 | |
Tiwari et al. | Demand-driven Information Flow Analysis of WebView in Android Hybrid Apps |
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 |