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

AppIntent: Analyzing Sensitive Data Transmission in Android for
Privacy Leakage Detection

APPIntent:分析敏感数据传播在Android设备中隐私泄露的检测

文献引用: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.


【概要】

传统的隐私泄露检测方法主要是关注是否有敏感数据从Android手机中传播出去,但是敏感数据的传播并不一定表示隐私泄露,因此文章提出一个更好的判断标准:根据确定是否是用户意图导致敏感数据的流出来判断是否存在隐私泄露。而为了帮助分析人员更好地确定数据传输是否出于用户意图,开发人员提出了AppIntent应用分析框架。该工具通过改进的符号执行(Event-space constraint guided symbolic execution)分析出可能导致敏感数据传输的数据输入和事件输入,再利用这些输入在动态程序分析平台上控制应用程序执行,通过呈现对应的敏感数据传输的图形界面操作的顺序帮助分析人员做出判断。最后文章通过大量真实的app对该工具的有效性进行评估。

【问题与解决方案】

问题:敏感数据传输并不一定代表隐私泄露,更好的判定标准应该是根据是否是用户意图导致的敏感数据传输来进行判断,而主要问题就是如何确定一个传播是否是用户意图导致的,即如何判断手机是否隐私泄露?

解决方案:

提出了名为AppIntent的应用分析框架,该框架分为两个部分:(1)事件空间约束指导符号执行 (Event-space constraint guided symbolic execution)

(2)动态程序分析平台

该框架是一个自动化工具,能够将获取的数据传输的上下文信息以GUI操作序列展示给分析人员(利用符号执行分析出导致数据传输的数据输入和事件输入,再利用这些输入在动态程序分析平台上控制应用程序执行实现可视化),帮助分析人员判断触发的事件是否符合逻辑。具体实现是利用DED将Android的DEX、APK文件反编译成Java字节码,然后在soot上实现事件空间约束图的提取,即静态分析,接着在JavaPathfinder上实现指导符号执行,另外用Choco求解器生成相应的数据输入,最后在InstrumentationTestRunner上实现动态分析平台。

【方案中存在的难点】

1、符号执行面临的难点:

1)虽然对于无交互的程序符号执行效果较好,但对于用户交互的程序则会面临路径爆炸问题

2)传统的符号执行可能由于回调函数调用的不确定性和无界性,比如采用执行路径为:OnStart->OnPause->OnResume->OnPause->OnResume->...导致符号执行无法停止



2、传统的解决方法:主要采用随机调度策略牺牲了代码覆盖率。

3、AppIntent中的解决方法:提出了一个新的符号执行技术event-spaceconstraint guided symbolic execution,先采用静态分析提取出可能导致敏感数据传输的执行路径,然后利用这些路径作为基础生成事件空间约束条件,最后符号执行只考虑符合约束条件的路径,因而有效的限制了搜索空间。

【AppIntent的系统架构】

1、APPIntent的目标:

   1)产生导致能够导致敏感数据传输的关键输入

   2)保证较好的代码覆盖率的同时确保较低的报错率

   3)为分析人员提供一个易于理解的工具用于确定是否发生隐私泄露

2、系统架构


   1)Event-spaceConstraint Guided Symbolic Execution:采用静态污点分析进行预处理并提取出所有可能的数据传输路径和相关事件,然后构建事件空间约束图,接着利用该图指导符号执行提取出关键的输入。

  ●构建事件空间约束图:

  a)  提取关键事件:反向遍历调用图(引入假阳性,但是在符号执行时会消除一部分)。如下图所示,从i2指令反向遍历调用图,能够得到两个关键事件OnStart()和OnNewIntent()。


         提取出所有的关键事件,得到如下图所示的关键事件链:



         存在的问题:只涉及到了对应的处理函数而没有view的信息,不利于指导符号执行

         解决方法:构建程序依赖图,为view参数提取分支条件,如i3 和 i4 的view为v1

  b) 提取基本事件:先补充触发顺序补充生命周期回调函数,然后在活动图的帮助下补充导致启动包含关键事件的activity的先决组件以及该组件的生命周期回调函数。执行结果如下所示:



  ●指导符号执行:通过事件空间约束图获取触发数据传播的事件序列。而符号执行的算法如下图所示:



   其中P代表了最后一个关键事件触发之前的事件集合,C代表了能够到达该执行点的数据。该算法采用Dijistra算法提取最短路径。经过这样的符号执行得到如下图所示:



   2)DynamicProgram Analysis Platform:主要采用InstrumentationTestRunner对APP进行重打包后,一步步触发相关事件行为,模拟人的操作。

 

【方案的不足之处】

1、  由于InstrumentationTestRunner不支持运行时事件和网络输入,所以AppIntent也不支持;

2、  不支持本地代码

3、  部分APP在DED上运行失败

【文章的贡献】

1、敏感数据传输并不意味着隐私泄露,符合用户意图导致敏感数据传输不是隐私泄露,反之为隐私泄露;

2、研发了event-spaceconstraint guided symbolic execution技术,有效的减少了事件搜索空间;

3、开发了动态程序分析平台,用于执行提取的数据和事件输入,并还原出导致敏感数据传输的UI操作


PS:这是本人第一次写博客,如果本人对于AppIntent的理解有误欢迎指出,我会及时更正,如有不理解的也欢迎讨论交流~


猜你喜欢

转载自blog.csdn.net/qq_22408539/article/details/77678148