首页> 中国专利> Android应用程序密码学误用检测方法

Android应用程序密码学误用检测方法

摘要

一种Android应用程序密码学误用检测方法,对待检测应用程序进行反编译并生成代码库;然后在代码库中查找与密码学算法相关的代码段;再将和密码算法相关的代码段从原程序中剥离出来,得到完整的密码算法实现过程代码;最后对第三步得到的每一个密码学算法实现代码段进行数据抽象和过程建模处理,并通过模式匹配和事先指定的密码算法实现准则进行逐条比较,将不符合实现准则的条目输出并汇总形成安全分析结果。本发明能够通过对Android应用程序的静态分析,自动化的判断应用程序中所使用的密码算法种类,自动提取密码算法相关代码片段,对代码段进行安全分析,发现密码算法实现过程中存在问题的环节,最终得到应用程序密码学误用安全分析结果。

著录项

  • 公开/公告号CN104484175A

    专利类型发明专利

  • 公开/公告日2015-04-01

    原文格式PDF

  • 申请/专利号CN201410781215.1

  • 申请日2014-12-16

  • 分类号G06F9/44(20060101);G06F21/60(20060101);

  • 代理机构31201 上海交达专利事务所;

  • 代理人王毓理;王锡麟

  • 地址 200240 上海市闵行区东川路800号

  • 入库时间 2023-12-17 04:27:34

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2017-11-28

    授权

    授权

  • 2015-04-29

    实质审查的生效 IPC(主分类):G06F9/44 申请日:20141216

    实质审查的生效

  • 2015-04-01

    公开

    公开

说明书

技术领域

本发明涉及的是一种移动智能终端领域的应用程序安全分析技术,涉及一种Android应 用程序中是否存在密码学误用漏洞的检测方案。

背景技术

随着移动互联网的发展,移动智能终端在人们的日常生活中正扮演着越来越重要的角色, 随之而来的就是移动智能终端存储、处理越来越多的和用户隐私或利益紧密相关的重要数据。 在处理这些重要的数据时,为了保证这些数据的安全性,应用程序会在存储、发送这些数据前, 对数据进行加密处理。

应用程序中对数据进行加解密的一般都是成熟的密码学算法。作为成熟的密码学算法, 这些算法都经过世界上众多密码学研究人员的分析检验,本身并不存在缺陷。但是由于应用程 序开发人员对密码学知识的缺失,在使用代码实现这些密码学算法的时候,往往不能正确的使 用这些密码学算法,这些在使用密码学算法时出现的代码上的不规范将会导致原本在设计上安 全的数据加密过程无法达到预期的安全效果。

近年来,安全研究人员发现这样的密码学误用问题在Android平台的应用程序层出不穷, 但是业界对这类问题还不够重视,也没有有效的检测方法。

经过对现有技术的检索发现,中国专利文献号CN101393521公开(公告)日2009.03.25, 公开了一种软件分析和信息安全技术领域的Windows应用程序内部固化数据的提取系统,可 执行文件类型信息识别模块对可执行文件的格式、开发语言种类、保护类型进行识别;可执行 文件反保护模块负责对受保护代码加壳保护的可执行文件进行反保护;可执行文件代码分析模 块对可执行文件进行反汇编、反编译,得到汇编和高级语言代码,并给出结构和逻辑信息;密 码学分析模块负责在可执行文件中有加密存储的固定的数据信息时,对可执行文件中采用的密 码学算法进行识别;可执行文件调试与信息提取模块在其运行的中间过程中查看运行期间程序 内部状态,从而提取信息。该技术能有效地提取和分析固定在程序中的数据信息,给出其产生 方法和原始信息。但该技术的缺陷和不足在于:第一,该程序分析技术针对的平台是Windows, 无法处理Android平台的应用程序,第二,该技术的主要功能是一种提取Windows应用程序 内部信息的技术,这里所说的信息包括应用程序格式、开发语言、保护类型、所使用的密码算 法等。

综上所述,目前继续一种基于Android应用程序的密码学误用检测方法以填补该方面的 空白。

发明内容

本发明针对现有技术存在的上述不足,提出一种Android应用程序密码学误用检测方法, 能够通过对Android应用程序的静态分析,自动化的判断应用程序中所使用的密码算法种类, 自动提取密码算法相关代码片段,对代码段进行安全分析,发现密码算法实现过程中存在问题 的环节,最终得到应用程序密码学误用安全分析结果。

本发明是通过以下技术方案实现的,本发明包括以下步骤:

第一步、对待检测应用程序进行反编译并生成代码库,具体步骤包括:

1.1使用现有的Android应用程序逆向分析技术对待检测应用程序进行逆向处理,将已 经编译完成的Android应用程序apk文件中的程序代码逻辑还原为smali代码或java代码。

1.2将逆向处理后的待检测应用程序所有类的smali代码或java代码进行汇总,形成代 码库。

第二步、在代码库中查找与密码学算法相关的代码段,具体步骤包括:

2.1对待检测应用程序的代码库进行密码学算法特征扫描,在代码库中定位到密码学算 法相关的代码。

所述的密码学算法特征包括但不限于:java中密码学库的关键API,常见密码学算法特 征字符串。

所述的密码学算法相关代码包括但不限于:密码学API代码、密钥初始化代码、密码学 算法初始化代码、起始向量初始化代码以及密码学算法中所有使用到参数的初始化、赋值代码。

2.2将定位到的代码标记为和密码学算法相关的代码,对整个代码库完成扫描后,当获 得至少一个和密码学算法相关的代码则执行第三步。

第三步、将和密码算法相关的代码段从原程序中剥离出来,得到完整的密码算法实现过 程代码,具体步骤包括:

3.1以第二步中定位到的和密码学算法操作相关的代码为目标,使用程序切片技术,将 整个代码库中和定位到的密码学算法操作相关的代码全部剥离出来,形成一段完整的密码学算 法实现代码段。

所述的程序切片技术是指:选取至少一个变量作为切片的源头,将整个程序中所有和源 头变量相关的指令全部提取出来的过程,其中相关指令包括但不限于:变量初始化、变量赋值、 计算等。

所述的剥离是指:将目标代码从整个程序的代码中分离出来的过程。

3.2对整个代码库中每一个和密码学算法相关的代码段进行3.1步,直到将整个代码库 中所有的密码算法实现代码段全部剥离,形成若干个完整的密码学算法实现代码段。

第四步、对第三步得到的每一个密码学算法实现代码段进行数据抽象和过程建模处理, 并通过模式匹配和事先指定的密码算法实现准则进行逐条比较,将不符合实现准则的条目输出 并汇总形成安全分析结果,具体步骤包括:

4.1使用程序分析技术识别代码段所使用的密码算法、分组模式。这里可以使用关键字 匹配技术。之后进行第一次的密码学误用存在性判断,针对识别出的密码算法和分组模式,比 对密码学误用规则库,判断是否存在密码学误用的情况,作为结果汇总到最终的安全分析结果。

4.2在获得代码段所使用的密码算法、分组模式的基础上,根据不同密码算法和分组模 式的特点,定位密码算法实现过程中的关键数据。这里密码算法和分组模式的特点包括但不限 于:分组模式是否需要使用起始向量IV,密码算法所使用的密钥类型等。这里的关键数据包括 但不限于:密钥、分组模式、初始向量、明文、计算轮数等。

4.3对定位到的关键数据使用程序切片技术,获得与该数据的初始化、复制过程相关的 代码段。这里进行第二次的密码学误用存在性判断,通过对代码段的分析,判断该关键数据相 关的代码段是否存在密码误用的情况,作为结果汇总到最终的安全分析结果。

4.4汇总第一次和第二次密码学误用存在性判断的结果,生成待检测应用程序的密码学 误用安全分析结果,安全分析结果中包括待检测应用程序中存在哪些密码学算法片段,每一个 密码学算法片段中是否存在密码学误用的情况,并列举所有的符合密码学误用规则库的情况。

所述的密码学误用规则库(符合规则库中规则的行为视为存在密码学误用)包括:

1.加密时分组模式为ECB模式

2.选择分组模式为CBC模式进行加密时,使用不随机的初始向量。

3.使用常量的加密密钥。

4.对于PBE,使用常数作为盐,即Salt,在密码学中,是指通过在密码任意固定位置插 入特定的字符串,让散列后的结果和使用原始密码的散列结果不相符,这种过程称之为“加盐”。

5.PBE加密中,使用少于1000次的迭代。

6.安全随机过程中使用静态的随机数种子。

所述的密码学误用规则库采用可扩展结构,可以对于新确认的属于密码学误用的情况, 使用规则库的描述方法将抽象成新的规则,经过审核后增加到密码学误用规则中。

技术效果

与现有技术相比,本发明在提取应用程序内部相关数据后,对这些数据进行有关的安全 分析,在完成识别应用程序内部使用的密码算法类型的数据定位和提取后,本发明会对密码算 法的具体实现过程进行安全分析,发现并指出其中存在安全隐患的环节,最后出具一份应用程 序的密码学误用安全分析结果。

附图说明

图1为本发明方法流程图。

具体实施方式

下面对本发明的实施例作详细说明,本实施例在以本发明技术方案为前提下进行实施, 给出了详细的实施方式和具体的操作过程,但本发明的保护范围不限于下述的实施例。

实施例1

如图1所示,本实施例包括以下步骤:

第一步、对待检测应用程序进行逆向分析,得到源代码,具体步骤包括:

1.1使用JEB对待检测应用程序进行逆向处理,将已经编译完成的Android应用程序apk 文件中的程序代码逆向还原为smali代码和java代码。

1.2经过JEB处理过的应用程序包含了smali代码和java代码,smali代码中包括了所有 类的代码,可以当成代码库使用,java代码被以类为单位分割成不同的文件。

第二步、在逆向出的smali代码中寻找和密码学算法相关的代码段,具体步骤包括:

2.1对待检测应用程序逆向出的smali代码进行静态扫描,寻找java密码学库必须要使 用的API:dofinal()函数,通过寻找该函数可以定位到一个密码学算法最终加密明文的步骤

第三步、将和密码算法相关的代码段从原程序中剥离出来,得到完整的密码算法实现过 程代码,具体步骤包括:

3.1以第二步中定位到的dofinal()函数为目标,使用程序切片技术,可以使用amandroid 或flowdroid等成熟的Android应用程序静态分析工具进行这一步操作,目的是将dofinal()函 数涉及到的相关变量的生成、赋值代码从代码库中剥离出来,此处涉及到的变量包括但不限于: 加密算法实例、明文变量、密钥变量、初始向量变量。最后获得和dofinal()相关的整个加密算 法实现代码段。

第四步、对每一个密码学算法实现代码段进行数据抽象、过程建模最后进行模式匹配, 和事先指定的密码算法实现准则进行逐条比较,输出不符合的条目,汇总形成最后的安全分析 结果,具体步骤包括:

4.1使用程序分析技术,识别代码段所使用的密码算法、分组模式,例如AES加密、DES 加密、CBC分组模式、ECB分组模式等。这里可以使用关键字匹配技术。之后进行第一次的密 码学误用存在性判断,针对识别出的密码算法和分组模式,比对密码学误用规则库,判断是否 存在密码学误用的情况,作为结果汇总到最终的安全分析结果。

4.2在获得代码段所使用的密码算法、分组模式的基础上,根据不同密码算法和分组模 式的特点,定位密码算法实现过程中的关键数据。这里密码算法和分组模式的特点包括但不限 于:分组模式是否需要使用起始向量IV,密码算法所使用的密钥类型等。这里的关键数据包括 但不限于:密钥,分组模式,初始向量,明文,计算轮数等。

4.3对定位到的关键数据使用程序切片技术,获得与该数据的初始化、复制过程相关的 代码段。这里进行第二次的密码学误用存在性判断,通过对代码段的分析,判断该关键数据相 关的代码段是否存在密码误用的情况,例如通过程序切片技术定位到密钥变量的初始化代码, 发现在初始化的时候使用了固定的密钥,或对起始向量进行切片分析,发现起始向量使用了一 个固定的随即种子,这些都符合我们在密码学误用规则库中指定的规则。将这些比对结果汇总 到最终的安全分析结果。

4.4汇总第一次和第二次密码学误用存在性判断的结果,生成待检测应用程序的密码学 误用安全分析结果,安全分析结果中包括待检测应用程序中存在哪些密码学算法片段;每一个 密码学算法片段的基本信息,比如使用的密码学算法、分组模式;每一个密码学算法片段中是 否存在密码学误用的情况,并列举所有和密码学误用规则库相匹配的情况。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号