CN113420310B - Android应用中的国密算法检测方法 - Google Patents
Android应用中的国密算法检测方法 Download PDFInfo
- Publication number
- CN113420310B CN113420310B CN202110747249.9A CN202110747249A CN113420310B CN 113420310 B CN113420310 B CN 113420310B CN 202110747249 A CN202110747249 A CN 202110747249A CN 113420310 B CN113420310 B CN 113420310B
- Authority
- CN
- China
- Prior art keywords
- cryptographic algorithm
- java
- code part
- matching
- national
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/602—Providing cryptographic facilities or services
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/315—Object-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应用中的国密算法的具体实现与应用,缺少一种检测方法进行验证。先前的检测经典密码算法(例如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%。
括号内的值为人工校验后的结果。
a指在Java代码部分或native代码部分存在国密算法的应用数量
b指存在SM2或SM3或SM4算法的应用程序数量。
与现有技术相比,本方法能够检测出私有实现的国密算法,且同时检测了Java代码部分与native代码部分两个层面并结合了静态分析与动态分析,尽可能全面地检测出所有相关的国密算法实现,以类名、方法名进行国密算法名称匹配,并且以字符串作为辅助信息,此外,该方法中还考虑到了国密算法的特征常量,可检测出部分被混淆的国密算法,具有覆盖范围广、漏报率低的优点。
上述具体实施由本领域技术人员在不背离本发明原理和宗旨的前提下以不同的方式对其进行局部调整,本发明的保护范围以权利要求书为准且不由上述具体实施所限,在其范围内的各个实现方案均受本发明之约束。
Claims (2)
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方法,使用二进制插桩的方式拦截目标方法,并输出上一步中检测到的国密算法Java方法参数,以确认Android应用中的国密算法实现的正确性;当国密算法位于native代码部分,并且其通过JNI的方式直接由Java代码部分进行调用,当支持调试时,则用hook的方式拦截目标native方法;当无法调试且使用静态注册的JNI机制时,则创建Android项目,在Java代码部分构造相同包名、相同类名、相同方法名的Java方法进行调用,将目标共享(.so)文件放入其中,利用JNI的方式进行调用;
当国密算法位于native代码部分,且其为OpenSSL库的变体,则通过调用OpenSSL库的高级封装方法EVP函数进行调用;
所述的步骤5,通过程序数据流图或者控制流图的方式同时寻找Java代码部分以及native代码部分的调用方法,然后直接运行程序,获取调用方法的传入参数,将这些参数取出用标准的密码算法库进行验证;
所述的特定常量包括:SM2密码算法使用的特定常量包括素数域参数p、椭圆曲线参数a、b、选取的基点G的坐标x和y,和基点的阶数n;SM3密码算法使用的特定常量包括初始化向量IV以及常量数组T;SM4算法使用的特定常量包括SM4算法中SBox、CK数组以及FK数组;
所述的基本信息包括:Java类信息、方法信息以及其中的数据、字符串;
所述的干扰项包括:Base64编码值、Java Lambda表达式和同名不同义的字符串以及通信方面的字符;
所述的将基本信息与国密算法特征数据集进行匹配是指:①遍历Java方法,将Java方法中包含国密算法特征数据集的特征常量与国密算法特征数据集进行数值匹配,以及②将基本信息中包含国密算法名称字样的类或方法与国密算法特征数据集进行名称匹配;当匹配成功时,则将此Java方法置入候选对象列表中;
当Java方法中存在国密算法字样的字符串时,也将其置入候选对象列表中;
所述的使用ELF文件分析工具获取native代码部分的共享库文件的导出函数名称以及数据字段的信息并与国密算法特征数据集进行匹配是指:将导出函数名称与国密算法名称进行匹配,将数据字段与国密算法特征数据集进行匹配;当匹配成功时,则将其置入候选对象列表中。
2.根据权利要求1所述的Android应用中的国密算法检测方法,其特征是,当native代码部分的国密算法实现间接由Java代码部分调用,即其在native代码部分形成层级调用的关系,Java代码部分并未直接调用native代码部分的国密算法实现,而是调用native代码部分的顶层调用函数,则需要分情况对国密算法的实现进行验证。
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 CN113420310A (zh) | 2021-09-21 |
CN113420310B true 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 (4)
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应用程序密码学误用检测方法 |
CN109558706A (zh) * | 2018-11-16 | 2019-04-02 | 杭州师范大学 | 国密sm4分组密码算法的检测方法 |
CN109918948A (zh) * | 2019-01-23 | 2019-06-21 | 西安邮电大学 | 基于国密算法sm3的apk完整性校验方法、计算机程序 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104539429B (zh) * | 2014-12-30 | 2017-09-22 | 飞天诚信科技股份有限公司 | 一种定位国密证书的方法和装置及系统 |
CN110807191B (zh) * | 2019-09-30 | 2022-12-06 | 奇安信科技集团股份有限公司 | 一种应用程序的安全运行方法及装置 |
CN112073192B (zh) * | 2020-09-07 | 2023-01-10 | 北京天融信网络安全技术有限公司 | 一种数据处理方法、装置及密码机 |
-
2021
- 2021-07-01 CN CN202110747249.9A patent/CN113420310B/zh active Active
Patent Citations (4)
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应用程序密码学误用检测方法 |
CN109558706A (zh) * | 2018-11-16 | 2019-04-02 | 杭州师范大学 | 国密sm4分组密码算法的检测方法 |
CN109918948A (zh) * | 2019-01-23 | 2019-06-21 | 西安邮电大学 | 基于国密算法sm3的apk完整性校验方法、计算机程序 |
Non-Patent Citations (2)
Title |
---|
"NativeSpeaker: Identifying Crypto Misuses in Android Native Code Libraries";Qing Wang等;《Inscrypt 2017: Information Security and Cryptology》;20190204;全文 * |
"密码系统的侧信道分析:进展与问题";谷大武,张驰,陆相君;《西安电子科技大学学报》;20210228;第48卷(第1期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN113420310A (zh) | 2021-09-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Feng et al. | A novel dynamic android malware detection system with ensemble learning | |
US10387648B2 (en) | Ransomware key extractor and recovery system | |
US20180025153A1 (en) | Method and device for detecting malicious code in an intelligent terminal | |
CN107679403B (zh) | 一种基于序列比对算法的勒索软件变种检测方法 | |
CN104751054B (zh) | 恶意程序的识别方法及装置、移动终端 | |
CN105653947B (zh) | 一种评估应用数据安全风险的方法及装置 | |
CN104504337A (zh) | 一种安卓数据泄露的恶意应用检测方法 | |
CN107979581A (zh) | 僵尸特征的检测方法和装置 | |
CN112887388A (zh) | 基于沙箱环境的数据处理系统 | |
CN111783092B (zh) | 面向安卓应用程序间通信机制的恶意攻击检测方法及系统 | |
Cui et al. | Towards privacy-preserving malware detection systems for android | |
CN107977576A (zh) | 一种基于应用指纹的主机漏洞检测系统及方法 | |
He et al. | On‐Device Detection of Repackaged Android Malware via Traffic Clustering | |
Lubuva et al. | A review of static malware detection for Android apps permission based on deep learning | |
CN117579395B (zh) | 一种应用人工智能进行网络安全漏洞扫描的方法及系统 | |
CN111083307A (zh) | 一种基于隐写术的文件检测和破解方法 | |
JP2015106914A (ja) | マルウェア通信解析装置、及びマルウェア通信解析方法 | |
CN113420310B (zh) | Android应用中的国密算法检测方法 | |
CN110602051B (zh) | 基于共识协议的信息处理方法及相关装置 | |
CN115051874B (zh) | 一种多特征的cs恶意加密流量检测方法和系统 | |
Kedziora et al. | Android malware detection using machine learning and reverse engineering | |
Ren et al. | DEMISTIFY: Identifying On-device Machine Learning Models Stealing and Reuse Vulnerabilities in Mobile Apps | |
Pevný et al. | Malicons: Detecting payload in favicons | |
CN115310087A (zh) | 一种基于抽象语法树的网站后门检测方法和系统 | |
WO2016180211A1 (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 |