Curso Secure Desktop Application Developement in c#
24 horasVisão Geral
- Como desenvolvedor, seu dever é escrever um código à prova de balas. Contudo…
- E se disséssemos que, apesar de todos os seus esforços, o código que você escreveu durante toda a sua carreira está cheio de fraquezas que você nunca soube que existiam?
- E se, enquanto você lê isso, os hackers tentam invadir seu código? Q
- ual a probabilidade de terem sucesso?
- Este curso combinado mudará a maneira como você vê o código.
- Um treinamento prático durante o qual ensinaremos todos os truques dos atacantes e como mitigá-los, deixando-o com outro sentimento que não seja o desejo de saber mais.
- É sua escolha estar à frente do grupo e ser visto como um divisor de águas na luta contra o cibercrime
Objetivo
Resultado de Aprendizado:
- Entenda os conceitos básicos de segurança, segurança de TI e codificação segura
- Aprenda sobre os erros típicos de codificação e como evitá-los
- Aprenda a usar vários recursos de segurança do ambiente de desenvolvimento .NET
- Ter uma compreensão prática da criptografia
- Compreender os conceitos de segurança dos serviços da Web
- Aprenda sobre segurança XML
- Aprenda sobre ataques e proteções de negação de serviço
- Obtenha fontes e leituras adicionais sobre práticas seguras de codificação
Pre-Requisitos
São necessárias habilidades gerais de desenvolvimento em C #.
Informações Gerais
- Carga horaria 24h
- Se aos sábados o curso acontece de 09h às 18h, total de 3 sábados,
- se noturno o curso acontece de segunda a sexta das 19h às 23h, total de 6 noites,
- se in-company o curso acontece de 08h às 17h total de 3 dias,
Formato de Entrega:
- Presencial em sala de aula
- Ou on-line ao vivo em tempo real
Materiais
Inglês & PortuguêsConteúdo Programatico
Segurança de TI e codificação segura
- Natureza da segurança
- O que é risco?
- Segurança de TI vs. codificação segura
- De vulnerabilidades a redes de bots e crimes cibernéticos
- Natureza das falhas de segurança
- Razões de 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 2017
Erros de codificação e vulnerabilidades comuns
- Validação de entrada
- Conceitos de validação de entrada
- Injeção
- Princípios de injeção
- injeção SQL
- Injeção de comando
- Estudo de caso – ImageMagick
Problemas inteiros
- Representação de números inteiros negativos
- Estouro de número inteiro
- Exercício IntOverflow
- Qual é o valor de Math.Abs (int.MinValue)?
- Problema inteiro - práticas recomendadas
- Estudo de caso - Estouro de número inteiro no .NET
Vulnerabilidade de passagem de caminho
- Travessia de caminho - proteções fracas
- Percurso de caminho - práticas recomendadas
Chamadas nativas inseguras
- Exercício - código não gerenciado inseguro
Reflexão insegura
- Implementação de um distribuidor de comandos
- Reflexão insegura - identifique o bug!
- Mitigação da reflexão insegura
Forjamento de log
- Alguns outros problemas típicos com arquivos de log
Arquitetura e serviços de segurança .NET
- Arquitetura .NET
- Segurança de acesso ao código
- Confiança total e parcial
- Classes de evidência
- Permissões
- Classes de permissão de acesso ao código
- Derivando permissões de evidência
- Definindo permissões personalizadas
- Verificação de permissão de tempo de execução do .NET
- The Stack Walk
- Efeitos da declaração ()
- Permissão declarativa no nível de classe e método
- Verificação de permissão imperativa (programática)
- Exercício - sandboxing código .NET
- Usando atributos de transparência
- Permitir chamadas parcialmente confiáveis
- Exercício - usando atributos de transparência
Segurança baseada em função
- Autorização baseada em principal
- Exercício - adicionando autorização baseada em função
- Representação
Criptografia prática
- Regra nº 1 da implementação de criptografia
- Sistemas de criptografia
- Elementos de um sistema de criptografia
- Arquitetura criptográfica .NET
Criptografia de chave simétrica
- Fornecendo confidencialidade com criptografia simétrica
- Algoritmos de criptografia simétrica
- Modos de operação
- Criptografar e descriptografar (simétrico)
Outros algoritmos criptográficos
- Hash ou resumo da mensagem
- Algoritmos -Hash
- SHAttered
- Hashing
- Código de autenticação de mensagem (MAC)
- Fornecendo integridade e autenticidade com uma chave simétrica
Criptografia assimétrica (chave pública)
- Fornecendo confidencialidade com criptografia de chave pública
- Regra geral - posse de chave privada
- O algoritmo RSA
- Introdução ao algoritmo RSA
- Criptografando com RSA
- Combinando algoritmos simétricos e assimétricos
- Assinatura digital com RSA
- Algoritmos assimétricos no .NET
- Sinal de exercício
- Exercício - usando classes criptográficas .NET
Infraestrutura de Chave Pública (PKI)
- Ataque Man-in-the-Middle (MitM)
- Certificados digitais contra ataques do MitM
- Autoridades de certificação em infraestrutura de chave pública
- Certificado digital X.509
Segurança de aplicativos de desktop
- Windows Presentation Foundation
- Introdução ao WPF
- Linguagem de marcação de aplicativo extensível (XAML)
- Modelos de implantação do WPF
Problemas comuns de segurança com aplicativos .NET da área de trabalho
- Seqüestro de recursos em aplicativos WPF
- Exercício – LibHijack
Protegendo o código .NET
- Authenticode
- Exercício - Usando Authenticode
Segurança XML
- Injeção de XML
- (Ab) usando CDATA para armazenar carga útil XSS em XML
- Exercício - injeção de XML
- Proteção através de sanitização e validação de XML
- Abusando da entidade XML
- Introdução à entidade XML
- Bomba XML
- Exercício - bomba XML
- Ataque de entidade externa XML (XXE) - inclusão de recurso
- Ataque de entidade externa XML - chamada de URL
- Ataque de entidade externa XML - entidades de parâmetro
- Impedindo ataques relacionados a entidades
- Estudo de caso - XXE na Barra de Ferramentas Google
Segurança de acesso a dados no .NET
- Trabalhando com bancos de dados no .NET
- ADO.NET
- Instruções preparadas no ADO.NET
- Protegendo cadeias de conexão
- Estrutura de entidade
- Segurança do Entity Framework
- Exposição de objetos com o Entity Framework
Segurança do Windows Communication Foundation
- Introdução ao WCF
- Arquitetura WCF e considerações de segurança
- Arquitetura WCF
- Considerações de segurança para o ambiente de hospedagem
- Terminologia de segurança do WCF
- Segurança da camada de transporte
- Segurança da camada de transporte - autenticação do cliente
- Segurança no nível da mensagem
- Opções de autorização
Erros de codificação e vulnerabilidades comuns
- Uso inadequado de recursos de segurança
- Problemas típicos relacionados ao uso de recursos de segurança
- Gerenciamento de senha
- Exercício - Fraqueza de senhas com hash
- Gerenciamento e armazenamento de senhas
- Algoritmos de hash para fins especiais para armazenamento de senhas
- Implementações Argon2 e PBKDF2 no .NET
- implementações bcrypt e scrypt no .NET
- Estudo de caso - a violação de dados de Ashley Madison
- Erros típicos no gerenciamento de senhas
- Exercício - senhas codificadas
Tratamento inadequado de erros e exceções
- Problemas típicos com manipulação de erros e exceções
- Bloco de captura vazio
- Captura excessivamente ampla
- Usando captura múltipla
- Captura de NullReferenceException
- Manipulação de exceção - identifique o bug!
- Exercício - Tratamento de erros
Problemas de tempo e estado
- Concorrência e segmentação
- Simultaneidade no .NET
- Sincronização omitida - identifique o bug!
- Exercício - Sincronização omitida
- Granularidade incorreta - identifique o bug!
- Exercício - Granularidade incorreta
- Deadlocks
- Evitando impasses
- Exercício - Evitando impasses
- Declaração de bloqueio
- Erros de serialização (TOCTTOU)
- Exemplo de TOCTTOU
- Exercício - Condição de corrida
- Exercício - Explorando a condição de corrida
Problemas de qualidade do código
- Perigos decorrentes da má qualidade do código
- Serialização - identifique o bug!
- Exercício - sensível serializável
- Classe não selada - seqüestro de objeto
- Exercício - Seqüestro de objetos Sequência imutável - localize o erro!
- Exercício - Cordas imutáveis
- Usando SecureString
Negação de serviço
- Introdução ao DoS
- DoS assimétrico
- Expressão regular DoS (ReDoS)
- ReDoS do exercício
- Mitigação ReDoS
- Estudo de caso - ReDos no Stack Exchange
- Ataque de colisão hashtable
- Usando hashtables para armazenar dados
- Colisão Hashtable
- Colisão de hashtable no ASP.NET