
Scan è uno strumento DevSecOps gratuito e Open Source per eseguire test di sicurezza basati su analisi statica delle tue applicazioni e delle loro dipendenze. Amichevole con CI e Git.
███████╗ ██████╗ █████╗ ███╗ ██╗
██╔════╝██╔════╝██╔══██╗████╗ ██║
███████╗██║ ███████║██╔██╗ ██║
╚════██║██║ ██╔══██║██║╚██╗██║
███████║╚██████╗██║ ██║██║ ╚████║
╚══════╝ ╚═════╝╚═╝ ╚═╝╚═╝ ╚═══╝
Scan è uno strumento di sicurezza open-source gratuito per i moderni team DevOps. Con un design integrato multi-scanner, Scan può rilevare vari tipi di falle di sicurezza nell'applicazione e nel codice infrastrutturale in una singola scansione veloce senza la necessità di alcun server remoto. Scan è progettato appositamente per l'integrazione nei flussi di lavoro con funzionalità utili come l'arresto automatico della build, la baseline dei risultati e i commenti di riepilogo delle PR. I prodotti Scan sono open-source con licenza Apache-2.0.
-o reports/source-ruby-report.jsonVisita il sito ufficiale della documentazione di Scan per conoscere le opzioni di configurazione e integrazione CI/CD. Abbiamo anche un canale Discord dedicato per problemi e supporto.
Scan è ideale per l'uso con CI e anche come hook pre-commit per lo sviluppo locale. Scan è distribuito come immagine container shiftleft/scan e come AppImage per le distribuzioni Linux supportate.
Comando semplice one-liner qui sotto:
sh <(curl https://slscan.sh)
Il comando sopra invoca semplicemente il comando docker run sottostante.
docker run --rm -e "WORKSPACE=${PWD}" -v $PWD:/app shiftleft/scan scan --build
Su Windows, il comando cambia leggermente a seconda del terminale.
cmd
docker run --rm -e "WORKSPACE=%cd%" -e "GITHUB_TOKEN=%GITHUB_TOKEN%" -v "%cd%:/app:cached" shiftleft/scan scan
PowerShell e 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
Non dimenticare la barra (/) prima di $PWD per git-bash!
Scansiona più progetti
docker run --rm -e "WORKSPACE=${PWD}" -v $PWD:/app shiftleft/scan scan --src /app --type credscan,nodejs,python,yaml --out_dir /app/reports
Scansiona progetto Java
Per progetti basati su linguaggi Java e JVM, è importante compilare i progetti prima di invocare sast-scan nel flusso di lavoro di sviluppo e CI.
docker run --rm -e "WORKSPACE=${PWD}" -v ~/.m2:/.m2 -v <source path>:/app shiftleft/scan scan --src /app --type java
# Per progetto gradle
docker run --rm -e "WORKSPACE=${PWD}" -v ~/.gradle:/.gradle -v <source path>:/app shiftleft/scan scan --src /app --type java
Rilevamento automatico del progetto
Sentiti libero di saltare --type per abilitare il rilevamento automatico. Oppure passa valori separati da virgola se il progetto ha più tipi.
La scansione delle immagini container è ora possibile con slscan. L'approccio consigliato è esportare l'immagine container usando il comando docker o podman save prima, seguito da un'invocazione di Scan con il file .tar.
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
In alternativa, è possibile lasciare che Scan estragga l'immagine container prima dell'analisi. Tuttavia, ciò richiede l'esposizione del socket del demone docker o podman e quindi non è consigliato. Puoi provarlo se ti senti avventuroso passando i parametri sottostanti al comando docker run.
-e "DOCKER_HOST=unix:/var/run/docker.sock:" -v "/var/run/docker.sock:/var/run/docker.sock"
Esempio: Per scansionare l'immagine container 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
Esempio: Per scansionare l'immagine container 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
Stesso esempio con 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
I report vengono prodotti nella directory specificata per --out_dir. Negli esempi precedenti, è impostato su reports, che sarà una directory sotto la directory radice del codice sorgente.
Alcuni report vengono convertiti in uno standard chiamato SARIF. Tali report terminano con l'estensione .sarif. Aprire e visualizzare i file sarif richiede un visualizzatore come:
Molte immagini di Scan sono replicate su quay.io tramite la pipeline CI. Basta anteporre quay.io/ al nome dell'immagine. Di seguito sono elencati i mirror disponibili.
Scan è utilizzato da molte organizzazioni e da migliaia di progetti open-source. Alcune organizzazioni degne di nota che usano Scan sono:
Inviaci una PR per includere il nome della tua organizzazione qui. Puoi anche mostrare il tuo supporto per Scan utilizzando gli hashtag #slscan sui social media.
| Linguaggio di programmazione | Strumenti |
|---|
| 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 (solo ide) |
| 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 |