一句话:首次度量 Android 静态分析调用图遗漏动态执行方法的普遍性,并揭示高精度与高不健全相关。
静态分析理论上健全,但实现可能漏析程序代码,从而威胁结果有效性。本文首次度量此类遗漏的普遍程度:对 1000 个 Android 应用运行 13 个静态分析工具与动态分析,将动态执行但静态未捕获的方法视为不健全。结果显示,平均 13 个工具漏掉 61% 的动态执行方法;基于外部框架的应用尤其困难;调用图构造精度高往往意味着不健全程度高;现有方法(如 DroidRA 处理反射、EdgeMiner 系统捕获回调)均未显著改善健全性;入口点方法建模也挑战调用图构造并危及健全性。
Static analysis is sound in theory, but an implementation may unsoundly fail to analyze all of a program's code. Any such omission is a serious threat to the validity of the tool's output. Our work is the first to measure the prevalence of these omissions. Previously, researchers and analysts did not know what is missed by static analysis, what sort of code is missed, or the reasons behind these omissions. To address this gap, we ran 13static analysis tools and a dynamic analysis on 1000 Android apps. Any method in the dynamic analysis but not in a static analysis is an unsoundness. Our findings include the following. (1) Apps built around external frameworks challenge static analyzers. On average, the 13 static analysis tools failed to capture 61% of the dynamically-executed methods. (2) A high level of precision in call graph construction is a synonym for a high level of unsoundness. (3) No existing approach significantly improves static analysis soundness. This includes those specifically tailored for a given mechanism, such as DroidRA to address reflection. It also includes systematic approaches, such as EdgeMiner, capturing all callbacks in the Android framework systematically. (4) Modeling entry point methods challenges call graph construction which jeopardizes soundness.