一种实现安全扫描的方法及分布式系统的制作方法

文档序号:7986899阅读:257来源:国知局
一种实现安全扫描的方法及分布式系统的制作方法
【专利摘要】本发明提供了一种实现安全扫描的方法及分布式系统,该方法包括:开始任务接口将生成的任务消息上传到待爬取消息队列;爬虫进程依据在所述待爬取消息队列中监听到的任务消息中的待扫描任务入口URL,得到所述待扫描任务入口URL下的子链接,并发送扫描消息给待扫描消息队列;扫描监听进程在待扫描消息队列监听到所述扫描消息时,将所述子链接存储到数据库;web?server收到扫描进程发送的http请求后,依据数据库存储的子链接生成扫描任务,将生成的扫描任务返回给扫描进程;扫描进程对收到的子链接进行漏洞扫描,出现漏洞时生成漏洞数据,并依据漏洞数据生成扫描结果。根据本发明提供的技术方案,能够大大提高web安全测试的效率。
【专利说明】一种实现安全扫描的方法及分布式系统
【【技术领域】】
[0001]本发明涉及互联网的安全测试技术,尤其涉及一种实现安全扫描方法及分布式系统。
【【背景技术】】
[0002]目前,对网站进行web安全测试的方法主要有以下三种方式:
[0003]第一种是由专门的安全测试人员对网站进行人工web安全测试。这种方式的缺点是:依赖于人工操作,测试周期较长,需要占用较多人力资源和时间资源,测试效率较低。
[0004]第二种是利用一些安全扫描工具对网站进行安全扫描,这种方式的缺点是:安全扫描工具都是客户端或服务器模式,仍然需要依赖人工进行安装和部署客户端或服务器,需要占用较多人力资源和时间资源,测试效率较低。
[0005]第三种是安全测试人员通过web页面提交扫描任务后,利用抓取URL模块得到需要的子链接,然后进入漏洞扫描,最后生成扫描报告。这种方式的缺点是:抓取工具和扫描工具在同一设备下串行工作,这样爬虫工具和扫描工具势必会出现相互等待和相互制约的情况,而且整个设备的稳定性、容错性和方便扩展性都将受到较大制约,测试效率较低。【
【发明内容】

[0006]本发明提供了一种实现安全扫描的方法及分布式系统,能够大大提高web安全测试的效率。
[0007]本发明的具体技术方案如下:
[0008]根据本发明一优选实施例,一种实现安全扫描的分布式系统,包括:开始任务接口、包括待爬取消息队列和待扫描消息队列的消息服务器、包括一个以上爬虫进程的爬虫集群、包含扫描监听进程和数据库的监听服务器、web服务器(server)和包括一个以上扫描进程的扫描集群;其中,
[0009]开始任务接口,用于将生成的任务消息上传到待爬取消息队列;
[0010]爬虫进程,用于依据在所述待爬取消息队列中监听到的任务消息中的待扫描任务入口 URL,得到所述待扫描任务入口 URL下的子链接,并发送扫描消息给待扫描消息队列;
[0011]扫描监听进程,用于在待扫描消息队列监听到所述扫描消息时,将所述子链接存储到数据库;
[0012]web server,用于收到扫描进程发送的http请求后,依据数据库存储的子链接生成扫描任务,将生成的扫描任务返回给扫描进程;
[0013]扫描进程,用于对收到的子链接进行漏洞扫描,出现漏洞时生成漏洞数据,并依据漏洞数据生成扫描结果。
[0014]上述系统中,所述爬虫进程在得到所述待扫描任务入口 URL下的子链接时,具体包括:
[0015]对待爬取消息队列进行监听,第一个监听到任务消息的爬虫进程获取所述任务消息,并在所述待爬取消息队列中将所述任务消息的标志位设置为正在处理;
[0016]对所述任务消息中的待扫描任务入口 URL进行爬取,得到所述待扫描任务入口URL下的所有子链接。
[0017]上述系统中,所述待爬取消息队列,还用于当爬虫进程对待扫描任务入口 URL进行爬取的过程中,所述爬虫进程所在的机器出现故障时,将所述爬虫进程正在爬取的任务消息的标志位设置为等待处理。
[0018]上述系统中,所述爬虫进程,还用于依据得到的待扫描任务入口 URL的子链接生成爬虫结果,将保存爬虫结果的爬虫结果文件保存到缓存服务器。
[0019]上述系统中,所述web server在将生成的扫描任务发送给扫描进程时,具体包括:
[0020]依据数据库中的子链接生成扫描任务,每个扫描任务中包含的子链接的数量等于预设的任务链接数;
[0021]依据每个扫描进程一次只发送一个扫描任务的策略,将生成的扫描任务返回给请求扫描任务的扫描进程;
[0022]将扫描任务中子链接在数据库中的标志位设置为正在扫描。
[0023]上述系统中,所述扫描进程在对收到的子链接进行漏洞扫描时,具体包括:
[0024]从扫描任务中第一个子链接的第一个参数开始,将规则库中的参数值作为子链接中参数的参数值输入到子链接中,如果输入后报出漏洞则终止对所述参数的扫描,对所述子链接的其他参数进行扫描,对所述子链接的所有参数扫描完毕后,对扫描任务中的其他子链接进行扫描。
[0025]上述系统中,所述web server,还用于在等待超时时间内没有收到扫描进程发送的确认完成信息时,将子链接在数据库中的标志位设置为等待分配。
[0026]上述系统中,该系统还包括:停止扫描接口 ;
[0027]所述消息服务器还包括停止爬取消息队列和停止扫描消息队列;
[0028]停止扫描接口,用于前端界面的停止任务按钮被触发后,判断所述扫描任务处于爬取过程还是扫描过程;如果所述扫描任务处于爬取过程,将生成的停止爬取消息发送到消息服务器的停止爬取消息队列;爬虫进程用于从停止爬取消息队列监听到停止爬取消息时,终止所述扫描任务的爬取操作;
[0029]如果扫描任务处于扫描过程,停止扫描接口用于将生成的停止扫描消息发送到停止扫描消息队列,扫描监听进程用于从停止扫描消息队列监听到停止扫描消息时,如果扫描任务的子链接还没有被分配到扫描进程,则将所述子链接设置为停止扫描;如果所述子链接已经被分配到扫描进程,则不停止所述子链接的扫描。
[0030]一种实现安全扫描的方法,开始任务接口将生成的任务消息上传到待爬取消息队列;爬虫进程依据在所述待爬取消息队列中监听到的任务消息中的待扫描任务入口 URL,得到所述待扫描任务入口 URL下的子链接,并发送扫描消息给待扫描消息队列;扫描监听进程在待扫描消息队列监听到所述扫描消息时,将所述子链接存储到数据库;包括:
[0031]web server收到扫描进程发送的http请求后,依据数据库存储的子链接生成扫描任务,将生成的扫描任务返回给扫描进程;
[0032]扫描进程对收到的子链接进行漏洞扫描,出现漏洞时生成漏洞数据,并依据漏洞数据生成扫描结果。
[0033]上述方法中,爬虫进程得到所述待扫描任务入口 URL下的子链接的方法为:
[0034]爬虫进程对待爬取消息队列进行监听,第一个监听到任务消息的爬虫进程获取所述任务消息,并在所述待爬取消息队列中将所述任务消息的标志位设置为正在处理;
[0035]爬虫进程对所述任务消息中的待扫描任务入口 URL进行爬取,得到所述待扫描任务入口 URL下的所有子链接。
[0036]上述方法中,该方法还包括:
[0037]当爬虫进程对待扫描任务入口 URL进行爬取的过程中,所述爬虫进程所在的机器出现故障,待爬取消息队列将所述爬虫进程正在爬取的任务消息的标志位设置为等待处理。
[0038]上述方法中,爬虫进程发送扫描消息给待扫描消息队列之前,该方法还包括:
[0039]爬虫进程依据得到的待扫描任务入口 URL的子链接生成爬虫结果,将保存爬虫结果的爬虫结果文件保存到缓存服务器。
[0040]上述方法中,所述web server将生成的扫描任务发送给扫描进程的方法为:
[0041]依据数据库中的子链接生成扫描任务,每个扫描任务中包含的子链接的数量等于预设的任务链接数;
[0042]依据每个扫描进程一次只发送一个扫描任务的策略,将生成的扫描任务返回给请求扫描任务的扫描进程;
[0043]将扫描任务中子链接在数据库中的标志位设置为正在扫描。
[0044]上述方法中,扫描进程对收到的子链接进行漏洞扫描的方法为:
[0045]扫描进程从扫描任务中第一个子链接的第一个参数开始,将规则库中的参数值作为子链接中参数的参数值输入到子链接中,如果输入后报出漏洞则终止对所述参数的扫描,对所述子链接的其他参数进行扫描,对所述子链接的所有参数扫描完毕后,对扫描任务中的其他子链接进行扫描。
[0046]上述方法中,该方法还包括:
[0047]如果web server在等待超时时间内没有收到扫描进程发送的确认完成信息,则将子链接在数据库中的标志位设置为等待分配。
[0048]上述方法中,该方法还包括:
[0049]当前端界面的停止任务按钮被触发后,停止扫描接口判断所述扫描任务处于爬取过程还是扫描过程;
[0050]如果所述扫描任务处于爬取过程,将生成的停止爬取消息发送到消息服务器的停止爬取消息队列,爬虫进程从停止爬取消息队列监听到停止爬取消息时,终止所述扫描任务的爬取操作;
[0051]如果扫描任务处于扫描过程,停止扫描接口将生成的停止扫描消息发送到停止扫描消息队列,扫描监听进程从停止扫描消息队列监听到停止扫描消息时,如果扫描任务的子链接还没有被分配到扫描进程,则将所述子链接设置为停止扫描;如果所述子链接已经被分配到扫描进程,则不停止所述子链接的扫描。
[0052]由以上技术方案可以看出,本发明提供的具有以下有益效果:
[0053]爬虫集群和扫描集群作为两个相互独立、相互隔离的单独的分布式集群,互不制约、互不影响,能够最大限度的利用分布式集群的并行处理能力,大大提高web安全扫描的效率。
【【专利附图】

【附图说明】】
[0054]图1是本发明实现安全扫描的分布式系统的优选实施例的结构示意图;
[0055]图2是本发明实现安全扫描的方法的优选实施例的流程示意图。
【【具体实施方式】】
[0056]本发明的基本思想是:开始任务接口将生成的任务消息上传到待爬取消息队列;爬虫进程依据在所述待爬取消息队列中监听到的任务消息中的待扫描任务入口 URL,得到所述待扫描任务入口 URL下的子链接,并发送扫描消息给待扫描消息队列;扫描监听进程在待扫描消息队列监听到所述扫描消息时,将所述子链接存储到数据库;《eb server收到扫描进程发送的http请求后,依据数据库存储的子链接生成扫描任务,将生成的扫描任务返回给扫描进程;扫描进程对收到的子链接进行漏洞扫描,出现漏洞时生成漏洞数据,并依据漏洞数据生成扫描结果。
[0057]为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本发明进行详细描述。
[0058]本发明提供一种实现安全扫描的分布式系统,图1是本发明实现安全扫描的分布式系统的优选实施例的结构示意图,如图1所示,该系统包括:前端界面、开始任务接口、停止扫描接口、消息服务器、爬虫集群、监听服务器、web服务器server和扫描集群。
[0059]其中,消息服务器包括待爬取消息队列、待扫描消息队列、停止爬取消息队列和停止扫描消息队列。
[0060]爬虫集群包括一个以上机器,每个机器包括一个以上爬虫进程。
[0061]监听服务器包括扫描监听进程和数据库。
[0062]扫描集群包括一个以上机器,每个机器包括一个以上扫描进程。
[0063]基于上述系统,本发明还提供一种实现安全扫描的方法,图2是本发明实现安全扫描的方法的优选实施例的流程示意图,如图2所示,该优选实施例包括以下步骤:
[0064]步骤201,前端界面接收用户提交的扫描任务信息,开始任务接口依据前端界面接收的扫描任务信息生成任务消息,将该任务消息发送到消息服务器的待爬取消息队列。
[0065]具体的,前端界面向用户提供选项框和输入框,用来接收用户提交的扫描任务信息,提交的扫描任务信息包括以下内容:待扫描任务入口 URL、用户名、密码、登录类型、爬取层级和终端类型;其中,如果爬虫集群对待扫描任务入口 URL进行爬取时,该待扫描任务入口 URL下的子链接需要登录后才能爬取,则需要用户提交用户名和密码,如果不存在需要登录的子链接,则用户名和密码为空;如果待扫描任务入口 URL下的子链接数量巨大,则可以依据爬取层级,只获取待扫描任务入口 URL下该爬取层级的子链接;终端类型包括PC终端、移动终端等;用户在输入扫描任务信息后可以触发前端界面提供的提交按钮来提交扫描任务给前端界面。
[0066]前端界面收到用户提交的扫描任务信息后,调用开始任务接口,该开始任务接口依据前端界面接收的扫描任务信息生成任务消息;例如,生成的任务消息可以为:[0067]msg={,id,:1d,,project_id,:project_id,,url,: target_urI,,user_name’:user_name, , user_passwd’:user_passed, , login_type>:login_type, , url_pre’:url_pre, ’ user_agent’:user_agent};其中,’ id’:1d 为任务 ID,’ pro ject_id’:project_id为项目ID,对于用户提交的每个扫描任务都生成一个项目ID,但是一个扫描任务可能会执行多次扫描操作,因此,对应每次扫描操作将生成一个任务ID,因此,一个项目ID对应一个以上任务ID ; ’url’:target_url为待扫描任务入口 URL ,,user_name’:user_name 为登录时需要的用户名,’ user_passwd’:user_passed为登录时需要的密码,’ login_type’: login_type 为登录类型’ url_pre’:url_pre 为爬取层级,’ user_agent’:user_agent 为终端类型。
[0068]消息服务器中包括待爬取消息队列q_sp i der、停止爬取消息队列t_sp i der_stop、待扫描消息队列q_scan和停止扫描消息队列q_scan_stop ;开始任务接口将生成的任务消息发送到消息服务器的待爬取消息队列。
[0069]步骤202,爬虫集群中的爬虫进程在所述待爬取消息队列中监听到任务消息时,对该任务消息中待扫描任务入口 URL进行爬取,得到待扫描任务入口 URL下的所有子链接。
[0070]具体的,爬虫集群中包括一个以上机器,每个机器包括一个以上爬虫进程,每个爬虫进程都对消息服务器中的待爬取消息队列进行监听;例如,爬虫集群中可以有50个机器,每个机器上有10个爬虫进程,每个爬虫进程都可以作为一个消费者对任务消息进行消费,这样就有500个爬虫进程监听待爬取消息队列,通过增加爬虫集群中的机器就能够方便扩展爬虫集群的并行爬取能力,使得爬虫集群具有较高的扩展性和较高的处理能力。
[0071]当爬虫进程在待爬取消息队列中监听到任务消息时,第一个监听到该任务消息的爬虫进程将获取该任务消息,爬虫进程对该任务消息中的待扫描任务入口 URL进行爬取;同时,该爬虫进程在获取到任务消息后,会在待爬取消息队列中将该任务消息的标志位设置为正在处理,表示已经有爬虫进程处理该任务消息,这样,其他爬虫进程就不会对该任务消息进行重复爬取操作;当爬虫进程对待扫描任务入口 URL进行爬取的过程中,如果该爬虫进程所在的机器出现故障,导致该爬虫进程与待爬取消息队列断开连接,则待爬取消息队列在检测到该情况后将该爬虫进程正在处理的任务消息的标志位设置为等待处理,这样,其他的爬虫进程就可以对该任务消息进行爬取操作了,从而提高爬虫集群的容错性;爬虫进程对任务消息中的待扫描任务入口 URL的爬取操作完毕后,得到该待扫描任务入口URL下的所有子链接,爬虫进程向待爬取消息队列返回一个ACK消息,用于通知待爬取消息队列该任务消息已经爬取完毕,待爬取消息队列就可以将该任务消息删除,如此,可以保证扫描任务不会重复且不会丢失。
[0072]本优选实施例中,由于爬虫进程爬取操作的时间相对较短,因此将一个任务消息交由一个爬虫进程单独进行处理即可。
[0073]步骤203,所述爬虫进程将得到的子链接保存到缓存服务器,并发送扫描消息给消息服务器的待扫描消息队列;监听服务器中的扫描监听进程从待扫描消息队列监听到扫描消息时,将所述子链接存储到监听服务器中的数据库。
[0074]具体的,爬虫集群中的爬虫进程对任务消息中的待扫描任务入口 URL的爬取操作完毕后,依据爬取得到的该待扫描任务入口 URL的子链接生成爬虫结果,该爬虫结果包括待扫描任务入口 URL的子链接、对应的http请求类型和cookie ;爬虫进程将爬虫结果实时保存到缓存服务器的爬虫结果文件中,该爬虫结果文件中保存爬虫结果,且该爬虫结果文件以扫描任务的任务ID命名,如文件名为id.txt。
[0075]爬虫集群存储好爬虫结果后,就完成了自身的爬取操作,向消息服务器的待扫描消息队列发送扫描消息,该扫描消息中携带爬虫结果文件的文件名,例如,该扫描消息可以为:msg={’ id’:1d, ’ project_id’:project_id, ’ url’:url}。
[0076]监听服务器中的扫描监听进程对待扫描消息队列进行监听,当从待扫描消息队列监听到扫描消息时,依据扫描消息中的任务ID从缓存服务器中找到对应的爬虫结果文件,并将任务ID、项目ID和爬虫结果文件中的所有子链接拷贝到监听服务器中的数据库,由该数据库对子链接进行存储,并在数据库中将这些子链接的标志位设置为等待分配init,表示这些子链接可以被分配到扫描进程进行扫描,该标志位还可以设置为正在扫描scanning、停止扫描stop、扫描完毕complete,所述scanning表示子链接正在被扫描进程扫描,stop表示子链接被停止扫描,不能分配给扫描进程,complete表示子链接扫描完毕。
[0077]步骤204, web server收到扫描集群中的扫描进程发送的http请求后,依据数据库中的子链接生成扫描任务,所述扫描任务中包括的子链接数量等于预设任务链接数,webserver将生成的扫描任务发送给扫描进程。
[0078]具体的,扫描集群中包括一个以上机器,每个机器包括一个以上扫描进程,每个扫描进程都周期性的向web server)发送http请求,用于向web server请求扫描任务。例如,扫描集群中可以有6个机器,每个机器上启动10个扫描进程,这样一共有60个扫描进程,这些扫描进程可以同时执行扫描任务,通过增加扫描集群中的机器就能够方便扩展扫描集群的并行扫描能力,使得扫描集群具有较高的扩展性。
[0079]web server收到扫描集群中的扫描进程发送的http请求后,依据预设的任务链接数对数据库中的子链接进行划分,生成一个以上扫描任务,每个扫描任务中包含的子链接的数量等于预设的任务链接数,web server依据每个扫描进程一次只发送一个扫描任务的策略,将生成的扫描任务返回给请求扫描任务的扫描进程;其中,任务链接数的数值是可以配置的,可以依据扫描集群中单个机器的处理能力配置该任务链接数,该任务链接数用于限制发送给扫描进程的扫描任务中子链接的数量;如果数据库中没有子链接,则webserver收到扫描进程的http请求后,忽略该http请求;web server在将扫描任务返回给扫描进程后,将扫描任务中子链接在数据库中的标志位设置为scanning。
[0080]例如,web server以每20个URL为一个扫描任务,将数据库中的子链接分成多个扫描任务,每个扫描任务中有20个URL, web server将生成的扫描任务分发到多个扫描进程,如此,可以达到扫描负载均衡的目的,一个扫描任务会被划分为多个扫描子任务,从而分配给多个扫描进程,多个扫描进程并行执行扫描操作,提高扫描效率;同时每个扫描进程上需要扫描的子链接的数量相同,因此每个扫描进程所承担的负载相同。
[0081]步骤205,扫描进程对收到的子链接进行漏洞扫描,出现漏洞时生成漏洞数据,并依据漏洞数据生成扫描结果。
[0082]具体的,扫描进程收到web server分配的扫描任务后,对其中的第一个子链接的第一个参数开始对扫描任务中的子链接依次进行扫描,将规则库中的参数值作为子链接中参数的参数值输入到子链接中,如果输入后报出漏洞则终止对该参数进行扫描,实时生成对应的漏洞数据写入数据库;同理,对该子链接的其他参数进行扫描,对该子链接的所有参数扫描完毕后,对扫描任务中的其他子链接进行扫描,以此类推,最终对扫描任务中的所有子链接都扫描完毕,并得到相应的漏洞数据。
[0083]扫描进程对子链接进行扫描的过程中,每扫描完一个子链接就可以向Webserver返回一个确认完成信息,其中携带该子链接的任务ID和项目ID ;webserver就可以将该子链接在数据库中的标志位设置为complete ;如果Webserver在等待超时时间内没有收到扫描进程发送的确认完成信息,则认为该子链接没有扫描成功,扫描进程所在的机器出现异常,则将该子链接在数据库中的标志位由scanning重新设置为init,使得该子链接可以再被分配到其他扫描进程进行扫描,从而提高扫描集群的容错性。同时,扫描进程还可以将扫描进度实时同步到前端界面,扫描进度包括已完成扫描子链接的个数和待扫描子链接的个数,还可以将生成的漏洞数据实时同步到前端界面。
[0084]扫描完毕后,扫描进程依据数据库中保存的漏洞数据生成扫描结果报告,将该扫描结果报告通过前端界面显示给用户;其中,扫描结果报告包括以下内容:出现漏洞的子链接、子链接中出现漏洞的参数、漏洞类型、风险级别、漏洞的具体描述;所述风险级别包括闻、中、低和未知。
[0085]例如,扫描进程中一般有很多漏洞,如跨站脚本攻击(XSS、Cross-sitescripting)、结构化查询语言结构(SQL, Structured Query Language)注入攻击等,以XSS为例,得到扫描任务后,从第一个子链接的第一个参数开始,将xsslib.txt规则库里的参数值依次作为第一个参数的参数值输入到第一个子连接中,如果报出漏洞,则终止第一个参数的扫描,生成漏洞数据后,对第一个子链接的第二个参数进行扫描,将xsslib.txt规则库里的参数值依次作为第二个参数的参数值输入到第一个子连接中,同理,遇到漏洞则终止扫描,并生成漏洞数据,第一个子链接的所有参数扫描完毕后对第二个子链接以同样的方法进行扫描。
[0086]该方法还可以包括:
[0087]前端界面在用户提交扫描任务后,会向用户显示已经提交的扫描任务及相关信息,如扫描任务、当前扫描进度、停止按钮等;如果用户想要停止该扫描任务,可以触发该停止任务按钮,前端界面的停止任务按钮被触发后,调用数据库提供的停止扫描接口,该停止扫描接口依据数据库中是否有该扫描任务的扫描任务号,判断该扫描任务处于爬取过程还是扫描过程。
[0088]如果数据库中没有扫描任务号,表示该扫描任务处于爬取过程,因此停止扫描接口生成停止爬取消息,该停止爬取消息可以为:msg={’ id,:1d, ’ project_id’:project_id};停止扫描接口将该停止爬取消息发送到消息服务器的停止爬取消息队列,该停止爬取消息队列为一对多机制,停止爬取消息队列中的停止爬取消息可以同时被一个以上爬虫进程处理,爬虫集群中的爬虫进程采用多线程机制,部分线程进行子链接的爬取操作,采用一个线程对停止爬取消息队列进行监听,当监听到有停止爬取消息时,爬虫集群中的每个爬虫进程都需要判断该停止爬取消息中的任务ID与自身当前爬取的任务消息中的任务ID是否一致,如果一致,则爬虫进程终止自身当前的爬取操作,然后向停止爬取消息队列发送一个ACK消息,停止爬取消息队列收到ACK消息后,将该停止爬取消息在停止爬取消息队列中删除。
[0089]如果数据库已经生成扫描任务号,表示该扫描任务处于扫描过程,因此停止扫描接口生成停止扫描消息,该停止扫描消息可以为:msg={’ id’:1d, ’ project_id’:project_id};停止扫描接口将该停止扫描消息发送到停止扫描消息队列,扫描监听进程对停止扫描消息队列进行监听,监听到停止扫描消息时,依据其中的任务ID和项目ID判断数据库中对应的子链接的标志位,如果标志位是init,表示该扫描任务的子链接还没有被web server分配到扫描进程,则将该子链接的标志位设置为stop,表示该子链接不能进行扫描,从而实现停止扫描任务;如果标志位是scanning,表示该扫描任务的子链接已经被分配到扫描进程进行扫描,则不能停止该子链接的扫描,不需要进一步处理,任由扫描进程将该扫描任务扫描完毕。
[0090]为实现上述方法,如图1所示,该实现安全扫描的分布式系统中:
[0091]开始任务接口,用于将生成的任务消息上传到待爬取消息队列;
[0092]爬虫进程,用于依据在所述待爬取消息队列中监听到的任务消息中的待扫描任务入口 URL,得到所述待扫描任务入口 URL下的子链接,并发送扫描消息给待扫描消息队列;
[0093]扫描监听进程,用于在待扫描消息队列监听到所述扫描消息时,将所述子链接存储到数据库;
[0094]web server,用于收到扫描进程发送的http请求后,依据数据库存储的子链接生成扫描任务,将生成的扫描任务返回给扫描进程;
[0095]扫描进程,用于对收到的子链接进行漏洞扫描,出现漏洞时生成漏洞数据,并依据漏洞数据生成扫描结果。
[0096]其中,所述爬虫进程在得到所述待扫描任务入口 URL下的子链接时,具体包括:
[0097]对待爬取消息队列进行监听,第一个监听到任务消息的爬虫进程获取所述任务消息,并在所述待爬取消息队列中将所述任务消息的标志位设置为正在处理;
[0098]对所述任务消息中的待扫描任务入口 URL进行爬取,得到所述待扫描任务入口URL下的所有子链接。
[0099]其中,所述待爬取消息队列,还用于当爬虫进程对待扫描任务入口 URL进行爬取的过程中,所述爬虫进程所在的机器出现故障时,将所述爬虫进程正在爬取的任务消息的标志位设置为等待处理。
[0100]其中,所述爬虫进程,还用于依据得到的待扫描任务入口 URL的子链接生成爬虫结果,将保存爬虫结果的爬虫结果文件保存到缓存服务器。
[0101]其中,所述web server在将生成的扫描任务发送给扫描进程时,具体包括:
[0102]依据数据库中的子链接生成扫描任务,每个扫描任务中包含的子链接的数量等于预设的任务链接数;
[0103]依据每个扫描进程一次只发送一个扫描任务的策略,将生成的扫描任务返回给请求扫描任务的扫描进程;
[0104]将扫描任务中子链接在数据库中的标志位设置为正在扫描。
[0105]其中,所述扫描进程在对收到的子链接进行漏洞扫描时,具体包括:
[0106]从扫描任务中第一个子链接的第一个参数开始,将规则库中的参数值作为子链接中参数的参数值输入到子链接中,如果输入后报出漏洞则终止对所述参数的扫描,对所述子链接的其他参数进行扫描,对所述子链接的所有参数扫描完毕后,对扫描任务中的其他子链接进行扫描。[0107]其中,所述web server,还用于在等待超时时间内没有收到扫描进程发送的确认完成信息时,将子链接在数据库中的标志位设置为等待分配。
[0108]其中,停止扫描接口,还用于前端界面的停止任务按钮被触发后,判断所述扫描任务处于爬取过程还是扫描过程;如果所述扫描任务处于爬取过程,将生成的停止爬取消息发送到消息服务器的停止爬取消息队列;爬虫进程用于从停止爬取消息队列监听到停止爬取消息时,终止所述扫描任务的爬取操作;
[0109]如果扫描任务处于扫描过程,停止扫描接口用于将生成的停止扫描消息发送到停止扫描消息队列,扫描监听进程用于从停止扫描消息队列监听到停止扫描消息时,如果扫描任务的子链接还没有被分配到扫描进程,则将所述子链接设置为停止扫描;如果所述子链接已经被分配到扫描进程,则不停止所述子链接的扫描。
[0110]本发明的上述技术方案,爬虫集群和扫描集群作为两个相互独立、相互隔离的单独的分布式集群,互不制约、互不影响,能够最大限度的利用分布式集群的并行处理能力,大大提高Web安全扫描的效率;而且,扫描集群和爬虫集群能够各自配置负载均衡策略和容错策略,实现起来简单灵活。扫描集群和爬虫集群还具有各自的扩展性,因此,整个分布式系统具有闻扩展性、闻稳定性和闻容错性。
[0111]以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
【权利要求】
1.一种实现安全扫描的分布式系统,其特征在于,该系统包括:开始任务接口、包括待爬取消息队列和待扫描消息队列的消息服务器、包括一个以上爬虫进程的爬虫集群、包含扫描监听进程和数据库的监听服务器、web服务器server和包括一个以上扫描进程的扫描集群;其中, 开始任务接口,用于将生成的任务消息上传到待爬取消息队列; 爬虫进程,用于依据在所述待爬取消息队列中监听到的任务消息中的待扫描任务入口URL,得到所述待扫描任务入口 URL下的子链接,并发送扫描消息给待扫描消息队列; 扫描监听进程,用于在待扫描消息队列监听到所述扫描消息时,将所述子链接存储到数据库; web server,用于收到扫描进程发送的http请求后,依据数据库存储的子链接生成扫描任务,将生成的扫描任务返回给扫描进程; 扫描进程,用于对收到的子链接进行漏洞扫描,出现漏洞时生成漏洞数据,并依据漏洞数据生成扫描结果。
2.根据权利要求1所述的系统,其特征在于,所述爬虫进程在得到所述待扫描任务入口 URL下的子链接时,具体包括: 对待爬取消息队列进行监听,第一个监听到任务消息的爬虫进程获取所述任务消息,并在所述待爬取消息队列中将所述任务消息的标志位设置为正在处理; 对所述任务消息中的待扫描任务入口 URL进行爬取,得到所述待扫描任务入口 URL下的所有子链接。
3.根据权利要求2所述的系统,其特 征在于, 所述待爬取消息队列,还用于当爬虫进程对待扫描任务入口 URL进行爬取的过程中,所述爬虫进程所在的机器出现故障时,将所述爬虫进程正在爬取的任务消息的标志位设置为等待处理。
4.根据权利要求1所述的系统,其特征在于,所述爬虫进程,还用于依据得到的待扫描任务入口 URL的子链接生成爬虫结果,将保存爬虫结果的爬虫结果文件保存到缓存服务器。
5.根据权利要求1所述的系统,其特征在于,所述webserver在将生成的扫描任务发送给扫描进程时,具体包括: 依据数据库中的子链接生成扫描任务,每个扫描任务中包含的子链接的数量等于预设的任务链接数; 依据每个扫描进程一次只发送一个扫描任务的策略,将生成的扫描任务返回给请求扫描任务的扫描进程; 将扫描任务中子链接在数据库中的标志位设置为正在扫描。
6.根据权利要求1所述的系统,其特征在于,所述扫描进程在对收到的子链接进行漏洞扫描时,具体包括: 从扫描任务中第一个子链接的第一个参数开始,将规则库中的参数值作为子链接中参数的参数值输入到子链接中,如果输入后报出漏洞则终止对所述参数的扫描,对所述子链接的其他参数进行扫描,对所述子链接的所有参数扫描完毕后,对扫描任务中的其他子链接进行扫描。
7.根据权利要求6所述的系统,其特征在于,所述webserver,还用于在等待超时时间内没有收到扫描进程发送的确认完成信息时,将子链接在数据库中的标志位设置为等待分配。
8.根据权利要求1所述的系统,其特征在于, 该系统还包括:停止扫描接口 ; 所述消息服务器还包括停止爬取消息队列和停止扫描消息队列; 停止扫描接口,用于前端界面的停止任务按钮被触发后,判断所述扫描任务处于爬取过程还是扫描过程;如果所述扫描任务处于爬取过程,将生成的停止爬取消息发送到消息服务器的停止爬取消息队列;爬虫进程用于从停止爬取消息队列监听到停止爬取消息时,终止所述扫描任务的爬取操作; 如果扫描任务处于扫描过程,停止扫描接口用于将生成的停止扫描消息发送到停止扫描消息队列,扫描监听进程用于从停止扫描消息队列监听到停止扫描消息时,如果扫描任务的子链接还没有被分配到扫描进程,则将所述子链接设置为停止扫描;如果所述子链接已经被分配到扫描进程,则不停止所述子链接的扫描。
9.一种实现安全扫描的方法,其特征在于,开始任务接口将生成的任务消息上传到待爬取消息队列;爬虫进程依据在所述待爬取消息队列中监听到的任务消息中的待扫描任务入口 URL,得到所述待扫描任务入口 URL下的子链接,并发送扫描消息给待扫描消息队列;扫描监听进程在待扫描消息队列监听到所述扫描消息时,将所述子链接存储到数据库;该方法包括: web server收到扫描进程发送的http请求后,依据数据库存储的子链接生成扫描任务,将生成的扫描任务返回给扫描进程; 扫描进程对收到的子链接进行漏洞扫描,出现漏洞时生成漏洞数据,并依据漏洞数据生成扫描结果。
10.根据权利要求9所述的方法,其特征在于,爬虫进程得到所述待扫描任务入口URL下的子链接的方法为: 爬虫进程对待爬取消息队列进行监听,第一个监听到任务消息的爬虫进程获取所述任务消息,并在所述待爬取消息队列中将所述任务消息的标志位设置为正在处理; 爬虫进程对所述任务消息中的待扫描任务入口 URL进行爬取,得到所述待扫描任务入口 URL下的所有子链接。
11.根据权利要求10所述的方法,其特征在于,该方法还包括: 当爬虫进程对待扫描任务入口 URL进行爬取的过程中,所述爬虫进程所在的机器出现故障,待爬取消息队列将所述爬虫进程正在爬取的任务消息的标志位设置为等待处理。
12.根据权利要求9所述的方法,其特征在于,爬虫进程发送扫描消息给待扫描消息队列之前,该方法还包括: 爬虫进程依据得到的待扫描任务入口 URL的子链接生成爬虫结果,将保存爬虫结果的爬虫结果文件保存到缓存服务器。
13.根据权利要求9所述的方法,其特征在于,所述webserver将生成的扫描任务发送给扫描进程的方法为: 依据数据库中的子链接生成扫描任务,每个扫描任务中包含的子链接的数量等于预设的任务链接数; 依据每个扫描进程一次只发送一个扫描任务的策略,将生成的扫描任务返回给请求扫描任务的扫描进程; 将扫描任务中子链接在数据库中的标志位设置为正在扫描。
14.根据权利要求9所述的方法,其特征在于,扫描进程对收到的子链接进行漏洞扫描的方法为: 扫描进程从扫描任务中第一个子链接的第一个参数开始,将规则库中的参数值作为子链接中参数的参数值输入到子链接中,如果输入后报出漏洞则终止对所述参数的扫描,对所述子链接的其他参数进行扫描,对所述子链接的所有参数扫描完毕后,对扫描任务中的其他子链接进行扫描。
15.根据权利要求14所述的方法,其特征在于,该方法还包括: 如果web server在等待超时时间内没有收到扫描进程发送的确认完成信息,则将子链接在数据库中的标志位设置为等待分配。
16.根据权利要求9所述的方法,其特征在于,该方法还包括: 当前端界面的停止任务按钮被触发后,停止扫描接口判断所述扫描任务处于爬取过程还是扫描过程; 如果所述扫描任务处于 爬取过程,将生成的停止爬取消息发送到消息服务器的停止爬取消息队列,爬虫进程从停止爬取消息队列监听到停止爬取消息时,终止所述扫描任务的爬取操作; 如果扫描任务处于扫描过程,停止扫描接口将生成的停止扫描消息发送到停止扫描消息队列,扫描监听进程从停止扫描消息队列监听到停止扫描消息时,如果扫描任务的子链接还没有被分配到扫描进程,则将所述子链接设置为停止扫描;如果所述子链接已经被分配到扫描进程,则不停止所述子链接的扫描。
【文档编号】H04L29/06GK103856467SQ201210518679
【公开日】2014年6月11日 申请日期:2012年12月6日 优先权日:2012年12月6日
【发明者】李鸣雷, 王丹, 练坤梅 申请人:百度在线网络技术(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1