cdxgen static
Gerador SBOM CycloneDX 1.5 multi-language com VEX support.
+ Coverage profunda em Maven/Gradle/Bazel.
− Requer toolchain do build instalada.
Ajuste o número de containers e máquinas. Marque os scanners que entram na stack. O custo total se atualiza em tempo real. Premissa: distribuição uniforme da carga, sem overhead de orquestração.
per_image = max(estáticos) + max(dinâmicos) + 10s. sequencial — um após o outro, custo = soma: per_image = Σ(estáticos) + Σ(dinâmicos) + 10s×N_din. Estático e dinâmico são sequenciais entre si em ambos (precisa docker run antes do scan dinâmico). Wall-time total: (N / M) × per_image. RAM mostrada é o pico de UM scanner — em paralelo, some as RAMs ativas para dimensionar o nó.
Cada bolha é um scanner. Eixo X: tempo médio por imagem (escala log). Eixo Y: findings totais nos 3 alvos (escala log). Tamanho: pico de RAM. Cor: modo. Canto inferior-direito = caro e pouco produtivo; canto superior-esquerdo = barato e produtivo.
Wall-time esperado para cobrir N containers em M máquinas. Escala de cor logarítmica: claro = rápido (minutos/horas), escuro = lento (meses/anos).
Cada card mostra o scanner com 3 barras (uma por alvo). Cor codifica severidade. Total à direita. Ler horizontalmente: o scanner tem comportamento estável entre alvos? Ler dentro da barra: qual a fração de criticidade real (vermelho/laranja) vs ruído (cinza/info)?
Cada aba abre o output bruto do scanner com filtros, sort, busca e drill-down por finding. Estatísticas e gráficos são específicos daquele scanner — não são comparáveis cross-tool por causa da heterogeneidade de schema.
Categorias monocobertura (apenas 1 scanner cobre) são insubstituíveis. Sobreposição alta significa redundância — manter um, descartar os demais ou usar como cross-validation.
| scanner | modo | SBOM | CVE | Secrets | Misconfig | IaC | Web/DAST | Network | Recon | Malware |
|---|---|---|---|---|---|---|---|---|---|---|
| clamav | static | · | · | · | · | · | · | · | · | ● |
| dockle | static | · | · | · | ● | · | · | · | · | · |
| gitleaks | static | · | · | ● | · | · | · | · | · | · |
| grype | static | ● | ● | · | · | · | · | · | · | · |
| semgrep | static | · | · | ● | ● | · | · | · | · | · |
| nikto | dynamic | · | · | · | ● | · | ● | · | · | · |
| nmap | dynamic | · | · | · | · | · | · | ● | ● | · |
| nuclei | dynamic | · | ● | · | ● | · | ● | · | · | · |
| openvas | dynamic | · | ● | · | · | · | · | ● | · | · |
| sqlmap | dynamic | · | · | · | · | · | ● | · | · | · |
| syft | static | ● | · | · | · | · | · | · | · | · |
| trivy | static | ● | ● | ● | ● | ● | · | · | · | · |
| trufflehog | static | · | · | ● | · | · | · | · | · | · |
| wapiti | dynamic | · | · | · | · | · | ● | · | · | · |
| whatweb | dynamic | · | · | · | · | · | · | · | ● | · |
| zap | dynamic | · | · | · | · | · | ● | · | · | · |
| arachni | dynamic | · | · | · | · | · | ● | · | · | · |
| cdxgen | static | ● | · | · | · | · | · | · | · | · |
| checkov | static | · | · | · | ● | ● | · | · | · | · |
| clair | static | · | ● | · | · | · | · | · | · | · |
| dependency-check | static | · | ● | · | · | · | · | · | · | · |
| detect-secrets | static | · | · | ● | · | · | · | · | · | · |
| govulncheck | static | · | ● | · | · | · | · | · | · | · |
| guarddog | static | · | · | · | · | · | · | · | · | · |
| hadolint | static | · | · | · | ● | · | · | · | · | · |
| httpx | dynamic | · | · | · | · | · | ● | · | ● | · |
| jaeles | dynamic | · | · | · | · | · | ● | · | · | · |
| kube-linter | static | · | · | · | ● | · | · | · | · | · |
| osv | static | ● | ● | · | · | · | · | · | · | · |
| pip-audit | static | · | ● | · | · | · | · | · | · | · |
| retire | static | · | ● | · | · | · | · | · | · | · |
| secretscanner | static | · | · | ● | · | · | · | · | · | · |
| testssl | dynamic | · | · | · | · | · | · | ● | · | · |
| whispers | static | · | · | ● | · | · | · | · | · | · |
| yara | static | · | · | · | · | · | · | · | · | ● |
Baseado nos resultados do bench (35 scanners × 3 alvos canônicos). Decisões mapeadas para o pipeline DITector — fases I (crawl) e II (grafo IDEA) definidas; estes scanners alimentam a fase III (análise dos ~25 924 high-impact).
Filesystem-only, paraleliza trivialmente. Custo médio < 4 min/imagem com toda a stack rodando concorrente.
docker run + scan + docker rm. Mais caro: ZAP/Nuclei são minutos; OpenVAS são ~40 min/alvo.
vuln,safe (não-disruptivo)Não rodar em tudo; gatilhar por heurística.
Custo > benefício neste contexto, ou wrapper precisa de retrabalho.
Illegal instruction em CPUs antigas (gpu1 e a9 caíram). Inviável sem garantir hardwareconfig initDescrição, autor, link, prós e contras. Tempo e RAM são médias dos 3 alvos.
Gerador SBOM CycloneDX 1.5 multi-language com VEX support.
+ Coverage profunda em Maven/Gradle/Bazel.
− Requer toolchain do build instalada.
Checkov: 1000+ políticas de IaC + Dockerfile + SCA misconfig.
+ Coverage maior que Trivy/Dockle.
− Heavy: 700MB image.
Scanner CVE com arquitetura layer-by-layer indexed.
+ Layer-indexing dedup natural em registries.
− clair-action standalone exige DB pré-baixado.
OWASP Dependency-Check: motor de correlação CPE-based contra NVD.
+ OWASP project. NVD + OSS Index dual-feed.
− Lento (download NVD ~30+ min).
Scanner de secrets baseline-diffable — emite JSON de estado atual e diff contra runs futuros.
+ Modelo baseline reduz noise drastically.
− Não verifica live. Plugins podem ter FP altos.
Container Linter
+ —
− —
Vuln (CVE)
+ —
− —
Hadolint: linter de Dockerfile com regras de boas-práticas e shellcheck.
+ Shellcheck nas RUNs detecta classes de bugs únicos.
− Reconstrução via history perde COPY/ADD targets.
Scanner que casa pacotes contra a base OSV.dev — agregador de advisories ecosystem-native.
+ DB ecosystem-native. Mantida pelo Google.
− Coverage menor de SO packages vs Trivy/Grype.
retire.js: detecta libs JS vulneráveis casando hash/version dos arquivos .js.
+ Detecta libs vendored fora do dependency manifest.
− Só JS client-side.
Semgrep: análise estática de código-fonte com regras de pattern + dataflow. Único SAST do stack — todo o resto inspeciona container/binário/serviço, nenhum lê código.
+ Único SAST OSS no stack. ~30 linguagens. Registry de regras enorme e curado. CWE/OWASP mapping. Rápido (não compila).
− Pattern-based: não pega tudo que análise full-compile pega (CodeQL/SonarQube). FP em regras genéricas sem tuning.
SBOM
+ —
− —
Vuln (CVE+IaC+secrets+misconfig)
+ —
− —
Secret (verificado)
+ —
− —
Antivírus
+ —
− —
Secret (regex)
+ —
− —
Scanner de CVE para Go com reachability analysis.
+ Único scanner reachability-aware no stack.
− Só Go.
Detecta supply-chain malice em pacotes npm/PyPI.
+ Único scanner do stack focado em malice (não vulnerabilidade).
− Limitado a npm e PyPI.
StackRox kube-linter: lint de YAMLs Kubernetes para best practices.
+ K8s-specific.
− Skip silently se imagem não traz YAML.
pip-audit: scanner de CVE Python autoritativo (PyPA Advisory DB).
+ Autoridade direta (PyPA).
− Só Python.
Whispers: parser de configs estruturados (YAML/JSON/Dockerfile).
+ Structured-aware: menos FP que regex em YAML/JSON.
− Sensibilidade alta gera ruído.
Engine genérico de pattern-matching para classificar binários e textos.
+ Extensível com regras próprias. Padrão da indústria malware-research.
− Rules precisam ser escritas/curadas.
Arachni: framework Ruby DAST com checks profundos para SQLi/XSS/RFI/LFI.
+ Suite completa similar a ZAP.
− Projeto archived (último release 2017).
httpx: prober web fast — fingerprint, TLS, JARM, CDN.
+ Fast. Multi-feature em um binário.
− Apenas fingerprint, não scan de vulns.
Network Scanner
+ —
− —
Web Vuln (templates)
+ —
− —
Greenbone Vulnerability Manager. 100k+ plugins NASL. Equivalente open-source ao Nessus.
+ Cobertura imensa de CVEs em serviços de rede. Padrão em compliance.
− Setup pesado: bootstrap + sync de feed leva 20-30 min. Scan completo ~39 min para um alvo.
Web App (DAST + proxy)
+ —
− —
Jaeles: scanner web template-driven, similar a Nuclei.
+ Template-driven.
− Comunidade menor que Nuclei.
SQLi especializado
+ —
− —
testssl.sh: auditoria abrangente de TLS/SSL via OpenSSL.
+ Mais detalhado que Nessus/OpenVAS para TLS.
− Targets HTTP retornam baseline 'no TLS'.
Web Vuln (legado)
+ —
− —
Web Vuln (DAST)
+ —
− —
Web Fingerprint
+ —
− —
Scanner de secrets focado em containers. ~140 regras YARA-style.
+ Container-native, sem precisar exportar FS.
− Binário precisa AVX2 — falha em CPUs antigas.
Pontos que o leitor deve saber antes de tirar conclusões. São limitações do dataset/execução, não necessariamente dos scanners.
docker exec --user gvm, port_list resolvido por nome, SKIPSYNC=false, sem GVMD_ARGS multi-palavra (bug no single.sh do immauss). Não escalável a 25 k images sem orquestração paralela séria — ~2,5 h só de OpenVAS por lote de 3.
requirements.txt detectável), kube-linter (0 — nenhum manifest K8s), guarddog (0 — nenhuma dep com indicador de typosquatting/install-script malicioso), jaeles (0 — signatures não casaram). Todos gravam um JSON-sentinela explicando. Em imagens reais do domínio deles produzem sinal.
Illegal instruction em CPUs sem (gpu1 e a9). Status registrado como error. Inviável sem garantir hardware com AVX2 — único scanner do stack com requisito de CPU.
HIGH (Trivy), High (Grype), high (Nuclei), "Medium (Medium)" (ZAP), Critical/Alarm/Log (OpenVAS), ERROR/WARNING/INFO (Semgrep). Agregação cross-tool exige normalização explícita — o relatório normaliza só para os gráficos, não para um score unificado.
reports-scanners-20260507T175432Z); os 21 novos (incluindo Semgrep) rodaram em gpu1+a9 e foram mesclados no layout reports/scans-output/<alvo>/<scanner>/. Wall-times não são estritamente comparáveis entre as duas levas (hardware/condições diferentes).
LabVulnerabilities (145 containers)145 imagens de container vulneráveis varridas pela bateria estática distribuída em duas máquinas (pipeline ChimangoScan/scanners). Dos 8 scanners agendados, 6 produziram achados — syft, trivy, grype, osv, dockle, trufflehog — e cada finding traceia para a imagem e o IP do container. Abaixo, um painel por scanner no mesmo formato da aba Por scanner: cards, donut de severidade, distribuição CVSS, severidade × container, por ecossistema, top pacotes, top CVE e a tabela.
semgrep falhou (erro de config) · clamav parcial (removido por lentidão)Distribuição dos findings consolidados por severidade (linhas) × categoria de detecção (colunas). O grosso é vulnerabilidade de pacote (CVE); sbom-component aparece só como info.
| severidade | pkg-vuln | secret | image-config | sbom-component | total |
|---|---|---|---|---|---|
| critical | 15.807 | 4 | · | · | 15.811 |
| high | 65.508 | 77 | 146 | · | 65.731 |
| medium | 187.731 | 3.129 | 146 | · | 191.006 |
| low | 62.084 | · | 533 | · | 62.617 |
| info | 40.304 | · | · | 43.553 | 83.857 |
| unknown | 56.915 | · | · | · | 56.915 |
| total | 428.349 | 3.210 | 825 | 43.553 | 475.937 |
image-config soma 825 e o painel do Dockle mostra 636? 825 é o total da categoria no corpus consolidado (inclui misconfigs reportadas por outros scanners); o painel do Dockle é o subconjunto found_by ⊇ dockle — bate com scanner_stats.dockle.merged_findings = 636.Cada aba abre os achados daquele scanner sobre os 145 containers, com cards, gráficos específicos e a tabela (amostra de até 500 linhas por scanner — o conjunto completo está em findings.jsonl e em out/<container>/<scanner>/). Estatísticas e gráficos são específicos daquele scanner — não são comparáveis cross-tool por heterogeneidade de schema.
Estado em tempo (quase) real das varreduras de produção sobre imagens do Docker Hub, executadas pelo pipeline ChimangoScan/scanners em três máquinas. Os números abaixo vêm de dit-live.json, atualizado automaticamente a cada 30 min a partir dos coordenadores de fila.