文献笔记《AppIntent - Analyzing Sensitive Data Transmission in Android for Privacy Leakage Detection》

文献引用:Yang Z, Yang M, Zhang Y, et al. Appintent: Analyzing sensitive data transmission in android for privacy leakage detection[C]//Proceedings of the 2013 ACM SIGSAC conference on Computer & communications security. ACM, 2013: 1043-1054.


亮点:通过区是否由用户意愿产生的数据传播来判别是否隐私泄露,研究行为触发,是最近看到比较吸引人眼球的文章,感谢 绿柚子 友情助攻


文章概要

很多研究采用污点分析的思路(static taint , dynamic taint)用来分析敏感数据的传播,对于大多数分析都能判断哪些敏感数据流出。但这些数据的流出并不一定就表示隐私数据的泄露,这篇文章最大的亮点在于提出一种思路: 根据用户对这些敏感数据流出是否知情,来判断是否存在隐私泄露。同时提出了一种方法应用于隐私数据泄露的检测,简单的说,经过自动化测试之后,当发生敏感数据传播时,如果这些传播是由一系列符合逻辑的操作触发的,那么这些敏感数据的传播就不算隐私泄露,否则认为是隐私泄露。本文主要工作更多在做行为触发。


现状不足

本文需要根据static taint解析出导致数据传播的路径,并从中提取出触发这一执行路径的输入序列,因此文中还是离不开符号执行(Symbolic execution),该技术被广泛用于测试样例的产生(test case generation)、模糊测试(fuzz testing)、安全漏洞的检测(security flaws detection)。
但是符号执行面临的难点在于:对于没有用户交互的程序符号执行效果良好,但对于用户交互的程序则变得困难(路径激增),目前处理GUI的符号执行主要采用随机策略牺牲了代码覆盖率。

基础知识

Android系统中主要有3中事件: 系统回调周期状态(由于回调是无止境、没有边界的因此符号执行对于此也有很大的难点需要克服)、 GUI事件系统事件


 
OnStart->OnPause->OnResume->OnPause->OnResume..等循环 对于传统的符号执行的搜索空间将无穷大

而对于GUI事件,由于是在APP 运行状态下由主线程获取事件输入,因此事件所触发的行为是依据顺序的。


整体架构

由于Android更多在于UI交互,并且用户交互也是判断敏感数据泄露的关键,因此本文提出一种方法 eventspace constraint guided symbolic execution。基于此方法,实现了AppIntent,主要有一下目标:
1.产生关键的导致app敏感数据传播的输入(及核心产生行为触发)
2.克服传统符号执行代码覆盖率不足的缺点,在更多的代码覆盖率下确保较低的误报率
3.提供一个直观的工具用于分析人员确定是否发生隐私泄露

系统架构如下:



1.eventspace constraint guided symbolic execution
采用static taint进行预处理并提取出所有可能导致数据传播路径相关的事件,接着构建事件空间图使用该图引导符号执行提取关键的输入。
2.动态分析平台
主要采用InstrumentationTestRunner对APP进行重打包后触发相关事件行为

核心(eventspace constraint guided symbolic execution)

事件空间图主要元素包括三类:
1.关键事件(粗线的点):定义为其处理函数中,至少有一条指令包含在给定的数据传播路径中的事件。
2.必要事件(细线的点):定义为是关键事件的先决事件,并且其指令不包含数据传播路径中。(一般为包含关键事件activity的生命周期回调或最终导致关键事件触发的组件的事件)
3.有向边表示两则的先后关系。

关键事件的提取

针对数据传播路径中包含的指令,通过分析其前后的调用关系,寻找到可能导致该指令触发的关键事件。
例如如下SMS应用发送短信简易流程图


提取出关键事件为:
<PushReceiver, onReceive>, <MessagePopup,OnStartjOnNewIntent>, <MessagePopup, OnClick>, and
<ComposeMessageActivity, OnClick>.但是由于Android GUI与很多布局有关,而之前这些关键事件的提取只涉及到了对应的处理函数而并没有指明对应的布局,这样一来并不利于指导符号执行。本文还构建一个程序依赖关系图,从图中switch中提取分支视图,例如i3 和 i4 中的view为v1.其他GUI事件也如此方法提取出来。

必要事件的提取

正如前面说的Android有自己特有的执行模型,例如OnResume()函数在APP没有被OnCreate()和OnStart()之前是不可能被调用的,因此,必要事件的提取就是为了补充这些内容(一般为回调生命周期函数以及触发包含关键事件的activity的发起组件例如intent的发起者)-目前的AppIntent主要工作只是针对intent.


经过以上的提取,整个事件空间图已经就绪,接下来符号执行需要的工作就是从这事件空间图中获取触发数据传播的事件序列


引导符号执行



算法流程就如上图,首先P代表了最后一个关键事件触发之前的事件集合,C代表了能够到达该执行点的数据

经过这样的符号执行后,原来的事件空间约束图变为:



动态平台分析

提供事件作为输入
动态平台主要利用了Android InstrumentationTestRunner ,在之前分析得出的事件序列基础上,产生出特定的测试样例,对于一些事件输入,包括点击,位置变化,但是由于IR技术缺陷,并不能处理运行时事件包括打电话等。对于没有view来约束的,将从manifest随机选择view为事件提供的上下文。

提供数据作为输入
由符号执行产生的数据输入很多是GUI相应元素的text。但是由于IR自身不能提供网络数据测试,因此对于网络输入AppIntent不能触发。

对GUI事件激活的view要进行显著提示
由于view是GUI界面都子元素,因此,view能够提供相应的上下文信息表明用户正处于交互状态

对于敏感数据传输也有要进行显著提示
敏感数据传输是,我们必须对进行提示,用来通知分析者目前正有信息被传输,更多是由于泄露造成的(原来APP的数据传输并不是有用书有意识触发的)

性能分析

较传统符号执行更高效
相比于TaintDroid能够明细的区分出隐私泄露
(从中也得到一些特征:对于ID 电话号码的数据外传是普遍的,但是却基本都没有通知用户;一些APP会把一些相关数据写入logcat,这么一来会导致潜在的泄露发生)
耗时分析等


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值