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

文档序号:9304763阅读:428来源:国知局
一种安卓应用中基于代码库安全规约的应用程序漏洞检测分析方法
【技术领域】
[0001]本发明属于程序信息安全监测技术领域,具体涉及安卓应用中安全漏洞检测分析方法。
【背景技术】
[0002]安全规约是由代码库设计人员提供的代码库安全使用建议,例如Google为安卓系统内置函数库提供了详细的安全提示列表。在这些提示中,代码库设计人员会告知程序员如何使用代码库是正确的,而如何使用代码库会带来软件安全缺陷。在形式上,代码库安全提示类似于其他代码库使用指南:它们没有统一的格式,并且大多数代码库安全提示都由代码库设计人员通过其母语进行书写。因此,在实际使用中,开发者可能由于语言问题而误解安全规约的语义。
[0003]在众多移动平台中,由Google设计的安卓智能手机操作系统以其出众的开放性受到广大用户和手机厂商的青睐。安卓应用程序采用应用商城模式进行发布,开发者将开发好的应用程序提交给应用商城,用户通过应用商城获取经商城验证后的第三方应用。通过与应用商城模式相结合,安卓目前拥有海量的应用程序。
[0004]但是许多安卓应用,包括一些比较流行的应用,都包含大量的安全漏洞,而产生这些安全漏洞的一个重要原因就是开发者在使用代码库时未遵守相应的安全规约。许多公司和组织针对其代码库的正确使用方法提出了很多安全规约,但是,这些安全规约本身的质量以及在实际开发中的表现都还有很多问题,例如,安全规约缺乏强制力、安全规约的自然语言属性带来的语义误解问题、安全规约比较分散导致难以统一管理、以及误导性代码片段带来的影响等等。
[0005]因为开发者通常不会有意去违反代码库安全规约,所以在这种情况下,应用程序中可能存在的安全漏洞也不可能被开发者自发修复。因此,如何检测出由于未遵守代码库安全规约而引起的应用程序安全漏洞就成了一个亟待解决的问题。

【发明内容】

[0006]本发明的目的在于提供一种安卓应用中能够方便地检测分析由于未遵守代码库安全规约而引起的应用程序安全漏洞的方法。
[0007]本发明提供的应用程序安全漏洞的检测分析方法,包括:建立安全规约模型,即用形式化的规则语言描述代码库安全规约;基于安全规约模型,设计静态程序分析器(TipSticker分析器),以用于进行自动化验证;将该静态程序分析器分别用于应用程序编译阶段和应用市场审查应用程序阶段,以进行安全漏洞检测,防范程序中的安全性风险。
[0008]本发明主要针对于以下几个问题:
(I)代码库设计者期望设计并实现安全的代码库,并以开发者能理解的方式给出安全规约,使得开发者知晓怎样才能安全的使用其开放接口。
[0009](2)设计和编写应用软件时,软件开发人员可能出错。开发人员可能会误解代码库安全规约,也可能在不知晓的情况下违反安全规约,但是他们希望有工具能帮助他们开发安全的应用软件。
[0010](3)应用商城在发布应用之前希望对该应用进行安全漏洞检测,从而保证商城中的应用质量。
[0011]本发明提供的应用程序安全漏洞的检测分析方法,其中,建立的安全规约模型和设计的静态程序分析器,如附图1所示;将静态程序分析器用于应用程序编译和应用市场对应用程序审查两个阶段进行安全漏洞检测,如图2所示。本发明的具体步骤为:
一、建立安全规约模型
通常,安全规约由代码库设计者以自然语言形式编写,由于代码库使用者可能与设计者存在着不同的语言习惯,因此,安全规约本身就存在着语义误解问题。因而,本发明提出采用统一的安全规约模型规范代码库的安全规约。
[0012]安全规约描述了代码库接口的正确和安全的使用方法,因此它们通常以方法为粒度出现。在通常情况下,安全规约会受描述方法调用间的时间顺序或数据依赖限制。本发明深入探究了安全规约在大多数应用程序中不被遵守的情形,主要如下:
1.不安全接口调用顺序,不安全接口调用顺序描述了以不正确的顺序调用敏感代码库接口的情形。例如,一个应用在调用了一个敏感方法前未调用用于保护该敏感方法的另一代码库接口。
[0013]2.不安全的数据传播,不安全的数据传播描述了不正确的数据流。某些代码库接口会由于安全原因对其参数的来源加以限制。例如,SQLCipher用于对数据库进行加密。在SQLCipher得安全提示中,代码库设计者强调将密钥存储在本地是不安全的,因此开发者需要将密钥置于应用程序外部而不是嵌入在应用程序中,并在程序运行时动态载入。因此,若没有外部数据被传播到SQLCipher的密钥参数中,则应用程序违反了相应的安全规约。
[0014]3.不安全参数值,不安全参数值描述了给代码库接口传递的不安全参数。例如,将一个包含ECB的字符串传递到Cipher, getlnstance O的第2个参数中时会导致应用程序使用弱密钥,该行为即违反了代码库的安全参数规约。
[0015]基于上述代码库不安全使用情形,本发明设计出一套规格化的安全规约语言。本发明的安全规约模型主要包含以下几个部分:
1、安全规约的基本元素
在定义安全规约之前,本发明首先定义用于构成安全规约的基本元素:执行点,数据点。每一条安全规约都包含了多个执行点或数据点。
[0016](I)执行点(Execut1n Point, EP)。执行点表示某一个方法的调用点。由于在Android应用中,方法的签名(signature)和方法之间存在--对应的关系,因此,对于在应用程序中存在的大量的方法调用,安全规约可以使用每个方法的签名(signature)将其表述为一个执行点。例如,可以使用EP( “android, content.Context.getSharedPreferences”)表不对 getSharedPreferences 这个方法的调用点。因为Android应用本身的特性,应用程序并没有一个入口方法或出口方法作为整个程序的起始执行点或终止执行点,因此,本发明使用两个特殊的虚拟执行点ProgramEntry和ProgramExit来表示整个应用程序的入口和出口。
[0017]有时需要表示满足某个条件的执行点的全体,这时可采用执行点集合057?)语法。如 EPS( “android, content.Context.getSharedPreferences”)表不所有对getSharedPreferences 方法的调用点。
[0018](2)数据点(Data Point, DP)。安全规约中的数据点表示了一次方法调用的参数或返回值。由于安全规约以方法为粒度出现,因此用户只可以将方法调用的参数或返回值指定为程序数据点。类似于执行点集合(EPS),安全规约制定者也可以通过数据点集合(DPS)表示所有同类数据点的集合。
[0019]2、安全规约的语法逻辑
使用上述的基本元素,本发明可以通过规则逻辑组合出需要实现的各种安全规约。
[0020]时序规则。时序规则限制了指令之间的时序关系。在本系统中使用四元组的方法来表示时序规则,语法是:
Rule:: Temporal (EPSs, EPS1, EPSe, mode)
其中EPSs,EPS1, EPSe分别为时序规则中的起始执行点集,经过执行点集,和汇集执行点集,mode 可以取 PR0P_SKIP 或 PR0P_PASS_THR0UGH。如果 mode 为 PR0P_PASS_THR0UGH,则表示如果在从
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1