一种在linux系统中对恶意软件Rootkit的检测和修复方法与流程

文档序号:12123328阅读:582来源:国知局

本发明涉及计算机软件开发领域,具体涉及一种在linux系统中对恶意软件Rootkit的检测和修复方法,本发明可以在不重新编译内核的基础上,实现linux系统内核级别的对恶意软件Rootkit的检测以及修复,从而能够有效检测linux系统存在的异常状况,提高linux系统的安全性。



背景技术:

随着计算机技术不断发展,各种网站、移动终端以及移动终端上app服务的广泛应用,服务器系统的安全性问题越来越受到重视。linux系统作为服务器系统中重要的一员,采用Linux系统的服务器的使用数量也与日俱增,针对linux系统的各种木马病毒也在不断地更新。

Rootkit是linux系统上最为顽固的一种恶意病毒。Rootkit是一种特殊类型的malware(恶意软件),之所以特殊是因为用户不知道它们在做什么事情。Rootkit基本上是无法检测到的,而且几乎不可能删除它们。虽然检测工具在不断增多,但是恶意软件的开发者也在不断寻找新的途径来掩盖他们的踪迹。Rootkit几乎可以隐藏任何软件,包括文件服务器、键盘记录器、Botnet和Remailer,许多Rootkit甚至可以隐藏大型的文件集合并允许攻击者在计算机上保存许多文件,而用户却无法看到。Rootkit本身不会像病毒或蠕虫那样影响计算机的运行,它可以悄无声息的隐藏自己,然后为所欲为。如今很多手机系统采用的是安卓系统,安卓系统使用的正是linux内核,所以Rootkit同样会发生在手机上,因为Rootkit攻击的自我隐藏性,我们很难发现并且铲除被隐藏的文件和进程。

针对上述问题,本申请发明了一种能够在内核级别检测linux系统是否被Rootkit攻击,并对linux系统做出修复的方法,可以在不影响linux系统业务的基础上发现被隐藏的Rootkit文件和进程,从而达到检测和修复linux系统的效果。



技术实现要素:

本发明通过键入内核模块的方式对系统调用和函数的输出来检测是否被Rootkit攻击,并通过HOOK技术修复被替换的系统掉调用,从而达到修复系统的结果。

本申请发明一种在linux系统中对恶意软件Rootkit的检测方法,其特征在于,该检测方法具体包括如下步骤:动态加载linux系统肉核模块;输出目前系统内存中的系统调用和内核级别函数的地址;将该输出的系统调用和内核级别函数地址内容与预备好的地址表进行比对;如果系统调用和内核级别函数地址与预备的地址表不能对应,则表示系统已经被Rootkit攻击;如果系统调用和内核级别函数地址与预备的地址表可以对应,则表示系统安全,未被攻击。

所述的在linux系统中对恶意软件Rootkit的检测方法,其特征还在于,该预备好的地址表可以使用系统本身预留的系统调用map文件,也可以使用标准的内核产生的map文件。

所述的在linux系统中对恶意软件Rootkit的检测方法,其特征还在于,所述的动态加载linux系统内核模块步骤是使用insmod加载内核模块。

所述的在linux系统中对恶意软件Rootkit的检测方法,其特征还在于,所述的动态加载linux系统内核模块步骤具体包括:使用insmod在用户空间启动加载过程并定义需要加载的模块,执行load_module函数将内核模块嵌入内核,获取内核级别的信息。

本申请还发明一种在linux系统中对恶意软件Rootkit的修复方法,其特征在于,该修复方法具体包括如下步骤:动态加载linux系统内核模块;输出目前系统内存中的系统调用和内核级别函数的地址;将该输出的系统调用和内核级别函数地址内容与预备好的地址表进行比对;如果系统调用和内核级别函数地址与预备的地址表不能对应,则表示系统已经被Rootkit攻击,通过HOOK技术将不一致的系统调用和函数的地址替换为正确的地址。

所述的在linux系统中对恶意软件Rootkit的修复方法,其特征还在于,该预备好的地址表可以使用系统本身预留的系统调用map文件,也可以使用标准的内核产生的map文件。

所述的在linux系统中对恶意软件Rootkit的修复方法,其特征还在于,所述的动态加载linux系统内核模块步骤是使用insmod加载内核模块。

所述的在linux系统中对恶意软件Rootkit的修复方法,其特征还在于,所述的动态加载linux系统内核模块步骤具体包括:使用insmod在用户空间启动加载过程并定义需要加载的模块,执行load_module函数将内核模块嵌入内核,获取内核级别的信息。

所述的在linux系统中对恶意软件Rootkit的修复方法,其特征还在于,通过HOOK技术将不一致的系统调用和函数的地址替换为正确的地址步骤具体包括:找出所有的被劫持的函数;将错误的函数的地址通过HOOK的方式更改为正确的地址;找到相关的恶意Rootkit的文件和程序;删除相关的恶意Rootkit的文件和程序。

所述的在linux系统中对恶意软件Rootkit的修复方法,其特征还在于,通过HOOK技术将不一致的系统调用和函数的地址替换为正确的地址步骤可以通过更改sys-read和syswrite是这两个系统函数指针来实现。

本文提出检测和保护方案可以补充SSR(浪潮操作系统安全增强系统)的不足,SSR只能在未被Rootkit的基础上保护系统不被攻击,但是此方法可以实现对已经被攻击的系统进行修复,然后再使用SSR对系统进行保护,来补充SSR的不足之处。

附图说明

图1、重定向系统调用示意图

具体实施方式

下面对本发明的内容进行更加详细的阐述:

本发明提出了一种linux系统内核级别Rootkit检测和修复程序。本发明的显著特征是在不重新编译内核的基础上,实现内核级别的Rootkit检测以及修复。

Rootkit技术是恶意程序用于隐藏自身的主要技术手段之一,其原理为:系统调用实现函数位于内核空间,而可加载内核模块可以通过内核符号表访问内核空间中的各种资源,利用HOOK技术挂钩系统调用来执行相关的自定义操作,比如隐藏文件和恶意的进程。现有的内核级Rootkit正是基于这种原理实现的。修改系统调用表的Rootkit对位于系统调用表中的一些系统调用函数地址进行修改。同样我们也可以利用这种技术检测系统是否被攻击,并在检测的基础上进行修复。

本发明基于linux动态模块加载和HOOK技术,嵌入内核模块对系统的系统调用和函数进行检测,然后使用HOOK技术对系统进行修复,并显示已经被隐藏的文件,从而达到真正的修复系统的效果。

本文通过动态加载内核模块,将目前系统内存中的系统调用和内核级别函数的地址输出,然后将输出内容与预备好的地址表进行比对。如果系统调用和函数地址的与预备的地址表不能对应,则表示系统被Rootkit攻击。

通过HOOK技术将不一致的系统调用和函数的地址替换为正确的地址。此时系统就恢复正常。但此时恶意的Rootkit模块仍然在我们的肉核模块中,只是不能再对兄内核的系统调用进行劫持,也不能隐藏自身的文件和进程,这时我们可以通过找到相关的恶意文件和程序来进行对linux系统的彻底修复。

为使本发明的目的、技术方案和优点更加清楚,下面将对每个部分作出详细的阐释:

获取系统调用表地址System.map文件包含了系统的内核符号地址,由于每次编译内核时,内核符号有可能会发生变化,因此每次编译都会生成一个新的System.map。因此本发明可以使用系统本身预留的系统调用map文件,也可以使用标准的内核产生的map文件,按实际情况使用。

然后加载用户linux系统的内核模块,获取到内存中的system.map的内容并输出。首先使用insmod加载内核模块。insmod在用户空间启动加载过程并定义需要加载的模块,然后它会调用init_module系统调用。init_module将模块二进制文件复制到内核后,接着系统调用实现函数sys-init_module先检查调用者是否具有执行加载模块操作的权限,然后调用load_module函数。执行完成load_module函数后用户linux系统的内核模块就被嵌入内核,然后就可以按照写好的程序获取内核级别的信息,将内存中的地址表输出出来,最终可以将地址的内容与预留的内容对比。比如我们从内存输出的系统调用open函数的地址是A,然而我们预留的标准中open函数的地址是B,那么我们的open系统调用就被劫持了。此时我们就能确定我们的系统被Rootkit攻击了。

通过以上方式可以找出所有的被劫持的函数,然后将错误的函数的地址通过HOOK的方式,再更改为正确的地址,如此就可以去掉恶意肉核模块对操作系统的影响,这样处理之后,能够看到被恶意内核模块隐藏的文件和程序。比如恶意的内核模块可以通过劫持open和read等系统调用是我们看不到某些关键系统的配置文件中的相关内容。利用hook技术实现系统调用函数的劫持。实现方法是在Rootkit模块加载时将系统调用表中待劫持的系统调用索引替换为攻击者定义的函数指针,如图1所示,read和write系统调用展示了重定向系统调用过程。sys_read和sys_write是这两个系统调用的实现函数,系统调用表中-NR_read和-NR_write两个索引指向这两个函数(图中虚线所示)。攻击者将系统调用表中相关索引指向的具体实现函数更改为:Rootkit-read和Rootkit_write(图中实线所示),这样当read和write被调用时,实际执行的就是攻击者函数。这两个系统调用被替换后,我们也可以使用这种方式将正确的函数的地址替换回去,从而在不干扰系统正常运行的情况下将系统进行部分的修复。

将系统调用和函数被修复后,我们就可以看到所有的文件系统的调用情况。此时我们就可以判定哪些是恶意攻击中的文件或进程。最主要的是要找到Rootkit的内核模块文件。此文件就是隐藏文件和进程的罪魁祸首。此文件与我们的内核模块的文件类似,一般是以.ko结尾。找到此文件并且删除文件,然后删除相关的之前被隐藏的文件,开机启动文件等,此时系统就从Rootkit攻击中恢复回来。等待合适的时间重启系统即可。

本文提出的检测和保护方案可以补充SSR的不足,SSR只能在未被Rootkit攻击的基础上保护系统不被攻击,但是此方法可以实现对已经被攻击的linux系统进行修复,然后再使用SSR对linux系统进行保护,来补充SSR的不足之处。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1