Simple Science

Ciência de ponta explicada de forma simples

# Informática# Criptografia e segurança

Avançando Frameworks de Teste para Bibliotecas Criptográficas

Um novo framework melhora a eficiência dos testes e a detecção de bugs em bibliotecas criptográficas.

― 8 min ler


Avanço no Framework deAvanço no Framework deTestes Criptográficosbugs em bibliotecas criptográficas.Novo framework melhora a detecção de
Índice

Testar software de forma completa é crucial pra garantir que ele funcione direitinho, especialmente em bibliotecas criptográficas que lidam com informações sensíveis. Erro humano muitas vezes causa problemas no software, como programas que não checam o tamanho da entrada corretamente. Isso pode criar vulnerabilidades, permitindo acesso não desejado. Enquanto muitas linguagens de programação oferecem soluções pra esses problemas, a performance é chave na hora de escrever software criptográfico. Por isso, programadores costumam usar linguagens de baixo nível como C ou C++.

Uma maneira de garantir a correção do código de baixo nível é através de testes automatizados, que verificam a execução do programa sem intervenção humana, economizando tempo e dinheiro. Testes automatizados envolvem vários desafios, e a ideia é fornecer entradas pro programa ver se ele produz os resultados esperados.

Desafios nos Testes

Cobertura é um fator importante nos testes; ela mede quão bem um programa foi testado e identifica áreas que podem ter ficado sem teste. Fuzz Testing, ou fuzzing, é uma forma de teste automatizado que roda o software-alvo com entradas aleatórias pra encontrar erros.

Nos últimos anos, um tipo de fuzzing chamado fuzzing grey-box baseado em cobertura (CGF) surgiu. Essa técnica melhora o processo de teste adicionando marcadores especiais ao código, que ajudam a coletar dados sobre quanto do programa está sendo executado. À medida que mais feedback é coletado, o método usa esses dados pra identificar quais entradas mudar pra maximizar a cobertura.

No entanto, atingir metas de cobertura complexas pode ser pesado em termos de recursos. Pra enfrentar isso, pesquisadores exploraram diferentes métodos, como o uso de suporte de hardware ou execução simbólica.

Protocolo de Validação Criptográfica Automatizada (ACVP)

Em 1995, foi iniciado um programa pra validar módulos criptográficos, garantindo que funcionassem como esperado. A necessidade de ciclos de teste mais rápidos levou ao desenvolvimento do Protocolo de Validação Criptográfica Automatizada (ACVP). Esse protocolo permite testes automáticos de software ou módulos de hardware criptográficos. Ele inclui um formato universal pra dados de teste, facilitando o uso.

O ACVP envolve três componentes principais: um servidor, um proxy e um cliente. O servidor gerencia pedidos de dados de teste e validação, enquanto o proxy se conecta a sistemas offline pra retransmitir informações. O cliente se comunica diretamente com o sistema que tá sendo testado.

Os testes do ACVP cobrem várias primitivas criptográficas, e os testes são agrupados em conjuntos. Cada conjunto contém informações sobre o algoritmo, especificações revisadas e uma série de testes que detalham o que precisa ser executado. O módulo em exame deve responder a cada conjunto com um resultado estruturado.

Contribuições deste Trabalho

Esta pesquisa foca em criar um sistema abrangente pra gerar testes pra bibliotecas criptográficas. Esse sistema fornece um formato simples que é legível por humanos e flexível. Várias ferramentas interagem com o ACVP, mas muitas são escritas em C, levando a complexidade e falta de extensibilidade.

Pra melhorar isso, uma nova biblioteca foi desenvolvida usando Rust, conhecida por seu forte tipagem e foco em segurança. O projeto inclui:

  • Uma estrutura de software pra produzir e executar conjuntos de testes pra bibliotecas criptográficas.
  • Um método que aproveita a assistência humana pra melhorar a geração de vetores de teste.
  • Sugestões de melhorias pro formato ACVP, junto com novas especificações.

Os testes extensivos revelaram bugs que estavam ocultos na biblioteca criptográfica NSS da Mozilla, confirmando que a estrutura desenvolvida ajuda na detecção de bugs.

Trabalhos Relacionados

Fuzzing é um campo em constante evolução. Muitos fuzzers guiados por cobertura maduros competem por melhor performance. Aqui estão alguns exemplos:

  1. AFL++: Uma ferramenta de código aberto construída em versões anteriores do AFL. Usa feedback do código executado pra modificar entradas e busca melhor cobertura. No entanto, pode ter dificuldades com software criptográfico complexo devido à geração aleatória de entradas.

  2. LibFuzzer: Integrado ao framework de compilação LLVM, essa ferramenta realiza fuzzing ciente da estrutura. Embora gere testes abrangentes, ela também enfrenta desafios, especialmente em atender condições específicas de implementações criptográficas.

  3. Fuzztruction: Esse método melhora as saídas alterando o programa que as produz. Porém, exige a existência do programa original.

  4. Carpetfuzz: Essa ferramenta usa processamento de linguagem natural pra criar entradas a partir de documentação, embora dependa muito da presença de documentação relevante.

Apresentando a Estrutura de Geração de Testes ACVP

O ACVP fornece um formato de teste universal, mas há uma necessidade clara de software que possa facilmente adaptá-lo a várias bibliotecas criptográficas. A nova estrutura permite gerar testes com fuzzing, usando feedback pra validar bibliotecas.

A estrutura consiste em duas partes principais:

  • Runners: Esses adaptadores se conectam a bibliotecas de terceiros, fornecendo uma interface comum.
  • Biblioteca: Essa lógica compartilhada cuida da análise de testes ACVP e coordena com os runners.

Os usuários podem executar testes em um runner pra validar um módulo ou fazer fuzzing pra detectar problemas, melhorando assim o processo de teste pra qualquer biblioteca compilada pelo LLVM.

Abordagem de Fuzzing Híbrido

Fuzzing é eficaz pra descobrir erros a partir de entradas inesperadas, mas pode ter dificuldade em produzir cobertura profunda, já que muitas entradas são descartadas no início. Essa pesquisa implementa fuzzing híbrido, combinando um fuzzing mutante básico com um tradutor de casos de teste. Essa abordagem ajuda a produzir as entradas necessárias que atendem a condições específicas.

Ao empregar fuzzing híbrido, o sistema trabalha pra encontrar entradas profundas, enquanto a ajuda humana ajuda a navegar por partes desafiadoras. Como resultado, os conjuntos de testes gerados podem ser aplicados a outras bibliotecas, tornando o processo eficiente em diferentes plataformas.

Melhorando a Cobertura de Testes do NSS

A biblioteca NSS, usada por várias aplicações, passou por testes pra garantir que modificações no código não quebrassem a criptografia. Embora a biblioteca tenha passado em vários testes, melhorias adicionais foram implementadas com base neste trabalho.

Ao desenvolver um runner pro NSS, verificações adicionais foram introduzidas, garantindo que todas as partes do código sejam testadas adequadamente. O esforço visa cobrir mais aspectos da criptografia, incluindo geração de assinatura e população de chaves.

Descobrindo Bugs no NSS

Enquanto melhorava os testes do NSS, bugs foram descobertos que estavam anteriormente indetectados. Por exemplo, problemas relacionados a operações RSA surgiram, levando a acessos impróprios à memória. Embora esses bugs não tenham sido explorados em software existente, eles destacam a necessidade de casos de teste diversos pra cobrir eficazmente vários cenários extremos.

Os bugs encontrados durante os testes sublinham a importância de incluir uma ampla gama de casos de teste pra proteger o software contra potenciais vulnerabilidades. A metodologia fornecida pelo fuzzing híbrido permite que os pesquisadores cubram áreas desafiadoras que o teste tradicional pode perder.

Análise da Melhora de Cobertura

Medir cobertura geralmente envolve olhar pra porcentagem de código coberto durante os testes. O foco não tá apenas em quanto código é testado, mas também na quantidade de problemas que são descobertos ou evitados. Os testes envolvidos nesta pesquisa mostraram melhorias significativas em termos de cobertura.

O método híbrido permite que o processo de teste explore áreas do código que muitas vezes são difíceis de alcançar. Os resultados demonstram que a estrutura não só aumenta a cobertura, mas também melhora a qualidade geral do fuzzing, levando a uma descoberta mais eficaz de potenciais problemas.

Sugestões pra Melhorar o Formato de Vetor de Teste ACVP

Com base nas descobertas do processo de teste, recomendações foram feitas pra melhorar o formato de teste ACVP. Essas incluem:

  • Introduzir estruturas mais claras pra facilitar o parsing e processamento.
  • Tornar a criação de testes mais simples, permitindo dados compartilhados entre grupos de teste.

Essas mudanças visam melhorar a usabilidade geral do sistema ACVP, tornando mais fácil pros desenvolvedores implementar testes relacionados à criptografia.

Conclusão

Em resumo, uma nova estrutura de software foi desenvolvida pra analisar bibliotecas criptográficas de forma eficaz. O principal objetivo dessa iniciativa é identificar potenciais bugs dentro do código. Testes extensivos mostraram que essa abordagem produz testes eficientes e reutilizáveis entre várias bibliotecas. Além disso, a aplicação bem-sucedida da estrutura na biblioteca NSS ilustra sua eficácia em descobrir vulnerabilidades.

Esse projeto destaca a importância de testes cuidadosos e a necessidade de casos de teste diversos pra cobrir tanto condições padrão quanto extremas. Avançando, há muitas oportunidades pra expandir esse trabalho, incluindo o desenvolvimento de novas especificações e a automação de mais do processo de teste.

O apoio à ciência aberta e à pesquisa reprodutível é a base desses esforços, com o objetivo de permitir que outros pesquisadores se beneficiem das descobertas e ferramentas desenvolvidas nesse trabalho.

Mais de autores

Artigos semelhantes