现有Android ICC静态分析工具总结

Android应用程序中的组件之间的交互是非常复杂的,因此,对于安全性的保证也变得十分重要。在当前的安全环境下,Android应用程序的污点分析和ICC静态分析是非常重要的技术。因此,本篇博客将介绍目前主流的Android ICC静态分析工作。

1. FlowDroid

FlowDroid是第一个高度精确的Android应用静态污点分析框架,它采用了全局分析的方式,对应用程序中所有组件进行分析。FlowDroid的敏感性依赖于额外的污点分析,这也导致了cg中方法调用之间数据传输跟踪不精确的问题。

2. Amandroid

Amandroid继承了FlowDroid,采用了组件级模型+ICC来替代整个应用程序级模型。它通过dummyMain来捕获Android允许的所有可能的生命周期方法调用序列,并在此基础上拓展了组件间的控制流。但是,它无法捕捉组件间通过intent.putExtra()传播的数据流,需要对android特有的数据类型进行建模,并跨组件边界地进行数据流分析。

3. Epicc

Epicc介绍了一种推断ICC规格的新技术,旨在解决应用程序中Intent目的地的问题。它通过按需进行的流敏感分析,在一大批市场应用中证明了其可行性。但是,它无法完全解决ICC的上下文问题。

4. IC3

IC3基于Epicc的基础上,介绍了复合MVC常数传播问题,并开发了第一个通用的求解器。它通过健全的字符串分析,提供了一个有效的可扩展性和精度的权衡,可被灵活地应用于设计Android中的新型组件间分析。

5. IccTA

IccTA将FlowDroid和IC3结合起来,试图识别敏感的组件间和应用间信息流。它是第一个试图通过代码无缝连接Android组件的方法,以执行基于ICC的静态污点分析,用于健全和精确的ICC链接和泄漏的检测。

6. StoryDroid

StoryDroid针对每一条控制流转移信息进一步分析,判断其来源是activity本身还是fragment还是内部类,从而得到拥有更详细信息的ATG。它通过两种方式来收集fragment,并利用启发式规则对业务内部的逻辑进行判别与总结。

7. RAICC

RAICC关注于应用中的非典型ICC(AICC),通过对AICC做预处理,使得现有的ICC分析工具可以分析AICC,让CG更完整。

8. ICCBot

ICCBot通过将一个完整的ICC过程从Intent的角度划分为创建、属性修改与发送,并建立其参数间的依赖关系,最后使用逆向的数据流分析得到该ICC的实际发起组件以及方法调用的轨迹。

代码依赖

实际上,以上提到的分析工具间在代码上都存在着密切的联系,可以用以下思维导图来诠释:

Workflow

总结

以上是目前主流的Android ICC静态分析工作。这些工具的发展能够大大提高Android应用程序的安全性,但是,由于Android应用程序非常复杂,仍有许多挑战需要克服,如对组件之间的交互进行准确建模等问题。期待未来的工具能够更加准确地分析Android应用程序的安全性,为用户提供更加安全的使用环境。