一种基于混合模式的安卓软件静态分析方法

文档序号:34453721发布日期:2023-06-13 20:27阅读:89来源:国知局
一种基于混合模式的安卓软件静态分析方法

本发明涉及一种安全软件,尤其是一种基于混合模式的安卓软件静态分析方法。


背景技术:

1、移动设备和智能手机已经成为人们日常生活中不可或缺的一部分,截至2022年12月,安卓手机市场占有率为71.96%。安卓设备在消费者中的广泛使用使安卓软件成为黑客攻击的重要目标,这为安卓用户的隐私及财产信息安全提出了更高的要求。

2、静态分析中的污点分析是程序隐私泄露检测的一种重要技术,它通过将数据流图中的一些点标记为数据来源点或数据泄露点,在数据流图中追踪程序中的敏感数据的流向。安卓软件通常由java语言以及本机代码(c/c++)语言编写而成,这要求针对安卓软件的静态分析技术具有同时分析java字节码以及本机代码二进制库,并分析二者之间的数据流向关系的跨语言程序分析能力。目前已有部分针对安卓跨语言静态分析问题的研究,根据不同研究在函数间数据流分析使用的算法进行分类,可以将目前研究分为函数摘要分析和全程序分析两类。

3、在文献《jucify: a step towards android code unification for enhancedstatic analysis》中,jordan等人通过构建统一的数据流图进行污点分析。它通过反编译工具将java字节码转化为jimple中间代码;通过符号执行技术收集native函数中涉及入口点和出口点的信息,并使用这些关键信息构建虚拟java伪代码,并转化为jimple中间代码;实现统一的中间代码格式,并通过flowdroid对统一模型进行数据流污点分析。jucify在native-jimple中间代码中加入了大量的噪声信息,以保证循环、分支判断和其他情况的可靠性,这种行为导致了jucify可能为一条真正的污点路径生成多条污点路径,产生路径爆炸的问题。

4、在文献《jn-saf: precise and efficient ndk/jni-aware inter-languagestatic analysis framework for security vetting of androidapplications withnative code》中,wei等人通过使用函数摘要描述函数的入口点和出口点之间的数据流向关系,实现了java、native函数间的数据流连接工作。对于native代码,jn-saf采用angr提供的符号执行技术,将函数入口点作为特殊符号输入模拟执行任务中,在模拟执行完毕后通过函数出口点的状态信息判断入口点与出口点的关系,实现对native函数的摘要计算。对于java代码,jn-saf通过其前身amandroid提供的数据流分析能力计算获得函数摘要。通过函数摘要描述函数信息并进行函数间连接这种行为丢弃了函数的信息,降低了数据流分析的精度,在jn-saf中表现为无法分析java类内全局变量、native函数全局变量。


技术实现思路

1、针对上述问题,本发明旨在提出一种混合全流程和函数摘要模式的安卓软件静态分析方法及系统,能够针对安卓apk格式软件跨语言(java及native)静态分析,有效、完整地提取安卓软件的数据流传播行为,从而对安卓软件进行更加精确的数据流分析;能够构建更加精确的跨语言数据流图,捕获敏感信息传递行为;能够保证静态分析算法在java层具有全程序分析的精度同时,在native层具备全程序函数摘要分析精度及函数摘要分析的效率。

2、为了达到上述目的,本发明采用以下技术方案:

3、一种基于混合模式的安卓软件静态分析方法,包括以下步骤:

4、步骤1:解压安卓系统apk文件获取java字节码文件、native二进制文件以及相关配置文件;

5、步骤2:对步骤1中获取的java字节码文件以及相关配置文件,通过apktool库将java字节码文件以及相关配置文件反编译并转化为jawa格式中间语言代码,得到java层代码的信息,并通过静态分析工具为java层代码生成函数调用图以及函数内数据流图;

6、步骤3:对步骤1中获取的native二进制文件以及相关配置文件,通过angr对其反编译,得到native函数,为每个native函数生成函数内控制流图,并收集每个native二进制文件中的全局变量信息;

7、步骤4:对步骤3中生成的函数内控制流图以及步骤3中收集的全局变量信息,通过angr提供的annotation功能,在每个函数内控制流图上使用符号执行技术获取函数轻量级数据依赖图;

8、步骤5:通过步骤4中生成的函数轻量级数据依赖图以及步骤3中收集的全局变量信息,使用数据间数据流图构建算法构建轻量级函数间数据依赖图;

9、步骤6:通过步骤5中生成的轻量级函数间数据依赖图构建native函数摘要动态生成器,该生成器提供为轻量级函数间数据依赖图中的拥有的函数生成函数摘要的能力。步骤7中的使用者指定待分析的目标函数并为native函数摘要动态生成器提供目标函数的输入数据流,native函数摘要动态生成器通过输入数据流以及轻量级函数间数据依赖图生成目标函数的输出数据流并更新轻量级函数间数据依赖图中的全局变量信息,以自定义的领域特定语言描述函数输入数据与输出数据之间的数据依赖关系,最后将描述结果即native函数摘要输出;

10、步骤7:根据步骤2中生成的java层的函数调用图和函数内数据流图在java层执行跨函数数据流分析算法以及跨语言数据流分析算法,构建java-native跨语言组件内数据流图;在java层的函数调用图中包含java函数调用以及使用jni的native函数调用,java层跨函数数据流分析算法将涉及到java函数调用部分的数据流图连接起来;当java层跨函数数据流分析算法遇到native函数调用时,将调用时的数据流输入至步骤6生成的native函数摘要动态生成器获取native函数摘要,通过native函数摘要构建native数据流,实现跨语言的数据流图连接。通过组件间数据流图构建算法针对java-native跨语言组件内数据流图构建安卓软件全流程数据流图;

11、步骤8:根据用户定义的污点数据源头以及泄露点,通过步骤7生成的安卓软件全流程数据流图执行安卓软件污点分析,获取安卓软件敏感信息传递路径。

12、上述技术方案中,所述步骤2的具体步骤为:

13、对于步骤1中获取的java相关的配置文件,提取配置文件中的信息,构建供分析框架使用的虚拟安卓java层环境;

14、对于步骤1中获取的java字节码文件,使用apktool库将java字节码文件反编译并转化为jawa格式中间语言代码;使用cha算法对中间语言代码展开分析,生成java层函数调用图;

15、通过控制流图生成算法与数据流图生成算法对中间语言代码展开分析,生成java层函数内数据流图。

16、上述技术方案中,所述步骤3的具体步骤为:

17、对于步骤1中获取的native二进制文件相关的配置文件,提取配置文件中的信息,构建供分析框架使用的虚拟安卓native层环境;

18、对于步骤1中获取的native二进制文件,提取其中的全局变量信息以及文件拥有的函数名得到native函数,并通过angr提供的cfgemulated功能为每个函数生成函数内控制流图。

19、上述技术方案中,所述步骤4的具体步骤为:

20、对于步骤3中生成的native层的函数内控制流图,将包括函数参数、敏感信息源头以及读取全局变量的代码位置作为函数入口点,通过angr提供的annotation功能将对应annotation附加在入口点信息中,使用angr符号执行功能对函数进行模拟执行,并在符号执行结束时记录包括函数返回值、敏感信息泄露点、native函数调用点、java函数调用点以及写入全局变量的代码位置的函数出口点的状态,构建函数入口点以及出口点的数据依赖关系,进而生成函数轻量级数据依赖图。

21、上述技术方案中,所述步骤5的具体步骤为:

22、对于步骤4中生成的函数轻量级数据依赖图,查找每个函数包含的native函数调用点,通过函数调用者和函数调用对象的数据依赖信息,构建函数间的数据依赖关系;查找每个函数对全局变量的修改,构建涉及全局变量的数据依赖关系;通过函数间数据依赖关系、涉及全局变量的数据依赖关系以及函数轻量级数据依赖图构建轻量级函数间数据依赖图。

23、上述技术方案中,所述步骤6的具体步骤为:

24、构建一个native函数摘要动态生成器,该生成器持有步骤5中生成的轻量级函数间数据依赖图信息,输入为一个函数调用行为对应的输入数据流,输出为描述该函数输入与输出相关参数之间的数据依赖关系的函数摘要,该生成器依照以下算法运行:

25、将输入的native函数调用中的参数信息传递给轻量级函数间数据依赖图并执行数据依赖分析,获取native函数经过这次函数调用执行后的程序状态,从中提取步骤4具体步骤中提到的函数入口点与出口点的数据依赖关系,其中本步骤的出口点不包括native函数调用点;根据不同出口点将数据依赖关系分类并筛选,以全局变量为出口点的数据依赖关系用来更新轻量级函数间数据依赖图中的全局变量信息,以自定义的领域特定语言将其他三种出口点的数据依赖关系描述为native函数摘要并输出。

26、上述技术方案中,所述步骤7的具体步骤为:

27、对于步骤2中生成的java层函数调用图,通过函数调用关系构建函数间数据流关系,在这个过程中,当java代码通过jni调用native函数时,将函数调用信息传递给步骤6中构建的函数摘要生成器,通过生成器返回的函数摘要构建native函数敏感信息泄露、native层返回java以及native通过jni调用java函数三种情况的数据流关系,实现跨语言数据流图中跨层部分的构建;通过步骤2中生成java层函数内数据流图构建函数间数据流图;通过从函数间数据流图中提取出的java层以及native层的组件间调用信息构建跨组件数据流图,最终构建安卓软件全流程数据流图。

28、上述技术方案中,所述步骤8的具体步骤为,遍历步骤7中生成的安卓软件全流程数据流图,将符合用户定义的污点数据源头以及泄露点函数标记为源头点或泄露点,通过dijkstra算法查询数据流图中存在的从源头点到泄露点的路径,最终获取安卓软件敏感信息传递路径。

29、本发明同现有技术相比,有益效果表现为:

30、一、本发明提出了一种基于混合模式的安卓软件静态分析方法,混合了安卓软件跨语言分析中两种常见的模式,避免java层函数摘要分析带来的精度丢失问题,同时保留了native层函数摘要分析的高效率。

31、二、本发明针对现有技术中无法分析涉及native全局变量的数据流的问题,通过将全局变量信息加入native轻量级跨函数数据依赖图的方式提升了native函数摘要分析的精度,使本发明可以发现通过native全局变量进行传播的敏感数据传播链条,提升了安卓软件污点分析准确度。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1