Atheris, um kit de ferramentas de teste de código Python

Google revelado recentemente o lançamento de Projeto Atheris, que é um desenvolvimento de um conjunto de ferramentas de código aberto especializado para testes de difusão de código Python e extensões para CPython escritas em C / C ++.

O projeto usa um motor baseado em libFuzzer e pode ser usado em conjunto com as ferramentas Address Sanitizer e Undefined Behavior Sanitizer para detectar erros adicionais. O código está aberto sob a licença Apache 2.0.

Sobre o Google Atheris

Nas palavras do Google Atheris, é um kit de ferramentas que pode ser usado para localizar automaticamente erros no código Python e nas extensões nativas. Atheris é um fuzzer 'conduzido por cobertura', o que significa que Atheris tentará repetidamente várias entradas em seu programa enquanto o assiste e tenta encontrar caminhos interessantes.

A revisão de código para Python 2.7 e Python 3.3+ é compatível, mas para uma cobertura guiada completa, é recomendado usar os branches Python 3.8 e 3.9, que agora suportam estatísticas de opcode por opcode.

No processo, Atheris lista possíveis combinações de dados de entrada e gera um relatório em todas as falhas detectadas e exceções não detectadas.

Por exemplo, ao verificar a biblioteca de análise YAML no Atheris, descobriu-se que algumas construções YAML, como especificar "-_" em vez de um valor inteiro ou usar uma lista em vez de uma chave, lançam uma exceção inesperada em vez de um Erro padrão de YAMLErrors.

O teste fuzz é uma técnica bem conhecida para descobrir erros de programação. Muitos desses erros detectáveis ​​têm sérias implicações de segurança. O Google encontrou milhares de vulnerabilidades de segurança e outros bugs ao usar essa técnica. O fuzzing é tradicionalmente usado em linguagens nativas como C ou C ++, mas no ano passado criamos um novo mecanismo de fuzzing Python. Hoje, lançamos o motor de difusão Atheris como código aberto.

Atheris também pode ser usado para identificar diferenças de comportamento de bibliotecas que visam tarefas idênticas. Por exemplo, uma verificação resumida do pacote Python "idna" e da biblioteca "libidn2", que desempenha a tarefa de decodificar nomes de domínio internacionalizados, descobriu que eles nem sempre produzem o mesmo resultado.

Um dos melhores usos do Atheris é para difusores diferenciais. São fuzzers que procuram diferenças no comportamento de duas bibliotecas destinadas a fazer a mesma coisa. Um dos fuzzers de exemplo incluídos no Atheris faz exatamente isso para comparar o pacote "idna" do Python com o pacote C "libidn2".

Em particular, se o domínio usou sequências Unicode, então "idna" e "libidn2" converteram o nome de domínio internacionalizado em hosts diferentes.

Em geral, Atheris é útil em código Python puro, desde que tenha uma maneira de expressar qual é o comportamento "correto", ou pelo menos expressar quais comportamentos definitivamente não são corretos. Isso pode ser tão complexo quanto um código customizado no fuzzer que avalia a precisão da saída de uma biblioteca ou tão simples quanto verificar se nenhuma exceção inesperada foi levantada.

É importante levar em consideração que testes de difusão geram um fluxo de todos os tipos de combinações aleatórias de dados de entrada, perto dos dados reais (por exemplo, páginas html com parâmetros de tag aleatórios, arquivos ou imagens com títulos anormais, etc.) e consertar possíveis falhas no processo.

Se alguma sequência resultar em uma exceção ou não corresponder à resposta esperada, esse comportamento provavelmente indica um bug ou vulnerabilidade.

Finalmente, como mencionado Atheris funciona com código Python na versão 2.7 e 3.3+, embora o Google recomende fortemente o uso de 3.8+ e extensões nativas escritas para CPython.

O Windows ainda não está entre os sistemas operacionais suportados, então o mecanismo é de interesse apenas para usuários de Linux e Mac OS X por enquanto.

Para usá-lo nessas plataformas, os desenvolvedores devem ter uma versão atual do front-end do compilador Clang instalado.

Se você quiser saber mais sobre isso, você pode verificar a nota original no link a seguir


Deixe um comentário

Seu endereço de email não será publicado. Campos obrigatórios são marcados com *

*

*

  1. Responsável pelos dados: Miguel Ángel Gatón
  2. Finalidade dos dados: Controle de SPAM, gerenciamento de comentários.
  3. Legitimação: Seu consentimento
  4. Comunicação de dados: Os dados não serão comunicados a terceiros, exceto por obrigação legal.
  5. Armazenamento de dados: banco de dados hospedado pela Occentus Networks (UE)
  6. Direitos: A qualquer momento você pode limitar, recuperar e excluir suas informações.