目次

この記事の目次です。

1. OpenVASとは
2. UbuntuにOpenVAS(GVM)をインストールする方法
3. CentOSにOpenVAS(GVM)をインストールする方法

更新履歴

1. OpenVASとは

OpenVASとは無料で利用できるネットワーク診断ツールです。

OpenVASは、オープンソースとして開発されていたNessusから派生したネットワーク診断ツールで、ポートスキャンや擬似的なアクセスなどのテストを行って、対象サーバーの脆弱性を調査するツールです。 ライセンスはGNU GPLで、ツールが提供されるだけでなく、脆弱性データベースは日々更新されています。

GSM(Greenbone Security Assistant)

OpenVASは、2006年からドイツのGreenbone Networks社により開発支援されており、 同スキャナは、商用脆弱性管理製品ファミリ 「Greenbone Security Manager」 (GSM) の一部として、他のオープンソースモジュールとともに 「Greenbone Vulnerability Management」(GVM) を構成します。

Greenboneのドキュメント

Greenboneの製品のマニュアルは、以下のURLで公開されています。

https://www.greenbone.net/en/documents/

主なシステム構成

OpenVASは、主にopenvas-scanner、gvmd、gsa、ospd-openvas、gvm-libsなどのプロダクトでシステムが構成されます。

openvas-scanner

openvas-scannerは、Greenbone Vulnerability Management (GVM) のスキャナコンポーネントです。 Greenbone Security Managerアプライアンスで使用され、Network Vulnerability Test (NVT:ネットワーク脆弱性テスト) の継続的に更新および拡張されたフィードを実行するフル機能のスキャンエンジンです。

gvmd

gvmdは、セキュリティスキャナとユーザクライアント間の中央管理サービスです。 脆弱性管理設定とスキャン結果の保存を管理します。 データ、制御コマンド、およびワークフローへのアクセスは、XMLベースのGreenbone Management Protocol (GMP) を介して提供されます。 OpenVASのようなスキャナの制御は、Open Scanner Protocol (OSP) を介して行われます。

gsa

gsaは、Webインターフェイスです。 gvmdに接続して、脆弱性管理のためのフル機能のユーザインターフェイスを提供します。

ospd-openvas

ospd-openvasは、GVMがOpenVASをリモートで制御できるようにするためのOSPサーバ実装です。 openvas-scannerを起動したら、Webインターフェイスgsa(Greenbone Security Assistant)などを使用して、gvmd(Greenbone Vulnerability Manager)用にOpenVASを設定する必要があります。 その後、OpenVASを使用するスキャンタスクが作成できます。

gvm-libs

gvm-libsは、gvmのライブラリモジュールです。 gvmをサポートするさまざまな機能を提供します。

2. UbuntuにOpenVAS(GVM)をインストールする方法

UbuntuにOpenVAS(GVM)をインストールする方法についてまとめています。

詳細

3. CentOSにOpenVAS(GVM)をインストールする方法

執筆時点で最新だったOpenVAS(GVM-11)をCentOS8にインストールする方法を紹介いたします。

元となる解説

この解説は「Full GVM-11 Build Guide for CentOS 8(https://community.greenbone.net/t/full-gvm-11-build-guide-for-centos-8/5425)」を参考にしています。 rpmではなく、OpenVASをソースからダウンロードしてきて、ビルドして、インストールする方法になります。

記号について

ルートで実行するコマンドは「#」を先頭に記述して表し、gvmユーザで実行するコマンドは「$」を先頭に記述して表しています。 コマンドの実行ユーザを間違えるとインストールがうまくいきません。 またやり直しても間違えたときのディレクトリやファイルが残るとアクセス権の影響で動作不良が置きますので注意が必要です。

CentOS8のインストール

minimalでCentOS8をインストールします。

Python3のインストール

Python3のインストールします。

# yum -y install python3

python3がデフォルトになるよう設定します。

# alternatives --config python

epelリポジトリの追加

epelリポジトリを追加します。

# yum -y install epel-release

Centos-Powertoolsリポジトリの有効化

Centos-Powertoolsリポジトリを有効化します。

# yum config-manager --set-enabled PowerTools

CentOS開発ツールのインストール

CentOS開発ツールをインストールします。

# yum groupinstall -y "development tools"

その他必要なパッケージのインストール

その他必要なパッケージをインストールします。

# yum install -y cmake glib2-devel zlib-devel gnutls-devel libuuid-devel libssh-devel libxml2-devel libgcrypt-devel openldap-devel popt-devel redis libical-devel openssl-devel hiredis-devel radcli-devel gpgme-devel libksba-devel doxygen libpcap-devel nodejs python3-polib libmicrohttpd-devel gnutls-utils python3-devel libpq-devel texinfo xmltoman nmap sshpass socat mingw32-gcc ncurses-devel

PostgreSQLのインストール

PostgreSQLをインストールします。

# yum install -y postgresql-server postgresql-contrib postgresql-server-devel
# /usr/bin/postgresql-setup --initdb
# systemctl enable postgresql
# systemctl start postgresql

PostgreSQLデータベースのセットアップ

PostgreSQLデータベースのセットアップを行います。

# sudo -Hiu postgres
# createuser gvm
# createdb -O gvm gvmd
# psql gvmd
create role dba with superuser noinherit;
grant dba to gvm;
create extension "uuid-ossp";
create extension "pgcrypto";
\q
exit

PostgreSQLを再起動します。

# systemctl restart postgresql

GVMライブラリの追加

# echo "/opt/gvm/lib" > /etc/ld.so.conf.d/gvm.conf
# ldconfig

GVMユーザの作成

gvmユーザを作成します。

# useradd -r -d /opt/gvm -c "GVM (OpenVAS) User" -s /bin/bash gvm
# mkdir /opt/gvm
# mkdir /opt/gvm/src
# chown -R gvm:gvm /opt/gvm

パスの追加

パスを追加します。

# vim /etc/profile

一番最下部に
export PATH=$PATH:/opt/gvm/bin:/opt/gvm/sbin

パッケージのダウンロード

パッケージをダウンロードして解凍します。

# su gvm
$ cd /opt/gvm/src
$ wget -O gvm-libs-11.0.1.tar.gz https://github.com/greenbone/gvm-libs/archive/v11.0.1.tar.gz
$ wget -O openvas-scanner-7.0.1.tar.gz https://github.com/greenbone/openvas/archive/v7.0.1.tar.gz
$ wget -O ospd-2.0.1.tar.gz https://github.com/greenbone/ospd/archive/v2.0.1.tar.gz
$ wget -O ospd-openvas-1.0.1.tar.gz https://github.com/greenbone/ospd-openvas/archive/v1.0.1.tar.gz
$ wget -O gvmd-9.0.1.tar.gz https://github.com/greenbone/gvmd/archive/v9.0.1.tar.gz
$ wget -O gsa-9.0.1.tar.gz https://github.com/greenbone/gsa/archive/v9.0.1.tar.gz
$ wget -O openvas-smb-1.0.5.tar.gz https://github.com/greenbone/openvas-smb/archive/v1.0.5.tar.gz
$ cd /opt/gvm/src
$ tar zxvf gsa-9.0.1.tar.gz
$ tar zxvf gvm-libs-11.0.1.tar.gz
$ tar zxvf gvmd-9.0.1.tar.gz
$ tar zxvf openvas-scanner-7.0.1.tar.gz
$ tar zxvf openvas-smb-1.0.5.tar.gz
$ tar zxvf ospd-2.0.1.tar.gz
$ tar zxvf ospd-openvas-1.0.1.tar.gz

gvm-libsをビルド

gvm-libsをビルドしてインストールします。

# su gvm
$ cd /opt/gvm/src
$ export PKG_CONFIG_PATH=/opt/gvm/lib/pkgconfig
$ cd gvm-libs-11.0.1
$ mkdir build
$ cd build
$ cmake .. -DCMAKE_INSTALL_PREFIX=/opt/gvm
$ make
$ make doc
$ make install

Heimdalのインストール

Heimdalをインストールします。

# cd /usr/local/src
# wget https://github.com/heimdal/heimdal/releases/download/heimdal-7.7.0/heimdal-7.7.0.tar.gz
# tar xvfz heimdal-7.7.0.tar.gz
# cd heimdal-7.7.0
# ./configure --enable-otp=no --prefix=/opt/heimdal
# make
# make install
# ln -s /opt/heimdal/include /opt/heimdal/include/heimdal

ライブラリの追加

ライブラリを追加します。

# echo "/opt/heimdal/lib" > /etc/ld.so.conf.d/heimdal.conf
ldconfig

openvas-smbのインストール

openvas-smbをビルドしてインストールします。

# su gvm
$ cd /opt/gvm/src
$ export PKG_CONFIG_PATH=/opt/gvm/lib/pkgconfig:/opt/heimdal/lib/pkgconfig
$ cd openvas-smb-1.0.5
$ mkdir build
$ cd build/
$ cmake .. -DCMAKE_INSTALL_PREFIX=/opt/gvm
$ make
$ make install

scanner

scannerをビルドしてインストールします。

# su gvm
$ vim /opt/gvm/src/openvas-scanner-7.0.1/CMakeLists.txt

#set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${COVERAGE_FLAGS}")
とコメントアウトして、
set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -Werror -Wno-error=deprecated-declarations")
を追加します。

$ cd /opt/gvm/src
$ export PKG_CONFIG_PATH=/opt/gvm/lib/pkgconfig
$ cd openvas-scanner-7.0.1
$ mkdir build
$ cd build
$ cmake .. -DCMAKE_INSTALL_PREFIX=/opt/gvm
$ make
$ make doc
$ make install

Redisの設定

Redisの設定を行います。

# cp /etc/redis.conf /etc/redis.conf.orig
# cp /opt/gvm/src/openvas-scanner-7.0.1/config/redis-openvas.conf /etc/redis.conf
# chown redis /etc/redis.conf
# vim /etc/redis.conf

unixsocketの記述を以下に変更します。
unixsocket /tmp/redis.sock
unixsocketperm 770

Redisに合わせてopenvasを設定

Redisに合わせてopenvasを設定します。

# su gvm
$ echo "db_address = /tmp/redis.sock" > /opt/gvm/etc/openvas/openvas.conf
$ eixt
# systemctl enable redis
# systemctl start redis

transparent huge pagesを無効化

transparent huge pagesを無効化します。

# cat << EOF > /etc/systemd/system/disable-thp.service
[Unit]
Description=Disable Transparent Huge Pages (THP)

[Service]
Type=simple
ExecStart=/bin/sh -c "echo 'never' > /sys/kernel/mm/transparent_hugepage/enabled && echo 'never' > /sys/kernel/mm/transparent_hugepage/defrag"

[Install]
WantedBy=multi-user.target
EOF

# systemctl daemon-reload
# systemctl start disable-thp
# systemctl enable disable-thp

redisにgvmグループを追加

redisにgvmグループを追加します。

# usermod -aG redis gvm
systemctl restart redis

sudoersの修正

/etc/sudoersを修正します。

# visudo
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/opt/gvm/sbin"

#Allow the user running ospd-openvas, to launch openvas with root permissions
gvm ALL = NOPASSWD: /opt/gvm/sbin/openvas
gvm ALL = NOPASSWD: /opt/gvm/sbin/gsad

sysctl.confの修正

sysctl.confを修正します。

# echo "net.core.somaxconn = 1024" >> /etc/sysctl.conf
# echo 'vm.overcommit_memory = 1' >> /etc/sysctl.conf
# sysctl -p
# ldconfig

NVTデータの同期とアップデート

NVTデータを同期し、OpenVASのアップデートを行います。

# su gvm
$ greenbone-nvt-sync
$ openvas --update-vt-info

gvmdのインストール

gvmdをビルドしてインストールします。

# ln -s /usr/include /usr/include/postgresql
# su gvm
$ vi /opt/gvm/src/gvmd-9.0.1/CMakeLists.txt

set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -D_BSD_SOURCE -D_ISOC99_SOURCE -D_SVID_SOURCE -D_DEFAULT_SOURCE -D_FILE_OFFSET_BITS=64")
を以下に変更します。
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -lpq -D_BSD_SOURCE -D_ISOC99_SOURCE -D_SVID_SOURCE -D_DEFAULT_SOURCE -D_FILE_OFFSET_BITS=64")

$ cd /opt/gvm/src
$ export PKG_CONFIG_PATH=/opt/gvm/lib/pkgconfig
$ cd gvmd-9.0.1
$ mkdir build
$ cd build
$ cmake .. -DCMAKE_INSTALL_PREFIX=/opt/gvm/ -DPostgreSQL_TYPE_INCLUDE_DIR=/usr/include/pgsql/server -DPostgreSQL_INCLUDE_DIR=/usr/include/pgsql/server -DPostgreSQL_LIBRARY=/usr/lib64/pgsql
$ make
$ make doc
$ make install

yarnをインストール

yarnをインストールします。

# npm install -g yarn

gsaをインストール

gsaをビルドしてインストールします。

# su gvm
$ cd /opt/gvm/src
$ export PKG_CONFIG_PATH=/opt/gvm/lib/pkgconfig
$ cd gsa-9.0.1
$ mkdir build
$ cd build
$ cmake .. -DCMAKE_INSTALL_PREFIX=/opt/gvm
$ make
$ make doc
$ make install

データの同期を行います。

$ greenbone-scapdata-sync
$ greenbone-certdata-sync
$ gvm-manage-certs -a

Pythonパッケージディレクトリを設定します。

$ mkdir -p /opt/gvm/lib/python3.6/site-packages

OSPdとOSPd-OpenVASのインストール

OSPdとOSPd-OpenVASをビルドしてインストールします。

# su gvm
$ cd /opt/gvm/src
$ export PYTHONPATH=/opt/gvm/lib/python3.6/site-packages
$ export PKG_CONFIG_PATH=/opt/gvm/lib/pkgconfig
$ cd ospd-2.0.1
$ python3 setup.py install --prefix=/opt/gvm
$ cd /opt/gvm/src
$ export PYTHONPATH=/opt/gvm/lib/python3.6/site-packages
$ export PKG_CONFIG_PATH=/opt/gvm/lib/pkgconfig
$ cd ospd-openvas-1.0.1
$ python3 setup.py install --prefix=/opt/gvm

起動スクリプトの作成

起動スクリプトを作成します。

# cat << EOF > /etc/systemd/system/ospd.service
[Unit]
Description=Job that runs the ospd-openvas daemon
Documentation=man:gvm
After=postgresql.service

[Service]
Environment=PATH=/opt/gvm/bin/ospd-scanner/bin:/opt/gvm/bin:/opt/gvm/sbin:/opt/gvm/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Environment=PYTHONPATH=/opt/gvm/lib/python3.6/site-packages
Type=simple
User=gvm
Group=gvm
WorkingDirectory=/opt/gvm
PIDFile=/opt/gvm/var/run/ospd-openvas.pid
ExecStart=/usr/bin/python3 /opt/gvm/bin/ospd-openvas --pid-file /opt/gvm/var/run/ospd-openvas.pid --unix-socket /opt/gvm/var/run/ospd.sock --log-file /opt/gvm/var/log/gvm/ospd-openvas.log --lock-file-dir /opt/gvm/var/run

[Install]
WantedBy=multi-user.target
EOF

# cat << EOF > /etc/systemd/system/gvmd.service
[Unit]
Description=Job that runs the gvm daemon
Documentation=man:gvm
After=ospd.service

[Service]
Type=forking
User=gvm
Group=gvm
PIDFile=/opt/gvm/var/run/gvmd.pid
WorkingDirectory=/opt/gvm
ExecStartPre=/bin/sleep 60
ExecStart=/opt/gvm/sbin/gvmd --osp-vt-update=/opt/gvm/var/run/ospd.sock

[Install]
WantedBy=multi-user.target
EOF

# cat << EOF > /etc/systemd/system/gsad.service
[Unit]
Description=Job that runs the gsa daemon
Documentation=man:gsa
After=postgresql.service

[Service]
Type=forking
PIDFile=/opt/gvm/var/run/gsad.pid
WorkingDirectory=/opt/gvm
ExecStart=/opt/gvm/sbin/gsad --listen=0.0.0.0
[Install]
WantedBy=multi-user.target
EOF

PDFレポート用にインストール

PDFレポート用にインストールします。

# yum -y install texlive-collection-fontsrecommended texlive-collection-latexrecommended texlive-changepage texlive-titlesec
# mkdir -p /usr/share/texlive/texmf-local/tex/latex/comment
# cd /usr/share/texlive/texmf-local/tex/latex/comment
# wget http://mirrors.ctan.org/macros/latex/contrib/comment/comment.sty
# chmod 644 comment.sty
# texhash

サービスの有効化と起動

サービスの有効化と起動を行います。

# systemctl daemon-reload
# systemctl enable ospd
# systemctl enable gvmd
# systemctl enable gsad
# systemctl start ospd
# systemctl start gvmd
# systemctl start gsad

もし「md manage:WARNING:2020-09-11 16h55.58 utc:1473: sql_exec_internal: PQexec failed: ERROR: ファイル"/opt/gvm/lib/libgvm-pg-server"にアクセスできませんでした: 許可がありません」 というメッセージがログに表示され、gvmdが起動しなかった場合は、/opt/gvm以下のアクセス権を見直します。

スキャナーのソケットを変更

デフォルトのスキャナーのソケットを変更します。

# su gvm
$ gvmd --get-scanners
08b69003-5fc2-4037-a479-93b440211c73 OpenVAS /tmp/ospd.sock 0 OpenVAS Default
6acd0832-df90-11e4-b9d5-28d24461215b CVE 0 CVE
$ gvmd --modify-scanner=08b69003-5fc2-4037-a479-93b440211c73 --scanner-host=/opt/gvm/var/run/ospd.sock
Scanner modified.
$ gvmd --verify-scanner=08b69003-5fc2-4037-a479-93b440211c73
Scanner version: OpenVAS 7.0.1.

管理画面のユーザを作成

管理画面のユーザを作成します。<管理画面ユーザ>と<パスワード>は使用するユーザ/パスワードに置き換えてください。

$ su gvm
$ gvmd --create-user <管理画面ユーザ>
$ gvmd --user=<管理画面ユーザ> --new-password=<パスワード>

FWの設定

FWを設定します。

# firewall-cmd --add-service=http --permanent
# firewall-cmd --add-service=https --permanent
# firewall-cmd --reload

SELinux無効化

SELinux無効化してCentOS8を再起動します。

# vi /etc/selinux/config
SELINUX=disabled
# reboot

Web画面

https://<IPアドレス>/
にアクセスするとWeb画面が表示されます。 設定した<管理画面ユーザ>と<パスワード>でログインできます。

OpenVASデータの更新

OpenVASデータは以下で更新できます。スキャン実行前に更新しておきます。

$ su gvm
$ greenbone-nvt-sync
$ greenbone-certdata-sync
$ greenbone-scapdata-sync

更新履歴

更新履歴になります。

トップ技術データベースOpenVAS