APP下载

一种基于ETW的高性能PDF文件实时监控系统

2021-07-20王飞平施可著

网络安全技术与应用 2021年6期
关键词:线程文档解析

◆王飞平 施可著

(1.衢州职业技术学院 设备与实训管理中心(信息中心)浙江 324000;2.格力电器(杭州)有限公司生产科 浙江 311200)

传统的服务器数据保护方式比较单一,主要包括透明加密与访问控制[1],该方式不关注电子文档本身的内容信息。随着电子文档格式愈来愈多,安全泄密事件屡见不鲜的情况下,人们开始更加注重文档内容本身是否包含敏感信息。以往一刀切的加密或粗力度的强访问控制方式在实际的数据流通中带来了诸多不便,因此针对文档内容精准管控的需求应运而生。有的方案通过正则表达式匹配内容[2],该方式存在匹配简单的优点,但也存在面临大量模式匹配性能不足的问题。鉴于此,本文在深入研究已存在DLP[3]系统的基础上提出一种基于ETW 内核技术[4]与Aho-Corasick 算法[5]结合的高性能PDF 内容实时监控系统。该系统工作在操作系统内核层,其基于内核层面的缓冲和日志记录机制实现,极大地保证了Windows Server 上的实现性能。终端主机一般部署Minifilter 等文件过滤框架,在服务器上容易发生蓝屏、死机等情况,影响服务器上的实际使用。ETW 监控框架与以往过滤驱动监控框架最大的不同在于其是Windows Server Kernel 自带组件的监控技术,保证了技术向后兼容性与自身的稳定性。因电子文档格式繁多,本文选择常用的PDF 格式论证该系统的实用性与可行性。

1 ETW 文件监控原理

Event Tracing for Windows(ETW)是Windows 操作系统提供的内核级事件跟踪机制,具有低CPU 占用高性能、完全异步的特点,即使在应用程序crash 情况下,监控事件也会被记录在内核中。ETW包含以下组件:控制器(Controller)、提供者(Provider)、消费者(Consumer),其中控制器完成监控会话的启动和停止,提供者会预先注册到ETW 框架上并实时提交监测数据到ETW 框架。消费者亦需注册到ETW 框架上,在注册时通过配置筛选器设置接收处理的事件与回调函数,若满足筛选器条件ETW就会触发所设置的回调函数。

2 系统的设计与分析

2.1 系统的架构与设计

为解决现有产品无法审计Windows Server 文档内容的问题,本文提出基于ETW 的PDF 文档内容实时监控系统。系统首先以事件跟踪的方式注册ETW 回调实现对Windows 文件访问行为的采集,其次将采集的数据通过PDF 文字提取模块解析形成文本,最后将文本提交Aho-Corasick 算法处理模块检索敏感信息并生成检测报告。该系统提供友好的界面方便查看PDF 文档敏感信息列表,运行过程中对操作系统无明显影响。该系统主要有如下几个模块:ETW 数据源采集模块、线程池业务调度模块、PDF 文本内容解析模块、Aho-Corasick算法处理模块、敏感信息日志管理模块,系统架构如图1所示。

图1 系统架构图

Windows Server Agent 工作流程如下:

(1)通过注册ETW 中GUID 为FileIoGuid 的消费者;

(2)启动ETW 监控会话,会话启动成功后ETW 会将监控日志写入内核缓冲区;

(3)注册的回调函数会实时收到操作系统中发生的所有文件访问操作;

(4)解析文件操作结构体EVENT_RECORD 数据提取文件访问信息,将其存储至队列后通知业务线程池;

(5)业务线程池使用muPDF[6]提取PDF 文档中的文本信息,同时生成JSON 格式数据;

(6)将JSON 数据使用Aho-Corasick 算法处理模块匹配敏感信息,生成PDF 文档内容敏感检测报告.

3 关键技术及实现

3.1 ETW 文件访问数据的采集

本系统原始数据的采集依赖于ETW 追踪机制,下面介绍注册ETW 会话的关键代码。

BOOL QZRegisterETW(){

TRACEHANDLE hHandle=NULL;

TRACEHANDLE hSessionHandle=NULL;

EVENT_TRACE_LOGFILE trace;

DEFINE_GUID(/*90cbdc39-4a3e-11d1-84f4-0000f80464e3*/

FileIoGuid,0x90cbdc39,0x4a3e,0x11d1,

0x84 ,0xf4,0x00,0x00,0xf8,0x04,0x64,0xe3

);

BOOL bResult=FALSE;

EnableTraceEx(&FileIoGuid,NULL,hSessionHandle,1,TRACE_LEVEL_INFORMATION,0,0,0,0);ZeroMemory(&trace,sizeof(EVENT_TRACE_LOGFILE));

trace.LoggerName="TestFilemon";

trace.EventRecordCallback=QzctCallbackFunc;

trace.LogFileMode=EVENT_TRACE_REAL_TIME_MODE;

hHandle=OpenTrace(&trace);

ProcessTrace(&hHandle,1,0,0);

return bResult;

}

其中QzctCallbackFunc 为设置的回调函数,ProcessTrace 启动监控会话成功后,QzctCallbackFunc 会收到文件访问操作信息。需注意EnableTraceEx 第四个参数用来控制监控会话的启动和停止。采集的数据异步通知业务线程池处理,数据采集流程如图2所示。

图2 数据采集流程图

3.2 PDF 文档内容提取

本系统采用线程池处理提取业务以保证监控框架的高性能,为极大地提高处理性能,本文利用IOCP 设计线程池,整个存储队列由操作系统维护,规避自己设计队列多线程竞争加锁造成性能低下的问题。线程池设计如下:

(1)CreateIoCompletionPort 创建完成端口,调用CreateThread创建与CPU 核数目一致的线程,形成线程池;

(2)线程池调用GetQueuedCompletionStatus 获取IOCP 队列的任务;

(3)新增IOCP 任务调用PostQueuedCompletionStatus 完成。

PDF 文档内容的提取引擎采用muPDF 库,muPDF 是一个轻量级的pdf 解析库,其具有小巧、解析效率高的特点,muPDF 库主要包括Fitz、pdf 两部分,Fitz 是pdf 的渲染引擎,将pdf 文档渲染成图片,而pdf 模块主要完成文档打开、数据解析以及绘制。分析fitz.h头文件发现,它实现了xml 文件解析,基础数据结构如tree,文件读写、图像、字体、颜色等结构体函数的定义。而pdf 模块部分的doucument.h 声明了文档读取、解析的具体方法,是Fitz 模块的具体实现。为方便数据解析,解析后的JSON 数据格式如图2所示。

图2 JSON 数据格式

提取PDF 文档内容的工作流程如下:

(1)使用接口fz_new_context、fz_register_document_handlers完成初始化;

(2)使用接口fz_open_document 打开文件,调用pdf_dict_gets获取标题、文档生成软件名称、作者、修改时间等信息;

(3)调用fz_load_page 分页加载pdf 单页信息,依次调用以下API 接口:fz_new_display_list、fz_run_page、fz_run_display_list、fz_new_output_with_buffer 获取文本内容;

(4)将fz_buffer 数据内容按图2 格式生成JSON 缓存数据;

3.3 Aho-Corasick 算法匹配

Aho-Corasick 算法是通过将多模式字符串建立一个确定性的有限自动机,以待匹配的文本作为该状态机的输入,当到达状态机的特定状态时说明算法匹配成功。AC 自动机是基于前缀搜索的原理实现的,是Tire 树[7]与KMP 算法的扩展。在AC 自动机的构造阶段,为每个状态生成对应的转移函数、失效函数与输出函数信息。因AC 自动机实际匹配性能高,本系统选择其作为敏感信息串的匹配算法。算法匹配伪代码如下:

其中T 为待匹配的目标文本字符串,n 为字符串的长度,m 为字典树节点指针,Next 函数返回从节点m 经路径T[i]到达的下一个节点指针,pre 函数返回节点m 的回溯节点指针,node_flag 检查节点是否为标记节点。

4 实验结果

4.1 测试环境

Windows Server 2008 系统:Intel Core I5-3320M,16GB 内存。

4.2 性能测试

为测试该实时监控框架对CPU 的性能影响,在文本字符串为2MB,模式串规模为10000 条的前提下,利用Windows Server 自带的资源管理器对该框架进行测试,十分钟内CPU 平均占用率的对比如图3所示。

图3 CPU 平均占用率对比图

5 结论

本文分析并阐述了基于ETW 与AC 自动机的高性能PDF 文件实时监控系统的设计与实现方法。实验结果表明:该框架占用CPU 占用率控制在5%左右,基本不会降低服务器的使用性能,综上述,该框架具有一定的实用价值。

猜你喜欢

线程文档解析
浅谈Matlab与Word文档的应用接口
有人一声不吭向你扔了个文档
三角函数解析式中ω的几种求法
基于C#线程实验探究
基于国产化环境的线程池模型研究与实现
线程池调度对服务器性能影响的研究*
睡梦解析仪
电竞初解析
对称巧用解析妙解
基于RI码计算的Word复制文档鉴别