CN105022958B - 一种安卓应用中基于代码库安全规约的应用程序漏洞检测分析方法 - Google Patents

一种安卓应用中基于代码库安全规约的应用程序漏洞检测分析方法 Download PDF

Info

Publication number
CN105022958B
CN105022958B CN201510403224.1A CN201510403224A CN105022958B CN 105022958 B CN105022958 B CN 105022958B CN 201510403224 A CN201510403224 A CN 201510403224A CN 105022958 B CN105022958 B CN 105022958B
Authority
CN
China
Prior art keywords
secure protocol
program
point
rule
application
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
CN201510403224.1A
Other languages
English (en)
Other versions
CN105022958A (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.)
Fudan University
Original Assignee
Fudan 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 Fudan University filed Critical Fudan University
Priority to CN201510403224.1A priority Critical patent/CN105022958B/zh
Publication of CN105022958A publication Critical patent/CN105022958A/zh
Application granted granted Critical
Publication of CN105022958B publication Critical patent/CN105022958B/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/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)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Virology (AREA)
  • Health & Medical Sciences (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Health & Medical Sciences (AREA)
  • Storage Device Security (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明属于程序信息安全监测技术领域,具体为安卓应用中基于代码库安全规约的应用程序漏洞检测分析方法。本发明方法包括:建立安全规约模型,即用形式化的规则语言描述代码库安全规约;设计基于安全规约模型的用于进行自动化验证的静态程序分析器;将该静态程序分析器用于应用程序编译和应用市场对应用程序审查两个阶段,进行安全漏洞检测。本发明可以防范程序中的安全性风险。

Description

一种安卓应用中基于代码库安全规约的应用程序漏洞检测分 析方法
技术领域
本发明属于程序信息安全监测技术领域,具体涉及安卓应用中安全漏洞检测分析方法。
背景技术
安全规约是由代码库设计人员提供的代码库安全使用建议,例如Google为安卓系统内置函数库提供了详细的安全提示列表。在这些提示中,代码库设计人员会告知程序员如何使用代码库是正确的,而如何使用代码库会带来软件安全缺陷。在形式上,代码库安全提示类似于其他代码库使用指南:它们没有统一的格式,并且大多数代码库安全提示都由代码库设计人员通过其母语进行书写。因此,在实际使用中,开发者可能由于语言问题而误解安全规约的语义。
在众多移动平台中,由Google设计的安卓智能手机操作系统以其出众的开放性受到广大用户和手机厂商的青睐。安卓应用程序采用应用商城模式进行发布,开发者将开发好的应用程序提交给应用商城,用户通过应用商城获取经商城验证后的第三方应用。通过与应用商城模式相结合,安卓目前拥有海量的应用程序。
但是许多安卓应用,包括一些比较流行的应用,都包含大量的安全漏洞,而产生这些安全漏洞的一个重要原因就是开发者在使用代码库时未遵守相应的安全规约。许多公司和组织针对其代码库的正确使用方法提出了很多安全规约,但是,这些安全规约本身的质量以及在实际开发中的表现都还有很多问题,例如,安全规约缺乏强制力、安全规约的自然语言属性带来的语义误解问题、安全规约比较分散导致难以统一管理、以及误导性代码片段带来的影响等等。
因为开发者通常不会有意去违反代码库安全规约,所以在这种情况下,应用程序中可能存在的安全漏洞也不可能被开发者自发修复。因此,如何检测出由于未遵守代码库安全规约而引起的应用程序安全漏洞就成了一个亟待解决的问题。
发明内容
本发明的目的在于提供一种安卓应用中能够方便地检测分析由于未遵守代码库安全规约而引起的应用程序安全漏洞的方法。
本发明提供的应用程序安全漏洞的检测分析方法,包括:建立安全规约模型,即用形式化的规则语言描述代码库安全规约;基于安全规约模型,设计静态程序分析器(TipSticker分析器),以用于进行自动化验证;将该静态程序分析器分别用于应用程序编译阶段和应用市场审查应用程序阶段,以进行安全漏洞检测,防范程序中的安全性风险。
本发明主要针对于以下几个问题:
(1)代码库设计者期望设计并实现安全的代码库,并以开发者能理解的方式给出安全规约,使得开发者知晓怎样才能安全的使用其开放接口。
(2)设计和编写应用软件时,软件开发人员可能出错。开发人员可能会误解代码库安全规约,也可能在不知晓的情况下违反安全规约,但是他们希望有工具能帮助他们开发安全的应用软件。
(3)应用商城在发布应用之前希望对该应用进行安全漏洞检测,从而保证商城中的应用质量。
本发明提供的应用程序安全漏洞的检测分析方法,其中,建立的安全规约模型和设计的静态程序分析器,如附图 1所示;将静态程序分析器用于应用程序编译和应用市场对应用程序审查两个阶段进行安全漏洞检测,如图2所示。本发明的具体步骤为:
一、建立安全规约模型
通常,安全规约由代码库设计者以自然语言形式编写,由于代码库使用者可能与设计者存在着不同的语言习惯,因此,安全规约本身就存在着语义误解问题。因而,本发明提出采用统一的安全规约模型规范代码库的安全规约。
安全规约描述了代码库接口的正确和安全的使用方法,因此它们通常以方法为粒度出现。在通常情况下,安全规约会受描述方法调用间的时间顺序或数据依赖限制。本发明深入探究了安全规约在大多数应用程序中不被遵守的情形,主要如下:
1. 不安全接口调用顺序,不安全接口调用顺序描述了以不正确的顺序调用敏感代码库接口的情形。例如,一个应用在调用了一个敏感方法前未调用用于保护该敏感方法的另一代码库接口。
2. 不安全的数据传播,不安全的数据传播描述了不正确的数据流。某些代码库接口会由于安全原因对其参数的来源加以限制。例如,SQLCipher用于对数据库进行加密。在SQLCipher得安全提示中,代码库设计者强调将密钥存储在本地是不安全的,因此开发者需要将密钥置于应用程序外部而不是嵌入在应用程序中,并在程序运行时动态载入。因此,若没有外部数据被传播到SQLCipher的密钥参数中,则应用程序违反了相应的安全规约。
3. 不安全参数值,不安全参数值描述了给代码库接口传递的不安全参数。例如,将一个包含ECB的字符串传递到Cipher.getInstance()的第2个参数中时会导致应用程序使用弱密钥,该行为即违反了代码库的安全参数规约。
基于上述代码库不安全使用情形,本发明设计出一套规格化的安全规约语言。本发明的安全规约模型主要包含以下几个部分:
1、安全规约的基本元素
在定义安全规约之前,本发明首先定义用于构成安全规约的基本元素:执行点,数据点。每一条安全规约都包含了多个执行点或数据点。
(1)执行点(Execution Point, EP)。执行点表示某一个方法的调用点。由于在Android应用中,方法的签名(signature)和方法之间存在一一对应的关系,因此,对于在应用程序中存在的大量的方法调用,安全规约可以使用每个方法的签名(signature)将其表述为一个执行点。例如,可以使用EP(“android.content.Context.getSharedPreferences”)表示对 getSharedPreferences这个方法的调用点。因为Android应用本身的特性,应用程序并没有一个入口方法或出口方法作为整个程序的起始执行点或终止执行点,因此,本发明使用两个特殊的虚拟执行点ProgramEntry 和 ProgramExit 来表示整个应用程序的入口和出口。
有时需要表示满足某个条件的执行点的全体,这时可采用执行点集合(EPS)语法。如 EPS(“android.content.Context.getSharedPreferences”) 表示所有对getSharedPreferences 方法的调用点。
(2)数据点(Data Point, DP)。安全规约中的数据点表示了一次方法调用的参数或返回值。由于安全规约以方法为粒度出现,因此用户只可以将方法调用的参数或返回值指定为程序数据点。类似于执行点集合(EPS),安全规约制定者也可以通过数据点集合(DPS)表示所有同类数据点的集合。
2、安全规约的语法逻辑
使用上述的基本元素,本发明可以通过规则逻辑组合出需要实现的各种安全规约。
时序规则。时序规则限制了指令之间的时序关系。在本系统中使用四元组的方法来表示时序规则,语法是:
Rule∷Temporal(EPSS,EPS1,EPSE,mode)
其中 EPSS,EPS1,EPSE分别为时序规则中的起始执行点集,经过执行点集,和汇集执行点集,mode 可以取 PROP_SKIP 或 PROP_PASS_THROUGH。如果mode为PROP_PASS_THROUGH,则表示如果在从 EPSS到 EPSE的任一条执行路径上出现了EPS1的执行点,则存在安全隐患;如果 mode 为 PROP_SKIP,则表示如果在从EPSS到EPSE的每一条执行路径上都没有 EPS1的执行点,则存在安全隐患。
数据传播规则。数据传播规则主要用来对包含敏感信息的数据流传播进行描述,其语法是:
Rule∷Propagation(DPSS,DPSD,mode)
其中DPSS和DPSD表示数据传播的源点与汇点集合,mode可以取PROP_MAY或PROP_MAYNOT。
如果mode为PROP_MAY,则当存在数据从数据点集合DPSS流向数据点集合DPSD时,存在安全隐患。例如,在Android中,应用程序可以使用Dexclassloader动态加载一些应用程序未包含的代码,但是,如果代码来自于不受保护的位置,则存在被篡改的风险,即存在安全隐患。这种情况的安全规约可以借助数据传播规则表述如下,其中ExternalSource为不受保护的数据源:
DPS dps = Arg(“dalvik.system.DexClassLoader”, 2) // 定义Dexclassloader的第二个参数为数据点;
Detect Rule p = Propagation(ExternalSourceChannel, dps, PROP_MAY) //定义数据流方向。
如果mode为PROP_MAYNOT,则如果不存在数据从数据点集合DPS流向数据点集合DPSD时,存在安全隐患。
参数赋值规则。本安全规约模型中,采用以下语法描述不正确的调用参数值:
Rule∷Assignment(DPS,ViolationPattern)
与另外两种规则不同,参数赋值规则只针对单一的数据点集合,用来对函数的参数加以限制。ViolationPattern 表示对参数施加的限制,如数值的范围、字符串应当匹配的正则表达式等,有些规则需要参数不能是常量,可以用关键字CONST来表示。例如,应用程序加密时是不推荐采用不安全的ECB模式的。这种安全规约可以表述为如下:
DPS dps = Arg(“javax.crypto.Cipher.getInstance”, 1) // getInstance第一个参数表示加密模式,定义为本规约的数据点;
Detect Rule r = Assignment(dps, Pattern(“*ECB*”)) // 对数据点加上限制,包含ECB字段的模式为非安全模式。
3、安全规约的组合与绑定
上文介绍了本发明使用的3种基本安全规约类型。但是,有时仅通过一项基本安全规约是不足以完整的描述代码库安全需求的。例如,对于将隐私数据写入存放在外部存储的文件上这个危险行为,因为同时存在两条数据流(第一条是调用write方法的FileOutput对象打开了一个外部存储上的文件;第二条是write方法的第一个参数接收的是敏感数据),所以很难采用单一基本安全规约进行描述。因此,本发明提供了绑定(Binds)操作来对多个基本安全规约进行组合。当绑定的数据点或执行点同时违反其安全规约时,相关代码才能被认为是不安全的。
基本安全规约类型的组合与绑定主要包含以下几种情况:1.执行点集合与执行点集合绑定,主要适用于某一执行点集合需要同时满足两条或以上的时序规则;2.执行点集合与数据点集合绑定,主要适用于某一执行点集合应满足时序规则,而对应该执行点集合的某个数据点集合需要满足数据传播规则或者参数赋值规则;3.数据点集合与数据点集合绑定,主要适用于某一数据点集合需要满足数据传播规则或参数赋值规则的中的两个或以上。
例如,为了阻止应用软件读取全局可写的数据库,首先定义两个基本安全规约:规约r1描述了openOrCreateDatabase的第三个参数为2(MODE_WORLD_WRITABLE)或3(MODE_WORLD_READABLE|MODE_WORLD_WRITABLE),规约r2描述了数据库的内容被应用所读取。这两个基本规约之间是存在数据依赖性的,因为只有当r1中读取的数据库对象被传递到r2的查询接口中时,应用软件才存在安全漏洞。因此,需要将数据点集合(dps1与dps2)绑定,以表示两个基本属性共享同样的数据点。
二、设计静态程序分析器(TipSticker分析器)
静态程序分析器不需要实际执行程序,通过对代码的自动扫描找到匹配某种规则模式的代码从而发现程序中隐含的问题。静态程序分析可以直接定位出有问题的代码片段,是一种常用的程序分析手段,本发明的静态程序分析器包含以下几个部分:
1. 安全规约解析器
用于解析安全规约,即将规格化表述的安全规约解析为静态程序分析器可以理解的静态代码片段及其匹配模式。
因为安全规约以规则语言的形式进行描述,所以,静态程序分析器可以先利用安全规约解析器提取出安全规约的语义,并以此作为程序代码匹配的规则模式。
安全规约具有多种类型,但每一种类型都由上述的安全规约基本元素构成。因此,本发明通过将安全规约转化为其对应的基本元素元组的形式对其进行解释。因为每一种基本规约都由两部分构成,第一部分为程序执行点集合或数据点集合,而第二部分为对应的限制(时序规则和数据传播规则为mode,参数赋值规则为ViolationPattern),因此,在解析安全规约时,本发明首先在应用程序中确认执行点集合或数据点集合,若其存在,则与规约限制一起保存,以备静态程序分析阶段进行进一步匹配检查。
由于本发明允许多个基本安全规约通过绑定组合在一起。因此,安全规约解析器还会在每个分析阶段结束后记录被多个安全规约共享的执行点集合或数据点集合信息,以备在后续分析中对静态分析的搜索范围做出限制,进而进一步减少静态分析的分析开销。
2. 安全规约分析器
安全规约分析器,用于分析安全规约。静态程序分析为了保证代码覆盖率会将大量的无关代码加入到扫描的代码序列中,相对于整个静态程序分析器加载应用程序所有代码的速度,安全规约分析器的分析算法的时间开销占据了最大的比重。为了削减分析算法对无关代码的扫描所带来的不必要时间开销,安全规约分析器直接读取安全规约解析器记录的各元组信息,直接从执行点集合或数据点集合对应的指令开始执行,并在扫描到终止点集合的指令时立即停止。
本发明对安全规约的语法逻辑中的3种基本安全规约采用不同的静态分析方法。对于时序规则,本发明通过在程序控制流图上进行代码可达性分析判断代码时序是否满足规则约束;对于数据传播规则,本发明通过静态污点分析,利用污点分析反应的程序数据流特征进行规则验证;对于参数赋值规则,本发明通过对应用程序进行常量传播分析验证应用的函数参数赋值是否满足参数赋值规则。在现有常量传播分析方法的基础上,本发明还进一步检查常量值是否与参数赋值规则中的值约束相匹配,并将匹配的结果进行传播。通过这一改动,本发明不仅可以检查参数值的常量赋值规则,还可以检查范围约束的参数赋值规则。
3. 分析算法调度器
安全规约分析器采用的三种静态分析方法之间相互独立,即静态分析方法的调度顺序不会影响到最后的检测结果。但是,因为不同的静态分析方法具有不一样的时间上和性能上的开销,为了加快分析的速度,本发明优化几种静态分析过程的运行顺序。
本发明采用时间最短策略进行分析算法调用顺序的分析,即运行时间较短的分析算法具有较高的优先级,具体如下。首先,若被检测的安全规约中包含参数赋值规则,则相关规则将首先被安全规约分析器所检查。随后,检查数据传播规则的静态分析过程。最后再检查时序规则的静态分析过程。在上述调度过程中,根据安全规约解析器记录的规约间组合绑定关系,若处在队列前部的某一规约检测结果为空,那么在队列后部与其组合在一起的规约都可以跳过,即缩短了队列长度,减小了静态分析搜索范围。
三、防御策略
为了消除应用软件由于违背代码库安全规约而带来的安全漏洞,本发明在程序编译阶段和程序审查阶段两个层次对应用程序进行扫描分析。
1、程序编译阶段
目前,编译器会检查正在编译的应用程序是否符合语法与语义规约,而软件设计模式可以帮助开发者避免常见的功能性错误。但是,在现有编译框架中,程序编译的过程并不包含软件实现的安全检查。本发明将静态程序分析器以安全检查器的形式嵌入到应用程序编译流水线中。通过在编译时进行安全检查,可以直接向开发人员报告出程序隐含的安全缺陷。
2、程序审查阶段
大量应用程序通过应用市场流向移动设备。通常,应用市场在推出某个应用之前会对其进行安全审查,以排除有缺陷或者包含恶意代码的应用。但是,目前应用市场的审查能力有限,还不能覆盖到对代码库安全规约的检测。因此,本发明将静态分析器直接扩充到现有的应用市场审查流程中,在应用程序流向用户之前构建起第二道防线。
本发明可有效防范程序中的安全性风险。
附图说明
图1为本发明总体框架图示。
图2为本发明防御策略图示。
具体实施方式
本发明设计并实现了上述可以用形式化的规则语言描述代码库安全规约并在应用中进行自动化验证的静态分析框架,本节对该框架的具体实施做一个详细的介绍。
1、安全规约模型
上文描述了本发明设计的安全规约模型。在该模型下,安全规约用规则语言的形式描述出来,代码库设计者可以将其直接打包进代码库中。该规则语言可以用代码库设计者和使用者都可以理解的方式描述出应用程序在使用代码库时所应当采取的行为。而且,作为一种规则语言,静态程序分析器也可以通过解析安全规约而理解其语义,使得静态程序分析器在应用程序编译阶段或者应用商城对应用程序的审查阶段就可以检测出由于未遵守安全规约而导致的安全漏洞问题。
2、静态程序分析器
基于代码库安全规约模型制定的软件安全规约,静态软件分析器通过对目标应用代码进行控制流与数据流分析,以发现应用程序对安全规约的违反情况。本发明在Soot静态分析框架的基础上构建安全规约检测系统。现有Soot分析框架同时支持Java字节码和Java源代码,因此,基于Soot的安全规约检测系统可以同时分析安卓APK文件和安卓应用源代码。
(1)安全规约解析器
安全规约解析器的目的在于将规格化表述的安全规约解析为静态程序分析器可以理解的静态代码片段及其匹配模式。因为本发明采用元组的形式对安全规约进行翻译,因此,安全规约解析器首先借组Soot调取应用程序所有可执行的有效代码,然后通过方法签名(signature)匹配找出所有程序执行点集合或数据点集合对应的指令集。因为控制类指令if语句和goto语句只对程序执行流方向加以控制,并不会实际调用方法,因此,查找出的指令集不应包含控制类指令。如果某一指令集为空,那么就直接将该规约对应的检测结果集合置为空集;如果非空,则以(指令集,该规约所需的分析算法)的元组形式记录下来,以供安全规约分析器调用。
由于本发明提供绑定(Binds)功能,因此,在读取到Binds(a,b)命令时,对a、b对应的数据点集合或执行点集合加以标记,并存放在全局数组bindsAry[]中。
(2)安全规约分析器
前文中描述了本发明支持的3种基本安全规约。在安全规约检测系统中,本发明对3种基本安全规约采用了不同的静态分析方法。
对于时序规则,本发明依次找出起始执行点可达的指令集,并在到达终止执行点时停止。首先,分析算法以每一个起始执行点为起点开始,找出其下一条可达指令集nextlist。因为存在控制语句,以及遇到一条方法调用语句或者return语句时,程序的执行方向会变为两个,因此nextlist可能包含多条指令。然后再以nextlist中的每一条指令为起点,再次查找下一条可达指令。依次类推,可以得到一条指令可达树。该树的根节点为起始执行点,而叶节点为终止执行点。从根节点到叶节点的所有节点组成一条程序可达路径。如果该时序规则的mode为Pass_Through,那么如果某条路径上出现了某个经过执行点,该路径即为有效路径,存入当前规则的检测结果里;如果该时序规则的mode为Pass_Skip,只有某条路径上没有出现任何经过执行点,该路径才为有效路径。
对于数据传播规则,本发明找出所有可以被起始数据点污染(taint)到的数据点集。首先,分析算法以每一个起始数据点为起点开始,找出其可以污染的下一个数据点集nextlist。因为变量被声明后可以在多处被调用,因此nextlist也可能包含多个数据点。然后再以nextlist中的每一个数据点为起点,再次查找下一个数据点。以此类推,最后构建出数据传播树。在该树中,如果某个节点为终止节点,那么从根节点到该节点就构成了一条数据传播路径。
对于参数赋值规则,本发明找出所有满足限制条件的数据点集合。因为,函数的某个参数接收的可以是一个变量,因此,为了确定该变量的具体值,本发明首先对其做逆向的数据流分析,找出该变量所有的定义点,以此表示该变量的所有可能取值。
(3)分析算法调度器
本发明采用时间最短策略进行分析算法调用顺序的分析,具体调度算法如下:
第一步,本发明使用队列ruleQuene按照参数赋值规则、数据传播规则以及时序规则的顺序依次对安全规约进行排序。
第二步,若队列ruleQuene为空,则结束。
第三步,将队首规则推(Pop)出来,记为currentRule并调用相应分析算法进行分析,得到分析结果集合currentResult。
第四步,若currentResult不为空集,将currentResult存入allResults,并将currentResult重置为空集,回到第二步。
第五步,将队列中与currentRule存在组合绑定关系的规则剔除。
第六步,将allResults中与currentRule存在组合绑定关系的规则的结果剔除,回到第二步。
3、防御策略
本发明的具体防御措施如下:
应用软件编译环节:本发明可以被作为相应的安全检查器引入到编译流水线中,如附图 2所示。通过在编译时进行安全检查,可以帮助代码库设计人员将代码库安全使用规约的描述打包进代码库字节码中,这样对安全规约的描述就可以被自然的绑定到代码库中进行分发。通过这种方法,本发明可以自然地避免安全规约的碎片化现象。随后,编译器可以通过从代码库打包文件中提取安全使用规约,并将其输入安全使用检查器。
应用市场审查机制:由于多数的安卓用户都通过应用市场浏览和下载应用,因此扩展应用市场审查机制并加入对漏洞的检测是一种有效的防范方法。在扩展应用市场审查机制时,首先,应用市场需要从代码库设计人员处收集代码库安全规约。由于安卓应用市场数量众多,由代码库设计人员直接将安全规约推送到所有安卓市场是不现实的。因此,本发明需要构建一个集中式的安卓规约收集服务,由该收集服务收集代码库安全规约,并通过提供统一的访问接口处理来自不同应用市场的安全规约推送请求。

Claims (3)

1.一种安卓应用中基于代码库安全规约的应用程序漏洞检测分析方法,其特征在于建立以规则语言表述的安全规约模型、静态程序分析器以及安卓应用防御策略;其具体步骤包括:建立安全规约模型,即用形式化的规则语言描述代码库安全规约;设计基于安全规约模型的用于进行自动化验证的静态程序分析器;将该静态程序分析器用于应用程序编译和应用市场对应用程序审查两个阶段,进行安全漏洞检测,以防范程序中的安全性风险;
所述建立安全规约模型的过程如下:
(1)定义安全规约的基本元素
构成安全规约的基本元素为:执行点、数据点;每一条安全规约都包含多个执行点或数据点:
执行点,表示某一个方法的调用点;对于在应用程序中存在的大量的方法调用,安全规约使用每个方法的签名将其表述为一个执行点;另外,使用两个特殊的虚拟执行点ProgramEntry 和 ProgramExit 来表示整个应用程序的入口和出口;对于需要表示满足某个条件的执行点的全体,采用执行点集合语法;
数据点,表示一次方法调用的参数或返回值;由于安全规约以方法为粒度出现,因此用户只可以将方法调用的参数或返回值指定为程序数据点;类似于执行点集合,将数据点集合DPS表示为所有同类数据点的集合;
(2)确定安全规约的语法逻辑
使用上述的基本元素,通过规则逻辑组合出需要实现的各种安全规约,具体如下:
时序规则,时序规则限制了指令之间的时序关系;使用四元组的方法来表示时序规则,语法是:
Rule∷Temporal(EPSS,EPS1,EPSE,mode)
其中, EPSS,EPS1,EPSE分别为时序规则中的起始执行点集,经过执行点集,汇集执行点集,mode 取 PROP_SKIP 或 PROP_PASS_THROUGH;若mode取PROP_PASS_THROUGH,则表示如果在从 EPSS到 EPSE的任一条执行路径上出现了EPS1的执行点,则存在安全隐患;如果mode 为 PROP_SKIP,则表示如果在从EPSS到EPSE的每一条执行路径上都没有 EPS1的执行点,则存在安全隐患;
数据传播规则,用来描述包含敏感信息的数据流传播,其语法是:
Rule∷Propagation(DPSS,DPSD,mode)
其中,数据点集合DPSS和数据点集合DPSD分别表示数据传播的源点集合与汇点集合,mode取PROP_MAY或PROP_MAYNOT;
若mode为PROP_MAY,则当存在数据从数据点集合DPSS流向数据点集合DPSD时,存在安全隐患;若mode为PROP_MAYNOT,则当不存在数据从数据点集合DPSS流向数据点集合DPSD时,存在安全隐患;
参数赋值规则,针对单一的数据点集合,用于对函数的参数加以限制,其语法是:
Rule∷Assignment(DPS,ViolationPattern)
其中,ViolationPattern 表示对参数施加的限制,这些限制包括数值的范围、字符串应当匹配的正则表达式,有些规则需要参数不能是常量,用关键字CONST来表示;
(3)安全规约的组合与绑定
安全规约类型的组合与绑定主要包含以下几种情况:
执行点集合与执行点集合绑定,主要适用于某一执行点集合需要同时满足两条或以上的时序规则;
执行点集合与数据点集合绑定,主要适用于某一执行点集合应满足时序规则,而对应该执行点集合的某个数据点集合需要满足数据传播规则或者参数赋值规则;
数据点集合与数据点集合绑定,主要适用于某一数据点集合需要满足数据传播规则或参数赋值规则中的两个或以上。
2.根据权利要求1所述的检测分析方法,其特征在于所述静态程序分析器的设计过程如下:
静态程序分析器包含安全规约解析器、安全规约分析器和分析算法调度器三个部分,具体如下:
(1)安全规约解析器
用于解析安全规约,即将规格化表述的安全规约解析为静态程序分析器可以理解的静态代码片段及其匹配模式;安全规约解析器将安全规约解释为(数据点或集合点,限制或约束)的元组,将代码片段及对其作出的限制或约束一起保存下来,以备静态程序分析阶段进行进一步匹配检查;安全规约解析器还记录被多个安全规约共享的执行点集合或数据点集合信息,以对静态分析的搜索范围做出限制,进一步减少静态分析的分析开销;
(2)安全规约分析器
安全规约分析器,用于分析安全规约;安全规约分析器直接读取安全规约解析器记录的各元组信息,从执行点集合或数据点集合对应的指令开始执行,并在扫描到终止点集合的指令时立即停止;
安全规约分析器对安全规约的语法逻辑中的3种基本安全规约采用不同的静态分析方法:对于时序规则,通过在程序控制流图上进行代码可达性分析判断代码时序是否满足规则约束;对于数据传播规则,通过静态污点分析,利用污点分析反应的程序数据流特征进行规则验证;对于参数赋值规则,通过对应用程序进行常量传播分析验证应用的函数参数赋值是否满足参数赋值规则;
(3)分析算法调度器
分析算法调度器采用时间最短策略进行分析算法调用顺序的分析,即运行时间较短的分析算法具有较高的优先级,具体如下:首先,若被检测的安全规约中包含参数赋值规则,则相关规则将首先被安全规约分析器所检查;随后,检查数据传播规则的静态分析过程;最后再检查时序规则的静态分析过程;
在上述调度过程中,根据安全规约解析器记录的规约间组合绑定关系,若处在队列前部的某一规约检测结果为空,那么在队列后部与其组合在一起的规约都可以跳过,即缩短了队列长度,减小了静态分析搜索范围。
3.根据权利要求1所述的检测分析方法,其特征在于所述安卓应用的防御策略具体如下:
将该静态程序分析器用于应用程序编译和应用市场对应用程序审查两个阶段进行安全漏洞检测,其做法为:在应用程序编译阶段,将静态程序分析器以安全检查器的形式嵌入到应用程序编译流水线中,通过在编译时进行安全检查,直接向开发人员报告出程序隐含的安全缺陷;在应用程序审查阶段,静态分析器直接扩充到现有的应用市场审查流程中,在应用程序流向用户之前构建起第二道防线。
CN201510403224.1A 2015-07-11 2015-07-11 一种安卓应用中基于代码库安全规约的应用程序漏洞检测分析方法 Active CN105022958B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510403224.1A CN105022958B (zh) 2015-07-11 2015-07-11 一种安卓应用中基于代码库安全规约的应用程序漏洞检测分析方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510403224.1A CN105022958B (zh) 2015-07-11 2015-07-11 一种安卓应用中基于代码库安全规约的应用程序漏洞检测分析方法

Publications (2)

Publication Number Publication Date
CN105022958A CN105022958A (zh) 2015-11-04
CN105022958B true CN105022958B (zh) 2018-01-12

Family

ID=54412920

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510403224.1A Active CN105022958B (zh) 2015-07-11 2015-07-11 一种安卓应用中基于代码库安全规约的应用程序漏洞检测分析方法

Country Status (1)

Country Link
CN (1) CN105022958B (zh)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10102368B2 (en) * 2016-01-20 2018-10-16 Qualcomm Incorporated Information flow tracking using incremental profiling
CN106940773B (zh) * 2017-01-10 2019-10-25 西安电子科技大学 基于静态污点数据分析的隐私泄漏漏洞检测确认方法
CN106970819B (zh) * 2017-03-28 2020-07-10 清华大学 一种基于prdl规则描述语言的c程序代码规范检查装置
CN108171073B (zh) * 2017-12-06 2021-08-20 复旦大学 一种基于代码层语义解析驱动的隐私数据识别方法
CN109299610B (zh) * 2018-10-02 2021-03-30 复旦大学 安卓系统中不安全敏感输入验证识别方法
CN111259400B (zh) * 2018-11-30 2023-05-09 阿里巴巴集团控股有限公司 一种漏洞检测方法、装置及系统
CN110890978B (zh) * 2019-11-06 2021-06-22 南京大学 基于模型重用的带隐私保护的跨区域通信质量预测方法
CN111382067A (zh) * 2020-02-27 2020-07-07 中国科学院信息工程研究所 一种模糊测试中高质量种子生成方法及系统
CN112417451B (zh) * 2020-11-20 2022-04-12 复旦大学 适配智能芯片分级架构的基于深度学习的恶意软件检测方法
CN116028057A (zh) 2021-10-27 2023-04-28 北京字节跳动网络技术有限公司 代码管理的方法和装置

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101017458A (zh) * 2007-03-02 2007-08-15 北京邮电大学 基于源代码静态分析的软件安全代码分析器及其检测方法
CN101482847A (zh) * 2009-01-19 2009-07-15 北京邮电大学 一种基于安全漏洞缺陷模式的检测方法
CN102411690A (zh) * 2011-12-31 2012-04-11 中国信息安全测评中心 一种Android平台下应用软件的安全漏洞挖掘方法和装置
CN102945203A (zh) * 2012-10-26 2013-02-27 深圳出入境检验检疫局信息中心 一种用于移动互联网应用的代码安全测试方法
CN103793652A (zh) * 2012-10-29 2014-05-14 广东电网公司信息中心 一种基于静态分析的应用系统代码安全扫描装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101017458A (zh) * 2007-03-02 2007-08-15 北京邮电大学 基于源代码静态分析的软件安全代码分析器及其检测方法
CN101482847A (zh) * 2009-01-19 2009-07-15 北京邮电大学 一种基于安全漏洞缺陷模式的检测方法
CN102411690A (zh) * 2011-12-31 2012-04-11 中国信息安全测评中心 一种Android平台下应用软件的安全漏洞挖掘方法和装置
CN102945203A (zh) * 2012-10-26 2013-02-27 深圳出入境检验检疫局信息中心 一种用于移动互联网应用的代码安全测试方法
CN103793652A (zh) * 2012-10-29 2014-05-14 广东电网公司信息中心 一种基于静态分析的应用系统代码安全扫描装置

Also Published As

Publication number Publication date
CN105022958A (zh) 2015-11-04

Similar Documents

Publication Publication Date Title
CN105022958B (zh) 一种安卓应用中基于代码库安全规约的应用程序漏洞检测分析方法
US11899818B2 (en) System and method for code-based protection of sensitive data
Feist et al. Slither: a static analysis framework for smart contracts
US9715593B2 (en) Software vulnerabilities detection system and methods
CN100461132C (zh) 基于源代码静态分析的软件安全代码分析器及其检测方法
Walden et al. Predicting vulnerable components: Software metrics vs text mining
Chess et al. Static analysis for security
CN103577324B (zh) 移动应用中隐私信息泄露的静态检测方法
CN106203113A (zh) 安卓应用文件的隐私泄露监控方法
Albert et al. Running on fumes: Preventing out-of-gas vulnerabilities in Ethereum smart contracts using static resource analysis
US8635602B2 (en) Verification of information-flow downgraders
CN106845171A (zh) 一种Android应用程序代码保护机制鉴别方法
Huang et al. Detecting sensitive data disclosure via bi-directional text correlation analysis
Hedin et al. Value-sensitive hybrid information flow control for a javascript-like language
CN105989294B (zh) 安卓安装包检测方法及装置
Praitheeshan et al. Security evaluation of smart contract-based on-chain ethereum wallets
CN103810096A (zh) 混合程序分析方法和系统
Murawski et al. Game semantic analysis of equivalence in IMJ
Kundu et al. A UML model-based approach to detect infeasible paths
CN106295336A (zh) 恶意程序检测方法及装置
Lu et al. Model-based static source code analysis of java programs with applications to android security
Cassel et al. Nodemedic: End-to-end analysis of node. js vulnerabilities with provenance graphs
Cao et al. PHP vulnerability detection based on taint analysis
CN115310087A (zh) 一种基于抽象语法树的网站后门检测方法和系统
Shyamasundar A Framework of Runtime Monitoring for Correct Execution of Smart Contracts

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant