Programa do Curso
Dia 1
- Segurança de TI e codificação segura
- Natureza da segurança
- Termos relacionados à segurança de TI
- Definição de risco
- Diferentes aspectos da segurança de TI
- Requisitos de diferentes áreas de aplicação
- Segurança de TI versus codificação segura
- De vulnerabilidades a botnets e cibercrime
- Natureza dos erros de segurança
- Motivos 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
- OWASP Comparação Top Ten 2003 – 2013
- Introdução ao ciclo de vida do desenvolvimento seguro Microsoft® SDL (Security Development Lifecycle)
- Pauta
- Aplicações sob ataque...
- Evolução da cibercriminalidade
- Ataques estão se concentrando em aplicações
- A maioria das vulnerabilidades está em pequenas aplicações de ISV
- Origens do ciclo de vida de desenvolvimento seguro Microsoft SDL...
- Linha do tempo de segurança na Microsoft
- Quais aplicações são obrigadas a seguir o SDL?
- Ciclo de vida de desenvolvimento seguro Microsoft (SDL)
- Ciclo de vida de desenvolvimento seguro 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 aplicações LOB
- Orientação SDL para metodologias Agile
- A desenvolvimento de software seguro requer melhorias no processo
- 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
- Exemplos de redução da superfície de ataque
- Privacidade
- Privacidade
- Compreendendo comportamentos e preocupações das aplicações
- Defesa em profundidade
- Princípio básico do SDL: defesa em profundidade
- Exemplo de defesa em profundidade
- Princípio da menor privilégio
- Menor privilégio – exemplo
- Padrões seguros
- Padrões seguros – exemplos
- Superfície de ataque
- Princípios de implementação segura
- Pauta
- Ciclo de vida de desenvolvimento seguro Microsoft (SDL)
- Noções básicas de desbordamento de buffer
- Processadores Intel 80x86 – principais registradores
- A disposição de endereços na memória
- O mecanismo de chamada de função em C/C++ no x86
- Variáveis locais e o quadro da pilha
- Desbordamento de pilha
- Desbordamento 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
- Noções sobre validação de entrada
- Problemas com inteiros
- Representação de inteiros negativos
- Desbordamento de inteiros
- Desbordamento 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
- Avoiding arithmetic overflow – addition (Evitar desbordamento aritmético - adição)
- Avoiding arithmetic overflow – multiplication (Evitar desbordamento aritmético - multiplicação)
- Detectando desbordo com a palavra-chave checked em C#
- Exercício – Usando a palavra-chave checked em C#
- Exceções disparadas por desbordamentos em C#
- Caso de estudo – Desbordamento de inteiro no .NET
- Uma vulnerabilidade real de desbordamento de inteiros
- Exploração da vulnerabilidade de desbordamento de inteiros
- Vulnerabilidade de travessia de caminho
- Mitigação de travessia de caminho
Dia 2
- Princípios de implementação segura
- Injeção
- Métodos típicos de ataques de injeção SQL
- Injeção cega e baseada em tempo SQL
- Métodos de proteção contra injeção SQL
- Command injection (Injeção de comando)
- Autenticação quebrada - gerenciamento de senhas
- Exercício – Fraquezas de senhas hashadas
- Gestão e armazenamento de senhas
- Algoritmos de hash específicos para o armazenamento de senhas
- Cross-Site Scripting (XSS)
- Cross-Site Scripting (XSS)
- Injeção CSS
- Exploração: injeção através de outras tags HTML
- Prevenção XSS
- Acesso controlado por nível funcional ausente
- Filtragem de upload de arquivos
- Criptografia prática
- Proporcionando confidencialidade com criptografia simétrica
- Algoritmos de criptografia simétrica
- Cifradores de bloco – modos de operação
- Hash ou resumo de mensagem
- Algoritmos de hash
- Código de autenticação de mensagem (MAC)
- Proporcionando integridade e autenticidade com uma chave simétrica
- Proporcionando confidencialidade com criptografia de chave pública
- Regra geral – posse da chave privada
- Mistakes típicos em gerenciamento de senhas (Erros típicos no gerenciamento de senhas)
- Exercício – Senhas codificadas em texto simples
- Conclusão
- Injeção
- Princípios de verificação segura
- Teste funcional versus teste de segurança
- Vulnerabilidades de segurança
- Priorização
- Teste de segurança no ciclo de vida do desenvolvimento de software (SDLC)
- Etapas do planejamento de teste (análise de riscos)
- Delimitação e coleta de informações
- Partes interessadas
- Ativos
- A superfície de ataque
- Objetivos de segurança para testar
- Modelagem de ameaças
- Modelagem de ameaças
- Perfis do atacante
- Modelagem de ameaças baseada em árvores de ataques
- Modelagem de ameaças baseada em casos de má utilização/abuso
- Casos de má utilização/abuso – exemplo de uma loja Web simples
- Abordagem per-elemento STRIDE para modelagem de ameaças – SDL MS
- Identificação dos objetivos de segurança
- Diagramação – exemplos de elementos DFD
- Diagrama de fluxo de dados (DFD) - exemplo
- Enumerando ameaças – elementos STRIDE e DFD do SDL MS
- Análise de risco – classificação de ameaças
- O modelo de ranking de ameaças/riscos DREAD
- Técnicas e ferramentas de teste de segurança
- Abordagens gerais de teste
- Técnicas para diferentes etapas do SDLC
- Análise de código
- Análise de código para segurança de software
- Análise de contaminação
- Heurísticas
- Análise estática de código
- 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 real
- Testes manuais versus automatizados de segurança
- Teste de penetração
- Testes de estresse
- Fuzzing
- Teste automático de segurança - fuzzing
- Desafios do fuzzing
- Escaneadores de vulnerabilidades Web
- Exercício – Usando um escaneador de vulnerabilidade
- Verificação e fortalecimento do ambiente
- Sistema comum de pontuação de vulnerabilidade - CVSS (Common Vulnerability Scoring System)
- Escaneadores de vulnerabilidades
- Bancos de dados públicos
- Caso de estudo – Bypass da autenticação de formulários
- Vulnerabilidade de terminação com byte NULL
- A vulnerabilidade de bypass da autenticação de formulários no código
- Exploração do bypass da autenticação de formulários
- Fuentes de conocimiento
- Fuentes de codificación segura – un kit inicial
- Bases de datos de vulnerabilidades
- .NET guías de codificación segura en MSDN
- Hojas resumen de .NET seguras para codificar
- Livros recomendados - .NET e ASP.NET
Declaração de Clientes (5)
Múltiplos exemplos para cada módulo e grande conhecimento do formador.
Sebastian - BRD
Curso - Secure Developer Java (Inc OWASP)
Máquina Traduzida
Módulo3 Ataques e explorações de aplicações, XSS, injeção SQL Módulo4 Ataques e explorações de 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 treinador sobre o assunto foi excelente, e a forma como as sessões foram organizadas para que o público pudesse acompanhar as demonstrações realmente ajudou a consolidar 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