In this article
Entenda as técnicas de teste de caixa cinza
Testar um software ajuda a revelar brechas, vulnerabilidades, riscos e ameaças que invasores mal-intencionados poderiam explorar e, assim, comprometer o software. Entre os vários métodos de teste de segurança de aplicações, o teste de caixa cinza (gray-box ou grey-box), também conhecido como teste translúcido, é um dos mais populares.
Entenda o teste de caixa cinza
O que é teste de caixa cinza?
O método de teste de caixa cinza combina técnicas de teste de caixa branca e caixa preta para verificar se produtos de software e aplicativos apresentam falhas e vulnerabilidades de segurança. Ele é útil para testar aplicativos baseados na web e pode ser aplicado em testes de integração, testes de penetração e testes de domínio. O teste de penetração de caixa cinza costuma ser realizado com acesso ao sistema, permitindo que quem testa lance ataques sofisticados para descobrir brechas no software.
No teste de caixa branca, os testadores conhecem o código-fonte e os componentes internos do software. Assim, podem testar a aplicação do ponto de vista de quem a desenvolve e alterar a estrutura interna ou o código para corrigir falhas. Já no teste de caixa preta, o usuário ou a ferramenta não tem conhecimento prévio da estrutura interna da aplicação; esse método se concentra nas camadas externas, às quais um invasor externo geralmente teria acesso. No teste de caixa cinza, o testador tem conhecimento parcial da aplicação em teste.
Como equilibra bem a eficiência do teste de caixa preta com a profundidade do teste de caixa branca, o teste de caixa cinza costuma ser o método preferido.
Exemplo de teste de caixa cinza
Para entender melhor o teste de caixa cinza, imagine uma aplicação web que exibe uma lista de publicações. Quando alguém clica em uma publicação, é redirecionado para uma página com mais informações sobre ela. Por exemplo, a estrutura da URL de uma página com os detalhes da publicação poderia ser www.example.com/post/title-of-the-post/12345, em que 12345 corresponde ao ID exclusivo da publicação no banco de dados.
Com uma abordagem de teste de caixa cinza, você pode seguir estas etapas:
Clique na publicação para verificar se ela realmente abre uma nova página.
Confira se o parâmetro de ID na URL da página corresponde ao ID da publicação recuperada do banco de dados.
Confira se usuários sem privilégios não conseguem manipular os parâmetros da URL para acessar dados não autorizados sobre a publicação.
Verifique se a integridade dos dados fornecidos foi preservada.
Já uma abordagem baseada apenas em teste de caixa preta envolveria:
Clique no link para verificar se ele abre uma nova página com mais informações sobre o artigo.
Nesse caso, porém, como o testador não tem acesso aos componentes internos da aplicação, é impossível saber se a publicação correta foi exibida além do que o usuário consegue verificar pela interface.
A principal diferença entre os testes de caixa branca e de caixa preta está na profundidade dos testes. Com técnicas de caixa branca, em que o testador tem acesso ao código-fonte, é possível verificar aspectos mais profundamente: você pode consultar os dados reais do código da aplicação para validar itens como a lógica, a integridade dos dados e muito mais.
O teste de caixa cinza combina a perspectiva de um invasor com o conhecimento da aplicação para descobrir vulnerabilidades.
Toda tecnologia e estrutura tem pontos fortes e fracos. Com o teste de caixa cinza, você pode usar esse conhecimento para realizar testes de intrusão em uma aplicação e criar ataques sofisticados que explorem esses pontos fracos. Por exemplo, se você sabe que a aplicação foi escrita em Java e usa a estrutura de logging do Java, pode testar se há vulnerabilidades do Log4J.
Comece a jogar Capture the Flag
Aprenda a resolver desafios de Capture the Flag assistindo à gravação sob demanda do nosso workshop virtual introdutório.
Caixa cinza vs. caixa branca vs. caixa preta: métodos de teste
Agora, vamos falar sobre as principais diferenças entre os três métodos: os testes de caixa branca, preta e cinza.
Nível de teste
O teste de caixa branca permite que um profissional de segurança teste uma aplicação com o máximo de conhecimento sobre ela. Já o teste de caixa preta avalia a aplicação do ponto de vista de um invasor externo, sem fornecer nenhuma informação. O teste de caixa cinza, por sua vez, avalia a aplicação com conhecimento parcial sobre ela.
Papel do testador
O teste de caixa branca geralmente é feito por desenvolvedores e testadores que escrevem ou entendem o código. O teste de caixa preta pode ser realizado por testadores que não conhecem a estrutura interna nem o código da aplicação. Já o teste de caixa cinza pode ser feito tanto por desenvolvedores quanto por profissionais de segurança.
Habilidades necessárias
O teste de caixa preta não exige necessariamente conhecimento da linguagem de programação usada e leva menos tempo. Já o teste de caixa branca pode exigir conhecimento aprofundado da linguagem e das tecnologias utilizadas e levar mais tempo. O teste de caixa cinza, por sua vez, exige conhecimento parcial da linguagem e das tecnologias utilizadas. Por isso, o teste de caixa branca é mais difícil do que os métodos de caixa cinza e de caixa preta.
Custo
Em termos de custo, o teste de caixa preta é o mais barato, mas geralmente revela menos vulnerabilidades. O teste de caixa branca é o mais caro e costuma revelar mais vulnerabilidades. Já o teste de caixa cinza fica no meio do caminho, tanto em custo quanto no número de vulnerabilidades encontradas.
Tipos de teste de caixa cinza
Agora, vamos conhecer os vários tipos de teste de caixa cinza.
Teste de matriz
O teste de matriz ajuda desenvolvedores e testadores a identificar as variáveis usadas por uma aplicação. Essa técnica também ajuda a encontrar variáveis redundantes ou sem uso.
Teste de regressão
O teste de regressão é um tipo de teste de desenvolvimento de software realizado após alterações no produto, para garantir que o software continue funcionando como esperado. Como as atualizações de software são feitas regularmente, esse teste ajuda a garantir que elas e outras mudanças não causem problemas em outras partes da aplicação.
Teste de padrões
Esse teste analisa a versão anterior do software para identificar padrões que levam a defeitos ou falhas. Esses problemas podem ajudar a identificar e prevenir ocorrências semelhantes na nova versão da aplicação.
Teste de arranjo ortogonal
Esse método estatístico de teste de desempenho oferece a máxima cobertura de código com o mínimo de casos de teste ao avaliar aplicações complexas.
O que testar em um teste de caixa cinza
Há vários aspectos importantes a testar em um teste de caixa cinza:
Falhas de segurança internas: teste a aplicação para encontrar brechas de segurança internas. Por exemplo, você pode testar ações restritas que só podem ser realizadas por usuários conectados com privilégios de funcionário ou membro.
Fluxo de entrada: teste e entenda como determinadas entradas percorrem a aplicação.
Validação de saída: detecte e teste se a saída esperada é retornada.
Caminho do código: teste se há caminhos de código interrompidos ou mal estruturados.
Loop condicional: teste o comportamento de um loop condicional.
Validação de acesso: verifique se apenas usuários com o nível de acesso adequado podem realizar uma ação. Por exemplo, você pode testar um endpoint que permite somente a usuários administradores excluir itens do inventário.
Técnicas de teste de caixa cinza
Com a evolução das ferramentas e dos processos de teste automatizado, ficou mais fácil executar testes em aplicações. Ferramentas como SAST, DAST e IAST permitem melhorar automaticamente a qualidade e a integridade do código com pouco esforço.
Além de contar com as ferramentas certas, realizar testes de caixa cinza exige conhecimento parcial e acesso ao código-fonte. Sem acesso ao código da aplicação, você fica limitado aos testes de caixa preta.
Estas são as etapas do teste de caixa cinza:
Seleção de entradas: identifique e escolha entradas para os métodos de teste de caixa branca e de caixa preta.
Identificação de saídas: identifique a saída esperada para as entradas selecionadas.
Identificação de caminhos: determine os caminhos principais ou todos os caminhos importantes para a etapa de teste. Anote as funções adicionais (subfunções) presentes no caminho, pois elas fazem parte das funções de teste principais em avaliações mais profundas.
Entrada da subfunção: identifique as entradas das subfunções escolhidas.
Saída da subfunção: identifique novamente a saída esperada das subfunções selecionadas.
Execução de casos de teste: verifique a precisão dos resultados executando um caso de teste para as subfunções.
Repetição: repita as etapas de 4 a 6 para as demais subfunções e funções.
Vantagens e desvantagens do teste de caixa cinza
O teste de caixa cinza é importante para testes de intrusão em aplicações, pois combina os pontos fortes dos testes de caixa preta e de caixa branca. Confira abaixo seus principais benefícios e limitações.
Vantagens:
Combina os benefícios dos testes de caixa branca e de caixa preta, melhorando a qualidade da aplicação.
Os testadores não precisam necessariamente ter amplo domínio de programação, embora seja necessário conhecer o código.
Melhora a colaboração entre testadores e desenvolvedores.
É altamente eficaz e não consome muito tempo.
Desvantagens:
Os testadores podem não ter acesso a todos os caminhos do código.
Pode ser difícil elaborar casos de teste.
Não é possível realizar um teste completo de caixa branca, pois o testador conhece apenas uma parte limitada da estrutura interna.
Adorado por desenvolvedores. Confiável para a segurança.
As ferramentas da Snyk, pensadas para desenvolvedores, oferecem segurança integrada e automatizada para atender às suas necessidades de governança e conformidade.
Conclusão
O teste de caixa cinza combina técnicas de caixa branca, como SAST, com métodos de caixa preta, como DAST. O teste de caixa preta procura vulnerabilidades e defeitos no código do ponto de vista de um invasor externo. Já a abordagem de caixa branca analisa o código-fonte em busca de vulnerabilidades que possam ser exploradas.