Skip to content

greenbone/scanner-lab

Repository files navigation

scanner-lab

scanner-lab is an framework to test scanner responsibilities within a closed environment to reproduce some issues.

It is not using:

  • gvmd

or any other scanner management besides ospd.

This is done on purpose to reduce the amount of moving parts.

This is done by providing a runtime environment based on Kubernetes.

Which spins up:

  • a notus-scanner instance
  • a ospd (and therefore openvas-scanner) instance configured to use TLS
  • a slackware instance with a running ssh daemon
  • a victim image based on metasploitable

and then runs a test-binary called run-feature-tests.

Currently it does:

  • Discovery and Full and Fast scan-config

on the targets:

  • slackware
  • victim

To deploy and run run-feature-tests you can execute:

make

Installation

On a newly created environment you need to have

  • make
  • rsync
  • this repository

on your machine.

Requirements:

  • /var/lib/openvas/plugins/
  • /var/lib/notus/
  • /var/lib/gvm/data-objects/gvmd/22.04/scan-configs/

must exist and writeable by the user so that make update-local-feed can succeed.

You can verify it by running make check-feed-dirs. If there is no output and no error code this is correctly setup.

Install k3s

Although k3s is just a single binary it is useful to have a systemd integration for that they prepared a script which you can download via:

  curl -Lo install_k3s.sh https://get.k3s.io

review and execute it.

The script should install:

  • /usr/local/bin/k3s
  • /usr/local/bin/kubectl - kubernetes client (symlinked to k3s)
  • /usr/local/bin/crictl - CRI client (symlinked to k3s)
  • /usr/local/bin/k3s-killall.sh - to kill k3s
  • /usr/local/bin/k3s-uninstall.sh - to uninstall

Additionally it should create

  • /etc/systemd/system/k3s.service and enabling it per default.

To allow user execution set a KUBECONFIG variable:

export KUBECONFIG=~/.kube/config

if you already have running pods you can copy the configuration like:

mkdir -p ~/.kube
sudo k3s kubectl config view --raw > "$KUBECONFIG"

Further resources:

Apply deployments

make deploy

To update your local feed you can execute:

make update-local-feed

Remove deployments

make delete

Update

make update-local-feed
make update

Scale

kubectl scale deployments/victim --replicas=100
kubectl scale deployments/slsw --replicas=100

Useful commands

Use own paths instead of defaults

If you follow the standard setup

  • $YOUR_PATH/var/lib/openvas/plugins
  • $YOUR_PATH/var/lib/notus
  • $YOUR_PATH/var/lib/gvm/data-objects/gvmd/22.04/scan-configs

but just in a different path you can also set INSTALL_PREFIX either via environment or make variable instead of overriding each feed variable before executing create-local-volume-deployment.

If you want to use different source paths than set you can create a own openvas-persistent-volumes-deployment-local.yaml by executing:

make \
  nasl_target=$YOUR_NASL_PATH \
  notus_target=$YOUR_NOTUS_PATH \
  sc_target=$YOUR_SCAN_CONFIG_PATH \
  create-local-volume-deployment

Be aware that when you want to run make update-feed you need to apply the same values as you did when creating openvas-persistent-volumes-deployment-local.yaml If you change the INSTALL_PREFIX then you have to delete the persistent volume and openvas and deploy afterwards:

make delete-persistant-volumes
make deploy-openvas

start a scan

kubectl exec -ti deployment/openvas -c ospd -- bash
ospd-scans \
  -a localhost:4242 \
  --cert-path /var/lib/gvm/CA/cacert.pem \
  --certkey-path /var/lib/gvm/private/CA/serverkey.pem \
  --host 10.42.0.0/24 \
  --policies "Discovery,Full and fast" \
  --cmd start-finish

openvas logs

kubectl exec -ti deployment/openvas -c ospd -- tail -f /var/log/gvm/openvas.log 

Usage

To use the exposed TCP socket to OSPD you have to get the IP-Address of openvas:

kubectl get pods -l app=openvas -o wide

and the certificate and key file:

cd feature-tests
make fetch-certs

afterwards you can connect to it via:

echo "<get_version/>" | gnutls-cli \
  --port=4242 \
  --insecure \
  --x509certfile=/tmp/ca.pem \
  --x509keyfile=/tmp/key.pem \
  $(kubectl get pods -o wide | awk '/openvas/{print $6}')

run feature tests

cd ./feature-tests
make run

License

Copyright (C) 2022-2023 Greenbone Networks GmbH

Licensed under the GNU Affero General Public License v3.0 or later.

About

No description or website provided.

Topics

Resources

License

Security policy

Stars

Watchers

Forks

Packages

 
 
 

Contributors 4

  •  
  •  
  •  
  •