Como instalar correctamente OpenVAS en openSUSE sin que funcione

Este artículo trata acerca de OpenVAS y los pasos para instalarlo correctamente en openSUSE, aunque al final no funcione de todos modos ;-). Es una herramienta basada en Nessus que permite detectar vulnerabilidades en computadoras de escritorio, servidores, etc.

En resumen, OpenVAS funciona realizando un análisis de posibles vulnerabilidades conocidas a las que puede estar expuesto un equipo ante un ataque remoto, informa de la gravedad de esas vulnerabilidades y propone una serie de recomendaciones para su solución.


Historia de la herramienta

El módulo servidor de OpenVAS fue desarrollado por la comunidad de software libre a partir de un fork de la versión 2.2 de Nessus cuyo código aún era libre, luego de que Nessus decidiera liberar su nueva versión 3.0 con una licencia propietaria y privativa suspendiendo así la colaboración de terceros al proyecto. Al igual que el módulo servidor, el módulo cliente de OpenVAS también es un fork de la versión 1.x del NessusClient, versión anterior al cambio de licencia.

Actualmente la última versión estable de OpenVAS es la 5, el proyecto está en constante evolución gracias a su gran comunidad y sigue siendo una opción muy interesante a Nessus, ya que cumple con el mismo objetivo.

Sobre el artículo

El título es atroz, lo sé, pero no he encontrado nada mejor para expresar lo triste que fueron todos estos meses en que he intentado instalar y hacer funcionar OpenVAS en openSUSE. Lo único que he logrado fue instalar la herramienta sin errores, específicamente la versión 5, pero nunca la he logrado hacer funcionar.

Es así que luego de pasar tanto tiempo como borrador he decidido publicar este artículo con todos los conocimientos adquiridos y pasar página. Quizás al final servirá para algo, no es mi estilo pero en este caso dejaré a cargo del lector encontrar la solución al problema si tienen el interés y el tiempo requerido, pero si necesitan hacer funcionar la herramienta si o si no me queda más que recomendar que utilicen otra distro especializada donde si funciona, o al menos eso creo, como por ejemplo Backtrack Linux.


Instalación de OpenVAS

Ha sido un desafío y a la vez un calvario lograr instalar y configurar la herramienta OpenVAS en openSUSE 12.3, aún así nunca la he logrado hacer funcionar y eso que lo vengo intentando durante varios meses con las versiones 12.1 y 12.2 de openSUSE, y las versiones 4, 5 y 6 de OpenVAS. Como la versión estable disponible en el repositorio oficial OSS es aún la versión 4 y es igual de problemática de instalar, para esta guía he decido instalar directamente la versión 5 que ya viene con la herramienta Greenbone Security Assistant, una interfaz web muy interesante que permite realizar el análisis de las vulnerabilidades de una manera mucho más cómoda.

A continuación van los pasos, que con los problemas que he tenido, valen oro estar documentados:

  1. Comenzaremos por instalar algunos paquetes requeridos por la herramienta:
    testsrv:~ # zypper install sqlite3 rsync wget gnutls nmap libxslt-tools
    Luego agregamos un nuevo repositorio de Tumbleweed..
    testsrv:~ # zypper ar http://download.opensuse.org/repositories/security:/OpenVAS:/UNSTABLE:/v5/openSUSE_Tumbleweed/security:OpenVAS:UNSTABLE:v5.repo
    e instalamos a partir de él todos los paquetes de la versión 5 de OpenVAS para la distro openSUSE 12.3:
    testsrv:~ # zypper --non-interactive --gpg-auto-import-keys -v install --from 'security_OpenVAS_UNSTABLE_v5' greenbone-security-assistant gsd libmicrohttpd10 libopenvas_base5 libopenvas_hg5 libopenvas_misc5 libopenvas_nasl5 libopenvas_omp5 openvas-administrator openvas-cli openvas-manager openvas-scanner
  2. La primera configuración que vamos a realizar es actualizar el certificado de la entidad certificadora. Este paso es fundamental para generar los demás certificados, ya que evita que tengamos problemas en un futuro, como por ejemplo el problema del punto 6 que lleva relación con la inexistencia de NTVS en la tabla tasks.db. No especificamos información adicional (todo por defecto):
    testsrv:~ # openvas-mkcert -f
    ----------------------------------------------------------------------------
    Creation of the OpenVAS SSL Certificate
    ----------------------------------------------------------------------------

    This script will now ask you the relevant information to create the SSL certificate of OpenVAS.
    Note that this information will *NOT* be sent to anybody (everything stays local), but anyone with the ability to connect to your OpenVAS daemon will be able to retrieve this information.

    CA certificate life time in days [1460]:
    Server certificate life time in days [365]:
    Your country (two letter code) [DE]:
    Your state or province name [none]:
    Your location (e.g. town) [Berlin]:
    Your organization [OpenVAS Users United]:
    ...
    ----------------------------------------------------------------------------
    Creation of the OpenVAS SSL Certificate
    ----------------------------------------------------------------------------

    Congratulations. Your server certificate was properly created.

    The following files were created:

    . Certification authority:
    Certificate = /var/lib/openvas/CA/cacert.pem
    Private key = /var/lib/openvas/private/CA/cakey.pem

    . OpenVAS Server :
    Certificate = /var/lib/openvas/CA/servercert.pem
    Private key = /var/lib/openvas/private/CA/serverkey.pem

    Press [ENTER] to exit
    testsrv:~ #

    OBSERVACIÓN: Este punto fue importante en mis pruebas, ya que sin proceder de la forma expuesta el manager no lograba comunicarse con el servicio scanner generando la excepción conocida: bad login attempt from 127.0.0.1

  3. Para que el módulo manejador openvas-manager pueda comunicarse con el servicio openvas-scanner es necesario crear un usuario denominado om y generar un nuevo certificado que servirá como método de autenticación. Según la documentación podemos crear el usuario y copiar los certificados automáticamente en sus directorios de destino con el comando openvas-mkcert-client -n om -i, pero por alguna cuestión desconocida el comando anterior parece no funcionar en openSUSE.

    La forma en que me ha funcionado fue ejecutar el comando openvas-mkcert-client sin los argumentos y luego copiar manualmente la llave y el certificado a sus directorios de destino. Así que procedemos a ejecutar el comando y durante el proceso sólo especificamos el nombre de usuario om resaltado en naranja más abajo, lo demás debe quedar todo como viene por defecto:
    testsrv:~ # openvas-mkcert-client
    This script will now ask you the relevant information to create the SSL client certificates for OpenVAS.

    Client certificates life time in days [365]:
    Your country (two letter code) [DE]:
    Your state or province name [none]:
    Your location (e.g. town) [Berlin]:
    Your organization [none]:
    Your organizational unit [none]:
    **********
    We are going to ask you some question for each client certificate.

    If some question has a default answer, you can force an empty answer by entering a single dot '.'

    *********
    OpenVAS username for the new user: om
    Client certificates life time in days [365]:
    Country (two letter code) [DE]:
    State or province name []:
    Location (e.g. town) [Berlin]:
    Organization []:
    Organization unit []:
    e-Mail []:
    Generating RSA private key, 1024 bit long modulus
    ............................................................................................++++++
    ................++++++
    e is 65537 (0x10001)
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter '.', the field will be left blank.
    -----
    Country Name (2 letter code) [DE]:State or Province Name (full name) [Some-State]:Locality Name (eg, city) []:Organization Name (eg, company) [Internet Widgits Pty Ltd]:Organizational Unit Name (eg, section) []:Common Name (eg, your name or your server's hostname) []:Email Address []:Using configuration from /tmp/openvas-mkcert-client.4662/stdC.cnf
    Check that the request matches the signature
    Signature ok
    The Subject's Distinguished Name is as follows
    countryName :PRINTABLE:'DE'
    localityName :PRINTABLE:'Berlin'
    commonName :PRINTABLE:'om'
    Certificate is to be certified until Jan 15 01:49:27 2014 GMT (365 days)

    Write out database with 1 new entries
    Data Base Updated

    User rules

    ----------
    openvassd has a rules system which allows you to restrict the hosts that has the right to test.

    For instance, you may want him to be able to scan his own host only.


    Please see the openvas-adduser(8) man page for the rules syntax.


    Enter the rules for this user, and hit ctrl-D once you are done:

    (the user can have an empty rules set)

    User om added to OpenVAS.

    Your client certificates are in /tmp/openvas-mkcert-client.4662 .

    You will have to copy them by hand.

    /usr/sbin/openvas-mkcert-client: línea 455: [: se esperaba un argumento
    testsrv:~ #
    La llave y el certificado del usuario om fueron generados en /tmp, dentro de una carpeta openvas-mkcert-client.4662 donde el número final (4662) es variable de acuerdo a la instalación. Para finalizar simplemente copiamos los archivos key_om.pem y cert_om.pem a los directorios especificados a continuación:
    testsrv:~ #  cd /tmp/openvas-mkcert-client.4278
    testsrv:~ # cp key_om.pem /var/lib/openvas/private/CA/clientkey.pem
    testsrv:~ # cp cert_om.pem /var/lib/openvas/CA/clientcert.pem

    Finalmente aplicamos los permisos correspondientes y verificamos que los certificados cuenten con los permisos adecuados según su directorio.
    testsrv:~ #  chmod 600 /var/lib/openvas/private/CA/*
    testsrv:~ # chmod 644 /var/lib/openvas/CA/*

    OBSERVACIÓN: Este punto es fundamental para evitar el error expuesto más adelante en el punto 6.

  4. Para descargar las últimas vulnerabilidades conocidas, que luego se utilizan para actualizar la base de datos de OpenVAS, ejecutamos el script openvas-nvt-sync con el usuario root desde la línea de comandos como se muestra a continuación:
    testsrv:~ # openvas-nvt-sync
    [i] This script synchronizes an NVT collection with the 'OpenVAS NVT Feed'.
    [i] The 'OpenVAS NVT Feed' is provided by 'The OpenVAS Project'.
    [i] Online information about this feed: 'http://www.openvas.org/openvas-nvt-feed.html'.
    [i] NVT dir: /var/lib/openvas/plugins
    [i] Will use rsync
    [i] Using rsync: /usr/bin/rsync
    [i] Configured NVT rsync feed: rsync://feed.openvas.org:/nvt-feed
    OpenVAS feed server - http://openvas.org/
    This service is hosted by Intevation GmbH - http://intevation.de/
    All transactions are logged.
    Please report problems to admin@intevation.de
    ...
    ...
    sent 39 bytes received 829985 bytes 72176.00 bytes/sec
    total size is 127959140 speedup is 154.16
    [i] Checking dir: ok
    [i] Checking MD5 checksum: ok
    testsrv:~ #
  5. También necesitamos sincronizar y actualizar la base de datos SCAP (Security Content Automation Protocol) de OpenVAS, y para ello debemos ejecutar el script de sincronización openvas-scapdata-sync:
    testsrv:~ # openvas-scapdata-sync
    [i] This script synchronizes a SCAP data directory with the OpenVAS one.
    [i] SCAP dir: /var/lib/openvas/scap-data
    [i] Will use rsync
    [i] Using rsync: /usr/bin/rsync
    [i] Configured SCAP data rsync feed: rsync://feed.openvas.org:/scap-data
    OpenVAS feed server - http://openvas.org/
    This service is hosted by Intevation GmbH - http://intevation.de/
    All transactions are logged.
    Please report problems to admin@intevation.de

    receiving incremental file list
    ./
    COPYING
    1493 100% 1.42MB/s 0:00:00 (xfer#1, to-check=59/61)
    COPYING.asc
    198 100% 193.36kB/s 0:00:00 (xfer#2, to-check=58/61)
    nvdcve-2.0-2002.xml
    ...
    ...
    [i] Updating /var/lib/openvas/scap-data/nvdcve-2.0-2012.xml
    [i] Updating /var/lib/openvas/scap-data/nvdcve-2.0-2013.xml
    testsrv:~ #
  6. Luego pasamos a ejecutar los siguientes comandos para actualizar la base de datos de vulnerabilidades de la herramienta:
    testsrv:~ # mkdir /var/cache/openvas
    testsrv:~ # openvassd
    testsrv:~ # openvasmd --rebuild
    testsrv:~ # openvasmd --migrate
    testsrv:~ # killall openvassd

    Para confirmar que la base de datos de vulnerabilidades se haya generado exitosamente pueden ejecutar el siguiente comando que debería retornar algo similar a lo que sigue:
    testsrv:~ # sqlite3 /var/lib/openvas/mgr/tasks.db "select count(*) from nvts;"
    30254
    testsrv:~ #
    En el caso de que la verificación anterior haya retornado la cantidad cero (0), la herramienta nos presentará el siguiente error más adelante:
    ERROR: The number of NVTs in the OpenVAS Manager database is too low.
    FIX: Make sure OpenVAS Scanner is running with an up-to-date NVT collection and run 'openvasmd --rebuild'.

  7. Otro paso más que tenemos que realizar es crear un archivo de texto plano llamado .auth.conf en el directorio de usuario /var/lib/openvas/users, para luego abrirlo...
    testsrv:~ # touch /var/lib/openvas/users/.auth.conf
    testsrv:~ # vi /var/lib/openvas/users/.auth.conf

    Y agregarle posteriormente el siguiente contenido:
    # Read in by a call to openvas_auth_init (), if placed as ".auth.conf" in
    # PREFIX/var/lib/openvas/users
    # Can be replaced by openvas-administrator, in which case comments are lost.
    #
    # Standard Local Authentication against filesystem

    [method:file]
    order=1
    enabled=true
    Esto evitará que aparezca un mensaje similar al que sigue a continuación en los archivos log del manager y del administrador:
    lib  auth:WARNING:2013-01-14 23h33.15 PYST:5211: Authentication configuration could not be loaded.
  8. Agregamos el usuario admin como usuario para acceder a la consola de administración:
    testsrv:~ # openvasad -c add_user -n admin -r Admin
    Enter password:
    ..
    testsrv:~ #
  9. Podemos agregar o remover otro usuarios a OpenVAS con los comandos openvas-adduser y openvas-rmuser respectivamente. A modo de ejemplo a continuación agregamos un nuevo usuario llamado gabriel:
    testsrv:~ # openvas-adduser
    Using /var/tmp as a temporary file holder.

    Add a new openvasd user
    ---------------------------------

    Login : gabriel
    Authentication (pass/cert) [pass] :
    Login password :
    Login password (again) :

    User rules
    ---------------
    openvasd has a rules system which allows you to restrict the hosts that gabriel has the right to test.
    For instance, you may want him to be able to scan his own host only.

    Please see the openvas-adduser(8) man page for the rules syntax.

    Enter the rules for this user, and hit ctrl-D once you are done:
    (the user can have an empty rules set)

    Login : gabriel
    Password : ***********

    Rules :

    Is that ok? (y/n) [y] y
    user added.
    testsrv:~ #
  10. Como en openSUSE no se genera un archivo de configuración para el servicio Scanner de OpenVAS, procedemos a crearlo con las configuraciones por defecto del servicio openvas-scanner mediante el siguiente comando:
    testsrv:~ # openvassd -s > /etc/openvas/openvassd.conf
  11. Con el archivo de configuración creado en el paso anterior podemos activar la verificación de firmas de las NVTS (trusted-nvts). Para realizar esto procedemos a editar el archivo openvassd.conf
    testsrv:~ # vi /etc/openvas/openvassd.conf
    Buscar la directiva nasl_no_signature_check y asignarle el valor no.
    nasl_no_signature_check = no
    También aprovechamos la ocasión para eliminar la línea que se muestra a continuación y que es innecesaria. La misma se encuentra ubicada al final del archivo openvassd.conf.
    config_file = /etc/openvas/openvassd.conf
  12. Ahora nos toca configurar la herramienta Greenbone Security Assistant (GSA) y el OpenVAS Manager para que puedan ser accesibles remotamente a través de la interfaz pública (desde nuestra LAN), y no solamente desde el equipo local como vienen configurados por defecto. Primero comenzamos por GSA editando el siguiente archivo de configuración,
    testsrv:~ # vi /etc/sysconfig/greenbone-security-assistant
    donde buscamos la directiva GSA_ADDRESS, en la cual debemos reemplazar su configuración por defecto 127.0.0.1 por 0.0.0.0.
    #GSA_ADDRESS=127.0.0.1
    GSA_ADDRESS=0.0.0.0
    Lo mismo realizamos en el archivo de configuración del OpenVAS Manager.
    testsrv:~ # vi /etc/sysconfig/openvas-manager
    Aunque el cambio a realizar es el mismo, la diferencia que en este caso debemos buscar se denomina MANAGER_ADDRESS.
    MANAGER_ADDRESS=0.0.0.0
  13. A partir de la versión 4 de OpenVAS la herramienta cuenta con varios servicios independientes, que a continuación los arrancamos por primera vez:
    testsrv:~ # /etc/init.d/openvas-administrator start
    testsrv:~ # /etc/init.d/openvas-manager start
    testsrv:~ # /etc/init.d/openvas-scanner start
    testsrv:~ # /etc/init.d/greenbone-security-assistant start

  14. Luego activamos los servicios en los niveles de ejecución:
    testsrv:~ # chkconfig --add openvas-administrator
    testsrv:~ # chkconfig --add openvas-manager
    testsrv:~ # chkconfig --add openvas-scanner
    testsrv:~ # chkconfig --add greenbone-security-assistant

  15. Como hemos realizado la mayoría de los pasos para instalar la herramienta, podemos verificar que la instalación cumpla con los requerimientos de le herramienta usando el script de verificación de la instalación de OpenVAS openvas-check-setup. Pero para utilizarlo primero lo debemos descargar y preparar para ejecutarlo por primera vez con los siguientes comandos:
    testsrv:~ # cd /usr/sbin/
    testsrv:~/usr/sbin # wget --no-check-certificate https://svn.wald.intevation.org/svn/openvas/trunk/tools/openvas-check-setup
    testsrv:~/usr/sbin # chmod +x openvas-check-setup

    Realizado lo anterior ya podremos verificar la instalación ejecutando el comando openvas-check-setup con el argumento --v5 como se muestra a continuación:
    testsrv:~/usr/sbin # openvas-check-setup --v5
    Y que debería generar una salida similar a la siguiente:
    openvas-check-setup 2.2.1
    Test completeness and readiness of OpenVAS-5

    Please report us any non-detected problems and
    help us to improve this check routine:
    http://lists.wald.intevation.org/mailman/listinfo/openvas-discuss

    Send us the log-file (/tmp/openvas-check-setup.log) to help analyze the problem.

    Use the parameter --server to skip checks for client tools
    like GSD and OpenVAS-CLI.

    Step 1: Checking OpenVAS Scanner ...
    OK: OpenVAS Scanner is present in version 3.3.1.
    OK: OpenVAS Scanner CA Certificate is present as /var/lib/openvas/CA/cacert.pem.
    OK: NVT collection in /var/lib/openvas/plugins contains 30600 NVTs.
    OK: Signature checking of NVTs is enabled in OpenVAS Scanner.
    Step 2: Checking OpenVAS Manager ...
    OK: OpenVAS Manager is present in version 3.0.5.
    OK: OpenVAS Manager client certificate is present as /var/lib/openvas/CA/clientcert.pem.
    OK: OpenVAS Manager database found in /var/lib/openvas/mgr/tasks.db.
    OK: Access rights for the OpenVAS Manager database are correct.
    OK: OpenVAS SCAP database found in /var/lib/openvas/scap-data/scap.db.
    OK: sqlite3 found, extended checks of the OpenVAS Manager installation enabled.
    OK: OpenVAS Manager database is at revision 56.
    OK: OpenVAS Manager expects database at revision 56.
    OK: Database schema is up to date.
    OK: OpenVAS Manager database contains information about 30600 NVTs.
    OK: xsltproc found.
    Step 3: Checking OpenVAS Administrator ...
    OK: OpenVAS Administrator is present in version 1.2.1.
    OK: At least one user exists.
    OK: At least one admin user exists.
    Step 4: Checking Greenbone Security Assistant (GSA) ...
    OK: Greenbone Security Assistant is present in version 3.0.3.
    Step 5: Checking OpenVAS CLI ...
    OK: OpenVAS CLI version 1.1.5.
    Step 6: Checking Greenbone Security Desktop (GSD) ...
    OK: Greenbone Security Desktop is present in Version 1.2.2.
    Step 7: Checking if OpenVAS services are up and running ...
    OK: netstat found, extended checks of the OpenVAS services enabled.
    OK: OpenVAS Scanner is running and listening only on the local interface.
    OK: OpenVAS Scanner is listening on port 9391, which is the default port.
    OK: OpenVAS Manager is running and listening on all interfaces.
    OK: OpenVAS Manager is listening on port 9390, which is the default port.
    OK: OpenVAS Administrator is running and listening only on the local interface.
    OK: OpenVAS Administrator is listening on port 9393, which is the default port.
    OK: Greenbone Security Assistant is running and listening on all interfaces.
    OK: Greenbone Security Assistant is listening on port 9392, which is the default port.
    Step 8: Checking nmap installation ...
    WARNING: Your version of nmap is not fully supported: 6.25
    SUGGEST: You should install nmap 5.51.
    Step 9: Checking presence of optional tools ...
    OK: pdflatex found.
    WARNING: PDF generation failed, most likely due to missing LaTeX packages. The PDF report format will not work.
    SUGGEST: Install required LaTeX packages.
    OK: ssh-keygen found, LSC credential generation for GNU/Linux targets is likely to work.
    OK: rpm found, LSC credential package generation for RPM based targets is likely to work.
    WARNING: Could not find alien binary, LSC credential package generation for DEB based targets will not work.
    SUGGEST: Install alien.
    WARNING: Could not find makensis binary, LSC credential package generation for Microsoft Windows targets will not work.
    SUGGEST: Install nsis.

    It seems like your OpenVAS-5 installation is OK.

    If you think it is not OK, please report your observation
    and help us to improve this check routine:
    http://lists.wald.intevation.org/mailman/listinfo/openvas-discuss
    Please attach the log-file (/tmp/openvas-check-setup.log) to help us analyze the problem.
    Como pueden observar la mayoría de las verificaciones tienen el visto bueno OK. Para cubrir algunas de las dependencias faltantes (entre ellas la aplicación alien y pdflatex), podemos instalar los dos siguientes mediante el método 1-Click Install y zypper respectivamente:
    http://software.opensuse.org/package/alien
    testsrv:~ # zypper install texlive-latex
    y nada más.
Y esos han sido todos los pasos para instalar la herramienta de la mejor manera posible, podemos acceder al cliente de escritorio Greenbone Security Desktop ejecutando el comando gsd en la consola, o también podemos acceder a la interfaz de usuario web Greenbone Security Assistant mediante la URL https://127.0.0.1:9392.

Como he dicho, esto permitirá desplegar los asistentes pero no podrán loguearse con el usuario admin o gabriel previamente creados por un motivo que desconozco. Según lo que he encontrado es por un problema con la versión de la librería glib o gnutls presente en estas versiones de openSUSE, pero espero que alguien más entendido pueda aclararme este tema, así que estaré esperando sus comentarios..


Capturas de pantalla

Greenbone Security Desktop

Greenbone Security Assistant


Entorno de instalación y prueba

  • openSUSE 12.3 i586
  • OpenVAS 5


Fuentes y enlaces relacionados

Comentarios