恶意代码检测方法及系统的制作方法

文档序号:6458949阅读:185来源:国知局
专利名称:恶意代码检测方法及系统的制作方法
技术领域
本发明涉及计算机领域,尤其涉及一种恶意代码检测方法及系统。
背景技术
随着互联网的普及,威胁信息安全的事件的发生越来越频繁,其中,恶意 代码造成的危害最为严重,不仅使企业和用户蒙受巨大经济损失,更使国家信 息安全面临严重威胁。
现有技术提供了一种基于特征码扫描的恶意代码检测技术,它是目前商用 恶意代码检测所使用的主要方法,其原理是打开被检测文件/内存,扫描其中是 否包含有特征数据库中的恶意代码特征串,如果含有,则判断文件/内存含有恶 意代码。随着越来越多的恶意代码使用了变形技术,即使对已知的恶意代码, 仅通过扫描文件/内存,现有技术的基于特征码扫描的恶意代码检测技术对于不 存在于特征数据库中的未知的恶意代码无法4企测。

发明内容
本发明实施例提供了 一种恶意代码检测方法,能根据难以被恶意代码修改 的第 一 系统信息与容易被所述恶意代码修改的第二系统信息之间的差异,检测 出恶意代码,对未知的恶意代码进行检测。
本发明实施例提出的一种恶意代码检测方法,包括
获得系统信息类别下难以被恶意代码修改的第一 系统信息,以及所述系统 信息类别下容易被所述恶意代码修改的第二系统信息;
通过识别所述第 一 系统信息与第二系统信息的差异,检测出所述恶意代码。
相应地,本发明实施例还提供了一种恶意代码检测系统,包括 系统信息收集模块,获得系统信息类别下难以被恶意代码修改的第 一 系统 信息,以及所述系统信息类别下容易被所述恶意代码修改的第二系统信息; 恶意行为识别模块,通过识别所述第 一 系统信息与第二系统信息的差异,检测出所述恶意代码。
本发明实施例通过获得难以被恶意代码修改的第一系统信息,以及容易被 恶意代码修改的第二系统信息,通过识别所述第 一 系统信息与第二系统信息的 差异,检测出恶意代码,从而对未知的恶意代码进行检测,提高系统安全性。


为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施 例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述 中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付 出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例的恶意代码检测方法的主要流程图; 图2是本发明实施例的恶意代码检测方法的具体流程图; 图3是本发明实施例的恶意代码-险测系统的主要结构图; 图4是本发明实施例的恶意代码检测系统的具体结构图。
具体实施例方式
本发明实施例提供了 一种恶意代码检测方法及系统,能根据难以被恶意代 码修改的第一系统信息与容易被恶意代码修改的第二系统信息之间的差异,检 测出恶意代码,从而对未知的恶意代码进行检测,提高系统安全性。
恶意代码侵入系统时,通常需要修改一些可能指明自己身份的系统信息, 该系统信息一般包括进程信息、端口信息、文件信息、注册表信息、系统服务 信息、服务提供商接口 (Service Provider Interface, SPI)信息等。恶意代码修 改系统信息的目的在于向检测软件提供不真实的数据,逃避检测。而各系统信 息可分成两种系统信息难以被恶意代码修改的第 一 系统信息以及容易被恶意 代码修改的第二系统信息。
下面结合附图,对本发明实施例进行详细it明。
图1是本发明实施例的恶意代码检测方法的主要流程图,参照该图,该方 法主要包括
101,获得难以被恶意代码修改的第一系统信息,以及容易被恶意代码修改 的第二系统信息。具体地,参照上述系统信息类型的描述,可从系统内核态获得难以被恶意代码修改的第一系统信息,可^v系统用户态获得与所述第一系统 信息对应的容易被恶意代码修改的第二系统信息;需要说明的是,系统的内核 态和系统用户态的区分主要基于多用户系统。在多用户系统上每个用户不能相 互干扰,也不能互相窥探秘密的信息,即需要一种保护机制。由于多用户操作
系统内核代码是大家共享的运行资源,多用户才喿作系统(包括windows)核心代 码必须运行在高优先级和处于最大保护环境中。这样,运行在一台机器上的代 码被分成了两个级别高保护状态的优先级(内核)和一般级别(用户程序)。 当CPU正在运行内核代码时就称系统处于内核态,而当CPU正运行用户代码时 则称系统处于系统用户态。
102,通过识别所述第一系统信息与第二系统信息的差异,检测出恶意代码。 图2是本发明实施例的恶意代码检测方法的具体流程图,该方法可用于微 软Windows操作系统中,参照该图,该方法主要包括以下步骤
201、 程序初始化,安装所有用于收集系统信息(包括第一系统信息及第二 系统信息)的驱动模块。
202、 接收用户的操作信号,即用户可选择进行基于如下一种或多种系统信 息类别的恶意代码检测进程信息、端口信息、文件信息、注册表信息、系统 服务信息、服务提供商接口信息、系统服务描述符表信息、全局描述符表信息、 中断描述符表信息。
203、 获得难以-故恶意代码修改的第一系统信息,以及容易^f皮恶意代码修改 的第二系统信息,具体地,包含以下几种情况。
A、当系统信息为进程信息时
获得进程信息中难以被恶意代码修改的第 一 系统信息的主要过程如下读 取驱动程序中系统内核态的全局句柄表,并判断该全局句柄表中的进程句柄是 否为有效句柄,若是,则将该进程句柄对应的进程信息作为第一系统信息。具 体地,通过DeviceIoControl指令与驱动程序通信,在驱动程序中,直接读取系 统内核态中的全局句柄表PspCidTable,采用穷举法,判断全局句柄表中每个可 能存在的进程句柄是否存在有效的进程对象。例如,对于从0到0x43dc中每个 为4的倍数的包识别码(Packet Identifier, PID ),调用ExMapHandleToPointer 指令将句柄映射为对象,判断ExMapHandleToPoint指令的响应结果是否为空, 若不为空则判断该进程句柄为有效句柄,将该进程句柄对应的进程信息作为第一系统信息(可作为第一系统信息列表的某一表项);
获得进程信息中容易被恶意代码修改的第二系统信息的主要过程是调用 系统用户态应用程序接口 (Application Programming Interface, API)的进程跟踪 指令,如EnumProcess枚举指令,将该指令的响应作为第二系统信息(可作为 第二系统信息列表的某一表项)。
B、 当所述系统信息类别为端口信息时
获得端口信息中难以被恶意代码修改的第 一 系统信息的主要过程是创建 并调用驱动程序中系统内核态的传输控制协议(Transmission Control Protocol, TCP)设备端口情况查询指令,将该指令响应的第一 TCP设备端口情况信息作 为第一系统信息。具体地,通过DeviceloControl指令与驱动程序通信,在驱动 程序中,调用 ZwCreateFile指令打开 TCP设备对象,调用 ObReferenceObjectByHandle指令获取TCP设备对象指针,调用 IoBuildDeviceloControlRequest指令创建TCP设备端口查询请求,即输入输出请 求包(Input/Output Request Packet, IRP),调用IoSetCompletionRoutine指令设 定完例程,最后调用IoCallDriver指令发送所述IRP,将对该IRP响应的第一 TCP 设备端口情况信息作为所述第一系统信息(可作为第 一系统信息列表的某一表 项)。
获得端口信息容易被恶意代码修改的第二系统信息的主要过程是调用系 统用户态API的TCP设备端口情况枚举指令,如GetTcpTable指令,将该指令 响应的第二 TCP设备端口情况信息作为第二系统信息(可作为第二系统信息列 表的某一表项)。
C、 当所述系统信息类别为文件信息时
获得文件信息中难以被恶意代码修改的第 一 系统信息的主要过程是创建 并调用驱动程序中系统内核态的指定路径文件信息的查询指令,将该指令响应 的第一文件信息作为第一系统信息。具体地,对指定的文件信息的路径进行下 述操作,通过DeviceloControl指令与驱动程序通信,在驱动程序中,首先调用 ZwOpenFile指令获取该文件目录句柄,调用ObReferenceObjectByHandle指令获 取对应的文件对象,再使用IoAllocatelrp指令分配IRP (即查询指令),并填写 IRP各个域以准备查询该文件目录,最后调用IoCallDriver指令发送IRP,将该 IRP响应的第一文件信息作为第一系统信息,该第一文件信息包括子目录,以及子文件名称、大小、创建日期、修改日期等信息。另外,对子目录也进行其下 所有文件信息的获取,直至查询完指定路径下所有的文件(可作为第一系统信 息列表的某一表项)。
获得文件信息中容易被恶意代码修改的第二系统信息的主要过程是调用
系统用户态API的指定路径文件信息的查询指令,如FindFirstFile指令和 FindNextFile指令,将该指令响应的第二文件信息作为第二系统信息(可作为第 二系统信息列表的某一表项)。
D、当所述系统信息类别为注册表信息时
由于注册表信息要求系统重启后仍然有效,所有注册表信息应是以Hive文 件的形式保存在磁盘中的, 注册表中的 HKEY—LOCAL—MACHINE\SYSTEM\CurrentControlSet\Control\hivelist记录着系 统Hive文件的保存路径,而系统许多功能的实现是依赖于其中记录的这些文件 提供的信息,因此系统Hive文件是安全的,内容也是最完整的,通常操作系统 是不允许其他程序在系统范围内访问这些Hive文件,因此要获得第一系统信息, 需要绕过这些Hive文件的保护来读取其中的信息,因此
获得注册表信息中难以被恶意代码修改的第一系统信息的主要过程是,调 用系统内核态的注册表信息权限赋予指令,将根据所赋予权限获取的指定路径 下的第一注册表键值信息作为第一系统信息。具体地,可调用如下6指令来完 成本步骤调用RktReglnitialize指令完成注册表检测模块的初始化,包括获取 Hive文件读取权限,将注册表信息保存为Hive文件,并可确定 HKEY—CURRENT—USER和HKEY CURRENT—ROOT在Hive文件中的位置; 调用RktRegUninitialize指令来释放资源,关闭Hive文件;调用RktRegOpenKey 指令在Hive文件中打开指定的键;调用RktRegCloseKey指令在Hive文件中关 闭指定的键;调用RktRegEnumKey指令在Hive文件中获取某个打开键的所有 子键;调用RktRegEnumValue指令在Hive文件中获取某个打开键的所有值,则 在调用RktReglnitialize指令完成注册表检测模块的初始化,获取Hive文件读取 权限后,可调用上述6指令中的其他指令来获取的指定路径下的第一注册表键 值信息作为第一系统信息(可作为第一系统信息列表的某一表项)。
获得注册表信息中容易被恶意代码修改的第二系统信息的主要过程是,调 用系统用户态API的注册表操作指令,将该指令响应的第二注册表键值信息作为第二系统信息(可作为第二系统信息列表的某一表项)。。
E、 当所述系统信息类别为系统服务信息时
获得系统服务信息中难以被恶意代码修改的第 一 系统信息的主要过程是, 调用系统内核态的注册表信息权限赋予指令,将根据所赋予权限获取的第一系 统服务信息作为第一系统信息。具体地,系统服务信息保存在注册表的
HKEY—LOCAL—MACHINE\system\CurrentControlSet\Services中,包括
el,进行初始化,判断是否调用过RktReglnitialize指令,若是,则直接转
入e2;若否,则调用RktReglnitialize指令进行初始化,包括获取Hive文件读取
权限,将注册表信息保存为Hive文件;
e2,打开当前服务所在Hive文件,定位到服务键;
e3,若RktRegEnumKey指令所有子键都已经枚举,则调用RktRegEnumKey 指令枚举所有子键,若存在未枚举的子键,转执行e4;
e4,调用RktRegOpenKey打开子键,调用RktRegEnumValue指令读取服务 相关值的数据,判断该子键是否是第一系统服务信息,若是,则以该第一系统 服务信息作为第一系统信息(可作为第一系统信息列表的某一表项)并转执行 e3,否则直接转执行e3 ;
获得系统服务信息中容易被恶意代码修改的第二系统信息的主要过程是, 调用系统用户态API的对系统服务信息进行获取的注册表操作指令,将该指令 响应的第二系统服务信息作为第二系统信息(可作为第二系统信息列表的某一 表项)。
F、 当所述系统信息类别为SPI信息时
获得SPI信息中难以被恶意代码修改的第一系统信息的主要过程是,调用 系统内核态的注册表信息权限赋予指令,将根据所赋予权限获取的第二 SPI信 息作为第一系统信息(可作为第一系统信息列表的某一表项)。
具体地,SPI的所有动态链接库(Dynamic Link Library, DLL )路径保存在 注 册 表
ers\Protocol—Catalog9\Catalog—Entries中,包括
fl,进行初始化,判断是否调用过RktReglnitialize指令,若是,则直接转 入f2;若否,则调用RktReglnitialize指令进行初始化,包括获取Hive文件读取权限,将注册表信息保存为Hive文件;
G,打开当前服务所在Hive文件,定位到服务键,打开SPI所在键;
f3,若RktRegEnumKey指令所有子键都已经枚举,则调用RktRegEnumKey 指令枚举所有子键,若存在未枚举的子键,转执行f4;
f4,调用RktRegOpenKey打开子键,调用RktRegEnumValue指令读取SPI 数据,并转执行f3;
获得SPI信息中容易被恶意代码修改的第二系统信息的主要过程是,调用 系统用户态API的对SPI信息进行获取的注册表操作指令,将该指令响应的第 二 SPI信息作为第二系统信息(可作为第二系统信息列表的某一表项)。
另外,203步骤还可以包括
获得系统服务描述符表(System Descriptor Table, SDT)信息、全局描述符 表(Global Descriptor Table, GDT)信息或中断描述符表(Interrupt Descriptor Table, IDT)信息,该SDT信息/GDT信息/IDT信息在进行恶意代码检测时, 作为提供给用户(如高级用户)的参考信息,获得SDT信息/GDT信息/IDT信 息的方式具体为
调用系统内核态的SDT获取指令,如KeServiceDescriptorTable指令,来获 得SDT信息;
调用系统内核态的GDT获取指令,如sgdt指令,并复制相关项,来获得 GDT信息;
调用系统内核态的IDT获取指令,如sidt指令,并复制相关项,来获得IDT
4吕息。
204、通过识别所述第一系统信息与第二系统信息的差异,检测出恶意代码。 具体地,若系统信息类别为进程信息,则比较作为第一系统信息的第一进程信 息(或列表,下同)以及作为第二系统信息的第二进程信息(或列表,下同) 是否一致;若系统信息类别为端口信息,则比较作为第一系统信息的第一端口 信息以及作为第二系统信息的第二端口信息是否 一致;若系统信息类别为文件 信息,则比较作为第一系统信息的第一文件信息(文件目录名、文件名等)以 及作为第二系统信息的第二文件信息是否 一致;若系统信息类别为注册表信息 时,则比较作为第 一 系统信息的第 一注册表^t值信息以及作为第二系统信息的 第二注册表键值信息是否一致;若系统信息类别为系统服务信息时,则比较作为第 一 系统信息的第 一 系统服务信息以及作为第二系统信息的第二系统服务信
息是否一致;若系统信息类别为SPI信息时,则比较作为第一系统信息的第一 SPI信息以及作为第二系统信息的第二 SPI信息是否一致,若上述比较得到第一 系统信息与第二系统信息具有差异,则检测出了恶意代码,则将所述第一系统 信息和第二系统信息之间的差异作为恶意代码可疑行为;
另外,当所述第一系统信息与第二系统信息没有差异时,可释放所述第一 系统信息及第二系统信息,以节省存储空间。
205、 将恶意代码可疑行为的相关信息提示给用户,询问用户是否忽略或阻 断恶意代码的执行。
206、 当用户选择忽略或阻断恶意代码的执行时,阻断该恶意代码的执行, 还可以记录本次检测过程、检测结果、检测时间等相关信息到日志中。
图3是本发明实施例的恶意代码检测系统的主要结构图,参照该图,该系 统主要包4舌
系统信息收集模块31,获得难以被恶意代码修改的第一系统信息,以及容 易被恶意代码修改的第二系统信息。具体地,可从系统内核态获得难以被恶意 代码修改的第一系统信息,可从系统用户态获得与所述第一系统信息对应的容 易被所述恶意代码修改的第二系统信息,所述系统信息可以为进程信息、端口 信息、文件信息、注册表信息、系统服务信息、服务提供商接口信息中一种或 多种的组合;
恶意行为检测模块32,通过识别所述第一系统信息与第二系统信息的差异, 检测出恶意代码。
图4是本发明实施例的恶意代码检测系统具体的结构图,该系统可用于微 软Windows操作系统中,参照该图,该系统包括以下组成。
系统信息收集模块41,获得难以被恶意代码修改的第一系统信息,以及容 易被恶意代码修改的第二系统信息。具体地,该系统信息收集模块41可包括如 下各子模块中的一种或多种的组合
进程信息收集子模块411,用于获得进程信息中,难以^C恶意代码修改的第 一系统信息和容易被恶意代码修改的第二系统信息;
为了获得进程信息中难以被恶意代码修改的第一系统信息,进程信息收集 子模块411读取驱动程序中系统内核态的全局句柄表,并判断该全局句柄表中的进程句柄是否为有效句柄,若是,则将该进程句柄对应的进程信息作为第一
系统信息。具体地,通过DeviceloControl指令与驱动程序通信,在驱动程序中, 直接读取系统内核态中的全局句柄表PspCidTable,采用穷举法,判断全局句柄 表中每个可能存在的进程句柄是否存在有效的进程对象。例如,对于从0到 0x43dc中每个为4的倍数的PID,调用ExMapHandleToPointer指令将句柄映射 为对象,判断ExMapHandleToPoint指令的响应结果是否为空,若不为空则判断 该进程句柄为有效句柄,将该进程句柄对应的进程信息作为第一系统信息(可 作为第一系统信息列表的某一表项);
为了获得进程信息中容易被恶意代码修改的第二系统信息,进程信息收集 子模块411调用系统用户态API的进程跟踪指令,如EnumProcess枚举指令, 将该指令的响应作为第二系统信息(可作为第二系统信息列表的某一表项);
端口信息收集子模块412,用于获得端口信息中,难以被恶意代码修改的第 一系统信息和容易被恶意代码修改的第二系统信息;
为了获得端口信息中难以被恶意代码修改的第 一 系统信息,所述端口信息 收集子模块412创建并调用驱动程序中系统内核态的TCP设备端口情况查询指 令,将该指令响应的第一TCP设备端口情况信息作为第一系统信息,具体地, 通过DeviceToControl指令与驱动程序通信,在驱动程序中,调用ZwCreateFile 指令打开TCP设备对象,调用ObReferenceObjectByHandle指令获取TCP设备 对象指针,调用IoBuildDeviceloControlRequest指令创建TCP设备端口查询请求, 即IRP,调用IoSetCompletionRoutine指令设定完例程,最后调用IoCallDriver 指令发送所述IRP,根据对该IRP响应的第一 TCP设备端口情况信息作为所述 第一系统信息(可作为第一系统信息列表的某一表项);
为了获得端口信息中容易被恶意代码修改的第二系统,所述端口信息收集 子模块412信息调用系统用户态API的TCP设备端口情况枚举指令,如 GetTcpTable指令,将该指令响应的第二 TCP设备端口情况信息作为第二系统信 息(可作为第二系统信息列表的某一表项);
文件信息收集子模块413,用于获得文件信息中,难以被恶意代码修改的第 —一系统信息和容易被恶意代码修改的第二系统信息;
为了获得文件信息中难以被恶意代码修改的第一系统信息,所述文件信息 收集子模块413创建并调用驱动程序中系统内核态的指定路径文件信息的查询指令,将该指令响应的第一文件信息作为第一系统信息,具体地,对指定的文
件信息的路径进行下述操作,通过DeviceIoControl指令与驱动程序通信,在驱 动程序中,首先调用ZwOpenFile指令获取该文件目录句柄,调用 ObReferenceObjectByHandle指令获取对应的文件对象,再使用IoAllocateIrp指 令分配IRP (即查询指令),并填写IRP各个域以准备查询该文件目录,最后调 用IoCallDriver指令发送IRP,将该IRP响应的第一文件信息作为第一系统信息 (可作为第一系统信息列表的某一表项),该第一文件信息包括子目录,以及子 文件名称、大小、创建日期、修改日期等信息,另外,对子目录也进行其下所 有文件信息的获取,直至查询完指定路径下所有的文件;
为了获得文件信息中容易被恶意代码修改的第二系统,所述文件信息收集 子模块413调用系统用户态API的指定路径文件信息的查询指令,如 FindFirstFile指令和FindNextFile指令,将该指令响应的第二文件信息作为第二 系统信息(可作为第二系统信息列表的某一表项);
注册表信息收集子模块414,用于获得注册表信息中,难以被恶意代码修改 的第 一 系统信息和容易被恶意代码修改的第二系统信息;
由于注册表信息要求系统重启后仍然有效,所有注册表信息应是以Hive文 件的形式保存在磁盘中的, 注册表中的 HKEY—LOCAL—MACHINE、SYSTEM、CurrentControlSeAContromiivelist记录着系 统Hive文件的保存路径,而系统许多功能的实现是依赖于其中记录的这些文件 提供的信息,因此系统Hive文件是安全的,内容也是最完整的,通常操作系统 是不允许其他程序在系统范围内访问这些Hive文件,因此要获得第一系统信息, 需要绕过这些Hive文件的保护来读取其中的信息。
为了获得注册表信息中难以被恶意代码修改的第一系统信息,注册表信息 收集子模块414调用系统内核态的注册表信息权限赋予指令,将根据所赋予权 限获取的指定路径下的第一注册表键值信息作为第一系统信息,具体地,可调 用如下6指令来完成本子模块功能调用RktReglnitialize指令完成注册表检测 才莫块的初始化,包括获取Hive文件读取权限,将注册表信息保存为Hive文件, 并可确定HKEY—CURRENT—USER和HKEY—CURRENT—ROOT在Hive文件中 的位置;调用RktRegUninitialize指令来释力文资源,关闭Hive文件;调用 RktRegOpenKey指令在Hive文件中打开指定的键;调用RktRegCloseKey指令在Hive文件中关闭指定的键;调用RktRegEnumKey指令在Hive文件中获取某 个打开键的所有子4建;调用RktRegEnumValue指令在Hive文件中获取某个打开 键的所有值,则在调用RktReglnitialize指令完成注册表检测模块的初始化,获 取Hive文件读取权限后,可调用上述6指令中的其他指令来获取的指定路径下 的第 一 注册表键值信息作为第 一 系统信息(可作为第 一 系统信息列表的某一表 项);
为了获得注册表信息中容易被恶意代码修改的第二系统信息,注册表信息 收集子才莫块414调用系统用户态API的注册表操作指令,将该指令响应的第二 注册表键值信息作为第二系统信息(可作为第二系统信息列表的某一表项);
系统服务信息收集子模块415,用于获得系统服务信息中,难以被恶意代码 修改的第 一 系统信息和容易被恶意代码修改的第二系统信息;
为了获得系统服务信息中,难以被恶意代码修改的第一系统信息,系统服 务信息收集子模块415调用系统内核态的注册表信息权限赋予指令,将根据所 赋予权限获取的第一系统服务信息作为第一系统信息,具体地,系统服务信息 保存在注册表的HKEY—LOCAL—MACHINE\system\CurrentControlSet\Services 中,首先,进行初始化,判断是否调用过RktReglnitialize指令,若是,则直接 打开当前服务所在的Hive文件读取权限,定位到服务键;若否,则调用 RktReglnitialize指令进行初始化,包括获取Hive文件读取权限,将注册表信息 保存为Hive文件后打开当前服务所在Hive文件,定位到服务键,若 RktRegEnumKey指令所有子键都已经枚举,则调用RktRegEnumKey指令枚举 所有子键,若存在未枚举的子键,调用RktRegOpenKey打开子键,调用 RktRegEnumValue指令读取服务相关值的数据,判断该子键是否是第一系统服 务信息,若是,则以该第一系统服务信息作为第一系统信息(可作为第一系统 信息列表的某一表项);
为了获得系统服务信息中容易被恶意代码修改的第二系统信息,系统服务 信息收集子模块415调用系统用户态API的对系统服务信息进行获取的注册表 操作指令,将该指令响应的第二系统服务信息作为第二系统信息(可作为第二
系统信息列表的某一表项);
服务提供商接口信息收集子模块416,用于获得服务提供商接口信息中,难 以被恶意代码修改的第 一 系统信息和容易被恶意代码修改的第二系统信息;为了获得服务提供商接口信息中,难以被恶意代码修改的第 一 系统信息, 服务提供商接口信息收集子模块416调用系统内核态的注册表信息权限赋予指 令,将根据所赋予权限获取的第一 SPI信息作为第一系统信息(可作为第一系
统信息列表的某一表项),具体地,SPI的所有DLL路径保存在注册表
ers\Protocol—Catalog9\Catalog—Entries中,首先,进行初始化,判断是否调用过 RktReglnitialize指令,若是,则打开当前服务所在Hive文件,定位到服务键, 打开SPI所在键;若否,则调用RktReglnitialize指令进行初始化,包括获取Hive 文件读取权限,将注册表信息保存为Hive文件后再打开当前服务所在Hive文件, 定位到服务键,打开SPI所在键,若RktRegEnumKey指令所有子键都已经枚举, 则调用RktRegEnumKey指令枚举所有子键,若存在未枚举的子键,调用 RktRegOpenKey打开子键,调用RktRegEmimValue指令读取SPI数据;
为了获得服务提供商接口信息中,容易被恶意代码修改的第二系统信息, 服务提供商接口信息收集子模块416调用系统用户态API的对SPI信息进行获 取的注册表操作指令,将该指令响应的第二 SPI信息作为第二系统信息(可作 为第二系统信息列表的某一表项)。
另外,该系统信息收集模块41还可以包括
参考信息收集子^f莫块417,获得SDT信息、GDT信息或IDT信息,所述SDT 信息、GDT信息或IDT信息在进行恶意代码才企测时,作为提供给用户(如高级 用户)的参考信息。具体地,可调用系统内核态的SDT获取指令,如 KeServiceDescriptorTable指令,来获得SDT信息;调用系统内核态的GDT获取 指令,如sgdt指令,并复制相关项,来获得GDT信息;或者调用系统内核态的 IDT获取指令,如sidt指令,并复制相关项,来获得IDT信息;
恶意行为检测模块42,通过识别所述第一系统信息与第二系统信息的差异, 检测出所述恶意代码。具体地,若系统信息类别为进程信息,则比较作为第一 系统信息的第一进程信息(或列表,下同)以及作为第二系统信息的第二进程 信息(或列表,下同)是否一致;若系统信息类别为端口信息,则比较作为第 一系统信息的第 一端口信息以及作为第二系统信息的第二端口信息是否一致; 若系统信息类别为文件信息,则比较作为第一系统信息的第一文件信息(文件 目录名、文件名等)以及作为第二系统信息的第二文件信息是否一致;若系统信息类别为注册表信息时,则比较作为第 一 系统信息的第 一注册表键值信息以 及作为第二系统信息的第二注册表键值信息是否一致;若系统信息类别为系统
服务信息时,则比较作为第 一 系统信息的第 一 系统服务信息以及作为第二系统
信息的第二系统服务信息是否一致;若系统信息类别为SPI信息时,则比较作 为第 一 系统信息的第一 SP1信息以及作为第二系统信息的第二 SPI信息是否一 致,若上述比较得到第一系统信息与第二系统信息具有差异,则将所述第一系 统信息和第二系统信息之间的差异作为恶意代码可疑行为;
恶意行为阻断单元43,将恶意代码可疑行为的相关信息提示给用户,询问 用户是否忽略或阻断恶意代码的执行,当用户选择阻断恶意代码的执行时,阻 断该恶意代码的执行,还可以记录本次检测过程、检测结果、检测时间等相关 信息到日志中。
通过实施上述本发明实施例,根据难以被恶意代码修改的第 一系统信息及 容易被恶意代码修改的第二系统信息,通过两者差异的识别,并且将所述第一 系统信息和第二系统信息之间的差异作为恶意代码可疑行为,可以有效地检测 出各种隐藏的恶意代码,由于检测针对的是恶意代码可疑行为,而不是恶意代 码本身,因此恶意代码无论如何变形都可从系统信息中检测出来,从而提高系 统安全性。
另外,本领域普通技术人员可以理解实现上述实施例方法中的全部或部分 流程,是可以通过程序来指令相关的硬件来完成,所述的程序可存储于一计算 机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。 其中,所述的存储介质可为A兹碟、光盘、只读存储记忆体(Read-Only Memory, ROM)或随机存储记忆体(Random Access Memory, RAM)等。
以上所述是本发明的具体实施方式
,应当指出,对于本技术领域的普通技 术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这 些改进和润饰也视为本发明的保护范围。
权利要求
1、一种恶意代码检测方法,其特征在于,包括获得难以被恶意代码修改的第一系统信息,以及容易被恶意代码修改的第二系统信息;通过识别所述第一系统信息与第二系统信息的差异,检测出所述恶意代码。
2、 如权利要求1所述的恶意代码;险测方法,其特征在于,所述系统信息包 括进程信息、端口信息、文件信息、注册表信息、系统服务信息、服务提供商 接口信息中一种或多种的组合。
3、 如权利要求2所述的恶意代码检测方法,其特征在于,所述获得难以被 恶意代码修改的第一系统信息,以及容易被恶意代码修改的第二系统信息包括当所述系统信息类别为进程信息时,读取驱动程序中系统内核态的全局句 柄表,并判断该全局句柄表中的进程句柄是否为有效句柄,若是,则将该进程 句柄对应的第一进程信息作为所述第 一 系统信息;调用系统用户态应用程序接 口的进程跟踪指令,将该指令响应的第二进程信息作为所述第二系统信息;当所述系统信息类别为端口信息时,创建并调用驱动程序中系统内核态的 传输控制协议设备端口情况查询指令,将该指令响应的第一传输控制协议设备 端口情况信息作为所述第 一 系统信息;调用系统用户态应用程序接口的传输控 制协议设备端口情况枚举指令,将该指令响应的第二传输控制协议设备端口情 况信息作为所述第二系统信息;当所述系统信息类别为文件信息时,创建并调用驱动程序中系统内核态的 指定路径文件信息的查询指令,将该指令响应的第一文件信息作为所述第一系 统信息;调用系统用户态应用程序接口的指定路径文件信息的查询指令,将该 指令响应的第二文件信息作为所述第二系统信息;当所述系统信息类别为注册表信息时,调用系统内核态的注册表信息权限 赋予指令,将根据所赋予权限获取的指定路径下的第一注册表键值信息作为所 述第一系统信息;调用系统用户态应用程序接口的注册表操作指令,将该指令 响应的第二注册表键值信息作为所述第二系统信息;当所述系统信息类别为系统服务信息时,调用系统内核态的注册表信息权限赋予指令,将根据所赋予权限获取的第一系统服务信息作为所述第一系统信息;调用系统用户态应用程序接口的对系 统服务信息进行获取的注册表操作指令,将该指令响应的第二系统服务信息作 为所述第二系统信息;或者,当所述系统信息类别为服务提供商接口信息时,调用系统内核态的注册表 信息权限赋予指令,将根据所赋予权限获取的第二服务提供商接口信息作为所 述第一系统信息;调用系统用户态应用程序接口的对服务提供商接口信息进行 获取的注册表操作指令,将该指令响应的第二服务提供商接口信息作为所述第 二系统信息。
4、 如权利要求1至3中任一项所述的恶意代码检测方法,其特征在于,该 方法还包括获得系统服务描述符表信息、全局描述符表信息或中断描述符表信息,作 为恶意代码检测时提供给用户的参考信息。
5、 如权利要求1至3中任一项所述的恶意代码检测方法,其特征在于,该 方法还包括阻断所述恶意代码的执行和/或记录相关信息。
6、 一种恶意代码检测系统,其特征在于,包括系统信息收集模块,获得难以被恶意代码修改的第一系统信息,以及容易 被所述恶意代码修改的第二系统信息;恶意行为检测模块,通过识别所述第一系统信息与第二系统信息的差异, 检测出所述恶意代码。
7、 如权利要求6所述的恶意代码检测系统,其特征在于,所述系统信息包 括进程信息、端口信息、文件信息、注册表信息、系统服务信息、服务提供商 接口信息中一种或多种的组合。
8、如权利要求7所述的恶意代码检测系统,其特征在于,所述系统信息收 集模块包括如下子模块中的 一种或多种的组合进程信息收集子模块,当所述系统信息类别为进程信息时,读取驱动程序 中系统内核态的全局句柄表,并判断该全局句柄表中的进程句柄是否为有效句柄,若是,则将该进程句柄对应的第一进程信息作为所述第一系统信息;调用 系统用户态应用程序接口的进程跟踪指令,将该指令响应的第二进程信息作为 所述第二系统信息;端口信息收集子模块,当所述系统信息类别为端口信息时,创建并调用驱 动程序中系统内核态的传输控制协议设备端口情况查询指令,将该指令响应的 第一传输控制协议设备端口情况信息作为所述第一系统信息;调用系统用户态 应用程序接口的传输控制协议设备端口情况枚举指令,将该指令响应的第二传 输控制协议设备端口情况信息作为所述第二系统信息;文件信息收集子模块,当所述系统信息类别为文件信息时,创建并调用驱 动程序中系统内核态的指定路径文件信息的查询指令,将该指令响应的第一文 件信息作为所述第一系统信息;调用系统用户态应用程序接口的指定路径文件 信息的查询指令,将该指令响应的第二文件信息作为所述第二系统信息;注册表信息收集子模块,当所述系统信息类别为注册表信息时,调用系统 内核态的注册表信息权限赋予指令,将根据所赋予权限获取的指定路径下的第 一注册表键值信息作为所述第一系统信息;调用系统用户态应用程序接口的注 册表操作指令,将该指令响应的第二注册表键值信息作为所述第二系统信息;系统服务信息收集子模块,当所述系统信息类别为系统服务信息时,调用 系统内核态的注册表信息权限赋予指令,将根据所赋予权限获取的第一系统服 务信息作为所述第一系统信息;调用系统用户态应用程序接口的对系统服务信 息进行获取的注册表操作指令,将该指令响应的第二系统服务信息作为所述第 二系统信息;服务提供商接口信息收集子模块,当所述系统信息类别为服务提供商接口 信息时,调用系统内核态的注册表信息权限赋予指令,将根据所赋予权限获取 的第二服务提供商接口信息作为所述第 一 系统信息;调用系统用户态应用程序 接口的对服务提供商接口信息进行获取的注册表操作指令,将该指令响应的第 二服务才是供商接口信息作为所述第二系统信息。
9、 如权利要求6至8中任一项所述的恶意代码才全测系统,其特征在于,所述系统信息收集模块还包括参考信息收集子模块,获得系统服务描述符表信息、全局描述符表信息或 中断描述符表信息,作为恶意代码检测时提供给用户的参考信息。
10、 如权利要求6至8中任一项所述的恶意代码检测系统,其特征在于, 该系统还包括恶意行为阻断模块,阻断所述恶意代码的执行-W或记录相关信息。
全文摘要
本发明实施例公开了一种恶意代码检测方法和系统,所述方法包括获得难以被恶意代码修改的第一系统信息,以及容易被所述恶意代码修改的第二系统信息,通过识别所述第一系统信息与第二系统信息的差异,检测出所述恶意代码。采用本发明实施例,可对未知的恶意代码进行检测,提高系统安全性,且简单易行。
文档编号G06F21/56GK101304409SQ20081002917
公开日2008年11月12日 申请日期2008年6月28日 优先权日2008年6月28日
发明者丹 刘, 胜 徐, 跃 曹, 李毅超, 欢 杜, 杨玉奇, 柴方明, 晓 梁, 白皓文, 舒柏程, 顾凌志 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1