TSDD Teste de segurança durante o desenvolvimento Introdução Com a fusão da Internet, é possível que pessoas de vários lugares do mundo possam explorar vulnerabilidades dos sistemas com mais facilidade e rapidez. Neste trabalho serão apresentados quais são os requisitos necessários para a segurança dos sistemas e quais testes podem ser executados durante a fase de desenvolvimento para garantir que tais requisitos sejam atendidos. Requisitos de Segurança em Desenvolvimento O desafio de se construir softwares menos suscetíveis a falhas de seguranças é um objetivo cada vez mais perseguido pelos desenvolvedores. Com base na norma ISO/IEC15408 (Common Criteria) podemos definir os requisitos de uma aplicação. Porque proteger: Uma das principais causas de ataques são vulnerabilidades no software. O software deve ser projetado, arquitetado e implementado para ser resistente aos ataques. Requisitos de Segurança em Desenvolvimento Devemos desenvolver com segurança e garantir a segurança da aplicação desenvolvida.Para isto precisamos de um processo seguro. As pessoas precisam conhecer e usar princípios de segurança. Ferramentas & Ambientes: Devem atender as premissas de segurança. Acordo entre os desenvolvedores e o cliente sobre o que deve ser feito. Confiabilidade. Requisitos de Segurança em Desenvolvimento Elucidar os riscos do projeto. Definir as fronteiras do sistema. Classifique as informações quanto à segurança. Treine os desenvolvedores vulnerabilidades. para fazer revisões Testar o retorno de funções – Sempre que se função, seu retorno precisa ser verificado. e eliminar chamar uma Requisitos de Segurança em Desenvolvimento Documentar funções corretamente – A correta documentação da função evita mal-entendido a respeito da interpretação da mesma. Tratar as entradas de dados – Todo dado informado, seja pelo usuário ou outro sistema, deve ser tratado adequadamente, mesmo que se acredite que todas as funções são intrinsecamente seguras. Testes de segurança Especificar a segurança de forma clara e objetiva. Construir conforme a especificação. Testar para verificar o atendimento da especificação original. Alteração do ambiente. Acréscimos e/ou exclusões desautorizadas. Negligência humana. Entre outras falhas. A importância da fase de implementação de um software Empregar padrões de codificação e teste. Empregar ferramentas de teste de segurança incluindo fuzzing. Empregar ferramentas de análise estática de código. Revisar o código. Testes O que se deseja com o teste? Quando testar? Como definimos qual lógica testar? Como definimos qual dado testar? Testes de Verificação Verificação de Requisitos: Garantir a qualidade das informações geradas durante o processo de levantamento, análise e especificação de requisitos. Verificação da Modelagem Funcional: Avaliar se todos os requisitos identificados foram incorporados na modelagem funcional. Verificação da Modelagem Interna: Avaliar se os diagramas da modelagem interna traduzem todos os aspectos da modelagem funcional, assim como, analisar a estrutura dos dados. Verificação de Código: Garantir que os códigos fonte obedecem as normas e padrões determinados pela organização. Testes de Validação Validação de Unidade: Garantir que as diversas unidades do software estão contempladas na totalidade de linhas de código. Validação de Integração: Garantir que os diversos componentes do software não apresentem erros quando integrados. Validação de Funcionalidade: Garantir que não existam diferenças entre os requisitos funcionais e o comportamento do software. Testes de Validação Validação de Sistemas: Detectar erros de natureza não funcional, certificando-se que o comportamento está de acordo com os requisitos especificados. Seu propósito é testar os requisitos tecnológicos, entre eles: Carga e Stress – determinar o limite máximo de carga e stress que o software poderá suportar; Configuração – identificar e testar as configurações de software e hardware; Segurança – identificar formas de quebra de segurança do software; Desempenho (performance) – determinar se o desempenho em situações normais e de pico estão em conformidade aos requisitos de desempenho especificados; Confiabilidade e disponibilidade – determinar as medidas de confiabilidade e disponibilidade do software; Recuperação – avaliar o comportamento do software após a ocorrência de um erro ou outras condições anormais; Testes de Validação Validação de Usabilidade: Garantir que os requisitos de usabilidade (acesso, navegação, clareza de informações e terminologia adequada) estejam sendo cumpridos e conforme às especificações. Validação de Aceite: Permitir ao cliente executar testes, validando as categorias de testes aplicadas anteriormente (funcionalidade, usabilidade e sistemas), reduzindo os riscos na implantação em produção. Os métodos de testes são basicamente os seguintes: Método Caixa-Branca – Técnica utilizada para determinar defeitos nas estruturas internas dos programas. Método Caixa-Preta – Técnica utilizada para garantir que os requisitos de negócios estão plenamente satisfeitos. Conclusão Pode-se concluir que, com a implantação de testes de segurança durante a fase de desenvolvimento, será possível desde o início garantir que o sistema atingirá os requisitos mínimos de segurança, minimizando um esforço maior ao final para correção de falhas do sistema. A engenharia de software seguro pretende apoiar todos que desejam aperfeiçoar os processos de desenvolvimento de software para a obtenção de produtos mais seguros. Perspectivas futuras Práticas que podem ser adotarem produtos mais seguros: adotadas pelas empresas para Planejamento das etapas de desenvolvimento de software seguro apresentado através da formulação de documentação, para as fases especificadas e comparação desse modelo com outros. Proposição de um novo modelo desenvolvimento de software seguro. de ciclo de vida para Perspectivas futuras Criação de um framework para requisitos funcionais de segurança. apoiar a aplicação dos Formulação de padrões de desenvolvimento que suportem, se não todos, alguns dos requisitos funcionais de segurança citados. Desenvolvimento de ferramentas de gerência para desenvolvimento de softwares aderentes à norma ISO/IEC 15408. Elaboração de conteúdo pedagógico para capacitação de recursos humanos (desenvolvedores, arquitetos e engenheiros de software) em segurança da informação. FIM