Testes de segurança para software

De Safeval Wiki
Ir para: navegação, pesquisa

Não se pode garantir que todo software funcione corretamente, sem a presença de erros, visto que os mesmos muitas vezes possuem um grande número de estados com fórmulas, atividades e algoritmos complexos. O tamanho do projeto a ser desenvolvido e a quantidade de pessoas envolvidas no processo aumentam ainda mais a complexidade. Idealmente, toda permutação possível do software deveria ser testada. Entretanto, isso se torna impossível para a ampla maioria dos casos devido à quantidade impraticável de possibilidades. A qualidade do teste acaba se relacionando à qualidade dos profissionais envolvidos em filtrar as permutações relevantes.

Testes de segurança de sistemas são elementos fundamentais para o desenvolvimento de um software seguro. Existem diversos tipos de teste e metodologias de teste de segurança, porém a maior parte dessas descreve alguns tipos de teste comuns:

  • Teste unitário - Para avaliar componentes ou partes de um sistema
  • Teste integrado - Para avaliar o software já pronto, com todas as partes daquela versão integradas
  • Inspeção de código ou Revisão por Pares - Para identificar fragilidades latentes e código malicioso
  • Teste de invasão, Teste de Penetração ou Avaliação de Vulnerabilidade - Para verificar se o sistema suporta os ataques mais comuns

Outros tipos de teste e avaliação também importantes para a segurança incluem:

Execução dos testes

Os testes unitários são executados geralmente por desenvolvedores, no momento da criação dos componentes ou funções. Sempre que um desenvolvedor cria um componente, deve criar também uma script de teste deste componente para garantir que o mesmo está de acordo com a especificação. Existem diversas ferramentas de teste que facilitam esse trabalho.

A inspeção de código é geralmente inclusa no ciclo de desenvolvimento, caso se utilize SCRUM ou outra metodologia que adote ciclos fixos, ou em eventos periódicos, uma vez por mês, por exemplo, em metodologias lineares. A ideia é que todo código produzido passe por uma inspeção de código pelo menos uma vez ao longo do desenvolvimento do sistema.

O teste integrado pode ser parcial ou final, ou seja, pode-se realiza um teste integrado quando vários componentes são unidos em uma parte maior ou um subsistema, ou pode-se realizar ao final, quando todos os componentes forem integrados. Importante é a realização de testes deste tipo na aceitação do produto, ou seja, antes de coloca-lo em produção.

O teste de invasão também deve ser colocado antes dessa etapa final. Hoje todo sistema colocado em produção fatalmente irá sofrer uma série de tentativas de ataque, sendo imprescindível verificar, antes disso, se o sistema suporta bem os ataques mais comuns e mais conhecidos.