一種實現(xiàn)安全掃描的方法及分布式系統(tǒng)的制作方法
【專利摘要】本發(fā)明提供了一種實現(xiàn)安全掃描的方法及分布式系統(tǒng),該方法包括:開始任務接口將生成的任務消息上傳到待爬取消息隊列;爬蟲進程依據(jù)在所述待爬取消息隊列中監(jiān)聽到的任務消息中的待掃描任務入口URL,得到所述待掃描任務入口URL下的子鏈接,并發(fā)送掃描消息給待掃描消息隊列;掃描監(jiān)聽進程在待掃描消息隊列監(jiān)聽到所述掃描消息時,將所述子鏈接存儲到數(shù)據(jù)庫;web?server收到掃描進程發(fā)送的http請求后,依據(jù)數(shù)據(jù)庫存儲的子鏈接生成掃描任務,將生成的掃描任務返回給掃描進程;掃描進程對收到的子鏈接進行漏洞掃描,出現(xiàn)漏洞時生成漏洞數(shù)據(jù),并依據(jù)漏洞數(shù)據(jù)生成掃描結果。根據(jù)本發(fā)明提供的技術方案,能夠大大提高web安全測試的效率。
【專利說明】一種實現(xiàn)安全掃描的方法及分布式系統(tǒng)
【【技術領域】】
[0001]本發(fā)明涉及互聯(lián)網(wǎng)的安全測試技術,尤其涉及一種實現(xiàn)安全掃描方法及分布式系統(tǒng)。
【【背景技術】】
[0002]目前,對網(wǎng)站進行web安全測試的方法主要有以下三種方式:
[0003]第一種是由專門的安全測試人員對網(wǎng)站進行人工web安全測試。這種方式的缺點是:依賴于人工操作,測試周期較長,需要占用較多人力資源和時間資源,測試效率較低。
[0004]第二種是利用一些安全掃描工具對網(wǎng)站進行安全掃描,這種方式的缺點是:安全掃描工具都是客戶端或服務器模式,仍然需要依賴人工進行安裝和部署客戶端或服務器,需要占用較多人力資源和時間資源,測試效率較低。
[0005]第三種是安全測試人員通過web頁面提交掃描任務后,利用抓取URL模塊得到需要的子鏈接,然后進入漏洞掃描,最后生成掃描報告。這種方式的缺點是:抓取工具和掃描工具在同一設備下串行工作,這樣爬蟲工具和掃描工具勢必會出現(xiàn)相互等待和相互制約的情況,而且整個設備的穩(wěn)定性、容錯性和方便擴展性都將受到較大制約,測試效率較低?!?br/>【發(fā)明內容】
】
[0006]本發(fā)明提供了一種實現(xiàn)安全掃描的方法及分布式系統(tǒng),能夠大大提高web安全測試的效率。
[0007]本發(fā)明的具體技術方案如下:
[0008]根據(jù)本發(fā)明一優(yōu)選實施例,一種實現(xiàn)安全掃描的分布式系統(tǒng),包括:開始任務接口、包括待爬取消息隊列和待掃描消息隊列的消息服務器、包括一個以上爬蟲進程的爬蟲集群、包含掃描監(jiān)聽進程和數(shù)據(jù)庫的監(jiān)聽服務器、web服務器(server)和包括一個以上掃描進程的掃描集群;其中,
[0009]開始任務接口,用于將生成的任務消息上傳到待爬取消息隊列;
[0010]爬蟲進程,用于依據(jù)在所述待爬取消息隊列中監(jiān)聽到的任務消息中的待掃描任務入口 URL,得到所述待掃描任務入口 URL下的子鏈接,并發(fā)送掃描消息給待掃描消息隊列;
[0011]掃描監(jiān)聽進程,用于在待掃描消息隊列監(jiān)聽到所述掃描消息時,將所述子鏈接存儲到數(shù)據(jù)庫;
[0012]web server,用于收到掃描進程發(fā)送的http請求后,依據(jù)數(shù)據(jù)庫存儲的子鏈接生成掃描任務,將生成的掃描任務返回給掃描進程;
[0013]掃描進程,用于對收到的子鏈接進行漏洞掃描,出現(xiàn)漏洞時生成漏洞數(shù)據(jù),并依據(jù)漏洞數(shù)據(jù)生成掃描結果。
[0014]上述系統(tǒng)中,所述爬蟲進程在得到所述待掃描任務入口 URL下的子鏈接時,具體包括:
[0015]對待爬取消息隊列進行監(jiān)聽,第一個監(jiān)聽到任務消息的爬蟲進程獲取所述任務消息,并在所述待爬取消息隊列中將所述任務消息的標志位設置為正在處理;
[0016]對所述任務消息中的待掃描任務入口 URL進行爬取,得到所述待掃描任務入口URL下的所有子鏈接。
[0017]上述系統(tǒng)中,所述待爬取消息隊列,還用于當爬蟲進程對待掃描任務入口 URL進行爬取的過程中,所述爬蟲進程所在的機器出現(xiàn)故障時,將所述爬蟲進程正在爬取的任務消息的標志位設置為等待處理。
[0018]上述系統(tǒng)中,所述爬蟲進程,還用于依據(jù)得到的待掃描任務入口 URL的子鏈接生成爬蟲結果,將保存爬蟲結果的爬蟲結果文件保存到緩存服務器。
[0019]上述系統(tǒng)中,所述web server在將生成的掃描任務發(fā)送給掃描進程時,具體包括:
[0020]依據(jù)數(shù)據(jù)庫中的子鏈接生成掃描任務,每個掃描任務中包含的子鏈接的數(shù)量等于預設的任務鏈接數(shù);
[0021]依據(jù)每個掃描進程一次只發(fā)送一個掃描任務的策略,將生成的掃描任務返回給請求掃描任務的掃描進程;
[0022]將掃描任務中子鏈接在數(shù)據(jù)庫中的標志位設置為正在掃描。
[0023]上述系統(tǒng)中,所述掃描進程在對收到的子鏈接進行漏洞掃描時,具體包括:
[0024]從掃描任務中第一個子鏈接的第一個參數(shù)開始,將規(guī)則庫中的參數(shù)值作為子鏈接中參數(shù)的參數(shù)值輸入到子鏈接中,如果輸入后報出漏洞則終止對所述參數(shù)的掃描,對所述子鏈接的其他參數(shù)進行掃描,對所述子鏈接的所有參數(shù)掃描完畢后,對掃描任務中的其他子鏈接進行掃描。
[0025]上述系統(tǒng)中,所述web server,還用于在等待超時時間內沒有收到掃描進程發(fā)送的確認完成信息時,將子鏈接在數(shù)據(jù)庫中的標志位設置為等待分配。
[0026]上述系統(tǒng)中,該系統(tǒng)還包括:停止掃描接口 ;
[0027]所述消息服務器還包括停止爬取消息隊列和停止掃描消息隊列;
[0028]停止掃描接口,用于前端界面的停止任務按鈕被觸發(fā)后,判斷所述掃描任務處于爬取過程還是掃描過程;如果所述掃描任務處于爬取過程,將生成的停止爬取消息發(fā)送到消息服務器的停止爬取消息隊列;爬蟲進程用于從停止爬取消息隊列監(jiān)聽到停止爬取消息時,終止所述掃描任務的爬取操作;
[0029]如果掃描任務處于掃描過程,停止掃描接口用于將生成的停止掃描消息發(fā)送到停止掃描消息隊列,掃描監(jiān)聽進程用于從停止掃描消息隊列監(jiān)聽到停止掃描消息時,如果掃描任務的子鏈接還沒有被分配到掃描進程,則將所述子鏈接設置為停止掃描;如果所述子鏈接已經被分配到掃描進程,則不停止所述子鏈接的掃描。
[0030]一種實現(xiàn)安全掃描的方法,開始任務接口將生成的任務消息上傳到待爬取消息隊列;爬蟲進程依據(jù)在所述待爬取消息隊列中監(jiān)聽到的任務消息中的待掃描任務入口 URL,得到所述待掃描任務入口 URL下的子鏈接,并發(fā)送掃描消息給待掃描消息隊列;掃描監(jiān)聽進程在待掃描消息隊列監(jiān)聽到所述掃描消息時,將所述子鏈接存儲到數(shù)據(jù)庫;包括:
[0031]web server收到掃描進程發(fā)送的http請求后,依據(jù)數(shù)據(jù)庫存儲的子鏈接生成掃描任務,將生成的掃描任務返回給掃描進程;
[0032]掃描進程對收到的子鏈接進行漏洞掃描,出現(xiàn)漏洞時生成漏洞數(shù)據(jù),并依據(jù)漏洞數(shù)據(jù)生成掃描結果。
[0033]上述方法中,爬蟲進程得到所述待掃描任務入口 URL下的子鏈接的方法為:
[0034]爬蟲進程對待爬取消息隊列進行監(jiān)聽,第一個監(jiān)聽到任務消息的爬蟲進程獲取所述任務消息,并在所述待爬取消息隊列中將所述任務消息的標志位設置為正在處理;
[0035]爬蟲進程對所述任務消息中的待掃描任務入口 URL進行爬取,得到所述待掃描任務入口 URL下的所有子鏈接。
[0036]上述方法中,該方法還包括:
[0037]當爬蟲進程對待掃描任務入口 URL進行爬取的過程中,所述爬蟲進程所在的機器出現(xiàn)故障,待爬取消息隊列將所述爬蟲進程正在爬取的任務消息的標志位設置為等待處理。
[0038]上述方法中,爬蟲進程發(fā)送掃描消息給待掃描消息隊列之前,該方法還包括:
[0039]爬蟲進程依據(jù)得到的待掃描任務入口 URL的子鏈接生成爬蟲結果,將保存爬蟲結果的爬蟲結果文件保存到緩存服務器。
[0040]上述方法中,所述web server將生成的掃描任務發(fā)送給掃描進程的方法為:
[0041]依據(jù)數(shù)據(jù)庫中的子鏈接生成掃描任務,每個掃描任務中包含的子鏈接的數(shù)量等于預設的任務鏈接數(shù);
[0042]依據(jù)每個掃描進程一次只發(fā)送一個掃描任務的策略,將生成的掃描任務返回給請求掃描任務的掃描進程;
[0043]將掃描任務中子鏈接在數(shù)據(jù)庫中的標志位設置為正在掃描。
[0044]上述方法中,掃描進程對收到的子鏈接進行漏洞掃描的方法為:
[0045]掃描進程從掃描任務中第一個子鏈接的第一個參數(shù)開始,將規(guī)則庫中的參數(shù)值作為子鏈接中參數(shù)的參數(shù)值輸入到子鏈接中,如果輸入后報出漏洞則終止對所述參數(shù)的掃描,對所述子鏈接的其他參數(shù)進行掃描,對所述子鏈接的所有參數(shù)掃描完畢后,對掃描任務中的其他子鏈接進行掃描。
[0046]上述方法中,該方法還包括:
[0047]如果web server在等待超時時間內沒有收到掃描進程發(fā)送的確認完成信息,則將子鏈接在數(shù)據(jù)庫中的標志位設置為等待分配。
[0048]上述方法中,該方法還包括:
[0049]當前端界面的停止任務按鈕被觸發(fā)后,停止掃描接口判斷所述掃描任務處于爬取過程還是掃描過程;
[0050]如果所述掃描任務處于爬取過程,將生成的停止爬取消息發(fā)送到消息服務器的停止爬取消息隊列,爬蟲進程從停止爬取消息隊列監(jiān)聽到停止爬取消息時,終止所述掃描任務的爬取操作;
[0051]如果掃描任務處于掃描過程,停止掃描接口將生成的停止掃描消息發(fā)送到停止掃描消息隊列,掃描監(jiān)聽進程從停止掃描消息隊列監(jiān)聽到停止掃描消息時,如果掃描任務的子鏈接還沒有被分配到掃描進程,則將所述子鏈接設置為停止掃描;如果所述子鏈接已經被分配到掃描進程,則不停止所述子鏈接的掃描。
[0052]由以上技術方案可以看出,本發(fā)明提供的具有以下有益效果:
[0053]爬蟲集群和掃描集群作為兩個相互獨立、相互隔離的單獨的分布式集群,互不制約、互不影響,能夠最大限度的利用分布式集群的并行處理能力,大大提高web安全掃描的效率。
【【專利附圖】
【附圖說明】】
[0054]圖1是本發(fā)明實現(xiàn)安全掃描的分布式系統(tǒng)的優(yōu)選實施例的結構示意圖;
[0055]圖2是本發(fā)明實現(xiàn)安全掃描的方法的優(yōu)選實施例的流程示意圖。
【【具體實施方式】】
[0056]本發(fā)明的基本思想是:開始任務接口將生成的任務消息上傳到待爬取消息隊列;爬蟲進程依據(jù)在所述待爬取消息隊列中監(jiān)聽到的任務消息中的待掃描任務入口 URL,得到所述待掃描任務入口 URL下的子鏈接,并發(fā)送掃描消息給待掃描消息隊列;掃描監(jiān)聽進程在待掃描消息隊列監(jiān)聽到所述掃描消息時,將所述子鏈接存儲到數(shù)據(jù)庫;《eb server收到掃描進程發(fā)送的http請求后,依據(jù)數(shù)據(jù)庫存儲的子鏈接生成掃描任務,將生成的掃描任務返回給掃描進程;掃描進程對收到的子鏈接進行漏洞掃描,出現(xiàn)漏洞時生成漏洞數(shù)據(jù),并依據(jù)漏洞數(shù)據(jù)生成掃描結果。
[0057]為了使本發(fā)明的目的、技術方案和優(yōu)點更加清楚,下面結合附圖和具體實施例對本發(fā)明進行詳細描述。
[0058]本發(fā)明提供一種實現(xiàn)安全掃描的分布式系統(tǒng),圖1是本發(fā)明實現(xiàn)安全掃描的分布式系統(tǒng)的優(yōu)選實施例的結構示意圖,如圖1所示,該系統(tǒng)包括:前端界面、開始任務接口、停止掃描接口、消息服務器、爬蟲集群、監(jiān)聽服務器、web服務器server和掃描集群。
[0059]其中,消息服務器包括待爬取消息隊列、待掃描消息隊列、停止爬取消息隊列和停止掃描消息隊列。
[0060]爬蟲集群包括一個以上機器,每個機器包括一個以上爬蟲進程。
[0061]監(jiān)聽服務器包括掃描監(jiān)聽進程和數(shù)據(jù)庫。
[0062]掃描集群包括一個以上機器,每個機器包括一個以上掃描進程。
[0063]基于上述系統(tǒng),本發(fā)明還提供一種實現(xiàn)安全掃描的方法,圖2是本發(fā)明實現(xiàn)安全掃描的方法的優(yōu)選實施例的流程示意圖,如圖2所示,該優(yōu)選實施例包括以下步驟:
[0064]步驟201,前端界面接收用戶提交的掃描任務信息,開始任務接口依據(jù)前端界面接收的掃描任務信息生成任務消息,將該任務消息發(fā)送到消息服務器的待爬取消息隊列。
[0065]具體的,前端界面向用戶提供選項框和輸入框,用來接收用戶提交的掃描任務信息,提交的掃描任務信息包括以下內容:待掃描任務入口 URL、用戶名、密碼、登錄類型、爬取層級和終端類型;其中,如果爬蟲集群對待掃描任務入口 URL進行爬取時,該待掃描任務入口 URL下的子鏈接需要登錄后才能爬取,則需要用戶提交用戶名和密碼,如果不存在需要登錄的子鏈接,則用戶名和密碼為空;如果待掃描任務入口 URL下的子鏈接數(shù)量巨大,則可以依據(jù)爬取層級,只獲取待掃描任務入口 URL下該爬取層級的子鏈接;終端類型包括PC終端、移動終端等;用戶在輸入掃描任務信息后可以觸發(fā)前端界面提供的提交按鈕來提交掃描任務給前端界面。
[0066]前端界面收到用戶提交的掃描任務信息后,調用開始任務接口,該開始任務接口依據(jù)前端界面接收的掃描任務信息生成任務消息;例如,生成的任務消息可以為:[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,但是一個掃描任務可能會執(zhí)行多次掃描操作,因此,對應每次掃描操作將生成一個任務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 ;開始任務接口將生成的任務消息發(fā)送到消息服務器的待爬取消息隊列。
[0069]步驟202,爬蟲集群中的爬蟲進程在所述待爬取消息隊列中監(jiān)聽到任務消息時,對該任務消息中待掃描任務入口 URL進行爬取,得到待掃描任務入口 URL下的所有子鏈接。
[0070]具體的,爬蟲集群中包括一個以上機器,每個機器包括一個以上爬蟲進程,每個爬蟲進程都對消息服務器中的待爬取消息隊列進行監(jiān)聽;例如,爬蟲集群中可以有50個機器,每個機器上有10個爬蟲進程,每個爬蟲進程都可以作為一個消費者對任務消息進行消費,這樣就有500個爬蟲進程監(jiān)聽待爬取消息隊列,通過增加爬蟲集群中的機器就能夠方便擴展爬蟲集群的并行爬取能力,使得爬蟲集群具有較高的擴展性和較高的處理能力。
[0071]當爬蟲進程在待爬取消息隊列中監(jiān)聽到任務消息時,第一個監(jiān)聽到該任務消息的爬蟲進程將獲取該任務消息,爬蟲進程對該任務消息中的待掃描任務入口 URL進行爬??;同時,該爬蟲進程在獲取到任務消息后,會在待爬取消息隊列中將該任務消息的標志位設置為正在處理,表示已經有爬蟲進程處理該任務消息,這樣,其他爬蟲進程就不會對該任務消息進行重復爬取操作;當爬蟲進程對待掃描任務入口 URL進行爬取的過程中,如果該爬蟲進程所在的機器出現(xiàn)故障,導致該爬蟲進程與待爬取消息隊列斷開連接,則待爬取消息隊列在檢測到該情況后將該爬蟲進程正在處理的任務消息的標志位設置為等待處理,這樣,其他的爬蟲進程就可以對該任務消息進行爬取操作了,從而提高爬蟲集群的容錯性;爬蟲進程對任務消息中的待掃描任務入口 URL的爬取操作完畢后,得到該待掃描任務入口URL下的所有子鏈接,爬蟲進程向待爬取消息隊列返回一個ACK消息,用于通知待爬取消息隊列該任務消息已經爬取完畢,待爬取消息隊列就可以將該任務消息刪除,如此,可以保證掃描任務不會重復且不會丟失。
[0072]本優(yōu)選實施例中,由于爬蟲進程爬取操作的時間相對較短,因此將一個任務消息交由一個爬蟲進程單獨進行處理即可。
[0073]步驟203,所述爬蟲進程將得到的子鏈接保存到緩存服務器,并發(fā)送掃描消息給消息服務器的待掃描消息隊列;監(jiān)聽服務器中的掃描監(jiān)聽進程從待掃描消息隊列監(jiān)聽到掃描消息時,將所述子鏈接存儲到監(jiān)聽服務器中的數(shù)據(jù)庫。
[0074]具體的,爬蟲集群中的爬蟲進程對任務消息中的待掃描任務入口 URL的爬取操作完畢后,依據(jù)爬取得到的該待掃描任務入口 URL的子鏈接生成爬蟲結果,該爬蟲結果包括待掃描任務入口 URL的子鏈接、對應的http請求類型和cookie ;爬蟲進程將爬蟲結果實時保存到緩存服務器的爬蟲結果文件中,該爬蟲結果文件中保存爬蟲結果,且該爬蟲結果文件以掃描任務的任務ID命名,如文件名為id.txt。
[0075]爬蟲集群存儲好爬蟲結果后,就完成了自身的爬取操作,向消息服務器的待掃描消息隊列發(fā)送掃描消息,該掃描消息中攜帶爬蟲結果文件的文件名,例如,該掃描消息可以為:msg={’ id’:1d, ’ project_id’:project_id, ’ url’:url}。
[0076]監(jiān)聽服務器中的掃描監(jiān)聽進程對待掃描消息隊列進行監(jiān)聽,當從待掃描消息隊列監(jiān)聽到掃描消息時,依據(jù)掃描消息中的任務ID從緩存服務器中找到對應的爬蟲結果文件,并將任務ID、項目ID和爬蟲結果文件中的所有子鏈接拷貝到監(jiān)聽服務器中的數(shù)據(jù)庫,由該數(shù)據(jù)庫對子鏈接進行存儲,并在數(shù)據(jù)庫中將這些子鏈接的標志位設置為等待分配init,表示這些子鏈接可以被分配到掃描進程進行掃描,該標志位還可以設置為正在掃描scanning、停止掃描stop、掃描完畢complete,所述scanning表示子鏈接正在被掃描進程掃描,stop表示子鏈接被停止掃描,不能分配給掃描進程,complete表示子鏈接掃描完畢。
[0077]步驟204, web server收到掃描集群中的掃描進程發(fā)送的http請求后,依據(jù)數(shù)據(jù)庫中的子鏈接生成掃描任務,所述掃描任務中包括的子鏈接數(shù)量等于預設任務鏈接數(shù),webserver將生成的掃描任務發(fā)送給掃描進程。
[0078]具體的,掃描集群中包括一個以上機器,每個機器包括一個以上掃描進程,每個掃描進程都周期性的向web server)發(fā)送http請求,用于向web server請求掃描任務。例如,掃描集群中可以有6個機器,每個機器上啟動10個掃描進程,這樣一共有60個掃描進程,這些掃描進程可以同時執(zhí)行掃描任務,通過增加掃描集群中的機器就能夠方便擴展掃描集群的并行掃描能力,使得掃描集群具有較高的擴展性。
[0079]web server收到掃描集群中的掃描進程發(fā)送的http請求后,依據(jù)預設的任務鏈接數(shù)對數(shù)據(jù)庫中的子鏈接進行劃分,生成一個以上掃描任務,每個掃描任務中包含的子鏈接的數(shù)量等于預設的任務鏈接數(shù),web server依據(jù)每個掃描進程一次只發(fā)送一個掃描任務的策略,將生成的掃描任務返回給請求掃描任務的掃描進程;其中,任務鏈接數(shù)的數(shù)值是可以配置的,可以依據(jù)掃描集群中單個機器的處理能力配置該任務鏈接數(shù),該任務鏈接數(shù)用于限制發(fā)送給掃描進程的掃描任務中子鏈接的數(shù)量;如果數(shù)據(jù)庫中沒有子鏈接,則webserver收到掃描進程的http請求后,忽略該http請求;web server在將掃描任務返回給掃描進程后,將掃描任務中子鏈接在數(shù)據(jù)庫中的標志位設置為scanning。
[0080]例如,web server以每20個URL為一個掃描任務,將數(shù)據(jù)庫中的子鏈接分成多個掃描任務,每個掃描任務中有20個URL, web server將生成的掃描任務分發(fā)到多個掃描進程,如此,可以達到掃描負載均衡的目的,一個掃描任務會被劃分為多個掃描子任務,從而分配給多個掃描進程,多個掃描進程并行執(zhí)行掃描操作,提高掃描效率;同時每個掃描進程上需要掃描的子鏈接的數(shù)量相同,因此每個掃描進程所承擔的負載相同。
[0081]步驟205,掃描進程對收到的子鏈接進行漏洞掃描,出現(xiàn)漏洞時生成漏洞數(shù)據(jù),并依據(jù)漏洞數(shù)據(jù)生成掃描結果。
[0082]具體的,掃描進程收到web server分配的掃描任務后,對其中的第一個子鏈接的第一個參數(shù)開始對掃描任務中的子鏈接依次進行掃描,將規(guī)則庫中的參數(shù)值作為子鏈接中參數(shù)的參數(shù)值輸入到子鏈接中,如果輸入后報出漏洞則終止對該參數(shù)進行掃描,實時生成對應的漏洞數(shù)據(jù)寫入數(shù)據(jù)庫;同理,對該子鏈接的其他參數(shù)進行掃描,對該子鏈接的所有參數(shù)掃描完畢后,對掃描任務中的其他子鏈接進行掃描,以此類推,最終對掃描任務中的所有子鏈接都掃描完畢,并得到相應的漏洞數(shù)據(jù)。
[0083]掃描進程對子鏈接進行掃描的過程中,每掃描完一個子鏈接就可以向Webserver返回一個確認完成信息,其中攜帶該子鏈接的任務ID和項目ID ;webserver就可以將該子鏈接在數(shù)據(jù)庫中的標志位設置為complete ;如果Webserver在等待超時時間內沒有收到掃描進程發(fā)送的確認完成信息,則認為該子鏈接沒有掃描成功,掃描進程所在的機器出現(xiàn)異常,則將該子鏈接在數(shù)據(jù)庫中的標志位由scanning重新設置為init,使得該子鏈接可以再被分配到其他掃描進程進行掃描,從而提高掃描集群的容錯性。同時,掃描進程還可以將掃描進度實時同步到前端界面,掃描進度包括已完成掃描子鏈接的個數(shù)和待掃描子鏈接的個數(shù),還可以將生成的漏洞數(shù)據(jù)實時同步到前端界面。
[0084]掃描完畢后,掃描進程依據(jù)數(shù)據(jù)庫中保存的漏洞數(shù)據(jù)生成掃描結果報告,將該掃描結果報告通過前端界面顯示給用戶;其中,掃描結果報告包括以下內容:出現(xiàn)漏洞的子鏈接、子鏈接中出現(xiàn)漏洞的參數(shù)、漏洞類型、風險級別、漏洞的具體描述;所述風險級別包括聞、中、低和未知。
[0085]例如,掃描進程中一般有很多漏洞,如跨站腳本攻擊(XSS、Cross-sitescripting)、結構化查詢語言結構(SQL, Structured Query Language)注入攻擊等,以XSS為例,得到掃描任務后,從第一個子鏈接的第一個參數(shù)開始,將xsslib.txt規(guī)則庫里的參數(shù)值依次作為第一個參數(shù)的參數(shù)值輸入到第一個子連接中,如果報出漏洞,則終止第一個參數(shù)的掃描,生成漏洞數(shù)據(jù)后,對第一個子鏈接的第二個參數(shù)進行掃描,將xsslib.txt規(guī)則庫里的參數(shù)值依次作為第二個參數(shù)的參數(shù)值輸入到第一個子連接中,同理,遇到漏洞則終止掃描,并生成漏洞數(shù)據(jù),第一個子鏈接的所有參數(shù)掃描完畢后對第二個子鏈接以同樣的方法進行掃描。
[0086]該方法還可以包括:
[0087]前端界面在用戶提交掃描任務后,會向用戶顯示已經提交的掃描任務及相關信息,如掃描任務、當前掃描進度、停止按鈕等;如果用戶想要停止該掃描任務,可以觸發(fā)該停止任務按鈕,前端界面的停止任務按鈕被觸發(fā)后,調用數(shù)據(jù)庫提供的停止掃描接口,該停止掃描接口依據(jù)數(shù)據(jù)庫中是否有該掃描任務的掃描任務號,判斷該掃描任務處于爬取過程還是掃描過程。
[0088]如果數(shù)據(jù)庫中沒有掃描任務號,表示該掃描任務處于爬取過程,因此停止掃描接口生成停止爬取消息,該停止爬取消息可以為:msg={’ id,:1d, ’ project_id’:project_id};停止掃描接口將該停止爬取消息發(fā)送到消息服務器的停止爬取消息隊列,該停止爬取消息隊列為一對多機制,停止爬取消息隊列中的停止爬取消息可以同時被一個以上爬蟲進程處理,爬蟲集群中的爬蟲進程采用多線程機制,部分線程進行子鏈接的爬取操作,采用一個線程對停止爬取消息隊列進行監(jiān)聽,當監(jiān)聽到有停止爬取消息時,爬蟲集群中的每個爬蟲進程都需要判斷該停止爬取消息中的任務ID與自身當前爬取的任務消息中的任務ID是否一致,如果一致,則爬蟲進程終止自身當前的爬取操作,然后向停止爬取消息隊列發(fā)送一個ACK消息,停止爬取消息隊列收到ACK消息后,將該停止爬取消息在停止爬取消息隊列中刪除。
[0089]如果數(shù)據(jù)庫已經生成掃描任務號,表示該掃描任務處于掃描過程,因此停止掃描接口生成停止掃描消息,該停止掃描消息可以為:msg={’ id’:1d, ’ project_id’:project_id};停止掃描接口將該停止掃描消息發(fā)送到停止掃描消息隊列,掃描監(jiān)聽進程對停止掃描消息隊列進行監(jiān)聽,監(jiān)聽到停止掃描消息時,依據(jù)其中的任務ID和項目ID判斷數(shù)據(jù)庫中對應的子鏈接的標志位,如果標志位是init,表示該掃描任務的子鏈接還沒有被web server分配到掃描進程,則將該子鏈接的標志位設置為stop,表示該子鏈接不能進行掃描,從而實現(xiàn)停止掃描任務;如果標志位是scanning,表示該掃描任務的子鏈接已經被分配到掃描進程進行掃描,則不能停止該子鏈接的掃描,不需要進一步處理,任由掃描進程將該掃描任務掃描完畢。
[0090]為實現(xiàn)上述方法,如圖1所示,該實現(xiàn)安全掃描的分布式系統(tǒng)中:
[0091]開始任務接口,用于將生成的任務消息上傳到待爬取消息隊列;
[0092]爬蟲進程,用于依據(jù)在所述待爬取消息隊列中監(jiān)聽到的任務消息中的待掃描任務入口 URL,得到所述待掃描任務入口 URL下的子鏈接,并發(fā)送掃描消息給待掃描消息隊列;
[0093]掃描監(jiān)聽進程,用于在待掃描消息隊列監(jiān)聽到所述掃描消息時,將所述子鏈接存儲到數(shù)據(jù)庫;
[0094]web server,用于收到掃描進程發(fā)送的http請求后,依據(jù)數(shù)據(jù)庫存儲的子鏈接生成掃描任務,將生成的掃描任務返回給掃描進程;
[0095]掃描進程,用于對收到的子鏈接進行漏洞掃描,出現(xiàn)漏洞時生成漏洞數(shù)據(jù),并依據(jù)漏洞數(shù)據(jù)生成掃描結果。
[0096]其中,所述爬蟲進程在得到所述待掃描任務入口 URL下的子鏈接時,具體包括:
[0097]對待爬取消息隊列進行監(jiān)聽,第一個監(jiān)聽到任務消息的爬蟲進程獲取所述任務消息,并在所述待爬取消息隊列中將所述任務消息的標志位設置為正在處理;
[0098]對所述任務消息中的待掃描任務入口 URL進行爬取,得到所述待掃描任務入口URL下的所有子鏈接。
[0099]其中,所述待爬取消息隊列,還用于當爬蟲進程對待掃描任務入口 URL進行爬取的過程中,所述爬蟲進程所在的機器出現(xiàn)故障時,將所述爬蟲進程正在爬取的任務消息的標志位設置為等待處理。
[0100]其中,所述爬蟲進程,還用于依據(jù)得到的待掃描任務入口 URL的子鏈接生成爬蟲結果,將保存爬蟲結果的爬蟲結果文件保存到緩存服務器。
[0101]其中,所述web server在將生成的掃描任務發(fā)送給掃描進程時,具體包括:
[0102]依據(jù)數(shù)據(jù)庫中的子鏈接生成掃描任務,每個掃描任務中包含的子鏈接的數(shù)量等于預設的任務鏈接數(shù);
[0103]依據(jù)每個掃描進程一次只發(fā)送一個掃描任務的策略,將生成的掃描任務返回給請求掃描任務的掃描進程;
[0104]將掃描任務中子鏈接在數(shù)據(jù)庫中的標志位設置為正在掃描。
[0105]其中,所述掃描進程在對收到的子鏈接進行漏洞掃描時,具體包括:
[0106]從掃描任務中第一個子鏈接的第一個參數(shù)開始,將規(guī)則庫中的參數(shù)值作為子鏈接中參數(shù)的參數(shù)值輸入到子鏈接中,如果輸入后報出漏洞則終止對所述參數(shù)的掃描,對所述子鏈接的其他參數(shù)進行掃描,對所述子鏈接的所有參數(shù)掃描完畢后,對掃描任務中的其他子鏈接進行掃描。[0107]其中,所述web server,還用于在等待超時時間內沒有收到掃描進程發(fā)送的確認完成信息時,將子鏈接在數(shù)據(jù)庫中的標志位設置為等待分配。
[0108]其中,停止掃描接口,還用于前端界面的停止任務按鈕被觸發(fā)后,判斷所述掃描任務處于爬取過程還是掃描過程;如果所述掃描任務處于爬取過程,將生成的停止爬取消息發(fā)送到消息服務器的停止爬取消息隊列;爬蟲進程用于從停止爬取消息隊列監(jiān)聽到停止爬取消息時,終止所述掃描任務的爬取操作;
[0109]如果掃描任務處于掃描過程,停止掃描接口用于將生成的停止掃描消息發(fā)送到停止掃描消息隊列,掃描監(jiān)聽進程用于從停止掃描消息隊列監(jiān)聽到停止掃描消息時,如果掃描任務的子鏈接還沒有被分配到掃描進程,則將所述子鏈接設置為停止掃描;如果所述子鏈接已經被分配到掃描進程,則不停止所述子鏈接的掃描。
[0110]本發(fā)明的上述技術方案,爬蟲集群和掃描集群作為兩個相互獨立、相互隔離的單獨的分布式集群,互不制約、互不影響,能夠最大限度的利用分布式集群的并行處理能力,大大提高Web安全掃描的效率;而且,掃描集群和爬蟲集群能夠各自配置負載均衡策略和容錯策略,實現(xiàn)起來簡單靈活。掃描集群和爬蟲集群還具有各自的擴展性,因此,整個分布式系統(tǒng)具有聞擴展性、聞穩(wěn)定性和聞容錯性。
[0111]以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內,所做的任何修改、等同替換、改進等,均應包含在本發(fā)明保護的范圍之內。
【權利要求】
1.一種實現(xiàn)安全掃描的分布式系統(tǒng),其特征在于,該系統(tǒng)包括:開始任務接口、包括待爬取消息隊列和待掃描消息隊列的消息服務器、包括一個以上爬蟲進程的爬蟲集群、包含掃描監(jiān)聽進程和數(shù)據(jù)庫的監(jiān)聽服務器、web服務器server和包括一個以上掃描進程的掃描集群;其中, 開始任務接口,用于將生成的任務消息上傳到待爬取消息隊列; 爬蟲進程,用于依據(jù)在所述待爬取消息隊列中監(jiān)聽到的任務消息中的待掃描任務入口URL,得到所述待掃描任務入口 URL下的子鏈接,并發(fā)送掃描消息給待掃描消息隊列; 掃描監(jiān)聽進程,用于在待掃描消息隊列監(jiān)聽到所述掃描消息時,將所述子鏈接存儲到數(shù)據(jù)庫; web server,用于收到掃描進程發(fā)送的http請求后,依據(jù)數(shù)據(jù)庫存儲的子鏈接生成掃描任務,將生成的掃描任務返回給掃描進程; 掃描進程,用于對收到的子鏈接進行漏洞掃描,出現(xiàn)漏洞時生成漏洞數(shù)據(jù),并依據(jù)漏洞數(shù)據(jù)生成掃描結果。
2.根據(jù)權利要求1所述的系統(tǒng),其特征在于,所述爬蟲進程在得到所述待掃描任務入口 URL下的子鏈接時,具體包括: 對待爬取消息隊列進行監(jiān)聽,第一個監(jiān)聽到任務消息的爬蟲進程獲取所述任務消息,并在所述待爬取消息隊列中將所述任務消息的標志位設置為正在處理; 對所述任務消息中的待掃描任務入口 URL進行爬取,得到所述待掃描任務入口 URL下的所有子鏈接。
3.根據(jù)權利要求2所述的系統(tǒng),其特 征在于, 所述待爬取消息隊列,還用于當爬蟲進程對待掃描任務入口 URL進行爬取的過程中,所述爬蟲進程所在的機器出現(xiàn)故障時,將所述爬蟲進程正在爬取的任務消息的標志位設置為等待處理。
4.根據(jù)權利要求1所述的系統(tǒng),其特征在于,所述爬蟲進程,還用于依據(jù)得到的待掃描任務入口 URL的子鏈接生成爬蟲結果,將保存爬蟲結果的爬蟲結果文件保存到緩存服務器。
5.根據(jù)權利要求1所述的系統(tǒng),其特征在于,所述webserver在將生成的掃描任務發(fā)送給掃描進程時,具體包括: 依據(jù)數(shù)據(jù)庫中的子鏈接生成掃描任務,每個掃描任務中包含的子鏈接的數(shù)量等于預設的任務鏈接數(shù); 依據(jù)每個掃描進程一次只發(fā)送一個掃描任務的策略,將生成的掃描任務返回給請求掃描任務的掃描進程; 將掃描任務中子鏈接在數(shù)據(jù)庫中的標志位設置為正在掃描。
6.根據(jù)權利要求1所述的系統(tǒng),其特征在于,所述掃描進程在對收到的子鏈接進行漏洞掃描時,具體包括: 從掃描任務中第一個子鏈接的第一個參數(shù)開始,將規(guī)則庫中的參數(shù)值作為子鏈接中參數(shù)的參數(shù)值輸入到子鏈接中,如果輸入后報出漏洞則終止對所述參數(shù)的掃描,對所述子鏈接的其他參數(shù)進行掃描,對所述子鏈接的所有參數(shù)掃描完畢后,對掃描任務中的其他子鏈接進行掃描。
7.根據(jù)權利要求6所述的系統(tǒng),其特征在于,所述webserver,還用于在等待超時時間內沒有收到掃描進程發(fā)送的確認完成信息時,將子鏈接在數(shù)據(jù)庫中的標志位設置為等待分配。
8.根據(jù)權利要求1所述的系統(tǒng),其特征在于, 該系統(tǒng)還包括:停止掃描接口 ; 所述消息服務器還包括停止爬取消息隊列和停止掃描消息隊列; 停止掃描接口,用于前端界面的停止任務按鈕被觸發(fā)后,判斷所述掃描任務處于爬取過程還是掃描過程;如果所述掃描任務處于爬取過程,將生成的停止爬取消息發(fā)送到消息服務器的停止爬取消息隊列;爬蟲進程用于從停止爬取消息隊列監(jiān)聽到停止爬取消息時,終止所述掃描任務的爬取操作; 如果掃描任務處于掃描過程,停止掃描接口用于將生成的停止掃描消息發(fā)送到停止掃描消息隊列,掃描監(jiān)聽進程用于從停止掃描消息隊列監(jiān)聽到停止掃描消息時,如果掃描任務的子鏈接還沒有被分配到掃描進程,則將所述子鏈接設置為停止掃描;如果所述子鏈接已經被分配到掃描進程,則不停止所述子鏈接的掃描。
9.一種實現(xiàn)安全掃描的方法,其特征在于,開始任務接口將生成的任務消息上傳到待爬取消息隊列;爬蟲進程依據(jù)在所述待爬取消息隊列中監(jiān)聽到的任務消息中的待掃描任務入口 URL,得到所述待掃描任務入口 URL下的子鏈接,并發(fā)送掃描消息給待掃描消息隊列;掃描監(jiān)聽進程在待掃描消息隊列監(jiān)聽到所述掃描消息時,將所述子鏈接存儲到數(shù)據(jù)庫;該方法包括: web server收到掃描進程發(fā)送的http請求后,依據(jù)數(shù)據(jù)庫存儲的子鏈接生成掃描任務,將生成的掃描任務返回給掃描進程; 掃描進程對收到的子鏈接進行漏洞掃描,出現(xiàn)漏洞時生成漏洞數(shù)據(jù),并依據(jù)漏洞數(shù)據(jù)生成掃描結果。
10.根據(jù)權利要求9所述的方法,其特征在于,爬蟲進程得到所述待掃描任務入口URL下的子鏈接的方法為: 爬蟲進程對待爬取消息隊列進行監(jiān)聽,第一個監(jiān)聽到任務消息的爬蟲進程獲取所述任務消息,并在所述待爬取消息隊列中將所述任務消息的標志位設置為正在處理; 爬蟲進程對所述任務消息中的待掃描任務入口 URL進行爬取,得到所述待掃描任務入口 URL下的所有子鏈接。
11.根據(jù)權利要求10所述的方法,其特征在于,該方法還包括: 當爬蟲進程對待掃描任務入口 URL進行爬取的過程中,所述爬蟲進程所在的機器出現(xiàn)故障,待爬取消息隊列將所述爬蟲進程正在爬取的任務消息的標志位設置為等待處理。
12.根據(jù)權利要求9所述的方法,其特征在于,爬蟲進程發(fā)送掃描消息給待掃描消息隊列之前,該方法還包括: 爬蟲進程依據(jù)得到的待掃描任務入口 URL的子鏈接生成爬蟲結果,將保存爬蟲結果的爬蟲結果文件保存到緩存服務器。
13.根據(jù)權利要求9所述的方法,其特征在于,所述webserver將生成的掃描任務發(fā)送給掃描進程的方法為: 依據(jù)數(shù)據(jù)庫中的子鏈接生成掃描任務,每個掃描任務中包含的子鏈接的數(shù)量等于預設的任務鏈接數(shù); 依據(jù)每個掃描進程一次只發(fā)送一個掃描任務的策略,將生成的掃描任務返回給請求掃描任務的掃描進程; 將掃描任務中子鏈接在數(shù)據(jù)庫中的標志位設置為正在掃描。
14.根據(jù)權利要求9所述的方法,其特征在于,掃描進程對收到的子鏈接進行漏洞掃描的方法為: 掃描進程從掃描任務中第一個子鏈接的第一個參數(shù)開始,將規(guī)則庫中的參數(shù)值作為子鏈接中參數(shù)的參數(shù)值輸入到子鏈接中,如果輸入后報出漏洞則終止對所述參數(shù)的掃描,對所述子鏈接的其他參數(shù)進行掃描,對所述子鏈接的所有參數(shù)掃描完畢后,對掃描任務中的其他子鏈接進行掃描。
15.根據(jù)權利要求14所述的方法,其特征在于,該方法還包括: 如果web server在等待超時時間內沒有收到掃描進程發(fā)送的確認完成信息,則將子鏈接在數(shù)據(jù)庫中的標志位設置為等待分配。
16.根據(jù)權利要求9所述的方法,其特征在于,該方法還包括: 當前端界面的停止任務按鈕被觸發(fā)后,停止掃描接口判斷所述掃描任務處于爬取過程還是掃描過程; 如果所述掃描任務處于 爬取過程,將生成的停止爬取消息發(fā)送到消息服務器的停止爬取消息隊列,爬蟲進程從停止爬取消息隊列監(jiān)聽到停止爬取消息時,終止所述掃描任務的爬取操作; 如果掃描任務處于掃描過程,停止掃描接口將生成的停止掃描消息發(fā)送到停止掃描消息隊列,掃描監(jiān)聽進程從停止掃描消息隊列監(jiān)聽到停止掃描消息時,如果掃描任務的子鏈接還沒有被分配到掃描進程,則將所述子鏈接設置為停止掃描;如果所述子鏈接已經被分配到掃描進程,則不停止所述子鏈接的掃描。
【文檔編號】H04L29/06GK103856467SQ201210518679
【公開日】2014年6月11日 申請日期:2012年12月6日 優(yōu)先權日:2012年12月6日
【發(fā)明者】李鳴雷, 王丹, 練坤梅 申請人:百度在線網(wǎng)絡技術(北京)有限公司