虚拟机隐藏进程检测系统设计与实现

2019-03-04 08:31陈佳昕
现代计算机 2019年1期
关键词:内核视图进程

陈佳昕

(四川大学计算机学院,成都610065)

0 引言

随着互联网的发展,网络安全备受人们关注。现在的病毒木马不再单纯以破坏用户系统为目的,更多的是潜行在系统中收集用户数据、窃取用户隐私信息以牟取钱财。为了能够长期潜伏在系统当中而不被用户和杀毒软件发现,恶意软件往往通过隐藏自身行为来逃避安全监控程序的检测,其中隐藏自身进程是最基本的功能之一。此类恶意软件,隐藏自身、保障生存是首要需求,它使自身能在目标主机中长期潜伏,窃取信息而不被察觉,从而造成更大危害。而当前云计算迅猛发展,如何有效检测位于虚拟机内的隐藏进程,保护虚拟机安全与隐私也成为了平台提供商的迫切需求。

现阶段研究工作中对隐藏进程检测的方案中,广泛采用且具有明显检测效果的,多以交叉视图对比的方式。其中:武汉大学王丽娜等人[1]、北京航空航天大学李博等人[2],利用虚拟机监视器,动态获取虚拟机用户层进程视图,虚拟机内核层进程视图以及Hypervisor层进程视图,采用多层视图交叉对比的方式对虚拟机内隐藏进程进行检测。但上述方案中,对Hypervisor层视图的获取,都需要修改底层Hypervisor 代码。在云计算环境下,重新编译并加载Hypervisor,将会直接影响租户虚拟机自身的云服务,采用上述方案将无法在不影响租户自身业务的同时完成对虚拟机内隐藏进程的检测过程。北京大学白光冬等人[3]、北京理工大学罗森林等人[4],通过获取主机内用户层视图和内核层视图,来检测主机内存在的隐藏进程。但针对内核对象进行直接修改(例如摘除内核进程链表)以隐藏自身的进程,上述方案的检测能力则显得不足。

基于现阶段研究工作的不足,为满足本工具独立于Hypervisor 外实现虚拟机隐藏进程的功能,并提高本工具检测能力。本工具提供了一套针对于虚拟机自身的隐藏进程检测方案,能够在虚拟机更为底层的系统环境获取进程视图信息,从而检测虚拟机中的隐藏进程。

1 虚拟机隐藏进程检测系统设计

虚拟机隐藏进程检测系统设计如图1。

图1

虚拟机隐藏进程检测工具采用进程多视图交叉对比方法,在虚拟机用户态通过用户态API,获得用户态进程视图。在虚拟机内核态通过遍历Linux 内核进程链表获得第一层虚拟机进程内核态视图,并通过挂钩进程调度相关系统函数,获得第二层更为可信的虚拟机进程内核态视图。交叉对比三层进程视图,以实时检测虚拟机内可能存在的隐藏进程。

2 虚拟机隐藏进程检测系统实现

2.1 获取用户层进程视图

Proc 文件系统是一个虚拟文件系统,它以文件的形式向用户空间提供了访问接口,这些接口可以用于在运行时获取相关部件的信息或者修改部件的行为。它大致包含了以下信息:内存管理、操作系统进程信息、设备驱动程序、系统总线、网络等。由于其包含了当前操作系统中进程相关信息,故常常可以通过用户态API 函数访问该文件系统获取到系统中正在运行的进程。

2.2 内核层进程视图获取——内核进程链表

在Linux 操作系统中,进程结构体被定义为task_struct。为了方便管理每个进程结构体,Linux 操作系统为每个进程结构体维护了一个双向循环链表,通过链表来实现task_struct 结构中的task 成员之间的互连。链表的头指针是init_task 进程,它指向操作系统内核创建的第一个进程,后续所创建的每个进程,都会将其进程结构体作为结点添加到双向循环链表中。通过遍历该双向循环链表,可以在虚拟机内核层获取到进程视图信息。

2.3 内核层进程视图获取——CPU运行队列

在Linux 操作系统中,新进程被创建完成后,将被标记为就绪态并置于就绪队列中,进程需要等待CPU时间片分配来完成执行过程。每个进程会分时复用CPU 时间片,以达到共享CPU 资源的目的。而对于以后门程序形式存在的隐藏进程,也一定需要通过系统的调度来获得CPU 执行控制权限,从而达到自身的攻击目的。本系统通过截获进程请求CPU 调度命令,来获取最为可信的进程视图。

图2

3 虚拟机隐藏进程检测系统检测方案

虚拟机隐藏进程检测系统,根据上述方式获取到三层虚拟机内的进程视图,通过比对不同视图之间的差异,从而检测出当前系统环境是否存在隐藏进程。系统部署在虚拟机内部,并提供对外访问通信接口。云平台管理员能够通过该接口,针对待测的虚拟机发送隐藏进程检测命令,位于虚拟机中的隐藏进程检测工具也能通过该接口将检测结果通过网络输出到检测日志文件。

4 实验

本文实验环境包含一台计算节点,其CPU 为Intel Xeon CPU E5-2609@2.40GHz,内存为4GB,硬盘为SATA,1TB,宿主机操作系统为64 位Ubuntu 12.04,虚拟机操作系统为32 位Ubuntu 12.04。

在虚拟机中部署隐藏进程检测系统,启动后将以后台进程方式运行在虚拟机中,等待并接收来自于云平台管理员发起的检测请求。在系统等待检测请求的过程中,虚拟机中的服务不会受到影响。检测系统启动后,将当前虚拟机信息通过网络发送至远程数据库中,云平台管理员通过查看数据库能够知道哪些虚拟机部署了隐藏进程检测服务,从而指定虚拟机发起检测请求。如图3 所示,当前云平台上有两台虚拟机部署了隐藏进程检测服务,数据库表项按列分别划分为虚拟机本机IP 地址,虚拟机名称以及隐藏进程服务对外通信的TCP 端口。

图3

Adore-ng 是Linux 操作系统下的一款Rootkit 工具,其通过加载Rootkit 内核模块来劫持系统调用函数与劫持内核对象,从而对目标进程实现隐藏。本文部署了Adore-ng 工具,并利用该工具将10 个测试进程隐藏。

利用系统自带的进程监测工具ps 与top,以及隐藏进程用户层视图均不能发现已经被隐藏的测试进程,而在隐藏进程内核层视图中,可以查看到结果如图4-图5 所示。

图4

图5

数据库表项按列分别划分为进程PID,进程名称以及当前写入数据库的时间戳。通过多视图交叉对比,可以检出当前虚拟机中存在的隐藏进程。

5 结语

本文首先概述了现阶段针对隐藏进程检测的方法与思路,并给出了一种虚拟机中的隐藏进程检测系统的设计方案,详细介绍了本文系统的具体实现过程,最后在服务器上搭建了测试环境,并测试了本系统在检测虚拟机中隐藏进程的功能有效性。实验结果表明,本文虚拟机隐藏进程检测系统能够检测出系统中存在的隐藏进程,能够在一定程度上保障租户虚拟机和云平台自身的安全。

猜你喜欢
内核视图进程
强化『高新』内核 打造农业『硅谷』
活化非遗文化 承启设计内核
债券市场对外开放的进程与展望
微软发布新Edge浏览器预览版下载换装Chrome内核
快速杀掉顽固进程
不留死角 全方位监控系统
Y—20重型运输机多视图
SA2型76毫米车载高炮多视图
《投影与视图》单元测试题
Django 框架中通用类视图的用法