14. Testes de segurança


Testes de Segurança: Protegendo o Software e o Ambiente contra Vulnerabilidades

No cenário digital atual, onde os dados são um ativo valioso e as ameaças cibernéticas são constantes, a segurança se tornou um aspecto não negociável da qualidade do software. Para o Engenheiro de Qualidade, ir além dos testes funcionais e de desempenho e mergulhar nos testes de segurança é fundamental para proteger o software, os usuários e os dados. Este módulo abordará como avaliar a segurança de aplicações e ambientes, identificando e explorando vulnerabilidades comuns.

Teste de Software e Segurança do Ambiente: Uma Visão Abrangente

A segurança é uma responsabilidade compartilhada e precisa ser abordada em múltiplas camadas:

  • Segurança do Software (Aplicação): Foca em identificar vulnerabilidades no código da aplicação, na lógica de negócios, nas APIs e na interação com o usuário. Os testes aqui visam explorar falhas que podem levar a acesso não autorizado, manipulação de dados, negação de serviço, etc.
  • Segurança do Ambiente (Infraestrutura): Refere-se à segurança dos servidores, redes, bancos de dados, contêineres, sistemas operacionais e outras infraestruturas onde o software é executado. O Q.A. deve ter um entendimento básico de como o ambiente impacta a segurança da aplicação e como vulnerabilidades de infraestrutura podem ser exploradas. Isso inclui configurações de firewall, gerenciamento de patches, políticas de acesso, etc.

O Q.A. pode atuar como um “hacker ético” (white-hat hacker), tentando quebrar o sistema de forma controlada para encontrar pontos fracos antes que atores mal-intencionados o façam.

O Projeto OWASP Top 10: Um Guia para Vulnerabilidades Comuns

O Open Web Application Security Project (OWASP) é uma comunidade online dedicada à segurança de software. O OWASP Top 10 é um documento de referência amplamente reconhecido que lista as dez vulnerabilidades de segurança mais críticas para aplicações web. Compreendê-lo é o ponto de partida para qualquer teste de segurança:

  1. Quebra de Controle de Acesso: Falhas que permitem que usuários acessem recursos ou funções que não deveriam.
  2. Falhas Criptográficas: Dados sensíveis expostos devido a falhas em criptografia.
  3. Injeção: Envio de dados não confiáveis para um interpretador.
  4. Design Inseguro: Falhas de segurança resultantes de escolhas inadequadas de design ou arquitetura.
  5. Configuração de Segurança Incorreta: Configurações padrão inseguras, permissões incorretas, etc.
  6. Componentes Vulneráveis e Desatualizados: Uso de bibliotecas, frameworks e outros módulos com vulnerabilidades conhecidas.
  7. Falhas de Identificação e Autenticação: Permite que atacantes comprometam identidades de usuários.
  8. Falhas de Integridade de Software e Dados: Quebra de integridade devido a atualizações sem validação, CI/CD inseguro.
  9. Falhas de Registro e Monitoramento de Segurança: Falta de logs ou monitoramento insuficiente, dificultando a detecção e resposta a ataques.
  10. Falsificação de Requisições do Lado do Servidor (SSRF): Aplicações podem ser induzidas a enviar requisições para destinos arbitrários.

Para cada item do OWASP Top 10, o Q.A. deve aprender as técnicas de teste correspondentes.

Ataques de Injeção: SQL / NoSQL / Command Injection

Os ataques de injeção são uma das vulnerabilidades mais comuns e perigosas:

  • Ataque de Injeção SQL: Ocorre quando um atacante insere comandos SQL maliciosos em campos de entrada de uma aplicação. Se a aplicação não filtrar ou parametrizar corretamente essas entradas, o banco de dados executa os comandos, permitindo que o atacante visualize, altere ou delete dados, ou até mesmo obtenha acesso ao sistema.
    • Teste: Tentar inserir ' OR 1=1 --, ' UNION SELECT ..., etc., em campos de login, busca ou outros formulários.
  • Ataque de Injeção NoSQL: Similar à injeção SQL, mas direcionado a bancos de dados NoSQL. As técnicas variam de acordo com o tipo de banco de dados NoSQL, mas geralmente envolvem a manipulação de consultas JSON ou outros formatos de dados esperados pelo banco de dados.
    • Teste: Tentar injetar operadores de consulta NoSQL (ex: $ne, $gt em MongoDB) em campos de entrada.
  • Command Injection (Injeção de Comando): Ocorre quando uma aplicação executa comandos do sistema operacional com base em entradas do usuário sem validação adequada.
    • Teste: Inserir comandos de sistema (ex: & ls, | cat /etc/passwd) em campos que podem ser usados para executar comandos no servidor.

Teste de Autenticação: Verificando a Identidade do Usuário

O Teste de Autenticação foca em como a aplicação verifica a identidade dos usuários:

  • Quebra de Credenciais: Tentar adivinhar senhas (força bruta, dicionário), usar credenciais padrão ou fracas.
  • Contornar a Autenticação: Tentar acessar áreas restritas sem login, manipular cookies de sessão.
  • Autenticação de Múltiplos Fatores (MFA): Testar a implementação do MFA, garantir que é segura e que não pode ser contornada.
  • Gerenciamento de Sessão Inadequado: Verificar se tokens de sessão são previsíveis, se não expiram corretamente ou se podem ser reutilizados após o logout.
  • Captura de Credenciais: Verificar se credenciais são enviadas de forma segura (HTTPS).

Teste de Autorização: Verificando Permissões de Acesso

O Teste de Autorização garante que usuários autenticados só possam acessar os recursos e funcionalidades para os quais têm permissão:

  • IDOR (Insecure Direct Object Reference): Tentar acessar recursos que pertencem a outros usuários ou entidades manipulando IDs em URLs ou parâmetros (ex: alterar user_id=123 para user_id=456).
  • Bypassing Authorization: Tentar acessar URLs ou funcionalidades restritas a outros perfis (ex: um usuário comum tentando acessar uma tela de administrador).
  • Privilege Escalation: Tentar elevar privilégios de usuário (ex: de usuário comum para administrador) através de manipulação de requisições ou falhas lógicas.

Explorando Vulnerabilidades: Técnicas e Ferramentas

A exploração de vulnerabilidades pode ser feita manualmente ou com ferramentas:

  • Testes Manuais/Exploratórios: Usar proxy interceptador como OWASP ZAP ou Burp Suite Community Edition para inspecionar e manipular requisições HTTP, identificando possíveis falhas de segurança.
  • Scanners de Vulnerabilidade (SAST/DAST):
    • SAST (Static Application Security Testing): Analisa o código-fonte em busca de padrões de vulnerabilidade antes da execução (ex: SonarQube).
    • DAST (Dynamic Application Security Testing): Testa a aplicação em execução, simulando ataques externos (ex: OWASP ZAP, Burp Suite, Tenable.io).
  • Ferramentas de Pentest: Kali Linux, Nmap (para escaneamento de portas), sqlmap (para injeção SQL automatizada), entre outras.
  • Análise de Configuração: Revisar arquivos de configuração do servidor, banco de dados e aplicação para identificar configurações inseguras ou senhas padrão.

Para o Q.A., o foco inicial deve ser em testes de segurança funcionais, utilizando proxies e entendendo os princípios do OWASP Top 10 para identificar as vulnerabilidades mais comuns e críticas.


Atividades: Para praticar testes de segurança e exploração de vulnerabilidades:

  • Execute e Relate Diferentes Explorações de Vulnerabilidades e Testes de Segurança:
    • Utilize uma aplicação propositalmente vulnerável (ex: OWASP Juice Shop, OWASP WebGoat, bWAPP, ou uma API de teste com vulnerabilidades conhecidas). Nunca pratique em aplicações reais de produção sem permissão explícita.
    • Foque nos ataques de injeção: Tente realizar ataques de injeção SQL ou NoSQL em campos de formulário.
    • Realize testes de autenticação:
      • Tente acessar áreas restritas sem login.
      • Tente usar senhas comuns ou senhas fracas.
      • Se possível, tente manipular cookies de sessão após o login.
    • Realize testes de autorização:
      • Tente o ataque de IDOR (Insecure Direct Object Reference) manipulando IDs em URLs ou parâmetros para acessar dados ou recursos de outros usuários.
      • Tente elevar privilégios (se o aplicativo tiver diferentes níveis de usuário, tente acessar funcionalidades de um perfil superior com um perfil de usuário comum).
    • Utilize o OWASP ZAP ou Burp Suite Community Edition como proxy para interceptar, modificar e reenviar requisições, auxiliando na exploração dessas vulnerabilidades.
    • Relate suas descobertas: Para cada vulnerabilidade encontrada, descreva o tipo de ataque, os passos para reproduzi-lo, o impacto potencial e, se possível, uma sugestão de mitigação. Crie um relatório de vulnerabilidades detalhado.

Qual a importância de realizar testes de segurança continuamente no ciclo de vida de desenvolvimento de software, em vez de apenas no final do projeto?