一种内核级rootkit检测处理方法及系统的制作方法

文档序号:6522685阅读:269来源:国知局
一种内核级rootkit检测处理方法及系统的制作方法【专利摘要】本发明公开一种内核级rootkit检测处理方法及系统。其方法为:A、预先在内核模块链表当前节点保存新加载模块节点签名,并将当前节点签名保存在新加载模块节点中;B、新模块加载,判断新加载模块节点中保存的签名与当前节点签名是否匹配,判断当前节点中保存的签名与新加载模块节点签名是否匹配,若其中之一不匹配,则执行步骤C;C、将当前运行的系统调用表与备份系统调用表比对,若不一致,则生成发现隐藏模块报告。本发明通过设置新加载模块与链表当前节点签名的互相匹配机制来检测rootkit入侵,并通过系统调用表与备份基准文件的对比来进一步确认报告,从而提高检测结果的可靠性,同时设置系统恢复方法,保证了系统的安全运行。【专利说明】—种内核级rootkit检测处理方法及系统【
技术领域
】[0001]本发明涉及计算机【
技术领域
】,尤其涉及一种内核级rootkit检测处理方法及系统。【
背景技术
】[0002]Android系统恶意软件数量增长迅速,而对Android安全性的研究却远远落后。rootkit技术是恶意程序用于隐藏自身的主要技术手段之一,其原理为:系统调用实现函数位于内核空间,而可加载内核模块可以通过内核符号表访问内核空间中的各种资源,这就为攻击者通过编写一个LKM(LoadableKernelModules),利用HOOK技术挂钩系统调用以执行攻击者代码片段成为了可能。现有的内核级rootkit正是基于这种原理实现的。修改系统调用表的rootkit对位于系统调用表中的一些系统调用函数地址进行修改,它利用Android操作系统中的特性可加载内核模块,将一些系统调用的地址重定向到含有恶意代码的系统调用地址。[0003]内核级rootkit加载进Android系统,主要是通过如下步骤执行:1、获取系统调用表地址System,map文件包含了系统的内核符号地址,由于每次编译内核时,内核符号有可能会发生变化,因此每次编译都会生成一个新的System,map。System,map文件的内容格式为:线性地址类型符号。可通过文件搜索命令grep在文件中查找sys_call_table,例如,如下所示:sunxzisunxz:?/work/sdk_svn/SDK/STA0S_SDK/sourceCodeForSDK/sdk_kernel/goldfish$grepsys_call_tableSystem,mapc0028f84Tsys_call_table从查询结果可以看出,系统调用表的地址为c0028f84,类型字母T意思是text,表示该符号位于代码段。类型字母小写表示局部,大写表示全局。[0004]2、实现系统调用的劫持根据系统调用表地址,利用hook技术实现系统调用函数的劫持。实现方法是在rootkit模块加载时将系统调用表中待劫持的系统调用索引替换为攻击者定义的函数指针,如图1:重定向系统调用所示。[0005]图1以read和write系统调用展示了重定向系统调用过程。sys_read和sys_write是这两个系统调用的实现函数,系统调用表中_NR_read和_NR_write两个索引指向这两个函数(图中虚线所示)。攻击者将系统调用表中相关索引指向的具体实现函数更改为:rootkit_read和rootkit_write(图中实线所不),这样当read和write被调用时,实际执行的就是攻击者函数。[0006]3、执行恶意程序代码攻击者可以在rootkit_read和(或)rootkit_write函数中增加触发条件分支,当智能设备执行特定动作时满足一定条件从而运行相应的指令序列。当攻击者设定的特定条件被触发时,攻击者可以在相应的逻辑分支中做任何事情,比如获取用户关键信息等。[0007]4、实现rootkit模块自身的隐藏Android系统对内核模块的维护通过一个全局双向链表来实现,该链表的每个节点都包括数据以及指向前驱和后继的两个指针。该数据结构定义在/include/linux/list,h中。list.h同时给出了链表的基本添加、删除、移动及替换等操作,并将相关函数作为内核符号导出。rootkit模块的隐藏是在模块自身的初始化函数中,将其前驱和后继节点的next和prev重定向以将自身从链表中删除。[0008]而与此同时,传统的rootkit检测技术由于各自的局限性,不能够完全适用于Android平台。[0009]因此,现有技术还有待于改进和发展。【
发明内容】[0010]鉴于上述现有技术的不足,本发明的目的在于提供一种内核级rootkit检测处理方法及系统,旨在解决目前Android系统无法很好检测内核级rootkit及进行系统恢复问题。[0011]本发明的技术方案如下:一种内核级rootkit检测处理方法,其中,所述方法包括以下步骤:A、预先在内核模块链表当前节点中保存新加载模块节点生成的签名,并将内核模块链表当前节点生成的签名保存在所述新加载模块节点中;B、按照加载命令执行所述新模块的加载,判断该新加载模块节点中保存的签名与内核模块链表当前节点生成的签名是否匹配,以及同时判断内核模块链表当前节点中保存的签名与该新加载模块节点生成的签名是否匹配,若新加载模块节点中保存的签名与所述当前节点生成的签名不匹配和/或当前节点中保存的签名与该新加载模块节点生成的签名不匹配,则执行步骤C;C、将系统当前运行的系统调用表与预先备份的系统调用表进行比对,若比对不一致,则系统生成发现rootkit隐藏模块报告。[0012]所述的内核级rootkit检测处理方法,其中,所述方法还包括:D、根据系统生成的发现rootkit隐藏模块的报告触发系统调用对应的恢复函数进行系统还原,所述系统还原包括系统调用表的恢复、终止恶意进程、移除可疑文件及关闭可疑网络端口。[0013]所述的内核级rootkit检测处理方法,其中,所述步骤D中系统调用表的恢复具体为:在内核空间中为每个系统调用函数分配空间,并根据所述备份的系统调用表建立正确的系统调用函数;在内核空间中为待恢复的系统调用表分配空间,根据所述备份的系统调用表使待恢复的系统调用表中的表项指向正确的系统调用函数地址。[0014]所述的内核级IOOtkit检测处理方法,其中,所述步骤D中终止恶意进程具体为:访问内核进程链表获取系统中运行的进程信息,将所获取的系统中运行的进程信息与/proc目录中的进程信息进行比对,若所获取的系统中运行的进程信息中有不在/proc目录中的进程,则消除该恶意进程。[0015]所述的内核级rootkit检测处理方法,其中,所述步骤D中移除可疑文件具体为:在所述终止恶意进程中获取恶意进程名称,并根据该恶意进程名称在已恢复的系统调用表中抓取可疑关键信息字段,将该可疑关键信息字段在包含隐藏文件在内的所有文件中进行匹配,从而获取包含该可疑关键信息字段的可疑文件,通过执行rm命令删除该可疑文件。[0016]所述的内核级rootkit检测处理方法,其中,所述步骤D中关闭可疑网络端口具体为:检测系统所有已打开网络端口中是否存在包含所述可疑关键信息字段的网络端口,若存在,则关闭该网络端口。[0017]所述的内核级rootkit检测处理方法,其中,当所述新加载模块节点中保存的签名与所述当前节点生成的签名匹配且所述当前节点中保存的签名与所述新加载模块节点生成的签名也匹配,同时系统当前运行的系统调用表与预先备份的系统调用表经比对一致,则所述新加载模块加入内核模块链表,所述当前节点重新生成签名并更新保存在所述新加载模块节点中,所述新加载模块节点重新生成签名并更新保存在所述当前节点中。[0018]所述的内核级rootkit检测处理方法,其中,当内核模块卸载时,更新内核模块链表中该内核模块前后节点中的签名信息。[0019]一种内核级rootkit检测处理系统,其中,所述系统包括:签名设置模块,用于预先在内核模块链表当前节点中保存新加载模块节点生成的签名,并将内核模块链表当前节点生成的签名保存在所述新加载模块节点中;签名匹配模块,用于判断该新加载模块节点中保存的签名与内核模块链表当前节点生成的签名是否匹配,以及判断内核模块链表当前节点中保存的签名与该新加载模块节点生成的签名是否匹配;系统调用表比对模块,用于将系统当前运行的系统调用表与预先备份的系统调用表进行比对;报告生成模块,用于根据签名匹配模块和系统调用表比对模块的处理结果生成发现rootkit隐藏模块报告。[0020]所述的内核级rootkit检测处理系统,其中,所述系统还包括:系统调用表恢复模块,用于在内核空间中为每个系统调用函数及待恢复的系统调用表分配空间,并根据所述备份的系统调用表建立正确的系统调用函数,以及根据所述备份的系统调用表使待恢复的系统调用表中的表项指向正确的系统调用函数地址;恶意进程终止模块,用于访问内核进程链表获取系统中运行的进程信息,将所获取的系统中运行的进程信息与/proc目录中的进程信息进行比对,并根据比对结果消除该恶意进程;可疑文件移除模块,用于在所述终止恶意进程中获取恶意进程名称,并根据该恶意进程名称在已恢复的系统调用表中抓取关键信息字段,将该关键信息字段在包含隐藏文件在内的所有文件中进行匹配,从而获取包含该关键信息字段的可疑文件,通过执行rm命令删除该可疑文件。;可疑网络端口关闭模块,用于检测系统所有已打开网络端口中是否存在包含所述可疑关键信息字段的网络端口,若存在,则关闭该网络端口。[0021]有益效果:本发明提供一种内核级rootkit检测处理方法及系统。通过在Android系统中设置新加载模块与内核模块链表当前节点签名的互相匹配机制来检测rootkit入侵,并通过系统调用表与备份基准文件的对比,进一步确认系统是否受到rootkit入侵,从而提高检测结果的可靠性,同时通过本发明的系统恢复方法实现了系统从rootkit攻击中恢复的途经,保证了系统的安全运行。【专利附图】【附图说明】[0022]图1为现有技术中rootkit模块利用hook技术重定向系统调用示意图。[0023]图2为本发明的实施例中内核级rootkit检测处理方法流程图。[0024]图3为图2实施例中内核模块加载过程流程图。[0025]图4为图3实施例中所加载内核模块卸载过程流程图。[0026]图5为本发明的具体实施例中内核级rootkit检测处理方法流程图。[0027]图6为图2中步骤S400的具体实施方法流程图。[0028]图7为本发明的实施例中内核级rootkit检测处理系统的原理框图。【具体实施方式】[0029]本发明提供一种内核级rootkit检测处理方法及相关系统。为使本发明的目的、技术方案及效果更加清楚、明确,以下对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。[0030]如图2所示的一种内核级rootkit检测处理方法,其中,所述方法包括以下步骤:S100、预先在内核模块链表当前节点中保存新加载模块节点生成的签名,并将内核模块链表当前节点生成的签名保存在所述新加载模块节点中。[0031]Android系统对内核模块的维护通过一个全局双向链表来实现,该链表的每个节点都包括数据以及指向前驱和后继的两个指针,对当前节点来说,新加载模块节点为它的后继节点,对新加载模块节点来说,当前节点为它的前驱节点。本实施例需预先在内核模块链表当前节点分配空间并保存新模块节点生成的签名,将当前节点生成的签名保存在所述新加载模块节点中。[0032]S200、按照加载命令执行所述新模块的加载,判断该新加载模块节点中保存的签名与内核模块链表当前节点生成的签名是否匹配,以及判断内核模块链表当前节点中保存的签名与该新加载模块节点生成的签名是否匹配,若新加载模块节点中保存的签名与所述当前节点生成的签名不匹配和/或当前节点中保存的签名与该新加载模块节点生成的签名不匹配,则执行步骤S300。[0033]加载新模块后,在新模块加入模块链表前判断新模块节点中保存的签名与当前加载该模块的上一个节点即当前节点生成的签名是否匹配,同样地,在新模块加入模块链表前判断当前节点保存的签名与新加载的内核模块生成的签名是否匹配。[0034]LKM(内核模块)加载的过程可如图3内核模块加载过程所示。首先insmod在用户空间启动加载过程并定义需要加载的模块,然后它会调用init_module系统调用。init_module将模块二进制文件复制到内核后,接着系统调用实现函数sys_init_module先检查调用者是否具有执行加载模块操作的权限,然后调用loadjnodule函数。loadjnodule用模块的信息创建module结构的一个实例,并返回最新加载模块的引用。以上工作完成后,通过list_add_rcu函数将模块加入到内核模块链表中,接下来调用模块本身的初始化函数,释放初始化数据。[0035]通过以上对LKM加载过程的分析,内核模块签名的生成和维护应该发生在load_module函数中;判断签名是否匹配应该在新模块加入内核模块链表之前,而更新签名的操作应当在模块加入内核模块链表后,初始化函数调用前。因此需要修改loadjnodule函数,添加步骤SlOO和步骤S200所述的检测机制。load_module函数定义在/kernel/module.c中。首先要在module,c文件中增添一个生成模块签名的函数,其函数原型可定义为:unsignedlonggenerate_signature(unsignedlongfactor),然后修改load_module函数。[0036]另外,当内核模块卸载时,需要更新内核模块链表中该内核模块前后节点中的签名信息。[0037]内核模块卸载过程如图4内核模块卸载过程所示。在用户空间由rmmod启动,在内核空间调用相应的系统调用实现函数sys_delete_module,首先通过find_module遍历双向内核模块链表找到匹配的实例,然后通过module_which_use_me是否为空判断该模块是否被使用,接下来调用模块的exit函数,最后free_module释放内存。本发明在加载过程中保存了签名,因此也需要在卸载过程中判断是否需要更新签名,以防止误报。卸载模块过程中在findjnodule模块找到待卸载模块时,判断该卸载模块中保存的签名与其下一个模块地址生成签名是否匹配,同时判断其下一个模块中保存的签名与该卸载模块地址生存的签名是否匹配,若否则不删除,再次遍历寻找该卸载模块的下一个模块,直至遍历结束。若是则可直接删除,并更新模块签名,即将该卸载模块的下一个模块地址生成的签名保存在该卸载模块的上一个模块中,将该卸载模块的上一个模块地址生成的签名保存在该卸载模块的下一个模块中。[0038]对于module,c中有关操作模块链表的函数使用相同的方法进行修改,以使得在进行合法的模块操作时保存每个模块签名的正确性。另外还需要修改module数据结构,为其增加两个签名属性unsignedlongsignature_current和unsignedlongsignature_next。内核模块module结构定义在/include/linux/module,h中,包含用作模块链表的链表元素、模块状态、导出符号、异常表、引用计数等。修改后的module结构可如下所示。[0039]【权利要求】1.一种内核级IOOtkit检测处理方法,其特征在于,所述方法包括以下步骤:A、预先在内核模块链表当前节点中保存新加载模块节点生成的签名,并将内核模块链表当前节点生成的签名保存在所述新加载模块节点中;B、按照加载命令执行所述新模块的加载,判断该新加载模块节点中保存的签名与内核模块链表当前节点生成的签名是否匹配,以及判断内核模块链表当前节点中保存的签名与该新加载模块节点生成的签名是否匹配,若新加载模块节点中保存的签名与所述当前节点生成的签名不匹配和/或当前节点中保存的签名与该新加载模块节点生成的签名不匹配,则执行步骤C;C、将系统当前运行的系统调用表与预先备份的系统调用表进行比对,若比对不一致,则系统生成发现rootkit隐藏模块报告。2.根据权利要求1所述的内核级rootkit检测处理方法,其特征在于,所述方法还包括:D、根据系统生成的发现rootkit隐藏模块的报告触发系统调用对应的恢复函数进行系统还原,所述系统还原包括系统调用表的恢复、终止恶意进程、移除可疑文件及关闭可疑网络端口。3.根据权利要求2所述的内核级rootkit检测处理方法,其特征在于,所述步骤D中系统调用表的恢复具体为:在内核空间中为每个系统调用函数分配空间,并根据所述备份的系统调用表建立正确的系统调用函数;在内核空间中为待恢复的系统调用表分配空间,根据所述备份的系统调用表使待恢复的系统调用表中的表项指向正确的系统调用函数地址。`4.根据权利要求2所述的内核级rootkit检测处理方法,其特征在于,所述步骤D中终止恶意进程具体为:访问内核进程链表获取系统中运行的进程信息,将所获取的系统中运行的进程信息与/proc目录中的进程信息进行比对,若所获取的系统中运行的进程信息中有不在/proc目录中的进程,则消除该恶意进程。5.根据权利要求3或4所述的内核级rootkit检测处理方法,其特征在于,所述步骤D中移除可疑文件具体为:在所述终止恶意进程中获取恶意进程名称,并根据该恶意进程名称在已恢复的系统调用表中抓取可疑关键信息字段,将该可疑关键信息字段在包含隐藏文件在内的所有文件中进行匹配,从而获取包含该可疑关键信息字段的可疑文件,通过执行rm命令删除该可疑文件。6.根据权利要求5所述的内核级rootkit检测处理方法,其特征在于,所述步骤D中关闭可疑网络端口具体为:检测系统所有已打开网络端口中是否存在包含所述可疑关键信息字段的网络端口,若存在,则关闭该网络端口。7.根据权利要求1所述的内核级rootkit检测处理方法,其特征在于,当所述新加载模块节点中保存的签名与所述当前节点生成的签名匹配且所述当前节点中保存的签名与所述新加载模块节点生成的签名也匹配,同时系统当前运行的系统调用表与预先备份的系统调用表经比对一致,则所述新加载模块加入内核模块链表,所述当前节点重新生成签名并更新保存在所述新加载模块节点中,所述新加载模块节点重新生成签名并更新保存在所述当前节点中。8.根据权利要求7所述的内核级rootkit检测处理方法,其特征在于,当内核模块卸载时,更新内核模块链表中该内核模块前后节点中的签名信息。9.一种内核级rootkit检测处理系统,其特征在于,所述系统包括:签名设置模块,用于预先在内核模块链表当前节点中保存新加载模块节点生成的签名,并将内核模块链表当前节点生成的签名保存在所述新加载模块节点中;签名匹配模块,用于判断该新加载模块节点中保存的签名与内核模块链表当前节点生成的签名是否匹配,以及判断内核模块链表当前节点中保存的签名与该新加载模块节点生成的签名是否匹配;系统调用表比对模块,用于将系统当前运行的系统调用表与预先备份的系统调用表进行比对;报告生成模块,用于根据签名匹配模块和系统调用表比对模块的处理结果生成发现rootkit隐藏模块报告。10.根据权利要求9所述的内核级rootkit检测处理系统,其特征在于,所述系统还包括:系统调用表恢复模块,用于在内核空间中为每个系统调用函数及待恢复的系统调用表分配空间,并根据所述备份的系统调用表建立正确的系统调用函数,以及根据所述备份的系统调用表使待恢复的系统调用表中的表项指向正确的系统调用函数地址;恶意进程终止模块,用于访问内核进程链表获取系统中运行的进程信息,将所获取的系统中运行的进程信息与/proc目录中的进程信息进行比对,并根据比对结果消除该恶意进程;可疑文件移除模块,用于获取恶意进程名称,并根据该恶意进程名称在已恢复的系统调用表中抓取可疑关键信息字段,将该可疑关键信息字段在包含隐藏文件在内的所有文件中进行匹配,从而获取包含该可疑关键信息字段的可疑文件,通过执行rm命令删除该可疑文件;可疑网络端口关闭模块,用于接收用户指令查看系统所有已打开网络端口,并将其与预存的常规网络端口列表进行比对,并根据比对结果关闭异常网络端口。【文档编号】G06F21/51GK103699839SQ201310657878【公开日】2014年4月2日申请日期:2013年12月9日优先权日:2013年12月9日【发明者】孙向作申请人:Tcl集团股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1