完全免費開放且功能優異 取代已商業化Nessus地位
用開源工具檢查主機漏洞 自建OpenVAS弱點掃描
吳惠麟
本文將介紹一套在開源碼社群中頗富盛名的弱點掃描工具OpenVAS,可用來掃描主機系統,找出系統潛在的漏洞,讓管理者能夠儘早修補系統漏洞,進而降低主機系統被攻擊的機率。
在一般的認知中,利用防火牆、IDS(入侵偵測系統)等資安設備來防禦有心人士的惡意攻擊,似乎是做好資訊安全的不二法門。
但從另外一個角度思索,如果能在主機系統上的漏洞未被利用之前,管理者就能即時地檢查出漏洞並加以修補,相信對於降低主機系統的資安威脅將有極大的助益。
什麼是OpenVAS
說起開源碼社群中的弱點掃描軟體,相信有經驗的讀者,腦海浮現的應該是Nessus軟體。過去Nessus挾其免費及優異的特性,而成為開源碼社群中弱點掃描工具的首選。但好景不常,後來Nessus軟體因故轉變成商業軟體。也因此,而有了OpenVAS軟體的誕生,它採用GPL版權宣告,可視為Nessus在開源碼社群中的衍生,可用來取代Nessus軟體。OpenVAS全名是Open Vulnerability Assessment System,官方網址為「http://www.openvas.org/」。以下開始介紹OpenVAS軟體,先來說明OpenVAS的架構圖,如圖1所示。
基本上,OpenVAS將架構分成Server端(伺服器端主要用來執行掃描工作及儲存掃描紀錄之用)以及Client端(使用者端,主要提供給使用者操作),其中Client端提供以下兩種介面操作:
·openvas cli:此為文字介面的操作模式,使 用時必須以指令的方式下達O.M.P指令(全名為OpenVAS Management Protocol,在此使用的版本為6.0,詳細的內容可參考網址「http://www.openvas.org/omp-6-0.html」)至OpenVAS Manager(以下簡稱為O.M)。通常都是利用O.M.P指令來設定進行掃描工作時所需要的重要參數,例如被掃描主機的IP採用何種掃描模式進行掃描,在掃描完成後取得掃描結果等相關資訊。
· GSA:網頁介面的操作模式,提供一個獨立的網站 伺服器(microhttpd,預設服務埠為9392)給使用者設定O.M.P指令之用。
Client端程式的功能主要是設定O.M.P指令給位於Server端的服務來進行掃描,在簡單說明完Client端的程式後,接著說明在Server端運作的程式,如下所述:
· OpenVAS Manager(O.M):主要是用來接收 由Client端程式所設定的O.M.P指令以及管理掃描工作或掃描結果等資訊,並負責與OpenVAS Scanner以O.T.P(openvas-transfer-protocol)溝通。簡單來說,O.M在整個OpenVAS架構內即為管理中心的角色。關於openvas-transfer-protocol詳細的通訊協定,可參考網址「http://www.openvas.org/compendium/openvas-transfer-protocol.html」,此通訊協定通常是用來設定啟動或停止掃描作業等重要事項。
· OpenVAS Scanner(以下簡稱為O.S):實際對 掃描對象進行掃描,在收到啟動掃描的指令後,O.S即會根據nvts(OpenVAS的弱點資料庫)的資訊對目標主機進行掃描,在掃描完成後,就會產生相關的掃描報表。nvts採用NASL語言撰寫而成,詳細弱點資訊可參考網址「http://www.openvas.org/openvas-nvt-feed.html」的說明。
說明過OpenVAS整體的架構後,接下來將以原始碼編譯的方式安裝OpenVAS(所安裝的版本為8)。在本文中所使用的作業系統環境為CentOS 7,可至OpenVAS官方網站下載原始碼,原始碼說明如表1所示。
表1 相關原始碼說明
在安裝OpenVAS前,必須先安裝OpenVAS所需的套件,以下為相關重要的套件,但因個別環境不同,可能還必須安裝其他套件,按照訊息的指示安裝即可。接著,執行下列指令進行安裝(#之後為註解說明):
在完成安裝前置套件之後,繼續安裝OpenVAS的主程式。
但從另外一個角度思索,如果能在主機系統上的漏洞未被利用之前,管理者就能即時地檢查出漏洞並加以修補,相信對於降低主機系統的資安威脅將有極大的助益。
什麼是OpenVAS
說起開源碼社群中的弱點掃描軟體,相信有經驗的讀者,腦海浮現的應該是Nessus軟體。過去Nessus挾其免費及優異的特性,而成為開源碼社群中弱點掃描工具的首選。但好景不常,後來Nessus軟體因故轉變成商業軟體。也因此,而有了OpenVAS軟體的誕生,它採用GPL版權宣告,可視為Nessus在開源碼社群中的衍生,可用來取代Nessus軟體。OpenVAS全名是Open Vulnerability Assessment System,官方網址為「http://www.openvas.org/」。以下開始介紹OpenVAS軟體,先來說明OpenVAS的架構圖,如圖1所示。
▲圖1 OpenVAS架構示意圖。 |
基本上,OpenVAS將架構分成Server端(伺服器端主要用來執行掃描工作及儲存掃描紀錄之用)以及Client端(使用者端,主要提供給使用者操作),其中Client端提供以下兩種介面操作:
·openvas cli:此為文字介面的操作模式,使 用時必須以指令的方式下達O.M.P指令(全名為OpenVAS Management Protocol,在此使用的版本為6.0,詳細的內容可參考網址「http://www.openvas.org/omp-6-0.html」)至OpenVAS Manager(以下簡稱為O.M)。通常都是利用O.M.P指令來設定進行掃描工作時所需要的重要參數,例如被掃描主機的IP採用何種掃描模式進行掃描,在掃描完成後取得掃描結果等相關資訊。
· GSA:網頁介面的操作模式,提供一個獨立的網站 伺服器(microhttpd,預設服務埠為9392)給使用者設定O.M.P指令之用。
Client端程式的功能主要是設定O.M.P指令給位於Server端的服務來進行掃描,在簡單說明完Client端的程式後,接著說明在Server端運作的程式,如下所述:
· OpenVAS Manager(O.M):主要是用來接收 由Client端程式所設定的O.M.P指令以及管理掃描工作或掃描結果等資訊,並負責與OpenVAS Scanner以O.T.P(openvas-transfer-protocol)溝通。簡單來說,O.M在整個OpenVAS架構內即為管理中心的角色。關於openvas-transfer-protocol詳細的通訊協定,可參考網址「http://www.openvas.org/compendium/openvas-transfer-protocol.html」,此通訊協定通常是用來設定啟動或停止掃描作業等重要事項。
· OpenVAS Scanner(以下簡稱為O.S):實際對 掃描對象進行掃描,在收到啟動掃描的指令後,O.S即會根據nvts(OpenVAS的弱點資料庫)的資訊對目標主機進行掃描,在掃描完成後,就會產生相關的掃描報表。nvts採用NASL語言撰寫而成,詳細弱點資訊可參考網址「http://www.openvas.org/openvas-nvt-feed.html」的說明。
說明過OpenVAS整體的架構後,接下來將以原始碼編譯的方式安裝OpenVAS(所安裝的版本為8)。在本文中所使用的作業系統環境為CentOS 7,可至OpenVAS官方網站下載原始碼,原始碼說明如表1所示。
表1 相關原始碼說明
在安裝OpenVAS前,必須先安裝OpenVAS所需的套件,以下為相關重要的套件,但因個別環境不同,可能還必須安裝其他套件,按照訊息的指示安裝即可。接著,執行下列指令進行安裝(#之後為註解說明):
在完成安裝前置套件之後,繼續安裝OpenVAS的主程式。
筆者習慣將以原始碼編譯的套件安裝在某個目錄中,便於日後要移除此套件時,僅需將該目錄刪除即可,因此如下指令若有CMAKE_INSTALL_PREFIX參數,即表示將編譯完成的檔案安裝至該目錄:
安裝openvas-libraries-8.0.5
安裝openvas-scanner-5.0.4
安裝openvas-manager-6.0.6
安裝openvas-cli-1.4.3
完成安裝作業後,可參考表2的說明,其中介紹了OpenVAS所提供的主要執行程式。
表2 OpenVAS主要執行程式說明
編譯好OpenVAS相關程式之後,接下來要產生OpenVAS所需要的伺服器憑證。
執行openvas-mkcert後,系統會詢問憑證的有效期限、所在國家別等相關資訊(使用預設即可),最後就會產生相關伺服器憑證,如圖2所示。
產生OpenVAS伺服器憑證後,再來就是要產生OpenVAS所需的使用者憑證。執行openvas-mkcert-client,就如同openvas-mkcert一樣,也會詢問憑 證的有效期限、所在國家別等資訊(使用預設即可)。
執行後,在「/tmp」目錄下就會多一個目錄名稱類似「openvas-mkcert-client.XXXX」的目錄,該目錄內就會有使用者憑證,檔名為「key_om.pem」和「cert_om.pem」,然後複製此兩檔案至以下的相對位置:
最後,將NVTS(弱點資料庫)更新到最新的狀態,執行如下指令:
更新完成後,即可啟動O.S伺服器,執行以下指令:
成功啟動後,如果第一次使用OpenVAS,必須使用openvasmd管理程式重新建立一個新的資料庫(使用SQLite資料庫,用來儲存弱點資料庫或掃描結果等資訊),因此接著使用如下的指令:
如果順利執行成功,就會產生一個檔案型的資料庫,此檔案會位於「/usr/local/openvas/var/lib/openvas/mgr/tasks.db」。在tasks.db內就會以資料庫的方式儲存OpenVAS相關資料,例如NVTS(弱點資料庫)存放在名稱為「nvts」的資料庫表格(Table)。如果想要查詢NVTS的資訊,可用如下指令查詢(本例為查詢NVTS的個數,如圖3所示個數為43955):
最後,利用openvasmd產生一組連接掃描伺服器所要使用的帳號及密碼,如圖4所示,這裡產生一組名稱為「test」的帳號,執行成功後會預設一組密碼:
到這裡已成功建立OpenVAS的執行環境,接著說明如何使用OpenVAS來執行掃描作業。
使用OpenVAS
為了讓大家能夠更了解OpenVAS的運作方式,在本文中,筆者將使用文字介面的操作程式omp來實際說明如何執行一個掃描作業。
首先,說明在OpenVAS架構中所定義的名詞:
·targetid:OpenVAS針對每個主機都會給予一個獨一無二的編號,而不是以IP或主機名稱來識別。一個targetid未必只能對應一台主機,可設定對應多台主機。
·taskid:OpenVAS將每個掃描工作均視為一個工作(Task)並給予獨一無二的編號。
·reportid:在掃描完成後,OpenVAS會產生相關的報表,並給予唯一的編號。
·formatid:OpenVAS提供了多種的報表格式(例如HTML、XML、PDF等),並針對每種報表格式給予一個唯一的編號。
安裝openvas-libraries-8.0.5
安裝openvas-scanner-5.0.4
安裝openvas-manager-6.0.6
安裝openvas-cli-1.4.3
完成安裝作業後,可參考表2的說明,其中介紹了OpenVAS所提供的主要執行程式。
表2 OpenVAS主要執行程式說明
編譯好OpenVAS相關程式之後,接下來要產生OpenVAS所需要的伺服器憑證。
執行openvas-mkcert後,系統會詢問憑證的有效期限、所在國家別等相關資訊(使用預設即可),最後就會產生相關伺服器憑證,如圖2所示。
▲圖2 產生相關伺服器憑證。 |
產生OpenVAS伺服器憑證後,再來就是要產生OpenVAS所需的使用者憑證。執行openvas-mkcert-client,就如同openvas-mkcert一樣,也會詢問憑 證的有效期限、所在國家別等資訊(使用預設即可)。
執行後,在「/tmp」目錄下就會多一個目錄名稱類似「openvas-mkcert-client.XXXX」的目錄,該目錄內就會有使用者憑證,檔名為「key_om.pem」和「cert_om.pem」,然後複製此兩檔案至以下的相對位置:
最後,將NVTS(弱點資料庫)更新到最新的狀態,執行如下指令:
更新完成後,即可啟動O.S伺服器,執行以下指令:
成功啟動後,如果第一次使用OpenVAS,必須使用openvasmd管理程式重新建立一個新的資料庫(使用SQLite資料庫,用來儲存弱點資料庫或掃描結果等資訊),因此接著使用如下的指令:
如果順利執行成功,就會產生一個檔案型的資料庫,此檔案會位於「/usr/local/openvas/var/lib/openvas/mgr/tasks.db」。在tasks.db內就會以資料庫的方式儲存OpenVAS相關資料,例如NVTS(弱點資料庫)存放在名稱為「nvts」的資料庫表格(Table)。如果想要查詢NVTS的資訊,可用如下指令查詢(本例為查詢NVTS的個數,如圖3所示個數為43955):
▲圖3 查詢NVTS的個數。 |
最後,利用openvasmd產生一組連接掃描伺服器所要使用的帳號及密碼,如圖4所示,這裡產生一組名稱為「test」的帳號,執行成功後會預設一組密碼:
▲ 圖4 利用openvasmd產生一組連接掃描伺服器所要使用的帳號及密碼。 |
到這裡已成功建立OpenVAS的執行環境,接著說明如何使用OpenVAS來執行掃描作業。
使用OpenVAS
為了讓大家能夠更了解OpenVAS的運作方式,在本文中,筆者將使用文字介面的操作程式omp來實際說明如何執行一個掃描作業。
首先,說明在OpenVAS架構中所定義的名詞:
·targetid:OpenVAS針對每個主機都會給予一個獨一無二的編號,而不是以IP或主機名稱來識別。一個targetid未必只能對應一台主機,可設定對應多台主機。
·taskid:OpenVAS將每個掃描工作均視為一個工作(Task)並給予獨一無二的編號。
·reportid:在掃描完成後,OpenVAS會產生相關的報表,並給予唯一的編號。
·formatid:OpenVAS提供了多種的報表格式(例如HTML、XML、PDF等),並針對每種報表格式給予一個唯一的編號。
首先啟動OpenVAS執行環境,執行下列指令:
在執行完畢後,可利用「ps aux | grep openvas」指令來檢查是否啟動成功。要注意的是,由於openvassd在啟動時需載入NVTS的資訊,所以必須等到完全載入NVTS的資訊後才可進行掃描,如圖5所示。
啟動完成後,基本上要完成一個掃描工作(Task)需經過下列步驟。在此將以omp程式來執行O.M.P指令(以XML形式下達指令,這裡僅說明基本指令)。首先必須產生欲掃描主機(以下簡稱為target)的targetID,由於OpenVAS是以targetID來辨別各台主機,所以要先將個別主機轉換成targetID。假設target的IP為140.117.100.5,而產生targetID的指令如下:
如圖6所示,已成功地新建一個IP為140.117.100.5的TARGETID,其targetid為「69b3b79a-97a0-4e2a-92b5-e6505ca3a0d8」。
如果想要知道目前有多少的targetID資訊,則執行如圖7所示的指令:
緊接著,新建欲對此targetID進行掃描的工作(Task)並產生相對應的taskID,建立指令如下:
其中要特別說明的掃描組態ID(configID),所謂的掃描組態指的是用什麼模式進行掃描,例如快速掃描、完整掃描等模式等。在OpenVAS裡預設有下列掃描模式,如圖8所示。
一般預設掃描會使用「Full and very deep」模式,因此執行如圖9所示的建立掃描作業指令:
成功建立掃描作業之後,就會回傳taskID資訊。也可以利用「omp -u [使用者名稱] -w [使用者帳 號] –G」指令來取得目前的掃描作業狀態,如圖10 所示。
其中執行狀態表示目前此工作(Task)的狀態,OpenVAS將執行狀態定義成如下的狀態:
·New:表示新建的掃描工作,尚未開始執行掃描。
·running:表示掃描工作正在執行中,並會顯示目前執行的進度。
·Done:表示掃描工作已執行完畢。
在建立掃描工作之後,接下來即可啟動掃描作業,如圖11所示。圖中的指令分為兩個部分,第一個指令為啟動該掃描工作的指令,在此啟動掃描成功後,就會回覆報表編號(reportID),此編號可用來取得後續掃描的結果。在啟動掃描工作後,可利用如圖11所示的第二個部分指令查看該掃描工作目前掃描的進度。
當掃描完成後,可利用報表編號(reportID)的編號來取得相對應的報表,OpenVAS提供了多種不同的報表格式,例如HTML、PDF、XML等。可使用如圖12中的指令來取得支援的格式(目前支援10餘種格式)及格式編號(format_id)。
如表3所示,這裡僅列出常用的報表格式及其報表編號(formatID)。
表3 常用的報表格式及其報表編號
以輸出HTML格式的掃描報表為例,如圖13中的指令表示要輸出HTML格式的掃描報表,並且將其儲存至 「/tmp/test.html」檔案(report_id為所需的報表編號,format_id為報表的輸出格式,在此為HTML格式)。
成功執行後,掃描報表就會儲存到「/tmp/test.html」檔案內,在此要特別提醒的是,在輸出為HTML格式的情況下,OpenVAS會將此輸出的檔案以base64編碼加密,使用者必須自行以base64的解碼解開,然後就會得到如圖14所示之HTML格式的掃描報表。
進行至此,一個完整的弱點掃描系統即告完成!
<本文作者:吳惠麟,多年資安經驗,喜好利用開源碼建構相關解決方案,著有「資訊安全原理與實驗」等書。>
在執行完畢後,可利用「ps aux | grep openvas」指令來檢查是否啟動成功。要注意的是,由於openvassd在啟動時需載入NVTS的資訊,所以必須等到完全載入NVTS的資訊後才可進行掃描,如圖5所示。
▲圖5 完全載入NVTS資訊後開始掃描。 |
啟動完成後,基本上要完成一個掃描工作(Task)需經過下列步驟。在此將以omp程式來執行O.M.P指令(以XML形式下達指令,這裡僅說明基本指令)。首先必須產生欲掃描主機(以下簡稱為target)的targetID,由於OpenVAS是以targetID來辨別各台主機,所以要先將個別主機轉換成targetID。假設target的IP為140.117.100.5,而產生targetID的指令如下:
如圖6所示,已成功地新建一個IP為140.117.100.5的TARGETID,其targetid為「69b3b79a-97a0-4e2a-92b5-e6505ca3a0d8」。
▲圖6 產生targetID。 |
如果想要知道目前有多少的targetID資訊,則執行如圖7所示的指令:
▲圖7 查詢現有的targetID資訊。 |
緊接著,新建欲對此targetID進行掃描的工作(Task)並產生相對應的taskID,建立指令如下:
其中要特別說明的掃描組態ID(configID),所謂的掃描組態指的是用什麼模式進行掃描,例如快速掃描、完整掃描等模式等。在OpenVAS裡預設有下列掃描模式,如圖8所示。
▲圖8 有預設掃描模式可供挑選。 |
一般預設掃描會使用「Full and very deep」模式,因此執行如圖9所示的建立掃描作業指令:
▲圖9 建立掃描作業。 |
成功建立掃描作業之後,就會回傳taskID資訊。也可以利用「omp -u [使用者名稱] -w [使用者帳 號] –G」指令來取得目前的掃描作業狀態,如圖10 所示。
▲圖10 取得目前的掃描作業狀態。 |
其中執行狀態表示目前此工作(Task)的狀態,OpenVAS將執行狀態定義成如下的狀態:
·New:表示新建的掃描工作,尚未開始執行掃描。
·running:表示掃描工作正在執行中,並會顯示目前執行的進度。
·Done:表示掃描工作已執行完畢。
在建立掃描工作之後,接下來即可啟動掃描作業,如圖11所示。圖中的指令分為兩個部分,第一個指令為啟動該掃描工作的指令,在此啟動掃描成功後,就會回覆報表編號(reportID),此編號可用來取得後續掃描的結果。在啟動掃描工作後,可利用如圖11所示的第二個部分指令查看該掃描工作目前掃描的進度。
▲圖11 啟動掃描作業,並查看目前的掃描進度。 |
當掃描完成後,可利用報表編號(reportID)的編號來取得相對應的報表,OpenVAS提供了多種不同的報表格式,例如HTML、PDF、XML等。可使用如圖12中的指令來取得支援的格式(目前支援10餘種格式)及格式編號(format_id)。
▲圖12 取得支援的格式以及格式編號。 |
如表3所示,這裡僅列出常用的報表格式及其報表編號(formatID)。
表3 常用的報表格式及其報表編號
以輸出HTML格式的掃描報表為例,如圖13中的指令表示要輸出HTML格式的掃描報表,並且將其儲存至 「/tmp/test.html」檔案(report_id為所需的報表編號,format_id為報表的輸出格式,在此為HTML格式)。
▲ 圖13 輸出HTML格式的掃描報表,並儲存至「/tmp/test.html」檔案。 |
成功執行後,掃描報表就會儲存到「/tmp/test.html」檔案內,在此要特別提醒的是,在輸出為HTML格式的情況下,OpenVAS會將此輸出的檔案以base64編碼加密,使用者必須自行以base64的解碼解開,然後就會得到如圖14所示之HTML格式的掃描報表。
▲圖14 製作出HTML格式的掃描報表。 |
進行至此,一個完整的弱點掃描系統即告完成!
<本文作者:吳惠麟,多年資安經驗,喜好利用開源碼建構相關解決方案,著有「資訊安全原理與實驗」等書。>
沒有留言:
張貼留言