弱點掃描不求人 – 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 等),各家對掃描與滲透測試都有自己的政策與申請流程,動手前請先確認。演練請在自建實驗環境或明確授權的測試網段中進行。
