
Scan est un outil DevSecOps gratuit et Open Source pour effectuer des tests de sécurité basés sur l'analyse statique de vos applications et de leurs dépendances. Compatible CI et Git.
███████╗ ██████╗ █████╗ ███╗ ██╗
██╔════╝██╔════╝██╔══██╗████╗ ██║
███████╗██║ ███████║██╔██╗ ██║
╚════██║██║ ██╔══██║██║╚██╗██║
███████║╚██████╗██║ ██║██║ ╚████║
╚══════╝ ╚═════╝╚═╝ ╚═╝╚═╝ ╚═══╝
Scan est un outil de sécurité open-source gratuit pour les équipes DevOps modernes. Avec une conception intégrée basée sur plusieurs scanners, Scan peut détecter divers types de failles de sécurité dans votre application et votre code d'infrastructure en un seul scan rapide, sans aucun serveur distant. Scan est spécialement conçu pour l'intégration dans les workflows avec des fonctionnalités pratiques comme le coupe-circuit automatique de build, la ligne de base des résultats et les commentaires de résumé de PR. Les produits Scan sont open-source sous licence Apache-2.0.
| Langage de programmation | Outils |
|---|---|
| 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 |
-o reports/source-ruby-report.json.Veuillez visiter le site officiel de documentation pour scan afin de découvrir les options de configuration et d'intégration CI/CD. Nous avons également un canal discord dédié pour les problèmes et le support.
scan est idéal pour une utilisation avec CI et également comme hook pre-commit pour le développement local. Scan est distribué en tant qu'image conteneur shiftleft/scan, et en tant qu'AppImage pour les distributions Linux prises en charge.
Commande simple en une ligne ci-dessous :
sh <(curl https://slscan.sh)
La commande ci-dessus invoque simplement la commande docker run ci-dessous.
docker run --rm -e "WORKSPACE=${PWD}" -v $PWD:/app shiftleft/scan scan --build
Sous Windows, la commande change légèrement selon le terminal.
cmd
docker run --rm -e "WORKSPACE=%cd%" -e "GITHUB_TOKEN=%GITHUB_TOKEN%" -v "%cd%:/app:cached" shiftleft/scan scan
PowerShell et 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
N'oubliez pas la barre oblique (/) avant $PWD pour git-bash !
Scanner plusieurs projets
docker run --rm -e "WORKSPACE=${PWD}" -v $PWD:/app shiftleft/scan scan --src /app --type credscan,nodejs,python,yaml --out_dir /app/reports
Scanner un projet Java
Pour les projets basés sur les langages Java et JVM, il est important de compiler les projets avant d'invoquer sast-scan dans le workflow de développement et CI.
docker run --rm -e "WORKSPACE=${PWD}" -v ~/.m2:/.m2 -v <source path>:/app shiftleft/scan scan --src /app --type java
# Pour un projet gradle
docker run --rm -e "WORKSPACE=${PWD}" -v ~/.gradle:/.gradle -v <source path>:/app shiftleft/scan scan --src /app --type java
Détection automatique de projet
N'hésitez pas à omettre --type pour activer la détection automatique. Ou passez des valeurs séparées par des virgules si le projet a plusieurs types.
Il est maintenant possible de scanner des images conteneur avec slscan. L'approche recommandée est d'exporter l'image conteneur en utilisant la commande docker ou podman save d'abord, puis d'invoquer scan avec le fichier .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
Alternativement, il est possible de laisser scan tirer l'image conteneur avant l'analyse. Cependant, cela nécessite d'exposer le socket du démon docker ou podman et n'est donc pas recommandé. Vous pouvez essayer si vous vous sentez aventureux en passant les paramètres ci-dessous à la commande docker run.
-e "DOCKER_HOST=unix:/var/run/docker.sock:" -v "/var/run/docker.sock:/var/run/docker.sock"
Exemple : Pour scanner l'image conteneur 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
Exemple : Pour scanner l'image conteneur 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
Même exemple avec 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
Les rapports seront produits dans le répertoire spécifié pour --out_dir. Dans les exemples ci-dessus, il est défini sur reports, qui sera un répertoire sous le répertoire racine du code source.
Certains rapports seront convertis en un standard appelé SARIF. Ces rapports se termineront par l'extension .sarif. L'ouverture et la visualisation des fichiers sarif nécessitent un visualiseur tel que :
De nombreuses images scan sont mises en miroir sur quay.io via le pipeline CI. Préfixez simplement quay.io/ au nom de l'image. Vous trouverez ci-dessous les miroirs disponibles.
Scan est utilisé par de nombreuses organisations et des milliers de projets open-source. Parmi les organisations notables qui utilisent scan, on trouve :
Envoyez-nous une PR pour inclure le nom de votre organisation ici. Vous pouvez également montrer votre soutien à scan en utilisant les hashtags #slscan sur les réseaux sociaux.