Scanning Like a Ghost - OpenVAS

OpenVAS is a katana forged for vulnerability scanning:

  • open source
  • container-ready
  • minimal noise
  • maximum signal

It thrives in Docker.
But what happens in the daemonless, rootless underworld?

The Ghost maps the terrain.

Sharpen the blade

The Docker Compose file is a map. Follow it to find the way in Podman:
https://greenbone.github.io/docs/latest/_static/docker-compose.yml

podman-compose still limps. It won't create volumes for you.

volumes.txt:

gpg_data_vol
scap_data_vol
cert_data_vol
data_objects_vol
gvmd_data_vol
psql_data_vol
vt_data_vol
notus_data_vol
psql_socket_vol
gvmd_socket_vol
ospd_openvas_socket_vol
redis_socket_vol
openvas_data_vol
openvas_log_data_vol

Manually carve them out:

 while  read i;  do podman volume create $ i;  done < volumes.txt 

Your podman-compose.yaml must be transformed for Podman:

 version:  "3.8"

 services:
   vulnerability-tests:
     image: registry.community.greenbone.net/community/vulnerability-tests
     environment:
       FEED_RELEASE:  "24.10"
     volumes:
      - vt_data_vol:/mnt

   notus-data:
     image: registry.community.greenbone.net/community/notus-data
     volumes:
      - notus_data_vol:/mnt

   scap-data:
     image: registry.community.greenbone.net/community/scap-data
     volumes:
      - scap_data_vol:/mnt

   cert-bund-data:
     image: registry.community.greenbone.net/community/cert-bund-data
     volumes:
      - cert_data_vol:/mnt

   dfn-cert-data:
     image: registry.community.greenbone.net/community/dfn-cert-data
     volumes:
      - cert_data_vol:/mnt
     depends_on:
      - cert-bund-data

   data-objects:
     image: registry.community.greenbone.net/community/data-objects
     environment:
       FEED_RELEASE:  "24.10"
     volumes:
      - data_objects_vol:/mnt

   report-formats:
     image: registry.community.greenbone.net/community/report-formats
     environment:
       FEED_RELEASE:  "24.10"
     volumes:
      - data_objects_vol:/mnt
     depends_on:
      - data-objects

   gpg-data:
     image: registry.community.greenbone.net/community/gpg-data
     volumes:
      - gpg_data_vol:/mnt

   redis-server:
     image: registry.community.greenbone.net/community/redis-server
     restart: on-failure
     volumes:
      - redis_socket_vol:/run/redis/

   pg-gvm:
     image: registry.community.greenbone.net/community/pg-gvm:stable
     restart: on-failure
     volumes:
      - psql_data_vol:/var/lib/postgresql
      - psql_socket_vol:/var/run/postgresql

   gvmd:
     image: registry.community.greenbone.net/community/gvmd:stable
     restart: on-failure
     volumes:
      - gvmd_data_vol:/var/lib/gvm
      - scap_data_vol:/var/lib/gvm/scap-data/
      - cert_data_vol:/var/lib/gvm/cert-data
      - data_objects_vol:/var/lib/gvm/data-objects/gvmd
      - vt_data_vol:/var/lib/openvas/plugins
      - psql_data_vol:/var/lib/postgresql
      - gvmd_socket_vol:/run/gvmd
      - ospd_openvas_socket_vol:/run/ospd
      - psql_socket_vol:/var/run/postgresql
     depends_on:
       pg-gvm:
         condition: service_started
       scap-data:
         condition: service_completed_successfully
       cert-bund-data:
         condition: service_completed_successfully
       dfn-cert-data:
         condition: service_completed_successfully
       data-objects:
         condition: service_completed_successfully
       report-formats:
         condition: service_completed_successfully

   gsa:
     image: registry.community.greenbone.net/community/gsa:stable
     restart: on-failure
     ports:
      - 127.0.0.1:9392:9392
     volumes:
      - gvmd_socket_vol:/run/gvmd
     depends_on:
      - gvmd

   configure-openvas:
     image: registry.community.greenbone.net/community/openvas-scanner:stable
     volumes:
      - openvas_data_vol:/mnt
      - openvas_log_data_vol:/var/log/openvas
     command:
      - /bin/sh
      - -c
      - |
         printf "table_driven_lsc = yes\nopenvasd_server = http://openvasd:80\n" > /mnt/openvas.conf
        sed  "s/127/128/" /etc/openvas/openvas_log.conf | sed  's/gvm/openvas/' > /mnt/openvas_log.conf
        chmod 644 /mnt/openvas.conf
        chmod 644 /mnt/openvas_log.conf
        touch /var/log/openvas/openvas.log
        chmod 666 /var/log/openvas/openvas.log

   openvas:
     image: registry.community.greenbone.net/community/openvas-scanner:stable
     restart: on-failure
     volumes:
      - openvas_data_vol:/etc/openvas
      - openvas_log_data_vol:/var/log/openvas
     command:
      - /bin/sh
      - -c
      - |
         cat /etc/openvas/openvas.conf
        tail -f /var/log/openvas/openvas.log
     depends_on:
       configure-openvas:
         condition: service_completed_successfully

   openvasd:
     image: registry.community.greenbone.net/community/openvas-scanner:stable
     restart: on-failure
     hostname: openvasd
     environment:
       OPENVASD_MODE: service_notus
       GNUPGHOME: /etc/openvas/gnupg
       LISTENING: 0.0.0.0:80
     volumes:
      - openvas_data_vol:/etc/openvas
      - openvas_log_data_vol:/var/log/openvas
      - gpg_data_vol:/etc/openvas/gnupg
      - notus_data_vol:/var/lib/notus
     depends_on:
       vulnerability-tests:
         condition: service_completed_successfully
       configure-openvas:
         condition: service_completed_successfully
       gpg-data:
         condition: service_completed_successfully

   ospd-openvas:
     image: registry.community.greenbone.net/community/ospd-openvas:stable
     restart: on-failure
     hostname: ospd-openvas.local
     cap_add:
      - NET_ADMIN
      - NET_RAW
     security_opt:
      - seccomp=unconfined
      - apparmor=unconfined
     command:
      [
         "ospd-openvas",
         "-f",
         "--config",
         "/etc/gvm/ospd-openvas.conf",
         "--notus-feed-dir",
         "/var/lib/notus/advisories",
         "-m",
         "666",
       ]
    volumes:
      - gpg_data_vol:/etc/openvas/gnupg
      - vt_data_vol:/var/lib/openvas/plugins
      - notus_data_vol:/var/lib/notus
      - ospd_openvas_socket_vol:/run/ospd
      - redis_socket_vol:/run/redis/
      - openvas_data_vol:/etc/openvas/
      - openvas_log_data_vol:/var/log/openvas
     depends_on:
       redis-server:
         condition: service_started
       gpg-data:
         condition: service_completed_successfully
       vulnerability-tests:
         condition: service_completed_successfully
       configure-openvas:
         condition: service_completed_successfully

   gvm-tools:
     image: registry.community.greenbone.net/community/gvm-tools
     volumes:
      - gvmd_socket_vol:/run/gvmd
      - ospd_openvas_socket_vol:/run/ospd
     depends_on:
      - gvmd
      - ospd-openvas

 volumes:
   gpg_data_vol:
   scap_data_vol:
   cert_data_vol:
   data_objects_vol:
   gvmd_data_vol:
   psql_data_vol:
   vt_data_vol:
   notus_data_vol:
   psql_socket_vol:
   gvmd_socket_vol:
   ospd_openvas_socket_vol:
   redis_socket_vol:
   openvas_data_vol:
   openvas_log_data_vol:

Pull in the the arsenal:

podman-compose -f podman-compose.yaml pull

OpenVAS is not monolithic.
Each container does one job.
Silent. Sharp. Modular.

Summon the system:

podman-compose -f podman-compose.yaml up -d

Some containers like vulnerability-tests, notus-data, scap-data are ghosts themselves.
They appear, inject knowledge, vanish.

In case of noise - logs never lie:

podman-compose -f podman-compose.yaml logs -f

Cut

Once online, scan like a specter.
Open browser -> http://localhost:9392

Use credentials:

admin / admin

Then change the password.
The shadows are always watching.

A Ghost's vision is limited… for now

When you log in:

You are currently using the free Greenbone Community Feed - this shows only a few vulnerabilities for business critical enterprise software such as MS Exchange, Cisco, VMware, Citrix and many more.
Over 60% of all relevant exploits remain hidden.

Translation?
You're flying low-res. The Community Feed is a shadow of the full arsenal.

Ghosts don't panic. They adapt.

If you're hunting in the enterprise jungle, you either:

  • Maintain multiple scanners
  • Supplement with external intel
  • Or switch to the Greenbone Enterprise Feed - at a price.

In this operation we fly free.

But always remember:
60% of the cracks are in the dark.

Clean it up

No trace. No fingerprint. No echo.

Stop the containters:

podman-compose down

Purge the volumes:

 while  read i;  do podman volume rm openvas_$ i;  done < volumes.txt 

Erase the images:

podman image ls |grep greenbone |awk  '{print $3}' |xargs podman image rm --

The system breathes clean.
Only the ghost remains.


Whisper to DeadSwitch on Matrix: @deadswitch:matrix.org
Maybe the Ghost signals back.

DeadSwitch | The Silent Architect
In silence, I rise. In structure, I endure.