4 掃瞄節點 分布式漏洞掃瞄系統設計與實現

2021-07-02 21:58:46 字數 2911 閱讀 2632

四• 掃瞄節點

4.1 概述

此文原出自【愛運維社群】: 

掃瞄節點(scanner)是整個分布式掃瞄系統的終端節點,負責具體漏洞掃瞄。由於我們的漏洞掃瞄系統需要集中許多不同的掃瞄工具,在這些工具當中,有的是只能執行在windows上,比如wvs,而有的則是只能執行在linux上,比如openvas,而有的則是可以同時在兩種系統上執行,比如nmap。所以,為了能夠更好的地集中這些工具,就必須解決系統的異構問題,達到同時支援linux掃瞄節點和windows掃瞄節點,才能更大地發揮集中掃瞄平台的優勢。

4.2 掃瞄框架

4.2.1 系統異構

出於系統設計的需求,掃瞄節點必須需要同時執行在linux和windows節點,所以我們在設計掃瞄節點的框架時,必須要考慮到系統的異構問題。此外,為了減少**的開發時間和運維工作量,我們不希望在linux開發一套掃瞄系統,而在windows上開發另外一套系統,這樣無疑會增加我們的開發和運維成本,而且對以後的公升級都是比較棘手的。所以,我們採用指令碼語言python開發整個掃瞄系統,所有的掃瞄工具都是採用外掛程式的形式封裝,然後根據掃瞄任務動態載入。舉個例子,掃瞄系統啟動的時候,它是不會載入任何外掛程式的,保證系統能夠同時執行在linux和windows節點上,當使用者發起的乙個web掃瞄任務時,那麼該任務會被傳送到windows訊息佇列,windows掃瞄節點會從該訊息佇列中提取任務,然後動態載入wvs外掛程式,然後呼叫wvs進行漏洞掃瞄。同理,假如使用者發起的主機掃瞄任務,那麼該任務就會傳送到linux訊息佇列,linux掃瞄節點會從該訊息佇列中提取任務,然後動態載入openvas外掛程式,然後呼叫openvas進行漏洞掃瞄。如此一來,同乙個掃瞄系統可以同時相容windows和linux系統,就很好地解決系統的異構問題。

4.2.2 框架結構

在【訊息通訊】章節中,整個分布式系統主要是通過訊息佇列(activemq)來進行掃瞄任務的分發。同時,為解決系統異構問題,我們使用了windows和linux兩個訊息佇列,用於不同型別的任務分發,掃瞄節點的框架如下圖4-1所示。

圖4-1 掃瞄節點的框架結構

從上圖中,我們可以看到掃瞄節點存在好幾個不同型別的執行緒,分別負責不同的功能,其功能如下表3-1所示。

表3-1 掃瞄節點內部主要的執行緒和程序功能表

對照圖3-1和表3-1,我們可以看出,掃瞄節點的內部有任務佇列【task queue】和結果佇列【result queue】兩個佇列,而接收任務執行緒【receive mq thread】首先從activemq中獲取掃瞄任務,然後將其推入到內部的任務佇列【task queue】中,主線程【main porcess thread】會從內部佇列【task queue】中提取掃瞄任務訊息,然後根據任務訊息啟動乙個掃瞄線程【scan thread】, 而掃瞄線程【scan thread】啟動之後會建立乙個外掛程式程序【plugin process】,該程序會呼叫nmap, wvs,openvas等相關工具,待執行結束後會將掃瞄的結果推入到結果佇列【result queue】。結果同步執行緒【sync result thread】從結果佇列【result queue】中獲取掃瞄結果,然後通過web的rest介面同步到**資料庫。而查詢任務狀態執行緒【query task status thread】則是周期性地通過web的rest介面查詢當前掃瞄任務的狀態,如果發現有任務被取消的話,那麼它就會傳送乙個取消【cancel】的訊息到任務佇列【task queue】中,然後主線程【main porcess thread】取出這個訊息後,就會終止相應的掃瞄線程【scan thread】和外掛程式程序【plugin thread】。

掃瞄節點內的多個執行緒,不同的執行緒負責不同的功能,雖然看起來比較複雜,但是這樣可以盡量解耦各個模組之間,以增強可擴充套件性和穩定性,也可以大大降低後期的維護和公升級的成本。

4.2.3掃瞄線程和外掛程式程序的啟動

掃瞄節點中主線程會根據掃瞄任務通過內部執行緒管理器【thread manager】啟動乙個掃瞄線程,其框架如下圖4-2所示。

圖 4-2 掃瞄線程與外掛程式程序

從上圖4-2可以看出,執行緒管理器啟動了掃瞄線程之後,掃瞄線程會根據任務任務從外掛程式工廠【plugin factory】獲取任務相對應的外掛程式程序例項,並啟動外掛程式程序。比如掃瞄線程1的任務型別是主機安全掃瞄,那麼它會通過外掛程式工廠獲得乙個openvas的外掛程式例項(plugin a),然後啟動該外掛程式程序,掃瞄線程2的任務型別是web漏洞掃瞄,那麼它會通過外掛程式工廠獲得wvs的外掛程式例項(plugin b),然後啟動該外掛程式程序。

4.2.4掃瞄線程和外掛程式程序的通訊

當掃瞄任務被取消的時候,主程序會找到相對應的掃瞄線程【scan thread】,然後通過掃瞄線程來終止相對應的外掛程式程序【plugin thread】,其通訊的框架如圖4-3所示。 

圖 4-3 掃瞄線程和外掛程式程序的通訊結構圖

掃瞄線程【scan thread】在啟動外掛程式程序時,會建立乙個佇列queue用於和外掛程式程序【plugin process】通訊。在外掛程式程序內部有任務掃瞄【task scanning】和通訊【communication】兩個執行緒,其中任務掃瞄線程是呼叫具體的掃瞄工具或者指令碼的,比如openvas,nmap,wvs等等,在呼叫結束後會將掃瞄的結果推入到掃瞄節點內部的結果佇列【result queue】中,而通訊線程則是通過佇列【queue】與掃瞄線程通訊。

當任務被取消時,主線程會通過相對應的掃瞄線程傳送乙個終止的命令到佇列queue中,外掛程式程序中的通訊線程收到這個訊息時就會呼叫終止函式(stop_script)來結束當前的執行緒。各個外掛程式的終止函式略有不同,這樣可以讓各個外掛程式程序在終止前做一些必要的工作,比如同步已有結果,清理掃尾等,增加外掛程式的靈活性。但是,如果超過一定的時間相關程序和執行緒還沒有被終止的話,那麼就會被主程序強制殺掉,避免程序僵死的情況發生。

4.4 小結

為了解決系統的異構問題,我們採用了兩個任務訊息佇列來下發掃瞄任務,掃瞄節點中的各個掃瞄功能模組全部採用外掛程式的形式,在需要的時候動態載入,保證了系統的穩定性和可擴充套件性。

[email protected]

><

[email protected]

>

此文原出自【愛運維社群】: 

1 概述 分布式漏洞掃瞄系統設計與實現

一 概述 此文原出自 愛運維社群 1.1 前言 由於資訊在當今社會顯得越來越重要,其安全性就越發突出,尤其是在近幾年,資訊保安越來越受到企業的重視。如今,幾乎所有的網際網路都有開發自己的漏洞掃瞄平台,用於發現內部的安全隱患。此外,很多專業的安全工程師就有自己開發的漏洞挖掘系統,隨著各種漏洞盒子的出現...

分布式檔案系統HDFS解析(塊 節點)

1,概述 分布式檔案系統是通過網路實現檔案在多台主機上進行分布式儲存的檔案系統。採用client server模式,客戶端通過特定的通訊協議通過網路與伺服器建立連線,提出訪問請求,客戶端和伺服器可以通過設定訪問許可權來限制請求方對底層資料儲存塊的訪問。2,塊 hdfs以塊為儲存單位,預設乙個塊的大小...

基於分布式儲存的檔案系統4k對齊寫優化

測試工具 vdbench 磁碟型別 iscsi initiator target tgtd 檔案系統 xfs 後端磁碟的io粒度是4k,實際生產環境中發現有許多512位元組的資料寫到儲存後端,512位元組的寫觸發寫懲罰,需要先補齊4k然後再寫下去。解決該問題有幾種方法 方法1 設定lun的物理扇區大...