Python, Go e Rust: Segurança por design?

Python, Go e Rust: Segurança por design?

Atualizado em: 2026-10

O que você vai aprender:

  • Comparar propriedades de segurança intrínsecas e extrínsecas de Python, Go e Rust
  • Mapear superfícies de ataque, vetores de supply chain e controles mitigadores para cada linguagem
  • Implementar práticas concretas, ferramentas e métricas para reduzir risco em produção

Pré-requisitos: conhecimento intermediário de programação; familiaridade com compilação, CI/CD e conceitos de segurança como memoria, privilégio, e supply chain.

Nível: intermediário | avançado

Sumário:

Em 2026 tornou-se clichê perguntar qual linguagem é “segura por design”. A resposta útil não é binária; é uma matriz de propriedades técnicas, ecossistema, práticas de build e perfil de risco do software. Este artigo destrincha Python, Go e Rust com evidência técnica, controles aplicáveis e playbooks operacionais para quem projeta sistemas, testa aplicações ou monta um SOC orientado a detecção de ameaças em código.

Contexto Atual e Relevância Estratégica

O debate sobre segurança por design cresceu porque memória e integridade de execução continuam sendo fontes principais de exploração em 2025 e 2026: software nativo representa um vetor persistente para ransomwares, exploits em cadeia de suprimentos e compromissos de firmware. Linguagens modernas tentam mitigar classes inteiras de erro em nível de linguagem ou runtime; entender quais riscos cada uma remove e quais introduz é decisão estratégica para arquitetura de produto e postura de defesa.

Ponto-chave

Segurança por design não é apenas características de linguagem; inclui toolchain, políticas de dependência, práticas CI/CD e testes. A linguagem é uma variável entre muitas.

Em 2025-2026 observamos dois movimentos críticos: 1) migração continuada de bibliotecas críticas para Rust em projetos que exigem memória segura; 2) aumento de incidentes causados por supply chain em ecossistemas dinâmicos (pip, npm) onde código interpretado domina. Essas tendências moldam decisões de adoção: Rust reduz classes de vulnerabilidade estáticas, Python facilita iteração rápida mas exige controles de runtime; Go equilibra produtividade com binários autocontidos e suporte de GC.

Decisão balanceada entre segurança, prazo e custo operacional.

Decisões de tecnologia impactam diretamente KPIs de segurança: tempo médio de detecção (MTTD) de regressões de memória, número de CVEs por versão, cobertura de fuzzing e índice de repetibilidade de builds. Nos próximos parágrafos usaremos métricas comparativas para guiar trade-offs.

Como o panorama regulatório afeta a escolha

Regulamentações recentes de 2025-2026 passaram a exigir SBOMs e controles de supply chain para software que opera em setores críticos. Para provedores de serviços e fabricantes de OT/ICS, escolher uma linguagem que facilite builds reproduzíveis e integração com SLSA reduz overhead de conformidade.

Alerta

Aplicações críticas que dependem fortemente de extensões C em Python ou bindings FFI em Go/Rust elevam risco a níveis próximos de software nativo tradicional. A mera escolha de linguagem não elimina a necessidade de revisão de código nativo e teste de memória.

Fundamentos Técnicos do Tema

Segurança por design pode ser decomposta: 1) segurança de memória (prevenção de buffer overflow, use-after-free, dangling pointers); 2) propriedade e isolamento de recursos (threads, heap); 3) modelo de execução (interpreted vs compiled, JIT vs AOT); 4) sistema de tipos (static vs dynamic, type safety); 5) toolchain (reprodutibilidade, assinaturas, SBOM); 6) ecossistema (package managers, vetting, frequência de updates).

PropriedadePythonGoRust
Memory safetyRuntime GC, mas dependente de extensões CGC, menor exposição a UAF, mas ponteiros e unsafe permitidosOwnership e borrow checker previnem UAF e data races em compile-time
Modelos de erroExceptions, dinamicamente tipadoErro explícito com multiple return, panic opcionalResult/Option sem exceptions, pattern matching explícito
ToolchainInterpreted; builds não reproduzíveis por padrãoCompilação AOT; binários autocontidos favorecem reprodutibilidadeCompilação AOT; foco em reproducible builds e cargo.lock
Supply chainpip centralizado; alta velocidade de publishinggo modules descentralizados; módulos públicos e proxiescrates.io com políticas de triagem; cargo audit ecosystem
FuzzingHypothesis, Atherisgo-fuzz, native wrapperscargo-fuzz, libFuzzer integration

Cada propriedade gera controles técnicos específicos. Por exemplo, memory safety em Rust reduz necessidade de heap-sanitizers em produção; já em Python recomendamos SAST focado em input validation e static analysis para dependências. A tabela acima resume trade-offs iniciais que usaremos para desenhar pipelines e playbooks.

Detalhes sobre segurança de memória

Memory safety é a métrica que mais impacta risco crítico. Vazamentos de memórias podem levar a escalonamento de privilégios e corrupção de heap que permitem execução remota. Rust resolve isso com ownership sem GC; Go usa um GC que mitiga muitas classes de vazamento, mas permite unsafe e escapes que produz pointers passados ao C. Python delega memória para runtime e CPython controla referência, mas extensões em C/C++ (numpy, pandas, etc.) reintroduzem risco nativo.

Ferramentas de instrumentação: AddressSanitizer (ASAN) é efetivo para C/C++ e FFI, pode ser usado com Rust e Go (com configurações) e com módulos Python nativos. Fuzzers integrados (cargo-fuzz, go-fuzz, Atheris) aumentam chance de descoberta de falhas de memória e lógicas, sendo obrigatórios para bibliotecas que processam dados externos (imagens, protocolos).

Modelos de tipo e verificação

Tipagem estática ajuda a detectar classes de erro em build; tipagem dinâmica facilita prototipação mas exige testes em runtime. Go tem tipagem estática, mas sem genericidade até Go 1.18 (já presente) o que impactou padrões de abstração; Rust tem sistema de tipos avançado que força contratos. Python 3.11+ e ferramentas como mypy/pyright permitem tipagem gradual, mas não substituem garantias de compile-time.

Dica

Use tipagem gradual (mypy, pyright) e linters como ruff em Python para reduzir regressões lógicas. Combine com fuzzing de endpoints críticos.

Arquitetura, Fluxos e Superfície de Ataque

Arquitetura do aplicativo e a distribuição de componentes (microservices, FaaS, edge, dispositivos embarcados) influenciam a escolha da linguagem. Binários compilados (Go/Rust) facilitam implantação em ambientes restritos e reduzem ataque via manipulação de runtime. Python, por ser interpretado, exige proteção adicional em imagens de container, virtualenvs e políticas de execução.

Superfície de ataque se divide em três camadas: código fonte, dependências de terceiros, runtime/platform. Cada linguagem tem perfis distintos por camada. Abaixo um fluxo ASCII simplificado que será referência para playbooks.

Comparativo de superfície de ataque por camada

CamadaPythonGoRust
FonteAlta mudança, scripts, dynamic importsFonte estática, simples, facilidade de cross-compilationFonte segura em memória, macros complexas podem introduzir erros
Dependênciaspip: grandes volumes, velocidade altago proxy: modules somados, cachingcrates.io: menor volume, maior revisão comunitária
BuildAmbientes variados, necessidade de empacotamentoCompilação direta para binário; menos dependência de runtimeBinário com strong typing; foco em reproducible builds
RuntimeInterprete exposto; exec de código dinâmico possívelBinário autocontido; menor superfície de intérpreteBinário autocontido; zero-cost abstractions reduzem overhead

Trade-offs: Python acelera entrega, mas expõe operações dinâmicas que podem ser exploradas por deserialização inseguros e injeção. Go e Rust diminuem vetores de runtime e vantagens para dispositivos embarcados e ferramentas de infra, porém introduzem exigência por expertise e maior tempo de desenvolvimento em Rust.

Fluxo de ataque via supply chain em ecossistemas

As cadeias de suprimento modernas exploram automatic updates e dependências transitivas. Exemplos recentes de 2025 mostram que pacotes maliciosos podem permanecer semanas em registries públicos antes de serem detectados, impactando milhares de builds automatizados. A mitigação técnica inclui proxies de pacotes, policies de vetting e integração com SLSA/attestation no CI.

Alerta

Dependências compiladas em C utilizadas por Python (scipy, pillow) representam ponto único de falha: um exploit em extensão nativa pode comprometer todo o processo Python, independente da segurança do código Python.

Cenários Reais e Estudos de Caso

Estudos de caso mostram como escolha de linguagem afetou impacto de incidentes. Apresento três cenários reais representativos – um para cada linguagem – baseados em incidentes públicos e padrões observados por equipes de resposta em 2025-2026.

Caso A: Biblioteca nativa em Python com exploit UAF

Contexto: serviço de processamento de imagens em Python que usa extensão C++ para performance. Vulnerabilidade: use-after-free em código nativo que permitia corrupção de heap e execução arbitrária quando recebia imagens especialmente crafted. Resultado: RCE em container do serviço; incidente exigiu rollback e reescrita parcial do componente nativo.

Decisão técnica: mitigação imediata com WAF bloqueando uploads de formatos suspeitos, instrumentação com ASAN em pipeline de CI e substituição gradual por implementações seguras (Rust ou uso de bibliotecas com bindings seguros).

Caso B: Service written in Go with dependency typosquatting

Contexto: microservice escrito em Go que puxava um módulo de terceiros. Um pacote malicioso com nome similar foi publicado e, por falha em proxy de módulos, inserido em builds automatizados. Vulnerabilidade: execução de código na build que alterava artefatos. Resultado: binário comprometido entregue a produção.

Ação: introdução de proxy de dependências, assinatura de artefatos e verificação SLSA; adição de scanners que checam repentina popularidade de pacotes e divergência de git provenance.

Caso C: Rust em firmware com bug de abstração unsafe

Contexto: firmware de dispositivo embarcado migrado para Rust para eliminar bugs de memória. Erro: uso incorreto de bloco unsafe que permitiu data race em acesso a buffer compartilhado; resultado foi corrupção esporádica levando a falha de disponibilidade em campo.

Lição: mesmo com Rust, unsafe blocks são escape hatches que exigem revisão rigorosa e testes; fuzzing e model checking foram usados para detectar condições de corrida.

ElementoAção imediataControle preventivo
Exploit UAF em extension C (Python)Isolamento do serviço, rotas de rollbackASAN no CI, migração para crates seguros, validação de inputs
Typosquatting (Go)Rebuild a partir de fontes verificadosProxy de módulos, assinatura, SLSA attestation
Unsafe misuse (Rust)Desativar funcionalidades críticasCode review obrigatório para unsafe, fuzzing, MIRI em testes

Implementação Prática Step-by-Step

Implementar segurança por design requer pipeline e controles. Abaixo um passo a passo genérico aplicável a qualquer escolha de linguagem, seguido por ajustes específicos para Python, Go e Rust.

Figura: pipeline de implementação controlada
  1. Defina requisitos de segurança e threat model para o componente (entradas, usuários, privilégio, disponibilidade).
  2. Escolha linguagem considerando prazo, expertise e requisitos de memória/tempo real.
  3. Configure repositório com CI que registra provenance e gera SBOM em cada build.
  4. Integre SAST, dependency scanning e license scan ao pipeline.
  5. Adicione fuzzing direcionado em módulos que processam dados externos.
  6. Implemente assinaturas de artefatos e políticas de aprovação manual para dependências novas.
  7. Execute testes de integração com ASAN/UBSAN para extensões nativas ou binários compilados.
  8. Implemente runtime controls: sandboxing, capability dropping e runtime policies (seccomp, AppArmor).
  9. Adote telemetria de segurança: logs, metrics, e alertas para indicadores de anomalia.
  10. Documente rollback e plano de incidente; treine times com playbooks de resposta.

Pipeline exemplo para projetos em Python

Decisão: para empresas que priorizam velocidade, o pipeline deve mitigar riscos dinâmicos e dependências nativas.

Validação: verifique que pip-audit reporta zero findings com severidade alta; SBOM contém hash e versão exata; artifact assinado para deploy.

Pipeline exemplo para projetos em Go

Métrica: Cobertura de race detector deve ser definida >80% para módulos concorrentes; fuzzing must achieve time-based coverage mínimo (p.ex. 24h com corpus inicial e incremento de coverage).

Pipeline exemplo para projetos em Rust

Comando de verificação de unsafe blocks:

Dica

Automatize a revisão de unsafe blocks com bot que bloqueia merge até haver revisão humana e teste específico. Integre com MIRI e sanitizers em CI para detectar UB.

Checklist técnico antes do deploy

  • SBOM gerada e vinculada ao artefato
  • Artefato assinado e verificado com cosign
  • Dependency scanning sem vulnerabilidades críticas
  • Fuzzing executado por pelo menos 24h em pontos de entrada
  • Policies de runtime e sandboxing configuradas

Hardening, Controles e Melhores Práticas

Hardening deve ser parcelado em fases: design, build, pre-deploy, runtime e pós-deploy. A tabela abaixo apresenta controles por fase aplicáveis a Python, Go, Rust.

FaseControles aplicáveisFerramentas exemplares
DesignThreat modeling, boundary definition, input validation contractsOWASP Threat Dragon, Microsoft Threat Modeling Tool
BuildSBOM, assinaturas, reproducible builds, SLSA attestationSLSA, syft, cosign
Pre-deploySAST, dependency scanning, license checkssemgrep, pip-audit, gosec, cargo-audit
RuntimeLeast privilege, seccomp, resource limits, ASLRAppArmor, SELinux, gVisor, Firecracker
Post-deployMonitoring, EDR integration, anomaly detectionPrometheus, Grafana, Falco, Elastic

Hardening específico – Python

Riscos-chaves: deserialização inseguros, exec dinâmico, extensões C. Controles concretos:

  • Evitar eval/exec; bloquear importlib.import_module em produção ou auditar dinamicamente
  • Rodar extensões nativas com sanitizers ativados em CI: ASAN/UBSAN
  • Usar virtual environments imutáveis em produção e imagens de container mínimas
  • Aplicar pip-audit e SBOM com contrôle de políticas
  • Configurar runtime sandboxing (seccomp) e capability drop em containers

Hardening específico – Go

Riscos-chaves: typosquatting, misuse of cgo, race conditions. Controles:

  • Habilitar go vet, staticcheck e test -race regularmente
  • Proteger proxy de módulos e usar checksums (go.sum verification)
  • Evitar uso de cgo; quando necessário, instrumentar com ASAN e revisão intensiva
  • Build flags para reduzir símbolos (-s -w) e habilitar mitigations
  • Runtime: limitar syscalls via seccomp e reduzir privileges

Hardening específico – Rust

Riscos-chaves: misuse of unsafe, macros que geram código inseguro, dependências com codegen. Controles:

  • Bloquear merges que introduzam unsafe sem revisão e testes
  • Usar cargo-audit e locks rigorosos (cargo.lock)
  • Executar cargo-fuzz e MIRI nos testes
  • Preferir crates com histórico e triagem comunitária
  • Configurar reproducible builds e assinatura de artefatos
Sequência de ações para reduzir superfície em runtime.

Playbooks Operacionais para Blue Team e Red Team

Playbooks traduzem controles em passos acionáveis para resposta a incidente e testes adversariais. Abaixo há playbooks compactos que podem ser encaixados em um SOAR ou runbook do SOC.

Figura: ciclo detectar-conter-recuperar

Playbook Blue Team – Resposta a sinais de corrupção de memória em produção

  1. Detectar: alerta de monitor com crash spike ou OOMs incrementais.
  2. Isolar: colocar serviço em modo read-only ou redirecionar tráfego para standby.
  3. Coletar: obter core dumps, logs, traces e SBOM do artefato.
  4. Reproduzir: rodar build instrumentado com ASAN/UBSAN localmente com corpus de inputs que causaram falha.
  5. Hunt: verificar commits recentes com mudanças em FFI, unsafe blocks ou novas dependências nativas.
  6. Mitigar: aplicar hotfix para limitar inputs ou bloquear endpoint vulnerável.
  7. Remediar: corrigir no branch seguro, executar fuzzing extensivo, lançar novo artefato assinado.
  8. Comunicar: atualizar stakeholders e postar IOCs no TIP.

Playbook Red Team – Exploração de cadeia de suprimentos em Go

  1. Recon: mapear dependências públicas do alvo via SBOM e go.sum.
  2. Identificar: procurar pacotes com baixa manutenção e sem provenance claro.
  3. Explorar: construir um pacote similar (typosquat) e observar se builds automáticos puxam do registry público.
  4. Payload: preparar código que altera artefatos apenas em builds CI para evitar detecção local.
  5. Escalamento: aproveitar credentials vazadas em CI (se encontrado) para assinar artefatos ou comprometer pipelines.
  6. Persistência: inserir backdoor que só ativa sob condições de runtime específicas.
  7. Cleanup: garantir rastros mínimos e avaliar detecção por SLSA attestation absence.
Ponto-chave

Playbooks devem ser testados periodicamente e incorporar novas técnicas de fuzzing e verificação de provenance para manter eficácia contra evolução de ataques.

Métricas, KPIs e Auditoria Técnica

Medição transforma intuição em gestão de risco. Listei KPIs práticos, mensuráveis e aplicáveis a times de desenvolvimento e SOC.

Figura: loop de métricas e evidência
KPIDefiniçãoAlvo sugerido
MTTD (Mean Time To Detect)Tempo médio entre implantação de build vulnerável e detecção< 72 horas
Tempo de build reproduzívelPercentual de builds que geram byte-identical artifacts> 95%
Coverage de fuzzingPercentual de linhas/branches exercitados por fuzzers em 24h> 60% em módulos críticos
CVE densityNúmero de CVEs por 100kLOC em dependências diretasDecrescente ano a ano, meta: < 1
Percentual de artefatos assinadosProporção de releases com assinatura verificável100%
Percentual de merges com SAST verdePull requests aprovados com zero findings críticos> 99%

Medições específicas por linguagem:

  • Python: proporção de pacotes com wheels com hashes verificados e SBOM em releases.
  • Go: percentagem de builds que usam módulo proxy_VERIFIED e go.sum alinhado com proxy cache.
  • Rust: número de occurrences de unsafe por 1000 linhas e tempo médio para revisão de unsafe.

Métricas de segurança de supply chain

Auditoria contínua deve incluir verificação de provenance: se o build pode ser reproduzido a partir do repositório e compilador declarado. Ferramentas como SLSA Levels e in-toto attestations permitem mensuração de conformidade; objetivo operacional é alcançar SLSA Level 2 ou superior para código crítico.

Erros Comuns, Armadilhas e Correções

Abaixo uma lista de armadilhas frequentes que vejo em equipes de produto e como consertá-las com ações concretas.

Figura: anti-padrão e correção
ErroImpactoCorreção imediata
Confiar somente em lintingFalsos positivos e falsas seguranças; bugs lógicos permanecemAdicionar fuzzing e testes end-to-end baseados em propriedades
Dependências sem revisãoTyposquatting, packages maliciososProxies privados, policy enforcement, require provenance
Uso indiscriminado de unsafe/cgoIntroduz vulnerabilidades de memóriaRestrição via policy; exigir justificativa e testes ASAN/MIRI
Builds não reprodutíveisDificulta investigação e incident responseFixar toolchain versions, usar deterministic flags, gerar SBOM
Logs/telemetria insuficientesIncrease MTTDInstrumentar com traces, indicadores de erro, alertas threshold
Dica

Automatize políticas com gates em CI, não confie em checagens apenas manuais. Gate: não permite merge sem SBOM, assinatura e SAST dentro do nível definido.

FAQ Técnico para Busca Orgânica

Qual linguagem reduz mais vulnerabilidades de memória?

Rust reduz grande parte de vulnerabilidades de memória por design: o ownership system e borrow checker evitam UAF, buffer overflows e data races em muitas situações. Porém, unsafe blocks, chamadas FFI e uso incorreto de macros podem reintroduzir riscos; a mitigação é revisão estrita de unsafe e fuzzing contínuo.

Python é inseguro para produção?

Não. Python é seguro para muitas aplicações se acompanhado de controles: ambientes imutáveis, SBOM, scanning de dependências, testes unitários e fuzzing para bibliotecas que processam dados externos. A maior fonte de risco em Python vem de dependências nativas e exec dinâmico.

Go é adequado para serviços expostos na internet?

Sim. Go produz binários autocontidos, tem ferramentas para detectar race conditions e uma comunidade madura de ferramentas de lint e auditing. Risco principal: cgo e dependências maliciosas; adotando proxy de módulos e verificações, Go é robusto para serviços públicos.

Como integrar fuzzing em CI sem atrasar entrega?

Execute fuzzers em paralelo e baseado em tempo: por exemplo, run curto em cada PR (1-2h) e fuzzing mais extensivo em pipelines noturnos com corpus incremental. Salve corpus e use regression tests derivados de inputs descobertos.

O que é SBOM e por que importa?

SBOM (Software Bill of Materials) descreve componentes do software e suas versões. É crucial para resposta a vulnerabilidades, auditoria e conformidade regulatória. Gere SBOM em cada build e atrele a artefato assinado.

Como tratar unsafe em Rust?

Proibir merges que introduzam unsafe sem revisão humana e testes MIRI e fuzz. Exigir justificativa técnica no PR e checklist de testes específicos que demonstrem segurança do bloco unsafe.

Quais ferramentas priorizar para cada linguagem?

Python: mypy/pyright, ruff, pip-audit, atheris. Go: go vet, staticcheck, go-fuzz, govulncheck. Rust: clippy, cargo-audit, cargo-fuzz, MIRI.

Como medir eficácia do hardening?

Use KPIs como MTTD, percentagem de builds assinados, coverage de fuzzing e densidade de CVEs por 100kLOC. Audite regularmente e defina metas anuais para redução de métricas negativas.

Rust elimina a necessidade de testes de segurança?

Não. Rust reduz risco de classes de bugs, mas não elimina bugs lógicos, falhas de autenticação, problemas de config ou risco em unsafe/FFI. Testes continuam essenciais.

Melhores práticas para dependências em Python?

Use hashes em requirements, lockfiles, proxies privados, pip-audit e SBOM; monitore atualizações de segurança e automatize patches em pipelines.

Como garantir provenance em builds Go?

Use go proxy verificado, mantenha go.sum sob controle, gere SLSA attestations no CI e assine artefatos com cosign para validar origem e integridade.

Que métricas de fuzzing são relevantes?

Coverage (lines/branches), número de hangs/crashes detectados, corpus growth e tempo para reproduzir falhas. Use essas métricas para priorizar remediação.

Considerações Finais

Escolher entre Python, Go e Rust exige avaliar risco, prazo, expertise e requisitos de produto. Rust oferece as garantias de memória mais fortes por design, mas demanda investimento em time e toolchain. Go oferece uma combinação prática para serviços e distribuição de binários, com trade-offs em relação a low-level control. Python prioriza velocidade de desenvolvimento e ecossistema, mas transfere parte do risco para controles de runtime, dependências e extensões nativas.

Segurança por design é mais do que a linguagem: é políticas, automação e cultura que garantam revisão, prova de origem e testes. Independentemente da escolha, implemente SBOMs, assinaturas, fuzzing, SAST e gating em CI; trate unsafe e extensões nativas como ativos críticos que exigem revisão ampliada.

Próximo passo: Baixe o checklist prático de 20 itens para implementar pipeline seguro em Python/Go/Rust – use-o como gate em seu CI e meça KPIs nos próximos 90 dias.

Kit de lab

Kit de lab: Repositório mínimo para testar pipelines: inclui Dockerfile, GitHub Actions, exemplos de SAST, SBOM generation com syft, integração com cosign e um fuzz target em cada linguagem. Estrutura:

  1. Clone template repo
  2. Executar CI local com act ou runner
  3. Gerar SBOM com syft
  4. Executar pip-audit/go-vuln/cargo-audit
  5. Rodar fuzzers por 24h e coletar corpus
  6. Assinar artefato com cosign
  7. Testar reprodução do build
  8. Simular incidente: introduzir vulnerabilidade e avaliar detecção

Checklist de auditoria

Checklist de auditoria: Tabela exportável para auditorias internas (CSV/Excel).

ItemDescriçãoStatus
SBOMGerado em cada build e atrelado ao releaseOK / NOK
AssinaturaArtefatos assinados e verificados no deployOK / NOK
Dependency scanZero findings críticos em pipelineOK / NOK
FuzzingExecutado por >= 24h em módulos críticosOK / NOK
MétricasKPIs atualizados e revisados trimestralmenteOK / NOK

Recursos Visuais Sugeridos

Materiais públicos com diagramas, arquiteturas e visuais oficiais para apoiar o estudo do tema.

Referências

  • Rust Programming Language – rust-lang.org, Rust Foundation, 2026, https://www.rust-lang.org/
  • Go Programming Language Security – The Go Team, 2025, https://go.dev/security/
  • Python Security – Python Software Foundation, 2025, https://www.python.org/dev/security/
  • SLSA – Supply-chain Levels for Software Artifacts, OpenSSF, 2025, https://slsa.dev/
  • OSS-Fuzz – Continuous Fuzzing for Open Source, Google, 2025, https://oss-fuzz.github.io/
  • OWASP Top Ten 2023 – OWASP Foundation, 2023, https://owasp.org/www-project-top-ten/
  • syft – Generate SBOMs, Anchore, 2025, https://github.com/anchore/syft
  • cosign – Container image signing, sigstore, 2025, https://github.com/sigstore/cosign
  • cargo-audit – Rust dependency auditing, RUSTSEC, 2025, https://github.com/RustSec/cargo-audit
  • go vuln check – govulncheck, Go Project, 2025, https://pkg.go.dev/golang.org/x/vuln/cmd/govulncheck
  • Atheris – Python fuzzing (Google), 2024, https://github.com/google/atheris
  • AddressSanitizer – ASAN documentation, LLVM, 2024, https://clang.llvm.org/docs/AddressSanitizer.html
  • Mitre ATT&CK – MITRE, 2025, https://attack.mitre.org/
  • NIST SP 800-53 Rev. 5 – Security and Privacy Controls, NIST, 2024, https://csrc.nist.gov/publications/detail/sp/800-53/rev-5
  • GitHub Dependabot and security advisories – GitHub, 2025, https://github.com/advisories

Você pode gostar...

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *