今天给大家推荐的是来自ICSE 2022的一篇关于Android应用分析的论文——“JuCify: A Step Towards Android Code Unification for Enhanced Static Analysis”,作者设计并构建了一种统一的Android代码模型框架——JuCify,该框架能够将Android字节码和Native代码关联起来以增强静态分析。
恶意软件通常会通过Native代码来隐藏恶意操作,且62.9%的应用中都包含Native代码,因此对Native代码安全性分析变得越来越重要。然而目前的分析工具大多是将Native代码与字节码单独分析之后再结合起来,它们并没有一个统一的模型来将字节码和Native代码分析融合关联起来。
本文作者提出了JuCify多步骤静态框架,该框架能够将Dex字节码和Native代码分析结合到一个统一的模型中,并将其转换为Jimple来辅助静态分析。
(1) Call Graph as Unified Preliminary Model
JuCify构造统一的字节码和Native代码调用图。如图2所示,它首先利用NativeDiscloser子模块构建Native调用图和字节码调用图,并进一步对调用图进行转换与修剪;之后,JuCify提取字节码与Native代码之间的相互调用,以实现字节码与Native代码调用图的连接与统一。
Step 0: 利用Angr来构造Native代码的调用图。
Step 1: 提取字节码与Native代码之间的相互调用,包括入口方法(即bytecode-to-native)和出口方法(即native-to-bytecode),并在入口和出口之间建立关系映射。
Step 2: NativeDiscloser对Native代码调用图进行修剪,只保留从入口函数开始的子图;同时使用FlowDroid构建字节码调用图。
Step 3: JuCify首先对Native调用图进行转换以实现调用图的统一,之后再添加入口方法边与出口方法边以实现字节码调用图与Native调用图的连接。
(2) From CG to Jimple for a Unified Model
在构建统一的调用图模型后,JuCify还会将字节码与Native代码转化为Jimple表示,并利用FlowDroid进一步获得相关信息(如CFG)来执行静态分析。
作者对Android应用中使用Native代码的情况以及JuCify的有效性进行了评估。
RQ1: Native code usage in the wild
如表1所示,作者利用AndroZoo来构建良性应用数据集和恶意应用数据集。结果表明,Native代码在Android应用中十分普遍,且在恶意软件中更为常见。
RQ2: Bytecode-Native Invocation Extraction Comparison
如表2所示,作者将NativeDiscloser与Native Sanner进行比较。结果表明,针对字节码与Native代码之间相互调用的提取,NativeDiscloser具有更高的准确率和召回率,并且能够提供额外信息(入口函数和出口函数之间的映射)来用于后续统一的调用图的生成。
RQ3: Can JuCify boost static data flow analyzers
作者进一步评估JuCify是否能够有助于高级静态分析(如数据泄露检测),主要针对4个案例(Getter、Leaker、Proxy、Delegation,如图3所示)。测试结果如表3所示,在应用JuCify后,FlowDroid性能显著提高,能够检测出所有数据泄露。
RQ4: JuCify in the wild
JuCify有助于发现新路径,它在良性应用和恶意软件中增加了5-6%的新节点,从而增强了构建的调用图。其中,良性应用倾向于使用bytecode-to-native调用,而恶意软件则使用更多的native-to-bytecode调用来执行恶意行为。
JuCify有助于数据流分析,其构造的增强的调用图能够帮助静态分析工具发现更多的Android应用敏感数据泄露问题。
原文链接:
https://jacquesklein2302.github.io/papers/2022-JuCify-ICSE-Samhi.pdf
项目主页:
https://github.com/JordanSamhi/JuCify