安卓应用运行时的Activity推断方法转让专利

申请号 : CN201710028512.2

文献号 : CN106682517B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 杨力张冬冬王利军田亚平王小琴韦腾

申请人 : 西安电子科技大学

摘要 :

本发明提出了一种推断运行中安卓应用Activity的方法。主要解决现有技术需要申请危险权限和在移动终端上推断率低的问题。其实现步骤是:1)提取应用的所有Activity名称;2)通过进程的共享内存的大小变化,推断应用的Activity转换事件;3)确定标记应用的Activity特征信息;4)根据应用运行时标记应用的Activity特征信息,建立应用的Activity签名数据库;5)根据该签名数据库推断应用运行的Activity界面。本发明无需申请任何危险权限,避开了现有的安全检查机制,提高了移动终端Activity推断的正确率,可用于对安卓应用的安全分析。

权利要求 :

1.安卓应用运行时的Activity推断方法,包括:

(1)提取应用的所有Activity名称:对所选取的安卓应用使用ApkTools进行反编译得到AndroidManifest.xml文件,然后通过定制脚本从该文件中提取应用的所有Activity名称;

(2)推断Android应用运行时的Activity转换活动:通过监测应用进程的/proc//statm文件计算共享内存的大小变化,即应用进程所占虚拟内存空间减去私有虚拟内存空间,推断应用的Activity转换事件;

(3)确定标记应用的Activity特征信息:

(3a)根据内存大小变化标记Activity转换的ContentProvider查询和释放事件;

(3b)通过监测CPU的使用时间,区分Activity转换的不同类型;

(3c)将应用接收数据包的大小作为标记Activity转换的网络活动;

(4)根据应用运行时标记应用的Activity特征信息,建立应用的Activity签名数据库:(5)推断应用运行的Activity界面:

(5a)从正在运行的应用中提取特征数据Sm、Sn、Sc,其中Sm表示内存特征数据集合,Sn表示网络特征数据集合,Sc表示CPU使用时间特征数据集合;

(5b)对建立的Activity数据库中每个文件分别计算每个特征的相似性系数,然后,以各特征的相似性系数的乘积作为运行中应用Activity数据库中Activity相似性度量值,并将该值以(Sign,Sigc)集合的格式添加到数据集R中,其中Sign表示数据库中Activity的名称,Sigc表示Sign与运行中应用Activity的相似性度量值;

(5c)对数据集R中的集合,按Sigc的值进行由大到小的排序,选取前5个作为推断的Activity。

2.根据权利要求1所述的方法,其中步骤(3b)中的Activity转换类型,是指调用onCreate()函数时,应用创建一个新的Activity,当调用onResume()函数时,应用会从退回栈中返回已创建的Activity。

3.根据权利要求1所述的方法,其中步骤(4)中根据应用运行时标记应用的Activity特征信息,建立应用的Activity签名数据库,按如下步骤进行:(4a)使用ps命令获取应用的进程标识符用户标识符;

(4b)对于应用的所有Activity,以5s为时间节点、50ms为间隔,使用adb shell命令循环读取应用的/proc//statm文件,并将读取的数据处理成(M,cM)的集合格式,其中,M表示应用所占内存大小,cM表示M出现的次数,以该集合建立Activity内存变化特征数据;

(4c)对于应用的每个Activity,以5s为时间节点、以50ms为间隔,使用adb shell命令隔循环读取应用的/proc/uid_stat/uid/tcp_snd文件,并将读取的数据处理成(N,cN)的集合格式,其中,N表示应用发送第一个数据包大小,cN表示N出现的次数,建立Activity转换时网络活动特征数据;

(4d)对于应用的每个Activity,以5s为时间节点、以50ms为间隔,使用adb shell命令隔循环读取应用的/proc//stat文件,并将读取的数据处理成(U,cU)的集合格式,其中,U表示应用发送第一个数据包大小,cU表示U出现的次数,以此建立Activity转换时CPU使用时间特征数据;

(4e)对应用的每个Activity收集到的数据,去除一段时间内连续相同的值,再将它们分别保存至以该Activity命名的文件中,建立应用的Activity特征数据库。

说明书 :

安卓应用运行时的Activity推断方法

技术领域

[0001] 本发明属于移动终端安全领域,更进一步涉及一种前台应用运行时Activity推断方法,可用于对安卓应用的安全分析。

背景技术

[0002] 推断前台应用运行时Activity的研究源于移动终端应用的边信道攻击研究工作,其特点是利用应用运行时所暴露的进程信息,分析进程信息的变化和Activity转换时的关系,收集Activity转换时进程信息并建立应用Activity转换的签名,在应用运行时收集前台进程信息并与所建立的数据库进行对比推断前台应用Activity。目前,前台应用Activity的推断基本都需要向系统申请各种危险权限,而这种方式是很容易被安全程序所检测的,并且Activity推断可以作为Activity劫持攻击、用户隐私窃取方面的基础。
[0003] 阿里巴巴集团控股有限公司在其申请的专利“一种Android系统Activity劫持风险检测方法及装置”(专利申请号201310195684.0,公开号CN 104182686 A)中公开了一种Android系统Activity劫持风险检测方法及装置。该方法包括在目标Activity进入激活状态之前,获取当前处于激活状态的Activity的特征信息;根据所获取的特征信息,判断所述当前处于激活状态的Activity是否符合预设的安全特征;如果否,则确定系统存在Activity劫持风险。上述方案可以在不改变Android系统运行机制的前提下,直接通过扩展系统函数的方式实现,不仅实现简单,而且通用性强。
[0004] Suman Jana and Vitaly Shmatikov在其发表的论文“Memento:Learning Secrets from Process Footprints”(IEEE Symposium on Security and Privacy,2012)中提出利用应用运行时所暴露的边信道信息发起攻击的方法。该方法通过应用运行时进程的内存变化信息,对浏览的网页建立特征数据库,然后通过实时监测浏览器应用的内存变化推断用户正在访问的网页。该方法的不足在于其主要是针对传统的桌面应用所实施的推断方法,而在移动终端方面,由于其所采用标记应用的特征标识单一,内存分配机制的不同造成其准确率并不是很高。
[0005] Antonio Bianchi,Jacopo Corbetta,Luca Invernizzi,Yanick Fratantonio,Christopher Kruegel,GiovanniVigna在其发表的论文“What the App is That?Deception and Countermeasures in the Android User Interface”(IEEE Symposiumon Security and Privacy,2015)中提出利用应用运行时系统日志的方式来判断前台正在运行的应用Activity,进而发起Activity劫持攻击。该方法主要步骤包括:检测前台应用运行界面的Activity;推断用户正在进行的何种操作;劫持当前Activity。该方案虽说在实现Activity推断及劫持方面有挺高的正确率,但是读取系统日志需要申请root权限,而从Android4.0后root权限基本不对第三方应用开放,即使申请到root权限,安全软件也很容易检测到其恶意行为。

发明内容

[0006] 本发明的目的在于克服上述现有技术的不足,提出一种安卓应用运行时的Activity推断的方法,提升推断者的隐蔽性,提高推断Android应用运行时前台Activity的正确率。
[0007] 为实现上述目的,本发明的技术方案包括如下:
[0008] (1)提取应用的所有Activity名称:对所选取的安卓应用使用ApkTools进行反编译得到AndroidManifest.xml文件,然后通过定制脚本从该文件中提取应用的所有Activity名称;
[0009] (2)推断Android应用运行时的Activity转换活动:通过监测应用进程的/proc//statm文件计算共享内存的大小变化,即应用进程所占虚拟内存空间减去私有虚拟内存空间,推断应用的Activity转换事件;
[0010] (3)确定标记应用的Activity特征信息:
[0011] (3a)根据内存大小变化标记Activity转换的ContentProvider查询和释放事件;
[0012] (3b)通过监测CPU的使用时间,区分Activity转换的不同类型;
[0013] (3c)将应用接收数据包的大小作为标记Activity转换的网络活动;
[0014] (4)根据应用运行时标记应用的Activity特征信息,建立应用的Activity签名数据库:
[0015] (5)推断应用运行的Activity界面:
[0016] (5a)从正在运行的应用中提取特征数据Sm、Sn、Sc,其中Sm表示内存特征数据集合Sn表示网络特征数据集合,Sc表示CPU使用时间特征数据集合;
[0017] (5b)对建立的Activity数据库中每个文件分别计算每个特征的相似性系数,然后,以各特征的相似性系数的乘积作为运行中应用Activity数据库中Activity相似性度量值,并将该值以(Sign,Sigc)集合的格式添加到数据集R中,其中Sign表示数据库中Activity的名称,Sigc表示Sign与运行中应用Activity的相似性度量值;
[0018] (5c)对数据集R中的集合,按Sigc的值进行由大到小的排序,选取前5个作为推断的Activity。
[0019] 本发明与现有技术相比存在以下优点:
[0020] 第一,由于本发明中采用了应用运行时进程所暴露的边信道信息,使攻击者在攻击时不需要申请任何危险权限就可以推断出前台应用Activity,相较于通过提取日志来推断Activity行为,无需申请危险权限,避开现有的安全检查机制,提高了推断行为的隐蔽性。
[0021] 第二,由于本发明采用了多种特征信息作为Activity转换活动数据签名,相较于仅通过浏览器内存变化来推断用户浏览网站的行为,使原本单一的推断项更加完善,克服了现有技术中在移动终端方面推断率不高和应用范围比较局限的问题。

附图说明

[0022] 图1为本发明的实现总流程图
[0023] 图2为本发明中推断Android应用运行时Activity的转换活动子流程图;

具体实施方式

[0024] 下面结合图对本发明做进一步的详细描述。
[0025] 参照图1,对本发明的具体实施步骤做进一步的详细描述。
[0026] 步骤1.提取应用的所有Activity名称。
[0027] 对所选取的应用使用ApkTools反编译Android应用,通过定制脚本从AndroidManifest.xml中提取该应用的所有Activity名称。
[0028] 在本发 明步骤 1中的 实施例中 ,以国内 某银行 应 用为 例 ,通 过AndroidManifest.xml文件,所提取的Activity数量为878个。
[0029] 步骤2.推断Android应用运行时Activity的转换活动。
[0030] Activity的转换活动包括创建一个新的Activity和销毁当前Activity,对于Android应用,当一个Activity发生转换时,应用程序和SurfaceFlinger进程的共享内存大小就会发生变化。通过对Android源码的分析发现,共享内存的变化对应着绘制Activity界面过程中GraphicBuffer内存的分配和回收。由于对于特定的window其GraphicBuffer的大小是固定的,故可通过读取保存应用内存信息的进程文件/proc//statm计算虚拟内存大小与私有虚拟内存大小差值,推断出Activity的转换活动,即当差值大于0时,表明系统创建了一个新的Activity,当差值小于0时,表明系统销毁了一个Activity,当差值为0时,表明没有发生Activity转换活动。
[0031] 步骤3.确定标记Activity特征的进程信息。
[0032] (3a)确定内存大小变化作为标记Activity进程的特征信息:
[0033] 作为Android应用四大组件之一的ContentProvider,用来管理对中央数据存储区的访问,并为Activity的绘制提供数据内容。
[0034] 通过Activity界面显示内容决定应用所占内存的大小,即在应用的Activity启动时,ContentProvider通过调用onCreate()方法和onResume()方法来查询内容,当ContentProvider调用onCreate()时,系统会为应用的新分配内存,此时可用虚拟共享内存和物理共享内存之和表示ContentProvider内容的大小;当ContentProvider调用onResume()时,系统会回收为应用上一个Activity分配的内存,此时,虚拟共享内存表示ContentProvider内容的大小。ContentProvider调用不同的方法,引起应用内存的分配和释放,因此大小变化可以作为标记Activity的特征信息;
[0035] (3b)确定CPU执行时间作为标记Activity进程的特征信息:
[0036] Activity在转换时有两种类型:当系统调用onCreate()函数时,应用创建一个新的Activity,当系统调用onResume()函数时,应用会从退回栈中返回已创建的Activity。由于Activity界面的复杂性不同,绘制Activity时每个函数使用CPU的时间是不同的,对于界面相同的Activity,在创建一个新的Activity时需要调用onCreate()方法,所以新建一个Activity要比恢复一个已有的Activity花费更多的时间。这样,通过CPU的使用时间我们可以区别Activity的不同转换类型和每个Activity转换所需的时间;
[0037] (3c)确定网络活动作为标记Activity进程的特征信息:
[0038] 在Activity进行装载时,它会接收来自网络的内容,因此,在转换期间会通过performLaunch()方法来初始化网络连接。当一个Activity在转换时,它的请求命令串比如HTTP、GET通常是硬编码,应用的状态或用户的输入对它的影响非常小,而不同Activity的求命令参数不同,导致初始化网络连接时所发送的字节数不同,且由于应用接收到的数据是动态生成的,所以只考虑应用发送的数据表示网络活动的信息。通过对Android的虚拟文件系统分析发现,/proc/uid_stat/[uid]/tcp_snd文件记录了应用连接网络时发送的网络字节数,因此,使用该文件的数据作为标记Activity进程的特征信息活动信息。
[0039] 步骤4.以应用运行时标记进程信息的特征数据建立应用的Activity签名数据库R。
[0040] (4a)使用ps命令或其它方式获取到前台应用的进程标识符和用户标识符;
[0041] (4b)对该应用的每个Activity,以5s为时间节点,50ms为间隔,使用adb shell命令循环读取应用的/proc//statm文件,并将读取的数据处理成(M,cM)格式,其中,M表示该进程所占内存大小,cM表示M出现的次数,以此建立Activity内存变化特征数据;
[0042] (4c)对该应用的每个Activity,以5s为时间节点,以50ms为间隔,使用adb shell命令隔循环读取应用应用的/proc/uid_stat/uid/tcp_snd文件,并对读取的数据进行处理成(N,cN)格式,其中,N表示该进程发送第一个数据包大小,cN表示N出现的次数,建立Activity转换时网络活动特征数据;
[0043] (4d)对应用的每个Activity,以5s为时间节点,以50ms为间隔,使用adb shell命令隔循环读取应用应用的/proc/pid/stat文件,并将读取的数据处理成(U,cU)格式,其中,U表示该进程发送第一个数据包大小,cU表示U出现的次数,以此建立Activity转换时CPU使用时间特征数据;
[0044] (4e)对应用的每个Activity收集到的数据,去除一段时间内连续相同的值,再将它们分别保存至以该Activity命名的文件中,建立应用的Activity特征数据库。
[0045] 在本发明步骤4中的实施例中,数据库R中保存有多个文件夹,每个文件夹名为一个应用的名称,文件夹下包含所有以Activity名命名的文件,每个Activity文件包含了该Activity的特征数据。下面为国内某银行应用LoginActivity装载时内存变化信息(7585,12)(7584,11)(7840,1)(6410,1)(5860,1)……(5868,1)(5826,2),括号左边的值是从/proc//statm下收集的程序数据段大小,它代表应用数据驻留内存占内存的页数,括号右边的值表示当LoginActivity界面在装载时左边值出现的次数。
[0046] 步骤5.推断应用运行的Activity界面。
[0047] 参照图2,对本步骤的具体实现描述如下:
[0048] 图2中移动终端上安装多个应用,包括普通的应用1、应用2…应用n和用来收集前台应用进程信息的应用A;数据库R表示应用1到应用n所有应用的Activity签名数据库;远程服务器则计算从应用A收集移动终端中某应用的发送的进程信息和数据库中Activity签名的相似性系数,并输出推断结果,其推断步骤如下:
[0049] (5a)应用A与其它应用在移动终端并行运行,并不断读取其它应用进程信息的特征数据Sm、Sn、Sc,然后将所读取到的数据发送到推断者的远程服务器上,其中Sm表示内存特征数据集合,Sn表示网络特征数据集合,Sc表示CPU使用时间特征数据集合;
[0050] (5b)远程服务器从建立的Activity数据库R中读取数据库中每个应用的所有Activity签名,对每个Activity签名的每种特征,依次计算每两个Activity的特征相似度:
[0051]
[0052] 其中,r1表示应用A提取的进程信息特征数据集合,r2表示数据库R中应用的进程信息特征数据集合,∩表示交集,∪表示并集,jaccard(r1,r2)表示集合r1与r2的交集除以r1与r2并集的模;
[0053] (5c)以各特征的相似度乘积作为运行中应用Activity数据库中Activity相似性度量值,并将该值以(Sign,Sigc)集合的格式保存在远程服务器数据集S上,其中Sign表示数据库中Activity的名称,Sigc表示Sign与运行中应用Activity的相似性度量值;
[0054] (5d)远程服务器对数据集S,按Sigc的值进行由大到小的排序,选取前m个作为推断的Activity,并输出推断结果。
[0055] 以上描述仅是本发明的一个具体实例,不构成对本发明的任何限制,显然对于本领域的专业人员来说,在了解了本发明内容和原理后,都可能在不背离本发明原理、节后的情况下,进行形式和细节上的各种修正和改变,但是这些基于本发明思想的修正和改变仍在本发明的权利要求保护范围之内。