驱动级本地用户行为监控系统的研究与实现*
郭小清, 任守纲, 谢忠红
南京农业大学信息科技学院 南京 210095
摘要

针对本地用户行为(包括用户对数字图书馆及个性化推送服务等应用的行为习惯和应用软件对系统的行为)的获取问题,提出一种基于驱动级的应用访问监控策略,实时监控及记录所有的I/O操作。利用文件驱动级技术、网页抓取技术及数据库等相关技术,基于VC++实现运行速度较快的驱动级用户行为监控系统,监测本地用户行为;通过此系统获得的操作日志还可以作为个性化图书馆推送服务类应用设计的电子调查数据。

关键词: 用户行为监控; 文件过滤驱动; 内核模式
中图分类号:TP393
Research and Implementation of Drive-level Local User Behavior Monitoring System
Guo Xiaoqing, Ren Shougang, Xie Zhonghong
College of Information Science and Technology, Nanjing Agricultural University, Nanjing 210095, China
Abstract

In order to obtain the behavior of local users which include operation on digital libraries and personalized push service, and application software on the system, a driver stage-based application access control strategy is proposed, which can implement real-time monitoring and recording of the I/O operation. This paper implementes the drive-level local user behavior monitoring system based on VC++, using technologies of file driver stage, Web crawler and database. Operation log obtained through the system also can be used as the electronic survey data designed for personalized push service of the library.

Keyword: User behavior monitoring; File filter driver; Kernel mode
1 引言

用户行为分析指运用多学科知识研究和分析用户的构成、特点及其在应用过程中行为活动上所表现出来的规律。图书服务系统的数字化与个性化已经是发展趋势,友好的交互性功能设计是提高服务系统用户满意度的关键之一,准确获取用户行为对此类系统设计具有较高参考价值。日常应用软件如即时通讯工具、网络导航等对用户来说必不可少,但是随着网络的普及,这些应用会带给个人用户一些安全隐患。若能捕获应用软件的行为则对提高系统安全性有益。文件安全保护的常用手段是信息加密、设置访问权限,但是由于应用软件的漏洞及病毒的侵害,这些方法对文件的安全防护无法达到令人满意的效果。一些恶意应用大都使用加载驱动的方式进行入侵式访问操作,普通用户层的防护难以达到文件安全防护目的。过滤驱动是一种驱动层中可选择的特殊驱动,属

于核心模式驱动,通过把自己粘附在其他驱动之上,可以拦截对底层驱动设备对象的请求,实现对下层请求的扩展或替换整个请求[ 1]

本文从Windows系统的内核驱动入手实施安全策略,通过过滤驱动程序截获对本地文件的I/O操作,实时地监视系统中对指定内容的操作,并以日志形式进行记录。对网页的操作监控,通过基于地址的网页抓取技术进行分析,得到用户的行为习惯信息,从而为诸如个性化图书馆推送服务设计提供依据[ 2]

2 系统设计
2.1 需求分析

现行的数字图书馆系统大都为B/S模式,了解用户对此类系统的行为习惯,必须要获得用户操作网页的栏目内容。监控各类应用软件对系统的所有操作,以发现一些恶意或隐性操作。这就要求用户行为监控系统不仅能获取应用的所有操作,而且要能进行记录,方便基于监控信息的用户行为分析。故本地用户行为监控系统具备的主要功能应该包括:对指定驱动器中所有文件的访问监控;对指定文件夹的访问监控;对文件访问操作的记录(包括读文件、写文件、文件信息设置、文件的创建、文件的删除以及对文件缓存的相应操作);被访问文件的完整路径名记录;对访问文件的进程名记录;对文件被访问时间的记录以及文件访问结果的记录;对访问网页的内容抓取、分析及记录。

2.2 相关工作概述

通过对用户行为的分析可以从海量数据中为用户提供真正需要的信息,可以识别哪些行为是应用安全行为,故对用户行为分析的研究一直是信息处理领域的热点之一。文献[3]至文献[7]都是对用户行为分析的研究成果,这类分析基本可以分为两类:基于搜索引擎获取用户行为,具有应用依赖性即通过特定搜索引擎获取用户行为日志;通过基于Web浏览或跟踪获取用户行为。这些研究基本把目标锁定在网络层面,对本地用户行为的研究较少。一般的安全监控产品(如Microsoft Security Essentials[ 8]、360安全卫士[ 9]等)都是从文件的角度对本地用户行为进行监控,这种方式对底层操作无法准确捕获。曾经轰动IT界的奇虎360与腾讯之争[ 10]从技术本质上看实为应用行为安全问题,若通过基于进程的监控就能获得应用软件对本地系统的行为,即可以判断应用是否安全。本文从驱动级的角度获取本地用户行为,对本地用户行为分析提供最底层依据。

2.3 系统设计思路

采用基于文件驱动级的安全策略,实现对所有I/O操作的监控。对网页类操作再辅以网页内容抓取技术获取具体操作的栏目并进行记录。驱动级用户行为监控系统的设计框架如图1所示:

图1 驱动级用户行为监控系统的设计框架

本地用户行为即用户(用户包括使用者和应用软件两类)对本地资源的操作,而资源本质为若干文件。本地用户行为监控系统实现的途径有两种:基于内核层和基于应用层。文件过滤管理器是一个使用传统文件过滤驱动模型的内核级驱动,负责基本的I/O请求包(I/O Request Packet,IRP)处理工作[ 11]。用户对本地逻辑盘中的文件操作都会由I/O管理器转换成I/O请求发往底层驱动。在一般情况下,I/O管理器会把I/O请求发向文件对应的文件系统驱动的设备对象。驱动设备对象以栈的形式存在于操作系统中,I/O管理器的I/O请求始终先发往目标设备所处设备栈最顶端的设备。I/O管理器在发送请求之前,会检查文件系统驱动上是否绑定了其他的驱动设备对象,从而向最顶端的设备发送I/O请求,如果此时过滤驱动绑定在目标设备栈的顶端,过滤驱动的设备会先于目标设备获得此I/O请求,从而实现对目标文件I/O请求的拦截。基于文件驱动级获取到的用户操作以进程为粒度,当发现是网页类操作时,进一步对这个操作进行跟踪分析,获取到具体的网页栏目信息。

3 关键技术实现
3.1 驱动级程序的加载与卸载

本地用户行为监控程序不需要开机时加载,避免了系统内存空间资源的浪费。笔者选择利用服务管理器动态加载文件驱动,只有当监控程序启动时才开始加载驱动。驱动服务加载的实现过程如下:

(1)通过OpenSCManager获得服务管理器句柄schSCManager;

(2)schSCManager 作为CreateService的参数创建服务;

(3)通过OpenService打开创建好的服务;

(4)StartService启动创建好的服务。

驱动程序的卸载要求在驱动程序中指派DriverUnload例程,再利用OpenService、ControlService和DeleteService函数停止并且删除服务。但卸载过滤驱动是一件非常危险的事情,很容易造成系统崩溃,所以本文监控系统不支持过滤驱动的直接卸载。当驱动程序加载成功后,利用CreateFile获取驱动程序的设备句柄并保存入一个全局变量中,以方便后续对驱动程序的访问。

3.2 数据处理

监控系统获取的数据主要分为访问文件的操作类型、访问文件的进程名称和被访问文件的完整路径名。其他信息比如访问的操作结果可以从IRP的完成情况获取,读写文件数据偏移等信息可以通过IRP中对应字段获取[ 11]。监控系统主要数据的获取方式有以下两种:

(1)获取访问文件的进程名

访问文件的进程名信息是文件监控系统中最重要的数据,因为用户是依据此信息来判断文件操作的合法性。当IRP发送到内核驱动中时,利用PsGetCurrentProcess内核函数可以获取发送此IRP请求的进程所属的进程块(微软定义的一个内核结构体EPROCESS,此结构体中包含了进程的基本信息,如进程名,但是微软并没有给出其内部字段,所以必须自行从EPROCESS结构中寻找进程名[ 12])。在Windows系统中,当驱动程序加载的时候负责加载驱动的系统进程是System,故在驱动加载时利用内核函数PsGetCurrentProcess获取的进程块结构体必定是System进程的EPROCESS,而一个系统中的EPROCESS结构是不会变化的,即进程名在EPROCESS中的偏移量是相同的。可以在驱动程序加载时遍历System进程的EPROCESS结构寻找到字符串“System”,记录下此字符串的偏移;而此偏移便是System进程名在EPROCESS结构中的偏移,随后的处理中利用PsGetCurrentProcess获取发送IRP请求的进程块EPROCESS,在此偏移处便能够寻找到发送IRP进程的进程名。利用内核函数PsGetCurrentProcessId可以获得进程的标识PID。

(2)获取被访问文件的路径

驱动程序中获取文件的完整路径一直是驱动开发中的难题。文件路径的获取有多种方法,最常见的是利用ObQueryNameString内核函数和构造IRP的方式询问文件名。前者必须考虑重入的问题,使得程序复杂化,本文使用构造IRP方式获取文件名,过程如图2所示:

图2 被访问文件的内核态名称获取流程

驱动级监控程序获取数据信息后必须考虑数据的存储问题,因为I/O访问非常频繁,为了避免内核存储缓冲区频繁的申请和释放操作导致内存碎片增多、内存资源利用率下降[ 13],本文使用NPAGED_LOOKASIDE_LIST(微软提供的能够快速申请缓冲区而且不会造成内存碎片的一种内存管理方式[ 14] )对象申请非分页内存,结合哈希表保存文件的完整路径信息。这样设计具有效率高、资源占用少、操作简洁等优点,非常适合复杂的文件路径信息管理。

3.3 驱动器的监控绑定

驱动器的绑定是由用户层程序决定的,而绑定操作是在内核层完成的,内核层和用户层驱动器的表示方法是不一样的。在内核层,驱动器是用卷表示的,必须在用户层和内核层确立一个唯一的标识来指明驱动器。驱动器的特点是驱动器符号从‘A’-‘Z’,最多26个,所以可以用一个32位4字节变量标识,其中每一位代表一个驱动器,也就是内核状态下的卷,置位1表示绑定,0表示不绑定。这样既解决了驱动器标识问题,又使得用户程序与内核程序的交互变得简洁,提高了稳定性。在用户层可以利用驱动器符号减去‘A’的ASCII码后的值作为数值1的左移位数,再与4字节变量进行“与”操作置位,便可以一次记录下所有需要绑定的驱动器。驱动级监控程序绑定某个逻辑驱动器的过程如图3所示,一旦完成卷的监控绑定,所有发向此卷的IRP都会先经过新创建的设备,IRP处理权交由了驱动级监控程序。

图3 驱动器监控绑定的实现

3.4 获取网页栏目信息

从网页解析出操作的栏目内容通过对网页超链的提取实现。Web页面由多个对象构成,对象(Object)是由单个统一资源定位符URL寻址的文件,例如HTML文本文件、静态图像、Java小应用程序、语音片段、动画视频等。大多数Web页面由单个基本HTML文件和若干个所引用的对象构成。基本HTML文件使用相应的URL来引用本页面的其他对象。每个URL是网页在因特网上的标识,组成形式为protocol://hostname[:port]/path/ [;parameters][?query]#fragment。URL有绝对和相对之分:绝对URL包含主机名和文件名,如http://lib.njau.edu.cn/s/7/t/70/p/1/c/1169/d/1211/list.htm就是一个绝对URL,http://lib.njau.edu.cn/是主机名,list.htm是文件名。相对URL仅指定绝对URL的一部分,如果相对地址以斜杠(/)开始,则表示直接来源于主机。若要得到某个网站的用户行为则必须分析出相对地址得到栏目内容,所以笔者在监控系统实现时对HTML进行超链提取,解析出相对地址,从而形成用户的行为习惯数据。

单网页的超链抓取分析过程如下:提取页面上的所有超链标记;逐个处理提取到的超链;判断该超链是否导航链接,是则存入设计好的数据库URL表中。

4 性能分析与功能测试

驱动级本地用户行为监控系统以应用软件形态安装,启动后选择要监控的驱动器开始监控I/O操作,且不影响其他应用的运行。监控系统主界面如图4所示:

图4 驱动级本地用户行为监控系统主界面

此监控系统功能如下:

(1)监控指定文件夹

图5 对指定文件目录的监控

对指定文件目录的监控如图5所示,在内核驱动程序中记录之前判断传入的过滤条件,利用获得的被访问文件路径与监控过滤包含文件夹对比,若属于包含文件夹中的文件则记录下路径并向用户层应用程序传输,否则不传输;排除是指某些特定的文件不被监控。

(2)监控日志保存功能

该监控系统是基于单文档的应用程序,基类是CListView,所以不能使用单文档中自带的保存功能,必须自行实现,通过遍历listcontrol中的每一行取出数据进行写文件的方法实现了日志保存。文件操作日志如图6所示:

图6 文件操作的日志

(3)获取数字图书馆用户行为习惯

该监控系统获取到的是操作执行的进程名称,对网页类操作必须在已有进程名基础上获取应用名称,进而对URL进行解析得到用户操作的栏目内容,即相对地址(做到这一步要以与操作网站的数据内容对应为前提)。网页操作的解析日志如图7所示:

图7 网页操作的解析日志

(4)性能分析

本文实现的系统在监控I/O操作的过程中,对其他应用的操作没有影响,没有因为对每一次I/O操作进行拦截产生较多的内存和CPU消耗,笔者在一台配置为Intel Core(TM)2 Duo CPUP8400 2.26Hz,WinXP SP3,内存3GB的PC上监控系统驱动器C盘时系统性能如图8所示:

图8 同样操作下系统性能

5 结语

本文以获取本地用户行为为例,详细描述了基于驱动级的本地用户行为监控系统的设计与实现,功能测试表明实现的监控系统可以完全捕获对文件的操作,提高了Windows文件系统的安全性,在文件数据安全、病毒防御等方面发挥作用。系统另外一个突出的特点是对网页操作进行页面内容分析,从而获得数字图书馆类应用的用户行为习惯,为此类系统的友好交互性设计提供依据。

参考文献
[1] 胡宏银, 姚峰, 何成万. 一种基于文件过滤驱动的Windows文件安全保护方案[J]. 计算机应用, 2009, 29(1): 168-171.
(Hu Hongyin, Yao Feng, He Chengwan. Solution of Windows Files Security Protection Based on File System Filter Driver[J]. Journal of Computer Applications, 2009, 29(1): 168-171. ) [本文引用:1] [CJCR: 0.646]
[2] 李高虎, 高嵩, 唐小新, . 个性化新书通报推荐系统的设计与实现[J]. 现代图书情报技术, 2012(6): 89-93.
(Li Gaohu, Gao Song, Tang Xiaoxin, et al. Design and Implementation of New Books Noting Personalized Recommendation System Based on Circulation Logs[J]. New Technology of Library and Information Service, 2012(6): 89-93. ) [本文引用:1] [CJCR: 1.073]
[3] 余慧佳, 刘奕群, 张敏, . 基于大规模日志分析的搜索引擎用户行为分析[J]. 中文信息学报, 2007, 21(1): 109-114.
(Yu Huijia, Liu Yiqun, Zhang Min, et al. Research in Search Engine User Behavior Based on Log Analysis[J]. Journal of Chinese Information Processing, 2007, 21(1): 109-114. ) [本文引用:1] [CJCR: 1.13]
[4] 王霞. 基于WEB浏览的用户行为分析系统的研究与设计[D]. 北京: 北京邮电大学, 2010.
(Wang Xia. The Study and Design of User Behavior Analysis System Based on Web Browsing[D]. Beijing: Beijing University of Posts and Telecommunications, 2010. ) [本文引用:1]
[5] 刘鹏. 网络用户行为分析的若干问题研究[D]. 北京: 北京邮电大学, 2010.
(Liu Peng. Behavior of Network Users Research Based on Time-varying & Services[D]. Beijing: Beijing University of Posts and Telecommunications, 2010. ) [本文引用:1]
[6] 董富强. 网络用户行为分析研究及其应用[D]. 西安: 西安电子科技大学, 2005.
(Dong Fuqiang. Study on Network Users’Behaviors Analysis and Its Application[D]. Xi’an: Xidian University, 2005. ) [本文引用:1]
[7] 周岳. 基于兴趣分类的用户行为分析系统的研究与设计[D]. 北京: 北京邮电大学, 2010.
(Zhou Yue. Research and Design of the Analysis of User Behavior System Based on Interest Classification[D]. Beijing: Beijing University of Posts and Telecommunications, 2010. ) [本文引用:1]
[8] Microsoft. Microsoft Security Essentials Product Information[EB/OL]. [2012-10-11]. http://windows.microsoft.com/en-US/windows/security-essentials-product-information#tabs1=features. [本文引用:1]
[9] 360浏览器抓取用户隐私流程[EB/OL]. [ 2012-10-07]. 360浏览器抓取用户隐私流程[EB/OL]. [2012-10-07]. http://baike.baidu.com/albums/1458023/1458023/0/0.html#0$b8014a90f603738d06a96ea2b31bb051f919ec4b.(Processesofthe360BrowserCrawlUserPrivacy[EB/OL]. [2012-10-07]. http://baike.baidu.com/albums/1458023/1458023/0/0.html#0$b8014a90f603738d06a96ea2b31bb051f919ec4b [本文引用:1]
[10] 腾讯360之争[EB/OL]. [ 2012-10-07]. 腾讯360之争[EB/OL]. [2012-10-07]. http://baike.baidu.com/view/4633773.htm.(TheDisputeBetweenTencentand360[EB/OL]. [2012-10-07]. http://baike.baidu.com/view/4633773.htm [本文引用:1]
[11] 谭文, 杨潇. Windows内核安全编程[M]. 北京: 电子工业出版社, 2009: 476-478.
(Tan Wen, Yang Xiao. Windows Kernel Security Programming[M]. Beijing: Publishing House of Electronics Industry, 2009: 476-478. ) [本文引用:2]
[12] 翟进, 李清宝, 白燕, . 文件过滤驱动在网络安全终端中的应用[J]. 计算机应用, 2007, 27(3): 624-626.
(Zhai Jin, Li Qingbao, Bai Yan, et al. Application of File System Filter Driver in NetWork Security Terminal[J]. Computer Applications, 2007, 27(3): 624-626. ) [本文引用:1] [CJCR: 0.1916]
[13] 郑磊, 马兆丰, 顾明. 基于文件系统过滤驱动的安全增强型加密系统技术研究[J]. 小型微型计算机系统, 2007, 28(7): 1181-1184.
(Zheng Lei, Ma Zhaofeng, Gu Ming. Techniques of File System Filter Driver-based and Security-enhanced Encryption System[J]. Journal of Chinese Computer Systems, 2007, 28(7): 1181-1184. ) [本文引用:1] [CJCR: 0.46]
[14] 魏丕会, 卿斯汉, 刘海峰. 基于安全操作系统的透明加密文件系统的设计[J]. 计算机科学, 2003, 30(7): 132-135.
(Wei Pihui, Qing Sihan, Liu Haifeng. Design and Implementation of a Transparent Cryptographic File System Based on Security Operating System[J]. Computer Science, 2003, 30(7): 132-135. )
(作者E-mail: rensg@njau. edu. cn) [本文引用:1] [CJCR: 0.61]