


La instalación de esta suite de seguridad que permite buscar y gestionar vulnerabilidades sobre nuestros sistemas se hace complicada para las nuevas versiones community. En esta guia os detallamos como dejar instalado y funcionando GVM (Greenbone Vulnerability Management).
La última versión a día de hoy es GVM 20.08 siendo denominada source code edition la versión gratuita, podemos ver más info sobres esta versión:
https://community.greenbone.net/t/gvm-20-08-stable-initial-release-2020-08-12/6312
Para la instalación partimos de una máquina limpia de Ubuntu Server 20.04 con conexión a Internet y lista para comenzar la instalación, para la instalación no necesitas tener conocimientos de Linux muy avanzados ya que es simplemente copiar y pegar los comandos que aquí te indicamos, simplemente se cuidadoso en el copia pega y ve paso a paso comprobando que no falla ninguno de ellos.
Comenzamos… nos conectamos por SSH y comenzamos con los paquetes necesarios previos:
sudo apt-get install build-essential cmake gnutls-bin pkg-config glib2.0 libgnutls28-dev libssh-dev libssl-dev redis-server libhiredis-dev libxml2-dev doxygen xsltproc libldap2-dev libgcrypt-dev libpcap-dev libgpgme-dev libradcli-dev graphviz bison libksba-dev libical-dev libpq-dev postgresql postgresql-contrib postgresql-server-dev-all libopenvas-dev heimdal-dev libpopt-dev xmltoman gcc-mingw-w64 nmap libmicrohttpd-dev npm nodejs virtualenv python3-paramiko python3-lxml python3-defusedxml python3-pip python3-psutil
Instalamos el gestor de paquetes Yarn para Nodejs
sudo npm install -g yarn --prefix /usr/
Ahora vamos a crear el perfil y el usuario gvm que será con el que ejecutaremos la suite:
echo 'export PATH="$PATH:/opt/gvm/bin:/opt/gvm/sbin:/opt/gvm/.local/bin"' | sudo tee -a /etc/profile.d/gvm.sh cd /etc/profile.d sudo chmod 0755 gvm.sh source /etc/profile.d/gvm.sh
Creamos el fichero y le introdimos el contenido:
sudo vi /etc/ld.so.conf.d/gvm.conf # gmv-libs location /opt/gvm/lib
Creamos el usuario y accedemos con él para continuar:
sudo mkdir /opt/gvm sudo adduser gvm --disabled-password --home /opt/gvm/ --no-create-home --gecos '' sudo usermod -aG redis gvm sudo chown gvm:gvm /opt/gvm/ sudo su - gvm
Cambiamos algunos ajustes del usuario:
mkdir /opt/gvm/src cd /opt/gvm/src/ export PKG_CONFIG_PATH=/opt/gvm/lib/pkgconfig:$PKG_CONFIG_PATH
Una vez estamos en este punto vamos a pasar a la parte más compleja, descargar y compilar todos los modulos de la suite, empezamos con la librerias:
git clone -b gvm-libs-20.08 --single-branch https://github.com/greenbone/gvm-libs.git cd gvm-libs/ export PKG_CONFIG_PATH=/opt/gvm/lib/pkgconfig:$PKG_CONFIG_PATH mkdir build cd build cmake -DCMAKE_INSTALL_PREFIX=/opt/gvm .. make make doc make install cd /opt/gvm/src/
Samba para OpenVAS:
git clone -b master --single-branch https://github.com/greenbone/openvas-smb.git cd openvas-smb/ export PKG_CONFIG_PATH=/opt/gvm/lib/pkgconfig:$PKG_CONFIG_PATH mkdir build cd build/ cmake -DCMAKE_INSTALL_PREFIX=/opt/gvm .. make install cd /opt/gvm/src/
Dejamos el proceso que termine
OpenVAS Scanner:
git clone -b openvas-20.08 --single-branch https://github.com/greenbone/openvas.git cd openvas/ export PKG_CONFIG_PATH=/opt/gvm/lib/pkgconfig:$PKG_CONFIG_PATH mkdir build cd build/ cmake -DCMAKE_INSTALL_PREFIX=/opt/gvm .. make make doc make install exit
Configuración de Redis:
sudo su export LC_ALL="C" ldconfig cp /etc/redis/redis.conf /etc/redis/redis.orig cp /opt/gvm/src/openvas/config/redis-openvas.conf /etc/redis/ chown redis:redis /etc/redis/redis-openvas.conf echo "db_address = /run/redis-openvas/redis.sock" > /opt/gvm/etc/openvas/openvas.conf systemctl enable redis-server@openvas.service systemctl start redis-server@openvas.service
Vamos ahora a modificar el fichero sudoers para dar permisos al usuario gvm, esto se hace con el comando visudo:
Modificamos la linea: Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/opt/gvm/sbin" Añadimos al final: # Allow gvm user to run ospd-openvas and launch OpenVAS with root privileges gvm ALL = NOPASSWD: /opt/gvm/sbin/openvas gvm ALL = NOPASSWD: /opt/gvm/sbin/gsad
Una vez echo esto, vamos a iniciar sesión con el usuario gvm y realizar la primera operación con OpenVas, actualizar los test de vulnerabilidades NVT.
exit sudo su - gvm greenbone-nvt-sync
Una vez finalice la actualización de los NVT, seguimos descargando y compilando módulos, ahora GVM:
cd /opt/gvm/src/ git clone -b gvmd-20.08 --single-branch https://github.com/greenbone/gvmd.git cd gvmd/ export PKG_CONFIG_PATH=/opt/gvm/lib/pkgconfig:$PKG_CONFIG_PATH mkdir build cd build/ cmake -DCMAKE_INSTALL_PREFIX=/opt/gvm .. make make doc make install exit
Configuración de la base de datos PostgreSQL, creación de usuario y esquema de BD:
sudo -u postgres bash export LC_ALL="C" createuser -DRS gvm createdb -O gvm gvmd
Crear el rol y asignar permisos, en esta parte te recomiendo ir corriendo los comandos uno por uno:
psql gvmd create role dba with superuser noinherit; grant dba to gvm;create extension "uuid-ossp";create extension "pgcrypto";exit \q exit
Generamos los certificados de GVM:
sudo su - gvm gvm-manage-certs -a
Ahora vamos a crear una contraseña para la cuenta de administrador de acceso a la suite GVM
/opt/gvm/sbin/gvmd --create-user=admin --password=yoursecurepassword
Obtenemos el UUID de la cuenta de admin:
gvmd --get-users --verbose
Y con eses UUID modificamos la configuración del motor gvmd:
gvmd --modify-setting 78eceaec-3385-11ea-b237-28d24461215b --value XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
Ahora vamos a actualizar los feeds para tener nuestro GVM con las ultimas definiciones de vulnerabilidades, es un proceso lento.
Lo lanzamos y esperamos que termine. Posteriormente veremos como automatizar la actualización usando el crontab, ya que estas definiciones de vulnerabilidades se actualizan constantemente y es muy importante tenerlas actualizadas antes de nuestros escaneos.
greenbone-feed-sync --type GVMD_DATA greenbone-feed-sync --type SCAP greenbone-feed-sync --type CERT
Continuamos con el módulo GSA, lo descargamos y compilamos:
cd src/ git clone -b gsa-20.08 --single-branch https://github.com/greenbone/gsa.git cd gsa/ export PKG_CONFIG_PATH=/opt/gvm/lib/pkgconfig:$PKG_CONFIG_PATH mkdir build cd build/ cmake -DCMAKE_INSTALL_PREFIX=/opt/gvm .. make make doc make install touch /opt/gvm/var/log/gvm/gsad.log
Configurar el venv de Python
exit sudo add-apt-repository ppa:deadsnakes/ppa sudo apt-get update sudo apt-get install python3.7 python3.7-dev -y
Crear nuestro venv para GVM:
sudo su - gvm cd /opt/gvm/src export PKG_CONFIG_PATH=/opt/gvm/lib/pkgconfig:$PKG_CONFIG_PATH virtualenv --python python3.7 /opt/gvm/bin/ospd-scanner/ source /opt/gvm/bin/ospd-scanner/bin/activate
Instalamos el siguiente módulo, ospd y ospd-openvas sobre en venv que hemos creado:
git clone -b ospd-openvas-20.08 --single-branch https://github.com/greenbone/ospd-openvas.git cd ospd-openvas/ pip3 install . git clone -b ospd-20.08 --single-branch https://github.com/greenbone/ospd.git mkdir /opt/gvm/var/run/ospd/ cd ospd/ pip3 install . cd /opt/gvm/src
Salimos y creamos un nuevo servicio para que se inicie el Greenbone Manager al arranque:
exit sudo su nano /etc/systemd/system/gvmd.service
Introducimos lo siguiente en el fichero gvmd.service
[Unit] Description=Open Vulnerability Assessment System Manager Daemon Documentation=man:gvmd(8) https://www.greenbone.net Wants=postgresql.service ospd-openvas.service After=postgresql.service ospd-openvas.service [Service] Type=forking User=gvm Group=gvm PIDFile=/opt/gvm/var/run/gvmd.pid WorkingDirectory=/opt/gvm ExecStart=/opt/gvm/sbin/gvmd --osp-vt-update=/opt/gvm/var/run/ospd.sock ExecReload=/bin/kill -HUP $MAINPID KillMode=mixed Restart=on-failure RestartSec=2min KillMode=process KillSignal=SIGINT GuessMainPID=no PrivateTmp=true [Install] WantedBy=multi-user.target
Hacemos lo mismo para el GSA (Greenbone Security Assitant):
nano /etc/systemd/system/gsad.service
Introducimos lo siguiente en el fichero gsad.service:
[Unit] Description=Greenbone Security Assistant (gsad) Documentation=man:gsad(8) https://www.greenbone.net After=network.target Wants=gvmd.service [Service] Type=forking PIDFile=/opt/gvm/var/run/gsad.pid WorkingDirectory=/opt/gvm ExecStart=/opt/gvm/sbin/gsad --drop-privileges=gvm Restart=on-failure RestartSec=2min KillMode=process KillSignal=SIGINT GuessMainPID=no PrivateTmp=true [Install] WantedBy=multi-user.target
Misma operación para el servicio ospd-openvas:
nano /etc/systemd/system/ospd-openvas.service
Introducimos lo siguiente en el fichero ospd-openvas.service:
[Unit] Description=Job that runs the ospd-openvas daemon Documentation=man:gvm After=network.target redis-server@openvas.service Wants=redis-server@openvas.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 Type=forking User=gvm Group=gvm WorkingDirectory=/opt/gvm PIDFile=/opt/gvm/var/run/ospd-openvas.pid ExecStart=/opt/gvm/bin/ospd-scanner/bin/python /opt/gvm/bin/ospd-scanner/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-scanner.log --lock-file-dir /opt/gvm/var/run/ospd/ Restart=on-failure RestartSec=2min KillMode=process KillSignal=SIGINT GuessMainPID=no PrivateTmp=true [Install] WantedBy=multi-user.target
Una vez tenemos los tres servicios configuramos, vamos a habilitarlos, ya casi estamos terminando:
systemctl daemon-reload systemctl enable gvmd systemctl enable gsad systemctl enable ospd-openvas systemctl start gvmd systemctl start gsad systemctl start ospd-openvas
Podemos verificar los servicios y si esta todo ok lo tenemos:
systemctl status gvmd systemctl status gsad systemctl status ospd-openvas
Debemos ver algo así en cada uno de ellos:
Abrimos un navegador web y accedemos por https://ip_de_la_maquina, ya podemos logarnos con el usuario y contraseña que generamos antes:
Modificar el escaner por defecto y programar el update automático de los feeds:
sudo su - gvm cd /opt/gvm/src/ gvmd --get-scanners gvmd --modify-scanner=08b69003-5fc2-4037-a479-93b440211c73 --scanner-host=/opt/gvm/var/run/ospd.sock
Creamos el fichero de update para el cron:
touch /opt/gvm/bin/openvas-update chmod a+x /opt/gvm/bin/openvas-update nano /opt/gvm/bin/openvas-update
Con el siguiente contenido:
/opt/gvm/bin/greenbone-nvt-sync /opt/gvm/sbin/greenbone-feed-sync --type GVMD_DATA /opt/gvm/sbin/greenbone-feed-sync --type SCAP /opt/gvm/sbin/greenbone-feed-sync --type CERT
Nos falta programar el update a las 12 de la noche en el crontab:
Esperamos a que los feeds esten totalmente actualizados antes de empezar a realizar escaneos:
En próximas entradas veremos como añadir sondas para escnaeo de redes remotas e integrarlo todo sobre un mismo manager.
Referencias:
https://community.greenbone.net/t/gvm20-08-install-on-ubuntu-20-04-script/7409
https://linoxide.com/install-gvm-vulnerability-scanner-on-ubuntu-20-04/