CN106529304A - 一种安卓应用并发漏洞检测系统 - Google Patents

一种安卓应用并发漏洞检测系统 Download PDF

Info

Publication number
CN106529304A
CN106529304A CN201610952304.7A CN201610952304A CN106529304A CN 106529304 A CN106529304 A CN 106529304A CN 201610952304 A CN201610952304 A CN 201610952304A CN 106529304 A CN106529304 A CN 106529304A
Authority
CN
China
Prior art keywords
concurrent
program
application
event
module
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.)
Granted
Application number
CN201610952304.7A
Other languages
English (en)
Other versions
CN106529304B (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.)
Nanjing University
Original Assignee
Nanjing 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 Nanjing University filed Critical Nanjing University
Priority to CN201610952304.7A priority Critical patent/CN106529304B/zh
Publication of CN106529304A publication Critical patent/CN106529304A/zh
Application granted granted Critical
Publication of CN106529304B publication Critical patent/CN106529304B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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
    • 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)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computing Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种安卓应用并发漏洞检测系统,包含并发漏洞分析模块、应用插装模块和应用执行模块;所述并发漏洞分析模块用于分析应用中的潜在并发漏洞,并传递给应用插装模块;应用插装模块根据并发漏洞分析模块的检测结果,在疑似数据竞争代码处插入能够改变线程调度的语句,在后台线程入口方法处插入能够阻塞线程运行的控制代码,同时插入获取应用运行时刻状态信息的后台服务;应用执行模块会运行被插装过的应用,并产生成对的疑似事件发送给应用以触发潜在的并发漏洞。本发明检测结果正确高效,全程自动化,不需要用户额外参与。

Description

一种安卓应用并发漏洞检测系统
技术领域
本发明涉及一种漏洞检测系统,特别是一种安卓应用并发漏洞检测系统。
背景技术
由于安卓移动操作系统是一个开源的平台,它吸引了众多的应用开发者,使得近年来安卓系统在移动设备市场中占据了极大的份额。并发对于安卓应用是一个非常关键的功能,当应用在处理后台任务时,它也应当能够迅速响应输入的事件。但是,并发程序变得越来越难以开发、测试和调试。基于这个原因,安卓官方提供了一系列的约束规则以避免并发漏洞,比如UI操作必须在主线程中完成。不幸的是,由于应用变得越来越复杂,开发者无法正确地理解应用的行为,导致应用的发布版本中存在着大量的并发漏洞。
当前的并发漏洞检测技术通过扩展传统程序中的数据竞争到事件驱动的应用中来定位并发漏洞。这些方法根据已有的测试用例得到执行路径,并以此建立happens-before图。最后在happens-before图中寻找可能的并发漏洞。因此,这些方法的检测结果严重依赖传入的测试用例。进一步地,传入的测试用例中的非交换的事件可能根本不会导致并发漏洞,使得许多并发漏洞无法被检测到。而且这些方法不会验证所得到的检测结果,导致得到的检测结果存在较高的假阳性。
发明内容
本发明所要解决的技术问题是提供一种安卓应用并发漏洞检测系统,它检测结果准确高效。
为解决上述技术问题,本发明所采用的技术方案是:
一种安卓应用并发漏洞检测系统,其特征在于:包含并发漏洞分析模块、应用插装模块和应用执行模块;所述并发漏洞分析模块用于分析应用中的潜在并发漏洞,并传递给应用插装模块;应用插装模块根据并发漏洞分析模块的检测结果,在疑似数据竞争代码处插入能够改变线程调度的语句,在后台线程入口方法处插入能够阻塞线程运行的控制代码,同时插入获取应用运行时刻状态信息的后台服务;应用执行模块会运行被插装过的应用,并产生成对的疑似事件发送给应用以触发潜在的并发漏洞。
进一步地,所述并发漏洞分析模块由静态分析部分和动态分析部分组成,静态分析部分直接分析应用的安装文件,找到所有可能的程序任务中的疑似数据竞争作为潜在并发漏洞;动态分析部分首先需要按照深度优先搜索的方式运行被测应用,同时记录所有程序任务的程序执行事件,包括全局的资源访问和方法调用,最后找到任务中的潜在疑似数据竞争作为潜在并发漏洞。
进一步地,所述并发漏洞分析模块静态分析部分的工作流程为,并发漏洞分析模块的静态分析部分通过分析应用的安装文件,找到疑似数据竞争,并报告给下一个模块。
进一步地,所述并发漏洞分析模块静态分析部分的工作流程具体为,并发漏洞分析模块首先读入应用的安装文件,然后解析得到所有的程序任务,即事件处理方法和后台线程,以及它们的入口方法;该模块会对每一个程序任务进行单独处理,计算出它们的方法调用图,这里采用了深度优先遍历的方法,首先将入口方法压入栈内,判断当前的栈是否为空,如果为空,则结束遍历;否则,取出栈顶的方法,并标记该方法,并解析得到该方法调用的所有其它方法,将没有被标记过的方法压入栈内,接着回到之前判断栈是否为空的步骤继续执行;当为所有的程序任务生成了方法调用图后,解析出它们的方法调用图中的每一个方法对资源的访问的指令,接着处理所有的程序任务对,即将程序任务两两组合以进一步分析,对于每一对程序任务,将两者所有的资源访问指令配对进行比较,如果两条指令访问的是同一个共享资源,且至少一个是写操作,则标记为疑似的数据竞争;最后,当处理完了所有的程序任务对后,为所有的疑似数据竞争生成报告,并结束该流程。
进一步地,所述并发漏洞分析模块动态分析部分的工作流程为,发漏洞分析模块的动态分析部分通过运行被测的应用,收集运行时刻每个程序任务的程序事件,并分析得到疑似的数据竞争。
进一步地,所述运行被测应用的算法流程为,采用深度优先搜索的方式遍历程序状态,当程序运行时,首先获取程序当前的状态,并解析得到所有的GUI部件以及可以触发的事件;对每一个GUI部件进行处理,产生相应的事件发送给应用,如果到达了一个曾经未遍历过的程序状态,则递归的调用该过程,当递归调用结束并返回后,处理下一个GUI部件;需要在程序运行时刻通过安卓虚拟机收集程序任务的程序事件,并记录在一个日志文件中。
进一步地,分析得到疑似的数据竞争的算法流程为,首先解析日志文件中的程序事件得到每个程序任务对资源的访问指令,然后处理所有的程序任务对,即将程序任务两两组合,并进一步分析,对于每一对程序任务,将两者所有的资源访问指令配对进行比较,如果两条指令访问的是同一个共享资源,且至少一个是写操作,则标记为疑似的数据竞争,最后,当处理完了所有的程序任务对后,为所有的疑似数据竞争生成报告,并结束该流程。
进一步地,所述应用插装模块的算法工作流程为,首先读入应用的安装文件和并发漏洞分析模块的检测结果,解析得到所有的疑似数据竞争指令的具体信息,即所在位置;在所有的疑似数据竞争指令前插入能够改变线程调度的语句,接下来解析出所有的程序任务,并对每一个程序任务进行如下处理;判断程序任务是否是可疑程序任务,如果是,判断是否是后台线程程序任务,如果依然成立,则在该程序任务的入口处插入能够阻塞线程运行的语句,当处理完了所有的程序任务后,向应用插入能够获取应用运行时刻的程序状态信息的后台服务,并结束整个流程。
进一步地,所述应用执行模块会运行被插装过的应用,通过获取到的应用运行时刻的状态信息,产生可疑事件对并发送给应用,应用执行模块会按照深度优先的顺序遍历应用的状态;如果在此过程中,出现了应用的崩溃或者其它不符合预期的行为,则可能发生了并发漏洞;应用执行模块会记录导致该漏洞发生的事件序列,以重复整个过程。
进一步地,所述应用执行模块执行流程为,首先获取程序当前的运行时刻的程序状态信息,并解析出所有的GUI部件及相对应的可以触发的事件;根据并发漏洞分析模块的报告得到其中的可疑事件,进一步得到可能造成数据竞争的可疑事件对,对每一对可疑事件对进行如下的处理:
1) 同时向应用发送两个可疑事件,一定时间后恢复至上一个状态;
2) 发送可疑事件对的第一个事件,并阻塞所有新建的后台线程程序任务;发送可疑事件对的第二个事件,并阻塞所有新建的后台线程程序任务;先解阻塞第二个事件引发的后台线程程序任务,然后解阻塞第一个事件引发的后台线程程序任务,完成上述操作后恢复至上一个状态;
接着该模块对所有单个的事件进行处理:发送单个事件,获取事件发送后程序的状态,判断是否是探索过的状态,如果是曾经未遍历过的状态,则递归调用该模块的全部过程,否则恢复至上一个状态,当所有的单个事件处理完毕后,结束整个过程。
本发明与现有技术相比,具有以下优点和效果:能分析并自动执行一个安卓应用,产生一系列的事件序列并传递给应用进行相应的处理,同时改变访问了共享资源的可能会导致并发漏洞的线程的调度,并按照深度优先遍历应用的状态空间,触发潜在的并发漏洞并将之捕获。最后得到的检测结果是正确的和高效的,上述所有的过程都是自动化的,不需要用户的额外参与。
附图说明
图1是本发明的安卓应用并发漏洞检测系统的系统结构图。
图2是并发漏洞分析模块静态分析部分的工作流程图。
图3是并发漏洞分析模块动态分析部分的工作流程图。
图4是应用插装模块的算法工作流程图。
图5是应用执行模块的执行流程图。
具体实施方式
为了更清楚的对发明进行说明,首先,对一些用词进行解释。
安卓应用是指一个可以在安卓移动设备上的安装并运行的应用,当明确对之进行操作时特指这个应用的资源文件和字节码文件。
Java应用是指一个可以在装有JVM的计算机上运行的由Java语言编写的应用。
安卓应用的字节码是安卓应用的本质,它由若干个类文件组成,这些类中各自包含若干方法,这些类中的方法通过合作,共同实现特定的功能。
安卓虚拟机是指安卓运用运行时的执行器,是一种特殊的JVM,专门用于解释执行安卓应用的字节码指令。
安卓应用GUI部件是指应用在运行过程中能够显示在屏幕上的部分,从应用的资源文件中解析得到应用初始时刻的GUI部件,当应用运行后,GUI部件可能会动态变化。
安卓应用事件是指由安卓系统或者用户产生的行为和动作,通过产生这样一系列的操作使用安卓应用,安卓应用通过响应这样一系列的操作为用户提供服务。
安卓应用事件处理方法是指应用中定义的用于响应事件的回调函数,当产生了事件后,安卓系统会自动调用注册过的对应的事件处理方法进行处理。
事件处理过程是指从调用事件处理方法开始,到事件处理方法返回结束,这包含所有由事件处理方法直接或间接创建的工作线程结束。
后台线程是指应用创建的线程,需要显示启动并运行于后台的线程。
程序任务是指应用的事件处理的整个过程和后台线程的整个执行周期。
共享资源是指全局变量、数据库、文件系统等。
并发漏洞是指由数据竞争所导致的程序执行不符合预期的一种行为。
数据竞争是指存在两个不同的执行路径,对同一个共享资源进行了操作,并且至少存在一个操作是写操作。
Happens-before关系是指两个事件直接存在着确定的先后发生顺序的关系,这种关系保证了后发生的事件能够得知先发生事件的结果。
Happens-before图是指所有的事件作为点,如果两个事件之间具有Happens-before关系,则添加一条从先发生事件到后发生事件的边。
可疑程序任务是指会执行潜在数据竞争语句的程序任务。
可疑程序任务对是指一对程序任务,它们的操作之间存在着潜在的数据竞争。
可疑事件是指用安卓系统或用户产生的行为和动作,并且会触发可疑程序任务。
可疑事件对是指一对安卓系统或用户产生的行为和动作,并且会触发可疑的程序任务对。
入口函数是指程序任务的第一个执行方法,包括所有的时间处理方法和后台线程的run方法。
方法调用图是指给定入口函数,所有能够被入口函数直接或者间接调用到的方法组成点、调用关系组成边而构成的图。
静态分析是指通过分析应用安装文件的所有可能的程序任务的程序调用图,得到其中所有的潜在数据竞争。
程序执行事件是指对全局变量访问的指令操作和方法调用与返回。
事件收集器是指会在应用执行期间记录所有执行事件,并将它们存储在文件中的模块。
动态分析是指用深度优先算法运行被测应用,同时记录所有发生了的程序任务的程序执行事件,并根据这些事件分析得到潜在的数据竞争。
程序插装是指在应用的字节码文件中,插入新的字节码,当应用执行时,这些被插入的字节码会被调用执行。
应用执行控制器是指可以向应用发送特定的事件,以及改变应用内部的变量的值。
程序状态是指安卓应用所处于的一种状态,此时程序具有特定的GUI界面,包括特定的按钮、文字和输入框等。
线程调度是指将线程按照不同顺序安排到处理上执行的过程。
改变线程调度是指在应用中插入能够暂停线程执行的语句,如Thread.sleep方法和Thread.yield方法等。
线程阻塞是指通过在应用中插入对信号量的获取操作而暂停当前线程的执行,并调度其它的线程执行。
线程解阻塞是指将对应的信号量执行释放操作,从而恢复对应的线程的执行。
下面结合附图并通过实施例对本发明作进一步的详细说明,以下实施例是对本发明的解释而本发明并不局限于以下实施例。
如图1所示,本发明的针对安卓应用并发漏洞的分析与检测系统,由并发漏洞分析模块,应用插装模块和应用执行模块构成,三个模块依次连接,构成一个统一的系统。并发漏洞分析模块用于分析应用中的潜在并发漏洞,并由静态分析和动态分析两个部分所组成。静态分析部分直接分析应用的安装文件,找到所有可能的程序任务中的疑似数据竞争作为潜在并发漏洞;动态分析部分首先需要按照深度优先搜索的方式运行被测应用,同时记录所有程序任务的程序执行事件,包括全局的资源访问和方法调用,最后找到任务中的潜在疑似数据竞争作为潜在并发漏洞。并发漏洞分析模块会综合这两个部分的分析结果,一并传递给应用插装模块。应用插装模块会在疑似的数据竞争代码位置处插入改变线程调度的语句,使得应用在执行这些疑似数据竞争代码时,发生线程调度。应用插装模块还会在所有后台线程的入口方法处插入控制语句以阻塞和解阻塞该线程的执行。此外,应用插装模块还会插入后台服务以获取应用运行时刻的程序状态信息。最后,应用执行模块会运行被插装过的应用,通过获取到的应用运行时刻的状态信息,产生可疑事件对并发送给应用。最后,应用执行模块会按照深度优先的顺序遍历应用的状态。如果在此过程中,出现了应用的崩溃或者其它不符合预期的行为,则可能发生了并发漏洞。应用执行模块会记录导致该漏洞发生的事件序列,以重复整个过程。
图2描述了并发漏洞分析模块静态分析的工作流程。并发漏洞分析模块的静态分析通过分析应用的安装文件,找到疑似数据竞争,并报告给下一个模块。
该模块首先读入应用的安装文件,然后解析得到所有的程序任务,即事件处理方法和后台线程,以及它们的入口方法。该模块会对每一个程序任务进行单独处理,计算出它们的方法调用图。这里采用了深度优先遍历的方法,首先将入口方法压入栈内。判断当前的栈是否为空,如果为空,则结束遍历;否则,取出栈顶的方法,并标记该方法,并解析得到该方法调用的所有其它方法,将没有被标记过的方法压入栈内,接着回到之前判断栈是否为空的步骤继续执行。当为所有的程序任务生成了方法调用图后,解析出它们的方法调用图中的每一个方法对资源的访问的指令。接着处理所有的程序任务对,即将程序任务两两组合以进一步分析。对于每一对程序任务,将两者所有的资源访问指令配对进行比较。如果两条指令访问的是同一个共享资源,且至少一个是写操作,则标记为疑似的数据竞争。最后,当处理完了所有的程序任务对后,为所有的疑似数据竞争生成报告,并结束该流程。
图3描述了并发漏洞分析模块动态分析的工作流程。并发漏洞分析模块的动态分析通过运行被测的应用,收集运行时刻每个程序任务的程序事件,并分析得到疑似的数据竞争。
图3左边是运行被测应用的算法流程,这里采用的是深度优先搜索的方式遍历程序状态。当程序运行时,首先获取程序当前的状态,并解析得到所有的GUI部件以及可以触发的事件。对每一个GUI部件进行如下处理,产生相应的事件发送给应用。如果到达了一个曾经未遍历过的程序状态,则递归的调用该过程。当递归调用结束并返回后,处理下一个GUI部件。需要在程序运行时刻通过安卓虚拟机收集程序任务的程序事件,并记录在一个日志文件中。
图3的右边为动态分析中解析疑似数据竞争的算法流程图。首先解析日志文件中的程序事件得到每个程序任务对资源的访问指令。然后处理所有的程序任务对,即将程序任务两两组合,并进一步分析。对于每一对程序任务,将两者所有的资源访问指令配对进行比较。如果两条指令访问的是同一个共享资源,且至少一个是写操作,则标记为疑似的数据竞争。最后,当处理完了所有的程序任务对后,为所有的疑似数据竞争生成报告,并结束该流程。
图4描述了应用插装模块的算法工作流程。应用插装模块根据并发漏洞分析模块的检测结果,在疑似数据竞争代码处插入能够改变线程调度的语句,在后台线程入口方法处插入能够阻塞线程运行的控制代码,同时插入获取应用运行时刻状态信息的后台服务。
首先读入应用的安装文件和并发漏洞分析模块的检测结果,解析得到所有的疑似数据竞争指令的具体信息,即所在位置。在所有的疑似数据竞争指令前插入能够改变线程调度的语句,比如Thread.sleep方法和Thread.yield方法。接下来解析出所有的程序任务,并对每一个程序任务进行如下处理。判断程序任务是否是可疑程序任务,即是否包含了疑似数据竞争指令。如果是,判断是否是后台线程程序任务。如果依然成立,则在该程序任务的入口处插入能够阻塞线程运行的语句,如信号量的获取语句。当处理完了所有的程序任务后,向应用插入能够获取应用运行时刻的程序状态信息的后台服务,并结束整个流程。
图5描述了应用执行模块的执行流程。应用执行模块会运行被插装过的应用,并产生成对的疑似事件发送给应用以触发潜在的并发漏洞。
该模块首先会获取程序当前的运行时刻的程序状态信息,并解析出所有的GUI部件及相对应的可以触发的事件。根据并发漏洞分析模块的报告得到其中的可疑事件,进一步得到可能造成数据竞争的可疑事件对,对每一对可疑事件对进行如下的处理:
1) 同时向应用发送两个可疑事件,一定时间后恢复至上一个状态。
2) 发送可疑事件对的第一个事件,并阻塞所有新建的后台线程程序任务;发送可疑事件对的第二个事件,并阻塞所有新建的后台线程程序任务;先解阻塞第二个事件引发的后台线程程序任务,然后解阻塞第一个事件引发的后台线程程序任务,完成上述操作后恢复至上一个状态。
接着该模块对所有单个的事件进行处理,即按照任何一种遍历技术探索发送相应事件后的状态,这里用深度优先的方式进行说明:发送单个事件,获取事件发送后程序的状态,判断是否是探索过的状态,如果是曾经未遍历过的状态,则递归调用该模块的全部过程,否则恢复至上一个状态。当所有的单个事件处理完毕后,结束整个过程。
本说明书中所描述的以上内容仅仅是对本发明所作的举例说明。本发明所属技术领域的技术人员可以对所描述的具体实施例做各种修改或补充或采用类似的方式替代,只要不偏离本发明说明书的内容或者超越本权利要求书所定义的范围,均应属于本发明的保护范围。

Claims (10)

1.一种安卓应用并发漏洞检测系统,其特征在于:包含并发漏洞分析模块、应用插装模块和应用执行模块;所述并发漏洞分析模块用于分析应用中的潜在并发漏洞,并传递给应用插装模块;应用插装模块根据并发漏洞分析模块的检测结果,在疑似数据竞争代码处插入能够改变线程调度的语句,在后台线程入口方法处插入能够阻塞线程运行的控制代码,同时插入获取应用运行时刻状态信息的后台服务;应用执行模块会运行被插装过的应用,并产生成对的疑似事件发送给应用以触发潜在的并发漏洞。
2.按照权利要求1所述的一种安卓应用并发漏洞检测系统,其特征在于:所述并发漏洞分析模块由静态分析部分和动态分析部分组成,静态分析部分直接分析应用的安装文件,找到所有可能的程序任务中的疑似数据竞争作为潜在并发漏洞;动态分析部分首先需要按照深度优先搜索的方式运行被测应用,同时记录所有程序任务的程序执行事件,包括全局的资源访问和方法调用,最后找到任务中的潜在疑似数据竞争作为潜在并发漏洞。
3.按照权利要求2所述的一种安卓应用并发漏洞检测系统,其特征在于:所述并发漏洞分析模块静态分析部分的工作流程为,并发漏洞分析模块的静态分析部分通过分析应用的安装文件,找到疑似数据竞争,并报告给下一个模块。
4.按照权利要求3所述的一种安卓应用并发漏洞检测系统,其特征在于:所述并发漏洞分析模块静态分析部分的工作流程具体为,并发漏洞分析模块首先读入应用的安装文件,然后解析得到所有的程序任务,即事件处理方法和后台线程,以及它们的入口方法;该模块会对每一个程序任务进行单独处理,计算出它们的方法调用图,这里使用了深度优先遍历的方法,首先将入口方法压入栈内,判断当前的栈是否为空,如果为空,则结束遍历;否则,取出栈顶的方法,并标记该方法,并解析得到该方法调用的所有其它方法,将没有被标记过的方法压入栈内,接着回到之前判断栈是否为空的步骤继续执行;当为所有的程序任务生成了方法调用图后,解析出它们的方法调用图中的每一个方法对资源的访问的指令,接着处理所有的程序任务对,即将程序任务两两组合以进一步分析,对于每一对程序任务,将两者所有的资源访问指令配对进行比较,如果两条指令访问的是同一个共享资源,且至少一个是写操作,则标记为疑似的数据竞争;最后,当处理完了所有的程序任务对后,为所有的疑似数据竞争生成报告,并结束该流程。
5.按照权利要求2所述的一种安卓应用并发漏洞检测系统,其特征在于:所述并发漏洞分析模块动态分析部分的工作流程为,并发漏洞分析模块的动态分析部分通过运行被测的应用,收集运行时刻每个程序任务的程序事件,并分析得到疑似的数据竞争。
6.按照权利要求5所述的一种安卓应用并发漏洞检测系统,其特征在于:所述运行被测应用的算法流程为,采用深度优先搜索的方式遍历程序状态,当程序运行时,首先获取程序当前的状态,并解析得到所有的GUI部件以及可以触发的事件;对每一个GUI部件进行处理,产生相应的事件发送给应用,如果到达了一个曾经未遍历过的程序状态,则递归的调用该过程,当递归调用结束并返回后,处理下一个GUI部件;需要在程序运行时刻通过安卓虚拟机收集程序任务的程序事件,并记录在一个日志文件中。
7.按照权利要求5所述的一种安卓应用并发漏洞检测系统,其特征在于:分析得到疑似的数据竞争的算法流程为,首先解析日志文件中的程序事件得到每个程序任务对资源的访问指令,然后处理所有的程序任务对,即将程序任务两两组合,并进一步分析,对于每一对程序任务,将两者所有的资源访问指令配对进行比较,如果两条指令访问的是同一个共享资源,且至少一个是写操作,则标记为疑似的数据竞争,最后,当处理完了所有的程序任务对后,为所有的疑似数据竞争生成报告,并结束该流程。
8.按照权利要求1所述的一种安卓应用并发漏洞检测系统,其特征在于:所述应用插装模块的算法工作流程为,首先读入应用的安装文件和并发漏洞分析模块的检测结果,解析得到所有的疑似数据竞争指令的具体信息,即所在位置;在所有的疑似数据竞争指令前插入能够改变线程调度的语句,接下来解析出所有的程序任务,并对每一个程序任务进行如下处理;判断程序任务是否是可疑程序任务,如果是,判断是否是后台线程程序任务,如果依然成立,则在该程序任务的入口处插入能够阻塞线程运行的语句,当处理完了所有的程序任务后,向应用插入能够获取应用运行时刻的程序状态信息的后台服务,并结束整个流程。
9.按照权利要求1所述的一种安卓应用并发漏洞检测系统,其特征在于:所述应用执行模块会运行被插装过的应用,通过获取到的应用运行时刻的状态信息,产生可疑事件对并发送给应用,应用执行模块会按照深度优先的顺序遍历应用的状态;如果在此过程中,出现了应用的崩溃或者其它不符合预期的行为,则可能发生了并发漏洞;应用执行模块会记录导致该漏洞发生的事件序列,以重复整个过程。
10.按照权利要求1所述的一种安卓应用并发漏洞检测系统,其特征在于:所述应用执行模块执行流程为,首先获取程序当前的运行时刻的程序状态信息,并解析出所有的GUI部件及相对应的可以触发的事件;根据并发漏洞分析模块的报告得到其中的可疑事件,进一步得到可能造成数据竞争的可疑事件对,对每一对可疑事件对进行如下的处理:
1) 同时向应用发送两个可疑事件,一定时间后恢复至上一个状态;
2) 发送可疑事件对的第一个事件,并阻塞所有新建的后台线程程序任务;发送可疑事件对的第二个事件,并阻塞所有新建的后台线程程序任务;先解阻塞第二个事件引发的后台线程程序任务,然后解阻塞第一个事件引发的后台线程程序任务,完成上述操作后恢复至上一个状态;
接着该模块对所有单个的事件进行处理:发送单个事件,获取事件发送后程序的状态,判断是否是探索过的状态,如果是曾经未遍历过的状态,则递归调用该模块的全部过程,否则恢复至上一个状态,当所有的单个事件处理完毕后,结束整个过程。
CN201610952304.7A 2016-10-27 2016-10-27 一种安卓应用并发漏洞检测系统 Active CN106529304B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610952304.7A CN106529304B (zh) 2016-10-27 2016-10-27 一种安卓应用并发漏洞检测系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610952304.7A CN106529304B (zh) 2016-10-27 2016-10-27 一种安卓应用并发漏洞检测系统

Publications (2)

Publication Number Publication Date
CN106529304A true CN106529304A (zh) 2017-03-22
CN106529304B CN106529304B (zh) 2019-06-14

Family

ID=58325334

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610952304.7A Active CN106529304B (zh) 2016-10-27 2016-10-27 一种安卓应用并发漏洞检测系统

Country Status (1)

Country Link
CN (1) CN106529304B (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109522097A (zh) * 2018-10-11 2019-03-26 天津大学 一种基于自适应随机测试的并发缺陷检测方法
CN109635568A (zh) * 2018-11-26 2019-04-16 华中科技大学 一种基于静态分析和模糊测试相结合的并发漏洞检测方法
CN109992503A (zh) * 2019-01-25 2019-07-09 北京丁牛科技有限公司 自动化测试方法及装置
CN110363004A (zh) * 2018-04-10 2019-10-22 腾讯科技(深圳)有限公司 一种代码漏洞检测方法、装置、介质及设备

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104899137A (zh) * 2015-05-22 2015-09-09 华中师范大学 一种并发程序的缺陷模式发现方法
CN105183655A (zh) * 2015-09-25 2015-12-23 南京大学 基于预测性分析的安卓应用程序数据竞争检测

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104899137A (zh) * 2015-05-22 2015-09-09 华中师范大学 一种并发程序的缺陷模式发现方法
CN105183655A (zh) * 2015-09-25 2015-12-23 南京大学 基于预测性分析的安卓应用程序数据竞争检测

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
HONGYIN TANG 等: "Generating test cases to expose concurrency bugs in android applications", 《2016 31ST IEEE/ACM INTERNATIONAL CONFERENCE ON AUTOMATED SOFTWARE ENGINEERING (ASE)》 *

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110363004A (zh) * 2018-04-10 2019-10-22 腾讯科技(深圳)有限公司 一种代码漏洞检测方法、装置、介质及设备
CN110363004B (zh) * 2018-04-10 2023-01-03 腾讯科技(深圳)有限公司 一种代码漏洞检测方法、装置、介质及设备
CN109522097A (zh) * 2018-10-11 2019-03-26 天津大学 一种基于自适应随机测试的并发缺陷检测方法
CN109522097B (zh) * 2018-10-11 2023-03-07 天津大学 一种基于自适应随机测试的并发缺陷检测方法
CN109635568A (zh) * 2018-11-26 2019-04-16 华中科技大学 一种基于静态分析和模糊测试相结合的并发漏洞检测方法
CN109992503A (zh) * 2019-01-25 2019-07-09 北京丁牛科技有限公司 自动化测试方法及装置
CN109992503B (zh) * 2019-01-25 2022-10-11 北京丁牛科技有限公司 自动化测试方法及装置

Also Published As

Publication number Publication date
CN106529304B (zh) 2019-06-14

Similar Documents

Publication Publication Date Title
JP5430570B2 (ja) システムコールカバレッジ基準による試験スイート削減のための方法
Bensalem et al. Dynamic deadlock analysis of multi-threaded programs
CN102279790B (zh) 分布式调试方法和系统
CN105787367B (zh) 一种软件更新的补丁安全性检测方法及系统
US20110107307A1 (en) Collecting Program Runtime Information
CN106557413A (zh) 基于代码覆盖率获取测试用例的方法和设备
CN104699601A (zh) 用于执行状态机驱动的注入的方法和系统
CN111291384B (zh) 漏洞扫描方法、装置及电子设备
CN106529304A (zh) 一种安卓应用并发漏洞检测系统
Misirli et al. Ai-based software defect predictors: Applications and benefits in a case study
CN103699480A (zh) 一种基于java的web动态安全漏洞检测方法
Xu et al. Experience mining Google's production console logs
Thung et al. To what extent could we detect field defects? An extended empirical study of false negatives in static bug-finding tools
CN105653946A (zh) 基于组合事件行为触发的Android恶意行为检测系统及其检测方法
Bensalem et al. Scalable dynamic deadlock analysis of multi-threaded programs
CN114428733A (zh) 基于静态程序分析与模糊测试的内核数据竞争检测方法
CN113590454A (zh) 测试方法、装置、计算机设备和存储介质
CN105677569B (zh) 基于事件处理器的Android自动化测试工具及测试方法
EP2713277B1 (en) Latent defect identification
CN109542444A (zh) Java应用的监控方法、装置、服务器和存储介质
CN105117332B (zh) 一种栈溢出位置的检测方法
CN112612697A (zh) 一种基于字节码技术的软件缺陷测试定位方法及系统
Suganya et al. A study of object oriented testing techniques: Survey and challenges
US20140289712A1 (en) Effective Lifetime Dependency Analysis and Typestate Analysis
US10496524B2 (en) Separating test coverage in software processes using shared memory

Legal Events

Date Code Title Description
C06 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