
Scan es una herramienta DevSecOps gratuita y de código abierto para realizar pruebas de seguridad basadas en análisis estático de sus aplicaciones y sus dependencias. Amigable con CI y Git.
███████╗ ██████╗ █████╗ ███╗ ██╗
██╔════╝██╔════╝██╔══██╗████╗ ██║
███████╗██║ ███████║██╔██╗ ██║
╚════██║██║ ██╔══██║██║╚██╗██║
███████║╚██████╗██║ ██║██║ ╚████║
╚══════╝ ╚═════╝╚═╝ ╚═╝╚═╝ ╚═══╝
Scan es una herramienta de seguridad gratuita y de código abierto para equipos DevOps modernos. Con un diseño integrado basado en múltiples escáneres, Scan puede detectar varios tipos de fallos de seguridad en su aplicación y código de infraestructura en un solo escaneo rápido sin necesidad de ningún servidor remoto. Scan está diseñado específicamente para la integración en flujos de trabajo con funciones ingeniosas como el interruptor de compilación automática, la línea base de resultados y los comentarios de resumen de PR. Los productos Scan son de código abierto bajo la licencia Apache-2.0.
| Lenguaje de programación | Herramientas |
|---|---|
| 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 |
| imagen de contenedor | dep-scan |
-o reports/source-ruby-report.json.Visite el sitio de documentación oficial de Scan para conocer las opciones de configuración e integración con CI/CD. También tenemos un canal de Discord dedicado para problemas y soporte.
Scan es ideal para usar con CI y también como hook de pre-commit para el desarrollo local. Scan se distribuye como imagen de contenedor shiftleft/scan y como AppImage para distribuciones Linux compatibles.
Comando fácil de una línea a continuación:
sh <(curl https://slscan.sh)
El comando anterior simplemente invoca el comando docker run que se muestra a continuación.
docker run --rm -e "WORKSPACE=${PWD}" -v $PWD:/app shiftleft/scan scan --build
En Windows, el comando cambia ligeramente según la terminal.
cmd
docker run --rm -e "WORKSPACE=%cd%" -e "GITHUB_TOKEN=%GITHUB_TOKEN%" -v "%cd%:/app:cached" shiftleft/scan scan
PowerShell y 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
¡No olvide la barra (/) antes de $PWD para git-bash!
Escaneo de múltiples proyectos
docker run --rm -e "WORKSPACE=${PWD}" -v $PWD:/app shiftleft/scan scan --src /app --type credscan,nodejs,python,yaml --out_dir /app/reports
Escaneo de proyectos Java
Para proyectos basados en Java y JVM, es importante compilar los proyectos antes de invocar sast-scan en el flujo de trabajo de desarrollo y CI.
docker run --rm -e "WORKSPACE=${PWD}" -v ~/.m2:/.m2 -v <ruta del código fuente>:/app shiftleft/scan scan --src /app --type java
# Para proyecto gradle
docker run --rm -e "WORKSPACE=${PWD}" -v ~/.gradle:/.gradle -v <ruta del código fuente>:/app shiftleft/scan scan --src /app --type java
Detección automática de proyectos
Siéntase libre de omitir --type para habilitar la detección automática. O pase valores separados por comas si el proyecto tiene varios tipos.
Ahora es posible escanear imágenes de contenedor con slscan. El enfoque recomendado es exportar primero la imagen de contenedor usando el comando docker o podman save, seguido de una invocación de scan con el archivo .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
Alternativamente, es posible permitir que scan descargue la imagen de contenedor antes del análisis. Sin embargo, esto requiere exponer el socket del daemon de docker o podman y, por lo tanto, no se recomienda. Puede probarlo si se siente aventurero pasando los siguientes parámetros al comando docker run.
-e "DOCKER_HOST=unix:/var/run/docker.sock:" -v "/var/run/docker.sock:/var/run/docker.sock"
Ejemplo: Para escanear la imagen de contenedor 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
Ejemplo: Para escanear la imagen de contenedor 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
Mismo ejemplo 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
Los informes se generarán en el directorio especificado para --out_dir. En los ejemplos anteriores, se establece como reports, que será un directorio bajo el directorio raíz del código fuente.
Algunos de los informes se convertirán a un estándar llamado SARIF. Dichos informes terminarán con la extensión .sarif. Abrir y ver archivos sarif requiere un visor como:
Muchas imágenes de scan están reflejadas en quay.io a través del pipeline de CI. Simplemente añada quay.io/ como prefijo al nombre de la imagen. A continuación se muestran los espejos disponibles.
Scan es utilizado por muchas organizaciones y por miles de proyectos de código abierto. Algunas organizaciones notables que usan Scan son:
Envíenos un PR para incluir el nombre de su organización aquí. También puede mostrar su apoyo a Scan usando los hashtags #slscan en las redes sociales.