
Scan ist ein kostenloses & Open Source DevSecOps-Tool zur Durchführung von statischer Analyse basierter Sicherheitstests Ihrer Anwendungen und deren Abhängigkeiten. CI und Git freundlich.
███████╗ ██████╗ █████╗ ███╗ ██╗
██╔════╝██╔════╝██╔══██╗████╗ ██║
███████╗██║ ███████║██╔██╗ ██║
╚════██║██║ ██╔══██║██║╚██╗██║
███████║╚██████╗██║ ██║██║ ╚████║
╚══════╝ ╚═════╝╚═╝ ╚═╝╚═╝ ╚═══╝
Scan ist ein kostenloses Open-Source-Sicherheitstool für moderne DevOps-Teams. Mit einem integrierten, auf mehreren Scannern basierenden Design kann Scan verschiedene Arten von Sicherheitslücken in Ihrem Anwendungs- und Infrastrukturcode in einem einzigen schnellen Scan erkennen, ohne dass ein entfernter Server erforderlich ist. Scan wurde speziell für die Workflow-Integration entwickelt und bietet nützliche Funktionen wie automatischen Build-Breaker, Ergebnisbaseline und PR-Zusammenfassungskommentare. Scan-Produkte sind unter der Apache-2.0-Lizenz Open Source.
-o reports/source-ruby-report.jsonBitte besuchen Sie die offizielle Dokumentation für Scan, um mehr über die Konfigurations- und CI/CD-Integrationsoptionen zu erfahren. Wir haben auch einen dedizierten Discord-Kanal für Probleme und Support.
Scan ist ideal für den Einsatz mit CI und auch als Pre-Commit-Hook für die lokale Entwicklung. Scan wird als Container-Image shiftleft/scan und als AppImage für unterstützte Linux-Distributionen bereitgestellt.
Einfacher Einzeiler-Befehl unten:
sh <(curl https://slscan.sh)
Der obige Befehl ruft einfach den folgenden Docker-Run-Befehl auf.
docker run --rm -e "WORKSPACE=${PWD}" -v $PWD:/app shiftleft/scan scan --build
Unter Windows ändert sich der Befehl je nach Terminal.
cmd
docker run --rm -e "WORKSPACE=%cd%" -e "GITHUB_TOKEN=%GITHUB_TOKEN%" -v "%cd%:/app:cached" shiftleft/scan scan
PowerShell und PowerShell Core
docker run --rm -e "WORKSPACE=$(pwd)" -e "GITHUB_TOKEN=$env:GITHUB_TOKEN" -v "$(pwd):/app:cached" shiftleft/scan scan
WSL Bash
docker run --rm -e "WORKSPACE=${PWD}" -e "GITHUB_TOKEN=${GITHUB_TOKEN}" -v "$PWD:/app:cached" shiftleft/scan scan
git-bash
docker run --rm -e "WORKSPACE=${PWD}" -e "GITHUB_TOKEN=${GITHUB_TOKEN}" -v "/$PWD:/app:cached" shiftleft/scan scan
Vergessen Sie nicht den Schrägstrich (/) vor $PWD für git-bash!
Mehrere Projekte scannen
docker run --rm -e "WORKSPACE=${PWD}" -v $PWD:/app shiftleft/scan scan --src /app --type credscan,nodejs,python,yaml --out_dir /app/reports
Java-Projekt scannen
Für Java- und JVM-Sprachprojekte ist es wichtig, die Projekte zu kompilieren, bevor sast-scan im Entwicklungs- und CI-Workflow aufgerufen wird.
docker run --rm -e "WORKSPACE=${PWD}" -v ~/.m2:/.m2 -v <source path>:/app shiftleft/scan scan --src /app --type java
# Für Gradle-Projekt
docker run --rm -e "WORKSPACE=${PWD}" -v ~/.gradle:/.gradle -v <source path>:/app shiftleft/scan scan --src /app --type java
Automatische Projekterkennung
Sie können --type weglassen, um die automatische Erkennung zu aktivieren. Oder übergeben Sie kommagetrennte Werte, wenn das Projekt mehrere Typen hat.
Das Scannen von Container-Images ist jetzt mit slscan möglich. Der empfohlene Ansatz besteht darin, das Container-Image zuerst mit dem Befehl docker save oder podman save zu exportieren und dann scan mit der .tar-Datei aufzurufen.
docker pull shiftleft/scan-slim:latest
docker save -o scanslim.tar shiftleft/scan-slim:latest
# podman save --format oci-archive -o scanslim.tar shiftleft/scan-slim:latest
docker run --rm -e "WORKSPACE=${PWD}" -v $PWD:/app shiftleft/scan scan --src /app/scanslim.tar -o /app/reports --type docker
Alternativ ist es möglich, scan das Container-Image vor der Analyse pullen zu lassen. Dies erfordert jedoch das Freigeben des Docker- oder Podman-Daemon-Sockets und wird daher nicht empfohlen. Sie können es versuchen, wenn Sie abenteuerlustig sind, indem Sie die folgenden Parameter an den Docker-Run-Befehl übergeben.
-e "DOCKER_HOST=unix:/var/run/docker.sock:" -v "/var/run/docker.sock:/var/run/docker.sock"
Beispiel: Zum Scannen des Container-Images shiftleft/scan-slim:
docker run --rm -e "WORKSPACE=$(pwd)" -e "DOCKER_HOST=unix:/var/run/docker.sock:" \
-v "/var/run/docker.sock:/var/run/docker.sock" \
-v "$(pwd):/app" shiftleft/scan scan -t docker -i shiftleft/scan-slim
Beispiel: Zum Scannen des Container-Images redmine@sha256:a5c5f8a64a0d9a436a0a6941bc3fb156be0c89996add834fe33b66ebeed2439e:
docker run --rm -e "WORKSPACE=$(pwd)" -e "DOCKER_HOST=unix:/var/run/docker.sock:" \
-v "/var/run/docker.sock:/var/run/docker.sock" \
-v "$(pwd):/app" shiftleft/scan scan -t docker -i redmine@sha256:a5c5f8a64a0d9a436a0a6941bc3fb156be0c89996add834fe33b66ebeed2439e
Gleiches Beispiel mit Podman
podman run --rm -e "WORKSPACE=$(pwd)" -e "DOCKER_HOST=unix:/run/user/1000/podman/podman.sock:" \
-v "/run/user/1000:/run/user/1000" \
-v "$(pwd):/app" shiftleft/scan scan -t docker -i redmine@sha256:a5c5f8a64a0d9a436a0a6941bc3fb156be0c89996add834fe33b66ebeed2439e
Berichte werden in dem für --out_dir angegebenen Verzeichnis erstellt. In den obigen Beispielen ist es auf reports gesetzt, ein Verzeichnis unter dem Quellcode-Root-Verzeichnis.
Einige der Berichte werden in einen Standard namens SARIF konvertiert. Solche Berichte enden mit der Erweiterung .sarif. Zum Öffnen und Anzeigen von SARIF-Dateien wird ein Viewer wie der folgende benötigt:
Viele Scan-Images werden über die CI-Pipeline auf quay.io gespiegelt. Fügen Sie einfach quay.io/ vor den Image-Namen ein. Unten sind die verfügbaren Spiegel aufgeführt.
Scan wird von vielen Organisationen und über Tausenden von Open-Source-Projekten verwendet. Einige bekannte Organisationen, die Scan nutzen, sind:
Senden Sie uns einen PR, um Ihren Organisationsnamen hier aufzunehmen. Sie können Ihre Unterstützung für Scan auch zeigen, indem Sie die Hashtags #slscan in sozialen Medien verwenden.
| Programmiersprache | Werkzeuge |
|---|
| ansible | ansible-lint |
| apex | pmd |
| arm | checkov |
| aws | checkov |
| bash | shellcheck |
| bom | cdxgen |
| credscan | gitleaks |
| depscan | dep-scan |
| dockerfile | checkov |
| go | gosec, staticcheck |
| groovy | find-sec-bugs |
| java | cdxgen, gradle, find-sec-bugs, pmd |
| jsp | pmd, find-sec-bugs |
| json | jq, jsondiff, jsonschema |
| kotlin | detekt, find-sec-bugs |
| scala | find-sec-bugs |
| kubernetes | checkov, kubesec, kube-score |
| nodejs | cdxgen, yarn, rush |
| php | psalm, phpstan (ide only) |
| plsql | pmd |
| python | cfg-scan (1), bandit, cdxgen |
| ruby | brakeman (2), dep-scan |
| rust | cdxgen |
| serverless | checkov |
| terraform | checkov, tfsec |
| Visual Force (vf) | pmd |
| Apache Velocity (vm) | pmd |
| yaml | yamllint |
| docker/container image | dep-scan |