Skip to content

⚙️ Add a generic (SCB) finding importer to the DefectDojo Integration Hook #332

@rfelber

Description

@rfelber

Is your feature request related to a problem?

As secureCodeBox (SCB) user i would like to use all integrated security scanners and examine their results in OWASP DefectDojo (DD), when i use DD as vulnerability management tool in my environment.
With the latest PR #300 introducing the DefectDojo-Persistence Hook it is now already possible to import some SCB scanner findings supported by DefectDojo:

public enum ScanNameMapping {
NMAP("nmap", ScanType.NMAP_SCAN),
ZAP_BASELINE("zap-baseline", ScanType.ZAP_SCAN),
ZAP_API_SCAN("zap-api-scan", ScanType.ZAP_SCAN),
ZAP_FULL_SCAN("zap-full-scan", ScanType.ZAP_SCAN),
SSLYZE("sslyze", ScanType.SS_LYZE_3_SCAN_JSON),
TRIVY("trivy", ScanType.TRIVY_SCAN),
GITLEAKS("gitleaks", ScanType.GITLEAKS_SCAN),
// WPSCAN("wpscan", ScanType.WPSCAN),
// NIKTO("nikto", ScanType.NIKTO_SCAN),
// SSH("ssh-scan, ScanType.?),
;

Problem is that there are some scanners missing which are already integrated within secureCodeBox but have no corresponding parser at OWASP DefectDojo. Thats why i'm currently not able to import and analyse the following scanner finding results. Using those scanners in combination with the DefectDojo-Persistence Hook leads to failed scans:

  • WPScan
  • SSH-Scan
  • Nikto (in JSON format instead of XML)
  • Kube-Hunter
  • Kubeaudit

Example failure

Example scan with kube-hunter:

k tree scan kube-hunter-internal-1616236981 -n demo-scans
NAMESPACE   NAME                                                                 READY  REASON              AGE
demo-scans  Scan/kube-hunter-internal-1616236981                                 -                          96m
demo-scans  ├─Job/defectdojo-hook-kube-hunter-internal-1616236981-hwnhw          -                          95m
demo-scans  │ ├─Pod/defectdojo-hook-kube-hunter-internal-1616236981-hwnhw-8cthv  False  ContainersNotReady  95m
demo-scans  │ ├─Pod/defectdojo-hook-kube-hunter-internal-1616236981-hwnhw-gjdz6  False  ContainersNotReady  95m
demo-scans  │ ├─Pod/defectdojo-hook-kube-hunter-internal-1616236981-hwnhw-hf26w  False  ContainersNotReady  93m
demo-scans  │ └─Pod/defectdojo-hook-kube-hunter-internal-1616236981-hwnhw-xdszp  False  ContainersNotReady  94m
demo-scans  └─Job/parse-kube-hunter-internal-1616236981-qnwc8                    -                          95m
demo-scans    └─Pod/parse-kube-hunter-internal-1616236981-qnwc8-wm4ls            False  PodCompleted        95m

Example defectdojo-hook log:

2021-03-20 10:45:42 DEBUG RestTemplate:147 - Accept=[text/plain, application/json, application/*+json, */*]
2021-03-20 10:45:42 DEBUG RestTemplate:147 - Response 200 OK
2021-03-20 10:45:42 DEBUG RestTemplate:147 - Reading to [java.lang.String] as "application/octet-stream"
2021-03-20 10:45:42 DEBUG VersionedEngagementsStrategy:99 - Finished Downloading Scan Report (RawResults)
Exception in thread "main" java.lang.IllegalArgumentException: No Mapping found for ScanType 'kube-hunter'
	at io.securecodebox.persistence.util.ScanNameMapping.bySecureCodeBoxScanType(ScanNameMapping.java:60)
	at io.securecodebox.persistence.strategies.VersionedEngagementsStrategy.createTest(VersionedEngagementsStrategy.java:259)
	at io.securecodebox.persistence.strategies.VersionedEngagementsStrategy.run(VersionedEngagementsStrategy.java:101)
	at io.securecodebox.persistence.DefectDojoPersistenceProvider.main(DefectDojoPersistenceProvider.java:53)

Describe alternatives you've considered

The following alternative solutions are only focussed on the missing parser problem:
There are multiple solution strategies to solve this problem:

  1. Use the generic CSV findings importer to implement a generic SCB findings import in the DefectDojo-Persistence Hook
public enum ScanNameMapping {
  NMAP("nmap", ScanType.NMAP_SCAN),
  ZAP_BASELINE("zap-baseline", ScanType.ZAP_SCAN),
  ZAP_API_SCAN("zap-api-scan", ScanType.ZAP_SCAN),
  ZAP_FULL_SCAN("zap-full-scan", ScanType.ZAP_SCAN),
  SSLYZE("sslyze", ScanType.SS_LYZE_3_SCAN_JSON),
  TRIVY("trivy", ScanType.TRIVY_SCAN),
  GITLEAKS("gitleaks", ScanType.GITLEAKS_SCAN),
  // New Approach
  // NIKTO("nikto", ScanType.GENERIC_CSV_SCAN),
  // SSH("ssh-scan, ScanType.GENERIC_CSV_SCAN),
  ;
  1. Implement a new generic JSON Findings Importer in OWASP DefectDojo as already suggested here Add Generic JSON importer DefectDojo/django-DefectDojo#3798 and use it to implement a generic SCB findings import in the DefectDojo-Persistence Hook
public enum ScanNameMapping {
  NMAP("nmap", ScanType.NMAP_SCAN),
  ZAP_BASELINE("zap-baseline", ScanType.ZAP_SCAN),
  ZAP_API_SCAN("zap-api-scan", ScanType.ZAP_SCAN),
  ZAP_FULL_SCAN("zap-full-scan", ScanType.ZAP_SCAN),
  SSLYZE("sslyze", ScanType.SS_LYZE_3_SCAN_JSON),
  TRIVY("trivy", ScanType.TRIVY_SCAN),
  GITLEAKS("gitleaks", ScanType.GITLEAKS_SCAN),
  // New Approach
  // NIKTO("nikto", ScanType.GENERIC_JSON_SCAN),
  // SSH("ssh-scan, ScanType.GENERIC_JSON_SCAN),
  ;
  1. Implement a new generic SCB JSON Findings Importer in OWASP DefectDojo which is based on the secureCodeBox specific findings format and use it to import them in the DefectDojo-Persistence Hook
public enum ScanNameMapping {
  NMAP("nmap", ScanType.NMAP_SCAN),
  ZAP_BASELINE("zap-baseline", ScanType.ZAP_SCAN),
  ZAP_API_SCAN("zap-api-scan", ScanType.ZAP_SCAN),
  ZAP_FULL_SCAN("zap-full-scan", ScanType.ZAP_SCAN),
  SSLYZE("sslyze", ScanType.SS_LYZE_3_SCAN_JSON),
  TRIVY("trivy", ScanType.TRIVY_SCAN),
  GITLEAKS("gitleaks", ScanType.GITLEAKS_SCAN),
  // New Approach
  // NIKTO("nikto", ScanType.GENERIC_SCB_SCAN),
  // SSH("ssh-scan, ScanType.GENERIC_SCB_SCAN),
  ;

Describe the solution you'd like

I would prefer the solution alternative 3 because it seems to be a clean integration strategy. Both OWASP projects (secureCodeBox and DefectDojo) would have advantages.

Additional context

Metadata

Metadata

Assignees

Labels

defectdojoAll issues regarding the DefectDojo IntegrationpersistenceImplement or update a persistence storepythonIssues based on python implementations

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions