Segurança em Redes - Código Seguro
Introdução A necessidade de sistemas seguros Segurança Preventiva Princípios de segurança a seguir Modelagem das ameaças Técnicas seguras de codificação
A necessidade de sistemas seguros Sistema seguro: um sistema que protege a confidencialidade, integridade e disponibilidade das informações dos clientes, e a integridade e disponibilidade dos recursos de processamento sob controle do proprietário ou administrador do sistema.
A necessidade de sistemas seguros Vulnerabilidade: um defeito em um sistema que torna impossível – mesmo com a sua utilização adequada – evitar que um invasor usurpe privilégios no sistema do usuário, regule sua operação, comprometa os dados ou receba confiança não concedida.
A necessidade de sistemas seguros Segurança na Web Conexão total: do desktop à cafeteira Computação confiável Presunção de funcionamento (ex. Telefone, e-mail) Problema: custo da segurança Jogo multiplayer X controle de marca-passo Segurança X confiabilidade (ex. recall, cartão+senha)
A necessidade de sistemas seguros A vantagem do invasor e o dilema do defensor O defensor deve defender todos os pontos, o invasor pode escolher o mais fraco O defensor pode se defender somente de ataques conhecidos, o invasor pode investigar vulnerabilidades desconhecidas O defensor deve estar constantemente vigilante, o invasor pode atacar a qualquer momento O defensor deve jogar de acordo com as regras, o invasor pode jogar sujo
Segurança preventiva Segurança é entediante A segurança é um desativador de funcionalidades A segurança é difícil de medir Não é a principal habilidade ou interesse dos projetistas e desenvolvedores Não significa criar algo novo e animador
Segurança preventiva Como fazer Aprimoramento do processo (projeto, desenvolvimento, testes, distribuição/manutenção) Questões de segurança nas entrevistas Modelagem de ameaças Revisões pela equipe de segurança Testes específicos (ex. mutação dos dados) Diretrizes seguras de codificação Campanha de segurança Realimentação ...
Segurança na plataforma Java Java cryptography extension (JCE) Java authentication and authorization service (JAAS) Java secure socket extension (JSSE)
Java Java cryptography extension (JCE) Framework para: Objetivos Criptografia Simétrica Assimétrica Bloco Fluxo Geração e acordo de chaves Código de autenticação de mensagens (MAC) Objetivos Assinatura digital Funções de resumo (message digest)
Java Java authentication and authorization service (JAAS) Serviços de autenticação e controle de acesso sobre usuários Tecnologia PAM (Pluggable Authentication Module) Suporte à autorização por usuário
Java Java secure socket extension (JSSE) Comunicações seguras pela Internet Versão Java de SSL (secure sockets layer) e TLS (transport layer security) Criptografia, autenticação de servidor, integridade de mensagem e autenticação de cliente (opcional)
Java Buffer overflow: linguagem faz verificação de limites; tipo string Acesso à arquivos: somente verificações básicas de segurança (ex. Pode testar se a aplicação, no contexto corrente, pode ler ou escrever em um arquivo; não se pode acessar ou mudar permissões ou ACL de arquivos)
Java Validação de entradas: falta uma classe para expressões regulares Overflow/underflow e conversões numéricas: o/u não geram exceção; cuidar conversões entre tipos primitivos com casting Ataques a recursos: não há suporte a limitação de recursos (ex. Alocação de memória)
Java Validação de origem: validar fortemente a origem de requisições a serviços privilegiados
Cartilha de segurança do CERT.br cartilha.cert.br