Android应用程序密码学误用检测方法
【专利摘要】一种Android应用程序密码学误用检测方法,对待检测应用程序进行反编译并生成代码库;然后在代码库中查找与密码学算法相关的代码段;再将和密码算法相关的代码段从原程序中剥离出来,得到完整的密码算法实现过程代码;最后对第三步得到的每一个密码学算法实现代码段进行数据抽象和过程建模处理,并通过模式匹配和事先指定的密码算法实现准则进行逐条比较,将不符合实现准则的条目输出并汇总形成安全分析结果。本发明能够通过对Android应用程序的静态分析,自动化的判断应用程序中所使用的密码算法种类,自动提取密码算法相关代码片段,对代码段进行安全分析,发现密码算法实现过程中存在问题的环节,最终得到应用程序密码学误用安全分析结果。
【专利说明】Android应用程序密码学误用检测方法
【技术领域】
[0001]本发明涉及的是一种移动智能终端领域的应用程序安全分析技术,涉及一种Android应用程序中是否存在密码学误用漏洞的检测方案。
【背景技术】
[0002]随着移动互联网的发展,移动智能终端在人们的日常生活中正扮演着越来越重要的角色,随之而来的就是移动智能终端存储、处理越来越多的和用户隐私或利益紧密相关的重要数据。在处理这些重要的数据时,为了保证这些数据的安全性,应用程序会在存储、发送这些数据前,对数据进行加密处理。
[0003]应用程序中对数据进行加解密的一般都是成熟的密码学算法。作为成熟的密码学算法,这些算法都经过世界上众多密码学研宄人员的分析检验,本身并不存在缺陷。但是由于应用程序开发人员对密码学知识的缺失,在使用代码实现这些密码学算法的时候,往往不能正确的使用这些密码学算法,这些在使用密码学算法时出现的代码上的不规范将会导致原本在设计上安全的数据加密过程无法达到预期的安全效果。
[0004]近年来,安全研宄人员发现这样的密码学误用问题在Android平台的应用程序层出不穷,但是业界对这类问题还不够重视,也没有有效的检测方法。
[0005]经过对现有技术的检索发现,中国专利文献号CN101393521公开(公告)日2009.03.25,公开了一种软件分析和信息安全【技术领域】的Windows应用程序内部固化数据的提取系统,可执行文件类型信息识别模块对可执行文件的格式、开发语言种类、保护类型进行识别;可执行文件反保护模块负责对受保护代码加壳保护的可执行文件进行反保护;可执行文件代码分析模块对可执行文件进行反汇编、反编译,得到汇编和高级语言代码,并给出结构和逻辑信息;密码学分析模块负责在可执行文件中有加密存储的固定的数据信息时,对可执行文件中采用的密码学算法进行识别;可执行文件调试与信息提取模块在其运行的中间过程中查看运行期间程序内部状态,从而提取信息。该技术能有效地提取和分析固定在程序中的数据信息,给出其产生方法和原始信息。但该技术的缺陷和不足在于:第一,该程序分析技术针对的平台是Windows,无法处理Android平台的应用程序,第二,该技术的主要功能是一种提取Windows应用程序内部信息的技术,这里所说的信息包括应用程序格式、开发语言、保护类型、所使用的密码算法等。
[0006]综上所述,目前继续一种基于Android应用程序的密码学误用检测方法以填补该方面的空白。
【发明内容】
[0007]本发明针对现有技术存在的上述不足,提出一种Android应用程序密码学误用检测方法,能够通过对Android应用程序的静态分析,自动化的判断应用程序中所使用的密码算法种类,自动提取密码算法相关代码片段,对代码段进行安全分析,发现密码算法实现过程中存在问题的环节,最终得到应用程序密码学误用安全分析结果。
[0008]本发明是通过以下技术方案实现的,本发明包括以下步骤:
[0009]第一步、对待检测应用程序进行反编译并生成代码库,具体步骤包括:
[0010]1.1使用现有的Android应用程序逆向分析技术对待检测应用程序进行逆向处理,将已经编译完成的Android应用程序apk文件中的程序代码逻辑还原为smali代码或java代石马。
[0011]1.2将逆向处理后的待检测应用程序所有类的smali代码或java代码进行汇总,形成代码库。
[0012]第二步、在代码库中查找与密码学算法相关的代码段,具体步骤包括:
[0013]2.1对待检测应用程序的代码库进行密码学算法特征扫描,在代码库中定位到密码学算法相关的代码。
[0014]所述的密码学算法特征包括但不限于:java中密码学库的关键API,常见密码学算法特征字符串。
[0015]所述的密码学算法相关代码包括但不限于:密码学API代码、密钥初始化代码、密码学算法初始化代码、起始向量初始化代码以及密码学算法中所有使用到参数的初始化、赋值代码。
[0016]2.2将定位到的代码标记为和密码学算法相关的代码,对整个代码库完成扫描后,当获得至少一个和密码学算法相关的代码则执行第三步。
[0017]第三步、将和密码算法相关的代码段从原程序中剥离出来,得到完整的密码算法实现过程代码,具体步骤包括:
[0018]3.1以第二步中定位到的和密码学算法操作相关的代码为目标,使用程序切片技术,将整个代码库中和定位到的密码学算法操作相关的代码全部剥离出来,形成一段完整的密码学算法实现代码段。
[0019]所述的程序切片技术是指:选取至少一个变量作为切片的源头,将整个程序中所有和源头变量相关的指令全部提取出来的过程,其中相关指令包括但不限于:变量初始化、变量赋值、计算等。
[0020]所述的剥离是指:将目标代码从整个程序的代码中分离出来的过程。
[0021]3.2对整个代码库中每一个和密码学算法相关的代码段进行3.1步,直到将整个代码库中所有的密码算法实现代码段全部剥离,形成若干个完整的密码学算法实现代码段。
[0022]第四步、对第三步得到的每一个密码学算法实现代码段进行数据抽象和过程建模处理,并通过模式匹配和事先指定的密码算法实现准则进行逐条比较,将不符合实现准则的条目输出并汇总形成安全分析结果,具体步骤包括:
[0023]4.1使用程序分析技术识别代码段所使用的密码算法、分组模式。这里可以使用关键字匹配技术。之后进行第一次的密码学误用存在性判断,针对识别出的密码算法和分组模式,比对密码学误用规则库,判断是否存在密码学误用的情况,作为结果汇总到最终的安全分析结果。
[0024]4.2在获得代码段所使用的密码算法、分组模式的基础上,根据不同密码算法和分组模式的特点,定位密码算法实现过程中的关键数据。这里密码算法和分组模式的特点包括但不限于:分组模式是否需要使用起始向量IV,密码算法所使用的密钥类型等。这里的关键数据包括但不限于:密钥、分组模式、初始向量、明文、计算轮数等。
[0025]4.3对定位到的关键数据使用程序切片技术,获得与该数据的初始化、复制过程相关的代码段。这里进行第二次的密码学误用存在性判断,通过对代码段的分析,判断该关键数据相关的代码段是否存在密码误用的情况,作为结果汇总到最终的安全分析结果。
[0026]4.4汇总第一次和第二次密码学误用存在性判断的结果,生成待检测应用程序的密码学误用安全分析结果,安全分析结果中包括待检测应用程序中存在哪些密码学算法片段,每一个密码学算法片段中是否存在密码学误用的情况,并列举所有的符合密码学误用规则库的情况。
[0027]所述的密码学误用规则库(符合规则库中规则的行为视为存在密码学误用)包括:
[0028]1.加密时分组模式为ECB模式
[0029]2.选择分组模式为CBC模式进行加密时,使用不随机的初始向量。
[0030]3.使用常量的加密密钥。
[0031]4.对于PBE,使用常数作为盐,即Salt,在密码学中,是指通过在密码任意固定位置插入特定的字符串,让散列后的结果和使用原始密码的散列结果不相符,这种过程称之为“加盐”。
[0032]5.PBE加密中,使用少于1000次的迭代。
[0033]6.安全随机过程中使用静态的随机数种子。
[0034]所述的密码学误用规则库采用可扩展结构,可以对于新确认的属于密码学误用的情况,使用规则库的描述方法将抽象成新的规则,经过审核后增加到密码学误用规则中。
技术效果
[0035]与现有技术相比,本发明在提取应用程序内部相关数据后,对这些数据进行有关的安全分析,在完成识别应用程序内部使用的密码算法类型的数据定位和提取后,本发明会对密码算法的具体实现过程进行安全分析,发现并指出其中存在安全隐患的环节,最后出具一份应用程序的密码学误用安全分析结果。
【专利附图】
【附图说明】
[0036]图1为本发明方法流程图。
【具体实施方式】
[0037]下面对本发明的实施例作详细说明,本实施例在以本发明技术方案为前提下进行实施,给出了详细的实施方式和具体的操作过程,但本发明的保护范围不限于下述的实施例。
实施例1
[0038]如图1所示,本实施例包括以下步骤:
[0039]第一步、对待检测应用程序进行逆向分析,得到源代码,具体步骤包括:
[0040]1.1使用JEB对待检测应用程序进行逆向处理,将已经编译完成的Android应用程序apk文件中的程序代码逆向还原为smali代码和java代码。
[0041]1.2经过JEB处理过的应用程序包含了 smali代码和java代码,smali代码中包括了所有类的代码,可以当成代码库使用,java代码被以类为单位分割成不同的文件。
[0042]第二步、在逆向出的smali代码中寻找和密码学算法相关的代码段,具体步骤包括:
[0043]2.1对待检测应用程序逆向出的smali代码进行静态扫描,寻找java密码学库必须要使用的API:dofinal O函数,通过寻找该函数可以定位到一个密码学算法最终加密明文的步骤
[0044]第三步、将和密码算法相关的代码段从原程序中剥离出来,得到完整的密码算法实现过程代码,具体步骤包括:
[0045]3.1以第二步中定位到的dofinalO函数为目标,使用程序切片技术,可以使用amandroid或f 1wdroid等成熟的Android应用程序静态分析工具进行这一步操作,目的是将dofinalO函数涉及到的相关变量的生成、赋值代码从代码库中剥离出来,此处涉及到的变量包括但不限于:加密算法实例、明文变量、密钥变量、初始向量变量。最后获得和dofinalO相关的整个加密算法实现代码段。
[0046]第四步、对每一个密码学算法实现代码段进行数据抽象、过程建模最后进行模式匹配,和事先指定的密码算法实现准则进行逐条比较,输出不符合的条目,汇总形成最后的安全分析结果,具体步骤包括:
[0047]4.1使用程序分析技术,识别代码段所使用的密码算法、分组模式,例如AES加密、DES加密、CBC分组模式、ECB分组模式等。这里可以使用关键字匹配技术。之后进行第一次的密码学误用存在性判断,针对识别出的密码算法和分组模式,比对密码学误用规则库,判断是否存在密码学误用的情况,作为结果汇总到最终的安全分析结果。
[0048]4.2在获得代码段所使用的密码算法、分组模式的基础上,根据不同密码算法和分组模式的特点,定位密码算法实现过程中的关键数据。这里密码算法和分组模式的特点包括但不限于:分组模式是否需要使用起始向量IV,密码算法所使用的密钥类型等。这里的关键数据包括但不限于:密钥,分组模式,初始向量,明文,计算轮数等。
[0049]4.3对定位到的关键数据使用程序切片技术,获得与该数据的初始化、复制过程相关的代码段。这里进行第二次的密码学误用存在性判断,通过对代码段的分析,判断该关键数据相关的代码段是否存在密码误用的情况,例如通过程序切片技术定位到密钥变量的初始化代码,发现在初始化的时候使用了固定的密钥,或对起始向量进行切片分析,发现起始向量使用了一个固定的随即种子,这些都符合我们在密码学误用规则库中指定的规则。将这些比对结果汇总到最终的安全分析结果。
[0050]4.4汇总第一次和第二次密码学误用存在性判断的结果,生成待检测应用程序的密码学误用安全分析结果,安全分析结果中包括待检测应用程序中存在哪些密码学算法片段;每一个密码学算法片段的基本信息,比如使用的密码学算法、分组模式;每一个密码学算法片段中是否存在密码学误用的情况,并列举所有和密码学误用规则库相匹配的情况。
【权利要求】
1.一种Android应用程序密码学误用检测方法,其特征在于,包括: 第一步、对待检测应用程序进行反编译并生成代码库; 第二步、在代码库中查找与密码学算法相关的代码段; 第三步、将和密码算法相关的代码段从原程序中剥离出来,得到完整的密码算法实现过程代码; 第四步、对第三步得到的每一个密码学算法实现代码段进行数据抽象和过程建模处理,并通过模式匹配和事先指定的密码算法实现准则进行逐条比较,将不符合实现准则的条目输出并汇总形成安全分析结果。
2.根据权利要求1所述的Android应用程序密码学误用检测方法,其特征是,所述的第一步具体包括: 1.1使用现有的Android应用程序逆向分析技术对待检测应用程序进行逆向处理,将已经编译完成的Android应用程序apk文件中的程序代码逻辑还原为smali代码或java代码; 1.2将逆向处理后的待检测应用程序所有类的smali代码或java代码进行汇总,形成代码库。
3.根据权利要求1所述的Android应用程序密码学误用检测方法,其特征是,所述的第二步具体包括: 2.1对待检测应用程序的代码库进行密码学算法特征扫描,在代码库中定位到密码学算法相关代码; 2.2将定位到的代码标记为和密码学算法相关的代码,对整个代码库完成扫描后,当获得至少一个和密码学算法相关的代码则执行第三步; 所述的密码学算法特征包括:java中密码学库的关键API,常见密码学算法特征字符串; 所述的密码学算法相关代码包括:密码学API代码、密钥初始化代码、密码学算法初始化代码、起始向量初始化代码以及密码学算法中所有使用到参数的初始化、赋值代码。
4.根据权利要求1所述的Android应用程序密码学误用检测方法,其特征是,所述的第三步具体包括: 3.1以第二步中定位到的和密码学算法操作相关的代码为目标,使用程序切片技术,将整个代码库中和定位到的密码学算法操作相关的代码全部剥离出来,形成一段完整的密码学算法实现代码段; 3.2对整个代码库中每一个和密码学算法相关的代码段进行3.1步,直到将整个代码库中所有的密码算法实现代码段全部剥离,形成若干个完整的密码学算法实现代码段。 所述的程序切片技术是指:选取至少一个变量作为切片的源头,将整个程序中所有和源头变量相关的指令全部提取出来的过程,其中相关指令包括但不限于:变量初始化、变量赋值、计算; 所述的剥离是指:将目标代码从整个程序的代码中分离出来的过程。
5.根据权利要求1所述的Android应用程序密码学误用检测方法,其特征是,所述的第四步具体包括: 4.1使用程序分析技术识别代码段所使用的密码算法、分组模式。这里可以使用关键字匹配技术。之后进行第一次的密码学误用存在性判断,针对识别出的密码算法和分组模式,比对密码学误用规则库,判断是否存在密码学误用的情况,作为结果汇总到最终的安全分析结果; 4.2在获得代码段所使用的密码算法、分组模式的基础上,根据不同密码算法和分组模式的特点,定位密码算法实现过程中的关键数据; 4.3对定位到的关键数据使用程序切片技术,获得与该数据的初始化、复制过程相关的代码段,进行第二次的密码学误用存在性判断,通过对代码段的分析,判断该关键数据相关的代码段是否存在密码误用的情况,作为结果汇总到最终的安全分析结果; 4.4汇总第一次和第二次密码学误用存在性判断的结果,生成待检测应用程序的密码学误用安全分析结果。
6.根据权利要求1或5所述的Android应用程序密码学误用检测方法,其特征是,所述的安全分析结果中包括待检测应用程序中存在的密码学算法片段类型,每一个密码学算法片段中是否存在密码学误用的情况,并列举所有的符合密码学误用规则库的情况。
7.根据权利要求5所述的Android应用程序密码学误用检测方法,其特征是,所述的密码学误用规则库包括: 1).加密时分组模式为ECB模式; 2).选择分组模式为CBC模式进行加密时,使用不随机的初始向量; 3).使用常量的加密密钥; 4).对于PBE,使用常数作为盐; 5).PBE加密中,使用少于1000次的迭代; 6).安全随机过程中使用静态的随机数种子。
8.根据权利要求5或7所述的Android应用程序密码学误用检测方法,其特征是,所述的密码学误用规则库采用可扩展结构,对于新确认的属于密码学误用的情况,使用规则库的描述方法将抽象成新的规则,经过审核后增加到密码学误用规则中。
【文档编号】G06F9/44GK104484175SQ201410781215
【公开日】2015年4月1日 申请日期:2014年12月16日 优先权日:2014年12月16日
【发明者】张媛媛, 束骏亮, 杨文博, 李卷孺, 谷大武 申请人:上海交通大学, 上海交通大学中原研究院