

1. 清华大学 软件学院, 北京 100084;
2. 中国信息安全测评中心, 北京 100085
收稿日期:2016-12-10
基金项目:国家重点研发计划(2016YFB0800901)
作者简介:沈科(1991-), 男, 工程师
通信作者:叶晓俊, 教授, E-mail:yexj@tsinghua.edu.cn
摘要:围绕移动应用程序的用户行为意图分析,结合后台应用程序接口(application program interface,API)调用和前台应用图形用户界面(graphic user interface,GUI)状态,该文提出一种在移动应用(App)运行时产生的多元时间序列数据上识别应用行为模式的方法,给出一个包括Android应用程序静态预处理、动态监控运行和行为意图推测3阶段的不良应用程序用户行为推测框架。介绍了基于Android平台API调用分析的应用行为意图动态推测系统原型实现技术,选取代表性应用案例验证了该文提出的不良行为模式识别算法的有效性,并通过实际应用剖析了基于API调用分析推测用户行为的实用性。
关键词:数据安全Android应用应用编程接口(API)调用程序行为动态分析
Android App behavior-intent inference based on API usage analysis
SHEN Ke1, YE Xiaojun1


1.School of Software, Tsinghua University, Beijing 100084, China;
2.China Information Technology Security Evaluation Center, Beijing 100085, China
Abstract: An application behavior intention analysis is presented which analyzes the application program interface (API) usage in the background and the graphic user interface (GUI) state transitions in the foreground of the target App with behavior pattern recognition of the multivariate time series data at runtime. An API usage analysis based behavior intent inferring prototype was developed for Android Apps with static preprocessing, dynamic monitoring and behavior intent inference. This paper examines the effectiveness of the prototype on typical mobile Apps via case studies and validates the practicability and operability of the approach through real-world App profiling.
Key words: data securityAndroid applicationAPI usageapplication behaviordynamic analysis
Android平台凭借开放性和灵活性吸引了众多移动应用开发者,也滋生出很多侵害用户权益的不良意图应用(简称“不良应用”)。不良应用常伴随特定API的滥用,且多发生在用户不知情的情况下。首先,敏感数据可被系统调用等平台API直接访问得到,关注这类API调用的应用行为模式可省却数据流图中不必要的路径分析,且比关注数据内容更有效;其次,第三方API本质是供App调用的高度封装的函数,这类API的调用直观反映应用程序使用第三方服务过程;最后,监控用户在App上的交互是至关重要的,即关注图形用户界面(graphic user interface, GUI)操作和状态变化,对比应用后台行为,筛出不符合用户操作和意图的可疑行为。
安全领域一直致力于App应用恶意行为检测技术研究[1-3]。AppIntent强调从数据转移检测判断App程序行为是否符合应用用户意图[4];AsDroid关注App程序行为和用户交互的对比,但只是静态分析特定API相关的顶层函数和GUI组件源程序,进行语义层面的匹配[5]。行为分析[6-8]和API分析[9-10]方法主张程序行为模式比数据流更能揭示应用程序存在的恶意性,而基于监控机制采集的API使用情况能够反映App应用的行为模式。
本文提出一种基于App运行时的API调用分析应用行为意图推测方法(简称“ABI方法”)。该方法修改App应用安装包(Apk)文件,以提取应用内部信息并污染特定API,这样在运行时可动态抽取API调用的时序数据和上下文信息。本文给出了用于构造App应用行为的多元时间序列模型[11]和运行不良行为模式识别相关算法以推测App应用的行为意图,如典型的周期API调用、游离API调用等。通过典型案例的不良行为研究和复杂应用行为模式识别实验,验证了本方法对App运行时API使用的分析能力和行为意图的推测能力。
1 应用行为意图假设一个应用引导用户输入个人信息并点击某个按钮。如果按钮上的提示信息是“保存”,则可能是将数据保存在App终端设备或远程服务器;如果按钮文字是“发送”或“同步”,则表示数据将上传到服务器。然而此类按钮通常只显示为“确定”,致使用户无法确定App在GUI界面背后的行为。因为App可能设有“自动同步终端数据到服务器”的开关选项,或在安装时申请了特殊权限并得到了用户授权,导致Android平台自发地上传终端数据,不管用户是否知悉或授权。这类在移动应用领域十分普遍、具有不确定性和用户无意识的应用程序行为有可能是良性的,也可能是有危害的。
相关的恶意应用检测方法基本集中在敏感数据泄露方面[1-4]。不良应用行为未必涉及数据,如自启动的活动或意图,调用敏感的系统API而无需用户输入,其行为模式可能是复杂和不确定的。
本文将不良应用定性为超越用户意识和意图的特定API滥用。从污点分析的角度,污染源、污点传播和污点触发三者构成数据泄露检测的关键。良性应用和不良应用的区别不在于数据污染源,而在于传播过程和触发函数。在App应用运行时追踪API调用,并结合用户交互和应用的GUI状态转移,则能够覆盖污点的传播和触发过程,对分析人员推断应用行为意图有直接帮助。
2 应用行为意图推测方法本文提出的方法包含3个阶段:1)静态分析和插桩,即从Dalvik字节码中提取代码结构数据,执行自动插桩;2)多元时间序列数据生成,即跟踪API调用,实时捕获GUI状态并记录用户交互数据;3)应用行为意图推断,即接收监测器生成的多元时序数据并进行意图推测,推测可能的非用户意图行为。
2.1 字节码层面的污点自动插桩图 1展示了静态分析和插桩阶段的处理架构。给定一个Apk文件,插桩工具链首先对其解包、反编译,然后提取代码结构数据,在字节码层面植入污点输出器后重新打包和签名。此外,本文调研了Java和Android平台的敏感的系统API,并根据功能类别和引入频率统计了部分第三方API,为Android平台应用程序的API分析构建了一个API插桩策略库。
![]() |
图 1 静态分析预处理流程 |
图选项 |
2.1.1 插桩工具链工具链包含3部分:工具Apktool用于解包、反编译、重编译和重打包Apk文件[12];插桩器用于提取代码结构数据、执行字节码插桩以污染目标API;签名器用于给二次打包的Apk文件有效的签名,使篡改后的Apk能够安装运行。
插桩工具链需使App应用的字节码插桩自动化和高度可用。
1) 自动插桩:在静态分析时,插桩器创建一个外部类,并根据API污点输出器的需要,动态地添加负责特定输出的静态成员函数。这一方法有效避免了Dalvik字节码修改工作中的寄存器分配问题。
2) “反签名验证”措施:签名校验能够得到当前运行包的签名并与应用官方的签名值比对,发现异常签名则执行条件语句。为了绕过签名验证,签名器利用了Android的“Master Key”漏洞,将篡改后的Dex文件嵌入原Apk文件。
插桩器在扫描目标路径下所有Smali文件的过程中仅维护轻量级的局部上下文数据(如API的Hash表),兼顾插桩的准确率和效率。
2.1.2 代码结构提取插桩器还负责搜集应用程序信息、字节码结构数据和包路径统计信息。插桩器抽取字节码的拓扑结构数据,如“包-类-函数”关系和“类-API”映射,从中提取出代码片段的标识和依赖,用于准确匹配目标API、植入污点输出器。插桩器还构建一个包路径森林,即所有源码的路径树的合并(实验选择了740个应用),把所有路径和子路径都当作节点保存其引用频次,用于统计被引入的第三方库、构建针对第三方API分析的插桩策略库。
2.1.3 API收集和污染根据API功能和引用频次构建API插桩策略库有2个作用:1)针对目标应用中可追踪的API,提供分析建议和插桩策略;2)将GUI视图事件打上污点,当GUI操作触发相应事件处理函数时,插桩器能通过日志为自动GUI测试创造条件。
给定一个目标API,插桩器在每个调用指令处插入一个输出器,在运行时输出API的标识、实参值等信息。例如,表 1显示了为DexClassLoader构造函数植入的输出器。第5行是原调用指令,寄存器v3指向一个DexClassLoader实例,寄存器p1、v1、v4、p2指向4个实参。第1—4行是插桩器自动植入的字节码。第1行调用了一个外部类的静态成员方法,输出目标API标识信息,且目标API的编号为100;第2—4行输出3个实参的值,这3个参数都是字符串类型。
表 1 DexClassLoader构造函数的污点植入
1 | invoke-static{}, Lcrack; ->logApi100()V |
2 | invoke-static{p1}, Lcrack; ->logStr(Ljava/lang/String; )V |
3 | invoke-static{v1}, Lcrack; ->logStr(Ljava/lang/String; )V |
4 | invoke-static{v4}, Lcrack; ->logStr(Ljava/lang/String; )V |
5 | invoke-direct{v3, p1, v1, v4, p2}, Ldalvik/system/DexClassLoader; -><init>(Ljava/lang/String; Ljava/lang/String; Ljava/lang/String; Ljava/lang/ClassLoader; )V |
表选项
对GUI视图事件的污染也是插桩器自动执行的。通过对视图事件的追踪,动态监测器能够从日志中识别用户操作触发的GUI事件,从中筛选出有效的用户交互,允许维护一个GUI自动运行的反馈系统。
2.2 多元时间序列数据生成图 2为动态监测器的运行图:GUI运行器持续接收捕获器得到的App顶层窗口信息和日志处理器得到的GUI事件日志,向运行中的设备发送GUI输入。最终监测器将收集的多元时间序列数据转给推测引擎进行App应用行为分析。
![]() |
图 2 动态监测运行示意图 |
图选项 |
为提取多元时间序列数据,动态监测器负责收集API调用日志和采集GUI状态变化。这一阶段,需将Android Logcat流重定向并解析,同时实时捕获目标应用的状态。
通过适当的筛选,监测器可获得Logcat流数据,获得包含插桩器植入的输出器所输出的被污染调用的追踪数据,包括:1)目标API的调用记录;2) API调用的上下文信息,包含污点触发函数的参数值;3)视图事件处理器的调用记录,显示GUI事件的执行情况。监测器用一个较短的时间间隔循环采样当前设备的顶层窗口,获悉GUI状态的变化。每条API追踪数据记录和每个GUI采样都被打上当前系统时间戳,使得不同的序列数据成为多元的时间序列,合并进入基于多元时间序列的推测引擎。
2.3 应用行为意图推测监测器将API调用、用户交互、GUI事件和顶层窗口4个时间序列传入推测引擎,经过必要的数据预处理,推测引擎建立多元时间序列模型,运行行为模式识别算法,最终推测应用的行为意图。
2.3.1 不良行为模式定义给定时序数据格式,不良行为检测算法是可扩展的,例如可定义下列不良行为模式推测算法:
1) 周期性API调用,指在特定的时间间隔对某(些)API的重复调用。应用程序后台的周期性行为很可能是有特殊意图的定时循环任务。
2) 游离性API调用,指未被有效用户交互行为的反应时间所覆盖的API调用。如果一个API的调用常发生于用户意图范围外,此种行为存在较大的违背用户意图的可能性。
3) 可疑网络加载,如果网络请求地址域名不符合目标应用的官方域名,且也不在域名白名单内,则该请求是可疑的。对于文件动态加载[13],如果被加载文件是可执行文件,即文件名后缀是so、elf、dex、jar、apk,则这个文件加载行为是可疑的。
2.3.2 应用行为模式识别推测引擎首先需要清洗动态监测器的序列数据,以得到完整可用的多元时间序列模型(见图 3)。
![]() |
图 3 时间序列数据处理算法 |
图选项 |
监测器生成的序列数据含有部分噪声数据,例如一些GUI操作可能不触发任何事件,或者1个GUI操作伴随有GUI事件但当前窗口不属于目标应用。原始的用户交互序列、GUI事件序列、顶层窗口信息序列需要在时间线上对齐、降噪、合并,得到新的序列来代表有效的用户交互行为。在时间序列数据处理算法1中,原始的序列数据经过处理后筛选出了有效的用户行为。Qi、Qe、Qw和Qu基本反映了目标应用窗口中(在反应时间内)触发GUI事件的用户行为。对于Qi中的一个输入input,算法第6—11行在Qe中找到一个在input之后发生的足够邻近的事件event,第13—21行确保了input发生在目标应用的窗口内。作为算法1的更直观的理解,Qu可以认为是3个序列的交集:
${{Q}_{\rm{u}}}\subseteq {{Q}_{\rm{i}}}\cap {{Q}_{\rm{e}}}\cap {{Q}_{\rm{w}}}.$ | (1) |
![]() |
图 4 游离性API调用行为发现算法 |
图选项 |
对于每次API调用ac,首先将该API的总调用次数增加1,然后确定这次ac是否落在用户交互作用域内。用户交互作用域,即前文中的用户意图范围,是一个时间区间列表。用户交互序列Qu决定了这一时间区间列表中每个区间的位置,反应时间rt决定了时间区间的宽度。如果当前API调用ac没有落在作用域内,则增加该API的游离调用次数; 如果该API的游离调用次数与总调用次数的比值f′达到了系统定义的游离性API调用发生频率下限值f,则这次ac记录被系统认定为构成游离API调用行为。在实际实现中,f的值为0.5。
3 评估与讨论3.1 不良行为检测Anzhuoduanxin是一个短信管理应用[4]。实验选择一组API作为污染目标,包括短消息管理和Intent类的主要成员方法,然后执行撰写、发送短消息操作。图 5a显示所有目标API调用均落在用户交互作用域内。图 5b是运行时的API调用上下文,此处涵盖了GUI操作时输入的短消息文本、短消息接收者的手机号码。这2个图验证了该应用符合用户意图。
![]() |
图 5 案例应用运行时行为推测数据可视化 |
图选项 |
Mmreader129在VirusShare[14]数据库中被鉴定为广告应用性质。实验发现该应用存在一组周期性API调用行为,发送网络请求、获取广告数据,疑似广告应用。因为实验过程中未检测到GUI状态迁移以及相关GUI元素,Mmreader129很可能打开了不可见Webview用于加载广告。该第三方广告服务的接口地址是http://110.75.2.108/b,输出在上下文信息中。图 5c展示运行时部分多元时序数据,可见一组第三方API和网络相关的API被周期性地联合调用,周期约为150 s,证明该应用存在周期性API调用行为。
Waterfalleyes在VirusShare库中被鉴定为间谍软件性质[14]。在应用启动后,发现该应用会在没有用户行为的时间调用敏感API、自发启动Intent。图 5d展示了Waterfalleyes运行时的部分多元时序数据。根据该应用对Intent和getDeviceId API的不当使用,判定应用含有游离性API调用行为。
3.2 复杂应用实验实验选择曾遭Google Play下架的手机支付宝,剖析该应用中动态加载相关的复杂行为。
实验过程中与手机支付宝的交互分为3步:输入用户名密码并点击登录按钮,划过欢迎页面,点击底部标签栏切换标签页。日志显示支付宝高频调用目标API,与动态加载行为相关。实验发现支付宝启动后立即在极短时间内调用loadLibrary接口多达20次,随后约2 min内调用Intent构造函数发起新的意图多达443次。表 2展示了部分上下文数据,包含一个通过Intent下载文件的过程,且实验发现被下载的文件是jar后缀。下载并解压该文件发现文件结构与Apk文件相同,是可执行文件,说明手机支付宝在运行时仍会自行下载存在可疑行为的不良应用可执行程序。
表 2 手机支付宝运行时行为推测数据可视化
时间/ms | 类 | API | 参数 |
99 168 | Intent | <init> | |
99 168 | Intent | putExtra | hotpatch_swith.haotpatch |
99 168 | Intent | putExtra | isOnlyHotpatch |
99 168 | Intent | putExtra | isCloudFix |
99 168 | Intent | putExtra | ReleaseCode, 20160206183612 |
99 168 | Intent | putExtra | filePatch, /data/data/com.eg.android.AlipayFphone/files/hotpatch/20160206183612.jar |
99 168 | Intent | putExtra | md5, 96635bc6cd4771cce592b26c968aa434 |
111 992 | Intent | <init> | |
111 992 | Intent | putExtra | downloadUrl, https://r.alipayobjects.com/L1/71/10001/20000088/1_3_3_1511031817/_citycard-build-1_3_3_1511031817-nolog.jar |
111 992 | Intent | putExtra | downloadRequest |
111 992 | Intent | putExtra | filePath./storage/scard0/Android/data a/com.eg.android.AlipayFphone/files/com. alipay/android.phone.openplatform/downloads/ 20000088/1_3_3_1511031817.jar |
112 252 | Intent | <init> | |
112 252 | Intent | putExtra | downloadUrl, https://r.alipayobjects.com/L1/71/10001/20000088/1_3_3_1511031817/_citycard-build-1_3_3_1511031817-nolog.jar |
112 252 | Intent | putExtra | downloadRequest |
112 252 | Intent | putExtra | filePath./storage/scard0/Android/data a/com.eg.android.AlipayFphone/files/com. alipay/android.phone.openplatform/downloads/ 20000088/1_3_3_1511031817.jar |
表选项
4 结论本文围绕应用行为意图分析提出检测不良行为方法,即追踪并结合API使用、用户交互、GUI状态变化,通过多元时间序列数据分析应用行为模式、推测行为意图。设计并实现了一个基于API使用分析的Android应用行为意图推测系统原型,结合代码插桩和动态污点分析,监控用户和应用行为,通过API调用的时序数据和上下文信息检测API的异常使用行为。通过典型案例研究和复杂应用剖析,验证了原型系统对应用运行时的API使用分析能力和行为意图推测能力,证明该方法具有可行性。
参考文献
[1] | Arzt S, Rasthofer S, Fritz C, et al. Flowdroid:Precise context, flow, field, object-sensitive and lifecycle-aware taint analysis for android apps[J]. ACM SIGPLAN Notices, 2014, 49(6): 259–269. DOI:10.1145/2666356 |
[2] | Li L, Bartel A, Bissyande T F, et al. Iccta:Detecting inter-component privacy leaks in Android Apps[C]//Proceedings of the 37th ICSE. Florence, Italy:IEEE, 2015:280-291. |
[3] | Wei F, Roy S, Ou X, et al. Amandroid:A precise and general inter-component data flow analysis framework for security vetting of Android Apps[C]//Proceedings of the 2014 ACM SIGSAC. Scottsdale, AZ, USA:ACM, 2014:1329-1341. |
[4] | Yang Z, Yang M, Zhang Y, et al. Appintent:Analyzing sensitive data transmission in Android for privacy leakage detection[C]//Proceedings of the SIGSAC. Berlin, German, 2013:1043-1054. |
[5] | Huang J, Zhang X, Tan L, et al. AsDroid:Detecting stealthy behaviors in Android applications by user interface and program behavior contradiction[C]//Proceedings of the 36th ICSE. Hyderabad, India:ACM, 2014:1036-1046. |
[6] | Bayer U, Comparetti P M, Hlauschek C, et al. Scalable, behavior-based malware clustering[C]//Network and Distributed System Security Symposium. San Diego, CA, USA:NDSS, 2009:8-11. |
[7] | Burguera I, Zurutuza U, Nadjm-Tehrani S. Crowdroid:Behavior-based malware detection system for Android[C]//Proceedings of the Security and Privacy in Smartphones and Mobile Devices. Chicago, IL USA:ACM, 2011:15-26. |
[8] | Jang J W, Yun J, Woo J, et al. Android-profiler:Anti-malware system based on behavior profiling of mobile malware[C]//Proceedings of the 23rd WWW. Seoul, Korea:2014:737-738. |
[9] | Yan L K, Yin H. Droidscope:Seamlessly reconstructing the os and dalvik semantic views for dynamic Android malware analysis[C]//USENIX Security Symposium. Bellevue, WA, USA:2012:569-584. |
[10] | Lantz P. Droidbox:Dynamic analysis of Android Apps[EB/OL].[2017-04-24]. https://github.com/pjlantz/droidbox. |
[11] | Hamilton J D. Time Series Analysis[M]. Princeton: Princeton University Press, 1994. |
[12] | Winsniewski R, Tumbleson C. Apktool[EB/OL].[2017-04-24]. http://ibotpeaches.github.io/Apktool/. |
[13] | Zheng M, Sun M, Lui J. Droidtrace:A ptrace based Android dynamic analysis system with forward execution capability[C]//Proceeding of the IWCMC. Jersey City, NJ, USA:IEEE, 2014:128-133. |
[14] | Roberts J M. Virusshare[EB/OL].[2017-04-24]. https://virusshare.com/. |