提高可移动存储设备管理系统安全运行的方案
2015-03-20南理勇滨州学院信息工程系山东滨州256603
南理勇(滨州学院 信息工程系,山东 滨州 256603)
提高可移动存储设备管理系统安全运行的方案
南理勇
(滨州学院信息工程系,山东滨州256603)
可移动存储设备管理系统在运行时会面临攻击者采用任务管理器或第三方工具强行关闭的攻击,可能导致应用程序无法正常运行。为解决这类应用程序安全运行的问题,提出一种融合进程隐藏和进程守护技术的可移动存储设备管理系统安全运行方案。该方案利用改进的远程线程注入技术提高系统隐蔽性,利用双守护进程的两级监控体系提高系统健壮性,从而达到维护程序安全运行的目的。应用结果表明,该方案能够很好地抵抗强行关闭攻击。
进程隐藏;信息隐藏;进程守护;远程线程注入;可移动存储设备
0 引言
可移动存储设备由于其体积小、容量大、携带方便等优点得到了广泛应用。可移动存储设备在给人们带来方便的同时,也给企事业单位引入了极大的安全隐患,是个人计算机系统信息泄露的主要途径[1]。在一些有保密性要求的单位,既希望利用可移动存储设备即插即用、无需安装驱动程序、携带方便等优点,同时又希望可移动存储设备只能在特定范围内使用,以保证所存储的内容不会向外泄漏。为满足这一需求,需要开发对可移动存储设备进行综合管理的系统,对单位内部的可移动存储设备进行管理,禁止外部可移动存储设备在内部使用[2]。然而,在实际应用中,对要受保护的计算机安装可移动存储设备管理系统后,用户可以使用任务管理器或者第三方工具结束其进程,这样,即使安装了该程序,也无法实现对可移动存储设备的管理。因此,如何增强系统隐蔽性防止被用户发现,或者被用户发现时能够防止被用户结束,是可移动存储设备管理系统安全运行亟待解决的问题。解决这一问题通常采用的技术路线有两种:进程隐藏技术和进程守护技术。本文基于对进程隐藏和进程守护技术的分析,结合两种技术的优点,给出了一种融合这两种技术的可移动存储设备管理系统安全运行的方案。
1 进程隐藏技术
进程隐藏技术有很多,现有进程隐藏技术主要分为三类[3]:(1)基于API Hook的进程隐藏;(2)基于DLL的进程隐藏;(3)基于远程线程注入的进程隐藏。其中,基于远程线程注入的进程隐藏技术隐蔽性和健壮性好,可以存在于任一进程(包括系统进程的内存空间)中,因而成为目前最为常用的进程隐藏技术[3]。远程线程注入技术有两种:直接代码注入和以DLL形式注入。虽然直接代码注入技术隐蔽性比DLL形式注入技术的隐蔽性更好一些,但是直接代码注入技术对注入代码的大小有限制[4],所以,在实际开发可移动存储设备管理系统时,多采用远程线程注入DLL的进程隐藏技术。
1.1DLL形式远程线程注入技术
通常情况下,每个进程都有自己的私有地址空间,其他进程不允许对这个私有地址空间进行访问操作。远程线程注入技术通过在目标进程中创建远程线程的方法进入目标进程的内存地址空间,由注入到远程进程中的线程启动指定DLL,在指定DLL中完成要实现的功能,这样就可以使要实现的功能的代码运行到远程进程中。如果注入到进程explorer.exe中,用户使用任务管理器或者第三方进程查看工具看到的是explorer.exe进程,而注入到explorer.exe进程中的代码被隐藏起来,因此,增强了系统的隐蔽性,不容易被发现。
1.2远程线程注入技术的实现
远程线程注入技术的实现主要有5个步骤[5]:(1)通过OpenProcess打开试图注入的远程进程,获取其句柄;(2)利用VirtualAllocEx在远程进程中为要注入的DLL申请足够的内存地址空间;(3)利用WriteProcessMemory将DLL路径名复制到远程进程的内存地址空间;(4)通过GetProcAddress计算LoadLibrary在Windows系统库中的入口地址,用于后面加载DLL;(5)利用CreateRemote Thread创建远程线程并加载DLL。
虽然DLL文件在目标进程运行时任务管理器中不会列出DLL文件名,看到的只是目标进程的文件名,这在一定程度上增强了系统隐蔽性,能够有效防止被用户发现进程,但是通过DLL形式远程线程注入技术的实现步骤可以发现该技术也仍然存在缺点,即不仅硬盘上有DLL文件存在,而且使用一些工具查看系统进程加载DLL时也会发现进程中可疑的DLL,这为系统的安全带来隐患,需要在设计开发可移动存储设备管理系统时加以解决。
2 进程守护技术
进程守护技术的基本思想是启动一个新的进程(即守护进程)来对需要保护的进程(即待检测进程)进行轮询检测,如果检测到要受保护的进程不存在,则守护进程将立刻启动需要保护的进程,如此循环往复。这样,即使用户使用任务管理器或者第三方进程查看工具看到了需要保护的进程,关闭了需要保护的进程后,该进程又被守护进程启动,使得关闭需要保护进程的行为变得毫无实际意义。因此,在设计开发可移动存储设备管理系统时采用以进程守护技术为主同时融合进程隐藏技术的方案。
进程守护技术的实现需要考虑两个问题:(1)如何防止守护进程被结束。因为待检测进程有守护进程的保护,是无法结束的。但是,若没有守护进程的保护,则是可以结束的。(2)如何提高守护进程和待检测进程之间的工作效率。如果按时间直接轮询,将会耗费系统资源,特别是CPU时间。占用过多CPU时间会引起用户注意。
3 可移动存储设备管理系统安全运行的方案
可移动存储设备管理系统的整体结构设计分为两个部分:可移动存储设备管理客户端RSDMSClient和授权中心RSDMSACenter。授权中心负责对可移动存储设备的授权,只有经过授权的可移动存储设备才能在安装有客户端的计算机上使用。客户端安装在每个需要保护的计算机上,它实时监测本地计算机系统的每个移动存储接口,当监测到有可移动存储设备接入本地计算机系统时,客户端进程对来访的可移动存储设备进行鉴别,并根据鉴别结果采取相应的访问控制策略。
一个普通的可移动存储设备,如果没有授权是不能接入到安装有客户端程序的计算机上使用的。因此,只要对单位内部的可移动存储设备进行授权,不对外部的可移动存储设备授权就可以达到禁止外部可移动存储设备在内部使用这一需求。授权中心运行在专用机器上,不运行在客户端,只有专职人员才能使用,其安全性相对较高。可移动存储设备管理系统客户端程序安装在受保护的个人计算机上,易遭受用户使用任务管理器或者第三方工具强行关闭的攻击,需要采取措施抵抗用户的强行关闭。在设计开发可移动存储设备管理系统时,将客户端程序编写成DLL,融合进程隐藏和进程守护技术,能有效防止用户的强行关闭攻击。下面给出设计过程中的几个要点。
3.1远程线程注入DLL后将其删除提高系统隐蔽性
远程线程注入DLL后,DLL文件在目标进程中运行时,任务管理器中不会列出DLL文件名,看到的只是目标进程文件名,但一些工具可以查看一个进程究竟装入哪些DLL文件,通过这些工具仍然可以发现进程中的可疑DLL。要解决这个问题,必须脱离DLL文件,让远程运行的代码只存在于内存中,这样就不会显示有某个文件被非法装入。因此,采用注入DLL后将其删除的方法可以进一步提高系统隐蔽性。
该方法基本思想:因为注入DLL后会在被注入的进程内存中产生映像,通过Get ProcAddress函数获取映像的入口函数地址,并对内存映像进行备份;使用FreeLibrar y释放加载的DLL,并删除DLL文件;前面FreeLibrar y释放加载的DLL时,内存映像的内容也会随之释放,因此必须将内存映像的备份复制到释放前所在的地址空间。这样,只要通过调用获取的入口函数地址就实现了程序隐藏,从而提高了系统隐蔽性。
3.2双守护进程的两级监控体系提高系统健壮性
将客户端RSDMSClient程序编写成DLL,采用远程线程注入技术注入到常用的系统进程。这样即使注入的DLL模块被发现,在任务管理器中系统进程是不允许被关闭的,因此安全性得到提高。但是,用户使用第三方工具还是有可能结束系统进程的,系统进程结束了,注入的监控程序也就不存在了,外部的可移动存储设备就可以在内部使用。所以,不能单纯采用远程线程注入技术,可以结合使用进程守护技术,形成两级监控。第一级监控(即守护进程注入到系统进程)负责监控第二级监控是否已经注入到另外的系统进程,若没有则将其注入到另外的系统进程。第二级监控才是真正负责具体监控任务的。
采用两级监控对系统起到了隐藏和保护作用,使得系统更加安全。前面在进程守护技术中提到,守护进程没有保护,如果先关闭守护进程,系统的安全性就降低很多。因此,需要提高守护进程的安全性,在设计可移动存储设备管理系统时采用双进程守护技术。
双进程守护技术是功能完全相同的两个程序不断地检测对方是否已经被结束,如果发现对方已经被结束了,那么又开始创建对方,这样又能够让对方执行。显然,采用双守护进程的两级监控体系极大提高了系统健壮性。但是,需要注意的是,双守护进程彼此不断检测对方是否存在时,对系统CPU资源的耗费是致命的。解决CPU资源的耗费方法是使用心跳机制。假设两个进程是proc1和proc2。proc1首先遍历进程快照,如果proc2存在,proc1刷新进程快照,重新遍历进程快照;如果proc2不存在,proc1开始创建proc2,然后proc1退出。当proc1退出时,proc2又开始重复类似proc1的动作。
3.3基于WM_DEVICECHANGE消息提高探测效率
采用进程守护技术确实提高了系统的健壮性,但如何提高守护进程与待检测进程之间工作效率是必须解决的问题。对可移动存储设备的实时探测,若按照时间直接轮询,则会耗费很多系统资源。因为只要客户端程序RSDMSClient运行,不管有没有可移动存储设备接入都会不断轮询,这其中有大部分是空转轮询,极大地浪费了系统CPU时间。为了提高探测效率,按照时间直接轮询是不合理的,在设计可移动存储设备管理系统时采用基于WM_DEVICECHANGE消息的实时探测来提高守护进程与待检测进程之间工作效率。
当设备状态发生变化时,系统将会以WM_DEVICECHANGE消息通知应用程序。在可移动存储设备管理系统中,当有可移动存储设备接入到客户端计算机并且准备就绪,可以正常访问时,系统会发出DBT_DEVICEARRIVAL类型消息,如果这时探测接入的设备,不仅可以保证不漏掉任何可移动存储设备的探测,而且可以避免出现空转轮询,从而极大地提高了系统工作效率。WM_DEVICECHANGE所对应的消息处理函数是OnDeviceChange,它在消息映射宏的位置比较特殊,具体使用可见参考文献[6]。
目前,一般台式机和笔记本电脑上基本是不配软驱的,但为了完整性,在此还是做一下说明。当USB或1394接口的可移动存储设备接入系统时,系统会发出WM_DEVICECHANGE消息,但是软盘插入到软驱时,系统无消息产生,这时需要利用HOOK技术来解决软盘探测问题。
4 结论
融合进程隐藏和进程守护技术的可移动存储设备管理系统目前已经应用到某政府机关单位。实际应用结果表明,改进的远程线程注入技术提高了系统隐蔽性,能够抵抗常规的安全检测技术,双守护进程的两级监控体系使得系统运行更加安全。
[1]王庆丰,刘功申.一种可信移动存储介质管理系统的设计与实现[J].信息安全与通信保密,2008(10):46-49.
[2]南理勇,左强.可移动存储设备的识别[J].计算机与数字工程,2005,33(9):131-133.
[3]肖道举,左佳,陈晓苏.进程隐藏的相关问题研究[J].微处理机,2008(4):78-80.
[4]何志,范明钰,罗彬杰.基于远程线程注入的进程隐藏技术研究[J].计算机应用,2008,28(6):92-94.
[5]王峥,娄渊胜.远程线程注入技术在监控系统中的应用[J].计算机技术与发展,2010(3):207-210.[6]侯捷.深入浅出MFC[M].武汉:华中科技大学出版社,2001.
Safe running method of removable storage device management system
Nan Liyong
(Department of Information Engineering,Binzhou University,Binzhou 256603,China)
The removable storage device management system would be subject to force closing attack such as using task manager or third-party tools during runtime which could cause the system not to run.To cope with these system safe running problems,an integration of process hiding and process maintaining safe running method of removable storage device management system is proposed.Using modified remote thread inject technology to improve system stealthiness,using two monitoring system based on double process maintaining to improve system robustness,and then the system can run safely.Finally,application results show that the mothed can resist force closing attack effectively.
process hiding;information hiding;process maintaining;remote thread inject;removable storage device
TP333
A
1674-7720(2015)10-0004-03
2015-01-29)
南理勇(1979-),男,硕士,讲师,主要研究方向:数据库与信息系统、图像处理。