Skip to main content

Starting your First Scans

Now that you have installed the secureCodeBox, you are close to being able to run your first scans.

Before we can start scans, we need to install their ScanTypes, these tell the secureCodeBox Operator how to run the scans and how their results can be parsed to create a uniform and consistent finding data model. ScanTypes are namespaced Custom Resource Definitions in Kubernetes, this lets different teams operating in different namespaces use different types of scanners and enables them to define their own custom ScanTypes.

Installing the Nmap ScanType

In this guide, we'll use the Nmap Port & Network Scanner, as it is fast and relatively easy to use. We can install the Nmap ScanType via Helm (Make sure to add the helm repo first. See Installation):

helm install nmap secureCodeBox/nmap

To verify or to see which ScanTypes are installed in your current Namespace you can run:

kubectl get scantypes

This should print an output like this (your version might differ):


Starting a Scan

Now that we have the ScanType Nmap installed, we are ready to start our first scan.

This example creates a Nmap scan which probes the host. This scan is equivalent to running nmap locally.


Please note the terms of usage for the website. Basically, restrict yourself to run portscans and don't run crazy amounts of scans against it.

apiVersion: ""
kind: Scan
name: ""
scanType: "nmap"

To run this example save the YAML code above to a local file named nmap-scan.yaml and then start the scan via kubectl:

kubectl apply -f nmap-scan.yaml

The scan is now starting up, you can track its progress using kubectl:

kubectl get scans

This should print an output like this:

NAME                   TYPE   STATE      FINDINGS nmap Scanning

Monitoring the Scan Execution

When you apply a scan, the secureCodeBox Operator will create a Kubernetes Job in your namespace. In this namespace, the scanner (in our example the Nmap scanner) will be executed inside a container. Once the scan has completed the container will terminate and no compute resources will be consumed anymore. You can view the status of this job by running:

kubectl get jobs

This should give you an output like this

NAME                               COMPLETIONS   DURATION   AGE 1/1 30s 43m 1/1 10s 25s

Your job names will be slightly different. Kubernetes generates a random suffix for each job name to make them unique. In our case the suffix fir the scan job is -w66rp and for the parse job is -h8thd.

You can also view the logs of the container by running:

kubectl logs job/ nmap

If your job is still running you can stream the logs of the scan until it has completed:

kubectl logs job/ nmap --follow

This should print an output like this:

Starting Nmap 7.80 ( ) at 2020-09-25 10:50 UTC
Nmap scan report for (
Host is up (0.19s latency).
Other addresses for (not scanned): 2600:3c01::f03c:91ff:fe18:bb2f
Not shown: 993 closed ports
22/tcp open ssh
80/tcp open http
135/tcp filtered msrpc
139/tcp filtered netbios-ssn
445/tcp filtered microsoft-ds
9929/tcp open nping-echo
31337/tcp open Elite

Nmap done: 1 IP address (1 host up) scanned in 5.44 seconds

Unless you are really quick or your scan took a long time you'll likely also seen that a second job was started:

kubectl get jobs

This should print an output like this:

NAME                               COMPLETIONS   DURATION   AGE 1/1 14s 15s 1/1 10s 25s

This second job takes the result of the Nmap Scan and transforms them into a secureCodeBox specific finding format. These findings share the same basic structure for all integrated scanners, which makes it very convenient to analyze them in further steps.

Viewing the Scan Results

Once this second job has completed you can get an overview of the results by taking another look at the scan:

kubectl get scans

This should print an output like this:

NAME                   TYPE   STATE   FINDINGS nmap Done 8

This list shows us the total count of findings identified by the scan. You can get a deeper overview by running:

kubectl describe scan

This should print an output like this:

Namespace: default
Labels: <none>
Annotations: API Version:
Kind: Scan
Creation Timestamp: 2020-09-25T10:50:09Z
Generation: 1
Resource Version: 46608
Self Link: /apis/
UID: fef73c4c-700a-4ad0-96c5-f8319989e9d9
Scan Type: nmap
Finding Download Link: "...omitted for readability"
Host: 1
Open Port: 7
Count: 8
Informational: 8
Finished At: 2020-09-25T10:50:35Z
Raw Result Download Link: "...omitted for readability"
Raw Result File: nmap-results.xml
Raw Result Type: nmap-xml
State: Done
Events: <none>

This gives us an overview of the results of the scan. To view the actual findings produced by the scan you can use the download link to download the findings as JSON from MinIO/S3.


When using the default MinIO installation, you'll need to port-forward the to be able to access the finding download link. See: installation

Next Steps

Configure more Involved Nmap Scans

Nmap is an extremely powerful tool, which can be used for much more than just scanning for ports. You can find more examples of Nmap scans, including example findings for these scans on the documentation page of the Nmap ScanType.

Other ScanTypes

Nmap is just one of the many security testing tools integrated into the secureCodeBox, you can find examples and documentation on how to use each of them on their documentation page in the sidebar.

To get started you can also take a look at our more detailed guides

Pushing Findings into External Systems

You can also integrate the secureCodeBox to automatically push the scan results into an external system like Elasticsearch or DefectDojo to better analyse your findings.