教材介绍 配套实验

    感谢您关注我们的《移动安全》教材。如果您想要相关资源以及答案,请将您的姓名、教育邮箱、学校及学院信息发送至 xxxxx@xxx.com。

    请您放心,我们承诺将严格保护您的信息安全。感谢您的信任与支持!



Lab8 隐私泄露检测

一、实验目标

1. 熟悉并理解通过逆向工程技术进行污点源、污点汇的识别;

2. 了解移动应用的隐私泄露流程,利用静态污点分析技术辅助进行自动化分析;

3. 深入认识开源安卓应用静态分析工具FlowDroid,具有初步的定制化FlowDroid能力。

二、前置准备

1. 理论知识学习

进行本Lab前请先完成教材第5章和第9章的学习,主要包括5.1.1节熟悉Jadx逆向工具使用,9.2节污点分析技术的相关概念和隐私泄露检测的基本方法。此外,请参考附件1学习静态程序分析引擎Soot的框架和基础数据结构。

2. Soot

Soot 是一款Java和Dalvik字节码应用程序分析框架,提供了将应用转换为中间表示的反编译器以及一系列开箱即用的程序分析工具,例如指针分析、调用图构建等。Soot向用户提供了一系列数据结构用于分析应用中的类、属性、方法、基本块等基本结构,例如SootClass、SootField、SootMethod等。有关Soot的更多细节,请读者参考附件1深入了解。

3. FlowDroid

FlowDroid是一款开源安卓应用静态污点分析工具,基于静态程序分析框架Soot增加了针对分析Android应用的分析功能以实现更加精确的污点分析。具体而言,FlowDroid精确建模了安卓应用生命周期、事件回调等特性,以此构建一个虚拟的应用入口方法用于程序分析。在此基础上,FlowDroid开发了调用图构建、污点分析等重要功能。在本次实验中将会使用FlowDroid完成对示例应用的入口方法创建、调用图构建和污点分析。

4. 实验环境

• Jadx逆向工程工具

• Java开发环境:安装IDEA Community并且使用Java 18 SDK完成实验

• 定制化FlowDroid:本次实验中提供了一个经过修改的Flowdroid jar包,请通过gradle工具导入这一软件包后完成实验

三、任务描述

本实验提供了一个目标apk文件,其中包括不同类型的三条隐私泄露数据流。在实验过程中,需要逆向分析并基于FlowDroid自动化检测隐私数据流。

具体而言,本实验分为三个任务:

1. 基于教材第九章对隐私泄露的介绍,使用Jadx通过逆向工程分析应用中的隐私泄露数据流

2. 熟悉安卓应用静态污点分析框架FlowDroid,利用FlowDroid实现对安卓应用的调用图构建并进行遍历

3. 补全定制化FlowDroid污点源、汇识别功能以完成污点分析

本实验在附件4中提供了待补全的示例代码框架lab9_demo.zip,读者需要补全示例代码框架完成本次实验的第2、3项任务

任务1 使用Burp Suite进行流量分析

1. 任务说明:本次实验提供的目标应用存在3条隐私泄露数据流。在附件4中提供了污点源、汇配置文件(MySourcesAndSinks.txt)用于污点分析,读者需要通过逆向工程提取隐私泄露数据流的污点源、汇并写入配置文件。泄露数据流提示信息如下:

• 数据流1:用户通过文本输入的密码经由SMS短信发送泄露

• 数据流2:用户设备识别码IMEI过组件间通信被泄露到日志记录中

• 数据流3:用户地理位置通过LocationListener的回调函数被泄露到日志记录

2. 逆向分析任务:使用此前学习到的逆向工程技术提取污点源、污点汇、隐私泄露数据流。需要注意的是,对于基于组件间通信的隐私泄露数据流,需要以获取Intent以及启动组件间通信的关键API作为污点源、汇分析,才能正确分析到隐私泄露。请在实验报告中按照此样例结构组织:

任务2 实现Burp Suite扩展

1. 任务说明:本任务的目的是熟悉安卓应用调用图结构以及学习相关SootMethod接口。本任务的目标是构建并遍历目标应用的调用图。目标应用由3个活动(Activity)、1个广播接收器(Broadcast Listener)和3个数据类构成。请读者参考附件2中的文档实现本任务

2. 编码任务:编写FlowDroid分析程序完成附件3提供的示例应用evilApp.apk的分析,实现以下功能:

(1)利用FlowDroid的接口构建目标应用的调用图

(2)基于Soot的接口和CallGraph对象,补全Runner.java中的traverseCFG方法实现广度优先遍历全部方法调用(SootMethod类)。下图所示是MainActivity组件的部分调用图

image-20240428113637512

任务3 FlowDroid污点源汇补全与隐私泄露分析

1. 任务说明:本次实验中所提供的FlowDroid缺失了污点源、汇的识别功能,因此本任务的核心即补全FlowDroid中污点源、汇识别模块,这一任务的目的是通过参与污点分析的部分实现加深对污点分析技术进行隐私泄露检测的理解。这一任务包括3步:

1. 请根据任务1逆向所得到的三条隐私数据流的污点源、汇正确完善污点源、汇配置文件(MySourcesAndSinks.txt)。请各位读者学习附件2了解污点源、汇的格式后进行实验

2. 请读者补全MySourceSinkProvider实现污点源、汇的加载和解析。代码框架中提供了一个待补全的模板类代码(MySourceSinkProvider.java)用于实现FlowDroid对污点源、汇的实现和加载

3. 由于FlowDroid自身分析能力的限制,将会导致过污染现象,在本次实验中请在实验报告中进行对应的验证和分析

2. 编码任务: 补全代码使MySourceSinkProvider类能够根据提供的配置文件正确地加载和识别污点源和污点汇,分别完成以下三部分

1. 参考附件2中污点源、汇格式补全配置文件lab7/res/MySourcesAndSinks.txt

2. 请补全MySourceSinkProvider类的parseMethodparseField方法实现对污点源、汇的加载和解析

3. 对污点分析结果进行验证和分析,并在实验报告给出你的分析结果

四、结果提交形式

1. lab8_code.zip:本次实验中的实验代码,包括实现任务2和任务3的功能代码

2. lab8_result.zip:本次实验中的实验结果,包括任务2和任务3的输出结果

3. lab8.docx:本次实验的实验报告,包括实验环境配置、实验步骤、实验结果和实验心得等内容

五、评分标准

1. 完成任务1(15%):每个隐私数据流5%评分

2. 完成任务2(25%)

• 正确构建示例应用evilApp.apk的调用图(10%)

• 广度优先遍历Apk中的全部方法调用,遍历结果与参考答案一致(15%)

3. 完成任务3(30%)

• 从配置文件中正确读取污点源、汇信息(5%)

• 正确补全parseMethodparseField函数,需要正确识别并加载所有的隐私泄露数据流(20%)

• 对示例应用敏感数据流进行人工验证和误报分析(5%)

4. 实验报告(30%):

• 内容完整性和原创性(20%)

• 报告包含实验目的、详细步骤、结果、总结思考等关键部分

• 代码设计遵循代码规范,有必要的解释说明

• 报告撰写和表达(10%)

• 报告格式规范,语言表达清晰

• 能够适当使用图表等辅助说明报告内容

六、附件内容说明

1. soot_survivors_guide.pdf : Soot框架的介绍文档

2. FlowdroidTips.zip : 基于代码使用Flowdroid的参考文档

3. evilApp.apk : 分析的示例安卓应用,包含3条隐私泄露数据流

4. resource.zip:本次实验中使用到的资源、示例输出和示例代码

地址:上海市杨浦区淞沪路2005号复旦大学江湾校区二号交叉学科楼六楼、七楼              复旦大学系统软件与安全实验室              联系邮箱:wanqi_zhang@fudan.edu.cn