跳至主要內容

文件监控


本篇教程主要介绍iMonitorSDK的文件监控相关功能。

文件监控全部消息

带Post的表示动作已经完成

消息类型说明
emMSGFileCreate打开、创建文件事件,返回拦截可以阻止文件的打开、创建
emMSGFilePostCreate
emMSGFileQueryOpen打开文件事件
emMSGFilePostQueryOpen
emMSGFileCleanup
emMSGFileCreateSection映射文件事件
emMSGFilePostCreateSection
emMSGFileRead读取文件事件
emMSGFilePostRead
emMSGFileWrite写文件事件
emMSGFilePostWrite
emMSGFileCreateHardLink创建文件硬链接事件
emMSGFilePostCreateHardLink
emMSGFileRename文件重命名事件
emMSGFilePostRename
emMSGFileDelete删除文件事件
emMSGFilePostDelete
emMSGFileSetSize设置文件大小事件
emMSGFilePostSetSize
emMSGFileSetBasicInfo设置文件基本信息事件
emMSGFilePostSetBasicInfo
emMSGFileFindFile查找文件、遍历文件事件
emMSGFilePostFindFile

emMSGFileCreate

字段

具体字段的含义可以参考NtCreateFile

struct FileCreate {
	Path                 : Path;
	Attributes           : FileAttributes;
	Access               : FileAccess;
	ShareAccess          : FileShareAccess;
	CreateDisposition    : FileDisposition;
	CreateOptions        : FileOptions;
}

使用场景

文件创建事件是非常重要的一个事件,所有的文件打开操作都会触发这个事件。一般可以用来实现文件审计、文件管控、文档保护,也可以用来实现文件重定向。

默认的情况下,所有的文件创建、打开都会触发这个消息,而文件打开是非常频繁的,数据量特别大,如果是同步等待可能会影响系统性能。为了解决这个问题,SDK也支持配置只监控写权限打开的消息。

cxUserSessionConfig session_config;
session_config.FilterFileCreateOnlyModifiable = true;

emMSGFilePostCreate

字段

比emMSGFileCreate多了一个Information字段,表示文件创建是创建新的文件、还是打开已经存在的文件,对于审计场景来说非常有用。

struct FilePostCreate {
	Path                 : Path;
	Attributes           : FileAttributes;
	Access               : FileAccess;
	ShareAccess          : FileShareAccess;
	CreateDisposition    : FileDisposition;
	CreateOptions        : FileOptions;
	Information          : ULONG;
}

emMSGFileCleanup

字段

struct FileCleanup {
	Path                 : Path;
	Information          : ULONG; // 用来表示文件是否被修改过
}

使用场景

对于杀毒场景,需要监控文件落地(创建写入完成)事件,在新的文件落地的时候,进行病毒查杀,这时候就可以使用Cleanup事件了。Information表示这个文件是否被修改。

emMSGFileCreateSection

字段

struct FileCreateSection {
	Path                 : Path;
	PageProtection       : FilePageProtection;
}

使用场景

这个消息对应于NtCreateSection(CreateFileMapping),表示创建文件映射,一般加载模块、加载进程都会触发,可以用来拦截模块的加载。(拦截模块加载也可以通过进程监控拦截。)

emMSGFileFindFile

字段

truct FileFindFile {
	Path                 : Path;
	FindName             : Path;
	RestartScan          : Bool;
}

使用场景

遍历文件的时候触发,拦截了可以阻止进程查看目录,达到隐藏文件的效果。也可以用来开发智能识别勒索病毒(几乎所有的勒索病毒都会遍历文件)

其他消息

其他消息可以参考文件操作的API