APP下载

基于QEMU的安卓进程发现工具设计与实现

2015-05-04史国振席宗虎

计算机工程与设计 2015年4期
关键词:宿主机链表描述符

史国振,黄 琼,席宗虎,2,苏 铓

(1.北京电子科技学院 信息安全系,北京100070;2.西安电子科技大学 计算机学院,陕西 西安710071;3.西安电子科技大学 综合业务网理论及关键技术国家重点实验室,陕西 西安710071)

0 引 言

针对恶意代码种类多样,而现有的内部检测方法不能够保证操作系统安全的问题。本文结合恶意代码进程的特点并借助虚拟化技术,以QEMU虚拟机为平台,设计实现了一种Android系统隐藏进程发现工具,从操作系统外部检测,保证了操作系统的安全监控。通过从QEMU模拟的内存中获取客户机系统进程双向链表入口地址,并遍历系统所有进程来发现系统中实际运行进程的情况,并与原有的分析工具获取的进程列表进行对比,从而分析得出恶意隐藏的进程和代码,实现系统的外部监控,并对系统进程全面监管。该工具的设计与实现为系统安全性的提供和用户隐私的保护奠定了基础。

1 相关工作

1.1 研究现状

进程是程序在操作系统中运行表现形式,为了保证运行的有序和稳定,操作系统通常具有严密的进程管理和调度机制,一般恶意代码等为了隐藏其运行踪迹,通常对其进程进行伪装,文献 [1]针对 Windows系统提出了一种基于直接内核对象操作 (DKOM)的进程伪装保护方法.从内核级入手,直接修改操作系统内核空间中存储进程相关信息的数据结构,以此实现进程隐藏的目的。文献 [2]针对Android恶意软件泛滥的问题,综合静态和动态分析技术,设计实现了Android恶意软件检测系统。但这种恶意软件检测系统对新的病毒检测成功率低、误报的机率较高。针对Android的隐藏进程发现方法鲜有研究,现有的安全软件在恶意软件检测方面也存在一定的局限性。一方面,受操作系统本身安全的影响,运行于操作系统内的安全工具容易受到攻击;另一方面,安全软件的权限仅限于系统内核级,存在被系统内核级恶意软件攻击的危险。针对上述问题,研究并设计一种能够在操作系统外部运行的安全检测工具至关重要,通过为其设置更高的权限,可以顺利完成检测工作,同时解决了工具自身受到攻击的问题。虚拟化技术的迅速发展为上述构想的实现提供了很好的契机,文献 [3]指出虚拟机管理器具有更高的权限和更小的可信计算机,利用虚拟机管理器在单独的虚拟机中部署监控工具能够对目标虚拟机进行检测,同时保证监控工具的有效性和防攻击性。

目前,Android系统中的恶意程序[4]大都是通过APK的形式安装到手机中,通过应用级或者系统级的漏洞获取更高的权限,达到破坏系统安全、窃取用户隐私的目的。现有的静态分析方法[5,6]通过提取APK文件内容构建特征向量,与已知恶意代码家族中代码样本进行比较一定程度上解决了恶意程序的识别问题。但是,该方法只能检测出特征库中已有的恶意软件样本,无法检测未知的恶意软件,同时静态分析很难应对代码混淆、反射、加密等情况。针对静态分析的缺点,出现了动态分析方法,能够监控APK文件运行时的行为,并通过行为对其是否为恶意软件进行判定。但是,动态分析中恶意行为难以界定,而且对使用了进程隐藏技术的恶意代码难以检测。甚至在被恶意软件的破坏或者绕过后,上述安全工具则毫无记录可以分析。

1.2 Android进程介绍

Android系统[7]中,Dalvik虚拟机作为Runtime中的核心部分,专门负责应用程序的运行。每个运行的应用程序都与一个Dalvik虚拟机实例对应,当某个应用出现异常时,只有对应的Dalvik虚拟机出现异常,系统不会受到其影响,这样就保证了系统的稳定。如表1所示,Dalvik虚拟机[8]中的进程和线程的概念,同Linux系统中的进程和线程概念是一致的。

表1 Dalvik虚拟机进程和线程同Linux进程的关系

Android系统的内核是基于Linux内核的,其继承并沿用了Linux操作系统的进程管理机制。通常在操作系统中,每个进程都有一个且只有一个进程控制块PCB(process control block)来记录和刻画进程状态等其它相关信息,并将信息按照struct task_struct{}结构体定义的形式来保存,供操作系统调度和管理。每个task_struct()中记录着其所对应进程的所有信息,其结构部分成员如下:

通过该成员可以从当前进程描述符所在链表找到其前后的进程描述符,进而找到所有进程描述符,实现遍历操作系统进程的目的。

1.3 QEMU介绍

QEMU[10]是一个由Fabrice Bellard编写的开源模拟器软件。具体来说,它是一个使用了可移植的动态二进制翻译器的模拟器软件。通过分析主流CPU的体系架构特点并为其定义对应的结构体,使用动态二进制翻译技术将上层需要执行的指令翻译成可在宿主机上直接执行的指令,然后将其交给宿主机的CPU去执行。由于QEMU对各种硬件的模拟也是使用纯软件化的方法实现,这使得QEMU可以模拟的硬件平台与真实硬件无必然对应关系。

QEMU的操作模式分为两种[11]:全系统模拟 (full system emulation) 和 用 户 模 式 模 拟 (user mode emulation),如图1所示。

(1)全系统模式仿真:在这种模式下,QEMU模拟的硬件平台可以模拟出客户机系统运行起来需要的所有硬件资源,例如ARM平台上的ARM处理器,BIOS,内存等常用的硬件设备。客户机中的应用依靠客户机上运行的操作系统的进程任务调度,作业管理来实现,最终将数据发送给QEMU模拟的CPU进行处理,等待结果的返回;QEMU则是将上层发送来的指令翻译成宿主机系统所能识别的指令,并交由宿主机的CPU来执行。在宿主机看来,就是应用程序QEMU发送了一段让宿主机处理的数据,然后等待数据返回。其中QEMU在其中充当的是一个动态的翻译官。

图1 QEMU的操作模式

(2)用户模式仿真:在这种模式下,QEMU模拟的是客户机系统需要运行的CPU,接收客户机应用发来的各种请求,然后指令翻译送往宿主机,等待返回的结果。而不管客户机中的进程任务调度及作业管理等,仅充当CPU的功能。

通过分析发现全系统模式仿真使用的范围更加的广泛,并且对客户机系统的监控也更加的全面,适用于分析操作系统隐藏的进程。

2 基于QEMU的Android隐藏进程发现工具

2.1 基本设计思想

(1)先分析Android源码[12]找到与内核相关的代码,其次,按照sched.h文件里TASK_STRUCT的声明,一个成员一个成员的算偏移,从而找到成员list_head这个双向链表的地址,按图索骥找到所有进程。但由于TASK_STRUCT是一个很大的结构体 (拥有几十或者上百个成员),并且成员长度各不相同,比如一个char占一个字节,一个int占4个字节等;此外考虑到编译时的对齐问题,手工计算既费力又容易错算,这种发现进程链表的方式不适合本工具。

(2)进程链表存在于内核区,用户区的应用不能直接的调用。考虑到驱动工作于内核区,所以可以尝试设计一个特定的驱动,实现在内存中开辟独立的空间用来存放获取到的进程链表入口地址,并将数据返回给用户层。但驱动程序对系统权限的要求很高,并且其最高权限就是内核权限,而恶意软件同样可以获取到内核权限,若恶意软件在发动攻击之前破坏系统的安全检测工具,则操作系统完全暴露在恶意软件之下,安全问题甚是严重。为此,从系统内监控的方案同样存在缺点。

针对以上两种方法各自存在的缺点,本文依托QEMU虚拟机,设计并实现了一种从系统外部监控并发现Android平台下隐藏进程的工具。

假设前提:通过进程隐藏技术[13,14]对应用A进行了进程隐藏处理,Android系统自身的进程管理工具或者是adb工具不能够发现应用A的进程,通过本文设计的工具来对Android系统进行全面监控,并获取Android系统中运行的所有进程,最后,使用 “基于交叉视图的检测技术[15]”同原有分析工具获取的进程列表进行对比来发现隐藏进程。

本文设计的Android系统隐藏进程发现工具,其关键技术在于寻找系统中运行的进程的入口地址,以方便获取到链表的地址。具体对于是获取到哪个进程的入口地址没有要求。为此,Android系统隐藏进程发现工具的设计如图2所示。

图2 Android系统隐藏进程发现工具设计思想

(1)于Android系统中选择系统初始化时进程swpper。

(2)将这个进程控制表的入口地址,写入到QEMU模拟的CPU的一个寄存器Ri中。

(3)通过QEMU上的VMM从Ri中读取进程地址内容,以获得swpper的进程控制表的入口地址。

(4)根据sched.h文件里结构体task_stract{}的声明并结合特定的偏移算法,计算出各成员的偏移,找到循环双向链表list_head{}结构体,并获取下一个进程的链表入口地址*next。

(5)通过*next内容寻到下一个进程的*next地址,同时获取当前进程task_stract{}结构体中的信息。

(6)重复步骤 (5)直到遍历完所有进程。

2.2 进程发现工具实现

针对上节提出的进程发现模型,具体的实现步骤如下:

步骤1 修改Android系统代码

(1)定位进程描述结构体

在Android 4.0的内核源码中,在内核根目录下include/linux/sched.h的1114行定位进程描述符struct task_struct,其重要成员变量如下:

tasks是连接进程描述符之间的双向链表结构,通过该成员就可以从当前进程描述符所在链表找到它前后的进程描述符,进而找到所有进程描述符。

(2)初始化进程描述符:init_task

初始化进程 “swpper”的进程描述符在内核根目录arch/arm/kernel/Init_task.c中,init_task定义如下:

struct task_struct init_task = INIT_TASK (init_task);

在INIT_TASK ()中,对init_task结构进行了初始化:

步骤2 将进程描述法写入寄存器

(1)在Android中找寄存器

在Android的GoldFish虚拟处理器的电池驱动程序,相关 文 件 在 根 目 录 下 drivers/power/goldfish_battery.c,这是一个power_supply的驱动程序,实现了读取属性等几个操作,通过读取虚拟机的寄存器得到当前 “电池”的信息。而这个信息在goldfish_battery.c是一个固定值,不会被内核修改,所以选择这种数值不会被修改的寄存器来存储上一步初始化的特定进程描述符的地址。

(2)将init_task地址写入寄存器

在goldfish_battery.c的goldfish_battery_probe ()中写入:GOLDFISH_BATTERY_WRITE (data,SYSTEM_TASK_STRUCT,&init_task);

步骤3 修改QEMU源代码

(1)在QEMU找寄存器

在 QEMU源代码的根目录下external/qemu/hw/goldfish_battery.c

(2)获取寄存器中内容

goldfish_battery_write (val);

(3)读取Android操作系统的进程描述符到qemu

Android操作系统的内存是QEMU中的虚拟内存,故获取的进程描述符地址是操作系统内存里的地址,需要使用QEMU的cpu_memory_rw_debug()函数将操作系统内存内容读取到QEMU控制台可见的地方。

(4)寻找进程名

进程名即成员comm,在以进程描述符结构体起始地址为基准偏移0x2d4处,使用:

(5)寻找下一进程

进程的双向链表即成员tasks,在以进程描述符结构体起始地址为基准偏移0x1c0处,使用:

即可得到下一进程的双向链表结构地址,如果想使用下一进程的进程描述符,需要减去双向链表结构的地址,使用:

即可得到下一进程的进程描述符。

(6)读取所有进程

通过上面的步骤,借助QEMU成功的发现了Android系统的所有进程。

3 实 验

本文设计的Android系统隐藏进程发现工具是基于QEMU模拟器的1.2.0版本实现的,在对本工具进行测试时,QEMU模拟Android 4.0版本的系统平台。

在部署完测试环境之后,首先在Android虚拟机运行Gallery应用,使用进程隐藏技术将Gallery应用的进程隐藏,通过Android系统上的模拟终端列出所有的运行进程。如图3所示,发现所列举的进程中没有Gallery应用对应的进程。在上述情况下,使用本文设计的Android系统隐藏进程发现工具来检测隐藏进程,本工具从系统之外列举出Android系统中运行的所有进程。通过两次获取的进程列表对比,本工具成功的发现了Gallery应用的隐藏进程 (图3黄线框中的android.gallery3d),验证了本文隐藏进程发现工具设计的正确性。

图3 进程发现测试实验结果

4 结束语

近年来,随着Android系统版本的不断更新,Android系统的恶意软件数量呈快速增长态势,用户的隐私、财产安全面临着严峻的考验和前所未有的挑战。本文针对现有的内部检测方法不能够保证操作系统安全的问题,设计并实现了一种基于QEMU的Android隐藏进程发现工具。该工具从系统外部监控整个系统,遍历系统所有进程来发现系统中实际运行进程的情况,并与原有的分析工具获取的进程列表进行对比,从而分析得出恶意隐藏的进程和代码,实现系统的外部监控,并对系统进程全面监管。并通过实验验证了隐藏进程发现工具设计的可行性和正确性。然而,本工具有些地方还有待改进,还需要进一步的研究。针对Android系统下的进程发现问题,本工具暂时不能发现游离于进程链路表之外的隐藏进程,这将是接下来需要研究的内容。

[1]LAN Zhiling,SONG Yubo,TANG Lei.Novel process-protecting method using camouflage techniques based on direct ker-nel object manipulation [J].Journal of Southeast University(Natural Science Edition),2013,43 (1):24-29 (in Chinese).[蓝智灵,宋宇波,唐磊.基于直接内核对象操作的进程伪装保护方法 [J].东南大学学报:自然科学版,2013,43(1):24-29.]

[2]HU Wenjun,ZHAO Shuang,TAO Jing,et al.A detection method and system implementation for Android malware [J].Journal of Xi’an Jiaotong University,2013,47 (10):37-43(in Chinese).[胡文君,赵双,陶敬,等.一种针对Android平台恶意软件的检测方法及系统实现 [J].西安交通大学学报,2013,47 (10):37-43.]

[3]XIANG Guofu,JIN Hai,ZOU Deqing,et al.Virtualizationbased security monitoring [J].Journal of Software,2012,23(8):2173-2187 (in Chinese).[项国富,金海,邹德清,等.基于虚拟化的安全监控 [J].软件学报,2012,23 (8):2173-2187.]

[4]FANG Xinxin.Malware implementation and detected on Android [D].Nanjing:Nanjing Post and Communications University,2013 (in Chinese).[房鑫鑫.Android恶意软件实现及检测研究 [D].南京:南京邮电大学,2013.]

[5]QIN Zhongyuan,XU Yuqing,LIANG Biao,et al.An Android malware static detection method [J].Journal of Southeast University (Natural Science Edition),2013,43 (6):1162-1167 (in Chinese). [秦中元,徐毓青,梁彪,等.一种Android平台恶意软件静态检测方法 [J].东南大学学报 (自然科学版),2013,43 (6):1162-1167.]

[6]MEI Hong,WANG Qianxiang,ZHANG Lu,et al.Software analysis:A road map [J].Chinese Journal of Computers,2009,32 (9):1697-1710 (in Chinese). [梅宏,王千祥,张路,等.软件分析技术进展 [J].计算机学报,2009,32(9):1697-1710.]

[7]SONG Jie,DANG Licheng,GUO Zhenchao,et al.The security mechanism analysis and applied research of Android OS mobile platform [J].Computer Technology and Development,2010,20 (6):152-155 (in Chinese). [宋杰,党李成,郭振朝,等.Android OS手机平台的安全机制分析和应用研究[J].计算机技术与发展,2010,20 (6):152-155.]

[8]ZHOU Yimin,CHEN Rong.Analysis about process in Dalvik virtual machine [J].Computer Technology and Development,2010,20 (2):83-86 (in Chinese). [周毅敏,陈榕.Dalvik虚拟机进程模型分析 [J].计算机技术与发展,2010,20(2):83-86.]

[9]Linux kernel[EB/OL].[2013-11-28].http://www.kernel.org.

[10]QEMU[EB/OL].[2009-02-01].http://www.oschina.net/p/qemu.

[11]LUO Yan.Research on dynamic binary translation and optimization based on OEMU [D].Hangzhou:Zhejiang University,2013(in Chinese).[罗艳.基于QEMU的动态二进制翻译优化研究 [D].杭州:浙江大学,2013.]

[12]Android[EB/OL].[2013-09-04].http://source.android.com/source/downloading.html.

[13]WO Tianyu,HU Chunming,LI Jianxin,et al.Hidden OS objects correlated detection technology based on VMM [J].Journal of Software,2013,24 (2):405-420 (in Chinese).[沃天宇,胡春明,李建欣,等.基于VMM的操作系统隐藏对象 关 联 检 测 技 术 [J]. 软 件 学 报,2013,24 (2):405-420.]

[14]LIU Haochen,LUO Senlin.Trojan horse’s hiding and detecting technique of Android OS [J].Netinfo Security,2013,13 (1):33-37 (in Chinese).[刘昊辰,罗森林.Android系统木马隐藏及检测技术 [J].信息网络安全,2013,13(1):33-37.]

[15]LI Peng,WANG Ruchuan,GAO Dehua.Research on Rootkit dynamic detection based on fuzzy pattern recognition and support virtual machine technology [J].Acta Electronica Sinica,2012,40 (1):115-120 (in Chinese). [李鹏,王汝传,高德华.基于模糊识别和支持向量机的联合Rootkit动态检测技术研究 [J].电子学报,2012,40 (1):115-120.]

猜你喜欢

宿主机链表描述符
基于结构信息的异源遥感图像局部特征描述符研究
基于AKAZE的BOLD掩码描述符的匹配算法的研究
嵌入式计算机软件测试关键技术研究
基于二进制链表的粗糙集属性约简
跟麦咭学编程
基于链表多分支路径树的云存储数据完整性验证机制
Linux单线程并发服务器探索
虚拟网络实验室在农村职校计算机网络技术教学中的应用研究
利用CNN的无人机遥感影像特征描述符学习
链表方式集中器抄表的设计