OpenVASとは―各種インストール方法など。
技術情報
OpenVAS(GVM)は、オープンソースとして開発されていたNessusから派生したネットワーク診断ツールです。Nessusは年間30万円~と高価ですが、OpenVASは無料で利用できます。レンタルサーバでは利用機会はないと思いますが、自前でサーバを構築した場合は相棒といえるツールであります。
目次
この記事の目次です。
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
更新履歴
更新履歴になります。
- 2022/8/3 インストール方法―Ubunts 22.04&GVM 22.4の例について追記しました。
- 2022/2/2 GSM(Greenbone Security Assistant)について追記しました。
- 2021/8/11 Ubunts 21.04&GVM 21.04の参考について追記しました。
- 2021/8/10 主なシステム構成について追記しました。
- 2020/9/22 記事をUPしました。