一种基于Linux系统的主动防御方法及装置制造方法

文档序号:6545873阅读:326来源:国知局
一种基于Linux系统的主动防御方法及装置制造方法【专利摘要】本发明公开了一种基于Linux系统的主动防御方法及装置,属于系统安全领域。所述方法包括:采用钩子Hook监测Linux内核的系统调用;当监测到设置了Hook的系统调用被用户态进程调用时,判断所述用户态进程是否存在于白名单中;当所述用户态进程存在于所述白名单中时,允许所述用户态进程调用所述系统调用;当所述用户态进程不存在于所述白名单中时,禁止所述用户态进程调用所述系统调用;其中,所述白名单包括一个或多个允许执行系统调用的用户态进程。可以对Linux系统运行的程序等进行有效检测,对于Linux运行的恶意程序,后门木马程序等进行及时拦截,是一种Linux下的有效的主动防御方法。【专利说明】—种基于Linux系统的主动防御方法及装置【
技术领域
】[0001]本发明涉及计算机领域,特别涉及一种基于Linux系统的主动防御方法及装置。【
背景技术
】[0002]Linux是一种自由和开放源代码的类UNIX操作系统,是一个基于多用户、多任务、支持多线程和多中央处理器(CentralProcessingUnit,简称“CPU”)的操作系统。[0003]随着Linux系统被越来越多的企业作为服务器使用,相关攻击事件、入侵事件、木马程序随着逐渐增多。在计算机安全领域,主动防御技术是一种为计算机数据提供实时防护的主机安全技术,而目前Linux系统的主动防御技术发展缓慢,对于Linux系统运行的恶意程序,后门木马程序等无法有效及时拦截,目前主流的主动防御系统基本都是在Windows平台下实现的,Linux下没有有效的主动防御方法。【
发明内容】[0004]为了解决现有中技术Linux下没有有效的主动防御系统和方法的问题,本发明实施例提供了一种基于Linux系统的主动防御方法及装置。所述技术方案如下:[0005]—方面,本发明实施例提供了一种基于Linux系统的主动防御方法,适用于Linux主机,所述方法包括:[0006]采用钩子Hook监测Linux内核的系统调用;[0007]当监测到设置了所述Hook的系统调用被用户态进程调用时,判断所述用户态进程是否存在于白名单中;[0008]当所述用户态进程存在于所述白名单中时,允许所述用户态进程调用所述系统调用;[0009]当所述用户态进程不存在于所述白名单中时,禁止所述用户态进程调用所述系统调用;[0010]所述白名单包括一个或多个允许执行系统调用的用户态进程。[0011]在本发明实施例的一种实现方式中,所述系统调用包括:[0012]系统加载内核模块、系统进程运行、系统重要配置文件的修改、系统执行的命令、系统端口监听调用和系统注入调用。[0013]在本发明实施例的另一种实现方式中,所述采用钩子Hook监测Linux内核的系统调用,包括:[0014]获取当前Linux系统调用链表指针;[0015]获取调用链表sys_call_table指针;[0016]判断所述当前Linux系统调用链表指针与所述调用链表sys_call_table指针是否相等;[0017]当所述当前Linux系统调用链表指针与所述调用链表sys_call_table指针相等时,监测所述Linux内核的系统调用。[0018]在本发明实施例的另一种实现方式中,所述方法还包括:[0019]获取防御策略,所述防御策略包括Hook策略和所述白名单;[0020]根据所述防御策略对所述Linux内核的系统调用设置Hook。[0021]在本发明实施例的另一种实现方式中,所述获取防御策略,包括:[0022]接收服务器下发的所述防御策略。[0023]另一方面,本发明实施例还提供了一种基于Linux系统的主动防御装置,所述装置包括:[0024]监测模块,用于采用钩子Hook监测Linux内核的系统调用;[0025]判断模块,用于当监测到设置了所述Hook的系统调用被用户态进程调用时,判断所述用户态进程是否存在于白名单中;[0026]处理模块,用于当所述用户态进程存在于所述白名单中时,允许所述用户态进程调用所述系统调用;[0027]当所述用户态进程不存在于所述白名单中时,禁止所述用户态进程调用所述系统调用;[0028]所述白名单包括一个或多个允许执行系统调用的用户态进程。[0029]在本发明实施例的一种实现方式中,所述系统调用包括:[0030]系统加载内核模块、系统进程运行、系统重要配置文件的修改、系统执行的命令、系统端口监听调用和系统注入调用。[0031]在本发明实施例的另一种实现方式中,所述监测模块包括:[0032]第一获取单元,用于获取当前Linux系统调用链表指针;[0033]第一获取单元,用于获取调用链表sys_call_table指针;[0034]判断单元,用于判断所述当前Linux系统调用链表指针与所述调用链表sys_call_table指针是否相等;[0035]执行单元,用于当所述当前Linux系统调用链表指针与所述调用链表sys_call_table指针相等时,监测所述Linux内核的系统调用。[0036]在本发明实施例的另一种实现方式中,所述装置还包括:[0037]获取模块,用于获取防御策略,所述防御策略包括Hook策略和所述白名单;[0038]执行模块,用于根据所述防御策略对所述Linux内核的系统调用设置Hook。[0039]在本发明实施例的另一种实现方式中,获取模块包括:[0040]传输单元,用于接收服务器下发的所述防御策略。[0041]本发明实施例提供的技术方案带来的有益效果是:[0042]通过采用钩子Hook监测Linux内核的系统调用,当监测到设置了Hook的系统调用被用户态进程调用时,判断用户态进程是否存在于白名单中,当用户态进程存在于白名单中时,允许用户态进程调用系统调用,当用户态进程不存在于白名单中时,禁止用户态进程调用系统调用,可以对Linux系统运行的程序等进行有效检测,对于Linux运行的恶意程序,后门木马程序等进行及时拦截,是一种基于Linux系统的有效的主动防御方法。【专利附图】【附图说明】[0043]为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。[0044]图1是本发明实施例提供的应用场景图;[0045]图2是本发明实施例一提供的基于Linux系统的主动防御方法的方法流程图;[0046]图3是本发明实施例二提供的基于Linux系统的主动防御方法的方法流程图;[0047]图4是本发明实施例三提供的基于Linux系统的主动防御装置的结构示意图;[0048]图5是本发明实施例四提供的基于Linux系统的主动防御装置的结构示意图。【具体实施方式】[0049]为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。[0050]为了便于实施例的描述,下面先简单介绍一下本发明中实施例的应用场景。参见图1,多台Linux主机Al与Linux服务器A2连接,这些Linux主机Al可以安装不同发行版的Linux系统,例如centos和ubuntu等。每个Linux主机Al中都存在用户态进程(Ysec_agent)Cl和内核态进程(Ysec_kagent)C2,Linux服务器A2与用户态进程Cl连接,并通过用户态进程Cl向Linux主机Al发送防御策略,用户态进程Cl将接收到的防御策略发送给内核态进程C2,用户态进程Cl通过Netlink同内核态进程C2通信,Netlink是一种套接字,是用以实现用户态进程Cl与内核态进程C2通信的一种特殊的进程间通信的常用接口。[0051]当然,这里设置一台Linux服务器A2与多台Linux主机Al连接的目的在于,实现在服务器端对主机防御策略的统一设置,方便管理。在主机较少的场合亦可以直接在主机上设置防御策略。本发明实施例中的基于Linux系统的主动防御装置设置在上述Linux主机Al上。[0052]需要说明的是,以上所述的设备种类、连接关系和连接方式仅为举例,本发明对此不作限制。[0053]实施例一[0054]本发明实施例提供了一种基于Linux系统的主动防御方法,适用于Linux主机,Linux系统包括用户态进程和内核态进程,参见图2,该方法包括:[0055]步骤101:采用钩子Hook监测Linux内核的系统调用。[0056]步骤102:当监测到设置了Hook的系统调用被用户态进程调用时,判断用户态进程是否存在于白名单中。[0057]步骤103:当用户态进程存在于白名单中时,允许用户态进程调用系统调用;[0058]当用户态进程不存在于白名单中时,禁止用户态进程调用系统调用。[0059]其中,白名单包括一个或多个允许执行系统调用的用户态进程。[0060]本发明实施例通过采用钩子Hook监测Linux内核的系统调用,当监测到设置了Hook的系统调用被用户态进程调用时,判断用户态进程是否存在于白名单中,当用户态进程存在于白名单中时,允许用户态进程调用系统调用,当用户态进程不存在于白名单中时,禁止用户态进程调用系统调用,可以对Linux系统运行的程序等进行有效检测,对于Linux运行的恶意程序,后门木马程序等进行及时拦截,是一种基于Linux系统的有效的主动防御方法。[0061]实施例二[0062]本发明实施例提供了一种基于Linux系统的主动防御方法,适用于Linux主机,参见图3,该方法包括:[0063]步骤201:获取防御策略,防御策略包括Hook策略和白名单。[0064]在具体实现时,步骤201可以包括:[0065]接收服务器下发的防御策略。具体地,该防御策略由服务器下发到用户态进程,再由用户态进程发送给内核态进程。[0066]在本实施例中当然,防御策略是由Linux服务器统一配置的,在多个Linux主机的场景中,通过服务器对主机防御策略的统一设置,实现配置同一,方便管理。而在主机较少的场合亦可以直接在主机上设置防御策略。[0067]进一步地,该步骤201可以由Linux主机内的内核态进程实现,用户态进程通过Netlink同内核态进程通信,Netlink是一种套接字,是用以实现用户态进程与内核态进程通信的一种特殊的进程间通信的常用接口。[0068]步骤202:根据防御策略对Linux内核的系统调用设置Hook。[0069]步骤203:获取当前Linux系统调用链表指针。[0070]具体地,可以通过寻找第一个Call(子程序调用指令)汇编指令获取当前Linux系统调用链表指针。[0071]步骤204:获取调用链表sys_call_table指针。[0072]其中,sys_call_table为系统内核调用链表。[0073]具体地,可以通过/proc/kallsyms获取调用链表sys_call_table指针。其中,/proc/kalIsyms为Linux内核镜像文件,用于将Linux内核用到的所有函数地址和名称连接进内核文件,当内核启动后,同时加载到内存中。[0074]步骤205:判断当前Linux系统调用链表指针与调用链表sys_call_table指针是否相等,当当前Linux系统调用链表指针与调用链表sys_call_table指针相等时,执行步骤206;当当前Linux系统调用链表指针与调用链表sys_call_table指针不相等时,发出告警,并结束流程。[0075]当当前Linux系统调用链表指针与调用链表sys_call_table指针不相等时,说明当前调用链表指针中存在不是系统内核调用链表指针,因此需要告警并结束流程。[0076]步骤206:采用钩子Hook监测Linux内核的系统调用。[0077]其中,系统调用包括:系统加载内核模块、系统进程运行、系统重要配置文件的修改、系统执行的命令、系统端口监听调用和系统注入调用。[0078]步骤207:当监测到设置了Hook的系统调用被用户态进程调用时,判断用户态进程是否存在于白名单中。[0079]步骤208:当用户态进程存在于白名单中时,允许用户态进程调用系统调用;[0080]当用户态进程不存在于白名单中时,禁止用户态进程调用系统调用。[0081]其中,白名单包括一个或多个允许执行系统调用的用户态进程。[0082]在一种实现方式中,上述白名单可以有多个,每个白名单对应一种系统调用,例如白名单I规定可以进行系统端口监听的用户态进程,白名单2规定可以进行系统内核模块加载的用户态进程。并且,可以在白名单I中可以详细划分可以监听端口I的用户态进程,可以监听端口2的用户态进程。[0083]在具体实现时,步骤206?208可以采用下述方式实现:[0084]通过HookLinux内核sys_call_table[—NR—init_module]对于系统加载内核模块进行防御,白名单中的用户态进程允许加载内核模块,否则禁止加载。[0085]通过HookLinux内核sys_call_table[—NR_execve]对于系统进程运行进行主动防御,白名单中的用户态进程允许运行系统进程,否则禁止运行。[0086]通过HookLinux内核sys_call_table[—NR_write]对于系统重要配置文件的修改进行主动防御,白名单中的用户态进程允许对系统重要配置文件的修改,否则禁止修改。[0087]通过HookLinux内核sys_call_table[—NR—execve]对于系统执行的命令进行主动防御,对于被保护的系统命令如iptables、useradd等命令,白名单中的用户态进程允许执行系统命令,否则禁止执行。[0088]通过HookLinux内核sys_call_table[—NR—listen]对于系统端口监听调用进行主动防御,白名单中的用户态进程允许监听系统端口,否则禁止监听。[0089]通过HookLinux内核sys_call_table[—NR—ptrace]对于系统注入调用进行主动防御,白名单中的用户态进程允许系统注入,否则禁止系统注入。[0090]本发明实施例通过采用钩子Hook监测Linux内核的系统调用,当监测到设置了Hook的系统调用被用户态进程调用时,判断用户态进程是否存在于白名单中,当用户态进程存在于白名单中时,允许用户态进程调用系统调用,当用户态进程不存在于白名单中时,禁止用户态进程调用系统调用,可以对Linux系统运行的程序等进行有效检测,对于Linux运行的恶意程序,后门木马程序等进行及时拦截,是一种基于Linux系统的有效的主动防御方法。[0091]实施例三[0092]本发明实施例还提供了一种基于Linux系统的主动防御装置,参见图4,该装置包括:[0093]监测模块301,用于采用钩子Hook监测Linux内核的系统调用;[0094]判断模块302,用于当监测到设置了Hook的系统调用被用户态进程调用时,判断用户态进程是否存在于白名单中;[0095]处理模块303,用于当用户态进程存在于白名单中时,允许用户态进程调用系统调用;[0096]当用户态进程不存在于白名单中时,禁止用户态进程调用系统调用。[0097]其中,白名单包括一个或多个允许执行系统调用的用户态进程。[0098]本发明实施例通过采用钩子Hook监测Linux内核的系统调用,当监测到设置了Hook的系统调用被用户态进程调用时,判断用户态进程是否存在于白名单中,当用户态进程存在于白名单中时,允许用户态进程调用系统调用,当用户态进程不存在于白名单中时,禁止用户态进程调用系统调用,可以对Linux系统运行的程序等进行有效检测,对于Linux运行的恶意程序,后门木马程序等进行及时拦截,是一种基于Linux系统的有效的主动防御方法。[0099]实施例四[0100]本发明实施例提供了一种基于Linux系统的主动防御装置,参见图5,该装置包括:[0101]监测模块401,用于采用钩子Hook监测Linux内核的系统调用;[0102]判断模块402,用于当监测到设置了Hook的系统调用被用户态进程调用时,判断用户态进程是否存在于白名单中;[0103]处理模块403,用于当用户态进程存在于白名单中时,允许用户态进程调用系统调用;[0104]当用户态进程不存在于白名单中时,禁止用户态进程调用系统调用。[0105]其中,白名单包括一个或多个允许执行系统调用的用户态进程。[0106]在本发明实施例的一种实现方式中,系统调用包括:[0107]系统加载内核模块、系统进程运行、系统重要配置文件的修改、系统执行的命令、系统端口监听调用和系统注入调用。[0108]在一种实现方式中,上述白名单可以有多个,每个白名单对应一种系统调用,例如白名单I规定可以进行系统端口监听的用户态进程,白名单2规定可以进行系统内核模块加载的用户态进程。并且,可以在白名单I中可以详细划分可以监听端口I的用户态进程,可以监听端口2的用户态进程。[0109]在具体实现时,判断模块402和处理模块403:[0110]通过HookLinux内核sys_call_table[—NR—init_module]对于系统加载内核模块进行防御,白名单中的用户态进程允许加载内核模块,否则禁止加载。[0111]通过HookLinux内核sys_call_table[—NR_execve]对于系统进程运行进行主动防御,白名单中的用户态进程允许运行系统进程,否则禁止运行。[0112]通过HookLinux内核sys_call_table[—NR_write]对于系统重要配置文件的修改进行主动防御,白名单中的用户态进程允许对系统重要配置文件的修改,否则禁止修改。[0113]通过HookLinux内核sys_call_table[—NR—execve]对于系统执行的命令进行主动防御,对于被保护的系统命令如iptables、useradd等命令,白名单中的用户态进程允许执行系统命令,否则禁止执行。[0114]通过HookLinux内核sys_call_table[—NR—listen]对于系统端口监听调用进行主动防御,白名单中的用户态进程允许监听系统端口,否则禁止监听。[0115]通过HookLinux内核sys_call_table[—NR—ptrace]对于系统注入调用进行主动防御,白名单中的用户态进程允许系统注入,否则禁止系统注入。[0116]在本发明实施例的一种实现方式中,监测模块401包括:[0117]第一获取单元401a,用于获取当前Linux系统调用链表指针。[0118]具体地,可以通过寻找第一个Call汇编指令获取当前Linux系统调用链表指针。[0119]第二获取单元401b,用于获取调用链表sys_call_table指针。[0120]其中,sys_call_table为系统内核调用链表。[0121]具体地,可以通过/proc/kallsyms获取调用链表sys_call_table指针。其中,/proc/kallsyms为Linux内核镜像文件,用于将Linux内核用到的所有函数地址和名称连接进内核文件,当内核启动后,同时加载到内存中。[0122]判断单元401c,用于判断当前Linux系统调用链表指针与调用链表sys_call_table指针是否相等。[0123]执行单元401d,用于当当前Linux系统调用链表指针与调用链表sys_call_table指针相等时,采用钩子Hook监测Linux内核的系统调用。[0124]当当前Linux系统调用链表指针与调用链表sys_call_table指针不相等时,说明当前调用链表指针中存在不是系统内核调用链表指针,因此需要告警并结束流程。[0125]进一步地,该装置还可以包括:[0126]获取模块404,用于获取防御策略,防御策略包括Hook策略;[0127]执行模块405,用于根据防御策略对Linux内核设置Hook。[0128]在本发明实施例的一种实现方式中,获取模块404包括:[0129]传输单元,用于接收服务器下发的防御策略。具体地,该防御策略由服务器下发到用户态进程,再由用户态进程发送给内核态进程。[0130]在本实施例中当然,防御策略是由Linux服务器统一配置的,在多个Linux主机的场景中,通过服务器对主机防御策略的统一设置,实现配置同一,方便管理。而在主机较少的场合亦可以直接在主机上设置防御策略。[0131]本发明实施例通过采用钩子Hook监测Linux内核的系统调用,当系统调用是设定的白名单中的系统调用时,执行系统调用;当系统调用不是白名单中的系统调用时,禁止系统调用,可以对Linux系统运行的程序等进行有效检测,对于Linux运行的恶意程序,后门木马程序等进行及时拦截,是一种基于Linux系统的有效的主动防御方法。[0132]上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。[0133]本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。[0134]以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。【权利要求】1.一种基于Linux系统的主动防御方法,适用于Linux主机,其特征在于,所述方法包括:采用钩子Hook监测Linux内核的系统调用;当监测到设置了所述Hook的系统调用被用户态进程调用时,判断所述用户态进程是否存在于白名单中;当所述用户态进程存在于所述白名单中时,允许所述用户态进程调用所述系统调用;当所述用户态进程不存在于所述白名单中时,禁止所述用户态进程调用所述系统调用;所述白名单包括一个或多个允许执行系统调用的用户态进程。2.根据权利要求1所述的方法,其特征在于,所述系统调用包括:系统加载内核模块、系统进程运行、系统重要配置文件的修改、系统执行的命令、系统端口监听调用和系统注入调用。3.根据权利要求1所述的方法,其特征在于,所述采用钩子Hook监测Linux内核的系统调用,包括:获取当前Linux系统调用链表指针;获取调用链表sys_call_table指针;判断所述当前Linux系统调用链表指针与所述调用链表sys_call_table指针是否相等;当所述当前Linux系统调用链表指针与所述调用链表sys_call_table指针相等时,监测所述Linux内核的系统调用。4.根据权利要求1~3任一项所述的方法,其特征在于,所述方法还包括:获取防御策略,所述防御策略包括Hook策略和所述白名单;根据所述防御策略对所述Linux内核的系统调用设置Hook。5.根据权利要求4所述的方法,其特征在于,所述获取防御策略,包括:接收服务器下发的所述防御策略。6.一种基于Linux系统的主动防御装置,其特征在于,所述装置包括:监测模块,用于采用钩子Hook监测Linux内核的系统调用;判断模块,用于当监测到设置了所述Hook的系统调用被用户态进程调用时,判断所述用户态进程是否存在于白名单中;处理模块,用于当所述用户态进程存在于所述白名单中时,允许所述用户态进程调用所述系统调用;当所述用户态进程不存在于所述白名单中时,禁止所述用户态进程调用所述系统调用;所述白名单包括一个或多个允许执行系统调用的用户态进程。7.根据权利要求6所述的装置,其特征在于,所述系统调用包括:系统加载内核模块、系统进程运行、系统重要配置文件的修改、系统执行的命令、系统端口监听调用和系统注入调用。8.根据权利要求6所述的装置,其特征在于,所述监测模块包括:第一获取单元,用于获取当前Linux系统调用链表指针;第一获取单元,用于获取调用链表sys_call_table指针;判断单元,用于判断所述当前Linux系统调用链表指针与所述调用链表sys_Call_table指针是否相等;执行单元,用于当所述当前Linux系统调用链表指针与所述调用链表sys_call_table指针相等时,监测所述Linux内核的系统调用。9.根据权利要求6~8任一项所述的装置,其特征在于,所述装置还包括:获取模块,用于获取防御策略,所述防御策略包括Hook策略和所述白名单;执行模块,用于根据所述防御策略对所述Linux内核的系统调用设置Hook。10.根据权利要求9所述的装置,其特征在于,获取模块包括:传输单元,用于接收服务器下发的所述防御策略。【文档编号】G06F21/56GK104008337SQ201410191624【公开日】2014年8月27日申请日期:2014年5月7日优先权日:2014年5月7日【发明者】韩方,张涛申请人:广州华多网络科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1