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 相關的系統使用者,並設定環境變數。
-
創立一個新的 user 給 gvm 使用,並且需要設定為不可以登入。
sudo useradd -r -M -U -G sudo -s /usr/sbin/nologin gvm
- 將我們加入到 gvm 這個群組裡。
sudo usermod -aG gvm $USER
su $USER
- 設定環境變數。
export PATH=$PATH:/usr/local/sbin
5.設定安裝前綴(Installation Prefix)環境變數。
export INSTALL_PREFIX=/usr/local
- 建立原始碼目錄(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
安裝基本相關的套件
這部分安裝編譯所需的基本套件與工具。
- 下載並安裝相關的套件。
sudo apt update
sudo apt install --no-install-recommends --assume-yes \
build-essential \
curl \
cmake \
pkg-config \
python3 \
python3-pip \
gnupg
匯入 Greenbone 金鑰
這部分確保下載的軟體來源可信任,避免安裝惡意程式。
- 匯入 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 相關函式庫,其他組件會依賴這些函式庫。
- 設定 GVM LIB 的版本。
export GVM_LIBS_VERSION=22.18.0
- 安裝 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
- 下載 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
- 解壓縮取得原始程式碼。
tar -C $SOURCE_DIR -xvzf $SOURCE_DIR/gvm-libs-$GVM_LIBS_VERSION.tar.gz
- 創立編譯的路徑和資料夾,進行編譯。
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)
- 安裝後並且複製到指令集中。
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) 這是核心管理服務,負責任務調度與漏洞資料庫管理。
- 設定 gvmd 的版本。
export GVMD_VERSION=25.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
- 安裝 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
- 下載 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
- 解壓縮取得原始程式碼。
tar -C $SOURCE_DIR -xvzf $SOURCE_DIR/gvmd-$GVMD_VERSION.tar.gz
- 創立編譯的路徑和資料夾,進行編譯。
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)
- 安裝後並且複製到指令集中。
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 資料庫的接口。
- 首先我們先定義版本,方便後面下載。
export PG_GVM_VERSION=22.6.7
- 安裝 pg-gvm 所需要的相關套件。
sudo apt install -y \
libglib2.0-dev \
libical-dev \
postgresql-server-dev-all
- 下載 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
- 解壓縮取得原始程式碼。
tar -C $SOURCE_DIR -xvzf $SOURCE_DIR/pg-gvm-$PG_GVM_VERSION.tar.gz
- 創立編譯的路徑和資料夾,進行編譯。
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)
- 安裝後並且複製到指令集中。
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,讓使用者可以透過瀏覽器操作。
- 首先我們先定義版本,方便後面下載。
export GSA_VERSION=24.3.0
- 因為要使用 nodejs,因此我們透過指令來增加 source list。
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo bash -
- 接著透過 apt 我們就可以進行安裝 nodejs。
sudo apt-get install -y nodejs
- 下載 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
- 解壓縮取得原始程式碼。
tar -C $SOURCE_DIR -xvzf $SOURCE_DIR/gsa-$GSA_VERSION.tar.gz
- 創立編譯的路徑和資料夾,進行編譯。
cd $SOURCE_DIR/gsa-$GSA_VERSION
rm -rf build
npm install
npm run build
- 安裝後並且複製到 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 服務的後端伺服器。
- 首先我們先定義版本,方便後面下載。
export GSAD_VERSION=24.2.2
- 安裝 GSAD 所需要的相關套件。
sudo apt install -y \
libbrotli-dev \
libglib2.0-dev \
libgnutls28-dev \
libmicrohttpd-dev \
libxml2-dev
- 下載 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
- 解壓縮取得原始程式碼。
tar -C $SOURCE_DIR -xvzf $SOURCE_DIR/gsad-$GSAD_VERSION.tar.gz
- 創立編譯的路徑和資料夾,進行編譯。
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)
- 安裝後並且複製到指令集中。
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 漏洞。
- 首先我們先定義版本,方便後面下載。
export OPENVAS_SMB_VERSION=22.5.3
- 安裝 openvas-smb 所需要的相關套件。
sudo apt install -y \
gcc-mingw-w64 \
libgnutls28-dev \
libglib2.0-dev \
libpopt-dev \
libunistring-dev \
heimdal-multidev \
perl-base
- 下載 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
- 解壓縮取得原始程式碼。
tar -C $SOURCE_DIR -xvzf $SOURCE_DIR/openvas-smb-$OPENVAS_SMB_VERSION.tar.gz
- 創立編譯的路徑和資料夾,進行編譯。
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)
- 安裝後並且複製到指令集中。
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 核心掃描引擎,負責執行實際的漏洞掃描。
- 首先我們先定義版本,方便後面下載。
export OPENVAS_SCANNER_VERSION=23.15.3
- 安裝 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
- 下載 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
- 解壓縮取得原始程式碼。
tar -C $SOURCE_DIR -xvzf $SOURCE_DIR/openvas-scanner-$OPENVAS_SCANNER_VERSION.tar.gz
- 創立編譯的路徑和資料夾,進行編譯。
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)
- 安裝後並且複製到指令集中。
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/* /
- 從 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 的溝通橋樑。
- 首先我們先定義版本,方便後面下載。
export OSPD_OPENVAS_VERSION=22.7.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
- 下載 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
- 解壓縮取得原始程式碼。
tar -C $SOURCE_DIR -xvzf $SOURCE_DIR/ospd-openvas-$OSPD_OPENVAS_VERSION.tar.gz
- 進入資料夾,進行編譯。
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 .
- 複製到指令集中。
sudo cp -rv $INSTALL_DIR/ospd-openvas/* /
配置 OpenVASD
OpenVASD 主要用於檢測易受攻擊的產品,目前 gvmd 只整合了 notus。
- 首先我們先定義版本,方便後面下載。
export OPENVAS_DAEMON=23.15.3
- 安裝 OpenVASD 所需要的相關套件。
sudo apt install -y \
cargo \
pkg-config \
libssl-dev
- 因為後面需要 Cargo Version 4 的版本,原本的版本太舊了,因此先卸載 Rust。
sudo apt remove rustc -y
- 透過 Rust 的 installer 進行安裝,並且選擇 standard installation 即可。
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
- 設定環境變數。
. "$HOME/.cargo/env"
- 查看 rustc 的 version,就可以看到它升級了。
rustc --version
---
rustc 1.84.1 (e71f9a9a9 2025-01-27)
- 下載 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
- 解壓縮取得原始程式碼。
tar -C $SOURCE_DIR -xvzf $SOURCE_DIR/openvas-scanner-$OPENVAS_DAEMON.tar.gz
- 進入資料夾,進行編譯。
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
- 複製到指令集中。
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 社群資料庫的資料下載到本地機器
- 安裝腳本所需要的套件。
sudo apt install -y \
python3 \
python3-pip
- 安裝 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 互動。
- 安裝 gvm-tools 所需要的相關套件。
sudo apt install -y \
python3 \
python3-lxml \
python3-packaging \
python3-paramiko \
python3-pip \
python3-setuptools \
python3-venv
- 安裝 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 用來儲存掃描結果的資料庫。
- 透過 apt 進行安裝 Redis。
sudo apt install -y redis-server
- 將 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
- 啟動 Redis 服務。
sudo systemctl start [email protected]
sudo systemctl enable [email protected]
- 讓 redis 的使用者也屬於 gvm 這一個 group。
sudo usermod -aG redis gvm
調整所有路徑權限
- 將執行的路徑擁有者,都改為 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
- 將 gvmd 指令也改為 gvm 這個 user 和 group,並設置權限。
sudo chown gvm:gvm /usr/local/sbin/gvmd
sudo chmod 6750 /usr/local/sbin/gvmd
- 為了驗證資料庫內容,需要建立一個包含 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
- 透過指令執行 sudo visudo,在最底下增加下面的程式碼。
echo "%gvm ALL = NOPASSWD: /usr/local/sbin/openvas" | sudo tee /etc/sudoers.d/gvm \
&& sudo chmod 0440 /etc/sudoers.d/gvm
配置 PostgreSQL 資料庫內容
- 透過 apt 安裝 PostgreSQL。
sudo apt install -y postgresql
- 啟動服務。
sudo systemctl start postgresql@16-main
- 進入到 postgres 裡面的 bash。
sudo -u postgres bash
- 創立 user 和 DB。
cd
createuser -DRS gvm
createdb -O gvm gvmd
- 在 DB 中賦予角色和權限。
psql gvmd -c "create role dba with superuser noinherit; grant dba to gvm;"
exit
配置 gvmd 使用者帳號密碼
- 透過指令設定帳號密碼,等一下再登入頁面需要使用,
<password>填寫自己的密碼。
sudo gvmd --create-user=admin --password=<password>
配置 Feed import
- 首先取得 gvmd user 的 ID
sudo gvmd --get-users --verbose | grep admin | awk '{print $2}'
---
23ce75c1-8407-40e1-afb1-b74f177bb7cb
- 將 ID 進行設定,
<ID>要填寫剛剛上面得到的值喔!
sudo gvmd --modify-setting 78eceaec-3385-11ea-b237-28d24461215b --value <ID>
配置 System Daemon
- 設定 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 [email protected] openvasd.service
Wants=[email protected] 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/
- 設定 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/
- 設定 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/
- 設定 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/
- 透過指令進行 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