🔒 Secure Programming and Coding

Disciplina: Secure Programming and Coding | Professor: Fernando Leonid | Faculdade: UniFECAF

📚 O que é Segurança no Desenvolvimento de Software?

Esta página tem objetivo educacional, servindo como material de apoio para a disciplina de Secure Programming and Coding.


A segurança no desenvolvimento de software é uma abordagem integrada que busca identificar e mitigar vulnerabilidades desde as fases iniciais do ciclo de vida de desenvolvimento. Existem três metodologias principais que complementam essa visão:

🛡️ SDL
Foco:
Processo abrangente e estruturado
Origem:
Microsoft
Aplicação:
Em todo o ciclo de vida
⚙️ SSDLC
Foco:
Ciclo de vida seguro
Origem:
Conceito genérico
Aplicação:
Integrado às práticas SDLC
🚀 DevSecOps
Foco:
Automação e integração contínua
Origem:
Evolução DevOps
Aplicação:
Em pipelines CI/CD
💡 Importante: Estas não são metodologias excludentes! Muitas organizações as usam em conjunto, cada uma contribuindo aspectos únicos da segurança no desenvolvimento.
🛡️ SDL - Security Development Lifecycle

SDL é uma metodologia estruturada criada pela Microsoft que integra práticas de segurança em cada fase do desenvolvimento. É como um "checklist de segurança" que acompanha todo o projeto.


Objetivo: Reduzir vulnerabilidades e riscos de segurança desde o design até a manutenção.

Fases do SDL
1
Treinamento
Equipe aprende sobre segurança de software
Cursos sobre vulnerabilidades comuns
Certificações de segurança
Conscientização sobre OWASP Top 10
2
Requisitos
Definir requisitos de segurança desde o início
Identificar dados sensíveis
Definir padrões de segurança
Documentar ameaças potenciais
3
Design
Incorporar segurança no design da solução
Análise de ameaças (Threat Modeling)
Design seguro da arquitetura
Revisar componentes de segurança
4
Implementação
Codificar seguindo padrões de segurança
Usar bibliotecas seguras aprovadas
Code review com foco em segurança
Static code analysis (análise estática)
5
Verificação
Testar para encontrar vulnerabilidades
Testes dinâmicos (Dynamic Testing)
Testes de penetração
Fuzzing e análise de segurança
6
Lançamento
Preparar para colocar em produção de forma segura
Plano de resposta a incidentes
Checklist de segurança final
Comunicação sobre riscos residuais
7
Suporte
Manter segurança após o lançamento
Monitorar vulnerabilidades
Aplicar patches e atualizações
Responder a novos riscos descobertos
Características Principais
Característica Descrição
Estruturado Processo bem definido e documentado
Abrangente Cobre todas as fases do SDLC
Proativo Identifica riscos antes da codificação
Metodologia Processo formal com papéis definidos
Documentação Requer documentação detalhada
✅ Quando usar SDL: Projetos grandes, aplicações críticas (financeiras, médicas), empresas com foco em qualidade e conformidade regulatória.
⚙️ SSDLC - Secure Software Development Lifecycle

SSDLC é um termo genérico que descreve qualquer ciclo de vida de desenvolvimento que integra segurança. É mais uma abordagem conceitual do que uma metodologia específica como SDL.


Objetivo: Incorporar segurança como parte integral do processo de desenvolvimento, independentemente de qual metodologia (Waterfall, Agile, etc.) seja utilizada.

Princípios Fundamentais do SSDLC
🎯 Segurança desde o Início
Segurança não é um "plus" adicionado no final, mas parte integral do planejamento inicial.
🔍 Análise de Riscos Contínua
Identificar e avaliar riscos em todas as fases, não apenas uma vez.
👥 Responsabilidade Compartilhada
Segurança é responsabilidade de todos: desenvolvedores, arquitetos, testadores, operações.
📚 Boas Práticas Estabelecidas
Usar padrões reconhecidos como OWASP, CWE, e guidelines da indústria.
✔️ Verificação e Validação
Testar regularmente para encontrar e corrigir vulnerabilidades.
📊 Métricas de Segurança
Medir e acompanhar a postura de segurança ao longo do tempo.
SSDLC em Diferentes Metodologias

O SSDLC é flexível e pode ser adaptado a diferentes abordagens:

W
Waterfall + SSDLC
Fase formal de segurança em cada etapa sequencial
Design review de segurança antes de implementação
Testes de segurança em fase dedicada
Documentação completa de riscos
A
Agile + SSDLC
Segurança integrada em cada sprint
Security stories em cada sprint
Code review com foco em segurança
Testes de segurança contínuos
D
DevOps + SSDLC
Segurança automatizada no pipeline
Verificações de segurança automatizadas
Testes de segurança contínuos
Compliance checking automático
✅ Quando usar SSDLC: Como conceito guia em qualquer tipo de projeto, independente da metodologia. É um princípio, não uma implementação específica.
🚀 DevSecOps - Desenvolvimento Seguro com Operações

DevSecOps é a evolução do DevOps que coloca segurança como responsabilidade compartilhada de todos. Combina Development (desenvolvimento), Security (segurança) e Operations (operações).


Objetivo: Automatizar verificações de segurança no pipeline CI/CD para detectar e corrigir problemas rapidamente, sem sacrificar a velocidade.

O Pipeline DevSecOps
1
Plan + Segurança
Planejar com considerações de segurança
Identificar requisitos de segurança
Threat modeling rápido
Compliance requirements
2
Code + Segurança
Código seguro desde a escrita
Pre-commit hooks (verificações locais)
IDE com plugins de segurança
Pair programming com foco em segurança
3
Build (Compilação) + Segurança
Análise automática durante a build
SAST (Static Application Security Testing)
Verificação de dependências (SCA)
Container scanning
4
Test (Testes) + Segurança
Testes de segurança automatizados
DAST (Dynamic Application Security Testing)
Testes de penetração automatizados
Testes de conformidade
5
Deploy + Segurança
Deploy seguro e auditado
Approval gates de segurança
Infraestrutura como código segura
Secrets management
6
Operate + Segurança
Monitoramento contínuo em produção
SIEM (Security Information & Event Management)
Detecção de anomalias
Resposta rápida a incidentes
Ferramentas DevSecOps Comuns
Categoria Tipo Exemplos de Ferramentas
SAST (Análise Estática) Encontra vulnerabilidades no código SonarQube, Checkmarx, Fortify
DAST (Análise Dinâmica) Testa a aplicação em execução OWASP ZAP, Burp Suite, Acunetix
SCA (Composição) Verifica dependências e bibliotecas Snyk, WhiteSource, Blackduck
Container Scanning Analisa imagens Docker Trivy, Clair, Harbor
IaC (Infraestrutura) Verifica configurações de infra Terraform Scan, CloudFormation Guard
Secrets Management Gerencia credenciais seguramente HashiCorp Vault, AWS Secrets Manager
Exemplo de Pipeline DevSecOps
Developer faz commit
    ↓
Pre-commit hooks (SAST local)
    ↓
Push para repositório
    ↓
CI/CD Pipeline inicia
    ├─ Build: Compilação
    ├─ SAST: Análise estática (SonarQube)
    ├─ SCA: Verificação de dependências (Snyk)
    ├─ Container: Scan de imagem Docker
    ├─ DAST: Análise dinâmica (ZAP)
    └─ Compliance: Checklist automático
    ↓
Tudo OK? → Deploy para staging
    ↓
Testes de integração com segurança
    ↓
Aprovação manual (se necessário)
    ↓
Deploy para produção
    ↓
Monitoramento contínuo (SIEM, alertas)
                    
✅ Quando usar DevSecOps: Equipes ágeis/DevOps, startups que precisam de velocidade com segurança, organizações com alto volume de releases.
📊 Comparação: SDL vs SSDLC vs DevSecOps
Tabela Comparativa Completa
Aspecto SDL SSDLC DevSecOps
Tipo Metodologia específica Conceito genérico Cultura + Prática
Origem Microsoft (2004) Conceito de indústria Evolução do DevOps
Abordagem Estruturada e formal Principios adaptativos Automatizada e contínua
Fases Principais 7 fases bem definidas Integrado ao SDLC Pipeline CI/CD
Velocidade Mais lenta (formal) Variável Rápida (automatizada)
Automação Parcial Variável Alta ✓
Documentação Extensa ✓ Moderada ~ Mínima ~
Custo Inicial Alto Médio Médio-Alto
Curva de Aprendizado Steep Média Média
Melhor para... Projetos críticos e formais Qualquer projeto Equipes ágeis e DevOps
Feedback Periódico Contínuo Imediato ✓
Responsabilidade Centralizada Compartilhada Totalmente Distribuída ✓
Quando Usar Cada Uma?
🛡️
Use SDL quando:
Desenvolvendo aplicações críticas (fintech, healthcare)
Precisa de certificação ou conformidade rigorosa
Equipe tem experiência com processos formais
Tempo de desenvolvimento não é crítico
Segurança é o máximo interesse
⚙️
Use SSDLC quando:
Quer um conceito guia, não uma receita rígida
Combinando diferentes metodologias (Waterfall + Agile)
Implementando segurança gradualmente
Treinando equipes sobre boas práticas
Precisa de flexibilidade na implementação
🚀
Use DevSecOps quando:
Equipe já usa DevOps ou CI/CD
Precisa de releases frequentes
Quer automatizar verificações de segurança
Busca feedback imediato sobre vulnerabilidades
Cultura é ágil e iterativa
Combinando as Três Abordagens
💡 O Melhor dos Três Mundos:

Muitas organizações modernas combinam os três:

• Use SSDLC como princípio guia (conceitual)
• Implemente SDL practices nas fases críticas (design, verificação)
• Automatize com DevSecOps no pipeline CI/CD

✅ Exemplo Híbrido: Uma fintech pode usar SSDLC como framework, aplicar SDL rigorosamente nas fases críticas (design de autenticação, processamento de pagamentos), e usar DevSecOps para automatizar testes contínuos em seu pipeline de deploy.
Quiz Interativo - Teste seu Conhecimento!

Responda as perguntas abaixo para verificar sua compreensão dos conceitos. Clique em cada resposta para ver se está correta!

1. Qual é a origem do SDL?
Microsoft criou o SDL em 2004 como metodologia formal de desenvolvimento seguro
Google desenvolveu SDL como alternativa ao DevOps tradicional
SDL é um padrão ISO internacionalmente obrigatório
Amazon criou SDL para seus serviços em nuvem
2. Quantas fases principais tem o SDL?
3 fases (Design, Código, Deploy)
7 fases (Treinamento, Requisitos, Design, Implementação, Verificação, Lançamento, Suporte)
5 fases (Planejamento, Desenvolvimento, Testes, Implementação, Monitoramento)
Não tem um número fixo de fases
3. Qual a principal diferença entre SDL e SSDLC?
SDL é uma metodologia específica estruturada, enquanto SSDLC é um conceito genérico adaptável
SSDLC é mais seguro que SDL e deve sempre ser preferido
SDL é apenas para Waterfall, SSDLC é apenas para Agile
Não há diferença real entre SDL e SSDLC
4. Qual é o foco principal do DevSecOps?
Remover todas as operações do processo de desenvolvimento
Automatizar verificações de segurança no pipeline CI/CD para manter velocidade sem sacrificar segurança
Criar um departamento de segurança separado
Parar o desenvolvimento até que todas as vulnerabilidades sejam eliminadas
5. Qual técnica NÃO faz parte de um pipeline DevSecOps típico?
SAST (Static Application Security Testing)
DAST (Dynamic Application Security Testing)
SCA (Software Composition Analysis)
WSA (Wrist Security Analysis) - essa técnica não existe!
6. Qual seria o melhor cenário para usar SSDLC como conceito guia?
Apenas para pequenas startups
Quando quer um framework flexível que se adapte a diferentes metodologias (Waterfall + Agile)
Quando precisa de máxima certeza de segurança
Nunca deve ser usado como conceito guia
7. Em qual fase do SDL o Threat Modeling é realizado?
Treinamento
Requisitos
Design
Implementação
8. Qual conceito é central no DevSecOps?
Segurança é responsabilidade apenas do time de segurança
Segurança é responsabilidade compartilhada de todos e deve ser automatizada no pipeline
Operações não devem ter responsabilidade de segurança
Desenvolvimento e Segurança devem trabalhar separados