CN108959915B - 一种rootkit检测方法、装置及服务器 - Google Patents
一种rootkit检测方法、装置及服务器 Download PDFInfo
- Publication number
- CN108959915B CN108959915B CN201810706457.2A CN201810706457A CN108959915B CN 108959915 B CN108959915 B CN 108959915B CN 201810706457 A CN201810706457 A CN 201810706457A CN 108959915 B CN108959915 B CN 108959915B
- Authority
- CN
- China
- Prior art keywords
- state
- system call
- call table
- ring0
- ring3
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/566—Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/03—Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
- G06F2221/033—Test or assess software
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/03—Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
- G06F2221/034—Test or assess a computer or a system
Abstract
本发明实施例公开了一种rootkit检测方法、装置及服务器,该方法应用于linux系统,该linux系统包括预先备份有系统调用表的安全备份区,该linux系统分为ring3态和ring0态。所述方法包括:在检测到linux系统运行时,加载预先部署在linux系统中的内核模块,并触发内核模块中的获取程序获取ring0态中的当前系统调用表,从安全备份区获取预先备份的系统调用表,并调用ring3态中的比较程序确定该预先备份的系统调用表与当前系统调用表是否一致,若不一致,则确定linux系统的ring0态被rootkit攻击。通过本发明实施例,有利于提高rootkit检测的准确性。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种恶意软件rootkit检测方法、装置及服务器。
背景技术
随着计算机技术的飞速发展,各种网站、移动终端以及移动终端上app服务的广泛应用,服务器系统的安全性问题越来越受到重视。linux系统作为服务器系统中重要的一员,采用linux系统的服务器数量与日俱增,针对linux系统的各种木马病毒也在不断更新。rootkit是linux系统上最为顽固的一种恶意病毒,也是一种特殊类型的恶意软件,它几乎可以隐藏任何软件,包括文件服务器、键盘记录器、botnet和remailer。
目前,虽然检测rootkit在不断增多,但是恶意软件的开发者也在不断寻找新的途径来掩盖rootkit的踪迹。因此,如何更加准确地对rootkit进行检测,成为一个亟待解决的问题。
发明内容
本发明实施例提供了一种rootkit检测方法、装置及服务器,有利于提高rootkit检测的准确度。
第一方面,本发明实施例提供了一种rootkit检测方法,该方法应用于linux系统,所述linux系统包括预先备份有系统调用表的安全备份区,所述linux系统分为用户态ring3态和内核态ring0态,该方法包括:
在检测到所述linux系统运行时,加载预先部署在所述linux系统中的内核模块;
在检测到所述内核模块加载完成的情况下,触发所述内核模块中的获取程序获取所述ring0态中的当前系统调用表;
从所述安全备份区获取预先备份的所述系统调用表,并调用所述ring3态中的比较程序确定所述安全备份区中预先备份的所述系统调用表与获取的所述当前系统调用表是否一致;
若预先备份的所述系统调用表与获取的所述当前系统调用表不一致,则确定所述linux系统的所述ring0态被rootkit攻击。
在一个实施例中,所述安全备份区还预先备份有比较程序,所述调用所述ring3态中的比较程序确定所述安全备份区中预先备份的所述系统调用表与获取的所述当前系统调用表是否一致之前,还可以获取所述ring3态中的比较程序,以及所述安全备份区中预先备份的所述比较程序;比较所述ring3态中的比较程序和所述安全备份区中的比较程序是否一致;若所述ring3态中的比较程序和所述安全备份区中的比较程序一致,则触发所述调用所述ring3态中的比较程序确定所述安全备份区中预先备份的所述系统调用表与获取的所述当前系统调用表是否一致的步骤。
在一个实施例中,所述确定所述linux系统的所述ring0态被rootkit攻击之后,还可以:确定所述ring0态中的所述当前系统调用表的内存地址;根据所述内存地址查找到所述当前系统调用表,并利用所述预先备份的所述系统调用表替换所述当前系统调用表。
在一个实施例中,所述确定所述ring0态中的所述当前系统调用表的内存地址的具体实施方式为:获取所述linux系统中的系统调用表地址文件,所述文件记录了所述ring0态中的所述当前系统调用表的内存地址与预先备份的所述系统调用表的映射关系;根据所述映射关系和所述预先备份的所述系统调用表,从所述系统调用表地址文件中确定出所述当前系统调用表的内存地址。
在一个实施例中,所述确定所述ring0态的所述当前系统调用表的内存地址的具体实施方式为:获取所述linux系统中的中断描述符表IDT,并根据所述IDT确定出中断int0×80的入口点;将从所述入口点往后移三个字节所在的地址确定为所述ring0态中的所述当前系统调用表的内存地址。
在一个实施例中,所述加载预先部署在所述linux系统中的内核模块的具体实施方式为:调用所述linux系统的驱动程序启动加载过程;在所述加载过程启动后,调用模块加载函数将预先部署的内核模块嵌入所述ring0态。
在一个实施例中,所述确定所述安全备份区中预先备份的所述系统调用表与获取的所述当前系统调用表不一致后,还可以获取所述当前系统调用表的函数地址,并输出告警信息,所述告警信息用于提示用户位于所述函数地址的所述当前系统调用表已被篡改。
第二方面,本发明实施例提供了一种rootkit检测装置,该rootkit检测装置包括用于执行上述第一方面的方法的模块。
第三方面,本发明实施例提供了一种服务器,该服务器包括处理器、网络接口和存储器,所述处理器、网络接口和存储器相互连接,其中,所述网络接口受所述处理器的控制用于收发消息,所述存储器用于存储支持服务器执行上述方法的计算机程序,所述计算机程序包括程序指令,所述处理器被配置用于调用所述程序指令,执行上述第一方面的方法。
第四方面,本发明实施例提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时使所述处理器执行上述第一方面的方法。
本发明实施例中,服务器在检测到linux系统运行时,加载预先部署在linux系统中的内核模块,在检测到内核模块加载完成的情况下,触发内核模块中的获取程序获取ring0态中的当前系统调用表,并从安全备份区获取预先备份的系统调用表,并调用ring3态中的比较程序确定安全备份区中预先备份的系统调用表与获取的当前系统调用表是否一致,若不一致,则确定linux系统的ring0态被rootkit攻击。针对系统调用表对rootkit进行检测,一方面由于对比的是系统调用表,可以非常小开销的实现检测效果;另一方面,由于系统调用表在内核编译阶段就被指定,检测过程中不会被更改,可以提高rootkit检测的准确性。
附图说明
为了更清楚地说明本发明实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的一种rootkit检测方法的流程示意图;
图2是本发明实施例提供的另一种rootkit检测方法的流程示意图;
图3是本发明实施例提供的一种rootkit检测装置的示意性框图;
图4是本发明实施例提供的一种服务器的示意性框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
linux操作系统分为内核态ring0态和用户态ring3态,用户的绝大多数的操作都在ring3态,所有的系统命令和应用程序基本上都会调用系统文件,这些系统文件则是通过读取ring0态的系统调用表syscall table从而作用到硬件。而当linux系统的ring0态被rootkit攻击后,syscall table中syscall的内存地址会被篡改,导致程序读取到的是修改过的syscall地址从而执行恶意函数实现特殊功能(如隐藏后台恶意进程等等)。
因此,本发明实施例提出了一种恶意软件rootkit检测方法,在检测到linux系统运行时,加载预先部署在linux系统中的内核模块,并在检测到内核模块加载完成的情况下,触发内核模块中的获取程序获取ring0态中的当前系统调用表,进而从安全备份区获取预先备份的系统调用表,并调用ring3态中的比较程序确定安全备份区中预先备份的系统调用表与获取的当前系统调用表是否一致,若不一致,则确定linux系统的ring0态被rootkit攻击。针对系统调用表对rootkit进行检测,一方面由于对比的是系统调用表,可以非常小开销的实现检测效果;另一方面,由于系统调用表在内核编译阶段就被指定,检测过程中不会被更改,可以提高rootkit检测的准确性。
参见图1,图1是本发明实施例提供的一种rootkit检测方法的流程示意图,该方法应用于linux系统,该linux系统预先划分有安全备份区,该安全备份区预先备份有系统调用表,该linux系统分为用户态ring3态和内核态ring0态,如图所示,该rootkit检测方法可包括:
101、服务器在检测到linux系统运行时,加载预先部署在linux系统中的内核模块。
在一个实施例中,开发人员可以在系统安装时设计单独的分区通过单独的挂载点挂载用作系统调用表syscall_table的备份分区文件,linux使用了ring3级别运行用户态,ring0作内核态,该内核态ring0态与用户态ring3态是操作系统的两种运行级别。例如用户运行一个程序,该程序所创建的进程开始是运行在用户态的,如果要执行文件操作,网络数据发送等操作,必须通过各种系统调用,这些系统调用会调用内核中的代码来完成操作,这时,必须切换到ring0态,然后进入内核地址空间去执行这些代码完成操作,完成后,切换回ring3态,也即回到用户态。这样,ring3态的程序就不能随意操作内核地址空间,具有一定的安全保护作用。
其中,内核模块是linux内核向外部提供的一个插口,其全称为动态可加载内核模块(Loadable Kernel Module,LKM),可以简称为模块。linux内核之所以提供模块机制,是因为它本身是一个单内核(monolithic kernel)。单内核的最大优点是效率高,因为所有的内容都集成在一起,但其缺点是可扩展性和可维护性相对较差,模块机制就是为了弥补这一缺陷。
在一个实施例中,服务器在检测到linux系统运行时,可以加载预先部署在linux系统中的内核模块。其中,加载内核模块的具体方式,可以利用linux系统的驱动程序进行加载,该驱动程序例如可以为insmod和modprobe。其中,modprobe是根据depmod-a的输出/lib/modules/version/modules.dep来加载全部的所需要模块;insmod是通过模式的方式在需要时载入内核。
其中,这两种加载方式存在以下区别:a.modprobe可以解决加载内核模块时的依赖关系,比如加载内核模块A就必须先加载内核模块B之类的,它是通过/lib/modules/<kernel-version>/modules.dep文件来查找依赖关系的。而insmod不能解决依赖问题。b.modprobe默认会去/lib/modules/<kernel-version>/下面查找内核模块,而insmod只在给它的参数中去找内核模块(默认在当前目录找)。
在一个实施例中,服务器可以调用linux系统的驱动程序启动加载过程,并在该加载过程启动后,调用模块加载函数将预先部署的内核模块嵌入ring0态,进而完成对内核模块的加载。其中,该linux系统的驱动程序,例如可以为insmod;该加载函数,例如可以为load module函数。
102、服务器在检测到内核模块加载完成的情况下,触发内核模块中的获取程序获取ring0态中的当前系统调用表。
103、服务器从安全备份区获取预先备份的系统调用表,并调用ring3态中的比较程序确定安全备份区中预先备份的系统调用表与获取的当前系统调用表是否一致。
104、若预先备份的系统调用表与获取的当前系统调用表不一致,服务器则确定linux系统的ring0态被rootkit攻击。
在一个实施例中,ring3态中预先存储有一个比较程序,该比较程序用于比较安全备份区中预先备份的系统调用表和步骤102中获取到的当前系统调用表是否一致,是否被篡改是否被重定向。这种情况下,服务器在检测到内核模块加载完成的情况下,触发内核模块中的获取程序实时获取ring0态中的当前系统调用表,并从安全备份区获取原先备份的系统调用表,进而调用ring3态中的该比较程序确定安全备份区中预先备份的系统调用表与获取的当前系统调用表是否一致,若不一致,则确定linux系统的ring0态被rootkit攻击。针对系统调用表对rootkit进行检测,一方面由于对比的是系统调用表,可以非常小开销的实现检测效果;另一方面,由于系统调用表在内核编译阶段就被指定,不会更改,可以提高rootkit检测的准确性。
其中,在调用ring3态中的比较程序确定安全备份区中预先备份的系统调用表与获取的当前系统调用表是否一致时,还可以对该比较程序设置定时功能,也即在预设的时间间隔去调用ring3态中的比较程序执行确定安全备份区中预先备份的系统调用表与获取的当前系统调用表是否一致的步骤。
本发明实施例中,服务器在检测到linux系统运行时,加载预先部署在linux系统中的内核模块,在检测到内核模块加载完成的情况下,触发内核模块中的获取程序获取ring0态中的当前系统调用表,并从安全备份区获取预先备份的系统调用表,并调用ring3态中的比较程序确定安全备份区中预先备份的系统调用表与获取的当前系统调用表是否一致,若不一致,则确定linux系统的ring0态被rootkit攻击。针对系统调用表对rootkit进行检测,一方面由于对比的是系统调用表,可以非常小开销的实现检测效果;另一方面,由于系统调用表在内核编译阶段就被指定,检测过程中不会被更改,可以提高rootkit检测的准确性。
参见图2,图2是本发明实施例提供的另一种rootkit检测方法的流程示意图,如图所示,该rootkit检测方法可包括:
201、服务器在检测到linux系统运行时,加载预先部署在linux系统中的内核模块。
202、服务器在检测到内核模块加载完成的情况下,触发内核模块中的获取程序获取ring0态中的当前系统调用表。
其中,步骤201-步骤202的具体实施方式可以参见上述实施例中步骤101-步骤102的相关描述,此处不再赘述。
203、服务器获取ring3态中的比较程序,并从安全备份区获取预先备份的系统调用表和比较程序。
204、服务器比较ring3态中的比较程序和安全备份区中的比较程序是否一致。
205、若ring3态中的比较程序和安全备份区中的比较程序一致,服务器则调用ring3态中的该比较程序确定安全备份区中预先备份的系统调用表与获取的当前系统调用表是否一致。
在一个实施例中,安全备份区还预先备份有比较程序。这种情况下,当服务器获取到ring0态中的当前系统调用表后,可以从安全备份区中获取预先备份的系统调用表和比较程序,并将安全备份区中的比较程序与获取到ring3态中的比较程序进行比较,确定ring3态中的比较程序和安全备份区中的比较程序是否一致,如果ring3态中的比较程序和安全备份区中的比较程序一致,则调用ring3态中的比较程序确定安全备份区中预先备份的系统调用表与获取的当前系统调用表是否一致。
如果确定ring3态中的比较程序和安全备份区中的比较程序不一致,则可以确定ring3态中的比较程序被篡改。这种情况下,服务器可以输出提示信息,用于提示ring3态中的比较程序被篡改,当运维人员查看到该提示信息时,则可以及时处理。
其中,服务器在比较ring3态中比较程序和安全备份区中的比较程序是否一致时,可以对比两者的文件内容校验信息,若两者的文件内容检验信息不一致,则可以确定ring3态中的比较程序和安全备份区中预先备份的比较程序不一致。该文件内容检验信息可以包括循环冗余校验码(Cyclic Redundancy Check,CRC)、信息摘要算法值(如信息摘要算法第五版(Message-Digest Algorithm 5,MD5))等。
其中,循环冗余校验码CRC是一种根据网络数据封包或电脑档案等数据产生简短固定位数校验码的一种散列函数,主要用来检测或校验数据传输或者保存后可能出现的错误。生成的数字在传输或者储存之前计算出来并且附加到数据后面,然后接收方进行检验确定数据是否发生变化。也即,如果两个文件的内容是完全相同的,则两个文件的CRC一定是相同的。因此,在本发明实施例中,也可以用比较程序的CRC值来判断ring3态中比较程序和安全备份区中预先备份的比较程序是否一致。
其中,MD5已经广泛使用于文件传输可靠性的判断。例如,发送终端预先提供一个MD5校验和,接收终端接收到文件以后,用MD5算法计算接收文件的MD5校验和,然后通过检查这两个校验和是否一致,就能判断该接收的文件是否出错。即使在原文中作一个小变化(比如用c取代d),其MD5校验和也会发生巨大的变化。因此,在本发明实施例中,也可以用比较程序的MD5值来判断ring3态中比较程序和安全备份区中预先备份的比较程序是否一致。
需要说明的是,一般而言,信息摘要算法的可靠性要大于循环冗余校验,也即,如果两个比较程序的CRC不同,则可以证明两个比较程序的内容肯定不同,然而,如果两个比较程序的CRC码相同,则两个比较程序的内容却不一定是相同的。但是CRC只占2个字节,而MD5却要占16个字节,因此,用CRC码进行校验时,效率会比较高。综上,具体在比较两个比较程序的内容是否相同时,可以首先基于CRC码进行比对,如果不同,则直接确定两个比较程序的内容不同;如果CRC码相同,则进一步比较两个比较程序的MD5值是否相同,如果相同,则确定两个比较程序的内容相同,否则,确定两个比较程序的内容不同。这样,相当于首先通过CRC码将内容肯定不同的比较程序过滤掉,然后仅针对CRC码相同的比较程序进行进一步地验证,因此,相当于综合利用了两种验证码的优点,既可以提高验证效率,又可以保证验证的可靠性。
206、若预先备份的系统调用表与获取的当前系统调用表不一致,服务器则确定linux系统的ring0态被rootkit攻击。
在一个实施例中,服务器可以获取当前系统调用表的函数地址,并输出告警信息,该告警信息用于提示用户位于该函数地址的当前系统调用表已被篡改。采用这样的方式,运维人员查看到该告警信息后,可以直接通过该函数地址查找到该当前系统调用表,并对该系统调用表进行处理。
在一个实施例中,服务器确定出linux系统的ring0态被rootkit攻击后,还可以确定ring0态中的当前系统调用表的内存地址,并根据内存地址查找到当前系统调用表,并利用预先备份的系统调用表替换当前系统调用表,进而实现对系统的还原修复。
其中,服务器确定ring0态中当前系统调用表的内存地址的方式有多种。在一个实施例中,服务器可以获取linux系统中的系统调用表地址文件,该文件记录了所述ring0态中的所述当前系统调用表的内存地址与预先备份的所述系统调用表的映射关系。进一步地,服务器可以根据该映射关系和预先备份的系统调用表,从系统调用表地址文件中确定出当前系统调用表的内存地址。
示例性地,该系统调用表地址文件可以为system.map文件,该system.map文件用于存放内核符号表,该内核符号表是所有内核符号及其所在内存地址的一个映射表。通过地址,可以找到符号,也就是找到变量及函数;通过符号,也可以得知其所在地址。本发明中可以通过符号来获取当前系统调用表的内存地址,已知的符号就是预先备份的系统调用表。通过系统调用表则可以在system.map文件中查找到当前系统调用表的内存地址。
在另一个实施例中,服务器还可以获取linux系统中的中断描述符表IDT,并根据IDT确定出中断int0×80的入口点,并将从该入口点往后移三个字节所在的地址确定为ring0态中的当前系统调用表的内存地址。除此之外,服务器确定ring0态中当前系统调用表的内存地址的方式还可以从内存空间中暴力搜取寻找ring0态中当前系统调用表的内存地址,还可以利用预先备份的系统调用表中未导出函数的机器码中进行特征搜索,进而确定出ring0态中的当前系统调用表的内存地址。本发明对此不作具体限定。
本发明实施例中,服务器可以在检测到linux系统运行时,加载预先部署在linux系统中的内核模块,在检测到内核模块加载完成的情况下,触发内核模块中的获取程序获取ring0态中的当前系统调用表,并获取ring3态中的比较程序,从安全备份区获取预先备份的系统调用表和比较程序,进而比较ring3态中的比较程序和预先备份的比较程序是否一致,若一致,则调用ring3态中的比较程序确定安全备份区中预先备份的系统调用表与获取的当前系统调用表是否一致,不一致,服务器则确定linux系统的ring0态被rootkit攻击。针对系统调用表对rootkit进行检测,一方面,由于对比的是系统调用表,可以非常小开销的实现检测效果,且由于系统调用表在内核编译阶段就被指定,不会更改,还可以提高rootkit检测的准确性;另一方面,在确定ring3态中的比较程序未被篡改的情况下,再调用该比较程序确定安全备份区中预先备份的系统调用表与获取的当前系统调用表是否一致,可以进一步提高rootkit检测的准确性。
本发明实施例还提供了一种rootkit检测装置,该装置应用于linux系统,所述linux系统包括预先备份有系统调用表的安全备份区,所述linux系统分为用户态ring3态和内核态ring0态。该装置包括用于执行前述图1或者图2所述的方法的模块。具体地,参见图3,是本发明实施例提供的一种rootkit检测装置的示意框图。本实施例的rootkit检测装置包括:
加载模快301,用于在检测到所述linux系统运行时,加载预先部署在所述linux系统中的内核模块;
获取模块302,用于在检测到所述内核模块加载完成的情况下,触发所述内核模块中的获取程序获取所述ring0态中的当前系统调用表;
所述获取模块302,还用于从所述安全备份区获取预先备份的所述系统调用表;
确定模块303,用于调用所述ring3态中的比较程序确定所述安全备份区中预先备份的所述系统调用表与所述获取模块获取的所述当前系统调用表是否一致,若预先备份的所述系统调用表与获取的所述当前系统调用表不一致,则确定所述linux系统的所述ring0态被rootkit攻击。
在一个实施例中,所述安全备份区还预先备份有比较程序,所述装置还包括:比较模块304,其中:
获取模块302,用于获取所述ring3态中的比较程序,以及所述安全备份区中预先备份的所述比较程序;
比较模块304,用于比较所述ring3态中的比较程序和所述安全备份区中的比较程序是否一致,若所述ring3态中的比较程序和所述安全备份区中的比较程序一致,则通过确定模块303调用ring3态中的比较程序确定所述安全备份区中预先备份的所述系统调用表与获取的所述当前系统调用表是否一致。
在一个实施例中,所述装置还包括:替换模块305,其中:
确定模块303,用于确定所述ring0态中的所述当前系统调用表的内存地址;
替换模块305,用于根据所述内存地址查找到所述当前系统调用表,并利用所述预先备份的所述系统调用表替换所述当前系统调用表。
在一个实施例中,所述确定模块303,具体用于获取所述linux系统中的系统调用表地址文件,所述文件记录了所述ring0态中的所述当前系统调用表的内存地址与预先备份的所述系统调用表的映射关系;根据所述映射关系和所述预先备份的所述系统调用表,从所述系统调用表地址文件中确定出所述当前系统调用表的内存地址。
在一个实施例中,所述确定模块303,具体用于获取所述linux系统中的中断描述符表IDT,并根据所述IDT确定出中断int0×80的入口点;将从所述入口点往后移三个字节所在的地址确定为所述ring0态中的所述当前系统调用表的内存地址。
在一个实施例中,所述加载模快301,具体用于调用所述linux系统的驱动程序启动加载过程,在所述加载过程启动后,调用模块加载函数将预先部署的内核模块嵌入所述ring0态。
在一个实施例中,所述装置还包括:输出模块306,其中:
获取模块302,还用于获取所述当前系统调用表的函数地址
输出模块306,用于在获取模块302获取所到当前系统调用表的函数地址后,并输出告警信息,所述告警信息用于提示用户位于所述函数地址的所述当前系统调用表已被篡改。
需要说明的是,本发明实施例所描述的rootkit检测装置的各功能模块的功能可根据图1或者图2所述的方法实施例中的方法具体实现,其具体实现过程可以参照图1或者图2的方法实施例的相关描述,此处不再赘述。
本发明实施例中,加载模快301在检测到linux系统运行时,加载预先部署在linux系统中的内核模块,获取模块302在检测到内核模块加载完成的情况下,触发内核模块中的获取程序获取所述ring0态中的当前系统调用表,并从安全备份区获取预先备份的所述系统调用表,确定模块303调用ring3态中的比较程序确定安全备份区中预先备份的系统调用表与获取模块获取的当前系统调用表是否一致,若预先备份的系统调用表与获取的当前系统调用表不一致,则确定linux系统的ring0态被rootkit攻击。一方面由于对比的是系统调用表,可以非常小开销的实现检测效果;另一方面,由于系统调用表在内核编译阶段就被指定,检测过程中不会被更改,可以提高rootkit检测的准确性。
请参见图4,图4是本发明实施例提供的一种服务器的示意性框图,该服务器应用于linux系统,所述linux系统包括预先备份有系统调用表的安全备份区,所述linux系统分为用户态ring3态和内核态ring0态。如图4所示,该服务器包括,处理器401、存储器402和网络接口403。上述处理器401、存储器402和网络接口403可通过总线或其他方式连接,在本发明实施例所示图4中以通过总线连接为例。其中,网络接口403受所述处理器的控制用于收发消息,存储器402用于存储计算机程序,所述计算机程序包括程序指令,处理器401用于执行存储器402存储的程序指令。其中,处理器401被配置用于调用所述程序指令执行:在检测到所述linux系统运行时,加载预先部署在所述linux系统中的内核模块;在检测到所述内核模块加载完成的情况下,触发所述内核模块中的获取程序获取所述ring0态中的当前系统调用表;从所述安全备份区获取预先备份的所述系统调用表,并调用所述ring3态中的比较程序确定所述安全备份区中预先备份的所述系统调用表与获取的所述当前系统调用表是否一致;若预先备份的所述系统调用表与获取的所述当前系统调用表不一致,则确定所述linux系统的所述ring0态被rootkit攻击。
应当理解,在本发明实施例中,所称处理器401可以是中央处理单元(CentralProcessing Unit,CPU),该处理器401还可以是其他通用处理器、数字信号处理器(DigitalSignal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
该存储器402可以包括只读存储器和随机存取存储器,并向处理器401提供指令和数据。存储器402的一部分还可以包括非易失性随机存取存储器。例如,存储器402还可以存储设备类型的信息。
具体实现中,本发明实施例中所描述的处理器401、存储器402和网络接口403可执行本发明实施例提供的图1或者图2所述的方法实施例所描述的实现方式,也可执行本发明实施例所描述的rootkit检测装置的实现方式,在此不再赘述。
在本发明的另一实施例中提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令被处理器执行时实现:在检测到所述linux系统运行时,加载预先部署在所述linux系统中的内核模块;在检测到所述内核模块加载完成的情况下,触发所述内核模块中的获取程序获取所述ring0态中的当前系统调用表;从所述安全备份区获取预先备份的所述系统调用表,并调用所述ring3态中的比较程序确定所述安全备份区中预先备份的所述系统调用表与获取的所述当前系统调用表是否一致;若预先备份的所述系统调用表与获取的所述当前系统调用表不一致,则确定所述linux系统的所述ring0态被rootkit攻击。
所述计算机可读存储介质可以是前述任一实施例所述的服务器的内部存储单元,例如服务器的硬盘或内存。所述计算机可读存储介质也可以是所述服务器的外部存储设备,例如所述服务器上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,所述计算机可读存储介质还可以既包括所述服务器的内部存储单元也包括外部存储设备。所述计算机可读存储介质用于存储所述计算机程序以及所述服务器所需的其他程序和数据。所述计算机可读存储介质还可以用于暂时地存储已经输出或者将要输出的数据。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random AccessMemory,RAM)等。
以上所揭露的仅为本发明的部分实施例而已,当然不能以此来限定本发明之权利范围,本领域普通技术人员可以理解实现上述实施例的全部或部分流程,并依本发明权利要求所作的等同变化,仍属于发明所涵盖的范围。
Claims (9)
1.一种恶意软件rootkit检测方法,其特征在于,该方法应用于linux系统,所述linux系统包括预先备份有系统调用表和比较程序的安全备份区,所述linux系统分为用户态ring3态和内核态ring0态,包括:
在检测到所述linux系统运行时,加载预先部署在所述linux系统中的内核模块;
在检测到所述内核模块加载完成的情况下,触发所述内核模块中的获取程序获取所述ring0态中的当前系统调用表;
从所述安全备份区获取预先备份的所述系统调用表,并获取所述ring3态中的比较程序,以及所述安全备份区中预先备份的所述比较程序;
比较所述ring3态中的比较程序和所述安全备份区中的比较程序是否一致;
若所述ring3态中的比较程序和所述安全备份区中的比较程序不一致,确定所述ring3态中的比较程序被篡改;
若所述ring3态中的比较程序和所述安全备份区中的比较程序一致,调用所述ring3态中的比较程序确定所述安全备份区中预先备份的所述系统调用表与获取的所述当前系统调用表是否一致;
若预先备份的所述系统调用表与获取的所述当前系统调用表不一致,则确定所述linux系统的所述ring0态被rootkit攻击。
2.根据权利要求1所述的方法,其特征在于,所述确定所述linux系统的所述ring0态被rootkit攻击之后,所述方法还包括:
确定所述ring0态中的所述当前系统调用表的内存地址;
根据所述内存地址查找到所述当前系统调用表,并利用所述预先备份的所述系统调用表替换所述当前系统调用表。
3.根据权利要求2所述的方法,其特征在于,所述确定所述ring0态中的所述当前系统调用表的内存地址,包括:
获取所述linux系统中的系统调用表地址文件,所述文件记录了所述ring0态中的所述当前系统调用表的内存地址与预先备份的所述系统调用表的映射关系;
根据所述映射关系和所述预先备份的所述系统调用表,从所述系统调用表地址文件中确定出所述当前系统调用表的内存地址。
4.根据权利要求2所述的方法,其特征在于,所述确定所述ring0态的所述当前系统调用表的内存地址,包括:
获取所述linux系统中的中断描述符表IDT,并根据所述IDT确定出中断int0×80的入口点;
将从所述入口点往后移三个字节所在的地址确定为所述ring0态中的所述当前系统调用表的内存地址。
5.根据权利要求1-4任一项所述的方法,其特征在于,所述加载预先部署在所述linux系统中的内核模块,包括:
调用所述linux系统的驱动程序启动加载过程;
在所述加载过程启动后,调用模块加载函数将预先部署的内核模块嵌入所述ring0态。
6.根据权利要求1-4任一项所述的方法,其特征在于,所述确定所述安全备份区中预先备份的所述系统调用表与获取的所述当前系统调用表不一致后,所述方法还包括:
获取所述当前系统调用表的函数地址,并输出告警信息,所述告警信息用于提示用户位于所述函数地址的所述当前系统调用表已被篡改。
7.一种恶意软件rootkit检测装置,其特征在于,该装置应用于linux系统,所述linux系统包括预先备份有系统调用表和比较程序的安全备份区,所述linux系统分为用户态ring3态和内核态ring0态,包括:
加载模快,用于在检测到所述linux系统运行时,加载预先部署在所述linux系统中的内核模块;
获取模块,用于在检测到所述内核模块加载完成的情况下,触发所述内核模块中的获取程序获取所述ring0态中的当前系统调用表;
所述获取模块,还用于从所述安全备份区获取预先备份的所述系统调用表,并获取所述ring3态中的比较程序,以及所述安全备份区中预先备份的所述比较程序;
确定模块,用于比较所述ring3态中的比较程序和所述安全备份区中的比较程序是否一致;若所述ring3态中的比较程序和所述安全备份区中的比较程序不一致,确定所述ring3态中的比较程序被篡改;若所述ring3态中的比较程序和所述安全备份区中的比较程序一致,调用所述ring3态中的比较程序确定所述安全备份区中预先备份的所述系统调用表与所述获取模块获取的所述当前系统调用表是否一致,若预先备份的所述系统调用表与获取的所述当前系统调用表不一致,则确定所述linux系统的所述ring0态被rootkit攻击。
8.一种服务器,其特征在于,包括处理器和存储装置,所述处理器和所述存储装置相互连接,其中,所述存储装置用于存储计算机程序,所述计算机程序包括程序指令,所述处理器被配置用于调用所述程序指令,执行如权利要求1-6任一项所述的方法。
9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时使所述处理器执行如权利要求1-6任一项所述的方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810706457.2A CN108959915B (zh) | 2018-06-30 | 2018-06-30 | 一种rootkit检测方法、装置及服务器 |
PCT/CN2018/108469 WO2020000741A1 (zh) | 2018-06-30 | 2018-09-28 | 一种rookit检测方法、装置及服务器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810706457.2A CN108959915B (zh) | 2018-06-30 | 2018-06-30 | 一种rootkit检测方法、装置及服务器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108959915A CN108959915A (zh) | 2018-12-07 |
CN108959915B true CN108959915B (zh) | 2022-07-22 |
Family
ID=64484686
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810706457.2A Active CN108959915B (zh) | 2018-06-30 | 2018-06-30 | 一种rootkit检测方法、装置及服务器 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN108959915B (zh) |
WO (1) | WO2020000741A1 (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111695116A (zh) * | 2020-05-13 | 2020-09-22 | 北京安天网络安全技术有限公司 | 基于Linux系统内核层Rootkit的取证方法与装置 |
CN111639340B (zh) * | 2020-05-28 | 2023-11-03 | 北京金山云网络技术有限公司 | 恶意应用程序检测方法、装置、电子设备及可读存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103400074A (zh) * | 2013-07-09 | 2013-11-20 | 青岛海信传媒网络技术有限公司 | 一种隐藏进程的检测方法及装置 |
CN104035787A (zh) * | 2014-07-01 | 2014-09-10 | 深圳数字电视国家工程实验室股份有限公司 | 一种基于Andriod内核的强制访问控制方法及装置 |
CN106020932A (zh) * | 2015-05-21 | 2016-10-12 | 中国科学院计算技术研究所 | 一种用于kvm虚拟机系统的安全防护方法及系统 |
CN106529299A (zh) * | 2016-12-26 | 2017-03-22 | 郑州云海信息技术有限公司 | 一种在linux系统中对恶意软件Rootkit的检测和修复方法 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100514305C (zh) * | 2005-08-23 | 2009-07-15 | 北京软通科技有限责任公司 | 实现操作系统安全控制的系统及方法 |
CN100585609C (zh) * | 2008-04-30 | 2010-01-27 | 北京飞天诚信科技有限公司 | 一种确保操作环境安全的系统和方法 |
EP2347557B1 (en) * | 2008-11-12 | 2019-01-09 | Citrix Systems, Inc. | Systems and methods for application fluency policies |
CN102222194A (zh) * | 2011-07-14 | 2011-10-19 | 哈尔滨工业大学 | Linux主机计算环境安全保护的模块及方法 |
CN102930205A (zh) * | 2012-10-10 | 2013-02-13 | 北京奇虎科技有限公司 | 一种监测单元及方法 |
CN103699839A (zh) * | 2013-12-09 | 2014-04-02 | Tcl集团股份有限公司 | 一种内核级rootkit检测处理方法及系统 |
CN103886259B (zh) * | 2014-03-19 | 2016-09-21 | 四川大学 | 基于Xen虚拟化环境的内核级rootkit检测和处理方法 |
US9779240B2 (en) * | 2015-01-30 | 2017-10-03 | Vmware, Inc. | System and method for hypervisor-based security |
-
2018
- 2018-06-30 CN CN201810706457.2A patent/CN108959915B/zh active Active
- 2018-09-28 WO PCT/CN2018/108469 patent/WO2020000741A1/zh active Application Filing
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103400074A (zh) * | 2013-07-09 | 2013-11-20 | 青岛海信传媒网络技术有限公司 | 一种隐藏进程的检测方法及装置 |
CN104035787A (zh) * | 2014-07-01 | 2014-09-10 | 深圳数字电视国家工程实验室股份有限公司 | 一种基于Andriod内核的强制访问控制方法及装置 |
CN106020932A (zh) * | 2015-05-21 | 2016-10-12 | 中国科学院计算技术研究所 | 一种用于kvm虚拟机系统的安全防护方法及系统 |
CN106529299A (zh) * | 2016-12-26 | 2017-03-22 | 郑州云海信息技术有限公司 | 一种在linux系统中对恶意软件Rootkit的检测和修复方法 |
Non-Patent Citations (1)
Title |
---|
Linux 2.6下基于LKM 机制的Rootkit 分析;徐英慧等;《计算机工程与应用》;20131011(第3期);第241-253页 * |
Also Published As
Publication number | Publication date |
---|---|
WO2020000741A1 (zh) | 2020-01-02 |
CN108959915A (zh) | 2018-12-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107038045B (zh) | 加载库文件的方法及装置 | |
US7272748B1 (en) | Method and apparatus to detect and recover from a stack frame corruption | |
US9134996B2 (en) | Updating anti-virus software | |
US8443354B1 (en) | Detecting new or modified portions of code | |
US20150205979A1 (en) | Method and system for repairing file at user terminal | |
US20200264863A1 (en) | Hot update method, operating system, terminal device, and storage medium | |
US20190339958A1 (en) | Secure firmware updates using virtual machines to validate firmware packages | |
CN104517054A (zh) | 一种检测恶意apk的方法、装置、客户端和服务器 | |
WO2014071867A1 (zh) | 程序处理方法和系统,用于程序处理的客户端和服务器 | |
JP2009238153A (ja) | マルウェア対処システム、方法及びプログラム | |
CN108959915B (zh) | 一种rootkit检测方法、装置及服务器 | |
US11055416B2 (en) | Detecting vulnerabilities in applications during execution | |
US11416614B2 (en) | Statistical detection of firmware-level compromises | |
CN113396391B (zh) | 应用程序启动的方法、装置、电子设备及存储介质 | |
WO2020233044A1 (zh) | 一种插件校验方法、设备、服务器及计算机可读存储介质 | |
CN111966630A (zh) | 文件类型的检测方法、装置、设备和介质 | |
CN115935373A (zh) | 用于保护操作系统内核的方法和装置 | |
CN114143110B (zh) | 一种拟态设备的漏洞处理方法、装置及系统 | |
CN113312623B (zh) | 访问控制中的进程检测方法、装置、电子设备和存储介质 | |
TWI779515B (zh) | 用於判定有無篡改統一可擴展韌體介面(uefi)之方法及系統、及相關非暫時性電腦可讀媒體 | |
WO2020119138A1 (zh) | Bios复原文件可信性的验证方法及相关装置 | |
CN107330327B (zh) | 感染文件检测方法、服务器、处理方法、装置和检测系统 | |
US10776490B1 (en) | Verifying an operating system during a boot process using a loader | |
CN108108635B (zh) | 数据安全处理方法、装置和系统 | |
CN113722715B (zh) | 一种导入文件检查方法、检查系统及计算设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |