弱點掃描不求人 – OpenVAS

OpenVAS是一套開源弱掃工具,實作CentOS 7上的Docker安裝OpenVAS的過程。

弱點掃描是資安防禦裡最基本、卻最常被跳過的一環。攻擊者只要找到一個沒修補的服務就能取得立足點,防守方卻得掌握所有主機、所有服務的狀態,這種不對稱正是我們需要自動化掃描工具的理由。

OpenVAS 的身世來自 2005 年 Nessus 轉為商業授權後分支出來的開源專案,目前由德國 Greenbone 維護,並整合在 GVM(Greenbone Vulnerability Management)框架之下。它最大的優點是完全開源、弱點特徵檔持續更新,社群版就能涵蓋數萬條已知漏洞的檢測,很適合用來在內部建立定期掃描機制。

任務目標

合格的駭客除了要具被攻擊技能外,也必須負責防禦等安全強化。
請您使用openVAS進行弱點掃描,以提供後續修補方案。

使用工具

OpenVAS
作者: Greenbone Networks GmbH
載點:https://github.com/greenbone/openvas-scanner or docker https://github.com/mikesplain/openvas-docker
簡介:漏洞掃描和漏洞管理系統。

架構與元件

動手之前先搞懂它由哪些元件組成,後面遇到問題才知道要去看哪個服務。整套系統大致可以拆成四層:

  • Scanner(掃描引擎):真正發出探測封包、執行測試腳本的部分。
  • NVT 弱點測試腳本:以 NASL 語言撰寫,透過 Feed 每日更新,能不能抓到漏洞幾乎全看它夠不夠新。
  • Manager(本文中的 openvasmd):負責任務排程、掃描設定、結果儲存,並對外提供管理協定。
  • Web 介面 Greenbone Security Assistant:也就是等一下登入看到的畫面,透過管理協定跟 Manager 溝通。

資料流向是:瀏覽器連到 Web 介面,Web 介面再用管理協定跟 Manager 對話,Manager 才去驅動 Scanner 掃描目標。這也解釋了為什麼下一步要開兩個 port,一個給網頁介面、一個給管理協定。

弱點特徵檔的來源則分成三種:NVT 測試腳本、SCAP 資料(CVE 與 CPE)、以及 CERT 公告資料。三者缺一不可,這正是後面 Step 9 要連續執行三個同步指令的原因。

攻擊環境

安裝主機:CentOS 7

  • CPU 2 核以上,記憶體建議 4GB。同步 SCAP 資料庫時解析 XML 相當吃記憶體,只給 2GB 常常會被系統終止。
  • 磁碟至少預留 10 到 20GB,弱點特徵檔與資料庫會持續長大。
  • 需要能對外連線才能同步 Feed;離線環境要先在有網路的機器同步後再搬進來。
  • 主機時間請先用 NTP 校正,憑證驗證與 Feed 檢查都會受時間影響。
  • 建議把資料目錄掛成 volume,避免容器重建後又要從頭同步一次 Feed。

另外要提醒的是,掃描主機最好獨立一台、不要跟正式服務共用,一方面避免掃描時互相搶資源,另一方面也是把這台高權限機器的暴露面降到最低。

進行演練

Step 1. 此篇已安裝完docker,若還沒裝可以參考此篇。
https://docs.docker.com/engine/install/centos/
使用Mike Splain 製作的images
https://github.com/mikesplain/openvas-docker

Step 2. 請注意這個images預設使用443/tcp、9390/tcp 如果防火牆不開會造成服務不能訪問,因此先設定防火牆,但我的伺服器已使用443 port,為了避開設定成442。

firewall-cmd — zone=public — add-port=442/tcp — permanent 
firewall-cmd — zone=public — add-port=9390/tcp — permanent 
firewall-cmd — reload

Step 3. 啟用container,hostname是安裝的主機IP。

docker run -d -p 443:442 -e PUBLIC_HOSTNAME=192.168.58.119 --name openvas mikesplain/openvas

Step 4. 查看服務有沒有起來

docker ps -a 

Step 5. 在瀏覽器打上 https://192.168.58.119:442 (請注意要更換您設定的IP跟port),帳號密碼預設 admin/admin,另外如果提示:Login failed. Waiting for OMP… 輸入下方程式碼後,重新整理頁面就可以了。

docker exec -it openvas bash
/etc/init.d/openvas-manager start

Step 6. 點選上方的Extra->Feed Status,來看一下弱點測試特徵檔案資料庫。

Step 7. 我寫這篇的時候是邊更新的,所以會看到有些狀態是當前。

Step 8 . 弱點測試特徵檔案資料庫(NVT、Scap、Cert)超過一年沒更新,所以來更新資料庫,回到CentOS 7,輸入以下指令進入OpenVAS 容器內。

docker exec -it openvas bash

Step 9. 輸入以下程式碼

greenbone-nvt-sync 
greenbone-certdata-sync 
greenbone-scapdata-sync 
systemctl start openvas-scanner 
systemctl start openvas-manager 
openvasmd –update –verbose –progress

更新時間有點久,慢慢等歐!

Step 10. 更新完成後回到瀏覽器。

終於可以開始弱掃了(笑),點選Configuration -> target

Step 11. 點左上星星

Step 12. 創建掃描任務 Scans -> Tasks

Step 13. 點星星來創建任務

Step 14. 創建後就開始執行吧!

Step 15. 可以從Scans->Reports來看報告歐

掃描設定怎麼選

建立 Task 時最關鍵的兩個選項是 Target 與 Scan Config,選錯的話輕則掃很久沒結果,重則把服務打掛。社群版常見的幾種 Scan Config:

  • Host Discovery / Discovery:只做主機存活與服務盤點,速度最快,適合先摸清資產範圍再決定要深入掃哪些。
  • Full and fast:預設值,也是最常用的一組。會善用先前收集到的資訊來挑選要跑的測試項目,CP 值最高。
  • Full and fast ultimate:包含可能造成服務中斷的破壞性測試,絕對不要對生產環境使用。
  • Full and very deep(含 ultimate):不依賴已收集資訊,逐項硬測,準確度稍高但時間非常久。

Target 裡面還有兩個容易踩雷的設定。第一是 Port List,預設只涵蓋常見的數千個 port,如果服務跑在冷門 port 上就要自訂。第二是 Alive Test,若目標主機擋掉 ICMP,預設的 Ping 判斷會直接認定主機不存在、掃出一份空報告,這時改用 TCP-ACK 或 Consider Alive 就好了。

如果想讓結果真正有參考價值,建議加上 Credentials 做認證掃描。填入 SSH(Linux)或 SMB(Windows)帳密後,掃描器可以登入主機直接比對套件版本,抓出遠端探測看不到的漏洞,準確度會差很多。代價是這組帳密要妥善保管,建議用權限最小化的專用帳號。

報告怎麼看

報告裡的嚴重度是依 CVSS 分數換算的:High 為 7.0 到 10.0、Medium 為 4.0 到 6.9、Low 為 0.1 到 3.9,另外標成 Log 的只是資訊性紀錄,不代表有漏洞。

畫面上那串 min_qod=70 是預設的過濾條件,QoD(Quality of Detection)代表這筆偵測結果的可信度。把門檻往下調會看到更多項目,但誤報也會跟著變多;反過來說,門檻拉高則可能漏掉需要人工確認的疑慮項目,實務上會兩種都看一遍。

每一筆結果通常會附上摘要、偵測依據、建議解法以及對應的 CVE 與 CPE 編號。修補時請以原廠公告與 Solution 欄位為準,不要只憑標題判斷。遇到確認過的誤報,用 Overrides 調整嚴重度、用 Notes 留下說明,比直接停用整個測試項目安全得多。

報告可以匯出成 PDF、CSV 或 XML,其中 XML 最適合再做自動化處理、串進資產或票務系統。第一次掃描的結果建議當成基線,之後每次掃描比對差異(Delta Report),就能看出修補進度與新增的風險。

常見問題排除

  • 出現 Login failed. Waiting for OMP…:Manager 服務還沒起來,照 Step 5 進容器手動啟動後重新整理即可。
  • 無法登入或連線出現憑證錯誤:容器內重新產生憑證(openvas-manage-certs -a -f)再重啟服務。
  • Feed 同步失敗或卡住不動:多半是對外連線被防火牆擋住,或社群 Feed 端限流,換個時段重試通常就好了。
  • 更新 SCAP 資料庫時容器被系統終止:幾乎都是記憶體不足造成,加大 RAM 或先加 swap 再跑。
  • 掃描完全沒有結果:先確認 Alive Test 設定與目標防火牆是否擋掉掃描來源。
  • 重建 container 後資料全部消失:沒有掛載 volume,Feed 與掃描紀錄都會跟著容器一起蒸發。

進階應用與最佳實務

把掃描變成流程而不是一次性演練,是這套工具最大的價值所在。Schedules 可以設定每週固定時段自動執行,Alerts 則能在任務結束或出現高風險時透過郵件、HTTP 通知外部系統,讓結果自動流進工單或群組。

掃描本身會造成網路與服務負載,對正式環境動手前務必取得書面授權、避開營運高峰,並適度限制同時掃描的主機數與併發測試數。依網段或依單位切成不同 Target 與 Task,報告才好對應到負責人。

定期弱點掃描在許多規範裡都是明確要求,例如 ISO 27001 的技術脆弱性管理與 PCI DSS 的定期掃描條款,留存報告同時也是稽核佐證。最後別忘了弱點掃描與滲透測試是兩件事:前者強調廣度與自動化、以已知漏洞為主;後者強調深度,實際驗證漏洞能否被利用。兩者互補,不能互相取代。

版本演進與其他選擇

本文使用的 image 屬於 OpenVAS 9 時代的版本,所以指令還是 openvasmd。Greenbone 後來把整套系統改名為 GVM,社群版現在由 gvmd、ospd-openvas、gsad、notus-scanner 搭配 PostgreSQL 與 Redis 組成,官方也提供容器化的部署方式,服務名稱與指令都跟本文不同。要建新環境的話,建議直接採用官方目前的社群版;舊 image 用來重現流程沒問題,但請不要暴露在對外網路上。

如果情境不同,也還有其他工具可以搭配:Nessus Essentials 適合小規模且介面友善、Nuclei 以模板化檢測見長且速度快、Nmap 搭配 NSE 腳本適合輕量盤點、Trivy 則專攻容器映像與設定檔的漏洞。把它們組合起來,覆蓋率會比單押一套好得多。

延伸閱讀

  • Greenbone 官方文件:https://docs.greenbone.net/
  • OpenVAS Scanner 原始碼:https://github.com/greenbone/openvas-scanner
  • NVD 美國國家漏洞資料庫:https://nvd.nist.gov/
  • CVSS 評分標準與計算器:https://www.first.org/cvss/

討論

利用 Docker 安裝 openVAS,可以提高安裝成功率(openVAS裝失敗機率挺高的),但最近也有針對docker的攻擊,每一個新技術的到來,防禦能力也必須得到提升才可以呢!

不過用 Docker 跑弱掃器也有代價:container 內要跑 systemd、資料要持久化、Feed 更新動輒佔用大量記憶體與磁碟,這些都得額外處理。如果只是要重現流程、做教學或實驗,第三方 image 很方便;但要長期營運,建議改用官方維護的部署方式,或乾脆給它一台獨立虛擬機。

至於針對 Docker 的攻擊,比較實務的幾個守則是:不要把 Docker socket 掛進 container、避免濫用 –privileged、image 來源要能追溯(第三方 image 可能夾帶惡意程式或早已過期的套件),並定期對 image 做漏洞掃描。

另外常被忽略的一點是:掃描器本身就是高價值資產。它擁有掃遍整個網段的能力,做認證掃描時甚至保管著 SSH、SMB 帳密,一旦被拿下,等於直接把整份弱點清單送給攻擊者。所以掃描主機應該獨立部署、限制來源存取,預設的 admin/admin 一定要第一時間換掉。

最後想強調的是,弱掃不是目的,修補才是。報告躺在資料夾裡沒人看,跟沒掃是一樣的;把掃描排程化、把結果丟進修補流程並追蹤到關閉,才算真正把這個工具用起來。

免責聲明

未經事先雙方同意,使用工具攻擊目標是非法的。請遵守當地法律規範。開發者與本作者對此工具不承擔任何責任,也不對任何濫用或損壞負責。

請只對自己擁有、或已取得書面授權的系統進行掃描。弱點掃描會產生大量探測流量,也可能被對方視為攻擊行為;在台灣,未經授權的存取與干擾行為可能觸犯刑法第 358 條至第 363 條「妨害電腦使用罪」章。

若目標位於雲端平台(AWS、GCP、Azure 等),各家對掃描與滲透測試都有自己的政策與申請流程,動手前請先確認。演練請在自建實驗環境或明確授權的測試網段中進行。

You may also like