一种快速定位Android敏感功能对应的驱动文件位置的方法

文档序号:10724797阅读:243来源:国知局
一种快速定位Android敏感功能对应的驱动文件位置的方法
【专利摘要】本发明公开了一种快速定位Android敏感功能对应的驱动文件位置的方法,根据writev函数中的某一个参数名称是否能够明确表示某一个敏感操作,采用不同方法确定驱动文件的位置,使得本发明的方法适应性强,实现快速准确的定位驱动文件的位置;发明的方法在检测Android经过定制而产生的驱动文件权限漏洞的方法中,相比静态分析,此方法对于驱动文件的定位速度更快更便捷。
【专利说明】
一种快速定位Andro i d敏感功能对应的驱动文件位置的方法
技术领域
[0001 ]本发明属于Android架构中内核层安全领域,涉及一种快速定位Android敏感功能对应的驱动文件位置的方法。
【背景技术】
[0002]如今,智能手机产业迅速发展,智能手机使用也已遍及千家万户,同时,Android因为它自身的开放性,成为用户量最大的智能手机操作系统。Google官方发布Android新版本后,厂商为了提升市场竞争力,并与其它竞争厂商的手机进行区分,就会通过修改源代码对Andro id版本进行定制。
[0003]其中,厂商为适应自己开发的功能,将Android定制后有可能造成整个Android体系架构及文件功能映射关系发生改变,给分析Android系统体系以及缺陷检测造成了困难,尤其是只有识别敏感功能所对应的驱动文件,才能进一步针对驱动文件进行安全监测。因此,定位驱动文件与其相对应的敏感功能显得尤为重要。
[0004]由于厂商对Android的修改,与Google发布的官方版本无论从文件层次结构还是文件名、参数、文件位置都有较大程度的不同,所以,如何定位敏感功能所对应的驱动文件的位置就成为了进行后续检测的关键步骤。
[0005]针对Android敏感功能所对应的Android LinuxKerneI层的驱动文件位置的定位方法,一般的检测方法主要是静态定位,即通过比较定制后的Android源代码和Google发布的Android官方源代码,从而发现Android应用程序层的敏感功能(拍照、获取位置信息等),在AndroidLinuxKernel层对应的驱动文件的绝对路径。但是,此类方法存在以下不足:
[0006]1、厂商在修改源代码时,对于驱动文件的文件名、参数也进行了修改,通过源代码比较很难找出驱动文件和相关敏感功能两者之间的映射关系;
[0007]2、厂商不会公布定制后的Android源码,对检测工作产生了阻碍;
[0008]3、整体检测源代码过程冗杂,效率较低。

【发明内容】

[0009]针对上述现有技术中存在的缺陷和不足,本发明的目的在于,提供一种快速定位Android敏感功能对应的驱动文件位置的方法,该方法在设备运行时对驱动文件进行功能定位,无需查看源代码。
[0010]为了实现上述目的,本发明采用如下技术方案:
[0011 ] —种快速定位Android敏感功能对应的驱动文件位置的方法,包括以下步骤:
[0012]步骤1:针对具体的敏感功能编写测试应用,敏感功能包括多个敏感操作;
[0013]步骤2:下载Linux的调试工具strace的源代码,对strace的源代码进行交叉编译,生成适应Android的strace可执行文件;将strace可执行文件拷贝到定制的Android设备上;
[0014]步骤3:在拷贝了 strace可执行文件的Android设备上安装步骤I中的测试应用;
[0015]获取Android设备上正在运行的所有系统服务进程;
[0016]执行Android设备上的strace可执行文件,对所有系统服务进程进行监测;开启测试应用,调用Android Linux Kernel层的驱动文件,生成监视日志文件;
[0017]步骤4:查找监视日志文件中的相关调用函数,相关调用函数包括open函数、openat函数和writev函数;若writev函数中的某一个参数名称能够明确表示某一个敏感操作,则执行步骤5,否则执行步骤6;
[0018]步骤5:根据敏感功能包括的所有敏感操作,查找出writev函数中表示敏感操作的参数,并在open函数或openat函数中找出表示与敏感操作对应的驱动文件的文件节点的参数;根据驱动文件的文件节点确定驱动文件的位置,得到敏感功能对应的所有驱动文件的位置;
[0019]步骤6:多次重复执行步骤3,获取多个监视日志文件,查找多个监视日志文件中的writev函数的参数,若writev函数的某一参数在多个监视日志文件中重复出现,则该参数表示的是某一敏感操作,在open函数或openat函数中找出表示与敏感操作对应的驱动文件的文件节点的参数,根据驱动文件的文件节点确定驱动文件的位置;查找所有重复出现的wr i t e V函数的参数,得到敏感功能对应的所有驱动文件的位置。
[0020]具体地,所述步骤2中的下载Linux的调试工具strace的源代码,对strace的源代码进行交叉编译,生成适应Android的strace可执行文件,其具体包括以下步骤:
[0021 ] 下载strace的源代码;在PC平台上使用arm架构编译器对strace的源代码进行交叉编译,生成适应Android的strace可执行文件。
[0022]具体地,所述步骤3中的获取Android设备上正在运行的所有系统服务进程,其具体包括以下步骤:启动Android设备中的adb,利用adb shell获取Android设备正在运行的所有系统服务进程。
[0023]与现有技术相比,本发明具有以下技术效果:
[0024]1、本发明的方法为动态检测方法,无需查看源代码。
[0025]2、采用电脑、数据线和安卓设备即可完成,设备简单。
[0026]3、根据writev函数中的某一个参数名称是否能够明确表示某一个敏感操作,采用不同方法确定驱动文件的位置,使得本发明的方法适应性强,实现快速准确的定位驱动文件的位置。
[0027]4、本发明的方法在检测Android经过定制而产生的驱动文件权限漏洞的方法中,相比静态分析,此方法对于驱动文件的定位速度更快更便捷。
[0028]下面结合附图和【具体实施方式】对本发明的方案做进一步详细地解释和说明。
【附图说明】
[0029]图1为检测系统结构流程;
[0030]图2为strace的使用帮助信息;
[0031]图3为系统服务进程所在列表;
[0032]图4为生成日志文件的截取;
[0033]图5为监测文件的结果。
【具体实施方式】
[0034]本发明根据Android系统基于LinuxKernel以及进程间通信的特点,提出一种针对Android应用层的敏感功能,定位Android Linux Kernel层驱动文件的动态方法,使用调试工具strace在测试应用软件运行时监视各类驱动的系统服务进程,从而获取底层驱动文件的文件节点,进一步精确定位驱动文件。
[0035]参见图1,本发明的快速定位Android敏感功能对应的驱动文件位置的方法,包括以下步骤:
[0036]步骤I,针对某一具体的敏感功能编写测试应用,敏感功能包括多个敏感操作。
[0037]敏感功能指的是在Android应用程序层,允许应用访问用户隐私信息(如:照片、声音、位置)的功能。
[0038]敏感操作指的是在AndroidLinux Kernel层,与敏感功能相关的内核层的操作。
[0039]测试应用指的是具备单一敏感功能的Android应用,为了使Android系统在完成敏感功能时,调用Android Linux Kernel层的驱动文件。
[0040]本实施例以照相这一敏感功能为例,所编写的测试应用能够实现打开摄像头、拍照和存储照片等敏感操作。
[0041 ] 步骤2,下载Linux的调试工具strace的源代码,对strace的源代码进行交叉编译,生成适应Android的strace可执行文件;将strace可执行文件拷贝到定制的Android设备上;具体包括以下步骤:
[0042]步骤2.1:下载strace的源代码(本发明中使用的是strace 4.10),图2给出了strace使用帮助信息;在PC平台(本发明中使用的是Linux-Ubuntu 14.04)上使用arm架构编译器对strace的源代码进行交叉编译,生成适应Android的strace可执行文件;具体编译命令如下:
[0043]CC=arm-1inux-gcc
[0044]LD = arm-1i nux-1d
[0045]RANLIB = arm—1 inux—ran lib
[0046]./configure—prefix = /home/1ihaocun/strace[0047 ] --host = arm-l inux—target = arm-1 inux
[0048]CC = arm-1inux-andro ideab i_gcc
[0049 ] LD = arm-1inux-androideabi—ld
[0050 ] RANL IB = arm-1 i nux-andro ideab1-ran lib
[0051 ]./configure—pref ix = /home/1ihaocun/strace
[0052]--host = arm-l inux—target = arm-1 inux
[0053]步骤2.2:利用ADB(Android Debug Bridge)在adb shell环境下将strace可执行文件拷贝到Android设备/system/bin/目录下(此过程有可能需要root设备并开放系统目录读写权限),所采用的指令如下:
[0054]adb shell->cat/sdcard/strace>/system/bin/strace
[0055]步骤2.3:将strace可执行文件的访问权限修改为完全开放访问,所采用的指令如下:
[0056]chmod 777 strace
[0057]步骤3,在拷贝了 strace可执行文件的Android设备上安装步骤I中的测试应用;获取当前Android设备正在运行的所有系统服务进程;执行定制的Android设备上的strace可执行文件,对所有系统服务进程进行监测;开启测试应用,调用Android Linux Kernel层的驱动文件,生成监视日志文件。
[0058]步骤3.1:在定制的Android设备上安装步骤2中的测试应用,将Android设备接入PC;启动当前Android设备中的adb,利用adb shell获取当前Android设备正在运行的所有系统服务进程,所采用的指令如下:
[0059]adb shell_>ps
[0060]图3给出了获取的系统服务进程列表,记录系统服务进程的进程号,例如系统服务进程mediaserver的进程号为pid。
[0061 ] 步骤3.2:在adb shell环境下执行strace可执行文件,对所有的系统服务进程进行监测,所采用的指令如下:
[0062]adb shell->strace-v-y-tt-f-F-e trace=openat,writev,open
[0063]-s 200-p pid-o/sdcard/output
[0064]其中,pid为记录的系统服务进程mediaserver的进程号,末尾为输出的监视日志文件的位置。
[0065]步骤3.3:开启测试应用,调用Android Linux Kernel层的驱动文件,生成监视日志文件,监视日志文件截取内容见图4。
[ΟΟ??] 步骤4,查找监视日志文件中的相关调用函数,open函数、openat函数和writev函数;在监视日志文件中,open函数和writev函数成对出现,形成函数对,openat函数和writev函数成对出现,形成函数对;一个函数对代表一个敏感操作,writev函数的参数中包含表示某一敏感操作的参数,open函数或openat函数的参数中包含表示与该敏感操作对应的驱动文件的文件节点的参数;若writev函数中的某一个参数名称能够明确表示某一个敏感操作,则执行步骤5,否则执行步骤6;
[0067]步骤5,根据敏感功能包括的所有敏感操作,查找出writev函数中表示敏感操作的参数,并在open函数或openat函数中找出表示与敏感操作对应的驱动文件的文件节点的参数,根据驱动文件的文件节点确定驱动文件的位置,得到敏感功能对应的所有驱动文件的位置。
[0068]以图4为例,后一个突出字符ExynosCamera::openSensor()为writev函数中的参数,表示打开相机图像传感器这一敏感操作;第一个突出字符/dev/video40为openat函数中的参数,表示打开相机图像传感器这一敏感操作对应的驱动文件video40的文件节点,根据驱动文件video40的文件节点确定驱动文件video40的文件位置为/dev/,参见图5为获取的驱动文件的监测结果。
[0069]步骤6,多次(5次或者6次)重复执行步骤3,获取多个监视日志文件,查找多个监视日志文件中的writev函数的参数,若writev函数的某一参数在多个监视日志文件中重复出现,则该参数表示的是某一敏感操作,在open函数或openat函数中找出表示与敏感操作对应的驱动文件的文件节点的参数;根据驱动文件的文件节点确定驱动文件的位置;查找所有重复出现的writev函数的参数,按照上述方法得到所有敏感操作对应的驱动文件的文件节点,根据驱动文件的文件节点确定所有敏感操作对应的驱动文件的位置,最终得到敏感功能对应的所有驱动文件的位置。
【主权项】
1.一种快速定位Android敏感功能对应的驱动文件位置的方法,其特征在于,包括以下步骤: 步骤1:针对具体的敏感功能编写测试应用,敏感功能包括多个敏感操作; 步骤2:下载Linux的调试工具strace的源代码,对strace的源代码进行交叉编译,生成适应Android的strace可执行文件;将strace可执行文件拷贝到定制的Android设备上; 步骤3:在拷贝了 strace可执行文件的Android设备上安装步骤I中的测试应用; 获取Android设备上正在运行的所有系统服务进程; 执行Android设备上的strace可执行文件,对所有系统服务进程进行监测;开启测试应用,调用Android Linux Kernel层的驱动文件,生成监视日志文件; 步骤4:查找监视日志文件中的相关调用函数,相关调用函数包括open函数、openat函数和writev函数;若writev函数中的某一个参数名称能够明确表示某一个敏感操作,则执行步骤5,否则执行步骤6; 步骤5:根据敏感功能包括的所有敏感操作,查找出writev函数中表示敏感操作的参数,并在open函数或openat函数中找出表示与敏感操作对应的驱动文件的文件节点的参数;根据驱动文件的文件节点确定驱动文件的位置,得到敏感功能对应的所有驱动文件的位置; 步骤6:多次重复执行步骤3,获取多个监视日志文件,查找多个监视日志文件中的writev函数的参数,若writev函数的某一参数在多个监视日志文件中重复出现,则该参数表示的是某一敏感操作,在open函数或openat函数中找出表示与敏感操作对应的驱动文件的文件节点的参数,根据驱动文件的文件节点确定驱动文件的位置;查找所有重复出现的wr i t e V函数的参数,得到敏感功能对应的所有驱动文件的位置。2.如权利要求1所述的快速定位Androi d敏感功能对应的驱动文件位置的方法,其特征在于,所述步骤2中的下载Linux的调试工具strace的源代码,对strace的源代码进行交叉编译,生成适应Android的strace可执行文件,其具体包括以下步骤: 下载strace的源代码;在PC平台上使用arm架构编译器对strace的源代码进行交叉编译,生成适应Android的strace可执行文件。3.如权利要求1所述的快速定位Androi d敏感功能对应的驱动文件位置的方法,其特征在于,所述步骤3中的获取Android设备上正在运行的所有系统服务进程,其具体包括以下步骤:启动Android设备中的adb,利用adb shell获取Android设备正在运行的所有系统服务进程。
【文档编号】G06F11/36GK106095667SQ201610389820
【公开日】2016年11月9日
【申请日】2016年6月3日 公开号201610389820.3, CN 106095667 A, CN 106095667A, CN 201610389820, CN-A-106095667, CN106095667 A, CN106095667A, CN201610389820, CN201610389820.3
【发明人】汤战勇, 李浩存, 李政桥, 周祥, 房鼎益, 陈晓江, 龚晓庆, 赵贝贝, 陈 峰
【申请人】西北大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1