CN111723382A - 动态Android程序漏洞验证方法和装置 - Google Patents

动态Android程序漏洞验证方法和装置 Download PDF

Info

Publication number
CN111723382A
CN111723382A CN202010723865.6A CN202010723865A CN111723382A CN 111723382 A CN111723382 A CN 111723382A CN 202010723865 A CN202010723865 A CN 202010723865A CN 111723382 A CN111723382 A CN 111723382A
Authority
CN
China
Prior art keywords
taint
trace
sink
analysis
program
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.)
Pending
Application number
CN202010723865.6A
Other languages
English (en)
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.)
Jiangxi Normal University
Original Assignee
Jiangxi Normal University
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 Jiangxi Normal University filed Critical Jiangxi Normal University
Priority to CN202010723865.6A priority Critical patent/CN111723382A/zh
Publication of CN111723382A publication Critical patent/CN111723382A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • 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/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Virology (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Computing Systems (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种动态Android程序漏洞验证方法和装置,属于计算机安全技术领域。所述方法包括:对所述Android程序进行静态插桩生成dex代码,运行插桩后的所述Android程序能够记录所述Android程序的执行路径信息Trace;重复执行所述Android程序直至产生一条同时经过Source和Sink的所述种子Trace并记录操作序列;对所述种子Trace进行污点验证,确定漏洞是否真实有效;收集Trace的路径条件集合,基于污点分析结果并结合活变量分析裁剪大量无需验证的污点传播路径集合,应用基于条件反转的程序变换方法执行Trace的其他污点传播路径。本发明有效验证静态污点分析生成的漏洞是否真实并且列出能够触发真实漏洞的可执行路径。

Description

动态Android程序漏洞验证方法和装置
技术领域
本发明涉及计算机安全技术领域,特别涉及一种动态Android程序漏洞验证方法和装置。
背景技术
随着移动互联网的普及,手机成为人们生活的必需品。Android是市场占有率最高的开源移动操作系统,Android程序的安全性受到广泛关注。污点分析是检测Android程序漏洞的的主流检测方法之一,其从Source开始跟踪外部引入的数据(污点),检查它们是否未经验证就直接传播到Sink位置,如果是,则可能存在安全漏洞。
污点分析为明确划分污点数据在程序中传播的各个阶段,将传播污点的方法分为以下几类:Source:源方法,指读取敏感数据或者外部输入的方法; Propagation:传播方法,以污点数据为输入产生了新的污点数据的方法; Sanitizer:验证方法,由开发人员自定义,如果污染数据经过验证函数处理,那么该污点数据转为可信数据;Sink:使用方法,指使用污染数据的方法。
污点分析包括静态污点分析、动态污点分析和混合污点分析。其中:
静态污点分析指在不运行代码的方式下,对代码进行词法、语法、静态语义分析从而找出软件潜在的安全漏洞。静态污点分析的结果通常使用(Source,Sink)对表示,其分析结果通常是可靠的,但是会产生太多虚警,导致在工业实践中绝大部分工程师倾向于使用测试而不是静态分析来寻找安全漏洞。
动态污点分析在整个系统运行过程中追踪污点传播,检测污点变量是否在未验证情况下使用,代价很高。分析结果有较高的准确率,但是难以发现所有的潜在安全漏洞。
混合污点分析把动态污点分析和静态污点分析优点相结合,静态污点分析可以弥补动态污点分析覆盖率低的问题,动态污点分析验证静态污点分析的准确性并降低其误报率。
发明内容
本发明实施例提供了一种动态Android程序漏洞验证方法和装置。所述技术方案如下:
第一方面,提供了一种动态Android程序漏洞验证方法,所述方法包括:
对所述Android程序进行静态插桩生成dex代码,运行插桩后的所述Android程序能够记录所述Android程序的执行路径信息Trace;
重复执行所述Android程序直至产生一条同时经过Source 和Sink的所述种子Trace并记录操作序列;
对所述种子Trace进行污点验证,确定漏洞是否真实有效;
收集Trace的路径条件集合,基于污点分析结果并结合活变量分析裁剪大量无需验证的污点传播路径集合,应用基于条件反转的程序变换方法执行Trace的其他污点传播路径。
可选的,所述对所述种子Trace进行污点验证,确定漏洞是否真实有效,包括:
对所述种子Trace进行别名分析获得程序运行过程中的污点信息;
对所述污点信息进行污点分析得到污点分析结果;
根据所述污点分析结果,确定是否存在一条从Source到Sink的污点传播路径;如果存在,则确定漏洞真实有效。
可选的,所述确定是否存在一条从Source到Sink的污点传播路径之后,所述方法还包括:
如果不存在一条从Source到Sink的污点传播路径,则遍历执行从Source到Sink的所有其他执行路径;对遍历过程中生成的子Trace进行别名分析获得程序运行过程中的污点信息;对所述污点信息进行污点分析得到污点分析结果;根据所述污点分析结果,确定是否存在一条从Source到Sink的污点传播路径;
如果遍历从Source到Sink的所有其他执行路径的过程中,确定出一条从Source到Sink的污点传播路径,则确定漏洞真实有效;
如果遍历从Source到Sink的所有其他执行路径后,未确定出一条从Source到Sink的污点传播路径,则确定漏洞为虚警。
可选的,所述遍历执行从Source到Sink的所有其他执行路径,包括:
从Trace中收集Source到Sink的所有条件语句;
结合活变量分析、上述污点分析结果得到待反转的条件语句集合并且分别对它们进行条件取反,生成新的Android程序;
根据所述操作序列重新执行所述新的Android程序,进而获得反转条件后的Trace得到所述子Trace。
可选的,所述结合活变量分析、上述污点分析结果、程序变换方法得到待反转的条件语句集合,包括:
对于所述所有条件语句的集合中每条条件语句,将同时满足第一条件、第二条件的条件语句加入待反转的条件语句集合,其中:
所述第一条件为:在所述Android程序程序的反向过程间控制流图中,剪去位于Sink前方的子图,在剩下的子图中,以Sink为起点进行过程间的活变量分析,要求条件语句的活变量集合中必须存在至少一个污点变量;
所述第二条件为:如果所述条件语句与Sink属于同一个方法体内部,那么在这个方法体对应的控制流图(CFG)中,从该条件语句的另一个分支出发的路径集合中至少有一条路径会经过Sink结点。
可选的,所述结合活变量分析、上述污点分析结果、程序变换方法得到待反转的条件语句集合,还包括:
如果条件语句与Sink节点属于同一方法,并且从条件语句的某个分支出发的路径集合中不存在任何经过Sink结点的路径,那么该分支的所有后续路径都是无效传播路径。
第二方面,提供了一种动态Android程序漏洞验证装置,所述装置包括:
代码插桩模块,用于对所述Android程序进行静态插桩生成dex代码,运行插桩后的所述Android程序能够记录所述Android程序的执行路径信息;
执行模块,用于重复执行所述Android程序直至产生一条同时经过Source 和Sink的所述种子Trace并记录操作序列
验证模块,用于对所述种子Trace进行污点验证,确定漏洞是否真实有效;收集Trace的路径条件集合,基于污点分析结果并结合活变量分析裁剪大量无需验证的污点传播路径集合,应用基于条件反转的程序变换方法执行Trace的其他污点传播路径。
可选的,所述验证模块包括:
别名分析模块,用于对所述种子Trace进行别名分析获得程序运行过程中的污点信息;
污点分析模块,用于对所述污点信息进行污点分析得到污点分析结果;
确定模块,用于根据所述污点分析结果,确定是否存在一条从Source到Sink的污点传播路径;如果存在,则结束动态Android程序的漏洞验证,确定漏洞真实有效。
本发明实施例提供的技术方案带来的有益效果是:
包括面向Trace的污点验证过程和基于路径条件反转和活变量分析的程序变换过程两部分。所述面向Trace的污点验证包括代码插桩模块、别名分析模块和污点分析模块;所述基于路径条件反转和活变量分析的程序变换过程包括结合活变量分析的路径裁剪策略、无效传播路径判断算法和基于路径条件反转的路径遍历执行模块;本发明有效解决静态污点分析结果的正确性验证问题,针对结果中的每个潜在漏洞,首先插桩运行程序生成一条种子Trace,然后对Trace进行别名分析和污点分析,接着收集Trace的路径条件集合,基于污点分析结果并结合活变量分析裁剪大量无需验证的污点传播路径集合,最后应用基于条件反转的程序变换方法执行Trace的其他污点传播路径,有效解决了漏洞的正确性验证问题。本发明的设计方案可以有效验证静态污点分析生成的漏洞是否真实并且列出能够触发真实漏洞的可执行路径。
本发明设计一种面向Android程序的基于Trace的污点分析和验证方案,对静态污点分析结果进行正确性验证,降低误报率。针对每个以(Source, Sink)对表示的潜在安全漏洞,首先应用代码插桩技术并且运行Android程序获得一条同时经过Source和Sink的Trace,接着对Trace进行别名分析和污点分析判定是否存在从Source到Sink的污点传播路径,是则表明漏洞真实有效,否则收集Trace的路径条件和污点信息,结合活变量分析和路径条件反转的方法设计路径选择策略,对可行路径集合进行剪枝和遍历,判定是否存在污点传播路径,最终验证漏洞是否虚警。
本发明采用开源Java编译优化框架Soot平台和Dex编译工具,首先将Android程序转换为中间代码Jimple,然后对Jimple代码进行插桩以跟踪污点信息和方法调用上下文,接着对执行程序产生的Jimple代码形式的Trace进行别名分析和污点分析,然后基于FlowDroid框架实现跨方法活变量分析以裁剪无效传播路径,最后修改Jimple代码实现路径条件反转,编译生成新的Android程序再重复上述过程。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明一个实施例中提供的动态Android程序漏洞验证方法应用的示意图;
图2是本发明一个实施例中提供的污点传播一致性约束代码片段;
图3是本发明一个实施例中提供的左值为变量且右值为常量或基本类型的赋值语句污点传播规则代码片段;
图4是本发明一个实施例中提供的左值为变量且右值为常量或基本类型的赋值语句污点传播规则代码片段;
图5是本发明一个实施例中提供的左值为变量且右值为常量或基本类型的赋值语句污点传播规则代码片段;
图6是本发明一个实施例中提供的左值为实例域且右值为变量的赋值语句污点传播规则代码片段;
图7是本发明一个实施例中提供的左值为静态域且右值为变量的赋值语句污点传播规则代码片段;
图8是本发明一个实施例中提供的左值为数组变量且右值为变量的赋值语句污点传播规则代码片段;
图9 是本发明一个实施例中提供的验证方法和Source方法调用语句污点传播规则代码片段;
图10 是本发明一个实施例中提供的自定义实例方法和类实例初始化方法调用语句污点传播规则代码片段;
图11 是本发明一个实施例中提供的自定义静态方法调用语句污点传播规则代码片段;
图12 是本发明一个实施例中提供的算法判断从条件语句的一个分支出发是否至少有一条路径经过Sink;
图13是本发明一个实施例中提供的 Trace的存储方式的示意;
图14 是本发明一个实施例中提供的Trace内容片断;
图15 是本发明一个实施例中提供的内存块存储表示;
图16是本发明一个实施例中提供的别名分析示例;
图17 是本发明一个实施例中提供的实例域别名示例;
图18 是本发明一个实施例中提供的数组域别名示例;
图19是本发明一个实施例中提供的实例域对象的污点信息调整;
图20是本发明一个实施例中提供的条件反转的代码片段。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
本发明的一个实施例提供了一种动态Android程序漏洞验证方法,该动态Android程序漏洞验证方法可以包括:
步骤110,面向Trace的污点验证;
本步骤的具体实现方式可以为:首先对Android程序进行静态插桩,生成dex代码,使得运行插桩后的程序能够记录程序的执行路径信息。接着重复执行程序直到产生一条同时经过Source 和Sink的种子Trace下,并记录操作序列(events)。然后对种子Trace 进行别名分析获得程序运行过程中的污点信息;对污点信息进行污点分析,。最后根据污点分析结果,如果发现一条从Source到Sink的污点传播路径,则整个验证过程结束,漏洞真实有效。
可选的,插桩实施利用SOOT框架提供的PackManager接口实现,插桩在不破坏应用程序逻辑结构的前提下进行。
其中,对Android程序进行静态插桩,能够保证原有业务逻辑不变的前提下,使插桩后的程序在运行时能够记录并保存程序的执行路径信息(即Trace)。具体的,对Android程序进行静态插桩的实现进行如下说明:
初始化存储Trace的对象、记录每一步执行的语句信息、输出并保存Trace文件。初始化存储Trace的对象的过程,添加在每个类的类初始化方法(<clinit>)中;记录每一步执行的语句信息过程,将记录的动作放在每一步执行语句的前面,在执行一条语句之前预先记录该语句的信息,但IdentityStmt语句需要在参数传递语句块之后统一记录;输出并保存Trace文件的过程插入在Activity类的onStop方法尾部;
记录的Trace是程序运行时的执行路径信息,所以在程序运行过程中,在系统内存里存储记录的Trace对象需要能够被全局所访问,在设计上采用静态单例设计模式。
Android程序的用户接口是Activity,根据Activity生命周期的特点,在用户操作程序的过程中,可以将当前程序的后台设为暂停的状态。考虑到这种用户非连续操作的情况,在记录Trace时从启动Android程序到Activity的onStop方法被调用并执行完毕记录为一次完整的用户操作,在onStop方法调用末尾需要将内存中记录的Trace保存并输出成文件。当下一次返回程序进行操作到再次暂停时,第二次记录的Trace将以追加的方式保存在之前记录Trace的文件中。
图13表示Trace的存储方式,Trace由每条指令的位置信息和当前方法调用上下文信息组成,使用数据结构“LinkedHashMultimap<String, HashMap<String, String>>”实现,其中键名K是字符串类型,记录每条Jimple语句的语法字符串,键值V是HashMap类型。
语句的位置信息包括字段“jimpleBodyLine”和“inMethodSignature”,“jimpleBodyLine”字段记录语句对应的序号,根据序号值可以确定语句在方法体内部的具体位置,“inMethodSignature”记录语句所在方法的签名,结合“jimpleBodyLine”字段值可以准确定位Jimple语句在内存中对应的对象。
语句所属调用的上下文信息分别记录了字段“customized_invoke_count”、“funcExitTag”和“funcEntryTag”,“customized_invoke_count”字段在每次调用自定义方法时自动加1,以此标识当前指令所属方法被第几次调用,区分相同指令所属的不同方法调用上下文。
“funcEntryTag”和“funcExit”分别标识语句是否为所在方法体的入口语句和出口语句,结合“customized_invoke_count”可以在Trace中准确划定被调用函数的执行范围,有助于区分各个不同的函数调用栈,为分析过程间的数据流传递提供基础。
图14给出了一条Trace内容的部分片段,包括了3条件语句信息,加粗字体对应信息字段名(键),跟在字段名后面是一个“->”符号用来分隔字符串,该符号后面就是字段对应的值,不同键值对之间用“-&-”作为分割符,以便后续根据Trace文件将语句执行信息重新读入内存。
本发明插入Jimple代码记录每条指令的位置信息和当前方法调用上下文信息,定义数据结构“LinkedHashMultimap<String, HashMap<String, String>>”,键名是字符串类型,记录每条Jimple语句的语法字符串,键值是HashMap类型,存放每条语句的位置信息和当前调用上下文信息,具体包括使用Jimple语句的hash值用作语句的唯一标识、Jimple语句所在方法体的行号、语句所在方法的签名、语句所在方法被调用时的上下文环境、方法的入口语句和方法的出口语句信息;
本发明使用“customized_invoke_count”字段记录语句所在方法被调用时的上下文信息,每次调用自定义方法时,该字段值自动加1,记录当前语句所属方法是被第几次调用,可以区分相同语句所属的不同方法调用上下文。即使两条语句的位置信息完全相同,但是他们属于不同方法调用上下文,Trace会把他们记录为不同的语句;
本发明只记录一次循环执行的语句信息,基于LinkedHashMultimap数据结构,将每条语句以链表方式存储,保证每条语句的hash值不可重复,使得循环体中的执行语句仅被记录一次。
具体的,本发明对种子Trace 进行别名分析获得程序运行过程中的污点信息进行如下说明:
本发明记录方法调用现场信息,定义数据结构“Stack 〈HashMap〈String,Object〉〉”记录方法调用现场信息,每个现场元素以 HashMap〈String,Object〉键-值对的形式存储,包含两种信息,一是“position”,表示方法调用语句在 Trace中的位置,二是“actual_formal_map”,定义实参和形参的映射关系;
本发明记录实参和形参的映射关系,定义数据结构“LinkedList〈Pair〈Object,Object〉〉”,根据方法签名存储实参与形参的映射关系,Pair 的第一个元素表示实参,第二个元素表示形参,LinkedList中最后一个元素用于记录实例方法的 this 引用的传递信息,如果不是实例方法调用语句则不记录;
本发明按 Trace 中的指令顺序模拟实际运行时动态分配的内存空间,在每块内存空间中记录所有指向该内存空间的别名集合,定义数据结构LinkedList〈Pair〈HashSet〈HashMap〈String,Object〉〉, HashSet〈HashMap〈String,Object〉〉〉〉,以链表形式存储程序申请所有内存块,其中Pair 代表内存块,记录别名信息和内存块信息,分别映射为由HashSet表示的集合,称作PointsToSet 和 BlocksSet;
PointsToSet集合记录所有指向相同内存块的变量,每个PointToSet集合中的所有变量都互为别名;
BlocksSet集合中的元素类型是HashMap〈String,Object〉,记录申请内存块的位置信息、内存块的子空间位置信息和内存块的污点信息,使用block_id记录内存块在内存块链中的编号,使用block_position记录内存块在Trace 中的分配位置,使用block_sub_instances记录内存块的所有子域对象指向的内存块位置信息,使用block_sub_arrayItems记录内存块的所有数组元素对象指向的内存块位置信息,使用block_tainted_state记录内存块的污点信息;
本发明分析Android 应用执行时影响别名信息的四类语句,参数传递语句(IdentityStmt) 、赋值语句( AssignStmt)、方法调用语句(InvokeStmt)和方法返回语句(ReturnStmt);
本发明在分析参数传递语句时,查找记录的方法调用现场信息是否包含实参与形参之间的映射关系,如果包含则将形参信息添加到实参所指向的内存块的别名集合(PointsToSet)中;
本发明在分析参数传递语句时,如果无法匹配方法调用时实参和形参的映射关系,则按参数传递语句右值的类型为ThisRef、ParameterRef和CaughtExceptionRef分别记录不同的数据流传递;
本发明在分析赋值语句时,首先在别名集合中清除与左值相关的别名信息,包括相关内存块之间父子域或数组元素域关系的信息,然后定位右值引用指向的内存块,将左值信息加入该内存块的别名集合中,接着调整与左值相关的别名信息,包括访问路径中父域记录的子域信息;
本发明在分析赋值语句时,如果右值是Local(局部变量)或CastExpr(强制类型转换表达式)时,在记录的内存块链中查找右值指向的内存块,然后直接将左值添加到内存块的别名集合中,如果右值是InvokeExpr、NewExpr、BinopExpr、 InstanceOfExpr、UnopExpr或Constant时,则认为在语句处为左值分配新的内存空间,如果右值类型属于StaticFieldRef、InstanceFieldRef 或 ArrayRef,则如果不能找到右值对应的内存块,就在满足污点传播一致性约束的前提下,根据父域的污点信息分配新的内存块;
本发明在分析赋值语句时,如果左值是静态域,则找出所有类型是静态域所属类的内存块,将这些内存块中记录的相应静态子域空间的位置修改为右值所指位置,如果左值是实例域或数组元素,则分别找到实例域的父对象或数组对象所指向的内存块,将子域内存块位置修改为右值的内存块位置;
本发明在分析方法调用语句时,仅分析类对象实例的初始化方法〈init〉,该方法表示在调用位置为this变量分配内存空间,将this变量所对应的内存块分配位置修改为〈init〉方法的调用位置;
本发明在分析方法返回语句时,如果在方法调用现场接收方法的返回值,即方法调用现场是赋值语句,那么接收变量就与方法的返回值变量互为别名,别名信息传递操作与赋值语句的处理过程相似,把赋值语句中的右值替换成方法返回语句的返回变量即可;
别名分析模块按Trace中的指令顺序模拟执行,模拟分配程序实际运行时动态申请的内存空间,在每块内存空间中记录所有指向该内存空间的别名引用,即别名集合,根据不同语句类型记录别名信息的传递,进而跟踪内存空间中别名信息的变化,如图15所示。
对Android程序的别名信息产生影响的语句类型总共分四种:参数传递语句(IdentityStmt)、赋值语句(AssignStmt)、方法调用语句(InvokeStmt)、方法返回语句(ReturnStmt)。
分析参数传递语句中相关的别名数据流事实传递时,需要查找记录的方法调用现场信息中是否包含实参与形参之间的映射关系,如果能找到相应的映射关系,则将形参指针信息添加到实参所指向的内存块的别名指针集合(PointsToSet)中。
图16给出了一个示例,在第13行发生了自定义方法调用,后门跟着参数传递过程,实参$r6、“Jordan”和26分别传递给下面的$r1、$r0和$i0(图16中箭头①②③)。因为在Java中的参数传递都是属于引用传递,所以这三组变量互为别名。
由于Android程序中存在大量的底层系统回调方法,本发明记录的Trace并不完备,有时无法匹配实参和形参的映射关系,需要按参数传递语句右值的不同类型分别记录数据流传递:
①如果右值类型是ThisRef(图16中第4行语句),代表这是方法调用者this引用的传递,于是在记录的内存块链中反向查询与方法this引用类型一致的内存块,如果找到则近似认为左值引用是指向该内存块,否则直接视为在当前的语句位置处为左值分配新的内存空间;(在图16中第4行参数传递语句无法找到与之匹配的实参和形参的映射关系,所以反向查找类型一致的内存块,定位到第1行的$r0与第4行的$r9类型MainActivity一致,所以$r9和$r0互为别名。)
②如果右值类型是ParameterRef(图16中第5行语句),代表这是方法调用的参数传递,可直接为左值在该语句位置处分配新的内存空间。
参数传递语句的右值还存在一种类型是CaughtExceptionRef,表示传递抛出异常变量的信息,如图16中第65行的右值的类型是CaughtExceptionRef,它接收上面第64行的语句抛出的异常变量$r26,别名信息按图16中④号箭头的方向传递。在处理这种别名分析时,我们在前向遍历Trace的同时记录一个栈(throw_value_stack),栈中存储抛出异常变量指向的内存块的位置,当遇到接收异常变量的参数传递语句时,直接将接收语句的左值引用指向throw_value_stack的栈顶元素指示的内存块。
分析赋值语句时主要考虑如何定位右值引用的内存块,并且将左值指针加入到该内存块的别名集合,以及如何调整与左值相关的别名信息。
当右值类型是局部变量或强制类型转换表达式时,在已记录的内存块链中查找右值指向的内存块,然后直接将左值指针添加到内存块的别名集合中即可。例如图16中执行第32行的语句后$r7[1]变量就指向的$r11原来指向的内存块,$r7[1]和$r11互为别名;图16中第37行将$r13强制转换成Integer类型,执行这条语句后$r14和$r13就指向了相同的内存块。
当右值类型是InvokeExpr(方法调用表达式)、NewExpr、BinopExpr(二元操作表达式)、InstanceOfExpr(instanceof表达式)、UnopExpr(类似length of表达式)或常量时(分别对应图16中第5、10、39、34、43和11行Jimple语句),即认为在该执行语句处为左值申请并分配新的内存空间。
当右值类型是StaticFieldRef(静态域)、InstanceFieldRef(实例域)或ArrayRef(数组元素)时(分别对应图16中第51、58和33行Jimple语句),如果未能查找到右值指向的内存块,可根据其父域的信息并在满足污点传播一致性约束的前提下分配新的内存块。如果a已经是被完全污染的变量,当第一次使用到a.f对象时为其分配新的内存块,把分配的内存块的污点信息标记为完全不可信;但是如果a是部分被污染或可信时,则为a.f分配的内存块标记为可信。定位到右值指向的内存块位置后,接着将左值引用添加到内存块的别名集合中。
在调整与左值相关的别名信息时,主要是对左值类型是静态域(StaticFieldRef)、实例域(InstanceFieldRef)或数组元素(ArrayRef)的三种情形做不同的别名调整动作。
当左值是静态域时,找出所有类型是静态域所在类的类型的内存块,将这些内存块中记录的对应静态子域空间的位置标识修改为右值的位置。例如在图16中第11行静态域type所在类的类型是Person,所以查找所有类型是Person的内存块,并将这些内存块的type子域的内存空间位置标识成第11行右值”Person”所指向的位置。
当左值是实例域或数组元素时,找到实例域的父对象域或数组对象的内存空间,将记录的子域内存块位置的标识修改为右值对应的位置。图16中第18和19行$r1的两个子域对象name和age分别指向了$r0和$i0,那么父对象$r1中记录的子域集合中的信息也需要调整到对应的位置,如图17所示。图16中第26和32行,分别将$r10和$r11赋值给了数组元素$r7[0]和$r7[1],那么对应的数组基变量$r7中记录的数组元素0和1分别指向$r10或 $r11所指向的内存块,如图18所示。
具体的,本发明对污点信息进行污点分析进行如下说明:
本发明将污点信息标记到记录的内存块上,并跟踪污点的传播过程,分析影响污点传播的赋值语句和方法调用语句;
本发明使用二元组形式(var,taint_level)定义污点信息,var表示变量的访问路径(Access Path),taint_level表示污点变量的污染程度,分为部分污染(pa)、完全污染(ta)和可信(trust);
本发明分析方法调用语句时分为库方法调用和自定义方法调用,分析库方法调用时,以污点传播摘要的方式对库方法执行产生的污点信息流建模,根据具体的摘要调整并记录方法执行后各相关内存块的污点信息,分析自定义方法调用时,递归分析方法体内每条语句的污点传播语义来实现跨方法污点传播;
本发明分析赋值语句时,首先按赋值语句右值的不同类型定义污点传播语义规则并记录污点传播过程,然后按照左值的不同类型,调整相关变量的污点信息,对任何内存块的污点信息的修改或调整都必须满足污点传播的一致性约束,避免错误记录污点传播信息;
本发明定义的污点传播一致性约束如图1所示,(1)表示在传递的数据流事实中变量a的污点信息要么是完全污染的,要么a是部分污染的,要么不记录变量a的污点信息,即a是可信的,这三种情形是互斥的,不可以同时发生;
(2)表示如果在传递的数据流事实中变量a是完全污染的,那么数据流事实中的a的所有子域对象一定是完全污染的;(3)表示如果在传递的数据流事实中变量a是部分污染的,那么a的所有子域对象可能是完全污染的,可能是部分污染的,也可能是可信的;(4)表示如果在传递的数据流事实中变量a是可信的,那么a的所有子域对象也必须是可信的,即污点集合中不包含a和a的所有子域对象的信息;(5)表示如果在传递的数据流事实中,数组元素a[i]中有一个引用变量是不可信的,即a或i不可信,则变量a[i]就是不可信的,而且a[i]是完全污染的;(6)表示互为别名的变量的污点信息必须相同;
本发明在分析赋值语句时,根据左值和右值的不同类型分别定义不同的污点传播规则,对于左值为变量且右值为常量或基本类型的赋值语句,定义污点传播规则如图3所示,对于左值为变量且右值为变量访问路径的赋值语句,定义污点传播规则如图4所示,对于左值为变量且右值为动态分配对象的赋值语句,定义传播规则如图5所示,对于左值为实例域且右值为变量的赋值语句,定义污点传播规则如图6所示,对于左值为静态域且右值为变量的赋值语句,定义污点传播规则如图7所示,对于左值为数组变量且右值为变量的赋值语句,定义污点传播规则如图8所示;
本发明在分析方法调用语句时,对于验证方法和Source方法的调用语句,定义污点传播规则如图9所示,对于自定义实例方法和类实例初始化方法的调用语句,定义污点传播规则如图10所示,对于自定义静态方法的调用语句,定义污点传播规则如图11所示;
本发明在修改变量的污点信息时,如果与变量互为别名的变量集合中存在实例域(c.d)、数组元素或静态域,那么需要对它们的父域(base)的污点信息进行相应修改,应用一个向上递归修改相关变量污点信息的过程,并限制最大递归层数;
污点分析的目标是在别名分析的基础之上,将污点信息标记到记录的内存块上,并跟踪污点的传播过程。影响污点传播的执行语句为赋值语句和方法调用语句。
在分析方法调用语句的污点传播时,如果调用的是库方法,手工收集并人工分析库方法执行过程的污点传播语义,定义库方法的污点传播摘要,然后在污点传播分析过程中依照定义的传播摘要对内存块的污点信息进行更新和调整。如果调用自定义方法,根据Trace记录的方法调用现场信息和别名分析结果,因为各内存块的污点信息在经过每一步执行语句的语义分析后,已经完整跟踪了污点的传播过程,所以无需再做修改。
分析赋值语句时,首先按赋值语句右值的不同类型定义对应的污点传播语义规则,依照定义的规则记录语句执行的污点传递路径。然后再根据左值的不同类型对污点传播过程中,相关变量的污点信息进行调整。所有对污点信息的修改或调整都必须满足图2给出的污点传播一致性约束,图3至图10形式化定义了赋值语句和方法调用语句在不同类型的左值和右值时的污点传播规则。
当实例域变量a.f的污点信息发生改变时,a的污点信息也需要做出相应调整,并且在所有与a互为别名的变量中如果存在实例域(c.d)或数组元素或静态域,也需要对它们的父域(base)的污点信息进行调整,这是一个向上递归调整相关变量污点信息的过程。
本发明定义一个递归深度变量,控制向上递归传播污点信息信息的最大递归层数,根据已发生污点信息变化的变量类型,向上递归调整污点信息信息,根据变量的不同类型调整污点信息。
如果变量是实例域对象,获得该实例域和它的父域的污点信息,如果该实例域是可信的并且父域是完全不可信的,那么需要将该父域调整为部分可信,接着在父域的别名集合中对相应类型的别名进行递归向上调整污点信息信息(如图19中情形①)。如果该实例域是部分可信的,那么父域就直接标记为部分可信的,然后对父域的所有别名递归向上传播污点信息信息(如图19中情形②)。如果实例域是完全不可信的并且父域不是完全不可信的,那么父域应调整为部分可信的,接着同样对父域的所有别名指针递归向上传播污点信息信息(如图19中情形③)。
如果是数组元素对象,为保证数组的污点信息信息的一致性,规定数组元素中只要有一个元素不是可信的就认为该整个数组都是被污染的,即其中所有元素都是不可信的,而且数组中所有元素的污点信息都保持一致(数组元素要么可信要么完全不可信,所有的数组元素互为别名都指向同一块内存空间):
①如果数组元素被完全污染,那么数组中的所有元素和数组对象(base)的被污染程度也一样是被完全污染;例如:“a[i] = source()”,a[i]是完全污染的,那么a[j]和a都是完全污染的,其中j为任意。
②如果数组元素的被污染程度变化成可信,但数组对象的污染程序是不可信的,那么仍然将数组中所有元素都视为完全被污染的信息。例如:“sanitizer(a[i])”,如果a是不可信的,那么a[i]仍然是完全污染的。
步骤120,基于路径条件反转和活变量分析进行程序变换。
本发明对种子Trace进行污点验证后,如果没有发现从Source到Sink的污点传播路径,那么需要遍历执行从Source到Sink的所有其他执行路径,并进行分析和验证,直到遍历完所有的Trace表明漏洞为虚警,或者在遍历Trace的过程中发现一条真实有效的污点传播路径,表明漏洞真实有效;
本发明遍历所有路径的方法是首先从Trace中收集Source到Sink的所有条件语句,然后结合变量分析和污点分析结果裁剪不需要反转的条件语句集合,接着结合程序变换方法,将剩余的条件语句以组合的方式分别对它们进行条件取反,生成新的Android程序,然后根据记录的动作序列(events)重放执行新的Android程序,进而获得反转条件后的Trace。
A.结合活变量分析的路径裁剪策略
本发明根据对Trace的污点分析结果判定从Source到Sink是否存在污点传播路径,如果有则验证通过,报告漏洞真实存在;如果没有则根据从Trace中收集的条件语句集合开始遍历其他可能的执行路径;
本发明结合静态活变量分析和污点分析结果,针对条件语句集合中的每条语句,设计一种反转路径条件的选择策略,仅选择同时满足以下两个条件的条件语句加入待反转的条件语句集合:
①在程序的反向过程间控制流图(RICFG)中,剪去位于Sink前方的子图,在剩下的子图中,以Sink为起点进行过程间的活变量分析,要求条件语句的活变量集合中必须存在至少一个污点变量;
②如果条件语句与Sink属于同一个方法体内部,那么在这个方法体对应的控制流图(CFG)中,从该条件语句的另一个分支出发的路径集合中至少有一条路径会经过Sink结点;
如果在条件语句处已经不存在任何活跃的污点变量,表明Source在该条件语句之前已经被验证或者后续没有任何有关Source的数据流传播,那么该条件语句后面的所有分支路径是不可能有污点信息传播到Sink处,可以安全裁剪该条件语句后续的所有路径;
本发明应用标准静态跨方法活变量分析收集每条语句处的活变量信息,基于FlowDroid提供的IFDS框架,扩展四种相应的流方法,完成活变量数据流事实的传递,结合污点分析结果判断条件语句位置是否存在至少一个污点变量;
本发明裁剪所有不属于待反转条件语句集合的条件语句,从而避免分析这些条件语句所属的污点传播路径集合;
B. 无效传播路径判断算法
本发明判定如果条件语句与Sink节点属于同一方法,并且从条件语句的某个分支出发的路径集合中不存在任何经过Sink结点的路径,那么该分支的所有后续路径都是无效传播路径;
本发明生成方法体的反向控制流图(RCFG),并判断条件语句分支是否同时满足以下两个条件:
①以Sink节点作为起点,Sink节点是条件语句节点的必经节点(dominator);
②从Sink节点开始深度遍历RCFG得到的节点序列,包含条件语句节点的两个直接前继结点;
无法同时满足两个条件的条件分支,其所有后续路径为无效传播路径,具体算法如图12所示;
本发明通过反转路径条件来遍历Source到Sink的所有可执行路径,条件①要求条件语句的分支汇聚点必须在Sink节点前面,即从条件语句的不同分支路径的汇聚点开始深度遍历CFG经过的节点序列必须包含Sink节点;条件②要求从条件语句的两个不同分支出发的路径集合都至少存在一条经过Sink节点的路径,由于其中一个分支是Trace的条件语句,如果另一个分支不存在经过Sink节点的路径,意味着该分支后续的所有路径是无效传播路径;
C. 基于路径条件反转的路径遍历执行模块
本发明遍历路径的方法是获取裁剪后的条件语句集合,应用程序变换方法,将各条件语句以组合的方式分别进行条件取反,生成变换后的Android程序,然后根据记录的动作序列(events),对变换后的Android程序重放动作序列遍历新的执行路径,获得相应的新Trace,递归地对新Trace实施污点分析、结合活变量分析的路径选择策略和无效传播路径裁剪算法,最后基于条件反转遍历剩余路径;
本发明首先取反Jimple代码中条件语句的条件,在反转路径条件的同时记录每一次反转的条件组合以避免重复反转,然后将修改后的Jimple文件重新编译,生成新的Android程序。
图20给出了一个代码片段,其中存在5条条件语句,总共可以反转产生25-1条新的Trace,但当Source到Sink之间的条件语句的数量线性增长时,所需要遍历的路径总数将会指数级增长,导致路径爆炸。
如果在某条件语句处已经不存在任何活跃的污点变量,那么说明Source在该条件语句之前已经被验证过或者后续没有任何有关Source的数据流传播,所以在该条件语句后面的所有分支路径是不可能有污点信息传播到Sink处,即不存在污点传播路径,因此无需反转此条件。与Sink属于同一方法体内的条件语句,必须满足从该条件语句的另一个分支出发的路径集合中至少有一条路径会经过Sink语句,否则反转后产生所有新Trace都不会经过Sink。
在图20的代码片段中,经过选择策略的筛选,只需要反转图中第6和第9行的条件语句,在第17行对source1进行了验证,所以在第24、29和32行的条件语句处不存在任何活跃的污点变量,因此不需要反转这些条件。
条件反转方法采用程序变换技术,对图20片段中第6和9行的条件语句进行反转,经组合反转后总共产生3条Trace。实现方法是将Jimple代码中条件语句的条件进行置反操作,然后将修改后的Jimple文件重新编译,生成新的Android可执行文件。在反转路径条件的过程中,同时记录每一次反转的条件组合,以避免重复反转。虽然在source1和sink1之间总共存在32条路径,但是只需要产生4条Trace,即可验证(source1,sink1)表示的漏洞是虚警。
本发明的实施以Java的Jar包形式呈现,需要采用支持Android虚拟环境的模拟器。程序输入为以(Source,Sink)对表示的静态污点分析结果,如果该结果真实有效,则输出为一条包含污点传播路径的指令序列,否则输出该结果为虚警。
本发明的有益效果是设计一种基于路径条件反转和活变量分析的动态Android程序漏洞验证方法,针对每个潜在漏洞,首先生成一条同时经过Source和Sink的种子Trace,然后对Trace进行别名分析和污点分析判定是否存在真实污点传播路径,接着收集Trace路径条件集合,基于污点分析结果并结合活变量分析裁剪大量无需验证的污点传播路径集合,最后应用基于条件反转的程序变换方法执行Trace的其他污点传播路径,有效解决了漏洞的正确性验证问题。
本发明的设计方案可以有效验证面向Android程序的静态污点分析产生的安全漏洞的正确性,验证漏洞是否真实并且列出能够触发漏洞的可执行路径。
本发明的设计方案实现解决了三个问题,一是如何插桩记录和存储Trace,二是如何在Trace上顺序模拟实际运行时动态分配的内存空间并进行别名分析和污点分析,三是如何收集条件语句集合并反转条件生成新的Anroid程序。
本发明一个实施例还提供的一种动态Android程序漏洞验证装置,所述装置包括:
代码插桩模块,用于对所述Android程序进行静态插桩生成dex代码,运行插桩后的所述Android程序能够记录所述Android程序的执行路径信息;
执行模块,用于重复执行所述Android程序直至产生一条同时经过Source 和Sink的所述种子Trace下并记录操作序列
验证模块,用于对所述种子Trace进行污点验证,确定漏洞是否真实有效。
可选的,所述验证模块包括:
别名分析模块,用于对所述种子Trace进行别名分析获得程序运行过程中的污点信息;
污点分析模块,用于对所述污点信息进行污点分析得到污点分析结果;
确定模块,用于根据所述污点分析结果,确定是否存在一条从Source到Sink的污点传播路径;如果存在,则结束动态Android程序的漏洞验证,确定漏洞真实有效。
本发明一个实施例还提供的一种计算机可读存储介质,该计算机可读存储介质中存储有一个或一个以上的指令,所述一个或一个以上的指令被电子设备内的处理器执行时实现上述任一实施例中所涉及的动态Android程序漏洞验证方法。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (9)

1.一种动态Android程序漏洞验证方法,其特征在于,所述方法包括:
对所述Android程序进行静态插桩生成dex代码,运行插桩后的所述Android程序能够记录所述Android程序的执行路径信息Trace;
重复执行所述Android程序直至产生一条同时经过Source 和Sink的所述种子Trace并记录操作序列;
对所述种子Trace进行污点验证,确定漏洞是否真实有效;
收集Trace的路径条件集合,基于污点分析结果并结合活变量分析裁剪大量无需验证的污点传播路径集合,应用基于条件反转的程序变换方法执行Trace的其他污点传播路径。
2.根据权利要求1所述的方法,其特征在于,所述对所述种子Trace进行污点验证,确定漏洞是否真实有效,包括:
对所述种子Trace进行别名分析获得程序运行过程中的污点信息;
对所述污点信息进行污点分析得到污点分析结果;
根据所述污点分析结果,确定是否存在一条从Source到Sink的污点传播路径;如果存在,则确定漏洞真实有效。
3.根据权利要求2所述的方法,其特征在于,所述确定是否存在一条从Source到Sink的污点传播路径之后,所述方法还包括:
如果不存在一条从Source到Sink的污点传播路径,则遍历执行从Source到Sink的所有其他执行路径;对遍历过程中生成的子Trace进行别名分析获得程序运行过程中的污点信息;对所述污点信息进行污点分析得到污点分析结果;根据所述污点分析结果,确定是否存在一条从Source到Sink的污点传播路径;
如果遍历从Source到Sink的所有其他执行路径的过程中,确定出一条从Source到Sink的污点传播路径,则确定漏洞真实有效;
如果遍历从Source到Sink的所有其他执行路径后,未确定出一条从Source到Sink的污点传播路径,则确定漏洞为虚警。
4.根据权利要求3所述的方法,其特征在于,所述遍历执行从Source到Sink的所有其他执行路径,包括:
从Trace中收集Source到Sink的所有条件语句;
结合变量分析、上述污点分析结果得到待反转的条件语句集合并且分别对它们进行条件取反,生成新的Android程序;
根据所述操作序列重新执行所述新的Android程序,进而获得反转条件后的Trace得到所述子Trace。
5.根据权利要求4所述的方法,其特征在于,所述结合变量分析、上述污点分析结果、程序变换方法得到待反转的条件语句集合,包括:
对于所述所有条件语句的集合中每条条件语句,将同时满足第一条件、第二条件的条件语句加入待反转的条件语句集合,其中:
所述第一条件为:在所述Android程序的反向过程间控制流图中,剪去位于Sink前方的子图,在剩下的子图中,以Sink为起点进行过程间的活变量分析,要求条件语句的活变量集合中必须存在至少一个污点变量;
所述第二条件为:如果所述条件语句与Sink属于同一个方法体内部,那么在这个方法体对应的控制流图(CFG)中,从该条件语句的另一个分支出发的路径集合中至少有一条路径会经过Sink结点。
6.根据权利要求5所述的方法,其特征在于,所述结合活变量分析、上述污点分析结果、程序变换方法得到待反转的条件语句集合,还包括:
如果条件语句与Sink节点属于同一方法,并且从条件语句的某个分支出发的路径集合中不存在任何经过Sink结点的路径,那么该分支的所有后续路径都是无效传播路径。
7.一种动态Android程序漏洞验证装置,其特征在于,所述装置包括:
代码插桩模块,用于对所述Android程序进行静态插桩生成dex代码,运行插桩后的所述Android程序能够记录所述Android程序的执行路径信息;
执行模块,用于重复执行所述Android程序直至产生一条同时经过Source 和Sink的所述种子Trace并记录操作序列;
验证模块,用于对所述种子Trace进行污点验证,确定漏洞是否真实有效;收集Trace的路径条件集合,基于污点分析结果并结合活变量分析裁剪大量无需验证的污点传播路径集合,应用基于条件反转的程序变换方法执行Trace的其他污点传播路径。
8.根据权利要求7所述的装置,其特征在于,所述验证模块包括:
别名分析模块,用于对所述种子Trace进行别名分析获得程序运行过程中的污点信息;
污点分析模块,用于对所述污点信息进行污点分析得到污点分析结果;
确定模块,用于根据所述污点分析结果,确定是否存在一条从Source到Sink的污点传播路径;如果存在,则结束动态Android程序的漏洞验证,确定漏洞真实有效。
9.一种计算机可读存储介质,所述计算机可读存储介质中存储有一个或一个以上的指令,其特征在于,所述一个或一个以上的指令被电子设备内的处理器执行时实现权利要求1至8中任一所述的动态Android程序漏洞验证方法。
CN202010723865.6A 2020-07-24 2020-07-24 动态Android程序漏洞验证方法和装置 Pending CN111723382A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010723865.6A CN111723382A (zh) 2020-07-24 2020-07-24 动态Android程序漏洞验证方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010723865.6A CN111723382A (zh) 2020-07-24 2020-07-24 动态Android程序漏洞验证方法和装置

Publications (1)

Publication Number Publication Date
CN111723382A true CN111723382A (zh) 2020-09-29

Family

ID=72573488

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010723865.6A Pending CN111723382A (zh) 2020-07-24 2020-07-24 动态Android程序漏洞验证方法和装置

Country Status (1)

Country Link
CN (1) CN111723382A (zh)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111240991A (zh) * 2020-01-20 2020-06-05 重庆富民银行股份有限公司 一种抗隐式污点传播的动态污点检测方法及系统
CN112199292A (zh) * 2020-10-19 2021-01-08 湖南泛联新安信息科技有限公司 一种基于规则定义的Java污点分析方法
CN113010891A (zh) * 2021-02-26 2021-06-22 中科天齐(山西)软件安全技术研究院有限公司 一种应用程序安全检测方法、装置、电子设备和存储介质
CN113010890A (zh) * 2021-02-26 2021-06-22 中科天齐(山西)软件安全技术研究院有限公司 一种应用程序安全检测方法、装置、电子设备和存储介质
CN113392404A (zh) * 2021-06-15 2021-09-14 浙江网商银行股份有限公司 漏洞检测方法、装置及电子设备
CN113609487A (zh) * 2021-07-16 2021-11-05 深圳开源互联网安全技术有限公司 通过静态分析检测后门代码的方法
CN114491424A (zh) * 2021-12-31 2022-05-13 西安电子科技大学 基于模糊测试的二进制代码裁剪方法
CN116467712A (zh) * 2023-04-23 2023-07-21 北京安普诺信息技术有限公司 动态污点追踪方法、装置及相关污点传播分析系统

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105550594A (zh) * 2015-12-17 2016-05-04 西安电子科技大学 安卓应用文件的安全性检测方法
CN106709356A (zh) * 2016-12-07 2017-05-24 西安电子科技大学 基于静态污点分析和符号执行的安卓应用漏洞挖掘方法
CN109002721A (zh) * 2018-07-12 2018-12-14 南方电网科学研究院有限责任公司 一种信息安全漏洞的挖掘分析方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105550594A (zh) * 2015-12-17 2016-05-04 西安电子科技大学 安卓应用文件的安全性检测方法
CN106709356A (zh) * 2016-12-07 2017-05-24 西安电子科技大学 基于静态污点分析和符号执行的安卓应用漏洞挖掘方法
CN109002721A (zh) * 2018-07-12 2018-12-14 南方电网科学研究院有限责任公司 一种信息安全漏洞的挖掘分析方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
秦彪等: "面向Android应用的静态污点分析结果的正确性验证", 《计算机应用》 *

Cited By (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111240991A (zh) * 2020-01-20 2020-06-05 重庆富民银行股份有限公司 一种抗隐式污点传播的动态污点检测方法及系统
CN111240991B (zh) * 2020-01-20 2023-03-14 重庆富民银行股份有限公司 一种抗隐式污点传播的动态污点检测方法及系统
CN112199292A (zh) * 2020-10-19 2021-01-08 湖南泛联新安信息科技有限公司 一种基于规则定义的Java污点分析方法
CN113010890A (zh) * 2021-02-26 2021-06-22 中科天齐(山西)软件安全技术研究院有限公司 一种应用程序安全检测方法、装置、电子设备和存储介质
CN113010891B (zh) * 2021-02-26 2023-02-07 中科天齐(山西)软件安全技术研究院有限公司 一种应用程序安全检测方法、装置、电子设备和存储介质
CN113010890B (zh) * 2021-02-26 2023-02-07 中科天齐(山西)软件安全技术研究院有限公司 一种应用程序安全检测方法、装置、电子设备和存储介质
CN113010891A (zh) * 2021-02-26 2021-06-22 中科天齐(山西)软件安全技术研究院有限公司 一种应用程序安全检测方法、装置、电子设备和存储介质
CN113392404A (zh) * 2021-06-15 2021-09-14 浙江网商银行股份有限公司 漏洞检测方法、装置及电子设备
CN113609487A (zh) * 2021-07-16 2021-11-05 深圳开源互联网安全技术有限公司 通过静态分析检测后门代码的方法
CN114491424A (zh) * 2021-12-31 2022-05-13 西安电子科技大学 基于模糊测试的二进制代码裁剪方法
CN114491424B (zh) * 2021-12-31 2024-05-03 西安电子科技大学 基于模糊测试的二进制代码裁剪方法
CN116467712A (zh) * 2023-04-23 2023-07-21 北京安普诺信息技术有限公司 动态污点追踪方法、装置及相关污点传播分析系统
CN116467712B (zh) * 2023-04-23 2023-12-01 北京安普诺信息技术有限公司 动态污点追踪方法、装置及相关污点传播分析系统

Similar Documents

Publication Publication Date Title
CN111723382A (zh) 动态Android程序漏洞验证方法和装置
Li et al. String analysis for Java and Android applications
Liang et al. Deepfuzzer: Accelerated deep greybox fuzzing
CN101853200B (zh) 一种高效动态软件漏洞挖掘方法
CN109101237A (zh) 代码的加密编译方法及装置
WO2008039964A1 (en) Software testing using machine learning
CN111737150B (zh) 面向Java EE程序SQLIA漏洞的污点分析和验证方法及装置
Wu et al. Mutation testing for ethereum smart contract
US8126831B2 (en) System and method for dynamically inferring data preconditions over predicates by tree learning
Delahaye et al. Explanation-based generalization of infeasible path
CN111767076A (zh) 代码重构方法及装置
CN111859380A (zh) Android App漏洞的零误报检测方法
Wei et al. Evaluating design tradeoffs in numeric static analysis for java
CN115455435A (zh) 一种智能合约模糊测试方法、装置、存储介质及电子设备
Schmeidl et al. Security analysis for smartthings iot applications
Cheng et al. Logextractor: Extracting digital evidence from android log messages via string and taint analysis
Lin et al. A value set analysis refinement approach based on conditional merging and lazy constraint solving
Girol et al. Not all bugs are created equal, but robust reachability can tell the difference
CN115906092A (zh) 一种跨合约检测智能合约漏洞的符号执行方法
Ferrara et al. : Backward Context-Sensitive Flow Reconstruction of Taint Analysis Results
Kang et al. Scaling javascript abstract interpretation to detect and exploit node. js taint-style vulnerability
Zhao et al. A systematic review of fuzzing
Sherman et al. Accurate string constraints solution counting with weighted automata
Medeiros et al. Effect of coding styles in detection of web application vulnerabilities
Beckert et al. Using theorem provers to increase the precision of dependence analysis for information flow control

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
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20200929