Atheris, een Python Code Testing Toolkit

Google onthuld onlangs de release van Atheris-project, dat is een ontwikkeling van een set open source tools geschoold voor fuzzing-tests van Python-code en extensies voor CPython geschreven in C / C ++.

El proyecto gebruikt een op libFuzzer gebaseerde engine en kan worden gebruikt in combinatie met de tools Address Sanitizer en Undefined Behavior Sanitizer om extra fouten op te sporen. De code is geopend onder de Apache 2.0-licentie.

Over Google Atheris

In de woorden van Google Atheris, het is een toolkit die kan worden gebruikt om automatisch fouten in Python-code en native extensies te vinden. Atheris is een 'dekkingsgestuurde' fuzzer, wat betekent dat Atheris herhaaldelijk verschillende inputs van je programma zal testen terwijl je het ziet draaien en interessante paden probeert te vinden.

Codebeoordeling wordt ondersteund voor Python 2.7 en Python 3.3+, maar voor volledige, begeleide dekking raden we aan om de Python 3.8 en 3.9 branches te gebruiken, die nu opcode-statistieken ondersteunen door opcode.

In het proces, Atheris somt mogelijke combinaties van invoergegevens op en genereert een rapport op alle gedetecteerde fouten en niet-gedetecteerde uitzonderingen.

Bij het controleren van de YAML-parseerbibliotheek in Atheris bleek bijvoorbeeld dat sommige YAML-constructies, zoals het specificeren van "-_" in plaats van een geheel getal of het gebruik van een lijst in plaats van een sleutel, een onverwachte uitzondering genereren in plaats van een YAMLE Fout in standaardfout.

De fuzz-test is een bekende techniek om programmeerfouten op te sporen. Veel van deze detecteerbare fouten hebben ernstige gevolgen voor de veiligheid. Google heeft duizenden beveiligingsproblemen en andere bugs gevonden bij het gebruik van deze techniek. Fuzzing wordt traditioneel gebruikt in moedertalen zoals C of C ++, maar vorig jaar hebben we een nieuwe Python fuzzing-engine gemaakt. Vandaag hebben we de Atheris-fuzzing-engine als open source uitgebracht.

Atheris kan ook worden gebruikt om verschillen in gedrag te identificeren van bibliotheken die zich op identieke taken richten. Een overzichtscontrole van het Python-pakket "idna" en de bibliotheek "libidn2", die de taak uitvoeren om geïnternationaliseerde domeinnamen te decoderen, ontdekte bijvoorbeeld dat ze niet altijd hetzelfde resultaat opleveren.

Een van de beste toepassingen voor Atheris is voor differentiële diffusors. Dit zijn fuzzers die zoeken naar verschillen in het gedrag van twee bibliotheken die hetzelfde moeten doen. Een van de voorbeeld-fuzzers die bij Atheris worden geleverd, doet precies dit om het "idna" -pakket van Python te vergelijken met het C "libidn2" -pakket.

In het bijzonder, als het domein Unicode-reeksen gebruikte, dan hebben "idna" en "libidn2" de geïnternationaliseerde domeinnaam omgezet in verschillende hosts.

Over het algemeen is Atheris nuttig in pure Python-code zolang je een manier hebt om uit te drukken wat het "juiste" gedrag is, of op zijn minst uit te drukken welk gedrag absoluut niet correct is. Dit kan zo complex zijn als aangepaste code in de fuzzer die de nauwkeurigheid van de uitvoer van een bibliotheek beoordeelt, of zo simpel als controleren of er geen onverwachte uitzonderingen zijn.

Het is belangrijk om daar rekening mee te houden fuzzing-tests genereren een stroom van allerlei willekeurige combinaties van invoergegevens, dicht bij de feitelijke gegevens (bijv. html-pagina's met willekeurige tagparameters, bestanden of afbeeldingen met abnormale koppen, enz.) en verhelp mogelijke storingen in het proces.

Als een reeks resulteert in een uitzondering of niet overeenkomt met de verwachte respons, duidt dit gedrag hoogstwaarschijnlijk op een bug of kwetsbaarheid.

Eindelijk, zoals gezegd Atheris werkt met Python-code in versie 2.7 en 3.3+, hoewel Google sterk aanbeveelt om 3.8+ en native extensies te gebruiken die zijn geschreven voor CPython.

Windows behoort nog niet tot de ondersteunde besturingssystemen, dus de engine is voorlopig alleen interessant voor Linux- en Mac OS X-gebruikers.

Om het op deze platforms te kunnen gebruiken, moeten ontwikkelaars een actuele versie van de Clang-compilerfrontend hebben geïnstalleerd.

Als je er meer over wilt weten, kunt u de originele notitie in het volgende link.


De inhoud van het artikel voldoet aan onze principes van redactionele ethiek. Klik op om een ​​fout te melden hier.

Wees de eerste om te reageren

Laat je reactie achter

Uw e-mailadres wordt niet gepubliceerd.

*

*

  1. Verantwoordelijk voor de gegevens: Miguel Ángel Gatón
  2. Doel van de gegevens: Controle SPAM, commentaarbeheer.
  3. Legitimatie: uw toestemming
  4. Mededeling van de gegevens: De gegevens worden niet aan derden meegedeeld, behalve op grond van wettelijke verplichting.
  5. Gegevensopslag: database gehost door Occentus Networks (EU)
  6. Rechten: u kunt uw gegevens op elk moment beperken, herstellen en verwijderen.