Programa do Curso
Dia 1
Segurança da TI e codificação segura
- Natureza da segurança
- Termos relacionados à segurança da TI
- Definição de risco
- Aspectos diferentes da segurança da TI
- Requisitos de diferentes áreas de aplicação
- Segurança da TI vs. codificação segura
-
De vulnerabilidades a botnets e cibercrime
- Natureza das falhas de segurança
- Razões da dificuldade
- De um computador infectado a ataques direcionados
-
Classificação de falhas de segurança
- Taxonomia de Landwehr
- Os Sete Reinos Perniciosos
- OWASP Top Ten 2013
- Comparação do OWASP Top Ten 2003 – 2013
Introdução ao ciclo de vida de desenvolvimento seguro da Microsoft® (SDL)
- Agenda
-
Aplicações sob ataque...
- Evolução do cibercrime
- Ataques estão focando em aplicações
- A maioria das vulnerabilidades está em aplicativos de pequenas ISVs
-
Origens do SDL da Microsoft...
- Cronologia da segurança na Microsoft...
- Quais aplicações são obrigadas a seguir o SDL?
-
Ciclo de vida de desenvolvimento seguro da Microsoft (SDL)
- Ciclo de vida de desenvolvimento seguro da Microsoft (SDL)
- Requisitos pré-SDL: Treinamento em segurança
- Fase Um: Requisitos
- Fase Dois: Design
- Fase Três: Implementação
- Fase Quatro: Verificação
- Fase Cinco: Lançamento – Plano de Resposta
- Fase Cinco: Lançamento – Revisão Final de Segurança
- Fase Cinco: Lançamento – Arquivamento
- Requisito pós-SDL: Resposta
- Orientação do processo SDL para aplicativos LOB
- Orientação SDL para metodologias ágeis
- O desenvolvimento de software seguro requer melhoria de processos
Princípios de design seguro
-
Superfície de ataque
- Redução da superfície de ataque
- Superfície de ataque – um exemplo
- Análise da superfície de ataque
- Redução da superfície de ataque – exemplos
-
Privacidade
- Privacidade
- Entendendo comportamentos e preocupações de aplicativos
-
Defesa em profundidade
- Princípio central do SDL: Defesa em Profundidade
- Defesa em profundidade – exemplo
-
Princípio de privilégio mínimo
- Privilégio mínimo – exemplo
-
Configurações seguras por padrão
- Configurações seguras por padrão – exemplos
Princípios de implementação segura
- Agenda
- Ciclo de vida de desenvolvimento seguro da Microsoft (SDL)
-
Fundamentos do estouro de buffer
- Processadores Intel 80x86 – registros principais
- Layout de endereços de memória
- Mecanismo de chamada de função em C/C++ no x86
- Variáveis locais e quadro de pilha
-
Estouro de pilha
- Estouro de buffer na pilha
- Exercícios – introdução
- Exercício BOFIntro
- Exercício BOFIntro – determinar o layout da pilha
- Exercício BOFIntro – um exploit simples
-
Validação de entrada
- Conceitos de validação de entrada
-
Problemas com inteiros
- Representação de inteiros negativos
- Estouro de inteiro
- Estouro aritmético – adivinhe a saída!
- Exercício IntOverflow
- Qual é o valor de Math.Abs(int.MinValue)?
-
Mitigação de problemas com inteiros
- Mitigação de problemas com inteiros
- Evitando estouro aritmético – adição
- Evitando estouro aritmético – multiplicação
- Detectando estouro com a palavra-chave checked em C#
- Exercício – Usando a palavra-chave checked em C#
- Exceções acionadas por estouros em C#
-
Estudo de caso – estouro de inteiro no .NET
- Uma vulnerabilidade real de estouro de inteiro
- Explorando a vulnerabilidade de estouro de inteiro
-
Vulnerabilidade de navegação de diretórios
- Mitigação da vulnerabilidade de navegação de diretórios
Dia 2
Princípios de implementação segura
-
Injeção
- Métodos típicos de ataque por injeção SQL
- Injeção SQL cega e baseada em tempo
- Métodos de proteção contra injeção SQL
- Injeção de comando
-
Autenticação quebrada - gerenciamento de senhas
- Exercício – Fraquezas das senhas hasheadas
- Gerenciamento e armazenamento de senhas
- Algoritmos de hash de propósito especial para armazenamento de senhas
-
Cross-Site Scripting (XSS)
- Cross-Site Scripting (XSS)
- Injeção de CSS
- Exploração: injeção através de outras tags HTML
- Prevenção XSS
-
Falta de controle de acesso funcional por nível
- Filtragem de uploads de arquivos
-
Criptografia prática
- Fornecendo confidencialidade com criptografia simétrica
- Algoritmos de criptografia simétrica
- Cifras de bloco – modos de operação
- Hash ou resumo da mensagem
- Algoritmos de hash
- Código de autenticação de mensagem (MAC)
- Fornecendo integridade e autenticidade com uma chave simétrica
- Fornecendo confidencialidade com criptografia de chave pública
- Regra geral – posse da chave privada
- Erros típicos no gerenciamento de senhas
- Exercício – Senhas hard coded
- Conclusão
Princípios de verificação segura
- Teste funcional vs. teste de segurança
- Vulnerabilidades de segurança
- Priorização
- Teste de segurança no SDL
- Etapas do planejamento de teste (análise de risco)
-
Escopo e coleta de informações
- Stakeholders
- Ativos
- A superfície de ataque
- Objetivos de segurança para o teste
-
Modelagem de ameaças
- Modelagem de ameaças
- Perfis de atacantes
- Modelagem de ameaças baseada em árvores de ataque
- Modelagem de ameaças baseada em casos de uso inadequados/abuso
- Casos de uso inadequados/abuso – um exemplo simples de loja virtual
- Abordagem STRIDE por elemento para modelagem de ameaças – MS SDL
- Identificação de objetivos de segurança
- Diagramação – exemplos de elementos DFD
- Diagrama de fluxo de dados – exemplo
- Enumeração de ameaças – STRIDE e elementos DFD da MS SDL
- Análise de risco – classificação de ameaças
- Modelo de classificação de ameaças/risco DREAD
-
Técnicas e ferramentas de teste de segurança
- Abordagens gerais de teste
- Técnicas para diferentes etapas do SDL
-
Revisão de código
- Revisão de código para segurança de software
- Análise de contaminação (taint analysis)
- Heurísticas
-
Análise estática de código
- Análise estática de código
- Exercício – Usando ferramentas de análise estática de código
-
Teste da implementação
- Verificação manual em tempo de execução
- Teste de segurança manual vs. automatizado
- Testes de penetração (penetration testing)
- Testes de estresse
-
Fuzzing
- Teste de segurança automatizado – fuzzing
- Desafios do fuzzing
-
Scanners de vulnerabilidades da web
- Exercício – Usando um scanner de vulnerabilidades
-
Verificação e endurecimento do ambiente
- Sistema de pontuação comum de vulnerabilidades – CVSS
- Scanners de vulnerabilidades
- Bancos de dados públicos
-
Estudo de caso – Bypass de Autenticação de Formulários
- Vulnerabilidade de término com byte nulo (NULL byte)
- A vulnerabilidade de bypass de autenticação de formulários no código
- Explorando o bypass de autenticação de formulários
Fontes de conhecimento
- Fontes de codificação segura – um kit inicial
- Bancos de vulnerabilidades
- Diretrizes de codificação segura .NET no MSDN
- Folhas de referência de codificação segura .NET
- Livros recomendados – .NET e ASP.NET
Declaração de Clientes (5)
Múltiplos exemplos para cada módulo e grande conhecimento do instrutor.
Sebastian - BRD
Curso - Secure Developer Java (Inc OWASP)
Máquina Traduzida
Módulo 3 Ataques e Explorações em Aplicações, XSS, Injeção SQL Módulo 4 Ataques e Explorações em Servidores, DoS, BOF
Tshifhiwa - Vodacom
Curso - How to Write Secure Code
Máquina Traduzida
Informações gerais sobre o curso
Paulo Gouveia - EID
Curso - C/C++ Secure Coding
Máquina Traduzida
O conhecimento do instrutor sobre o assunto era excelente, e a forma como as sessões foram organizadas para que o público pudesse acompanhar as demonstrações ajudou muito a fixar esse conhecimento, em comparação com apenas sentar e ouvir.
Jack Allan - RSM UK Management Ltd.
Curso - Secure Developer .NET (Inc OWASP)
Máquina Traduzida
Nada estava perfeito.
Zola Madolo - Vodacom
Curso - Android Security
Máquina Traduzida