跳至主要内容

Pentest Toolkit - OpenVAS & GVM

OpenVAS 與 GVM 簡介

OpenVAS(Open Vulnerability Assessment System) 是一款開源的漏洞掃描器,用於自動化檢測網路與系統中的安全漏洞。它最初是從 Nessus 2.2 分支出來的開源項目,隨後由 Greenbone Networks 接手維護與開發,並成為 Greenbone Vulnerability Management(GVM) 框架的一部分。

GVM(Greenbone Vulnerability Management) 則是一個完整的漏洞管理系統,不僅包含 OpenVAS 掃描器,還提供 Web 介面、報告管理、資產管理、API 接口等功能,適合企業與個人用戶進行資安檢測與風險管理。


核心架構與組件

GVM 由多個模組組成,每個模組負責不同的功能,確保整個系統可以進行漏洞掃描、管理與報告產生。

組件名稱功能描述
OpenVAS Scanner執行實際的漏洞掃描,使用 NVT(Network Vulnerability Tests)來檢測系統中的安全漏洞。
GVMd(Greenbone Vulnerability Manager Daemon)負責管理漏洞掃描、處理結果、與 OpenVAS Scanner 溝通,並提供 API 接口。
GSAD(Greenbone Security Assistant Daemon)提供 Web 介面,允許使用者透過瀏覽器管理掃描任務、檢視報告等。
gvmd負責管理漏洞資料庫(如 CVE、CPE、CVE Details)並提供風險評估。
ospd-openvas作為 OpenVAS Scanner 與 GVMd 之間的橋樑,允許透過 Open Scanner Protocol(OSP)與外部系統整合。
GMP(Greenbone Management Protocol)用於與 GVMd 進行通訊,支援遠端 API 控制漏洞管理流程。

主要功能與技術細節

漏洞掃描與檢測

  • OpenVAS 使用超過 100,000+ 條 NVT(Network Vulnerability Tests) 規則來檢測系統中的漏洞。
  • 支援掃描 IP 網段、單一 IP、主機名稱、網域,並可進行深度系統檢測。
  • 可掃描的系統包括 Linux、Windows、macOS、路由器、IoT 設備、雲端環境等。
  • 能夠識別已知漏洞(CVE)、配置錯誤(Misconfigurations)及潛在風險。

風險評估與 CVSS 分析

  • 掃描結果會依據 CVSS(Common Vulnerability Scoring System) 計算風險等級:
    • 低風險(0.1 - 3.9)
    • 中風險(4.0 - 6.9)
    • 高風險(7.0 - 8.9)
    • 嚴重風險(9.0 - 10.0)
  • 可與 MITRE ATT&CK 框架整合,識別攻擊手法與可能的風險影響。

支援協議與服務掃描

  • 網路層面:TCP/IP、UDP、ICMP
  • 應用層協議:HTTP、HTTPS、FTP、SSH、SMB、SNMP、RDP、VNC
  • 資料庫漏洞掃描:MySQL、PostgreSQL、MSSQL、Oracle
  • 工控系統(ICS)掃描:MODBUS、DNP3、SCADA 協議

Web UI 與自動化 API 支援

  • GSAD(Greenbone Security Assistant) 提供 Web 介面,可透過瀏覽器管理掃描與報告。
  • GMP(Greenbone Management Protocol) 允許透過 API 進行自動化漏洞管理。
  • 可與 SIEM(Security Information and Event Management)SOC(Security Operations Center) 整合,提高資安監控能力。

報告與修復建議

  • 掃描結果可以輸出為 HTML、PDF、XML、CSV、JSON 等格式。
  • 提供詳細的漏洞描述、影響範圍、建議修補方式。
  • 可與 CVE(Common Vulnerabilities and Exposures) 資料庫同步,確保漏洞資訊最新。

適用對象與應用場景

IT 安全管理人員

  • 定期掃描企業網路,找出可能的安全漏洞,避免遭受駭客攻擊。
  • 監控伺服器、路由器、防火牆等設備的漏洞狀況。

滲透測試人員(Penetration Testers)

  • 在滲透測試(Penetration Testing)中使用 OpenVAS 來識別目標系統的漏洞。
  • 作為 Kali Linux 工具組的一部分,與 Metasploit、Nmap 等工具搭配使用。

安全研究人員與開發者

  • 研究新型漏洞,分析 CVE 資訊,測試修補方法。
  • 透過 API 自動化掃描,整合至 DevSecOps 流程。

原始碼 GVM 22.4 安裝在 Ubuntu 24.04 上

Building from Source,可以參考官方文件,以下我是安裝 GVM 22.4,如果新的版本可能需要嘗試看看。

建立與設定使用者環境

這部分建立 GVM 相關的系統使用者,並設定環境變數。

  1. 安裝環境為 ubuntu-24.04.1-desktop-amd64.iso

  2. 創立一個新的 user 給 gvm 使用,並且需要設定為不可以登入。

sudo useradd -r -M -U -G sudo -s /usr/sbin/nologin gvm
  1. 將我們加入到 gvm 這個群組裡。
sudo usermod -aG gvm $USER
su $USER
  1. 設定環境變數。
export PATH=$PATH:/usr/local/sbin

5.設定安裝前綴(Installation Prefix)環境變數。

export INSTALL_PREFIX=/usr/local
  1. 建立原始碼目錄(Source Directory)、建置目錄(Build Directory)和安裝目錄(Install Directory)。
export SOURCE_DIR=$HOME/source
mkdir -p $SOURCE_DIR
export BUILD_DIR=$HOME/build
mkdir -p $BUILD_DIR
export INSTALL_DIR=$HOME/install
mkdir -p $INSTALL_DIR

安裝基本相關的套件

這部分安裝編譯所需的基本套件與工具。

  1. 下載並安裝相關的套件。
sudo apt update
sudo apt install --no-install-recommends --assume-yes \
build-essential \
curl \
cmake \
pkg-config \
python3 \
python3-pip \
gnupg

匯入 Greenbone 金鑰

這部分確保下載的軟體來源可信任,避免安裝惡意程式。

  1. 匯入 greenbone key。
curl -f -L https://www.greenbone.net/GBCommunitySigningKey.asc -o /tmp/GBCommunitySigningKey.asc
gpg --import /tmp/GBCommunitySigningKey.asc
echo "8AE4BE429B60A59B311C2E739823FAA60ED1E580:6:" | gpg --import-ownertrust

配置 gvm-libs

GVM 相關函式庫,其他組件會依賴這些函式庫。

  1. 設定 GVM LIB 的版本。
export GVM_LIBS_VERSION=22.18.0
  1. 安裝 gvm-libs 相關依賴套件。
sudo apt install -y \
libcjson-dev \
libcurl4-gnutls-dev \
libgcrypt-dev \
libglib2.0-dev \
libgnutls28-dev \
libgpgme-dev \
libhiredis-dev \
libnet1-dev \
libpaho-mqtt-dev \
libpcap-dev \
libssh-dev \
libxml2-dev \
uuid-dev \
libldap2-dev \
libradcli-dev
  1. 下載 gvm-libs 原始碼並驗證。
curl -f -L https://github.com/greenbone/gvm-libs/archive/refs/tags/v$GVM_LIBS_VERSION.tar.gz -o $SOURCE_DIR/gvm-libs-$GVM_LIBS_VERSION.tar.gz
curl -f -L https://github.com/greenbone/gvm-libs/releases/download/v$GVM_LIBS_VERSION/gvm-libs-$GVM_LIBS_VERSION.tar.gz.asc -o $SOURCE_DIR/gvm-libs-$GVM_LIBS_VERSION.tar.gz.asc
gpg --verify $SOURCE_DIR/gvm-libs-$GVM_LIBS_VERSION.tar.gz.asc $SOURCE_DIR/gvm-libs-$GVM_LIBS_VERSION.tar.gz
  1. 解壓縮取得原始程式碼。
tar -C $SOURCE_DIR -xvzf $SOURCE_DIR/gvm-libs-$GVM_LIBS_VERSION.tar.gz
  1. 創立編譯的路徑和資料夾,進行編譯。
mkdir -p $BUILD_DIR/gvm-libs

cmake \
-S $SOURCE_DIR/gvm-libs-$GVM_LIBS_VERSION \
-B $BUILD_DIR/gvm-libs \
-DCMAKE_INSTALL_PREFIX=$INSTALL_PREFIX \
-DCMAKE_BUILD_TYPE=Release \
-DSYSCONFDIR=/etc \
-DLOCALSTATEDIR=/var

cmake --build $BUILD_DIR/gvm-libs -j$(nproc)
  1. 安裝後並且複製到指令集中。
mkdir -p $INSTALL_DIR/gvm-libs && cd $BUILD_DIR/gvm-libs

make DESTDIR=$INSTALL_DIR/gvm-libs install

sudo cp -rv $INSTALL_DIR/gvm-libs/* /

配置 gvmd

gvmd (Greenbone Vulnerability Manager Daemon) 這是核心管理服務,負責任務調度與漏洞資料庫管理。

  1. 設定 gvmd 的版本。
export GVMD_VERSION=25.1.1
  1. 安裝 gvmd 和相關元件所需要的開發與編譯工具。
sudo apt install -y \
lcov \
libbsd-dev \
libcjson-dev \
libglib2.0-dev \
libgnutls28-dev \
libgpgme-dev \
libical-dev \
libpq-dev \
postgresql-server-dev-all \
rsync \
xsltproc
  1. 安裝 GVM 運行時所需的額外工具,主要用來支援 報告生成、遠端連線、檔案打包、與其他協議相關的功能。
sudo apt install -y --no-install-recommends \
dpkg \
fakeroot \
gnupg \
gnutls-bin \
gpgsm \
nsis \
openssh-client \
python3 \
python3-lxml \
rpm \
smbclient \
snmp \
socat \
sshpass \
texlive-fonts-recommended \
texlive-latex-extra \
wget \
xmlstarlet \
zip
  1. 下載 gvmd 原始碼並驗證。
curl -f -L https://github.com/greenbone/gvmd/archive/refs/tags/v$GVMD_VERSION.tar.gz -o $SOURCE_DIR/gvmd-$GVMD_VERSION.tar.gz
curl -f -L https://github.com/greenbone/gvmd/releases/download/v$GVMD_VERSION/gvmd-$GVMD_VERSION.tar.gz.asc -o $SOURCE_DIR/gvmd-$GVMD_VERSION.tar.gz.asc
gpg --verify $SOURCE_DIR/gvmd-$GVMD_VERSION.tar.gz.asc $SOURCE_DIR/gvmd-$GVMD_VERSION.tar.gz
  1. 解壓縮取得原始程式碼。
tar -C $SOURCE_DIR -xvzf $SOURCE_DIR/gvmd-$GVMD_VERSION.tar.gz
  1. 創立編譯的路徑和資料夾,進行編譯。
mkdir -p $BUILD_DIR/gvmd

cmake \
-S $SOURCE_DIR/gvmd-$GVMD_VERSION \
-B $BUILD_DIR/gvmd \
-DCMAKE_INSTALL_PREFIX=$INSTALL_PREFIX \
-DCMAKE_BUILD_TYPE=Release \
-DLOCALSTATEDIR=/var \
-DSYSCONFDIR=/etc \
-DGVM_DATA_DIR=/var \
-DGVM_LOG_DIR=/var/log/gvm \
-DGVMD_RUN_DIR=/run/gvmd \
-DOPENVAS_DEFAULT_SOCKET=/run/ospd/ospd-openvas.sock \
-DGVM_FEED_LOCK_PATH=/var/lib/gvm/feed-update.lock \
-DLOGROTATE_DIR=/etc/logrotate.d

cmake --build $BUILD_DIR/gvmd -j$(nproc)
  1. 安裝後並且複製到指令集中。
mkdir -p $INSTALL_DIR/gvmd && cd $BUILD_DIR/gvmd

make DESTDIR=$INSTALL_DIR/gvmd install

sudo cp -rv $INSTALL_DIR/gvmd/* /

配置 pg-gvm

pg-gvm 是 gvmd 與 PostgreSQL 資料庫的接口。

  1. 首先我們先定義版本,方便後面下載。
export PG_GVM_VERSION=22.6.7
  1. 安裝 pg-gvm 所需要的相關套件。
sudo apt install -y \
libglib2.0-dev \
libical-dev \
postgresql-server-dev-all
  1. 下載 gvmd 原始碼並驗證。
curl -f -L https://github.com/greenbone/pg-gvm/archive/refs/tags/v$PG_GVM_VERSION.tar.gz -o $SOURCE_DIR/pg-gvm-$PG_GVM_VERSION.tar.gz
curl -f -L https://github.com/greenbone/pg-gvm/releases/download/v$PG_GVM_VERSION/pg-gvm-$PG_GVM_VERSION.tar.gz.asc -o $SOURCE_DIR/pg-gvm-$PG_GVM_VERSION.tar.gz.asc
gpg --verify $SOURCE_DIR/pg-gvm-$PG_GVM_VERSION.tar.gz.asc $SOURCE_DIR/pg-gvm-$PG_GVM_VERSION.tar.gz
  1. 解壓縮取得原始程式碼。
tar -C $SOURCE_DIR -xvzf $SOURCE_DIR/pg-gvm-$PG_GVM_VERSION.tar.gz
  1. 創立編譯的路徑和資料夾,進行編譯。
mkdir -p $BUILD_DIR/pg-gvm

cmake \
-S $SOURCE_DIR/pg-gvm-$PG_GVM_VERSION \
-B $BUILD_DIR/pg-gvm \
-DCMAKE_BUILD_TYPE=Release

cmake --build $BUILD_DIR/pg-gvm -j$(nproc)
  1. 安裝後並且複製到指令集中。
mkdir -p $INSTALL_DIR/pg-gvm && cd $BUILD_DIR/pg-gvm

make DESTDIR=$INSTALL_DIR/pg-gvm install

sudo cp -rv $INSTALL_DIR/pg-gvm/* /

配置 GSA

GSA (Greenbone Security Assistant)這是 GVM 的 Web UI,讓使用者可以透過瀏覽器操作。

  1. 首先我們先定義版本,方便後面下載。
export GSA_VERSION=24.3.0
  1. 因為要使用 nodejs,因此我們透過指令來增加 source list。
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo bash -
  1. 接著透過 apt 我們就可以進行安裝 nodejs。
sudo apt-get install -y nodejs
  1. 下載 GSA 原始碼並驗證。
curl -f -L https://github.com/greenbone/gsa/archive/refs/tags/v$GSA_VERSION.tar.gz -o $SOURCE_DIR/gsa-$GSA_VERSION.tar.gz
curl -f -L https://github.com/greenbone/gsa/releases/download/v$GSA_VERSION/gsa-$GSA_VERSION.tar.gz.asc -o $SOURCE_DIR/gsa-$GSA_VERSION.tar.gz.asc
gpg --verify $SOURCE_DIR/gsa-$GSA_VERSION.tar.gz.asc $SOURCE_DIR/gsa-$GSA_VERSION.tar.gz
  1. 解壓縮取得原始程式碼。
tar -C $SOURCE_DIR -xvzf $SOURCE_DIR/gsa-$GSA_VERSION.tar.gz
  1. 創立編譯的路徑和資料夾,進行編譯。
cd $SOURCE_DIR/gsa-$GSA_VERSION
rm -rf build
npm install
npm run build
  1. 安裝後並且複製到 web 中。
sudo mkdir -p $INSTALL_PREFIX/share/gvm/gsad/web/
sudo cp -rv $SOURCE_DIR/gsa-$GSA_VERSION/build/* $INSTALL_PREFIX/share/gvm/gsad/web/

配置 GSAD

GSAD (Greenbone Security Assistant Daemon)這是提供 Web UI 服務的後端伺服器。

  1. 首先我們先定義版本,方便後面下載。
export GSAD_VERSION=24.2.2
  1. 安裝 GSAD 所需要的相關套件。
sudo apt install -y \
libbrotli-dev \
libglib2.0-dev \
libgnutls28-dev \
libmicrohttpd-dev \
libxml2-dev
  1. 下載 GSAD 原始碼並驗證。
curl -f -L https://github.com/greenbone/gsad/archive/refs/tags/v$GSAD_VERSION.tar.gz -o $SOURCE_DIR/gsad-$GSAD_VERSION.tar.gz
curl -f -L https://github.com/greenbone/gsad/releases/download/v$GSAD_VERSION/gsad-$GSAD_VERSION.tar.gz.asc -o $SOURCE_DIR/gsad-$GSAD_VERSION.tar.gz.asc
gpg --verify $SOURCE_DIR/gsad-$GSAD_VERSION.tar.gz.asc $SOURCE_DIR/gsad-$GSAD_VERSION.tar.gz
  1. 解壓縮取得原始程式碼。
tar -C $SOURCE_DIR -xvzf $SOURCE_DIR/gsad-$GSAD_VERSION.tar.gz
  1. 創立編譯的路徑和資料夾,進行編譯。
mkdir -p $BUILD_DIR/gsad

cmake \
-S $SOURCE_DIR/gsad-$GSAD_VERSION \
-B $BUILD_DIR/gsad \
-DCMAKE_INSTALL_PREFIX=$INSTALL_PREFIX \
-DCMAKE_BUILD_TYPE=Release \
-DSYSCONFDIR=/etc \
-DLOCALSTATEDIR=/var \
-DGVMD_RUN_DIR=/run/gvmd \
-DGSAD_RUN_DIR=/run/gsad \
-DGVM_LOG_DIR=/var/log/gvm \
-DLOGROTATE_DIR=/etc/logrotate.d

cmake --build $BUILD_DIR/gsad -j$(nproc)
  1. 安裝後並且複製到指令集中。
mkdir -p $INSTALL_DIR/gsad && cd $BUILD_DIR/gsad

make DESTDIR=$INSTALL_DIR/gsad install

sudo cp -rv $INSTALL_DIR/gsad/* /

配置 openvas-smb

openvas-smb 是 SMB(Server Message Block)掃描工具,用於掃描 Windows 共享(SMB),檢測 Windows 漏洞。

  1. 首先我們先定義版本,方便後面下載。
export OPENVAS_SMB_VERSION=22.5.3
  1. 安裝 openvas-smb 所需要的相關套件。
sudo apt install -y \
gcc-mingw-w64 \
libgnutls28-dev \
libglib2.0-dev \
libpopt-dev \
libunistring-dev \
heimdal-multidev \
perl-base
  1. 下載 openvas-smb 原始碼並驗證。
curl -f -L https://github.com/greenbone/openvas-smb/archive/refs/tags/v$OPENVAS_SMB_VERSION.tar.gz -o $SOURCE_DIR/openvas-smb-$OPENVAS_SMB_VERSION.tar.gz
curl -f -L https://github.com/greenbone/openvas-smb/releases/download/v$OPENVAS_SMB_VERSION/openvas-smb-v$OPENVAS_SMB_VERSION.tar.gz.asc -o $SOURCE_DIR/openvas-smb-$OPENVAS_SMB_VERSION.tar.gz.asc
gpg --verify $SOURCE_DIR/openvas-smb-$OPENVAS_SMB_VERSION.tar.gz.asc $SOURCE_DIR/openvas-smb-$OPENVAS_SMB_VERSION.tar.gz
  1. 解壓縮取得原始程式碼。
tar -C $SOURCE_DIR -xvzf $SOURCE_DIR/openvas-smb-$OPENVAS_SMB_VERSION.tar.gz
  1. 創立編譯的路徑和資料夾,進行編譯。
mkdir -p $BUILD_DIR/openvas-smb

cmake \
-S $SOURCE_DIR/openvas-smb-$OPENVAS_SMB_VERSION \
-B $BUILD_DIR/openvas-smb \
-DCMAKE_INSTALL_PREFIX=$INSTALL_PREFIX \
-DCMAKE_BUILD_TYPE=Release

cmake --build $BUILD_DIR/openvas-smb -j$(nproc)
  1. 安裝後並且複製到指令集中。
mkdir -p $INSTALL_DIR/openvas-smb && cd $BUILD_DIR/openvas-smb

make DESTDIR=$INSTALL_DIR/openvas-smb install

sudo cp -rv $INSTALL_DIR/openvas-smb/* /

配置 openvas-scanner

openvas-scanner 是 OpenVAS 核心掃描引擎,負責執行實際的漏洞掃描。

  1. 首先我們先定義版本,方便後面下載。
export OPENVAS_SCANNER_VERSION=23.15.3
  1. 安裝 openvas-scanner 所需要的相關套件。
sudo apt install -y \
bison \
libglib2.0-dev \
libgnutls28-dev \
libgcrypt20-dev \
libpcap-dev \
libgpgme-dev \
libksba-dev \
rsync \
nmap \
libjson-glib-dev \
libcurl4-gnutls-dev \
libbsd-dev \
krb5-multidev \
python3-impacket \
libsnmp-dev
  1. 下載 openvas-scanner 原始碼並驗證。
curl -f -L https://github.com/greenbone/openvas-scanner/archive/refs/tags/v$OPENVAS_SCANNER_VERSION.tar.gz -o $SOURCE_DIR/openvas-scanner-$OPENVAS_SCANNER_VERSION.tar.gz
curl -f -L https://github.com/greenbone/openvas-scanner/releases/download/v$OPENVAS_SCANNER_VERSION/openvas-scanner-v$OPENVAS_SCANNER_VERSION.tar.gz.asc -o $SOURCE_DIR/openvas-scanner-$OPENVAS_SCANNER_VERSION.tar.gz.asc
gpg --verify $SOURCE_DIR/openvas-scanner-$OPENVAS_SCANNER_VERSION.tar.gz.asc $SOURCE_DIR/openvas-scanner-$OPENVAS_SCANNER_VERSION.tar.gz
  1. 解壓縮取得原始程式碼。
tar -C $SOURCE_DIR -xvzf $SOURCE_DIR/openvas-scanner-$OPENVAS_SCANNER_VERSION.tar.gz
  1. 創立編譯的路徑和資料夾,進行編譯。
mkdir -p $BUILD_DIR/openvas-scanner

cmake \
-S $SOURCE_DIR/openvas-scanner-$OPENVAS_SCANNER_VERSION \
-B $BUILD_DIR/openvas-scanner \
-DCMAKE_INSTALL_PREFIX=$INSTALL_PREFIX \
-DCMAKE_BUILD_TYPE=Release \
-DSYSCONFDIR=/etc \
-DLOCALSTATEDIR=/var \
-DOPENVAS_FEED_LOCK_PATH=/var/lib/openvas/feed-update.lock \
-DOPENVAS_RUN_DIR=/run/ospd

cmake --build $BUILD_DIR/openvas-scanner -j$(nproc)
  1. 安裝後並且複製到指令集中。
mkdir -p $INSTALL_DIR/openvas-scanner && cd $BUILD_DIR/openvas-scanner

make DESTDIR=$INSTALL_DIR/openvas-scanner install

sudo cp -rv $INSTALL_DIR/openvas-scanner/* /
  1. 從 23.0 版本開始,openvasd_server 設定必須指向一個正在運行的 OpenVASD 實例。
printf "table_driven_lsc = yes\n" | sudo tee /etc/openvas/openvas.conf
printf "openvasd_server = http://127.0.0.1:3000\n" | sudo tee -a /etc/openvas/openvas.conf

配置 ospd-openvas

ospd-openvas 是 OpenVAS 與 GVM 的溝通橋樑。

  1. 首先我們先定義版本,方便後面下載。
export OSPD_OPENVAS_VERSION=22.7.1
  1. 安裝 ospd-openvas 所需要的相關套件。
sudo apt install -y \
python3 \
python3-pip \
python3-setuptools \
python3-packaging \
python3-wrapt \
python3-cffi \
python3-psutil \
python3-lxml \
python3-defusedxml \
python3-paramiko \
python3-redis \
python3-gnupg \
python3-paho-mqtt
  1. 下載 ospd-openvas 原始碼並驗證。
curl -f -L https://github.com/greenbone/ospd-openvas/archive/refs/tags/v$OSPD_OPENVAS_VERSION.tar.gz -o $SOURCE_DIR/ospd-openvas-$OSPD_OPENVAS_VERSION.tar.gz
curl -f -L https://github.com/greenbone/ospd-openvas/releases/download/v$OSPD_OPENVAS_VERSION/ospd-openvas-v$OSPD_OPENVAS_VERSION.tar.gz.asc -o $SOURCE_DIR/ospd-openvas-$OSPD_OPENVAS_VERSION.tar.gz.asc
gpg --verify $SOURCE_DIR/ospd-openvas-$OSPD_OPENVAS_VERSION.tar.gz.asc $SOURCE_DIR/ospd-openvas-$OSPD_OPENVAS_VERSION.tar.gz
  1. 解壓縮取得原始程式碼。
tar -C $SOURCE_DIR -xvzf $SOURCE_DIR/ospd-openvas-$OSPD_OPENVAS_VERSION.tar.gz
  1. 進入資料夾,進行編譯。
cd $SOURCE_DIR/ospd-openvas-$OSPD_OPENVAS_VERSION

mkdir -p $INSTALL_DIR/ospd-openvas

sudo python3 -m pip install --root=$INSTALL_DIR/ospd-openvas --no-warn-script-location .
  1. 複製到指令集中。
sudo cp -rv $INSTALL_DIR/ospd-openvas/* /

配置 OpenVASD

OpenVASD 主要用於檢測易受攻擊的產品,目前 gvmd 只整合了 notus。

  1. 首先我們先定義版本,方便後面下載。
export OPENVAS_DAEMON=23.15.3
  1. 安裝 OpenVASD 所需要的相關套件。
sudo apt install -y \
cargo \
pkg-config \
libssl-dev
  1. 因為後面需要 Cargo Version 4 的版本,原本的版本太舊了,因此先卸載 Rust。
sudo apt remove rustc -y
  1. 透過 Rust 的 installer 進行安裝,並且選擇 standard installation 即可。
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
  1. 設定環境變數。
. "$HOME/.cargo/env"
  1. 查看 rustc 的 version,就可以看到它升級了。
rustc --version
---

rustc 1.84.1 (e71f9a9a9 2025-01-27)
  1. 下載 OpenVASD 原始碼並驗證。
curl -f -L https://github.com/greenbone/openvas-scanner/archive/refs/tags/v$OPENVAS_DAEMON.tar.gz -o $SOURCE_DIR/openvas-scanner-$OPENVAS_DAEMON.tar.gz
curl -f -L https://github.com/greenbone/openvas-scanner/releases/download/v$OPENVAS_DAEMON/openvas-scanner-v$OPENVAS_DAEMON.tar.gz.asc -o $SOURCE_DIR/openvas-scanner-$OPENVAS_DAEMON.tar.gz.asc
gpg --verify $SOURCE_DIR/openvas-scanner-$OPENVAS_DAEMON.tar.gz.asc $SOURCE_DIR/openvas-scanner-$OPENVAS_DAEMON.tar.gz
  1. 解壓縮取得原始程式碼。
tar -C $SOURCE_DIR -xvzf $SOURCE_DIR/openvas-scanner-$OPENVAS_DAEMON.tar.gz
  1. 進入資料夾,進行編譯。
mkdir -p $INSTALL_DIR/openvasd/usr/local/bin
cd $SOURCE_DIR/openvas-scanner-$OPENVAS_DAEMON/rust/src/openvasd
cargo build --release

cd $SOURCE_DIR/openvas-scanner-$OPENVAS_DAEMON/rust/src/scannerctl
cargo build --release
  1. 複製到指令集中。
sudo cp -v ../../target/release/openvasd $INSTALL_DIR/openvasd/usr/local/bin/
sudo cp -v ../../target/release/scannerctl $INSTALL_DIR/openvasd/usr/local/bin/
sudo cp -rv $INSTALL_DIR/openvasd/* /

配置 greenbone-feed-sync

greenbone-feed-sync 工具是一個基於 Python 的腳本,用於將所有來自 Greenbone 社群資料庫的資料下載到本地機器

  1. 安裝腳本所需要的套件。
sudo apt install -y \
python3 \
python3-pip
  1. 安裝 greenbone-feed-sync 腳本。
mkdir -p $INSTALL_DIR/greenbone-feed-sync

python3 -m pip install --root=$INSTALL_DIR/greenbone-feed-sync --no-warn-script-location greenbone-feed-sync

sudo cp -rv $INSTALL_DIR/greenbone-feed-sync/* /

配置 gvm-tools

gvm-tools 提供 CLI 與 Python API,用來與 gvmd 互動。

  1. 安裝 gvm-tools 所需要的相關套件。
sudo apt install -y \
python3 \
python3-lxml \
python3-packaging \
python3-paramiko \
python3-pip \
python3-setuptools \
python3-venv
  1. 安裝 gvm-tools。
mkdir -p $INSTALL_DIR/gvm-tools

python3 -m pip install --root=$INSTALL_DIR/gvm-tools --no-warn-script-location gvm-tools

sudo cp -rv $INSTALL_DIR/gvm-tools/* /

配置 Redis-Server

Redis 是 OpenVAS 用來儲存掃描結果的資料庫。

  1. 透過 apt 進行安裝 Redis。
sudo apt install -y redis-server
  1. 將 openvas 的 Redis 設定檔,進行設定。
sudo cp $SOURCE_DIR/openvas-scanner-$OPENVAS_SCANNER_VERSION/config/redis-openvas.conf /etc/redis/
sudo chown redis:redis /etc/redis/redis-openvas.conf
echo "db_address = /run/redis-openvas/redis.sock" | sudo tee -a /etc/openvas/openvas.conf
  1. 啟動 Redis 服務。
sudo systemctl start redis-server@openvas.service
sudo systemctl enable redis-server@openvas.service
  1. 讓 redis 的使用者也屬於 gvm 這一個 group。
sudo usermod -aG redis gvm

調整所有路徑權限

  1. 將執行的路徑擁有者,都改為 gvm 這個 group。
sudo mkdir -p /var/lib/notus
sudo mkdir -p /run/gvmd

sudo chown -R gvm:gvm /var/lib/gvm
sudo chown -R gvm:gvm /var/lib/openvas
sudo chown -R gvm:gvm /var/lib/notus
sudo chown -R gvm:gvm /var/log/gvm
sudo chown -R gvm:gvm /run/gvmd

sudo chmod -R g+srw /var/lib/gvm
sudo chmod -R g+srw /var/lib/openvas
sudo chmod -R g+srw /var/log/gvm
  1. 將 gvmd 指令也改為 gvm 這個 user 和 group,並設置權限。
sudo chown gvm:gvm /usr/local/sbin/gvmd
sudo chmod 6750 /usr/local/sbin/gvmd
  1. 為了驗證資料庫內容,需要建立一個包含 Greenbone 社群資料庫完整性金鑰的 GnuPG 金鑰鏈。
curl -f -L https://www.greenbone.net/GBCommunitySigningKey.asc -o /tmp/GBCommunitySigningKey.asc

export GNUPGHOME=/tmp/openvas-gnupg
mkdir -p $GNUPGHOME

gpg --import /tmp/GBCommunitySigningKey.asc
echo "8AE4BE429B60A59B311C2E739823FAA60ED1E580:6:" | gpg --import-ownertrust

export OPENVAS_GNUPG_HOME=/etc/openvas/gnupg
sudo mkdir -p $OPENVAS_GNUPG_HOME
sudo cp -r /tmp/openvas-gnupg/* $OPENVAS_GNUPG_HOME/
sudo chown -R gvm:gvm $OPENVAS_GNUPG_HOME

使用者皆可執行 OpenVAS

  1. 透過指令執行 sudo visudo,在最底下增加下面的程式碼。
echo "%gvm ALL = NOPASSWD: /usr/local/sbin/openvas" | sudo tee /etc/sudoers.d/gvm \
&& sudo chmod 0440 /etc/sudoers.d/gvm

配置 PostgreSQL 資料庫內容

  1. 透過 apt 安裝 PostgreSQL。
sudo apt install -y postgresql
  1. 啟動服務。
sudo systemctl start postgresql@16-main
  1. 進入到 postgres 裡面的 bash。
sudo -u postgres bash
  1. 創立 user 和 DB。
cd
createuser -DRS gvm
createdb -O gvm gvmd
  1. 在 DB 中賦予角色和權限。
psql gvmd -c "create role dba with superuser noinherit; grant dba to gvm;"

exit

配置 gvmd 使用者帳號密碼

  1. 透過指令設定帳號密碼,等一下再登入頁面需要使用,<password>填寫自己的密碼。
sudo gvmd --create-user=admin --password=<password>

配置 Feed import

  1. 首先取得 gvmd user 的 ID
sudo gvmd --get-users --verbose | grep admin | awk '{print $2}'
---

23ce75c1-8407-40e1-afb1-b74f177bb7cb
  1. 將 ID 進行設定,<ID>要填寫剛剛上面得到的值喔!
sudo gvmd --modify-setting 78eceaec-3385-11ea-b237-28d24461215b --value <ID>

配置 System Daemon

  1. 設定 ospd-openvas.service,將下面的文字複製進去,並 cp 到 systemd 裡面。
vim $BUILD_DIR/ospd-openvas.service
[Unit]
Description=OSPd Wrapper for the OpenVAS Scanner (ospd-openvas)
Documentation=man:ospd-openvas(8) man:openvas(8)
After=network.target networking.service redis-server@openvas.service openvasd.service
Wants=redis-server@openvas.service openvasd.service
ConditionKernelCommandLine=!recovery

[Service]
Type=exec
User=gvm
Group=gvm
RuntimeDirectory=ospd
RuntimeDirectoryMode=2775
PIDFile=/run/ospd/ospd-openvas.pid
ExecStart=/usr/local/bin/ospd-openvas --foreground --unix-socket /run/ospd/ospd-openvas.sock --pid-file /run/ospd/ospd-openvas.pid --log-file /var/log/gvm/ospd-openvas.log --lock-file-dir /var/lib/openvas --socket-mode 0o770 --notus-feed-dir /var/lib/notus/advisories
SuccessExitStatus=SIGKILL
Restart=always
RestartSec=60

[Install]
WantedBy=multi-user.target
sudo cp -v $BUILD_DIR/ospd-openvas.service /etc/systemd/system/
  1. 設定 gvmd.service,將下面的文字複製進去,並 cp 到 systemd 裡面。
vim $BUILD_DIR/gvmd.service
[Unit]
Description=Greenbone Vulnerability Manager daemon (gvmd)
After=network.target networking.service postgresql.service ospd-openvas.service
Wants=postgresql.service ospd-openvas.service
Documentation=man:gvmd(8)
ConditionKernelCommandLine=!recovery

[Service]
Type=exec
User=gvm
Group=gvm
PIDFile=/run/gvmd/gvmd.pid
RuntimeDirectory=gvmd
RuntimeDirectoryMode=2775
ExecStart=/usr/local/sbin/gvmd --foreground --osp-vt-update=/run/ospd/ospd-openvas.sock --listen-group=gvm
Restart=always
TimeoutStopSec=10

[Install]
WantedBy=multi-user.target
sudo cp -v $BUILD_DIR/gvmd.service /etc/systemd/system/
  1. 設定 gsad.service,將下面的文字複製進去,並 cp 到 systemd 裡面。

如果要讓外網的人可以看到 Web,請將下面的 127.0.0.1 改成 0.0.0.0

vim $BUILD_DIR/gsad.service
[Unit]
Description=Greenbone Security Assistant daemon (gsad)
Documentation=man:gsad(8) https://www.greenbone.net
After=network.target gvmd.service
Wants=gvmd.service

[Service]
Type=exec
User=gvm
Group=gvm
RuntimeDirectory=gsad
RuntimeDirectoryMode=2775
PIDFile=/run/gsad/gsad.pid
ExecStart=/usr/local/sbin/gsad --foreground --listen=127.0.0.1 --port=9392 --http-only
Restart=always
TimeoutStopSec=10

[Install]
WantedBy=multi-user.target
Alias=greenbone-security-assistant.service
sudo cp -v $BUILD_DIR/gsad.service /etc/systemd/system/
  1. 設定 openvasd.service,將下面的文字複製進去,並 cp 到 systemd 裡面。
vim $BUILD_DIR/openvasd.service
[Unit]
Description=OpenVASD
Documentation=https://github.com/greenbone/openvas-scanner/tree/main/rust/openvasd
ConditionKernelCommandLine=!recovery

[Service]
Type=exec
User=gvm
RuntimeDirectory=openvasd
RuntimeDirectoryMode=2775
ExecStart=/usr/local/bin/openvasd --mode service_notus --products /var/lib/notus/products --advisories /var/lib/notus/advisories --listening 127.0.0.1:3000
SuccessExitStatus=SIGKILL
Restart=always
RestartSec=60

[Install]
WantedBy=multi-user.target
sudo cp -v $BUILD_DIR/openvasd.service /etc/systemd/system/
  1. 透過指令進行 reload。
sudo systemctl daemon-reload

同步 NVT(Network Vulnerability Tests)

使用以下指令同步 NVT(Network Vulnerability Tests)資料庫(這可能需要很長時間,即使你的網速很好)。 如果你是在企業內部進行這項設定,請確保 網路管理團隊 已開放 rsync 通訊埠,因為它很可能是被封鎖的。 rsync 預設使用 TCP 873 通訊埠進行同步。

sudo greenbone-nvt-sync

同步其他資料庫

使用以下指令下載 SCAP(Security Content Automation Protocol)資料庫CERT(Computer Emergency Response Team)資料庫 以及 GVMD(Greenbone Vulnerability Management Daemon)資料庫。 請確保 逐條執行 這些指令(即使你的網速很好,這個過程仍可能需要很長時間):

sudo -u gvm greenbone-feed-sync --type SCAP
sudo -u gvm greenbone-feed-sync --type CERT
sudo -u gvm greenbone-feed-sync --type GVMD_DATA

控制所有服務

所有服務應該能順利啟動,且你的 GVM 應該運行正常。儘管所有服務已啟動,但還需要一些時間來同步 NVT(網路漏洞測試),因為這會花費較長的時間。

若要使用 GVM,請在網頁瀏覽器中輸入 127.0.0.1:9392,並使用你的用戶名和密碼進行登入。

  1. 設定為開機自動啟動。
sudo systemctl enable ospd-openvas
sudo systemctl enable gvmd
sudo systemctl enable gsad
sudo systemctl enable openvasd
  1. 啟動所有服務。
sudo systemctl start ospd-openvas
sudo systemctl start gvmd
sudo systemctl start gsad
sudo systemctl start openvasd
  1. 如果需要停用服務。
sudo systemctl stop ospd-openvas
sudo systemctl stop gvmd
sudo systemctl stop gsad
sudo systemctl stop openvasd

Kali Linux 上安裝 GVM

因為我沒有試過,但安裝起來比起 Ubuntu 還要簡單,如果沒有 OS 的限制的話,可以參考Kali Linux Install Guide


實際弱掃一次

  1. 首先我們登入http://127.0.0.1:9392,並且輸入最前面自己設定的帳號密碼。

gvm-login

  1. 進入之後應該會看到空白的 dashboard,代表登入成功。

gvm-dashboards

  1. 接著我們可以看一下 feed status,要等到右邊全部都變成 current 需要一段時間,至少 NVT 要 current 要 current,其他不要是 Too Old,這個我真的等他 loading 很久,如果都沒有更新,可以考慮再同步一次資料庫。

gvm-feed-status

  1. 接下來我們就可以針對任一個hostname或ip做一次快速的掃描。

gvm-task-wizard

  1. 填入目標機器的IP或hostname,請記得要合法喔!

gvm-task-wizard-ip

  1. 他就會自動開始跑,從放到queue,再從0%跑到100%,就會產出測試結果。

gvm-task-wizard-done

  1. 我們也能從報告的地方看到這次掃描的結果和詳細分析。

gvm-report


總結

OpenVAS/GVM 是一款功能強大的開源漏洞掃描工具,適用於企業資安管理、滲透測試與安全研究。透過完整的模組化架構、強大的掃描能力與 API 自動化支援,它能幫助用戶發現並修復潛在安全風險,是安全從業人員必備的工具之一。