Trivy-Scan in Scan-Pipeline statt Build-Pipeline
Warum?
Grundsätzlich möchten wir Software ausliefern und betreiben, die keine Sicherheitslücken hat. Projekte, bei denen länger keine Codeänderung stattgefunden hat (OAuth-Server etc.), könnten zwischenzeitlich bekannte CVEs enthalten, ohne dass wir darüber informiert sind.
Relevante Links und Bemerkungen
- Der Trivy-Scan sollte zusätzlich für alle deployten Versionen (Tags/Branches) in täglichen CVE-Pipelines (Trivy) ausgeführt werden.
- Der Trivy-Scan soll weiterhin in den Build-Pipelines des jeweiligen main-Branches, sowie in jedem Pull-Request auf den main-Branch ausgeführt werden.
- Der Trivy-Scan soll auf allen anderen Branches per Default nicht ausgeführt werden.
- CVEs, die über die
.trivyignore
ausgenommen sind, sollen weiterhin ignoriert werden. - Jede Komponente sollte das Dateisystem des Repos scannen und wenn möglich auch das Image.
- Das Team sollte darüber in Kenntnis gesetzt werden, wenn ein neues CVE im Scan erkannt wird.
Liste zu scannender Komponenten/Repos:
- oauth-server
- entwicklungsportal (included trivy aber nutzt es nicht)
- token-validator
- fake-dvdv
- self-service-portal
- self-service-portal-frontend
- zustelldienst
- sdk-* (aktuell mind. Java)
Ausgeschlossene Repos (die aktuell den Trivy Scan nutzen):
- fit-connect-monorepo/self-service-portal → weil noch unklar ist, in wie fern das Monorepo Projekt fortgeführt wird.
- static-assets → wird bald wegfallen (#538 (closed))
Akzeptanzkriterien
-
Potentiell relevante CVEs werden zeitnah nach Bekanntmachung entdeckt (es gibt Pipelines die fehlschlagen, wenn ein neues CVE erkannt wird).
- Potentiell relevant, da nicht alle CVEs im kritischen Pfad liegen und evtl. ignoriert werden könnten.
- Entdeckt: Team ist darüber informiert ist (z.B. über Benachrichtigung).
- Zeitnah: 1 Tag
- Es gibt eine Policy (baw. im "onboarding" Guide niedergelegt), welche beschreibt, wie mit .trivyignore-Konfigurationen umzugehen ist, z.B.
- Ignores werden regelmäßig (einmal im Monat) einem Review unterzogen, ob sie weiterhin relevant sind bzw. ob sie weiterhin ignoriert werden können.
- Für jedes neue Ignore wird dokumentiert, warum es ignoriert werden kann. Dabei ist ein 4-Augen-Prinzip sicherzustellen, bei der zwei Personen gemeinsam über die Irrelevanz entscheiden. Die Dokumentation ist versioniert (kann baw. über Kommentare in .trivyignore erfolgen). Die Dokumentation enthält, welche Personen die Entscheidung getroffen haben.
- Das Ignorieren von Incidents ab einer bestimmten Severity wird mit IT Security abgestimmt.
- Es gibt eine Policy (baw. im "onboarding" Guide niedergelegt), welche beschreibt, wie mit neuen Incidents umzugehen ist, z.B.
- Incidents eines deployten Branches (Test, Stage, Produktion) sind je nach Severity (Abstimmung mit IT Security) innerhalb einer festen Frist zu lösen bzw. zu ignorieren (s.o.).
- Incidents, die in einem MR oder auf dem jeweiligen main-Branch gefunden werden, sind unmittelbar zu lösen.
Durchführungsplan (von Entwickler:in bei Umsetzungsplanung auszufüllen)
zentraler Scan:
-
1 Repo zum Testen einer Pipeline zum regelmäßigen CVE Scan der oben genannten Repos anlegen -
Im pipeline
Repository den Renovate MR testen, Vorgehen dokumentieren und mergen (update gcr.io/kaniko-project/executor docker tag to v1.9.2) → erledigt mit: pipeline!3 (merged) -
Ausführungsstrategie/Lösungsmöglichkeiten überlegen (zentralen Scheduler oder ein Scheduling je Repo?) inkl. Vor- und Nachteilen → erledigt mit: #755 (comment 67561) und #755 (comment 67563) -
Bei der zentralen Pipeline needs
vs. vorgelagerte Stage ausprobieren -
Implementierung der Ermittlung der deployten Versionen (DEV, TEST, STAGE, PROD) über das Infrastruktur Repository und scannen der entsprechenden Versionen -
Implementierung eines Scans des Java-SDKs, des Entwicklerportals sowie des Self-Service-Portal-Frontend. Hier gibt es aktuell keine Versionen. Daher wird zunächst nur der Branch main
gescannt. -
Nach dem PeerReview alle Komponenten in die Pipeline aufnehmen https://git.fitko.de/fit-connect/gitlab-cve-scan-pipeline/-/merge_requests/4 -
Fehler in Pipeline beheben: https://git.fitko.de/fit-connect/cve-scan-pipeline/-/jobs/88313 https://git.fitko.de/fit-connect/cve-scan-pipeline/-/jobs/88316 → Problem mit Docker-Registry https://git.fitko.de/fit-connect/cve-scan-pipeline/-/merge_requests/8 -
Feedback von @Jonas_Groeger: expire
in den Pipelines fürartifacts
ergänzen. Hier und hier → https://git.fitko.de/fit-connect/cve-scan-pipeline/-/merge_requests/7
Ergebnisse der ersten Scans
-
Ergebnisse der ersten Scans sammeln → #755 (comment 73804) -
Klären, ob je Finding ein Issue eröffnet werden soll → ist einer der nächsten Schritte
Scan in einzelnen Repos aktualisieren oder einbauen:
-
Im pipeline
Repository einen Befehl austauschen der deprecated ist → erledigt mit: pipeline!6 (merged) -
ggf. Trivy Scans Stages in den einzelnen Repos angleichen (Konsistenz herstellen) -
Trivy Scan in das Repo entwicklungsportal
einbauen, wenn sinnvoll → entwicklungsportal!60 (merged) -
Trivy Scan in das Repo self-service-portal-frontend
einbauen, wenn sinnvoll https://git.fitko.de/fit-connect/self-service-portal-frontend/-/merge_requests/71 & https://git.fitko.de/fit-connect/self-service-portal-frontend/-/merge_requests/98 -
Trivy Scan in für Repo sdk-java
einbauen → sdk-java!165 (merged)
Dokumentation erstellen:
-
Policy zum Umgang neuer CVEs schreiben und im "onboarding" Repo ablegen → onboarding MR -
Doku um Abschnitt "Wann und wie ignoriert man CVEs?" schreiben im "onboarding" Repo ablegen → onboarding MR -
Doku zu der täglich laufenden Trivy Pipeline schreiben https://git.fitko.de/fit-connect/gitlab-cve-scan-pipeline/-/blob/main/README.adoc -
Gitlab Issue template zum Ignorieren von CVEs: !11 (merged)
Definition of Done
-
Definition of Done wurde geprüft
Edited by Christoph Metzger