amazon linuxにOpenVAS 7をソースからインストールする方法です。
今回は/usr/local/openvas/下にインストールします。
なお、以下のコマンドはroot権限で実行していますので必要に応じてsudoをつけてください。
まずyumで依存パッケージをインストールします。
unbound-libsは公式リポジトリには存在しないのでepelからインストールしましょう。
以下は一例ですので環境によっては他のパッケージが必要な可能性もあります。
yum install gcc bison flex cmake pkgconfig glib2-devel gnutls-devel libpcap-devel gpgme-devel libuuid-devel doxygen libksba-devel zlib-devel gmp-devel sqlite-devel nmap yum install --enablerepo="epel" unbound-libs
次に依存関係を解決するためにgnutlsをソースからビルドします。
gnutlsはyumインストールできますがバージョンが要求を満たしていないためソースからビルドする必要があります。
gnutlsをビルドするためにnettleが必要なのでまずはnettleからビルドします。
nettleはバージョン3.0だとlibhogweedがインストールされずgnutlsのconfigure時にエラーが出てしまうので2.7.1を利用してください。
cd /tmp/ wget ftp://ftp.gnu.org/gnu/nettle/nettle-2.7.1.tar.gz tar -zxvf nettle-2.7.1.tar.gz cd /tmp/openvas/nettle-2.7.1 export CC="gcc -Wl,-rpath,/usr/local/openvas/lib64" ./configure --prefix=/usr/local/openvas make && make install cd /tmp/ wget ftp://ftp.gnutls.org/gcrypt/gnutls/v3.3/gnutls-3.3.0.tar.xz tar -xJvf gnutls-3.3.0.tar.xz cd /tmp/openvas/gnutls-3.3.0 export PKG_CONFIG_PATH=/usr/local/openvas/lib64/pkgconfig export CC="gcc -Wl,-rpath,/usr/local/openvas/lib64" ./configure --prefix=/usr/local/openvas make && make install
libmicrohttpdもソースからビルドします。
libmicrohttpdもyumインストールできますがyum版は必要な機能が有効になっていないためソースからビルドする必要があります。
cd /tmp/ wget http://ftp.gnu.org/gnu/libmicrohttpd/libmicrohttpd-0.9.38.tar.gz tar -zxvf libmicrohttpd-0.9.38.tar.gz cd /tmp/openvas/libmicrohttpd-0.9.38 ./configure --prefix=/usr/local/openvas --with-gnutls=/usr/local/openvas make && make install
これで依存関係を解決できました。
OpenVAS 7をビルドしていきます。
OpenVAS 7は以下の5つのコンポーネントから構成されています。
- Libraries
- Scanner
- Manager
- GSA(Webインターフェース)
- CLI
今回はCLI以外をビルドします。
cd /tmp/ wget http://wald.intevation.org/frs/download.php/1787/openvas-libraries-7.0.5.tar.gz tar -zxvf openvas-libraries-7.0.5.tar.gz mkdir /tmp/openvas/openvas-libraries-7.0.5/build cd /tmp/openvas/openvas-libraries-7.0.5/build export PKG_CONFIG_PATH=/usr/local/openvas/lib/pkgconfig:$PKG_CONFIG_PATH export CFLAGS='-L/usr/local/openvas/lib -I/usr/local/openvas/include' cmake -DCMAKE_INSTALL_PREFIX=/usr/local/openvas -DCMAKE_INSTALL_RPATH=/usr/local/openvas/lib .. make make install cd /tmp/ wget http://wald.intevation.org/frs/download.php/1791/openvas-scanner-4.0.4.tar.gz tar -zxvf openvas-scanner-4.0.4.tar.gz mkdir /tmp/openvas/openvas-scanner-4.0.4/build cd /tmp/openvas/openvas-scanner-4.0.4/build export CC='gcc -Wl,-rpath,/usr/local/openvas/lib64 -Wl,-rpath,/usr/local/openvas/lib' cmake -DCMAKE_INSTALL_PREFIX=/usr/local/openvas -DCMAKE_INSTALL_RPATH=/usr/local/openvas/lib .. make make install cd /tmp/ wget http://wald.intevation.org/frs/download.php/1795/openvas-manager-5.0.5.tar.gz tar -zxvf openvas-manager-5.0.5.tar.gz mkdir /tmp/openvas/openvas-manager-5.0.5/build cd /tmp/openvas/openvas-manager-5.0.5/build export CC='gcc -Wl,-rpath,/usr/local/openvas/lib64 -Wl,-rpath,/usr/local/openvas/lib /lib64/libgpg-error.so.0' export PKG_CONFIG_PATH=/usr/local/openvas/lib/pkgconfig:/usr/local/openvas/lib64/pkgconfig export CFLAGS="-I/usr/local/openvas/include" cmake -DCMAKE_INSTALL_PREFIX=/usr/local/openvas -DCMAKE_INSTALL_RPATH=/usr/local/openvas/lib .. make make install cd /tmp/ wget http://wald.intevation.org/frs/download.php/1799/greenbone-security-assistant-5.0.4.tar.gz mkdir /tmp/openvas/greenbone-security-assistant-5.0.4/build cd /tmp/openvas/greenbone-security-assistant-5.0.4/build cmake -DCMAKE_INSTALL_PREFIX=/usr/local/openvas -DCMAKE_INSTALL_RPATH=/usr/local/openvas/lib .. make make install
これでOpenVASのビルドは完了です。
次は初期設定を行っていきます。
初期設定で利用するスクリプトの書き換えを行います。
今回は/usr/local/openvas/下にインストールしたので、スクリプトで利用しているコマンドにパスが通っていません。
そのためフルパスでコマンドを実行するように書き換えていきます。
sed -i "s/OPENVASSD\=\`which openvassd\`/OPENVASSD=\/usr\/local\/openvas\/sbin\/openvassd/g" /usr/local/openvas/sbin/openvas-nvt-sync sed -i "s/NVT_DIR\=\`openvassd/NVT_DIR=\`\/usr\/local\/openvas\/sbin\/openvassd/g" /usr/local/openvas/sbin/openvas-nvt-sync sed -i "s/OPENVASSD\=\`which openvassd\`/OPENVASSD=\/usr\/local\/openvas\/sbin\/openvassd/g" /usr/local/openvas/sbin/openvas-certdata-sync sed -i "s/SCAP_DIR\=\`openvassd/SCAP_DIR=\`\/usr\/local\/openvas\/sbin\/openvassd/g" /usr/local/openvas/sbin/openvas-certdata-sync
SSL証明書を作成します。
/usr/local/openvas/sbin/openvas-mkcert
対話形式のスクリプトです。適当な値を入力して証明書を作成してください。
NVTをダウンロードします。NVTとは脆弱性情報やそのテストに関する設定情報のことです。
/usr/local/openvas/sbin/openvas-nvt-sync
スキャナのデーモンを起動します。
/usr/local/openvas/sbin/openvassd
少し時間がかかります。psコマンドで以下のメッセージが出ることを確認してください。
ps auxf | grep openvassd
openvassd: Waiting for incoming connections
マネージャーに接続するクライアント用のSSL証明書を作成します。
/usr/local/openvas/sbin/openvas-mkcert-client -n -i
データベースを再構築します。
/usr/local/openvas/sbin/openvasmd --rebuild
ユーザーを作成します。
/usr/local/openvas/sbin/openvasmd --create-user=admin
パスワードが出力されますが、以下のようにして変更も可能です。
/usr/local/openvas/sbin/openvasmd --user=admin --new-password=admin
キーを作成します。
なんのためのキーかは謎です。
/usr/local/openvas/sbin/openvasmd --create-credentials-encryption-key /usr/local/openvas/sbin/openvasmd --encrypt-all-credentials
SCAPデータベースをダウンロードします。SCAPとはNVTとは別の脆弱性情報の仕様です。
/usr/local/openvas/sbin/openvas-scapdata-sync
CERTデータベースをダウンロードします。同じく脆弱性情報のことです。
/usr/local/openvas/sbin/openvas-certdata-sync
各コンポーネントの起動スクリプトを作成します。
vim /etc/init.d/openvas-manager ------------------------------------------------------------ #!/bin/bash # This is an implementation of a start-script for OpenVAS Manager # chkconfig: - 92 10 # Description: OpenVAS Manager is a vulnerability Scanner management daemon # ### BEGIN INIT INFO # Provides: openvas-manager # Required-Start: $local_fs $network $syslog # Required-Stop: $local_fs $network $syslog # Default-Start: # Default-Stop: 0 1 2 3 4 5 6 # Short-Description: start|stop|status|restart|condrestart OpenVAS Manager # Description: control OpenVAS Manager ### END INIT INFO # Source function library. . /etc/rc.d/init.d/functions exec="/usr/local/openvas/sbin/openvasmd" prog="openvasmd" progname="openvas-manager" lockfile=/var/lock/subsys/openvasmd [ -e /etc/sysconfig/$progname ] && . /etc/sysconfig/$progname rh_status() { # run checks to determine if the service is running or use generic status status -p /usr/local/openvas/var/run/$prog.pid -l $lockfile $progname } rh_status_q() { rh_status >/dev/null 2>&1 } start() { echo "Starting $progname:" daemon --pidfile=/var/run/$prog.pid $exec $OPTIONS RETVAL=$? echo [ $RETVAL -eq 0 ] && touch $lockfile return $RETVAL } stop() { echo -n "Stopping $progname: " killproc $prog RETVAL=$? echo [ $RETVAL -eq 0 ] && rm -f $lockfile return $RETVAL } restart() { stop start } case "$1" in start) rh_status_q && exit 0 $1 ;; stop) rh_status_q || exit 0 $1 ;; restart) $1 ;; condrestart|try-restart) rh_status_q || exit 0 $1 ;; status) status -p /usr/local/openvas/var/run/$prog.pid -l $lockfile $progname ;; *) echo "Usage: $0 {start|stop|status|restart|condrestart}" exit 1 esac exit 0 ------------------------------------------------------------ chmod 755 /etc/init.d/openvas-manager
vim /etc/init.d/openvas-scanner ------------------------------------------------------------ #!/bin/sh # # openvas-scanner This starts and stops the OpenVAS scanner. # # chkconfig: 35 75 25 # description: This starts and stops the OpenVAS scanner. # processname: /usr/sbin/openvassd # config: /etc/openvas/openvassd.conf # pidfile: /var/run/openvassd.pid # ### BEGIN INIT INFO # Provides: $openvas-scanner ### END INIT INFO # Source function library. . /etc/rc.d/init.d/functions EXEC="/usr/local/openvas/sbin/openvassd" PROG=$(basename $EXEC) # Check for missing binaries (stale symlinks should not happen) # Note: Special treatment of stop for LSB conformance test -x $EXEC || { echo "$EXEC not installed"; if [ "$1" = "stop" ]; then exit 0; else exit 5; fi; } # Check for existence of needed config file OPENVASSD_CONFIG=/etc/sysconfig/openvas-scanner test -r $OPENVASSD_CONFIG || { echo "$OPENVASSD_CONFIG does not exist"; if [ "$1" = "stop" ]; then exit 0; else exit 6; fi; } # Read config . $OPENVASSD_CONFIG # Build parameters [ "$SCANNER_ADDRESS" ] && PARAMS="$PARAMS --listen=$SCANNER_ADDRESS" [ "$SCANNER_PORT" ] && PARAMS="$PARAMS --port=$SCANNER_PORT" LOCKFILE=/var/lock/subsys/$PROG start() { echo -n $"Starting openvas-scanner: " daemon $EXEC $PARAMS RETVAL=$? echo [ $RETVAL -eq 0 ] && touch $LOCKFILE return $RETVAL } stop() { echo -n $"Stopping openvas-scanner: " killproc $PROG RETVAL=$? echo [ $RETVAL -eq 0 ] && rm -f $LOCKFILE return $RETVAL } restart() { stop start } reload() { echo -n $"Reloading openvas-scanner: " killproc $PROG -HUP RETVAL=$? echo return $RETVAL } force_reload() { restart } fdr_status() { status $PROG } case "$1" in start|stop|restart|reload) $1 ;; force-reload) force_reload ;; status) fdr_status ;; condrestart|try-restart) [ ! -f $LOCKFILE ] || restart ;; *) echo $"Usage: $0 {start|stop|status|restart|try-restart|reload|force-reload}" exit 2 esac ------------------------------------------------------------ chmod 755 /etc/init.d/openvas-scanner
vim /etc/init.d/gsad ------------------------------------------------------------ #!/bin/sh # # gsad This starts and stops the Greenbone Security Assistant. # # chkconfig: 35 75 25 # description: This starts and stops the Greenbone Security Assistant. # processname: /usr/sbin/gsad # config: /etc/openvas/gsad.conf # pidfile: /var/run/gsad.pid # ### BEGIN INIT INFO # Provides: $greenbone-security-assistant ### END INIT INFO # Source function library. . /etc/rc.d/init.d/functions EXEC="/usr/local/openvas/sbin/gsad" PROG=$(basename $EXEC) # Check for missing binaries (stale symlinks should not happen) # Note: Special treatment of stop for LSB conformance test -x $EXEC || { echo "$EXEC not installed"; if [ "$1" = "stop" ]; then exit 0; else exit 5; fi; } # Check for existence of needed config file GSAD_CONFIG=/etc/sysconfig/gsad test -r $GSAD_CONFIG || { echo "$GSAD_CONFIG not existing"; if [ "$1" = "stop" ]; then exit 0; else exit 6; fi; } # Read config . $GSAD_CONFIG # Build parameters [ "$GSA_ADDRESS" ] && PARAMS="--listen=$GSA_ADDRESS" [ "$GSA_PORT" ] && PARAMS="$PARAMS --port=$GSA_PORT" [ "$GSA_SSL_PRIVATE_KEY" ] && PARAMS="$PARAMS --ssl-private-key=$GSA_SSL_PRIVATE_KEY" [ "$GSA_SSL_CERTIFICATE" ] && PARAMS="$PARAMS --ssl-certificate=$GSA_SSL_CERTIFICATE" [ "$GSA_REDIRECT" ] && [ "$GSA_REDIRECT" == 1 ] && PARAMS="$PARAMS --redirect" [ "$GSA_REDIRECT_PORT" ] && PARAMS="$PARAMS --rport=$GSA_REDIRECT_PORT" [ "$MANAGER_ADDRESS" ] && PARAMS="$PARAMS --mlisten=$MANAGER_ADDRESS" [ "$MANAGER_PORT" ] && PARAMS="$PARAMS --mport=$MANAGER_PORT" LOCKFILE=/var/lock/subsys/$PROG start() { echo -n $"Starting greenbone-security-assistant: " daemon $EXEC $PARAMS RETVAL=$? echo [ $RETVAL -eq 0 ] && touch $LOCKFILE return $RETVAL } stop() { echo -n $"Stopping greenbone-security-assistant: " killproc $PROG RETVAL=$? echo [ $RETVAL -eq 0 ] && rm -f $LOCKFILE return $RETVAL } restart() { stop start } reload() { echo -n $"Reloading greenbone-security-assistant: " killproc $PROG -HUP RETVAL=$? echo return $RETVAL } force_reload() { restart } fdr_status() { status $PROG } case "$1" in start|stop|restart|reload) $1 ;; force-reload) force_reload ;; status) fdr_status ;; condrestart|try-restart) [ ! -f $LOCKFILE ] || restart ;; *) echo $"Usage: $0 {start|stop|status|restart|try-restart|reload|force-reload}" exit 2 esac ------------------------------------------------------------ chmod 755 /etc/init.d/gsad
各コンポーネントの設定ファイルを作成します。
vim /etc/sysconfig/openvas-scanner ------------------------------------------------------------ # Options to pass to the openvassd daemon OPTIONS="-p 9391" # Set to yes if plugins should be automatically updated via a cron job auto_plugin_update=yes # Notify OpenVAS scanner after update by seding it SIGHUP? notify_openvas_scanner=yes # Method to use to get updates. The default is via rsync # Note that only wget and curl support retrieval via proxy # update_method=rsync|wget|curl # Additionaly, you can specify the following variables #NVT_DIR where to extract plugins (absolute path) #OV_RSYNC_FEED URL of rsync feed #OV_HTTP_FEED URL of http feed # First time install token FIRSTBOOT=no ------------------------------------------------------------
vim /etc/sysconfig/openvas-manager ------------------------------------------------------------ OPTIONS="--port 9390 --sport 9391 -v" ------------------------------------------------------------
vim /etc/sysconfig/gsad ------------------------------------------------------------ GSA_ADDRESS=0.0.0.0 GSA_PORT=9392 MANAGER_ADDRESS=127.0.0.1 MANAGER_PORT=9390 ------------------------------------------------------------
脆弱性情報などを自動更新するcron設定を作成します。
vim /etc/cron.d/openvas-sync-cert ------------------------------------------------------------ # start plugin sync daily at 130am 30 1 * * * root /bin/nice -n 19 /usr/bin/ionice -c2 -n7 /usr/local/openvas/sbin/openvas-certdata-sync > /dev/null ------------------------------------------------------------
vim /etc/cron.d/openvas-sync-plugins ------------------------------------------------------------ # start plugin sync daily at midnight 0 0 * * * root /bin/nice -n 19 /usr/bin/ionice -c2 -n7 /usr/local/openvas/sbin/openvas-nvt-sync > /dev/null ------------------------------------------------------------
vim /etc/cron.d/openvas-sync-scap ------------------------------------------------------------ # start plugin sync daily at 1am 0 1 * * * root /bin/nice -n 19 /usr/bin/ionice -c2 -n7 /usr/local/openvas/sbin/openvas-scapdata-sync > /dev/null ------------------------------------------------------------
各コンポーネントを起動します。
service openvas-scanner restart service openvas-manager start service opanvas-gsad start chkconfig openvas-scanner on chkconfig openvas-manager on chkconfig gsad on
正常にインストールできたか確認します。
公式で配布されている確認用のスクリプトを利用します。
cd /tmp/ wget --no-check-certificate https://svn.wald.intevation.org/svn/openvas/trunk/tools/openvas-check-setup chmod 755 openvas-check-setup env PATH="/usr/local/openvas/bin:/usr/local/openvas/sbin:$PATH" ./openvas-check-setup --server
“It seems like your OpenVAS-7 installation is OK.” のメッセージが出たらインストールは成功しています。
GSA(Webインターフェース)には以下のアドレスからアクセスできます。
https://{domain}:9392/
参考: http://virtuallyhyper.com/2014/06/compile-openvas-7-on-centos-6/