
Scan é uma ferramenta DevSecOps gratuita e de código aberto para realizar testes de segurança baseados em análise estática de suas aplicações e suas dependências. Amigável para CI e Git.
███████╗ ██████╗ █████╗ ███╗ ██╗
██╔════╝██╔════╝██╔══██╗████╗ ██║
███████╗██║ ███████║██╔██╗ ██║
╚════██║██║ ██╔══██║██║╚██╗██║
███████║╚██████╗██║ ██║██║ ╚████║
╚══════╝ ╚═════╝╚═╝ ╚═╝╚═╝ ╚═══╝
Scan é uma ferramenta de segurança gratuita e de código aberto para equipes DevOps modernas. Com um design integrado baseado em múltiplos scanners, o Scan pode detectar vários tipos de falhas de segurança em sua aplicação e código de infraestrutura em uma única varredura rápida, sem a necessidade de qualquer servidor remoto. O Scan é construído especificamente para integração de fluxo de trabalho, com recursos interessantes como quebra automática de build, linha de base de resultados e comentários de resumo de PR. Os produtos do Scan são de código aberto sob a licença Apache-2.0.
-o reports/source-ruby-report.json.Por favor, visite o site oficial de documentação do scan para saber sobre as opções de configuração e integração CI/CD. Também temos um canal no Discord dedicado para problemas e suporte.
O scan é ideal para uso com CI e também como um hook pre-commit para desenvolvimento local. O Scan é distribuído como uma imagem de contêiner shiftleft/scan, e como um AppImage para distribuições Linux suportadas.
Comando fácil de uma linha abaixo:
sh <(curl https://slscan.sh)
O comando acima simplesmente invoca o comando docker run abaixo.
docker run --rm -e "WORKSPACE=${PWD}" -v $PWD:/app shiftleft/scan scan --build
No Windows, o comando muda ligeiramente dependendo do terminal.
cmd
docker run --rm -e "WORKSPACE=%cd%" -e "GITHUB_TOKEN=%GITHUB_TOKEN%" -v "%cd%:/app:cached" shiftleft/scan scan
PowerShell and 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ão se esqueça da barra (/) antes de $PWD para o git-bash!
Escaneando múltiplos projetos
docker run --rm -e "WORKSPACE=${PWD}" -v $PWD:/app shiftleft/scan scan --src /app --type credscan,nodejs,python,yaml --out_dir /app/reports
Escaneando projeto Java
Para projetos baseados em Java e linguagens JVM, é importante compilar os projetos antes de invocar o sast-scan no fluxo de trabalho de desenvolvimento e CI.
docker run --rm -e "WORKSPACE=${PWD}" -v ~/.m2:/.m2 -v <source path>:/app shiftleft/scan scan --src /app --type java
# For gradle project
docker run --rm -e "WORKSPACE=${PWD}" -v ~/.gradle:/.gradle -v <source path>:/app shiftleft/scan scan --src /app --type java
Detecção automática de projetos
Sinta-se à vontade para pular --type para ativar a detecção automática. Ou passe valores separados por vírgula se o projeto tiver vários tipos.
Escaneando imagens de contêiner agora é possível com o slscan. A abordagem recomendada é exportar a imagem do contêiner usando o comando docker ou podman save primeiro, seguido por uma invocação do scan com o arquivo .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, é possível deixar o scan puxar a imagem do contêiner antes da análise. No entanto, isso requer expor o socket do daemon do docker ou podman e, portanto, não é recomendado. Você pode tentar se estiver se sentindo aventureiro, passando os parâmetros abaixo para o comando docker run.
-e "DOCKER_HOST=unix:/var/run/docker.sock:" -v "/var/run/docker.sock:/var/run/docker.sock"
Exemplo: Para escanear a imagem do contêiner 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
Exemplo: Para escanear a imagem do contêiner 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
Mesmo exemplo com 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
Os relatórios serão produzidos no diretório especificado para --out_dir. Nos exemplos acima, está definido como reports, que será um diretório sob o diretório raiz do código fonte.
Alguns dos relatórios serão convertidos para um padrão chamado SARIF. Tais relatórios terminarão com a extensão .sarif. Abrir e visualizar arquivos sarif requer um visualizador como:
Muitas imagens do scan são espelhadas no quay.io através do pipeline de CI. Simplesmente adicione o prefixo quay.io/ ao nome da imagem. Abaixo estão os espelhos disponíveis.
O Scan é usado por muitas organizações e em milhares de projetos de código aberto. Algumas organizações notáveis que usam o scan são:
Envie-nos um PR para incluir o nome da sua organização aqui. Você também pode mostrar seu apoio ao scan usando as hashtags #slscan nas redes sociais.
| Linguagem de Programação | Ferramentas |
|---|
| 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 |