动态白名单驱动方法及系统转让专利

申请号 : CN202211011343.9

文献号 : CN115080966B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 荣伟

申请人 : 北京六方云信息技术有限公司北京六方云科技有限公司

摘要 :

本发明实施例提供一种动态白名单驱动方法及系统,属于信息安全技术领域。所述方法包括:响应于文件操作指令触发信号,触发第一IRP例程;基于所述第一IRP例程对目标文件进行创建;响应于目标文件创建完成信号,触发第二IRP例程;基于所述第二IRP例程执行目标文件写入并获取写入内容,若确定所述写入内容无病毒特征,向下传递IRP例程;响应于向下传递IRP例程的信号,触发第三IRP例程;基于所述第三IRP例程判断执行写入完成的目标文件的进程程序是否位于白名单内,若位于白名单内,对所述目标文件进行白名单添加。本发明方案解决了现有方法无法安全地实现进程新生文件白订单动态添加的问题。

权利要求 :

1.一种动态白名单驱动方法,其特征在于,所述方法包括:响应于文件操作指令触发信号,触发第一IRP例程;

基于所述第一IRP例程对目标文件进行创建;包括:

查询所述目标文件是否位于磁盘内;

若所述目标文件位于磁盘内,则直接调用目标文件;反之,则判定所述目标文件为新生成文件,并判断所述目标文件是否为敏感文件类型;若所述目标文件为敏感文件类型,则将所述目标文件加入新增敏感文件缓存树中,待缓存完成后触发目标文件创建完成信号;

响应于目标文件创建完成信号,触发第二IRP例程;

基于所述第二IRP例程执行目标文件写入并获取写入内容,若确定所述写入内容无病毒特征,向下传递IRP例程;

响应于向下传递IRP例程的信号,触发第三IRP例程;

基于所述第三IRP例程判断执行写入完成的目标文件的进程程序是否位于白名单内,若位于白名单内,对所述目标文件进行白名单添加。

2.根据权利要求1所述的方法,其特征在于,所述文件操作指令包括:文件打开指令或文件创建指令。

3.根据权利要求1所述的方法,其特征在于,所述第一IRP例程为IRP_MJ_CREATE;所述第二IRP例程为IRP_MJ_WRITE;所述第三IRP例程为IRP_MJ_CLOSE。

4.根据权利要求1所述的方法,其特征在于,所述敏感文件类型为:.exe文件、.dll文件、.sys文件、.bat文件、.com文件、.hta文件、ocx文件、.drv文件、.vbs文件中的任意一种文件。

5.根据权利要求1所述的方法,其特征在于,所述基于所述第二IRP例程执行目标文件写入并获取写入内容,若确定所述写入内容无病毒特征,向下传递IRP例程,包括:基于所述第二IRP例程中预设的钩子函数,进行写入行为识别;

确认识别到写入行为,则判断所述目标文件是否存在于所述新增敏感文件缓存树中;

若所述目标文件未存在于所述新增敏感文件缓存树中,则终止IRP例程;反之,则获取对应的写入内容,并判断所述写入内容是否存在病毒特征;

若所述写入内容存在病毒特征,则清除目标文件缓存内容,并终止IRP例程;反之,则向下传递IRP例程。

6.根据权利要求1所述的方法,其特征在于,所述基于所述第三IRP例程判断执行写入完成的目标文件的进程程序是否位于白名单内,若位于白名单内,对所述目标文件进行白名单添加,包括:基于所述第三IRP例程,开始执行文件关闭进程;

判断执行文件关闭进程的目标文件是否存在于所述新增敏感文件缓存树中;

若执行文件关闭进程的目标文件未存在于所述新增敏感文件缓存树中,则终止IRP例程;反之,则识别操作当前目标文件的进程程序文件,并判断该进程程序文件是否处于白名单内;

若所述进程程序文件未处于白名单内,则终止IRP例程;反之,则获取当前目标文件的MD5计算值,并将所述MD5计算值作为当前目标文件的指纹特征加入白名单中。

7.一种动态白名单驱动系统,其特征在于,所述系统包括:响应单元,用于响应于文件操作指令触发信号,触发第一IRP例程;

创建单元,用于基于所述第一IRP例程对目标文件进行创建;包括:查询所述目标文件是否位于磁盘内;

若所述目标文件位于磁盘内,则直接调用目标文件;反之,则判定所述目标文件为新生成文件,并判断所述目标文件是否为敏感文件类型;若所述目标文件为敏感文件类型,则将所述目标文件加入新增敏感文件缓存树中,待缓存完成后触发目标文件创建完成信号;

所述响应单元还用于响应于目标文件创建完成信号,触发第二IRP例程;

写入单元,用于基于所述第二IRP例程执行目标文件写入并获取写入内容,若确定所述写入内容无病毒特征,向下传递IRP例程;

所述响应单元还用于响应于向下传递IRP例程的信号,触发第三IRP例程;

处理单元,用于基于所述第三IRP例程判断执行写入完成的目标文件的进程程序是否位于白名单内,若位于白名单内,对所述目标文件进行白名单添加。

8.根据权利要求7所述的系统,其特征在于,所述第一IRP例程为IRP_MJ_CREATE;所述第二IRP例程为IRP_MJ_WRITE;所述第三IRP例程为IRP_MJ_CLOSE。

9.一种计算机可读储存介质,该计算机可读存储介质上储存有指令,其在计算机上运行时使得计算机执行权利要求1‑6中任一项所述的动态白名单驱动方法。

说明书 :

动态白名单驱动方法及系统

技术领域

[0001] 本发明涉及信息安全技术领域,具体地涉及一种动态白名单驱动方法及一种动态白名单驱动系统。

背景技术

[0002] 在现有方法中,为了保障终端主机运行环境绝对安全,常使用白+黑的方式对主机运行期间产生的进程事件进行了审计或拦截。现有方法下,对白名单内的程运行予以放行,对不在白名单内的程序运行予以审计或拦截。通过这种手段能够最大程度地减少误报和系统开销和资源占用率。但单纯以此类方式还并不能完全解决现场实施中遇到的问题。有些白名单内的程序运行期间会产生一些临时文件或释放出一些新的文件,这些产生或释放出来的新文件是白名单以外的文件。这类不在白名单内的却又合法的新文件将也会被拦截,这就可能影响程序的正常运行。
[0003] 目前白名单技术应用场景只能应用在相对稳定的系统上。如果安装的系统应用更新较快,需要较为频繁地更新白名单数据库,且在更新的过程中会产生误拦截或失去保护的时间窗口。频繁地更新数据库也需要更多的人力成本开销。另外,对于白名单内的程序生成了新的可执行程序、文件、脚本等,无法对此类新生成的文件的安全性做出判断。针对现有方法无法安全地实现进程新生文件白订单动态添加的问题,需要创造一种新的动态白名单驱动方法。

发明内容

[0004] 本发明实施方式的目的是提供一种动态白名单驱动方法及系统,以至少解决现有方法无法安全地实现进程新生文件白订单动态添加的问题。
[0005] 为了实现上述目的,本发明第一方面提供一种动态白名单驱动方法,所述方法包括:响应于文件操作指令触发信号,触发第一IRP例程;基于所述第一IRP例程对目标文件进行创建;响应于目标文件创建完成信号,触发第二IRP例程;基于所述第二IRP例程执行目标文件写入并获取写入内容,若确定所述写入内容无病毒特征,向下传递IRP例程;响应于向下传递IRP例程的信号,触发第三IRP例程;基于所述第三IRP例程判断执行写入完成的目标文件的进程程序是否位于白名单内,若位于白名单内,对所述目标文件进行白名单添加。
[0006] 可选的,所述文件操作指令包括:文件打开指令或文件创建指令。
[0007] 可选的,所述第一IRP例程为IRP_MJ_CREATE;所述第二IRP例程为IRP_MJ_WRITE;所述第三IRP例程为IRP_MJ_CLOSE。
[0008] 可选的,所述基于所述第一IRP例程对目标文件进行创建,包括:查询所述目标文件是否位于磁盘内;若所述目标文件位于磁盘内,则直接调用目标文件;反之,则判定所述目标文件为新生成文件,并判断所述目标文件是否为敏感文件类型;若所述目标文件为敏感文件类型,则将所述目标文件加入新增敏感文件缓存树中,待缓存完成后触发目标文件创建完成信号。
[0009] 可选的,所述敏感文件类型为:.exe文件、.dll文件、.sys文件、.bat文件、.com文件、.hta文件、ocx文件、.drv文件、.vbs文件中的任意一种文件。
[0010] 可选的,所述基于所述第二IRP例程执行目标文件写入并获取写入内容,若确定所述写入内容无病毒特征,向下传递IRP例程,包括:基于所述第二IRP例程中预设的钩子函数,进行写入行为识别;确认识别到写入行为,则判断所述目标文件是否存在于所述新增敏感文件缓存树中;若所述目标文件未存在于所述新增敏感文件缓存树中,则终止IRP例程;反之,则获取对应的写入内容,并判断所述写入内容是否存在病毒特征;若所述写入内容存在病毒特征,则清除目标文件缓存内容,并终止IRP例程;反之,则向下传递IRP例程。
[0011] 可选的,所述基于所述第三IRP例程判断执行写入完成的目标文件的进程程序是否位于白名单内,若位于白名单内,对所述目标文件进行白名单添加,包括:基于所述第三IRP例程,开始执行文件关闭进程;判断执行文件关闭进程的目标文件是否存在于所述新增敏感文件缓存树中;若执行文件关闭进程的目标文件未存在于所述新增敏感文件缓存树中,则终止IRP例程;反之,则识别操作当前目标文件的进程程序文件,并判断该进程程序文件是否处于白名单内;若进程程序文件未处于白名单内,则终止IRP例程;反之,则获取当前目标文件的MD5计算值,并将所述MD5计算值作为当前目标文件的指纹特征加入白名单中。
[0012] 本发明第二方面提供一种动态白名单驱动系统,所述系统包括:响应单元,用于响应于文件操作指令触发信号,触发第一IRP例程;创建单元,用于基于所述第一IRP例程对目标文件进行创建;所述响应单元还用于响应于目标文件创建完成信号,触发第二IRP例程;写入单元,用于基于所述第二IRP例程执行目标文件写入并获取写入内容,若确定所述写入内容无病毒特征,向下传递IRP例程;所述响应单元还用于响应于向下传递IRP例程的信号,触发第三IRP例程;处理单元,用于基于所述第三IRP例程判断执行写入完成的目标文件的进程程序是否位于白名单内,若位于白名单内,对所述目标文件进行白名单添加。
[0013] 可选的,所述第一IRP例程为IRP_MJ_CREATE;所述第二IRP例程为IRP_MJ_WRITE;所述第三IRP例程为IRP_MJ_CLOSE。
[0014] 另一方面,本发明提供一种计算机可读储存介质,该计算机可读存储介质上储存有指令,其在计算机上运行时使得计算机执行上述的动态白名单驱动方法。
[0015] 通过上述技术方案,本发明方案基于运行程序过程中新生成的文件进行对应的安全性判断,然后在安全性判定合格后自动进行白名单添加。在解决了新文件自动添加白名单的问题,还保证了在新文件自动添加白名单过程中保证程序能够正常运行且不会引发新的风险。
[0016] 本发明实施方式的其它特征和优点将在随后的具体实施方式部分予以详细说明。

附图说明

[0017] 附图是用来提供对本发明实施方式的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本发明实施方式,但并不构成对本发明实施方式的限制。在附图中:
[0018] 图1是本发明一种实施方式提供的动态白名单驱动方法的步骤流程图;
[0019] 图2是本发明一种实施方式提供的动态白名单驱动方法的实施过程图;
[0020] 图3是本发明一种实施方式提供的动态白名单驱动系统的系统结构图。

具体实施方式

[0021] 以下结合附图对本发明的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本发明,并不用于限制本发明。
[0022] 在现有方法中,为了保障终端主机运行环境绝对安全,常使用白+黑的方式对主机运行期间产生的进程事件进行了审计或拦截。白名单技术也可称为“应用控制”,这种方法专门侧重于管理端点应用的行为,管理的对象包括可执行文件、脚本和宏等多类文件。通过全盘文件扫描,可以快速地为系统生成一个内部的白名单数据库,也通过模板导出进行批量部署,快速下发到所有终端设备。通过识别系统中的进程或文件是否具有经批准的属性、常见进程名称、文件名称、发行商名称、数字签名,白名单技术能够让企业批准哪些进程被允许在特定系统运行。有些供应商产品只包括可执行文件,而其他产品还包括脚本和宏,并可以阻止更广泛的文件。
[0023] 现有方法下,对白名单内的程运行予以放行,对不在白名单内的程序运行予以审计或拦截。通过这种手段能够最大程度地减少误报和系统开销和资源占用率。但单纯以此类方式还并不能完全解决现场实施中遇到的问题。有些白名单内的程序运行期间会产生一些临时文件或释放出一些新的文件,这些产生或释放出来的新文件是白名单以外的文件。这类不在白名单内的却又合法的新文件将也会被拦截,这就可能影响程序的正常运行。
[0024] 基于此,需要将这些生成的新文件自动进行审核并进行白名单添加,避免被无差别地拦截。但是现有方法并不存在这种新文件自动添加白名单的方法。本发明方案正是基于现有方法无法安全地实现进程新生文件白订单动态添加的问题,提出了一种新的动态白名单驱动方法,不仅解决了新文件自动添加白名单的问题,还保证了在新文件自动添加白名单过程中保证程序能够正常运行且不会引发新的风险。
[0025] 图1是本发明一种实施方式提供的动态白名单驱动方法的方法流程图。如图1所示,本发明实施方式提供一种动态白名单驱动方法,所述方法包括:
[0026] 步骤S10:响应于文件操作指令触发信号,触发第一IRP例程,基于所述第一IRP例程对目标文件进行创建。
[0027] 具体的,目前白名单技术应用场景只能应用在相对稳定的系统上。如果安装的系统应用更新较快,需要较为频繁地更新白名单数据库,且在更新的过程中会产生误拦截或失去保护的时间窗口。频繁地更新数据库也需要更多的人力成本开销。另外,对于白名单内的程序生成了新的可执行程序、文件、脚本等,无法对此类新生成的文件的安全性做出判断。本发明方案的目的便在于自动实现新产生文件的审核和白名单添加。基于此,对于任何可能产出新文件的进程,以及后续对新文件写入和驱动的进程,均需要进行对应的进程识别。基于此,优选的,本发明方案在文件创建、文件写入、文件关闭等多个位置放置钩子函数。
[0028] 钩子函数是Windows消息处理机制的一部分,通过设置“钩子”,应用程序可以在系统级对所有消息、事件进行过滤,访问在正常情况下无法访问的消息。钩子的本质是一段用以处理系统消息的程序,通过系统调用,把它挂入系统。钩子函数可以捕捉进程或其它进程发生的事件。通过“钩挂”,可以给Windows一个处理或过滤事件的回调函数,该函数也叫做“钩子函数”,当每次发生您感兴趣的事件时,Windows都将调用该函数。通过设置的钩子函数,可以对这些文件操作进程的信息进行访问,以便于进行对应的文件识别。
[0029] 优选的,所述文件操作指令包括:文件打开指令或文件创建指令。
[0030] 具体的,当某应用程序有文件打开或文件创建的操作时,便会触发文件操作指令触发信号,则IRP_MJ_CREATE对应的回调函数即被调用。IRP_MJ_CREATE 例程是由系统发出的请求打开文件对象的请求例程,基于该例程实现文件的打开或创建。进行文件创建时,查询所述目标文件是否位于磁盘内,若所述目标文件位于磁盘内,则直接调用目标文件;反之,则判定所述目标文件为新生成文件,并判断所述目标文件是否为敏感文件类型;若所述目标文件为敏感文件类型,则将所述目标文件加入新增敏感文件缓存树中,缓存完成后,触发文件创建完成信号。
[0031] 在另一种可能的实施方式中,如图2,本发明方案是需要对新产生的文件进行白名单添加,所以需要保证文件不在磁盘内且是敏感文件,需要满足这两项需求,所以,也可以先进性敏感性判断,再执行是否在磁盘判断,该判断顺序不影响本发明方案。
[0032] 具体的,根据IRP_MJ_CREATE中的文件对象我们可以向底层文件系统发送查询文件信息的IRP包,查询此文件对象是否存在于磁盘上。如果该文件本身就在磁盘上,则其为历史信息,则表示其并非新产生的文件,也就不存在后续的文件判断和白名单添加的步骤,继续执行对应的应用程序便可。而若该文件不存在于磁盘上,则表示该文件时新产生的文件,则判断文件是否为敏感文件类型,所述敏感文件类型为:.exe文件、.dll文件、.sys文件、.bat文件、.com文件、.hta文件、ocx文件、.drv文件、.vbs文件中的任意一种文件。
[0033] 判断新生成文件是否为敏感文件的意义在于,判断其是否具有添加白名单的必要,若非敏感文件,表示该文件不具有重要性,其即使被拦截也不会对应用进程产生影响,便可以直接放弃后续步骤。而若文件为上述米敏感文件中的任意一种,则表示其具有一定的重要性,若被误拦截可能会影响程序的正常运行,则需要执行后续的白名单动态添加。则将该文件存储到新增敏感文件缓存树中。优选的,缓存基于伸展树实现,伸展树(Splay Tree),也叫分裂树,是一种二叉排序树,它能在O(og n)内完成插入、查找和删除操作。假设想要对一个二叉查找树执行一系列的查找操作。为了使整个查找时间更小,被查频率高的那些条目就应当经常处于靠近树根的位置。于是想到设计一个简单方法,在每次查找之后对树进行重构,把被查找的条目搬移到离树根近一些的地方。splay tree应运而生。splay tree是一种自调整形式的二叉查找树,它会沿着从某个节点到树根之间的路径,通过一系列的旋转把这个节点搬移到树根去。其具有不需要记录用于平衡树的冗余信息的优势。
[0034] 步骤S20:响应于目标文件创建完成信号,触发第二IRP例程,基于所述第二IRP例程执行所述目标文件写入,并获取写入内容,若确定所述写入内容无病毒特征,向下传递IRP例程。
[0035] 具体的,IRP_MJ_CREATE完成后仅仅创建了文件,但并未向文件内写入任何数据。通俗来说,IRP_MJ_CREATE仅仅创建了一个文档,该文档内还未写入任何实质性的东西,该文档的实际意义是基于后续写入内容决定的。基于此,对应触发的第二IRP例程为IRP_MJ_WRITE,基于该例程进行对应的数据写入。
[0036] 在目标文件基础上,执行对应的写入操作,IRP_MJ_WRITE中的钩子函数进行对应的写入操作识别,当识别到写入行为后,判断所述目标文件是否存在于所述新增敏感文件缓存树中;若所述写入内容未存在于所述新增敏感文件缓存树中,则终止IRP例程;若所述写入内容存在于所述新增敏感文件缓存树中,获取对应的写入内容;将所述写入内容上报至应用层灰过白引擎,判断所述写入内容是否存在病毒特征;若所述写入内容存在病毒特征,则清楚目标文件缓存内容,并终止IRP例程;反之,则向下传递IRP例程。
[0037] 具体的,当有写入的事件触发后,首先查看被写入的文件对象是否存在于新增敏感文件缓存树上。即判断写入目标是否是在先创建的文件,若不在缓存树上,则表示为预先创建成功,则不能执行后续的写入操作。如果存在于缓存树上,则获取其写入的文件内容,将其上报至应用层灰过白引擎,查看是否存在病毒特征。如果文件内容是安全的,则通知驱动将IRP_MJ_WRITE向下层文件系统底层驱动派发。
[0038] 步骤S30:响应于向下传递IRP例程的信号,触发第三IRP例程,基于所述第三IRP例程判断执行写入完成的目标文件的进程程序是否位于白名单内,并在其位于白名单内时对所述目标文件进行白名单添加。
[0039] 具体的,因为需要对写入的数据进行是否存在病毒审查,所以在完成写入后依旧未出现报错的情况下,表示写入完成的目标文件是合法文件,且可以将其添加到白名单中。进行白名单添加时,需要执行对应的文件关闭进程,以保证后续的信息读取。则触发对应的第三IRP例程为IRP_MJ_CLOSE,收到IRP_MJ_CLOSE请求意味着与目标device object相关的file object句柄已经关闭或释放。所有的外部I/O请求都已结束或取消。
[0040] 与数据写入步骤相似,执行对应的白名单添加前,首先需要判断当前文件是否处于缓存树上,及判断当前需要处理的文件,是否是在先完成创建和写入的文件,只有在先完成创建和写入的文件才是当前应用程序生成的文件。若当前文件未处于缓存树上,则直接终止后续步骤。如果存在于缓存树上,驱动将此文件路径和生成此文件的进程路径通知Windows上层应用。上层应用将此消息通知白名单模块,白名单模块检查操作此文件的进程程序文件,如果是白名单内的程序,则获取基于对应文件内容的MD5计算值作为其指纹特征加入白名单中,从而完成了白名单的动态添加。
[0041] 在本发明实施例中,本发明方案能够解决白名单方案对工业上位机运行经常升级更新的程序时,白名单防护需要经常手动更新的场景,降低了维护成本。本发明方案能够保证工业上位机在白名单更新期间依旧能够实时保障上位机仅运行可信的程序,有效预防位置病毒木马程序的运行。
[0042] 图3是本发明一种实施方式提供的动态白名单驱动系统的系统结构图。如图3所示,本发明实施方式提供一种动态白名单驱动系统,所述系统包括:响应单元,用于响应于文件操作指令触发信号,触发第一IRP例程;创建单元,用于基于所述第一IRP例程对目标文件进行创建;所述响应单元还用于响应于目标文件创建完成信号,触发第二IRP例程;写入单元,用于基于所述第二IRP例程执行目标文件写入并获取写入内容,若确定所述写入内容无病毒特征,向下传递IRP例程;所述响应单元还用于响应于向下传递IRP例程的信号,触发第三IRP例程;处理单元,用于基于所述第三IRP例程判断执行写入完成的目标文件的进程程序是否位于白名单内,若位于白名单内,对所述目标文件进行白名单添加。
[0043] 可选的,所述第一IRP例程为IRP_MJ_CREATE;所述第二IRP例程为IRP_MJ_WRITE;所述第三IRP例程为IRP_MJ_CLOSE。
[0044] 本发明实施方式还提供一种计算机可读储存介质,该计算机可读存储介质上储存有指令,其在计算机上运行时使得计算机执行上述的动态白名单驱动方法。
[0045] 本领域技术人员可以理解实现上述实施方式的方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序存储在一个存储介质中,包括若干指令用以使得单片机、芯片或处理器(processor)执行本发明各个实施方式所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read‑Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
[0046] 以上结合附图详细描述了本发明的可选实施方式,但是,本发明实施方式并不限于上述实施方式中的具体细节,在本发明实施方式的技术构思范围内,可以对本发明实施方式的技术方案进行多种简单变型,这些简单变型均属于本发明实施方式的保护范围。另外需要说明的是,在上述具体实施方式中所描述的各个具体技术特征,在不矛盾的情况下,可以通过任何合适的方式进行组合。为了避免不必要的重复,本发明实施方式对各种可能的组合方式不再另行说明。
[0047] 此外,本发明的各种不同的实施方式之间也可以进行任意组合,只要其不违背本发明实施方式的思想,其同样应当视为本发明实施方式所公开的内容。