CN113420310A - Android应用中的国密算法检测方法 - Google Patents

Android应用中的国密算法检测方法 Download PDF

Info

Publication number
CN113420310A
CN113420310A CN202110747249.9A CN202110747249A CN113420310A CN 113420310 A CN113420310 A CN 113420310A CN 202110747249 A CN202110747249 A CN 202110747249A CN 113420310 A CN113420310 A CN 113420310A
Authority
CN
China
Prior art keywords
cryptographic algorithm
java
code part
matching
android 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.)
Granted
Application number
CN202110747249.9A
Other languages
English (en)
Other versions
CN113420310B (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.)
Shanghai Jiaotong University
Original Assignee
Shanghai Jiaotong 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 Shanghai Jiaotong University filed Critical Shanghai Jiaotong University
Priority to CN202110747249.9A priority Critical patent/CN113420310B/zh
Publication of CN113420310A publication Critical patent/CN113420310A/zh
Application granted granted Critical
Publication of CN113420310B publication Critical patent/CN113420310B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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/60Protecting data
    • G06F21/602Providing cryptographic facilities or services
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/315Object-oriented languages

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • General Health & Medical Sciences (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Stored Programmes (AREA)

Abstract

一种Android应用中的国密算法检测方法,通过将Android应用程序划分为Java代码和native代码后,获取Java代码部分的基本信息,即获取DEX文件中的Java字节码信息作为基本信息,将基本信息与国密算法特征数据集进行匹配;同时使用ELF文件分析工具获取native代码部分的共享库文件的导出函数名称以及数据字段的信息并与国密算法特征数据集进行匹配。经干扰项筛选后,当识别出的国密算法实现位于Java代码部分,则由Java代码直接直接应用于业务逻辑中;当识别出的国密算法实现位于native代码部分,则进一步当其通过Java本地方法接口(JNI)的方式直接由Java代码部分进行调用并通过JNI注册的关键字特征进行判定。

Description

Android应用中的国密算法检测方法
技术领域
本发明涉及的是一种信息安全领域的技术,具体是一种Android应用中的国密算法检测方法。
背景技术
在金融、政务等领域已存在许多Android应用使用国密算法来保护敏感数据,然而尚未存在针对Android应用中的国密算法检测方法,因此难以识别出现实世界中的国密算法在移动端的使用情况,即Android应用中是否存在国密算法以及后续的算法应用。识别Android应用中的国密算法可帮助测试人员或者安全分析人员在未获得源码的情况下自动化、批量、快速地掌握其中的国密算法使用情况,以便于进行后续的分析。现有的方法只关注于经典密码算法的检测与识别,其方法无法直接应用于国密算法检测中。
Android应用作为移动端应用的代表,其用户开放的生态环境以及大量的用户群体,一直以来都是安全研究者关注的重点。然而,对于Android应用中的国密算法的具体实现与应用,缺少一种检测方法进行验证。先前的检测经典密码算法(例如AES,RSA)的工作大多基于标准的Java密码库,但是国密算法尚未集成到标准库中,因此大部分国密算法是私有实现或使用第三方库实现的,无法直接重用针对经典密码算法的检测方法。此外,由于密码算法的构造较为复杂,开发人员可能缺乏必要的密码学基础知识,因此存在错误地使用国密算法的潜在风险。
发明内容
本发明针对现有技术存在的上述不足,提出一种Android应用中的国密算法检测方法,能够识别出私有实现的国密算法,具有漏报率低的特点。
本发明是通过以下技术方案实现的:
本发明涉及一种Android应用中的国密算法检测方法,包括:
步骤1)建立国密算法特征数据集,该数据集包括:SM2椭圆曲线公钥密码算法、SM3杂凑密码算法以及SM4分组密码算法中使用的特定常量。
所述的特定常量包括:SM2密码算法使用的特定常量包括素数域参数p、椭圆曲线参数a、b、选取的基点G的坐标x和y,和基点的阶数n;SM3密码算法使用的特定常量包括初始化向量IV以及常量数组T;SM4算法使用的特定常量包括SM4算法中SBox、CK数组以及FK数组。
步骤2)将Android应用程序划分为Java代码和native代码,其中:Java代码部分指的是Android应用程序中用Java语言编写的部分,即APK文件包中的DEX文件,native代码部分指的是用C或C++语言编写的部分,即APK文件包中的共享库文件步骤.so文件。
步骤3)使用Android程序分析工具获取Java代码部分的基本信息,即获取DEX文件中的Java字节码信息作为基本信息,将基本信息与国密算法特征数据集进行匹配;同时使用ELF文件分析工具获取native代码部分的共享库文件的导出函数名称以及数据字段的信息并与国密算法特征数据集进行匹配。
所述的将基本信息与国密算法特征数据集进行匹配是指:①遍历Java方法,将Java方法中包含国密算法特征数据集的特征常量与国密算法特征数据集进行数值匹配,以及②将基本信息中包含国密算法名称字样的类或方法与国密算法特征数据集进行名称匹配;当匹配成功时,则将此Java方法置入候选对象列表中。
所述的基本信息包括:Java类信息、方法信息以及其中的数据、字符串。
优选地,当Java方法中存在上述国密算法字样的字符串,也将其置入候选对象列表中。
所述的使用ELF文件分析工具获取native代码部分的共享库文件的导出函数名称以及数据字段的信息并与国密算法特征数据集进行匹配是指:将导出函数名称与国密算法名称进行匹配,将数据字段与国密算法特征数据集进行匹配;当匹配成功时,则将其置入候选对象列表中。
步骤4)对候选对象通过正则表达式匹配技术筛去干扰项。
所述的干扰项包括:Base64编码值、Java Lambda表达式和其他含义的拼接字符串,长段的Base64编码值通常出现在数字证书中,原有识别到的国密算法字样经过Base64解码后不复存在,因此为干扰项,通过长度以及证书的判别将其去除。Java Lambda表达式在反编译后也可能会出现无意义的国密算法字样,因此需要去除。此外,还有一些同名不同义的字符串,例如”isM3U8”,用于判断是否为HLS协议(基于HTTP的流媒体传输协议)中M3U8文件,以及“GSM2”这样的通信方面的字符,也需要从候选实现中去除。
步骤5)当识别出的国密算法实现位于Java代码部分,则由Java代码直接直接应用于业务逻辑中;当识别出的国密算法实现位于native代码部分,则进一步当其通过Java本地方法接口(JNI)的方式直接由Java代码部分进行调用并通过JNI注册的关键字特征进行判定。
优选地,当native代码部分的国密算法实现间接由Java代码部分调用,即其在native代码部分形成层级调用的关系,Java代码部分并未直接调用native代码部分的国密算法实现,而是调用native代码部分的顶层调用函数,则需要分情况对国密算法的实现进行验证。
技术效果
本发明整体解决现有技术缺乏针对Android应用中的国密算法识别的缺陷,通过接口名称匹配以及国密算法特征值的匹配,从Android应用程序中识别出国密算法。与现有技术相比,本发明识别未知源码的Android应用程序包,能够在名称被混淆的情况下进行识别,能够识别出第三方库实现的国密算法以及私有实现的国密算法。
附图说明
图1为本发明流程图。
具体实施方式
如图1所示,为本实施例涉及一种Android应用中的国密算法检测方法,包括以下步骤:
步骤1)建立国密算法特征数据集,包括:SM2、SM3以及SM4算法的特定常量。具体的值为针对SM2算法使用的椭圆曲线的参数p、a、b,以及阶n和基本点G的x坐标、y坐标;对于SM3算法流程中的算法常量T数组以及初始化向量IV;SM4算法中的SBox以及固定参数CK数组、系统参数FK数组。
步骤2)APK分层:将输入的AndroidAPK文件依据文件类型分为Java代码部分和native代码部分这两部分。
所述的Java代码部分包括:DEX可执行文件,native代码部分包括:共享目标库(.so)文件。通过文件的魔数magic number以及文件后缀名区分文件类型。
步骤3)同时进行Java代码部分和native代码部分识别,其中:Java代码部分识别是指:使用Androguard获取DEX文件中的Java方法名称、类名称以及其中的字符串和数值。当方法中存在上述国密算法字样的字符串,也将其置入候选对象列表中。将Java方法中包括:步骤1中的国密算法特征常量的进行数值匹配,当匹配成功,则将此Java方法放入国密算法候选实现中。将其他Java信息中包括:“SM2”、“SM3”、“SM4”、“SMS4”字样的类或方法进行名称匹配,当匹配成功,则将其置入候选对象列表中;native代码部分识别是指:使用pyelftools获取native层共享库文件的数据部分以及导出函数名称。利用步骤1中的国密算法特征常量在共享库文件的“.rodata”部分与“.data”这个两个数据部分进行匹配,当匹配成功,则将其置入候选对象列表中的。使用“SM2”、“SM3”、“SM4”、“SMS4”字样进行函数名匹配,当匹配成功,则将此函数置入候选对象列表中。
步骤4)利用正则表达式进行匹配并从对象列表中将干扰项过滤。
所述的干扰项包括Base64编码值、Java Lambda表达式和其他含义的拼接字符串,其中:长段的Base64编码值通常出现在数字证书中,原有识别到的国密算法字样经过Base64解码后不复存在,因此为干扰项,通过长度以及证书的判别将其去除。Java Lambda表达式在反编译后也可能会出现无意义的国密算法字样,因此需要去除。此外,还有一些同名不同义的字符串,例如”isM3U8”,用于判断是否为HLS协议(基于HTTP的流媒体传输协议)中M3U8文件,以及“GSM2”这样的通信方面的字符,也需要从候选实现中去除。
步骤5)验证国密算法:当国密算法实现位于Java代码部分,且程序可进行调试,则执行候选国密算法中的Java方法,使用二进制插桩的方式拦截目标方法,并输出上一步中检测到的国密算法Java方法参数,例如加密算法中的明文、密文、密钥、初始向量等算法数据,确认Android应用中的国密算法实现的正确性;当国密算法位于native代码部分,并且其通过JNI的方式直接由Java代码部分进行调用,当支持调试,则可用hook的方式拦截目标native方法;当无法调试且使用静态注册的JNI机制,可创建Android项目,在Java代码部分构造相同包名、相同类名、相同方法名的Java方法进行调用,将目标共享(.so)文件放入其中,利用JNI的方式进行调用。
进一步地,当国密算法位于native代码部分,且其为OpenSSL库的变体,则通过调用OpenSSL库的高级封装方法EVP函数进行调用。OpenSSL库的变体库通常会包括:OpenSSL版本说明的相关函数,其中带有使用的OpenSSL的版本信息。
优选地,所述的验证,通过程序数据流图或者控制流图的方式同时寻找Java代码部分以及native代码部分的调用方法,然后直接运行程序,获取调用方法的传入参数,将这些参数取出用标准的密码算法库进行验证。此种做法可以省去单独验证的复杂性,但是由于许多Android应用程序经过加壳等保护,或者受到Android应用反调试机制的保护,国密算法实现函数可能难以找到调用方法,因此难以获得其运行时的参数。
由于部分加壳代码中也使用到了国密算法,因此上述验证可以针对加壳后的应用。
本实施例中,针对加壳前的应用进行识别,首先需要对应用程序进行脱壳,例如使用Frida dexdump,此脱壳方式需要动态运行应用程序,过程比较复杂,并且许多应用程序会自动检测手机环境或者进行了反调试的保护,因此自动脱壳对实验环境要求较高。另外,应用程序加壳也是一个研究热点,加壳的技术也在逐步发展,暂未存在一种可以脱所有壳的通用工具。
经过具体实际实验,在应用市场上下载的887个公开的Android应用程序中,识别出了274个包含国密算法的应用,其中,在Java代码部分共识别出152个存在国密算法的应用,而在native代码部分,识别出184个存在国密算法的应用。在识别效率方面,此方法的平均识别时间仅为9秒(批量识别的平均时间)。在识别的准确率方面,工具识别出316个包含国密算法的应用,经人工确认后存在274个,准确率为86.7%。
Figure BDA0003143377450000051
括号内的值为人工校验后的结果。
a指在Java代码部分或native代码部分存在国密算法的应用数量
b指存在SM2或SM3或SM4算法的应用程序数量。
与现有技术相比,本方法能够检测出私有实现的国密算法,且同时检测了Java代码部分与native代码部分两个层面并结合了静态分析与动态分析,尽可能全面地检测出所有相关的国密算法实现,以类名、方法名进行国密算法名称匹配,并且以字符串作为辅助信息,此外,该方法中还考虑到了国密算法的特征常量,可检测出部分被混淆的国密算法,具有覆盖范围广、漏报率低的优点。
上述具体实施由本领域技术人员在不背离本发明原理和宗旨的前提下以不同的方式对其进行局部调整,本发明的保护范围以权利要求书为准且不由上述具体实施所限,在其范围内的各个实现方案均受本发明之约束。

Claims (9)

1.一种Android应用中的国密算法检测方法,其特征在于,包括:
步骤1)建立国密算法特征数据集,该数据集包括:SM2椭圆曲线公钥密码算法、SM3杂凑密码算法以及SM4分组密码算法中使用的特定常量;
步骤2)将Android应用程序划分为Java代码和native代码,其中:Java代码部分指的是Android应用程序中用Java语言编写的部分,即APK文件包中的DEX文件,native代码部分指的是用C或C++语言编写的部分,即APK文件包中的共享库文件步骤.so文件;
步骤3)使用Android程序分析工具获取Java代码部分的基本信息,即获取DEX文件中的Java字节码信息作为基本信息,将基本信息与国密算法特征数据集进行匹配;同时使用ELF文件分析工具获取native代码部分的共享库文件的导出函数名称以及数据字段的信息并与国密算法特征数据集进行匹配;
步骤4)对候选对象通过正则表达式匹配技术筛去干扰项;
步骤5)当识别出的国密算法实现位于Java代码部分,则由Java代码直接直接应用于业务逻辑中;当识别出的国密算法实现位于native代码部分,则进一步当其通过Java本地方法接口(JNI)的方式直接由Java代码部分进行调用并通过JNI注册的关键字特征进行判定。
2.根据权利要求1所述的Android应用中的国密算法检测方法,其特征是,所述的特定常量包括:SM2密码算法使用的特定常量包括素数域参数p、椭圆曲线参数a、b、选取的基点G的坐标x和y,和基点的阶数n;SM3密码算法使用的特定常量包括初始化向量IV以及常量数组T;SM4算法使用的特定常量包括SM4算法中SBox、CK数组以及FK数组。
3.根据权利要求1所述的Android应用中的国密算法检测方法,其特征是,所述的将基本信息与国密算法特征数据集进行匹配是指:①遍历Java方法,将Java方法中包含国密算法特征数据集的特征常量与国密算法特征数据集进行数值匹配,以及②将基本信息中包含国密算法名称字样的类或方法与国密算法特征数据集进行名称匹配;当匹配成功时,则将此Java方法置入候选对象列表中。
4.根据权利要求1或3所述的Android应用中的国密算法检测方法,其特征是,所述的基本信息包括:Java类信息、方法信息以及其中的数据、字符串。
5.根据权利要求1所述的Android应用中的国密算法检测方法,其特征是,当Java方法中存在国密算法字样的字符串时,也将其置入候选对象列表中。
6.根据权利要求1所述的Android应用中的国密算法检测方法,其特征是,所述的使用ELF文件分析工具获取native代码部分的共享库文件的导出函数名称以及数据字段的信息并与国密算法特征数据集进行匹配是指:将导出函数名称与国密算法名称进行匹配,将数据字段与国密算法特征数据集进行匹配;当匹配成功时,则将其置入候选对象列表中。
7.根据权利要求1所述的Android应用中的国密算法检测方法,其特征是,所述的干扰项包括:Base64编码值、JavaLambda表达式和同名不同义的字符串以及通信方面的字符。
8.根据权利要求1所述的Android应用中的国密算法检测方法,其特征是,当native代码部分的国密算法实现间接由Java代码部分调用,即其在native代码部分形成层级调用的关系,Java代码部分并未直接调用native代码部分的国密算法实现,而是调用native代码部分的顶层调用函数,则需要分情况对国密算法的实现进行验证。
9.根据权利要求8所述的Android应用中的国密算法检测方法,其特征是,所述的验证,通过程序数据流图或者控制流图的方式同时寻找Java代码部分以及native代码部分的调用方法,然后直接运行程序,获取调用方法的传入参数,将这些参数取出用标准的密码算法库进行验证。
CN202110747249.9A 2021-07-01 2021-07-01 Android应用中的国密算法检测方法 Active CN113420310B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110747249.9A CN113420310B (zh) 2021-07-01 2021-07-01 Android应用中的国密算法检测方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110747249.9A CN113420310B (zh) 2021-07-01 2021-07-01 Android应用中的国密算法检测方法

Publications (2)

Publication Number Publication Date
CN113420310A true CN113420310A (zh) 2021-09-21
CN113420310B CN113420310B (zh) 2022-05-17

Family

ID=77720044

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110747249.9A Active CN113420310B (zh) 2021-07-01 2021-07-01 Android应用中的国密算法检测方法

Country Status (1)

Country Link
CN (1) CN113420310B (zh)

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103516511A (zh) * 2013-09-11 2014-01-15 国家电网公司 一种对加密算法与密钥进行检测的方法及装置
CN104484175A (zh) * 2014-12-16 2015-04-01 上海交通大学 Android应用程序密码学误用检测方法
CN104539429A (zh) * 2014-12-30 2015-04-22 飞天诚信科技股份有限公司 一种定位国密证书的方法和装置及系统
CN109558706A (zh) * 2018-11-16 2019-04-02 杭州师范大学 国密sm4分组密码算法的检测方法
CN109918948A (zh) * 2019-01-23 2019-06-21 西安邮电大学 基于国密算法sm3的apk完整性校验方法、计算机程序
CN110807191A (zh) * 2019-09-30 2020-02-18 奇安信科技集团股份有限公司 一种应用程序的安全运行方法及装置
CN112073192A (zh) * 2020-09-07 2020-12-11 北京天融信网络安全技术有限公司 一种数据处理方法、装置及密码机

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103516511A (zh) * 2013-09-11 2014-01-15 国家电网公司 一种对加密算法与密钥进行检测的方法及装置
CN104484175A (zh) * 2014-12-16 2015-04-01 上海交通大学 Android应用程序密码学误用检测方法
CN104539429A (zh) * 2014-12-30 2015-04-22 飞天诚信科技股份有限公司 一种定位国密证书的方法和装置及系统
CN109558706A (zh) * 2018-11-16 2019-04-02 杭州师范大学 国密sm4分组密码算法的检测方法
CN109918948A (zh) * 2019-01-23 2019-06-21 西安邮电大学 基于国密算法sm3的apk完整性校验方法、计算机程序
CN110807191A (zh) * 2019-09-30 2020-02-18 奇安信科技集团股份有限公司 一种应用程序的安全运行方法及装置
CN112073192A (zh) * 2020-09-07 2020-12-11 北京天融信网络安全技术有限公司 一种数据处理方法、装置及密码机

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
QING WANG等: ""NativeSpeaker: Identifying Crypto Misuses in Android Native Code Libraries"", 《INSCRYPT 2017: INFORMATION SECURITY AND CRYPTOLOGY》 *
谷大武,张驰,陆相君: ""密码系统的侧信道分析:进展与问题"", 《西安电子科技大学学报》 *

Also Published As

Publication number Publication date
CN113420310B (zh) 2022-05-17

Similar Documents

Publication Publication Date Title
US10387648B2 (en) Ransomware key extractor and recovery system
Allix et al. A Forensic Analysis of Android Malware--How is Malware Written and How it Could Be Detected?
CN107679403B (zh) 一种基于序列比对算法的勒索软件变种检测方法
CN105653947B (zh) 一种评估应用数据安全风险的方法及装置
CN104504337A (zh) 一种安卓数据泄露的恶意应用检测方法
CN107979581A (zh) 僵尸特征的检测方法和装置
CN111163095A (zh) 网络攻击分析方法、网络攻击分析装置、计算设备和介质
Faruki et al. Droidolytics: robust feature signature for repackaged android apps on official and third party android markets
CN117579395B (zh) 一种应用人工智能进行网络安全漏洞扫描的方法及系统
Cui et al. Towards privacy-preserving malware detection systems for android
CN111083307A (zh) 一种基于隐写术的文件检测和破解方法
Lubuva et al. A review of static malware detection for Android apps permission based on deep learning
CN111783092B (zh) 面向安卓应用程序间通信机制的恶意攻击检测方法及系统
CN113420310B (zh) Android应用中的国密算法检测方法
CN110602051B (zh) 基于共识协议的信息处理方法及相关装置
CN115051874B (zh) 一种多特征的cs恶意加密流量检测方法和系统
JP2015106914A (ja) マルウェア通信解析装置、及びマルウェア通信解析方法
Hutchinson et al. Forensic analysis of spy applications in android devices
Pevný et al. Malicons: Detecting payload in favicons
Kedziora et al. Android malware detection using machine learning and reverse engineering
Hein Permission based malware protection model for android application
Sever et al. A Kubernetes dataset for misuse detection
WO2016180211A1 (zh) 一种伪装应用的处理方法和装置
CN114513329A (zh) 一种工业互联网信息安全评估方法及装置
CN114338126A (zh) 一种网络应用识别方法和装置

Legal Events

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