一种监测和清除分裂炸弹程序攻击的方法与流程

文档序号:17539423发布日期:2019-04-29 14:23阅读:178来源:国知局
一种监测和清除分裂炸弹程序攻击的方法与流程

本发明涉及软件系统技术领域,尤其涉及一种监测和清除分裂炸弹程序攻击的方法。



背景技术:

当前各类通用计算机操作系统,包括unix类,即含bsd系统,linux系统,安卓系统,ios系统,和windows系统等,针对分裂炸弹(forkbomb)的拒绝服务(dos)攻击,都还不能进行有效的监测和防护;通常有的系统是不采取任何抵御措施;有的采取简单的抵御措施,如通过限制单一用户的最大进程数量;有的系统用简单的试探规则进行判断,选择本身占用内存大或者包含其子进程占用的内存量大的进程,判断,这种方式正确率不高或者是根本无效。

目前,只有少量可信用户登录访问的计算机系统,例如个人pc,不设防通常危害不严重,针对使用用户较多的大型公共服务器,则必须设防;但是简单设置用户进程限制,又不方便灵活,不利于计算资源的有效使用。使用简单的试探算法,无论依据单个进程的内存资源占用,还是包含子进程内存占用,都无法保证定位到炸弹程序;后者还容易误判合法的拥有很多子进程的程序,如web服务,窗口管理器等,结果都是正确率不高或者是根本无效。

并且,简单试探算法无效的深层原因是,posix系统从设计上就没有考虑保持进程间的创建关系,现有进程关系树无法满足要求;如前所述,现有的方法是设置用户最大可拥有进程数量,使用内存不足终结者程序(oom,out-of-memorykiller)试探算法结束占用内存资源最大的进程,通常两者结合使用,内存不足终结者程序作为最后一道防线使用,进一步给用户带来不便。



技术实现要素:

针对现有技术中存在的上述问题,现提供一种监测和清除分裂炸弹程序攻击的方法。

具体技术方案如下:

一种监测和清除分裂炸弹程序攻击的方法,用于计算机操作系统,其中包括:

步骤s1、利用所述计算机操作系统中的进程描述表,以添加原生父进程信息及子进程信息,形成一原生进程关系树;

步骤s2、判断所述计算机操作系统是否符合一分裂炸弹攻击条件,并在符合时转向步骤s3;

所述步骤s3、选择第一可疑进程对象按照通用算法进行处理,并同时记录所述第一可疑进程对象的原生父进程信息;

步骤s4、判断所述计算机操作系统是否仍符合所述分裂炸弹攻击条件,并在符合时转向步骤s5;

所述步骤s5、选择第二可疑进程对象,并根据所述原生进程树来确定所述第二可疑进程对象的原生父进程信息与最近的祖先进程信息作为所述可疑程序进行处理,以结束所述可疑程序及所述可疑进程对象的子进程。

优选的,当所述计算机操作系统运行正常时,还包括一维护步骤;

所述维护步骤包括以定期维护保持所述原生进程树的进程间的创建关系。

优选的,于所述步骤s2中,判断所述计算机操作系统不符合所述分裂炸弹攻击条件时,则转向所述维护步骤。

优选的,于所述步骤s4中,判断所述计算机操作系统仍不符合所述分裂炸弹攻击条件时,转向所述维护步骤。

优选的,于所述方法中采用最近公共祖先查询算法,选择所述第一可疑进程对象和所述第二可疑进程对象。

优选的,通过对所述原生子进程的内存进行统计的方式选择所述第一可疑进程对象和所述第二可疑进程对象。

优选的,于所述最近公共祖先查询算法的查询次数包括至少两次。

优选的,所述最近公共祖先查询算法包括保守模式;和/或

温和模式;和/或

激进模式。

本发明的技术方案有益效果在于:公开一种监测和清除分裂炸弹程序攻击的方法,通过建立原生进程树,保持进程对象之间的创建关系,并且利用原生进程树与逐步逼近的最近公共祖先查询算法,有效的定位分裂炸弹或者问题故障进程,能保证系统从灾难中恢复过来,避免计算机系统的崩溃或重启,或者发生拒绝服务;并且还可以推广适用至对资源耗尽型攻击的监测定位上。

附图说明

参考所附附图,以更加充分的描述本发明的实施例。然而,所附附图仅用于说明和阐述,并不构成对本发明范围的限制。

图1为本发明的实施例的监测和清除分裂炸弹程序攻击的方法的步骤流程图;

图2为本发明的实施例的最近公共祖先查询算法的第一实施例的步骤流程图;

图3为本发明的实施例的最近公共祖先查询算法的步骤流程图的第二种实施例的步骤流程图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。

需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。

下面结合附图和具体实施例对本发明作进一步说明,但不作为本发明的限定。

本发明包括一种监测和清除分裂炸弹程序攻击的方法,用于计算机操作系统,其中包括:

步骤s1、利用计算机操作系统中的进程描述表,以添加原生父进程信息及子进程信息,形成一原生进程关系树;

步骤s2、判断计算机操作系统是否符合一分裂炸弹攻击条件,并在符合时转向步骤s3;

步骤s3、选择第一可疑进程对象按照通用算法进行处理,并同时记录第一可疑进程对象的原生父进程信息;

步骤s4、判断计算机操作系统是否仍符合分裂炸弹攻击条件,并在符合时转向步骤s5;

步骤s5、选择第二可疑进程对象,并根据原生进程树来确定第二可疑进程对象的原生父进程信息与最近的祖先进程信息作为可疑程序进行处理,以结束可疑程序及可疑进程对象的子进程。

通过上述监测和清除分裂炸弹程序攻击的方法的技术方案,如图1所示,通过建立原生进程树,保持进程对象之间的创建关系,并且利用原生进程树与逐步逼近的最近公共祖先查询算法,有效的定位分裂炸弹或者问题故障进程,能保证系统从灾难中恢复过来,避免计算机系统的崩溃或重启,或者发生拒绝服务。

进一步地,该方法对系统运行开销有少量增加,每个进程增加大约20字节,内存不足终结程序中的最近公共祖先查询算法做到了o(n)级,对暴露在有分裂炸弹攻击风险系统,或其他有高可靠性要求的系统;还可以推广适用至对资源耗尽型攻击的监测定位上,比如可以应用于网络领域,用于定位发起分布式攻击的恶意网络段,方便进行后续隔离。

在一种较优的实施例中,当计算机操作系统运行正常时,还包括一维护步骤;维护步骤包括以定期维护保持原生进程树的进程间的创建关系;

于步骤s2中,判断计算机操作系统不符合分裂炸弹攻击条件时,则转向维护步骤;

于步骤s4中,判断计算机操作系统仍不符合分裂炸弹攻击条件时,转向维护步骤。

具体地,通过建立原生进程树,保持进程对象之间的创建关系,并且利用原生进程树与逐步逼近的最近公共祖先查询算法,有效的定位分裂炸弹或者问题故障进程,能保证系统从灾难中恢复过来,避免计算机系统的崩溃或重启,或者发生拒绝服务。

进一步地,该方法对系统运行开销有少量增加,每个进程增加大约20字节,内存不足终结程序中的最近公共祖先查询算法做到了o(n)级,对暴露在有分裂炸弹攻击风险系统,或其他有高可靠性要求的系统;还可以推广适用至对资源耗尽型攻击的监测定位上,比如可以应用于网络领域,用于定位发起分布式攻击的恶意网络段,方便进行后续隔离。

在一种较优的实施例中,于方法中采用最近公共祖先查询算法,选择第一可疑进程对象和第二可疑进程对象;

通过对原生子进程的内存进行统计的方式选择第一可疑进程对象和第二可疑进程对象。

具体地,通过建立原生进程树,保持进程对象之间的创建关系,并且利用原生进程树与逐步逼近的最近公共祖先查询算法,有效的定位分裂炸弹或者问题故障进程,能保证系统从灾难中恢复过来,避免计算机系统的崩溃或重启,或者发生拒绝服务。

进一步地,该方法对系统运行开销有少量增加,每个进程增加大约20字节,内存不足终结程序中的最近公共祖先查询算法做到了o(n)级,对暴露在有分裂炸弹攻击风险系统,或其他有高可靠性要求的系统;还可以推广适用至对资源耗尽型攻击的监测定位上,比如可以应用于网络领域,用于定位发起分布式攻击的恶意网络段,方便进行后续隔离。

在一种较优的实施例中,于最近公共祖先查询算法的查询次数包括至少两次。

上述技术方案中,于最近公共祖先查询算法的查询次数为两次时,具体包括以下步骤:

步骤a1、预先设置可疑进程对象的第一根节点与第二根节点,并于第一根节点与第二根节点分别添加原生父进程信息及子进程信息;

步骤a2、于第一根节点向上遍历查询对应的原生父进程信息;

步骤a3、于第二根节点向上遍历查询对应的原生父进程信息;

步骤a4、判断第一根节点与第二根节点的原生父进程信息相同时,则退出。

即步骤流程如下,时间复杂度o(n^2);

步骤a1,设t1:=p1,t2:=p2;lca:=null;

步骤a2,t1从p1向上遍历;

步骤a3,t2从p2向上遍历;

步骤a4,如果t1=t2,lca:=t1,跳出循环,则返回lca。

上述技术方案中,如图2所示,最近公共祖先查询算法的时间复杂度为o(2)级,实验环境在linux系统下进行,编译并应用;运行各类分裂炸弹,针对简单的分裂炸弹,能迅速定位并清除;对潜伏型的,会误伤正常进程,但一定时间后,仍能清除炸弹进程,系统仍能恢复过来。

进一步,通过建立原生进程树,保持进程对象之间的创建关系,并且利用原生进程树与逐步逼近的最近公共祖先查询算法,有效的定位分裂炸弹或者问题故障进程,能保证系统从灾难中恢复过来,避免计算机系统的崩溃或重启,或者发生拒绝服务。

进一步地,该方法对系统运行开销有少量增加,每个进程增加大约20字节,内存不足终结程序中的最近公共祖先查询算法做到了o(n)级,对暴露在有分裂炸弹攻击风险系统,或其他有高可靠性要求的系统;还可以推广适用至对资源耗尽型攻击的监测定位上,比如可以应用于网络领域,用于定位发起分布式攻击的恶意网络段,方便进行后续隔离。

作为最优实施例,于最近公共祖先查询算法的查询次数为复数次时,具体包括以下步骤:

步骤b1、预先设置可疑进程对象的第一根节点与第二根节点,并于第一根节点与第二根节点分别添加原生父进程信息及子进程信息,以形成一原生进程关系树;

步骤b2、于第一根节点向上遍历查询原生进程关系树;

步骤b3、于第一根节点移至原生进程关系树的原生兄弟队列的队首,循环进行步骤b2;

步骤b4、于第二根节点向上遍历查询原生进程关系树;

步骤b5、于第二根节点移至原生进程关系树的原生兄弟队列的队尾,循环进行步骤b3;

步骤b6、判断第一根节点与第二根节点的原生父进程信息是否相同;

若判断第一根节点与第二根节点的原生父进程信息不相同时,则跳转步骤b10,步骤b10包括第一根节点的原生父进程信息不是第一可疑进程对象时,则返回;

步骤b7、于第一根节点查询第一根节点的原生子进程的队首元素;

步骤b8、于第二根节点查询第二根节点的原生子进程的队尾元素;

步骤b9、循环进行步骤b6。

即步骤流程如下,时间复杂度o(n);

步骤b1,设t1:=p1,设t2:=p2;lca:=null;

步骤b2,t1从p1向上遍历原生进程树;

步骤b3,t1移到原生兄弟队列的队首,循环到步骤b2;

步骤b4,t2从p2向上遍历原生进程树;

步骤b5,t2移到原生兄弟队列的队尾,循环到步骤b3;

步骤b6,循环直到t1和t2不相等,跳转到步骤b10;

步骤b7,t1指向t1的原生子进程队首元素;

步骤b8,t2指向t2的原生子进程队尾元素;

步骤b9,循环到步骤b6;

步骤b10,如果t1的原生父进程t1.bio_parent不是可疑进程,则返回。

上述技术方案中,如图3所示,最近公共祖先查询算法的时间复杂度为o(n)级,实验环境在linux系统下进行,编译并应用;运行各类分裂炸弹,针对简单的分裂炸弹,能迅速定位并清除;对潜伏型的,会误伤正常进程,但一定时间后,仍能清除炸弹进程,系统仍能恢复过来。

进一步,通过建立原生进程树,保持进程对象之间的创建关系,并且利用原生进程树与逐步逼近的最近公共祖先查询算法,有效的定位分裂炸弹或者问题故障进程,能保证系统从灾难中恢复过来,避免计算机系统的崩溃或重启,或者发生拒绝服务。

进一步地,该方法对系统运行开销有少量增加,每个进程增加大约20字节,内存不足终结程序中的最近公共祖先查询算法做到了o(n)级,对暴露在有分裂炸弹攻击风险系统,或其他有高可靠性要求的系统;还可以推广适用至对资源耗尽型攻击的监测定位上,比如可以应用于网络领域,用于定位发起分布式攻击的恶意网络段,方便进行后续隔离。

在一种较优的实施例中,最近公共祖先查询算法包括保守模式;和/或

温和模式;和/或

激进模式。

具体地,实际实施时,可以配置不同的最近公共祖先查询算法的执行策略,用户可以预先设置策略和参数,比如设置策略或设置记忆秒数。

可扩展地,最近公共祖先查询算法选择保守模式,一定时间后,清除对原生父进程信息的记忆,缺点是不能杀死潜伏性的炸弹进程,只能抑制其发作,系统仍会有定期抖动。

可扩展地,最近公共祖先查询算法选择温和模式,只选则比更年轻的原生父进程信息,能保证一定时间后杀死炸弹进程,即便是潜伏性的。

可扩展地,最近公共祖先查询算法选择激进模式,原生父进程信息不超时,能更快的杀死炸弹进程,缺点是也较可能误伤更多的无辜进程。

进一步地,通过建立原生进程树,保持进程对象之间的创建关系,并且利用原生进程树与逐步逼近的最近公共祖先查询算法,有效的定位分裂炸弹或者问题故障进程,能保证系统从灾难中恢复过来,避免计算机系统的崩溃或重启,或者发生拒绝服务。

进一步地,该方法对系统运行开销有少量增加,每个进程增加大约20字节,内存不足终结程序中的最近公共祖先查询算法做到了o(n)级,对暴露在有分裂炸弹攻击风险系统,或其他有高可靠性要求的系统;还可以推广适用至对资源耗尽型攻击的监测定位上,比如可以应用于网络领域,用于定位发起分布式攻击的恶意网络段,方便进行后续隔离。

以上仅为本发明较佳的实施例,并非因此限制本发明的实施方式及保护范围,对于本领域技术人员而言,应当能够意识到凡运用本发明说明书及图示内容所作出的等同替换和显而易见的变化所得到的方案,均应当包含在本发明的保护范围内。

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