具体实施方式
下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明入侵防御***的升级方法一个实施例的流程图,如图1所示,该实施例包括:
步骤101,创建进程,在创建的进程中下载对入侵防御***进行升级的升级包。
本实施例中,每次需要对入侵防御***进行升级时,均创建一个新的进程;具体地,可以在每次引擎和特征库一同升级时,或者,只升级特征库时,均创建一个新的进程;然后在创建的进程中下载对入侵防御***进行升级的升级包。
步骤102,在上述进程中,加载该升级包中的引擎,设置并记录加载的引擎的标识。
具体地,加载的引擎的标识可以按照加载时间的先后设置,例如:按照加载时间由先至后的顺序,将引擎的标识分别设为1,2,...,n,即标识为1的引擎是最先加载的引擎。以上只是设置引擎的标识的一种方式,本实施例并不仅限于此,还可通过其他方式设置引擎的标识,只要设置的引擎的标识可以区分出引擎加载的先后顺序即可。
步骤103,在上述进程中,通过加载的引擎加载并编译该升级包中的特征库,生成状态机,升级该入侵防御***。
本实施例中,每次需要对入侵防御***进行升级时,执行步骤101~步骤103,完成对入侵防御***的升级。具体地,可以在每次引擎和特征库一同升级时,或者,只升级特征库时,均创建一个新的进程,执行步骤101~步骤103。其中,在只升级特征库时,可以通过记录的引擎的标识,确定当前最新加载的引擎,并在新创建的进程中,重新加载当前最新加载的引擎,然后为该重新加载的引擎设置一个新的引擎的标识。因此在本实施例中,引擎和状态机一一对应。
在接收到报文之后,可以根据接收到的报文的报文头中的信息和记录的引擎的标识确定对报文进行检测的引擎,通过确定的引擎调用生成的状态机,对报文进行检测。
下面结合图2,对本实施例中对报文进行检测的方式进行详细介绍。
图2为本发明对报文进行检测的一个实施例的流程图,如图2所示,本实施例对报文进行检测的流程包括:
步骤201,接收报文。
步骤202,根据该报文的报文头中的信息判断该报文是否为数据流的首报文。如果该报文是数据流的首报文,则执行步骤203;如果该报文不是数据流的首报文,则执行步骤204。
具体地,判断报文是否为数据流的首报文可以为:解析报文的报文头,确定该报文采用的传输协议;当该报文采用传输控制协议(TransmissionControl Protocol;以下简称:TCP)传输时,如果该报文的报文头中包括首报文标识,则该报文是数据流的首报文;如果该报文的报文头中不包括首报文标识,则该报文不是数据流的首报文。当该报文采用用户数据报协议(UserDatagram Protocol;以下简称:UDP)传输时,则需要根据该报文的五元组信息,在入侵防御***中查找是否有该五元组信息的记录,如果没有查找到该五元组信息的记录,则可以确定该报文是数据流的首报文,记录首报文的五元组信息;如果查找到该五元组信息的记录,则说明该报文不是数据流的首报文。其中,报文的五元组信息包括:报文的源因特网协议(Internet Protocol;以下简称:IP)地址、目的IP地址、源端口、目的端口和报文所采用的传输协议;属于同一数据流的报文具有相同的五元组信息。
步骤203,根据记录的引擎的标识确定最新加载的引擎,该最新加载的引擎为对该报文进行检测的引擎;并记录所述报文的报文头中的五元组信息,建立五元组信息与对该报文进行检测的引擎的标识的对应关系,执行步骤205。
具体地,在确定接收到的报文是一个数据流的首报文之后,可以通过查找记录的引擎的标识确定最新加载的引擎,以该最新加载的引擎作为对首报文进行检测的引擎,然后记录该报文的报文头中的五元组信息,建立五元组信息与对该报文进行检测的引擎的标识的对应关系。由于同一数据流的报文具有相同的五元组信息,因此在接收到该数据流的后续报文时,可以根据后续报文的五元组信息,以及该五元组信息与记录的引擎的标识的对应关系,确定与上述五元组信息对应的引擎的标识,从而可以确定对后续报文进行检测的引擎,并且可以保证对同一数据流的报文采用同一引擎进行检测。
步骤204,根据该报文的报文头中的五元组信息,利用在数据流的首报文时建立的五元组信息与引擎的标识的对应关系,在记录的引擎的标识中查找与该五元组信息对应的引擎的标识,确定该标识对应的引擎为对该报文进行检测的引擎,执行步骤205。
步骤205,通过确定的引擎调用该引擎生成的状态机,对该报文进行检测。
本实施例中,引擎与状态机一一对应,因此确定对报文进行检测的引擎之后,该引擎就可调用该引擎生成的状态机,对接收到的报文进行检测。
步骤206,检测通过后,发送该报文。
具体地,如果入侵防御***确定在该报文中未发现网络攻击,则检测通过,发送该报文;如果入侵防御***在该报文中发现了隐藏于报文中的网络攻击,该入侵防御***可以根据该网络攻击的威胁级别立即采取抵御措施,该抵御措施包括:向管理中心告警、丢弃该报文、切断此次应用会话和切断此次连接之一或组合。
在本实施例中,在入侵防御***尚未启动,或者,该入侵防御***刚刚启动,该入侵防御***的引擎尚未加载完成时,对于流过该入侵防御***的报文不进行检测,并且对该报文所属数据流的后续报文均不进行检测,直接发送。
上述实施例通过创建进程,在创建的进程中下载对入侵防御***进行升级的升级包,并加载该升级包中的引擎,设置并记录加载的引擎的标识,并通过加载的引擎加载并编译该升级包中的特征库,生成状态机,升级该入侵防御***。本实施例在每次引擎和特征库一同升级,或者,只升级特征库时,均创建一个新的进程,从而实现了在入侵防御***的升级过程中加载多个引擎,编译出多组状态机同时工作,实现了在对入侵防御***升级的同时最大限度地不中断升级操作前的数据流的报文检测业务。
图3为本发明入侵防御***的升级方法另一个实施例的流程图,如图3所示,该实施例包括:
步骤301,创建进程,在创建的进程中下载对入侵防御***进行升级的升级包。
本实施例中,每次需要对入侵防御***进行升级时,均创建一个新的进程;具体地,可以在每次引擎和特征库一同升级时,或者,只升级特征库时,均创建一个新的进程。
步骤302,根据创建进程的时间,设置并记录创建的进程的标识。
具体地,创建的进程的标识可以按照创建时间的先后设置,例如:按照创建时间由先至后的顺序,将创建的进程的标识分别设为a1,a2,...,an,即标识为a1的进程是最先创建的进程。以上只是设置创建的进程的标识的一种方式,本实施例并不仅限于此,还可通过其他方式设置创建的进程的标识,只要设置的进程的标识可以区分出进程创建的先后顺序即可。
步骤303,在上述进程中,加载该升级包中的引擎,设置并记录加载的引擎的标识。
具体地,加载的引擎的标识可以按照加载时间的先后设置,例如:按照加载时间由先至后的顺序,将引擎的标识分别设为b1,b2,...,bn,即标识为b1的引擎是最先加载的引擎。以上只是设置引擎的标识的一种方式,本实施例并不仅限于此,还可通过其他方式设置引擎的标识,只要设置的引擎的标识可以区分出引擎加载的先后顺序即可。
步骤304,在上述进程中,通过加载的引擎加载并编译该升级包中的特征库,生成状态机,升级该入侵防御***。
本实施例中,每次需要对入侵防御***进行升级时,执行步骤301~步骤304,完成对入侵防御***的升级。具体地,可以在每次引擎和特征库一同升级时,或者,只升级特征库时,均创建一个新的进程,执行步骤301~步骤304。其中,在只升级特征库时,可以通过记录的引擎的标识,确定当前最新加载的引擎,并在新创建的进程中,重新加载当前最新加载的引擎,然后为该重新加载的引擎设置一个新的引擎的标识。因此在本实施例中,引擎和状态机一一对应。
在接收到报文之后,可以根据接收到的报文的报文头中的信息和记录的引擎的标识确定对报文进行检测的引擎,通过确定的引擎调用生成的状态机,对报文进行检测。具体地,在接收到报文之后,对报文进行检测时,可以采用本发明图2所示实施例中提供的方法。
步骤305,当需要对入侵防御***再次进行升级时,判断已创建的进程的个数是否达到预设的第一阈值。如果已创建的进程的个数达到预设的第一阈值,则执行步骤306;如果已创建的进程的个数小于预设的第一阈值,则执行步骤301。
本实施例中,在不断升级的过程中,可以根据入侵防御***的内存的具体情况对创建的进程的个数进行限制,具体地,可以根据入侵防御***的内存的具体情况将第一阈值设为n,n为正整数,可以取n=2。
步骤306,根据记录的进程的标识确定最先创建的进程,卸载最先创建的进程中的引擎,释放该引擎占用的资源,执行步骤307。
当需要对入侵防御***再次进行升级时,如果已创建的进程的个数达到n,则可以根据步骤302记录的进程的标识确定最先创建的进程,本实施例中,该最先创建的进程为标识为a1的进程;然后卸载标识为a1的进程中的引擎,释放该引擎占用的资源。
步骤307,在最先创建的进程中下载对入侵防御***进行升级的升级包,并执行步骤302及其后续步骤。
在卸载标识为a1的进程中的引擎,释放该引擎占用的资源之后,在该标识为a1的进程中下载对入侵防御***进行升级的升级包,并执行步骤302及其后续步骤;在标识为a1的进程中下载对入侵防御***进行升级的升级包之后,需要为标识为a1的进程重新设置一个新的标识,以表示该进程是最新的进程。
在升级完成之后,如果接收到一个新的数据流的报文,则通过原标识为a1的进程中最新加载的引擎对该数据流的报文进行检测;而升级之前,在原标识为a1的进程中进行检测的数据流的后续报文,将会被直接发送出去,不继续检测。
上述实施例通过创建进程,在创建的进程中下载对入侵防御***进行升级的升级包,并加载该升级包中的引擎,设置并记录加载的引擎的标识,并通过加载的引擎加载并编译该升级包中的特征库,生成状态机,升级该入侵防御***。本实施例在每次引擎和特征库一同升级,或者,只升级特征库时,均创建一个新的进程,从而实现了在入侵防御***的升级过程中加载多个引擎,编译出多组状态机同时工作,实现了在对入侵防御***升级的同时最大限度地不中断升级操作前的数据流的报文检测业务;并且本实施例对创建的进程的个数加以限制,确保了创建的进程不会占用太多的内存,保证了入侵防御***的正常运行。
图4为本发明入侵防御***的升级方法再一个实施例的流程图,如图4所示,该实施例包括:
步骤401,创建进程,在创建的进程中下载对入侵防御***进行升级的升级包。
步骤402,根据创建进程的时间,设置并记录创建的进程的标识。
具体地,创建的进程的标识可以按照创建时间的先后设置,例如:按照创建时间由先至后的顺序,将创建的进程的标识分别设为a1,a2,...,an,即标识为a1的进程是最先创建的进程。以上只是设置创建的进程的标识的一种方式,本实施例并不仅限于此,还可通过其他方式设置创建的进程的标识,只要设置的进程的标识可以区分出进程创建的先后顺序即可。
步骤403,在上述进程中,加载该升级包中的引擎,设置并记录加载的引擎的标识。
具体地,加载的引擎的标识可以按照加载时间的先后设置,例如:按照加载时间由先至后的顺序,将引擎的标识分别设为b1,b2,...,bn,即标识为b1的引擎是最先加载的引擎。以上只是设置引擎的标识的一种方式,本实施例并不仅限于此,还可通过其他方式设置引擎的标识,只要设置的引擎的标识可以区分出引擎加载的先后顺序即可。
步骤404,在上述进程中,通过加载的引擎加载并编译该升级包中的特征库,生成状态机,升级该入侵防御***;设置并记录生成的状态机的标识,建立该状态机的标识与生成状态机的引擎的标识的对应关系。
本实施例中,每次需要对入侵防御***进行升级时,执行步骤401~步骤404,完成对入侵防御***的升级。具体地,可以在每次引擎和特征库一同升级时,创建一个新的进程,执行步骤401~步骤404;只升级特征库时,不再创建新的进程,这时,可以根据步骤402中记录的进程的标识确定最新创建的进程,在最新创建的进程中下载对所述特征库进行升级的升级包,并通过最新创建的进程中加载的引擎,加载并编译上述升级包中的特征库,生成状态机,完成对特征库的升级。因此本实施例中,进程和引擎一一对应,但是一个引擎可能对应多个状态机,在生成状态机之后,需要设置并记录生成的状态机的标识,建立状态机的标识与生成状态机的引擎的标识的对应关系。
具体地,状态机的标识可以按照生成时间的先后进行设置,例如:按照生成时间由先至后的顺序,将状态机的标识分别设为c1,c2,...,cn,即标识为c1的状态机是最先生成的状态机。以上只是设置状态机的标识的一种方式,本实施例并不仅限于此,还可通过其他方式设置状态机的标识,只要设置的状态机的标识可以区分出状态机生成的先后顺序即可。
在接收到报文之后,可以根据接收到的报文的报文头中的信息和记录的引擎的标识确定对报文进行检测的引擎,通过确定的引擎调用生成的状态机,对报文进行检测。
步骤405,当需要对入侵防御***再次进行升级时,判断是否引擎和特征库一同升级。如果引擎和特征库一同升级,则执行步骤406~步骤409;如果只升级特征库,则执行步骤410~步骤413。
步骤406,判断已创建的进程的个数是否达到预设的第一阈值。如果已创建的进程的个数达到预设的第一阈值,则执行步骤408~步骤409;如果已创建的进程的个数小于预设的第一阈值,则执行步骤407。
本实施例中,在不断升级的过程中,可以根据入侵防御***的内存的具体情况对创建的进程的个数进行限制,具体地,可以根据入侵防御***的内存的具体情况将第一阈值设为n,n为正整数,可以取n=2。
步骤407,判断已生成的状态机的数量是否达到预设的第二阈值。如果已生成的状态机的数量达到预设的第二阈值,则执行步骤408~步骤409;如果已生成的状态机的数量小于预设的第二阈值,则执行步骤401。
本实施例中,在不断升级的过程中,可以根据入侵防御***的内存的具体情况对生成的状态机的个数进行限制,具体地,可以根据入侵防御***的内存的具体情况将第二阈值设为m,m为正整数,可以取m=4。
步骤408,根据记录的进程的标识确定最先创建的进程,卸载最先创建的进程中的引擎。
当需要对入侵防御***再次进行升级时,如果已创建的进程的个数达到n,则可以根据步骤402记录的进程的标识确定最先创建的进程,本实施例中,该最先创建的进程为标识为a1的进程;然后卸载标识为a1的进程中的引擎,释放该引擎占用的资源。
对于已创建的进程的个数小于预设的第一阈值,但已生成的状态机的数量达到预设的第二阈值的情形,可以卸载最先创建的进程中的一个状态机;具体地,可以根据步骤404中记录的状态机的标识确定最先创建的进程中最先生成的状态机,然后释放该最先创建的进程中最先生成的状态机。
步骤409,在最先创建的进程中下载对入侵防御***进行升级的升级包,并执行步骤402及其后续步骤。
在卸载标识为a1的进程中的引擎,释放该引擎占用的资源之后,在该标识为a1的进程中下载对入侵防御***进行升级的升级包,并执行步骤402及其后续步骤;在标识为a1的进程中下载对入侵防御***进行升级的升级包之后,需要为标识为a1的进程重新设置一个新的标识,以表示该进程是最新的进程。
在升级完成之后,如果接收到一个新的数据流的报文,则通过原标识为a1的进程中最新加载的引擎对该数据流的报文进行检测;而升级之前,在原标识为a1的进程中进行检测的数据流的后续报文,将会被直接发送出去,不继续检测。
步骤410,判断已生成的状态机的数量是否达到预设的第二阈值。如果已生成的状态机的数量达到预设的第二阈值,则执行步骤411;如果已生成的状态机的数量小于预设的第二阈值,则执行步骤412~步骤413。
本实施例中,在不断升级的过程中,可以根据入侵防御***的内存的具体情况对生成的状态机的个数进行限制,具体地,可以根据入侵防御***的内存的具体情况将第二阈值设为m,m为正整数,可以取m=4。
步骤411,根据记录的进程的标识确定最先创建的进程,释放最先创建的进程中的一个状态机;或者,卸载最先创建的进程中的引擎,释放该引擎占用的资源,执行步骤412。
具体地,在释放最先创建的进程中的一个状态机时,可以根据步骤404中记录的状态机的标识确定最先创建的进程中最先生成的状态机,然后释放该最先创建的进程中最先生成的状态机。
步骤412,根据记录的进程的标识确定最新创建的进程,在最新创建的进程中下载对特征库进行升级的升级包。
步骤413,通过最新创建的进程中加载的引擎,加载并编译升级包中的特征库,生成新的状态机,同样,在生成状态机之后,需要设置生成的状态机的标识,建立该状态机的标识与生成该状态机的引擎的标识的对应关系;并执行步骤405及其后续步骤。
本实施例中,进程和引擎一一对应,但是一个引擎可能对应多个状态机。下面结合图5,对本实施例中对报文进行检测的方式进行详细介绍。
图5为本发明对报文进行检测的另一个实施例的流程图,如图5所示,本实施例对报文进行检测的流程包括:
步骤501,接收报文。
步骤502,根据该报文的报文头中的信息判断该报文是否为数据流的首报文。如果该报文是数据流的首报文,则执行步骤503;如果该报文不是数据流的首报文,则执行步骤504。
具体地,判断报文是否为数据流的首报文可以为:解析报文的报文头,确定该报文采用的传输协议;当该报文采用TCP传输时,如果该报文的报文头中包括首报文标识,则该报文是数据流的首报文;如果该报文的报文头中不包括首报文标识,则该报文不是数据流的首报文。当该报文采用UDP传输时,则需要根据该报文的五元组信息,在入侵防御***中查找是否有该五元组信息的记录,如果没有查找到该五元组信息的记录,则可以确定该报文是数据流的首报文,记录首报文的五元组信息;如果查找到该五元组信息的记录,则说明该报文不是数据流的首报文。其中,报文的五元组信息包括:报文的源IP地址、目的IP地址、源端口、目的端口和报文所采用的传输协议;属于同一数据流的报文具有相同的五元组信息。
步骤503,根据记录的引擎的标识确定最新加载的引擎,通过最新加载的引擎调用最新生成的状态机,对报文进行检测;并记录该报文的报文头中的五元组信息,建立该五元组信息与最新加载的引擎的标识,以及上述最新生成的状态机的标识对应关系。
具体地,在确定接收到的报文是一个数据流的首报文之后,可以通过查找记录的引擎的标识确定最新加载的引擎,以该最新加载的引擎作为对首报文进行检测的引擎;由于最新加载的引擎可能对应一个或多个状态机,根据最新加载的引擎的标识,可以确定与该最新加载的引擎对应的状态机的标识,根据该状态机的标识可以确定最新生成的状态机。本实施例中,通过最新加载的引擎调用最新生成的状态机,对数据流的首报文进行检测,并记录该首报文的报文头中的五元组信息,建立该五元组信息与最新加载的引擎的标识,以及上述最新生成的状态机的标识的对应关系。由于同一数据流的报文具有相同的五元组信息,因此在接收到该数据流的后续报文时,可以根据后续报文的五元组信息,以及该五元组信息、记录的引擎的标识和状态机的标识的对应关系,确定与该五元组信息对应的引擎的标识和对应的状态机的标识,从而可以确定对后续报文进行检测的引擎和状态机,可以保证对同一数据流的报文采用同一引擎和同一状态机进行检测。
步骤504,根据报文的报文头中的五元组信息,利用在数据流的首报文时建立的五元组信息、引擎的标识与状态机的标识的对应关系,在记录的引擎的标识中查找与该五元组信息对应的引擎的标识,在记录的状态机的标识中查找与该五元组信息对应的状态机的标识;通过查找到的引擎的标识所对应的引擎,调用查找到的状态机的标识所对应的状态机,对报文进行检测。
上述实施例通过创建进程,在创建的进程中下载对入侵防御***进行升级的升级包,并加载该升级包中的引擎,设置并记录加载的引擎的标识,通过加载的引擎加载并编译升级包中的特征库,生成状态机,升级该入侵防御***。本实施例只在每次引擎和特征库一同升级时,创建一个新的进程,实现了在入侵防御***的升级过程中加载多个引擎,编译出多组状态机同时工作,实现了在对入侵防御***升级的同时最大限度地不中断升级操作前的数据流的报文检测业务;并且本实施例对创建的进程的个数加以限制,同时对生成的状态机的个数加以限制,确保了创建的进程、加载的引擎和生成的状态机不会占用太多的内存,保证了入侵防御***的正常运行。
图6为本发明入侵防御***的升级方法又一个实施例的流程图,如图6所示,该实施例包括:
步骤601,在对入侵防御***进行第一次升级时,创建进程,并在创建的进程中下载对该入侵防御***进行升级的升级包。
步骤602,在上述进程中,加载该升级包中的引擎,设置并记录加载的引擎的标识。
具体地,加载的引擎的标识可以按照加载时间的先后设置,例如:按照加载时间由先至后的顺序,将引擎的标识分别设为b1,b2,...,bn,即标识为b1的引擎是最先加载的引擎。以上只是设置引擎的标识的一种方式,本实施例并不仅限于此,还可通过其他方式设置引擎的标识,只要设置的引擎的标识可以区分出引擎加载的先后顺序即可。
步骤603,在上述进程中,通过加载的引擎加载并编译该升级包中的特征库,生成状态机,升级该入侵防御***;设置并记录生成的状态机的标识,建立该状态机的标识与生成状态机的引擎的标识的对应关系。
本实施例只在对入侵防御***的引擎和特征库进行第一次升级时,创建一个进程,后续再对该入侵防御***进行升级时,均在创建的这一个进程中下载对入侵防御***进行升级的升级包,执行步骤602~步骤603,完成对入侵防御***的升级。因此本实施例中,一个进程中加载了多个引擎,每个引擎可能对应多个状态机,在生成状态机之后,需要设置并记录生成的状态机的标识,建立状态机的标识与生成状态机的引擎的标识的对应关系。
具体地,状态机的标识可以按照生成时间的先后进行设置,例如:按照生成时间由先至后的顺序,将状态机的标识分别设为c1,c2,...,cn,即标识为c1的状态机是最先生成的状态机。以上只是设置状态机的标识的一种方式,本实施例并不仅限于此,还可通过其他方式设置状态机的标识,只要设置的状态机的标识可以区分出状态机生成的先后顺序即可。
在接收到报文之后,可以根据接收到的报文的报文头中的信息和记录的引擎的标识确定对报文进行检测的引擎,通过确定的引擎调用生成的状态机,对报文进行检测。具体地,本实施例中,在对接收到的报文进行检测时,可以采用本发明图5所示实施例中提供的方法。
步骤604,当需要对入侵防御***再次进行升级时,判断是否引擎和特征库一同升级。如果引擎和特征库一同升级,则执行步骤605~步骤608;如果只升级特征库,则执行步骤609~步骤612。
步骤605,判断已加载的引擎的个数是否达到预设的第三阈值。如果已加载的引擎的个数达到预设的第三阈值,则执行步骤607;如果已加载的引擎的个数小于预设的第三阈值,则执行步骤606。
本实施例中,在不断升级的过程中,可以根据入侵防御***的内存的具体情况对加载的引擎的个数进行限制,预先设置第三阈值,使加载的引擎的个数不会超过该第三阈值;第三阈值为正整数,可以设第三阈值为2。
步骤606,判断已生成的状态机的数量是否达到预设的第二阈值。如果已生成的状态机的数量达到预设的第二阈值,则执行步骤607;如果已生成的状态机的数量小于预设的第二阈值,则执行步骤608。
本实施例中,在不断升级的过程中,可以根据入侵防御***的内存的具体情况对生成的状态机的个数进行限制,具体地,可以根据入侵防御***的内存的具体情况将第二阈值设为m,m为正整数,可以取m=4。
步骤607,根据记录的引擎的标识确定最先加载的引擎,卸载该引擎,释放该引擎占用的资源,然后执行步骤608。
当需要对入侵防御***再次进行升级时,如果已加载的引擎的个数达到预设的第三阈值,则可以根据步骤602记录的引擎的标识确定最先加载的引擎,本实施例中,该最先加载的引擎为标识为b1的引擎;然后卸载标识为b1的引擎,释放该引擎占用的资源。
对于已加载的引擎的个数小于预设的第三阈值,但已生成的状态机的数量达到预设的第二阈值的情形,可以卸载最先加载的引擎的一个状态机;具体地,可以根据步骤603中记录的状态机的标识确定最先加载的引擎对应的状态机中最先生成的状态机,然后释放该最先生成的状态机。
步骤608,在创建的同一个进程中下载对引擎和特征库进行升级的升级包,执行步骤602。
步骤609,判断已生成的状态机的数量是否达到预设的第二阈值。如果已生成的状态机的数量达到预设的第二阈值,则执行步骤610;如果已生成的状态机的数量小于预设的第二阈值,则执行步骤611~步骤612。
本实施例中,在不断升级的过程中,可以根据入侵防御***的内存的具体情况对生成的状态机的个数进行限制,具体地,可以根据入侵防御***的内存的具体情况将第二阈值设为m,m为正整数,可以取m=4。
步骤610,根据记录的引擎的标识确定最先加载的引擎,卸载该最先加载的引擎,释放该引擎占用的资源;或者,释放最先加载的引擎对应的状态机中的一个状态机;执行步骤611。
具体地,在释放最先加载的引擎对应的状态机中的一个状态机时,可以根据步骤603中记录的状态机的标识确定最先加载的引擎对应的状态机中最先生成的状态机,然后释放该最先生成的状态机。
步骤611,在创建的同一个进程中下载对特征库进行升级的升级包。
步骤612,根据记录的引擎的标识确定最新加载的引擎,通过最新加载的引擎加载并编译升级包中的特征库,生成一组新的状态机,同样,在生成状态机之后,需要设置生成的状态机的标识,建立该状态机的标识与生成该状态机的引擎的标识的对应关系,并执行步骤604及其后续步骤。
上述实施例在对入侵防御***进行第一次升级时,创建进程,在创建的进程中下载对入侵防御***进行升级的升级包,加载该升级包中的引擎,设置并记录加载的引擎的标识,并通过加载的引擎加载并编译特征库,生成状态机,升级该入侵防御***。本实施例只在对入侵防御***进行第一次升级时,创建一个进程,后续的升级过程均在同一个进程中加载引擎、编译特征库和生成状态机,实现了在入侵防御***的升级过程中加载多个引擎,编译出多组状态机同时工作,实现了在对入侵防御***升级的同时最大限度地不中断升级操作前的数据流的报文检测业务;并且本实施例对加载的引擎的个数加以限制,同时对生成的状态机的个数加以限制,确保了加载的引擎和生成的状态机不会占用太多的内存,保证了入侵防御***的正常运行。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
图7为本发明入侵防御***的升级装置一个实施例的结构示意图,该入侵防御***的升级装置,可以位于入侵防御***中,实现本发明图1所示实施例的流程。如图7所示,该入侵防御***的升级装置可以包括:创建模块71,下载模块72、加载模块73和编译模块74。
具体地,创建模块71,用于创建进程;
下载模块72可以在创建模块71创建的进程中下载对入侵防御***进行升级的升级包;
加载模块73可以在创建模块71创建的进程中,加载下载模块72下载的升级包中的引擎,设置并记录加载的引擎的标识;具体地,加载的引擎的标识可以按照加载时间的先后设置,例如:按照加载时间由先至后的顺序,将引擎的标识分别设为1,2,...,n,即标识为1的引擎是最先加载的引擎。以上只是设置引擎的标识的一种方式,本实施例并不仅限于此,还可通过其他方式设置引擎的标识,只要设置的引擎的标识可以区分出引擎加载的先后顺序即可。
编译模块74可以在创建模块71创建的进程中,通过加载模块73加载的引擎加载并编译下载模块72下载的升级包中的特征库,生成状态机,升级该入侵防御***。
上述实施例中,创建模块71创建进程,下载模块72在创建模块71创建的进程中下载对入侵防御***进行升级的升级包,加载模块73在上述进程中加载下载模块72下载的升级包中的引擎,设置并记录加载的引擎的标识,并由编译模块74通过加载的引擎加载并编译特征库,生成状态机,升级该入侵防御***。本实施例在每次引擎和特征库一同升级,或者,只升级特征库时,均创建一个新的进程,从而实现了在入侵防御***的升级过程中加载多个引擎,编译出多组状态机同时工作,实现了在对入侵防御***升级的同时最大限度地不中断升级操作前的数据流的报文检测业务。
图8为本发明入侵防御***的升级装置另一个实施例的结构示意图,该入侵防御***的升级装置,可以位于入侵防御***中,实现本发明图3所示实施例的流程。如图8所示,该入侵防御***的升级装置可以包括:创建模块81、下载模块82、加载模块83、编译模块84、检测模块85和进程标识记录模块86。
具体地,创建模块81,用于创建进程,具体地,创建模块81可以在每次对入侵防御***进行升级时,创建进程;下载模块82可以在创建模块81创建的进程中下载对入侵防御***进行升级的升级包。
加载模块83可以在创建模块81创建的进程中加载下载模块82下载的升级包中的引擎,设置并记录加载的引擎的标识;具体地,加载的引擎的标识可以按照加载时间的先后设置,例如:按照加载时间由先至后的顺序,将引擎的标识分别设为b1,b2,...,bn,即标识为b1的引擎是最先加载的引擎。以上只是设置引擎的标识的一种方式,本实施例并不仅限于此,还可通过其他方式设置引擎的标识,只要设置的引擎的标识可以区分出引擎加载的先后顺序即可。
编译模块84可以在创建模块81创建的进程中,通过加载模块83加载的引擎加载并编译下载模块82下载的升级包中的特征库,生成状态机,升级该入侵防御***;检测模块85可以根据接收到的报文的报文头中的信息和记录的引擎的标识确定对报文进行检测的引擎,通过确定的引擎调用生成的状态机,对该报文进行检测。具体地,检测模块85可以采用本发明图2所示实施例中提供的方法,对接收到的报文进行检测。
其中,检测模块85可以包括:判断子模块851、第一确定子模块852、第二确定子模块853和报文检测子模块854。具体地,判断子模块851可以根据接收到的报文的报文头中的信息判断该报文是否为数据流的首报文;具体地,判断报文是否为数据流的首报文可以为:解析报文的报文头,确定该报文采用的传输协议;当该报文采用TCP传输时,如果该报文的报文头中包括首报文标识,则该报文是数据流的首报文;如果该报文的报文头中不包括首报文标识,则该报文不是数据流的首报文。当该报文采用UDP传输时,则需要根据该报文的五元组信息,在入侵防御***中查找是否有该五元组信息的记录,如果没有查找到该五元组信息的记录,则可以确定该报文是数据流的首报文,记录首报文的五元组信息;如果查找到该五元组信息的记录,则说明该报文不是数据流的首报文。其中,报文的五元组信息包括:报文的源IP地址、目的IP地址、源端口、目的端口和报文所采用的传输协议;属于同一数据流的报文具有相同的五元组信息。
第一确定子模块852可以当判断子模块851确定接收到的报文是数据流的首报文时,根据记录的引擎的标识确定最新加载的引擎,该最新加载的引擎为对报文进行检测的引擎;并记录该报文的报文头中的五元组信息,建立该五元组信息与对该报文进行检测的引擎的标识的对应关系;由于同一数据流的报文具有相同的五元组信息,因此在接收到该数据流的后续报文时,第二确定子模块853可以根据后续报文的五元组信息,以及该五元组信息与记录的引擎的标识的对应关系,确定与该五元组信息对应的引擎的标识,进而可以确定对后续报文进行检测的引擎,并且可以保证对同一数据流的报文采用同一引擎进行检测。
第二确定子模块853可以当判断子模块851确定接收到的报文不是数据流的首报文时,根据该报文的报文头中的五元组信息,利用在数据流的首报文时建立的五元组信息与引擎的标识的对应关系,在记录的引擎的标识中查找与该五元组信息对应的引擎的标识,确定该标识对应的引擎为对该报文进行检测的引擎;
报文检测子模块854可以通过第一确定子模块852或第二确定子模块853确定的引擎调用编译模块84生成的状态机,对报文进行检测。
本实施例中,在每次引擎和特征库一同升级,或者,只升级特征库时,创建模块81均创建一个新的进程,并由下载模块82、加载模块83和编译模块84执行后续步骤。其中,在只升级特征库时,创建模块81创建一个新的进程之后,加载模块83可以通过记录的引擎的标识,确定当前最新加载的引擎,并在创建模块81新创建的进程中,重新加载当前最新加载的引擎,然后为该重新加载的引擎设置一个新的引擎的标识。因此在本实施例中,引擎和状态机一一对应,因此第一确定子模块852或第二确定子模块853确定对报文进行检测的引擎之后,报文检测子模块854就可以通过该引擎调用该引擎生成的状态机,对接收到的报文进行检测。
本实施例中,进程标识记录模块86可以根据创建进程的时间,设置并记录创建的进程的标识;具体地,创建的进程的标识可以按照创建时间的先后设置,例如:按照创建时间由先至后的顺序,将创建的进程的标识分别设为a1,a2,...,an,即标识为a1的进程是最先创建的进程。以上只是设置创建的进程的标识的一种方式,本实施例并不仅限于此,还可通过其他方式设置创建的进程的标识,只要设置的进程的标识可以区分出进程创建的先后顺序即可。
本实施例中,下载模块82可以包括:进程确定子模块821、卸载子模块822和升级包下载子模块823。其中,进程确定子模块821可以在创建模块81已创建的进程的个数达到预设的第一阈值时,根据进程标识记录模块86记录的进程的标识确定最先创建的进程;本实施例中,在不断升级的过程中,可以根据入侵防御***的内存的具体情况对创建的进程的个数进行限制,具体地,可以根据入侵防御***的内存的具体情况将第一阈值设为n,n为正整数,可以取n=2;
卸载子模块822可以卸载该进程确定子模块821确定的最先创建的进程中的引擎,释放该引擎占用的资源;这时,升级包下载子模块823可以在卸载子模块822卸载进程确定子模块821确定的最先创建的进程中的引擎之后,在进程确定子模块821确定的最先创建的进程中下载对入侵防御***进行升级的升级包。
上述实施例中,创建模块81创建进程,下载模块82在创建模块81创建的进程中下载对入侵防御***进行升级的升级包,加载模块83在创建模块81创建的进程中加载该升级包中的引擎,设置并记录加载的引擎的标识,并由编译模块84在创建模块81创建的进程中通过加载模块83加载的引擎加载并编译该升级包中的特征库,生成状态机,升级该入侵防御***,在接收到报文之后,检测模块85根据该报文的报文头中的信息和记录的引擎的标识确定对报文进行检测的引擎,然后通过确定的引擎调用生成的状态机,对该报文进行检测。本实施例在每次引擎和特征库一同升级,或者,只升级特征库时,均创建一个新的进程,从而实现了在入侵防御***的升级过程中加载多个引擎,编译出多组状态机同时工作,实现了在对入侵防御***升级的同时最大限度地不中断升级操作前的数据流的报文检测业务;并且本实施例对创建的进程的个数加以限制,确保了创建的进程不会占用太多的内存,保证了入侵防御***的正常运行。
图9为本发明入侵防御***的升级装置再一个实施例的结构示意图,该入侵防御***的升级装置,可以位于入侵防御***中,实现本发明图4所示实施例的流程。如图9所示,该入侵防御***的升级装置可以包括:创建模块91、下载模块92、加载模块93、编译模块94、检测模块95、进程标识记录模块96和状态机标识记录模块97。
具体地,创建模块91可以创建进程,具体地,创建模块91可以在每次引擎和特征库一同升级时,创建一个新的进程;下载模块92可以在创建模块91创建的进程中下载对入侵防御***进行升级的升级包。
加载模块93可以在创建模块91创建的进程中加载下载模块92下载的升级包中的引擎,设置并记录加载的引擎的标识;具体地,加载的引擎的标识可以按照加载时间的先后设置,例如:按照加载时间由先至后的顺序,将引擎的标识分别设为b1,b2,...,bn,即标识为b1的引擎是最先加载的引擎。以上只是设置引擎的标识的一种方式,本实施例并不仅限于此,还可通过其他方式设置引擎的标识,只要设置的引擎的标识可以区分出引擎加载的先后顺序即可。
编译模块94可以在创建模块91创建的进程中,通过加载模块93加载的引擎加载并编译下载模块92下载的升级包中的特征库,生成状态机;在编译模块94生成一组状态机之后,状态机标识记录模块97可以设置并记录生成的状态机的标识,建立该状态机的标识与生成该状态机的引擎的标识的对应关系。
检测模块95可以根据接收到的报文的报文头中的信息和加载模块93记录的引擎的标识确定对报文进行检测的引擎,通过确定的引擎调用编译模块94生成的状态机,对该报文进行检测。
本实施例中,在每次引擎和特征库一同升级时,创建模块91创建一个新的进程,并由下载模块92、加载模块93和编译模块94执行后续步骤。因此在本实施例中,进程和引擎一一对应,而一个引擎可能对应多个状态机。
本实施例中,检测模块95可以包括:首报文判断子模块951、第一报文检测子模块952和第二报文检测子模块953。
具体地,首报文判断子模块951可以根据接收到的报文的报文头中的信息判断所述报文是否为数据流的首报文;具体地,判断报文是否为数据流的首报文可以为:解析报文的报文头,确定该报文采用的传输协议;当该报文采用TCP传输时,如果该报文的报文头中包括首报文标识,则该报文是数据流的首报文;如果该报文的报文头中不包括首报文标识,则该报文不是数据流的首报文。当该报文采用UDP传输时,则需要根据该报文的五元组信息,在入侵防御***中查找是否有该五元组信息的记录,如果没有查找到该五元组信息的记录,则可以确定该报文是数据流的首报文,记录首报文的五元组信息;如果查找到该五元组信息的记录,则说明该报文不是数据流的首报文。其中,报文的五元组信息包括:报文的源IP地址、目的IP地址、源端口、目的端口和报文所采用的传输协议;属于同一数据流的报文具有相同的五元组信息。
第一报文检测子模块952可以当首报文判断子模块951确定接收到的报文为数据流的首报文时,根据加载模块93记录的引擎的标识确定最新加载的引擎,该最新加载的引擎为对该报文进行检测的引擎;通过最新加载的引擎调用编译模块94生成的新的状态机,对该报文进行检测;并记录报文的报文头中的五元组信息,建立该五元组信息与最新加载的引擎的标识,以及新的状态机的标识对应关系。
第二报文检测子模块953可以当首报文判断子模块951确定接收到的报文不是数据流的首报文时,根据该报文的报文头中的五元组信息,利用在该数据流的首报文时建立的五元组信息、引擎的标识与状态机的标识的对应关系,在加载模块93记录的引擎的标识中查找与该五元组信息对应的引擎的标识,在状态机标识记录模块97记录的状态机的标识中查找与该五元组信息对应的状态机的标识;通过查找到的引擎的标识所对应的引擎,调用查找到的状态机的标识所对应的状态机,对接收到的报文进行检测。
本实施例中,进程标识记录模块96可以根据创建进程的时间,设置并记录创建的进程的标识;具体地,创建的进程的标识可以按照创建时间的先后设置,例如:按照创建时间由先至后的顺序,将创建的进程的标识分别设为a1,a2,...,an,即标识为a1的进程是最先创建的进程。以上只是设置创建的进程的标识的一种方式,本实施例并不仅限于此,还可通过其他方式设置创建的进程的标识,只要设置的进程的标识可以区分出进程创建的先后顺序即可。
本实施例中,下载模块92可以包括:进程确定子模块921、卸载子模块922和升级包下载子模块923。其中,进程确定子模块921可以在创建模块91已创建的进程的个数达到预设的第一阈值时,根据进程标识记录模块96记录的进程的标识确定最先创建的进程;本实施例中,在不断升级的过程中,可以根据入侵防御***的内存的具体情况对创建的进程的个数进行限制,具体地,可以根据入侵防御***的内存的具体情况将第一阈值设为n,n为正整数,可以取n=2;
卸载子模块922可以卸载该进程确定子模块921确定的最先创建的进程中的引擎,释放该引擎占用的资源;这时,升级包下载子模块923可以在卸载子模块922卸载进程确定子模块921确定的最先创建的进程中的引擎之后,在进程确定子模块921确定的最先创建的进程中下载对入侵防御***进行升级的升级包。
若后续仅需对入侵防御***的特征库进行升级,则进程确定子模块921可以根据进程标识记录模块96记录的进程的标识确定最新创建的进程;这时,升级包下载子模块923可以在进程确定子模块921确定的最新创建的进程中下载对特征库进行升级的升级包;然后,由编译模块94通过最新创建的进程中加载的引擎,加载并编译升级包中的特征库,生成状态机。
上述实施例中的入侵防御***的升级装置,实现了在入侵防御***的升级过程中加载多个引擎,编译出多组状态机同时工作,实现了在对入侵防御***升级的同时最大限度地不中断升级操作前的数据流的报文检测业务;并且本实施例中的入侵防御***的升级装置对创建的进程的个数加以限制,同时对生成的状态机的个数加以限制,确保了创建的进程、加载的引擎和生成的状态机不会占用太多的内存,保证了入侵防御***的正常运行。
图10为本发明入侵防御***的升级装置又一个实施例的结构示意图,该入侵防御***的升级装置,可以位于入侵防御***中,实现本发明图6所示实施例的流程。如图10所示,该入侵防御***的升级装置可以包括:创建模块1001、下载模块1002、加载模块1003、编译模块1004、检测模块1005和卸载模块1006。
其中,创建模块1001可以在对入侵防御***进行第一次升级时,创建进程;下载模块1002可以在创建模块1001创建的进程中下载对入侵防御***进行升级的升级包;加载模块1003可以在创建模块1001创建的进程中,加载下载模块1002下载的升级包中的引擎,设置并记录加载的引擎的标识;编译模块1004可以在创建模块1001创建的进程中,通过加载模块1003加载的引擎加载并编译下载模块1002下载的升级包中的特征库,生成状态机;检测模块1005可以根据接收到的报文的报文头中的信息和加载模块1003记录的引擎的标识确定对报文进行检测的引擎,通过确定的引擎调用编译模块1004生成的状态机,对该报文进行检测;具体地,检测模块1005在对接收到的报文进行检测时,可以采用本发明图5所示实施例中提供的方法。
本实施例中,当后续仅需对入侵防御***的特征库进行升级时,下载模块1002具体可以在创建模块1001创建的进程中下载对特征库进行升级的升级包;这时,编译模块1004具体可以根据加载模块1003记录的引擎的标识确定最新加载的引擎,通过该最新加载的引擎加载并编译该升级包中的特征库,生成新的状态机。
卸载模块1006可以在加载模块1003加载的引擎的个数达到预设的第三阈值时,根据记录的引擎的标识确定最先加载的引擎,卸载最先加载的引擎,释放该引擎占用的资源;卸载模块1006还可以在编译模块1004已生成的状态机的数量达到预设的第二阈值时,根据记录的引擎的标识确定最先加载的引擎,释放该最先加载的引擎对应的状态机中的一个状态机。
具体地,可以根据入侵防御***的内存的具体情况设置第二阈值和第三阈值,第二阈值和第三阈值为正整数,可以将第三阈值设为2,将第二阈值设为4。
上述实施例中的入侵防御***的升级装置,实现了在入侵防御***的升级过程中加载多个引擎,编译出多组状态机同时工作,实现了在对入侵防御***升级的同时最大限度地不中断升级操作前的数据流的报文检测业务;并且本实施例中的入侵防御***的升级装置对加载的引擎的个数加以限制,同时对生成的状态机的个数加以限制,确保了创建的进程、加载的引擎和生成的状态机不会占用太多的内存,保证了入侵防御***的正常运行。
本领域技术人员可以理解附图只是一个优选实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。
本领域技术人员可以理解实施例中的装置中的模块可以按照实施例描述进行分布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
最后应说明的是:以上实施例仅用以说明本发明的技术方案而非对其进行限制,尽管参照较佳实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对本发明的技术方案进行修改或者等同替换,而这些修改或者等同替换亦不能使修改后的技术方案脱离本发明技术方案的精神和范围。