一种监控程序模块加载活动的系统过滤方法

文档序号:6606377阅读:178来源:国知局

专利名称::一种监控程序模块加载活动的系统过滤方法
技术领域
:本发明涉及程序加载过滤技术,特别涉及一种监控程序模块加载活动的系统过滤方法。
背景技术
:在学校机房或网吧等公共场所,电脑的系统安全性尤为受管理员和用户关注,人们一般会考虑通过安装还原软件或杀毒软件来增强系统的防护,但这些方案在实际运作中也存在着不足。一方面,还原软件通常并不能直接抵御恶意程序的加载运行,现在的恶意程序越来越多以内核驱动的形式运行,因而往往能够强行突破还原软件的保护。另一方面,杀毒软件虽然能在恶意程序落地的第一时间进行查杀,但需要不断更新特征库来效甄别新的病毒,对于维护几十台甚至几百台电脑的机构或营业场所来说,这显然增加了系统的管理成本;另外,杀毒软件的使用也会一定程序上降低系统的性能,加上难以避免的误报。
发明内容有鉴于此,本发明提供了一种监控程序模块加载活动的系统过滤方法,该方法请求操作系统在发生程序模块加载活动时发出通知,然后执行如下步骤步骤a、接收操作系统发出的程序模块加载活动通知,然后执行步骤b;步骤b、获取上述程序模块在系统内存中处于加载状态下的PE头部信息、以及该程序模块包含在磁盘中对应的原始文件内容中的PE头部信息;步骤c、比较所获取的加载状态下的PE头部信息与原始文件内容中的PE头部信息是否匹配,如果不匹配则执行步骤f,如果匹配则执行步骤d;步骤d、读取该程序模块的原始文件内容、并计算原始文件内容对应的散列结果;步骤e、根据散列结果与预置的过滤策略数据条件的匹配结果,决定上述程序模块的加载活动是否给予通过,如果不给予通过则执行步骤f,如果给予通过则结束本流程;步骤f、修改上述处于加载活动中的程序模块的入口代码,用以终止其继续执行,然后结束本流程。优选地,所述请求操作系统在发生程序模块加载活动时发出通知包括调用操作系统的内核系统函数,注册程序模块加载通知回调例程。优选地,所述的操作系统为Windows系统,所述的内核系统函数为PsSetLoadImageNotifyRoutineο优选地,所述的通知中进一步包括发生加载活动的程序模块于磁盘中的原始文件路径、该程序模块当前加载基址和加载后的模块长度。优选地,步骤a中所获取的加载状态下的PE头部信息,由上述程序模块的当前加载基址及偏移量计算得到;步骤a中所获取的原始文件内容中的PE头部信息,由对应程序模块在原始文件中的内容通过附加文件偏移计算得到。优选地,所述步骤e包括el、判断原始文件内容的散列结果是否与过滤策略预置数据中的任一黑名单项或任一白名单项匹配,如果匹配任一黑名单项,则直接拒绝加载活动的通过,然后结束本流程;如果匹配任一白名单项,则直接允许加载活动的通过,然后结束本流程;否则,无匹配的黑名单项和白名单项、并执行步骤e2;e2、判断过滤策略是否预置为默认拒绝通过,如果是,则直接拒绝加载活动的通过,然后结束本流程;否则,允许加载活动的通过,然后结束本流程。由上述技术方案可见,本发明请求操作系统在发生程序模块加载活动时发出通知,并能够在有程序模块发生加载活动时接收到操作系统发出的加载程序模块活动的通知,此时,只要该程序模块对应的原始文件在其加载过程未发生非法篡改,则读取该程序模块的原始文件内容并计算散列结果,并根据散列结果与预置的过滤策略数据条件的匹配结果来决定该程序模块加载活动是否给予通过,从而能够提高系统安全保护。相比于现有技术中的软件还原方式,由于恶意程序即便是以内核驱动的形式运行,其对应的程序模块也需要由操作系统负责加载和调度运行,因而本发明通过对处于加载状态下的程序模块予以过滤,能够避免未经鉴别认证的程序模块的运行,从而能够克服软件还原方式所存在的不足,提高系统安全防护的安全性;相比于现有技术中的软件杀毒方式,由于本发明不需要为了甄别新病毒而不断更新特征库,因而降低了部署系统安全防护的管理成本;并且,由于本发明监控的是程序模块的加载时机,无需实时对文件系统执行全局扫描和过滤,因而能够避免杀毒软件使用过程中对系统性能带来的负面影响。图1为本发明实施例中监控程序模块加载活动的系统过滤方法的一示例性流程图。具体实施例方式为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明进一步详细说明。图1为本发明实施例中监控程序模块加载活动的系统过滤方法的一示例性流程图。如图1所示,本实施例中监控程序模块加载活动的系统过滤方法可以由一个底层内核模式驱动程序来执行,例如,该底层内核模式驱动程序可命名为FilterDriver.sys,且该系统过滤方法包括步骤100,底层内核模式驱动程序请求操作系统在发生程序模块加载活动时发出通知。本步骤中,底层内核模式驱动程序可以通过调用操作系统的内核系统函数的方式,向操作系统注册一个程序模块加载通知回调例程。例如,对于Windows系统来说,可供底层内核模式驱动程序调用的内核系统函数可以选为PsSetLoadlmageNotifyRoutine,底层内核模式驱动程序注册的回调例程可以命名为OnLoadlmageNotifyProc。步骤101,在有程序模块(如aaa.sys、bbb.exe.ccc.dll等)发生加载活动时,底层内核模式驱动程序接收到操作系统发出的程序模块加载活动通知。步骤102,底层内核模式驱动程序获取上述程序模块在系统内存中处于加载状态下的PE(PortableExecutable,可移植的可执行文件)头部信息、以及该程序模块包含在磁盘中对应的原始文件内容中的PE头部信息。以Windows系统为例,本步骤中所获取的加载状态下的PE头部信息、以及原始文件内容中的PE头部信息,均可以包括IMAGE_NT_HEADERS、IMAGE_FILE_HEADER,IMAGE_0PTI0NAL_HEADER、以及IMAGE_SECTION_HEADER等Windows系统定义的结构。此外,步骤101所接收到通知中可以进一步包括发生加载活动的程序模块于磁盘中的的原始文件路径、以及该程序模块当前加载基址和加载后的模块长度。这种情况下在本步骤中所获取的加载状态下的PE头部信息,可以由上述程序模块的当前加载基址及偏移量计算得到;而获取的原始文件内容中的PE头部信息,可以由对应程序模块在原始文件中的内容通过附加文件偏移计算得到,例如,对于Windows操作系统来说,底层内核模式驱动程序可以通过调用系统函数ZwReadFile来读取原始文件内容。步骤103,底层内核模式驱动程序比较所获取的加载状态下的PE头部信息与原始文件内容中的PE头部信息是否匹配,如果不匹配则表示该程序模块加载过程中对应的原始文件发生了非法篡改、并执行步骤105,如果匹配则表示该程序模块加载过程中对应的原始文件未被非法篡改、并执行步骤104。步骤104、计算原始文件内容对应的散列结果。本步骤中,利用MD5,SHA-I或者CRC等现有算法计算原始文件内容对应的散列结^ο步骤105、底层内核模式驱动程序根据散列结果与预置的过滤策略数据条件的匹配结果,决定上述程序模块的加载活动是否给予通过,如果给予通过则结束本流程,如果不给予通过则执行步骤106。本步骤中,底层内核模式驱动程序可以利用散列结果来决定上述程序模块的加载活动是否给予通过,具体说105a、判断原始文件内容的散列结果是否与过滤策略预置数据中的任一黑名单项匹配,如果是,则直接拒绝加载活动的通过,然后结束本流程;否则,表示不存在匹配的黑名单项,并执行步骤105b;105b、判断原始文件内容的散列结果是否与过滤策略预置数据中的任一白名单项匹配,如果是,则直接允许加载活动的通过,然后结束本流程;否则,表示不存在匹配的黑名单项和白名单项,并执行步骤105c;105c、判断过滤策略是否预置为默认拒绝通过,如果是,则在不存在匹配黑名单项和白名单项的情况下,直接拒绝加载活动的通过,然后结束本流程;否则,在不存在匹配黑名单项和白名单项的情况下,允许加载活动的通过,然后结束本流程。上述步骤105a和105b的顺序可以对调,且也可以不需要步骤105a来判断是否存在匹配的黑名单项。步骤106、底层内核模式驱动程序修改上述处于加载活动中的程序模块的入口代码,用以终止其继续执行,然后结束本流程。本步骤中,底层内核模式驱动程序可以利用加载状态下的PE头部信息计算该模块的入口代码地址,然后查找、并修改该入口代码,例如在该入口代码中插入RET汇编指令使其终止继续执行。至此,上述流程结束。另需要说明的是,上述流程中的步骤100可以仅在第一次执行该流程时执行一次,而当再次执行上述流程时,均可从步骤101开始。除了由底层内核模式驱动程序执行上述流程之外,本实施例还可以设置一上层应用管理程序,例如其命名为FilterManager,并可由上层应用管理程序通过管理访问接口向底层内核模式驱动程序设置黑名单项和白名单项、以及过滤策略是否预置为默认拒绝通过。具体说,以Windows系统为例,底层内核模式驱动程序可以在其初始化完成后,通过调用Win32API函数DeviceloControl请求上层应用管理程序更新黑名单项和白名单项、以及过滤策略预置数据。而且,底层内核模式驱动程序还可以向上层应用管理程序上报过滤处理结果,即是否允许某个加载的程序模块通过、是否拒绝某个加载的程序模块通过。较佳地,过滤处理结果中还可以包括如下的明细处理的时间戳、程序模块的原始文件路径、程序模块于内存中的当前加载基址、程序模块于内存中加载后的长度和PE头部信息、原始文件的长度和散列结果、以及,如果拒绝程序模块加载活动的通过,还包括拒绝的原因。以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换以及改进等,均应包含在本发明的保护范围之内。权利要求一种监控程序模块加载活动的系统过滤方法,其特征在于,该方法请求操作系统在发生程序模块加载活动时发出通知,然后执行如下步骤步骤a、接收操作系统发出的程序模块加载活动通知,然后执行步骤b;步骤b、获取上述程序模块在系统内存中处于加载状态下的PE头部信息、以及该程序模块包含在磁盘中对应的原始文件内容中的PE头部信息;步骤c、比较所获取的加载状态下的PE头部信息与原始文件内容中的PE头部信息是否匹配,如果不匹配则执行步骤f,如果匹配则执行步骤d;步骤d、读取该程序模块的原始文件内容、并计算原始文件内容对应的散列结果;步骤e、根据散列结果与预置的过滤策略数据条件的匹配结果,决定上述程序模块的加载活动是否给予通过,如果不给予通过则执行步骤f,如果给予通过则结束本流程;步骤f、修改上述处于加载活动中的程序模块的入口代码,用以终止其继续执行,然后结束本流程。2.如权利要求1所述的方法,其特征在于,所述请求操作系统在发生程序模块加载活动时发出通知包括调用操作系统的内核系统函数,注册程序模块加载通知回调例程。3.如权利要求2所述的方法,其特征在于,所述的操作系统为Windows系统,所述的内^MMMSlM^]PsSetLoadlmageNotifyRoutine。4.如权利要求1至3中任一项所述的方法,其特征在于,所述的通知中进一步包括发生加载活动的程序模块于磁盘中的原始文件路径、该程序模块当前加载基址和加载后的模块长度。5.如权利要求4所述的方法,其特征在于,步骤a中所获取的加载状态下的PE头部信息,由上述程序模块的当前加载基址及偏移量计算得到;步骤a中所获取的原始文件内容中的PE头部信息,由对应程序模块在原始文件中的内容通过附加文件偏移计算得到。6.如权利要求1所述的方法,其特征在于,所述步骤e包括el、判断原始文件内容的散列结果是否与过滤策略预置数据中的任一黑名单项或任一白名单项匹配,如果匹配任一黑名单项,则直接拒绝加载活动的通过,然后结束本流程;如果匹配任一白名单项,则直接允许加载活动的通过,然后结束本流程;否则,无匹配的黑名单项和白名单项、并执行步骤e2;e2、判断过滤策略是否预置为默认拒绝通过,如果是,则直接拒绝加载活动的通过,然后结束本流程;否则,允许加载活动的通过,然后结束本流程。全文摘要本发明公开了一种监控程序模块加载活动的系统过滤方法。本发明请求操作系统在发生程序模块加载活动时发出通知,并能够在有程序模块发生加载活动时接收到操作系统发出的加载程序模块活动的通知,此时,只要该程序模块对应的原始文件在其加载过程未发生非法篡改,则读取该程序模块的原始文件内容并计算散列结果,并根据散列结果与预置的过滤策略数据条件的匹配结果来决定该程序模块加载活动是否给予通过,从而能够提高系统安全保护。文档编号G06F21/22GK101901323SQ20101023362公开日2010年12月1日申请日期2010年7月22日优先权日2010年7月22日发明者邝耀华申请人:湖北盛天网络技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1