Atheris, un kit d'eines de prova de codi de Python

Google va donar a conèixer recentment l'alliberament de l' projecte Atheris, El qual és un desenvolupament de un conjunt d'eines Open Source especialitzat per a proves fuzzing de codi Python i extensions per CPython escrit en C / C ++.

El Projecte utilitza un motor basat en libFuzzer i es pot utilitzar juntament amb les eines Address Sanitizer i Undefined Behavior Sanitizer per detectar errors addicionals. El codi està obert sota la llicència Apache 2.0.

Sobre Google Atheris

A paraules de Google Atheris, és un kit d'eines que es pot fer servir per trobar errors automàticament en el codi Python i les extensions natives. Atheris és un fuzzer »guiat per cobertura», el que significa que Atheris provarà repetidament diverses entrades al seu programa mentre observa com s'executa i intentarà trobar camins interessants.

S'admet la revisió de codi per Python 2.7 i Python 3.3+, Però per a una cobertura completa guiada, es recomana utilitzar les branques de Python 3.8 i 3.9, que ara admeten estadístiques de codi d'operació per codi d'operació.

En el procés, Atheris enumera possibles combinacions de dades d'entrada i genera un informe sobre totes les falles detectades i excepcions no detectades.

Per exemple, a l'verificar la biblioteca d'anàlisi YAML en Atheris, es va trobar que algunes construccions YAML, com especificar «-_» en lloc d'un valor sencer o utilitzar una llista en lloc d'una clau, llancen una excepció inesperada en lloc d'un error estàndard de YAMLErrors.

La prova d'fuzz és una tècnica ben coneguda per descobrir errors de programació. Molts d'aquests errors detectables tenen serioses implicacions de seguretat. Google ha trobat milers de vulnerabilitats de seguretat i altres errors a l'utilitzar aquesta tècnica. Fuzzing s'usa tradicionalment en llenguatges nadius com C o C ++, però l'any passat vam crear un nou motor de fuzzing Python. Avui, llancem el motor de fuzzing Atheris com a codi obert.

Atheris també es pot utilitzar per identificar diferències en el comportament de biblioteques que tenen com a objectiu tasques idèntiques. Per exemple, una verificació resumida el paquet Python «IDNA» i la biblioteca «libidn2», que realitzen la tasca de descodificar els noms de domini internacionalitzats, va trobar que no sempre produeixen el mateix resultat.

Un dels millors usos de Atheris és per difusors diferencials. Aquests són fuzzers que busquen diferències en el comportament de dues biblioteques que estan destinades a fer el mateix. Un dels fuzzers d'exemple empaquetats amb Atheris fa exactament això per comparar el paquet «IDNA» de Python amb el paquet «libidn2» de C.

En particular, si el domini va usar seqüències Unicode, llavors «IDNA» i «libidn2» van convertir el nom de domini internacionalitzat a diferents hosts.

En general, Atheris és útil en codi Python pur sempre que tingui una forma d'expressar quin és el comportament «correcte», o al menys expressar quins comportaments definitivament no són correctes. Això podria ser tan complex com el codi personalitzat en el fuzzer que avalua l'exactitud de la sortida d'una biblioteca, o tan simple com verificar que no hi hagi excepcions inesperadas.están alçades.

És important tenir en compte que les proves d'fuzzing generen un flux de tota mena de combinacions aleatòries de dades d'entrada, a prop de les dades reals (per exemple, pàgines html amb paràmetres d'etiquetes aleatoris, arxius o imatges amb encapçalats anormals, etc.) i corregeixen possibles falles en el procés.

Si alguna seqüència dóna com a resultat una excepció o no coincideix amb la resposta esperada, és molt probable que aquest comportament indiqui un error o vulnerabilitat.

Finalment, tal com es va esmentar Atheris funciona amb codi Python en la versió 2.7 i 3.3+, encara que Google recomana encaridament utilitzar 3.8+ i extensions natives escrites per CPython.

Windows encara no es troba entre els sistemes operatius compatibles, De manera que el motor només és d'interès per als usuaris de Linux i Mac OS X per ara.

Per emprar-lo en aquestes plataformes, els desenvolupadors han de tenir instal·lada una versió actual de l'frontend de l'compilador Clang.

Si vols conèixer més a l'respecte, Pots consultar la nota original al següent enllaç.


Sigues el primer a comentar

Deixa el teu comentari

La seva adreça de correu electrònic no es publicarà. Els camps obligatoris estan marcats amb *

*

*

  1. Responsable de les dades: Miguel Ángel Gatón
  2. Finalitat de les dades: Controlar l'SPAM, gestió de comentaris.
  3. Legitimació: El teu consentiment
  4. Comunicació de les dades: No es comunicaran les dades a tercers excepte per obligació legal.
  5. Emmagatzematge de les dades: Base de dades allotjada en Occentus Networks (UE)
  6. Drets: En qualsevol moment pots limitar, recuperar i esborrar la teva informació.