论文部分内容阅读
随着智能手机技术的发展,人们越来越多地把工作和生活的计算平台从传统的PC平台转移到移动平台。智能手机储存了大量的用户隐私,例如通信记录、位置信息等,因而成为攻击者的攻击目标。作为主流移动平台之一的Android系统,其安全形式尤为严峻。为了维护Android平台的生态环境,学术界和工业界提出了多种系统增强和恶意软件检测的方法。由于系统增强的方法往往涉及到修改Android系统和应用程序框架层,而Android系统存在严重的碎片化问题,所以这类方法往往不具有广泛的可部署性。另一方面,考虑到智能手机的有限的电量和计算能力,不宜在手机端执行复杂的检测方法。因此,在应用市场的入口处,对应用进行严格的检查和审计,是提高Android系统安全性的一个有效举措。从恶意软件检测技术的发展历史来看,基于程序语义的特征签名技术能更好的刻画恶意行为,并具有更好的抗混淆性。传统的基于程序语义的特征签名一般利用控制流图、数据流图和系统调用等实现。而Android应用软件是基于事件驱动开发的,存在多入口点和大量的回调函数,而且其利用程序框架层提供的API访问系统资源,并不直接使用系统调用与底层系统交互。因此传统的基于程序语义的方法并不天然适用于Android应用软件的分析。本文提出了一种新的Android恶意软件签名技术——基于组件间调用图的特征签名。因为Android应用软件基于组件开发,组件可以像其他类一样被扩展并实现特定功能,组件间基于组件间通信机制进行调用和访问。因此,组件和类之间的调用关系形成了 Android应用软件的功能轮廓。本文以组件和类为顶点,组件和类之间的调用关系为边,可以构建组件间的调用图。然后抽取每个组件和类内部的API集合作为顶点的属性。因为Android应用软件利用API与系统交互,API集合反映了应用软件的行为。得到组件间调用图和API集合后,利用子图同构匹配算法和API集合相似度来确定待检测的应用软件是否属于恶意软件。另一方面,由于当前Android平台绝大多数的恶意软件属于重打包类型,因此,如何防止Android应用软件被攻击者逆向也是提高Android安全性的一个重要方法。因此,本文还提出了一种基于函数调用关系隐藏的软件加固技术,通过将Java方法的调用关系和执行序列隐藏到更难逆向的原生代码中,从而提高逆向Android应用软件的整体的复杂度。实验结果显示本文的检测方法具有较好的检测率并可以将误报率维持在可以接受的范围内。对于Android应用软件加固,本文提出的方法增加了逆向攻击的复杂度且不会对应用软件的启动时间造成较大影响。