专利名称:驱动型恶意软件防御方法和装置的制作方法
技术领域:
本发明涉及一种驱动型恶意软件防御方法和装置,属于计算机安全技术 领域。
背景技术:
随着计算机的广泛使用,各种计算机病毒的数量和种类也迅速增多,尤 其随着网络的发展,病毒的传播和危害更加严重,为计算机用户造成困扰和 损失。在现有的病毒防护中,随着安全软件逐步采用基于行为的恶意程序判 定方法,使得基于用户态应用程序的恶意程序逐步向内核态驱动型发展,这
些恶意程序通过驱动方式加载到Windows操作系统的内核中,从而实现对用 户数据的破坏和盗取行为。
在现有技术中,安全软件对这种驱动型程序采取的监控措施主要有两种, 一种是监控驱动加载行为,在驱动加载时询问用户是否允许驱动加载。另一 种措施是钩挂需要监控的系统函数的入口代码,使其先运行安全软件监控代 码,在被监控的系统函数被调时,先执行安全软件的监控代码,进行逻辑判 断,判定调用行为是否合法。对于第一种监控措施来说,它将由于放行恶意 驱动加载后对系统损害的责任完全推卸到用户身上,不具有智能性。对于第 二种措施来说,首先,由于钩挂方式需要i'务改被监控的系统函数的入口代码, 使其跳转到安全软件的监控代码中进行逻辑判断,此种钩挂方式较容易被发 现,因此也较容易被恢复,现在已有驱动型恶意软件通过读^U兹盘上原始内 核文件,对安全软件钩挂的函数入口代码进行恢复,让函数执行原有逻辑, 躲避安全软件的监控;其次,被钩挂的系统函数调用可能也是系统本身或者 正常内核模块频繁调用的函数,每次调用都会执行一次安全软件的判断逻辑, 对系统性能有极大的影响;另外,如果用户计算机上安装多种用此方式钩挂
5被监控的系统函数时,会造成冲突,要么造成安全软件部分功能失效,要么 由于钩挂是判断逻辑不严谨,造成系统崩溃。
发明内容
本发明的目的是针对上述现有技术的缺陷,提供一种驱动型恶意软件防 御方法和装置,以实现对驱动型恶意程序进行有效防御的同时,具有智能性、 防御性能安全可靠且不易被恢复以及不会对系统性能产生影响的效果。
为实现上述目的,本发明提供了一种驱动型恶意软件防御方法,包括
根据驱动程序的导入表信息,将与所需监控的系统函数相关的函数地址 信息替换为安全软件监控函数的地址信息;
应用所述安全软件监控函数,监控所述驱动程序的执行动作,并在执行 动作异常时发送报警信息。
为实现上述目的,本发明还提供了一种驱动型恶意软件防御装置,包括
替换处理模块,用于根据驱动程序的导入表信息,将与所需监控的系统 函数相关的函数地址信息替换为安全软件监控函数的地址信息;
监控处理模块,用于应用所述替换处理模块替换后的安全软件监控函数, 监控所述驱动程序的执行动作,并在执行动作异常时发送报警信息。
本发明在驱动程序执行之前的时间点上,将所需监控的系统函数替换成 安全软件监控函数后,可以应用该安全软件监控函数监控驱动程序是否执行 了非法操作,当判断执行动作即行为特征异常时,即可发送报警信息,从而 有效防御驱动型恶意软件的攻击。本发明可以由系统自行完成而不需要任何 人工操纵,因此不需要用户进行任何判断即可有效防止驱动型恶意软件的攻 击,具有智能性;本发明充分利用驱动程序必须调用系统函数才能实现其功 能的特征,在特定的时间点上进行安全软件替换操作,因此,防御性能安全 可靠且不易被恢复;另外,本发明仅需要将与所需监控的系统函数相关的函 数地址信息进行一次替换,即可完成后续逻辑判断,而不需要反复调用系统 函数,从而不会对系统性能产生影响。
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
图1为本发明驱动型恶意软件防御方法第一实施例的流程图; 图2为本发明驱动型恶意软件防御方法第二实施例的流程图; 图3为本发明驱动型恶意软件防御方法第三实施例的流程图; 图4为本发明驱动型恶意软件防御装置第一实施例的结构示意图; 图5为本发明驱动型恶意软件防御装置第二实施例的结构示意图; 图6为本发明驱动型恶意软件防御装置第三实施例的结构示意图。
具体实施例方式
图1为本发明驱动型恶意软件防御方法第一实施例的流程图,如图1所 示,本实施例的方法包括
步骤101、根据驱动程序的导入表信息,将与所需监控的系统函数相关 的函数地址信息替换为安全软件监控函数的地址信息;
驱动程序加载时,会存在一个时间点,在此时间点上,驱动程序已经加 载到系统内核中,通过解析也获取到该驱动程序的导入表信息,下一步就是 调用驱动程序所需的系统函数,从而实现驱动功能。在此时间点安装安全软 件监控函数,能在驱动程序执行前,将驱动程序所需调用的系统函数替换为 安全软件监控函数。该替换过程即可为将与所需监控的系统函数相关的函数 地址信息替换为安全软件监控函数的地址信息。该安全软件监控函数具有逻 辑判断功能,能够在后续根据该安全软件监控函数判断驱动程序是否执行了 异常操作。
根据操作系统的基本知识可知,驱动型恶意软件要实现其功能,必定要 在其运行时调用系统函数。而驱动程序调用所需的系统函数的方式只有两种,
一种是静态获取所需调用的系统函数的方式;另一种是动态获取所需调用的 系统函数的方式。对于静态获取的方式来说,在编写该驱动程序时,需要直 接调用系统函数,在编译该驱动程序时,编译器会自动将需要调用的系统函 数的信息保存在驱动文件的导入表中。而对于动态获取的方式来说,在驱动程序运行过程中,需要调用系统函数时,可以将该系统函数名称作为
MmGetSystemRoutineAddress 这类函凄史的输入参数,通过调用 MmGetSystemRoutineAddress这类函数,获取所需调用的系统函数的入口地址。
针对上述驱动程序获取系统函数的两种方式,本实施例在将所需监控的 系统函数替换为安全软件监控函数时,可以采用两种方式。具体来说,对于 驱动程序静态获取系统函数的方式,本实施例可以在驱动程序已经加载到内 核中,调用驱动模块入口函数前,可以搜索驱动模块内存,在驱动模块导入 表信息中解析出驱动程序导入的系统函数,如果是需要监控的系统函数,则 可将该系统函数的地址信息替换为安全软件监控函数的地址信息,从而使得 驱动模块再调用该所需监控的系统函数时,调用的是已经替换完成的安全软 件监控函数。对于驱动程序动态获取系统函数的方式来说,由于所有Windows 操作系统都是通过调用函数MmGetSystemRoutineAddress,传入需要获取的 系统函数地址的系统函数名,调用MmGetSystemRoutineAddress就能获取系 统函数入口地址,而对于驱动程序来说,只能通过静态获取的方式来调用 MmGetSystemRoutineAddress函数,因此,可以将驱动程序的导入表信息中 调用MmGetSystemRoutineAddress函数的函数地址信息替换为调用安全软件 监控函数的地址信息。当驱动才莫块再调用该MmGetSystemRoutineAddress函 数时,事实上调用的是安全软件监控函数,该安全软件监控函数可以获取到 所需调用的系统函数的函数名,然后判断所需调用的系统函数是否是所需监 控的系统函数,如果是需要监控的系统函数,则可将该安全软件监控函数的 入口地址反馈给驱动程序,从而使得再调用所需监控的系统函数时,均调用 的是该安全软件监控函数。
步骤102、应用所述安全软件监控函数,监控所述驱动程序的执行动作, 并在执行动作异常时发送报警信息。
在完成步骤101之后,本实施例不管在驱动程序是动态获取系统函数还 是静态获取系统函数的方式下,均可以采用该安全软件监控函数来监控该驱 动程序的执行动作,即基于行为特征的判定过程。监控驱动程序的执行动作的操作可以采用下述四个例子来举例说明。事实上,该执行动作是否符合逻 辑即是否正常可以根据行为知识库进行判定,而不限于下述几种情况。
例一、对于调用KelnsertQueueApc系统函数注入进程的判断规。 KelnsertQueueApc函数有四个参数,其中第一个参数是指向一KAPC结构 的指针,一KAPC结构可在微软公司公开的编程接口说明中查阅到, typedef struct JCAPC {
CSHORT Type;
CSHORT Size;
ULONG Spare0;
struct 一KTHREAD *Thread;
LIST—ENTRY ApcListEntry;
PKKERNEL—ROUTINE KernelRoutine;
PKRUNDOWN—ROUTINE RundownRoutine;
PKNORMAL—ROUTINE NormalRoutine;
PVOID NormalContext;
〃
〃 N.B. The following two members MUST be together.
〃
PVOID SystemArgumentl; PVOID SystemArgument2; CCHAR ApcStatelndex; KPROCESSOR—MODE ApcMode; BOOLEAN Inserted; } KAPC, *PKAPC, *RESTRICTED POINTER PRKAPC; 其中ApcMode为1是不正常调用,可直接报警拒绝。 例二、对于调用IoCallDriver直接写磁盘操作的判断规则。 IoCallDriver是微软公司公开的编程接口,有两个参数, 一个目的设备设 备对象指针, 一个请求包指针,如果目的设备对象指针指向的驱动设备是磁 盘设备或者分区设备时,解析请求包指针指向的数据,如果请求包对应的请 求时写请求时,这是一个非法调用,可能造成直接磁盘写,可报警拒绝。例三、 出的判断规则。
通过MmUnmapViewOfSection可以释放制定进程空间内制定地址的映射 内存,造成进程退出,这个函数不应该被驱动直接调用,有驱动直接调用该 函数释放进程映射内存时,可直接报警。
例四、记录未知驱动调用PsCreateSystemThread创建系统线程,根据系 统线程动作报警。
未知驱动调用PsCreateSystemThread时,可将新创建的系统线程信息和 未知驱动关联,如果经过其他逻辑能判定系统线程有危险动作时,报警时可 将关联的位置驱动一起报出来。
通过上述描述可知,本实施例在驱动程序执行之前的时间点上,将所需 监控的系统函数替换成安全软件监控函数后,可以应用该安全软件监控函数 监控驱动程序是否执行了非法操作,当判断执行动作即行为特征异常时,即 可发送报警信息,从而有效防御驱动型恶意软件的攻击。本实施例可以由系 统自行完成而不需要任何人工操纵,因此不需要用户进行任何判断即可有效 防止驱动型恶意软件的攻击,具有智能性;本实施例充分利用驱动程序必须 调用系统函数才能实现其功能的特征,在特定的时间点上进行安全软件替换 操作,因此,防御性能安全可靠且不易被恢复;另外,本实施例仅需要对通 过程序识别为未知或者可能不安全的的驱动程序所需监控的系统函数相关的 函数地址信息进行一次替换,即可完成后续逻辑判断,而被监控的系统函数 被其他驱动调用时可以不做监控,从而不会对系统性能产生影响。
图2为本发明驱动型恶意软件防御方法第二实施例的流程图,如图2所 示,本实施例对驱动程序采用静态获取方式调用系统函数的情况下,如何防 御恶意程序攻击的过程进行详细说明,具体的,本实施例的方法可以包括
步骤201、根据所述导入表信息中的系统函数入口地址信息,获取与所 述系统函数入口地址信息对应的导入函数,判断所述导入函数是否是所需监 控的系统函数,并在所述导入函数是所需监控的系统函数时,将所述导入函 数的地址信息替换为所述安全软件监控函数的地址信息。驱动程序加载时,会存在一个时间点,在此时间点上,驱动程序已经加 载到系统内核中,通过解析也获取到该驱动程序的导入表信息,然后将导入 表信息中的函数名称信息替换为系统函数入口地址信息。下一步就是调用驱 动程序所需的系统函数,从而实现驱动功能。
本实施例可以通过搜索驱动模块内存,查找获取与该系统函数入口地址 信息对应的导入函数,即该驱动程序需要调用的系统函数。在具体实施过程
中,该导入表信息中的导入模块可以从ntoskrnl.exe导入,根据该导入才莫块即 可获取导入函数。然后可以判断该导入函数是否是需要监控的系统函数,如 果是需要监控的系统函数,则可将该系统函数的地址信息替换为安全软件监 控函数的地址信息,从而使得驱动模块再调用该所需监控的系统函数时,调 用的是已经替换完成的安全软件监控函数。
需要说明的是,该导入表信息中可以存在多个导入模块,而需要监控的 系统函数是由ntoskrnl.exe导入,因此,可以通过ntoskrnl.exe导入模块获取 多个导入函数,进而可以依次判断获取的多个导入函数是否是所需监控的系 统函数。
另外,本实施例在上述才艮据驱动程序的导入表信息,将与所需监控的系 统函数相关的函数地址信息替换为安全软件监控函数的地址信息之前,还可 以包括
为所述安全软件监控函数注册模块加载回调函数。
从而使得将与所需监控的系统函数相关的函数地址信息替换为安全软件 监控函数的地址信息可以具体包括应用所述才莫块加载回调函数,将与所需 监控的系统函数相关的函数地址信息替换为安全软件监控函数的地址信息。
系统可以提供一种回调机制,在驱动模块加载时,如果有注册回调函数, 系统会以当前加载的模块信息作为参数,调用已经注册的模块加载回调函数, 安全软件监控函数可以注册一个模块加载回调函数,在模块加载回调函数中 实现对驱动模块导入表中需要监控的系统函数的替换。
步骤202、根据所述安全软件监控函数的地址信息,调用所述安全软件 监控函数。当驱动程序执行时,该驱动程序再需要调用所需监控的系统函数时,即 可调用该安全软件监控函数,从而对后续该驱动程序的执行动作进行有效监 控。
步骤203、应用所述安全软件监控函数,监控所述驱动程序的执行动作, 并在执行动作异常时发送报警信息。
本实施例在采用静态方式获取系统函数的驱动程序执行之前的时间点 上,将所需监控的系统函数替换成安全软件监控函数后,可以应用该安全软 件监控函数监控驱动程序是否执行了非法操作,当判断执行动作即行为特征 异常时,即可发送报警信息,从而有效防御驱动型恶意软件的攻击。本实施 例的方法具有智能性、防御性能安全可靠且不易被恢复以及不会对系统性能 产生影响等特点。
图3为本发明驱动型恶意软件防御方法第三实施例的流程图,如图3所 示,本实施例对驱动程序采用动态获取方式调用系统函数的情况下,如何防 御恶意程序攻击的过程进行详细说明,具体的,本实施例的方法可以包括
步骤301、判断所述导入表信息中是否存在用于获取系统函数入口地址 的函数,并在存在时,将所述用于获取系统函数入口地址的函数的地址信息 替换为所述安全软件监控函数的地址信息。
对于动态获取系统函数的方式来说,所有Windows操作系统中都是通过 调用函数MmGetSystemRoutineAddress,传入需要获取的系统函数的系统函 数名,调用函数MmGetSystemRoutineAddress就能获取系统函数入口地址, 而驱动程序只能通过静态获取的方式调用函凄t MmGetSystemRoutineAddress, 即在驱动程序编写时,将该函数MmGetSystemRoutineAddress写入驱动程序 中。因此,当获取该驱动程序的导入表信息时,可以通过查找的方式判断是 否存在函数MmGetSystemRoutineAddress , 本实施例在存在函数 MmGetSystemRoutineAddress时,将该函数MmGetSystemRoutineAddress的 地址信息替换为安全软件监控函数的地址信息。再调用函数 MmGetSystemRoutineAddress获取系统函数的入口地址时,事实上调用的是 安全软件监控函数。
12步骤302、根据所述安全软件监控函数的地址信息,调用所述安全软件 监控函数,判断所述安全软件监控函数获取的系统函数入口地址是否对应于 所需监控的系统函数,并在对应时,将所述安全软件监控函数的入口地址反 馈给所述驱动程序,供所述驱动程序根据所述安全软件监控函数的入口地址 调用所述安全软件监控函数。
在根据替换后的地址信息调用函数时,即可调用与该地址信息对应的安 全软件监控函数。该安全软件监控函数根据获取的系统函数入口地址即可判 断所需调用的系统函数是否所需监控的系统函数的入口地址,该过程可是采 用安全软件监控函数过滤函数名的方式来实现。如果是,则将安全软件监控 函数的入口地址反馈给驱动程序,从而使得驱动程序后续再调用所需监控系 统函数时,即可根据该安全软件监控函数的入口地址调用安全软件监控函数。 如果不是,则可以将该系统函数的入口地址返回给驱动程序。
步骤303、应用所述安全软件监控函数,监控所述驱动程序的执行动作, 并在执行动作异常时发送报警信息。
另外,本实施例在上述根据驱动程序的导入表信息,将所述用于获取系 统函数入口地址的函数的地址信息替换为所述安全软件监控函数的地址信息 之前,还可以包括
为所述安全软件监控函数注册模块加载回调函数。
从而使得将与所需监控的系统函数相关的函数地址信息替换为安全软件 监控函数的地址信息可以具体包括应用所述模块加载回调函数,将与所需 监控的系统函数相关的函数地址信息替换为安全软件监控函数的地址信息。
系统可以提供一种回调机制,在驱动模块加载时,如果有注册回调函数, 系统会以当前加载的模块信息作为参数,调用已经注册的模块加栽回调函数, 安全软件监控函数可以注册一个才莫块加载回调函数,在模块加载回调函数中 实现对驱动模块导入表中与所需监控的系统函数相关的函数的替换。
本实施例在采用动态方式获取系统函数的驱动程序执行之前的时间点 上,将用于调用系统函数的入口地址的函数的地址信息替换成安全软件监控 函数的地址信息后,可以应用该安全软件监控函数判断所需反馈的系统函数的入口地址是否是所需监控的系统函数的入口地址,并在是所需监控的系统 函数的入口地址时,将该安全软件监控函数的入口地址反馈给驱动程序,从 而可以利用该安全软件监控函数来监控驱动程序是否执行了非法操作,当判 断执行动作即行为特征异常时,即可发送报警信息,从而有效防御驱动型恶 意软件的攻击。本实施例的方法具有智能性、防御性能安全可靠且不易被恢 复以及不会对系统性能产生影响等特点。
图4为本发明驱动型恶意软件防御装置第一实施例的结构示意图,如图 4所示,本实施例的装置包括替换处理模块1和监控处理模块2。其中,替 换处理模块1用于根据驱动程序的导入表信息,将与所需监控的系统函数相 关的函数地址信息替换为安全软件监控函数的地址信息;监控处理模块2用 于应用替换处理模块1替换后的安全软件监控函数,监控所述驱动程序的执 行动作,并在执行动作异常时发送报警信息。
驱动程序加载时,会存在一个时间点,在此时间点上,驱动程序已经加 载到系统内核中,通过解析也获取到该驱动程序的导入表信息,下一步就是 调用驱动程序所需的系统函数,从而实现驱动功能。在此时间点安装安全软 件监控函数,能在驱动程序执行前,将驱动程序所需调用的系统函数替换为 安全软件监控函数。该替换过程即可为将与所需监控的系统函数相关的函数 地址信息替换为安全软件监控函数的地址信息。该安全软件监控函数具有逻 辑判断功能,能够在后续根据该安全软件监控函数判断驱动程序是否执行了 异常操作。
根据操作系统的基本知识可知,驱动型恶意软件要实现其功能,必定要 在其运行时调用系统函数。而驱动程序调用所需的系统函数的方式只有两种, 一种是静态获取所需调用的系统函数的方式;另一种是动态获取所需调用的 系统函数的方式。对于静态获取的方式来说,在编写该驱动程序时,需要直 接调用系统函数,在编译该驱动程序时,编译器会自动将需要调用的系统函 数的信息保存在驱动文件的导入表中。而对于动态获取的方式来说,在驱动 程序运行过程中,需要调用系统函数时,可以将该系统函数名称作为 MmGetSystemRoutineAddress 这类函H的输入参数,通过调用MmGetSystemRoutineAddress这类函数,获取所需调用的系统函数的入口地 址。
针对上述驱动程序获取系统函数的两种方式,本实施例在将所需监控的 系统函数替换为安全软件监控函数时,可以采用两种方式。具体来说,对于 驱动程序静态获取系统函数的方式,本实施例中的替换处理模块1可以在驱 动程序已经加载到内核中,调用驱动模块入口函数前,将导入表信息中的函 数名称信息替换为系统函数入口地址,此时,可以搜索驱动模块内存,在驱 动模块导入表信息中解析出驱动程序导入的系统函数,如果是需要监控的系 统函数,则可将该系统函数的地址信息替换为安全软件监控函数的地址信息, 从而使得驱动模块再调用该所需监控的系统函数时,调用的是已经替换完成 的安全软件监控函数。对于驱动程序动态获取系统函数的方式来说,由于所 有Windows操作系统都是通过调用函数MmGetSystemRoutineAddress,传入 需要获取的系统函数地址的系统函数名,调用MmGetSystemRoutineAddress 就能获取系统函数入口地址,而对于驱动程序来说,只能通过静态获取的方 式来调用MmGetSystemRoutineAddress函数,因此,替换处理才莫块1可以将 驱动程序的导入表信息中调用MmGetSystemRoutineAddress函凄t的函凄t地址 信息替换为调用安全软件监控函数的地址信息。当驱动模块再调用该 MmGetSystemRoutineAddress函数时,事实上调用的是安全软件监控函数, 该安全软件监控函数可以获取到所需调用的系统函数的函数名,然后判断所 需调用的系统函凄tA否是所需监控的系统函数,如果是需要监控的系统函数, 则可将该安全软件监控函数的入口地址反馈给驱动程序,从而使得再调用所 需监控的系统函数时,均调用的是该安全软件监控函数。
不管在驱动程序是动态获取系统函数还是静态获取系统函数的方式下, 监控处理模块2均可以采用该安全软件监控函数来监控该驱动程序的执行动 作,即基于行为特征的判定过程。监控驱动程序的执行动作的操作可以采用 方法实施例中所述的四个例子来举例说明。事实上,该执行动作是否符合逻 辑即是否正常可以根据行为知识库进行判定,而不限于下述几种情况。
通过上述描述可知,本实施例中的替换处理模块在驱动程序执行之前的时间点上,将所需监控的系统函数替换成安全软件监控函数后,监控处理模 块可以应用该安全软件监控函数监控驱动程序是否执行了非法操作,当判断 执行动作即行为特征异常时,即可发送报警信息,从而有效防御驱动型恶意 软件的攻击。本实施例可以由系统自行完成而不需要任何人工操纵,因此不
需要用户进行任何判断即可有效防止驱动型恶意软件的攻击,具有智能性; 本实施例充分利用驱动程序必须调用系统函数才能实现其功能的特征,在特 定的时间点上进行安全软件替换操作,因此,防御性能安全可靠且不易被恢
复;另外,本实施例仅需要将与所需监控的系统函数相关的函数地址信息进
行一次替换,即可完成后续逻辑判断,而不需要反复调用系统函数,从而不 会对系统性能产生影响。
图5为本发明驱动型恶意软件防御装置第二实施例的结构示意图,如图 5所示,本实施例的装置包括替换处理模块1和监控处理模块2。其中,替 换处理才莫块1用于根据驱动程序的导入表信息,将与所需监控的系统函数相 关的函数地址信息替换为安全软件监控函数的地址信息;监控处理模块2用 于应用替换处理模块1替换后的安全软件监控函数,监控所述驱动程序的执 行动作,并在执行动作异常时发送报警信息。
进一步的,为了在驱动程序采用静态获取方式调用系统函数时,有效防 雄卩恶意程序的攻击,本实施例的装置中,替换处理模块l可以包括第一获 取单元ll、第一判断单元12以及第一替换处理单元13。该第一获取单元ll 用于根据所述导入表信息中的系统函数入口地址信息,获取与所述系统函数 入口地址信息对应的导入函数;第一判断单元12用于判断第一获取单元11 获取的导入函数是否是所需监控的系统函数;第一替换处理单元13用于在第 一判断单元12判断所述导入函数是所需监控的系统函数时,将所述导入函数 的地址信息替换为所述安全软件监控函数的地址信息。
具体来说,驱动程序加载时,会存在一个时间点,在此时间点上,驱动 程序已经加载到系统内核中,通过解析也获取到该驱动程序的导入表信息, 然后将导入表信息中的函数名称信息替换为系统函数入口地址信息。下一步 就是调用驱动程序所需的系统函数,从而实现驱动功能。本实施例中,第一获取单元11可以通过搜索驱动模块内存,查找获取与 该系统函数入口地址信息对应的导入函数,即该驱动程序需要调用的系统函
数。在具体实施过程中,该导入表信息中的导入模块可以从ntoskrnl.exe导入, 根据该导入模块即可获取导入函数。然后第一判断单元12可以判断该导入函 数是否是需要监控的系统函数,如果是需要监控的系统函数,则第一替换处 理单元13可将该系统函数的地址信息替换为安全软件监控函数的地址信息, 从而使得驱动模块再调用该所需监控的系统函数时,调用的是已经替换完成 的安全软件监控函数。
需要说明的是,该导入表信息中可以存在多个导入模块,而需要监控的 系统函数是由ntoskrnl.exe导入,因此,可以通过ntoskrnl.exe导入才莫块获取 多个导入函数,进而可以依次判断获取的多个导入函数是否是所需监控的系 统函数。
当驱动程序执行时,该驱动程序再需要调用所需监控的系统函数时,即 可调用该安全软件监控函数,从而对后续该驱动程序的执行动作进行有效监 控。
监控处理模块2可以应用所述安全软件监控函数,监控所述驱动程序的 执行动作,并在执行动作异常时发送报警信息。
本实施例的装置在采用静态方式获取系统函数的驱动程序执行之前的时 间点上,将所需监控的系统函数替换成安全软件监控函数后,监控处理模块 可以应用该安全软件监控函数监控驱动程序是否执行了非法操作,当判断执 行动作即行为特征异常时,即可发送报警信息,从而有效防御驱动型恶意软 件的攻击。本实施例的方法具有智能性、防御性能安全可靠且不易被恢复以 及不会对系统性能产生影响等特点。
图6为本发明驱动型恶意软件防御装置第三实施例的结构示意图,如图 6所示,本实施例的装置包括替换处理模块1和监控处理模块2。其中,替 换处理模块1用于根据驱动程序的导入表信息,将与所需监控的系统函数相 关的函数地址信息替换为安全软件监控函数的地址信息;监控处理模块2用 于应用替换处理模块1替换后的安全软件监控函数,监控所述驱动程序的执行动作,并在执行动作异常时发送报警信息。
进一步的,为了在驱动程序采用静态获取方式调用系统函数时,有效防
御恶意程序的攻击,本实施例的装置中,替换处理模块l可以包括第二判 断单元14和第二替换处理单元15。该第二判断单元14用于判断所述导入表 信息中是否存在用于获取系统函数入口地址的函数;第二替换处理单元15用 于在第二判断单元14判断所述导入表信息中存在用于获取系统函数入口地 址的函数时,将所述用于获取系统函数入口地址的函数的地址信息替换为所 述安全软件监控函数的地址信息。
进一步地,本实施例的装置还可以包括调用处理单元3,该调用处理 单元3用于根据所述安全软件监控函数的地址信息,调用所述安全软件监控 函数,判断所述安全软件监控函数获取的系统函数入口地址是否对应于所需 监控的系统函数,并在对应时,将所述安全软件监控函数的入口地址反馈给 所述驱动程序,供所述监控处理模块根据所述安全软件监控函数的入口地址 调用所述安全软件监控函数。
具体来说,第二判断单元14判断所述导入表信息中是否存在用于获取系
统函数入口地址的函数,并在存在时,第二替换处理单元15将所述用于获取
系统函数入口地址的函数的地址信息替换为所述安全软件监控函数的地址信 自
对于动态获取系统函数的方式来说,所有Windows操作系统中都是通过 调用函数MmGetSystemRoutineAddress,传入需要获取的系统函数的系统函 数名,调用函凄t MmGetSystemRoutineAddress就能获取系统函数入口地址, 而驱动程序只能通过静态获取的方式调用函数MmGetSystemRoutineAddress, 即在驱动程序编写时,将该函数MmGetSystemRoutineAddress写入驱动程序 中。因此,当获取该驱动程序的导入表信息时,可以通过查找的方式判断是 否存在函凄t MmGetSystemRoutineAddress , 本实施例在存在函数 MmGetSystemRoutineAddress时,第二替换处理单元15将该函数 MmGetSystemRoutineAddress的地址信息替换为安全软件监控函数的地址信 息。再调用函数MmGetSystemRoutineAddress获耳又系统函数的入口地址时,事实上调用的是安全软件监控函数。
调用处理模块3在根据替换后的地址信息调用函数时,即可调用与该地址 信息对应的安全软件监控函数。该安全软件监控函数根据获取的系统函数入口 地址即可判断所需调用的系统函数是否所需监控的系统函数的入口地址,该过 程可是采用安全软件监控函数过滤函数名的方式来实现。如果是,则将安全软 件监控函数的入口地址反馈给驱动程序,从而使得驱动程序后续再调用所需监 控系统函数时,即可根据该安全软件监控函数的入口地址调用安全软件监控函 数。如果不是,则可以将该系统函数的入口地址返回给驱动程序。
监控处理模块2应用该安全软件监控函数,监控所述驱动程序的执行动 作,并在执行动作异常时发送报警信息。
本实施例在采用动态方式获取系统函数的驱动程序执行之前的时间点 上,将用于调用系统函数的入口地址的函数的地址信息替换成安全软件监控 函数的地址信息后,可以应用该安全软件监控函数判断所需反馈的系统函数 的入口地址是否是所需监控的系统函数的入口地址,并在是所需监控的系统 函数的入口地址时,将该安全软件监控函数的入口地址反馈给驱动程序,从 而可以利用该安全软件监控函数来监控驱动程序是否执行了非法操作,当判 断执行动作即行为特征异常时,即可发送报警信息,从而有效防御驱动型恶
意软件的攻击。本实施例的方法具有智能性、防御性能安全可靠且不易被恢 复以及不会对系统性能产生影响等特点。
需要说明的是,本发明驱动型恶意软件防御装置第二实施例和第三实施 例也可以结合在一个系统中,从而使得本发明驱动型恶意软件防御装置既可 以对驱动程序静态获取系统函数是的恶意攻击进行有效防御,又可以对驱动 程序静态获取系统函数是的恶意攻击进行有效防御。
最后应说明的是以上实施例仅用以说明本发明的技术方案而非对其进 行限制,尽管参照较佳实施例对本发明进行了详细的说明,本领域的普通技 术人员应当理解其依然可以对本发明的技术方案进行修改或者等同替换, 而这些修改或者等同替换亦不能使修改后的技术方案脱离本发明技术方案的 精神和范围。
权利要求
1、一种驱动型恶意软件防御方法,其特征在于,包括根据驱动程序的导入表信息,将与所需监控的系统函数相关的函数地址信息替换为安全软件监控函数的地址信息;应用所述安全软件监控函数,监控所述驱动程序的执行动作,并在执行动作异常时发送报警信息。
2、 根据权利要求1所述的驱动型恶意软件防御方法,其特征在于,所述 根据驱动程序的导入表信息,将与所需监控的系统函数相关的函数地址信息替换为安全软件监控函数的地址信息,包括才艮据所述导入表信息中的系统函数入口地址信息,获取与所述系统函数 入口地址信息对应的导入函数,判断所述导入函数是否是所需监控的系统函 数,并在所述导入函数是所需监控的系统函数时,将所述导入函数的地址信 息替换为所述安全软件监控函数的地址信息。
3、 根据权利要求2所述的驱动型恶意软件防御方法,其特征在于,所述 应用所述安全软件监控函数,监控所述驱动程序的执行动作之前,还包括根据所述安全软件监控函数的地址信息,调用所述安全软件监控函数。
4、 根据权利要求1所述的驱动型恶意软件防御方法,其特征在于,所述 根据驱动程序的导入表信息,将与所需监控的系统函数相关的函数地址信息 替换为安全软件监控函数的地址信息,包括判断所述导入表信息中是否存在用于获取系统函数入口地址的函数,并 在存在时,将所述用于获取系统函数入口地址的函数的地址信息替换为所述 安全软件监控函数的地址信息。
5、 根据权利要求4所述的驱动型恶意软件防御方法,其特征在于,所述 应用所述安全软件监控函数,监控所述驱动程序的执行动作之前,还包括根据所述安全软件监控函数的地址信息,调用所述安全软件监控函数, 判断所述安全软件监控函数获取的系统函数入口地址是否对应于所需监控的系统函数,并在对应时,将所述安全软件监控函数的入口地址反馈给所述驱 动程序,供所述驱动程序根据所述安全软件监控函数的入口地址调用所述安 全软件监控函数。
6、 根据权利要求1~5中任一权利要求所述的驱动型恶意软件防御方法, 其特征在于,所述根据驱动程序的导入表信息,将与所需监控的系统函数相 关的函数地址信息替换为安全软件监控函数的地址信息之前,还包括为所述安全软件监控函数注册模块加载回调函数。
7、 根据权利要求6所述的驱动型恶意软件防御方法,其特征在于,所述 将与所需监控的系统函数相关的函数地址信息替换为安全软件监控函数的地址信息,包括应用所述模块加载回调函数,将与所需监控的系统函数相关的函数地址 信息替换为安全软件监控函数的地址信息。
8、 一种驱动型恶意软件防御装置,其特征在于,包括 替换处理模块,用于根据驱动程序的导入表信息,将与所需监控的系统函数相关的函数地址信息替换为安全软件监控函数的地址信息;监控处理模块,用于应用所述替换处理才莫块替换后的安全软件监控函数, 监控所述驱动程序的执行动作,并在执行动作异常时发送报警信息。
9、 根据权利要求8所述的驱动型恶意软件防御装置,其特征在于,所述 替换处理模块包括第一获取单元,用于根据所述导入表信息中的系统函数入口地址信息, 获取与所述系统函数入口地址信息对应的导入函数;第一判断单元,用于判断所述第一获取单元获取的导入函数是否是所需监控的系统函数;第一替换处理单元,用于在所述第一判断单元判断所述导入函数是所需 监控的系统函数时,将所述导入函数的地址信息替换为所述安全软件监控函 数的地址信息。
10、 根据权利要求8所述的驱动型恶意软件防御装置,其特征在于,所 述替换处理模块包括第二判断单元,用于判断所述导入表信息中是否存在用于获取系统函数 入口i也i止的函数;第二替换处理单元,用于在第二判断单元判断所述导入表信息中存在用 于获取系统函数入口地址的函数时,将所述用于获取系统函数入口地址的函 数的地址信息替换为所述安全软件监控函数的地址信息。
11、 根据权利要求10所述的驱动型恶意软件防御装置,其特征在于,还包括调用处理单元,用于才艮据所述安全软件监控函^t的地址信息,调用所述 安全软件监控函数,判断所述安全软件监控函数获取的系统函数入口地址是 否对应于所需监控的系统函数,并在对应时,将所述安全软件监控函数的入 口地址反馈给所述驱动程序,供所述监控处理模块根据所述安全软件监控函 数的入口地址调用所述安全软件监控函数。
全文摘要
本发明公开一种驱动型恶意软件防御方法和装置,该方法包括根据驱动程序的导入表信息,将与所需监控的系统函数相关的函数地址信息替换为安全软件监控函数的地址信息;应用安全软件监控函数,监控驱动程序的执行动作,并在执行动作异常时发送报警信息。该装置包括替换处理模块,用于根据驱动程序的导入表信息,将与所需监控的系统函数相关的函数地址信息替换为安全软件监控函数的地址信息;监控处理模块,用于应用替换处理模块替换后的安全软件监控函数,监控驱动程序的执行动作,并在执行动作异常时发送报警信息。本发明对驱动型恶意程序进行有效防御的同时,具有智能性、防御性能安全可靠且不易被恢复以及不会对系统性能产生影响等特点。
文档编号G06F9/46GK101599113SQ20091008668
公开日2009年12月9日 申请日期2009年6月17日 优先权日2009年6月17日
发明者强 郭 申请人:北京东方微点信息技术有限责任公司