Atheris, priručnik za testiranje Python koda

Google je predstavio nedavno izdanje Projekt Atheris, što je razvoj skup alata otvorenog koda specijalizirani za fuzzing testove Python koda i proširenja za CPython napisana na C / C ++.

Projekt koristi motor zasnovan na libFuzzeru a može se koristiti zajedno s alatima za dezinfekciju adresa i nedefiniranog ponašanja za otkrivanje dodatnih pogrešaka. Kôd je otvoren pod licencom Apache 2.0.

O Google Atherisu

Riječima Google Atherisa, to je alat koji se može koristiti za automatsko pronalaženje pogrešaka u Python kodu i izvornim proširenjima. Atheris je fuzzer koji se temelji na "pokrivanju", što znači da će Atheris u više navrata pokušati s različitim ulazima u vaš program dok ga gleda i kako će pokušati pronaći zanimljive staze.

Podržan je pregled koda za Python 2.7 i Python 3.3+, ali za potpunu vođenu pokrivenost preporučuje se upotreba Python 3.8 i 3.9 grana, koje sada podržavaju opcode statistike po opcodeu.

U procesu, Atheris navodi moguće kombinacije ulaznih podataka i generira izvješće na svim otkrivenim greškama i neotkrivenim iznimkama.

Na primjer, prilikom provjere YAML-ove biblioteke za raščlanjivanje u Atherisu, utvrđeno je da neki YAML-ovi konstrukti, poput navođenja "-_" umjesto cijele vrijednosti ili korištenja popisa umjesto ključa, bacaju neočekivanu iznimku umjesto Standardna pogreška YAMLErrors.

Fuzz test dobro je poznata tehnika za otkrivanje programskih pogrešaka. Mnoge od ovih uočljivih pogrešaka imaju ozbiljne sigurnosne implikacije. Google je pronašao tisuće sigurnosnih ranjivosti i drugih bugova kada se koristi ovom tehnikom. Fuzzing se tradicionalno koristi u materinjim jezicima kao što su C ili C ++, ali prošle godine stvorili smo novi Python fuzzing engine. Danas smo izdali Atheris fuzzing motor kao otvoreni izvor.

Atheris također se može koristiti za utvrđivanje razlika u ponašanju knjižnica koje ciljaju identične zadatke. Na primjer, sumarna provjera Python paketa "idna" i biblioteke "libidn2", koji izvršavaju zadatak dekodiranja internacionaliziranih imena domena, utvrdila je da ne daju uvijek isti rezultat.

Jedna od najboljih upotreba Atherisa su diferencijalni difuzori. To su nejasnoće koje traže razlike u ponašanju dviju knjižnica koje bi trebale raditi isto. Jedan od primjera fuzzera u paketu s Atherisom čini upravo to da usporedi Pythonov "idna" paket s C "libidn2" paketom.

Konkretno, ako je domena koristila Unicode sekvence, tada su "idna" i "libidn2" pretvorili internacionalizirano ime domene u različite hostove.

Općenito, Atheris je koristan u čistom Python kodu sve dok ima način da izrazi "ispravno" ponašanje ili barem izrazi koja ponašanja definitivno nisu točna. To može biti jednako složeno kao prilagođeni kod u fuzzeru koji procjenjuje točnost izlaza knjižnice ili jednostavno kao provjera da se ne stvaraju neočekivane iznimke.

Važno je uzeti u obzir da fuzzing testovi generiraju tok svih vrsta slučajnih kombinacija ulaznih podataka, blizu stvarnih podataka (na primjer html stranice s slučajnim parametrima oznaka, datoteke ili slike s abnormalnim zaglavljima itd.) i popravite moguće greške u procesu.

Ako bilo koja sekvenca rezultira iznimkom ili se ne podudara s očekivanim odgovorom, ovo ponašanje najvjerojatnije ukazuje na grešku ili ranjivost.

Napokon, kao što je spomenuto Atheris radi s Python kodom u verzijama 2.7 i 3.3+, iako Google toplo preporučuje upotrebu 3.8+ i nativne ekstenzije napisane za CPython.

Windows još nije među podržanim operativnim sustavima, tako da je motor za sada zanimljiv samo korisnicima Linuxa i Mac OS X-a.

Da bi ga koristili na ovim platformama, programeri moraju imati instaliranu trenutnu verziju sučelja kompajlera Clang.

Ako želite znati više o tome, izvornu bilješku možete provjeriti u sljedeći link.


Sadržaj članka pridržava se naših načela urednička etika. Da biste prijavili pogrešku, kliknite ovdje.

Budite prvi koji će komentirati

Ostavite svoj komentar

Vaša email adresa neće biti objavljen. Obavezna polja su označena s *

*

*

  1. Za podatke odgovoran: Miguel Ángel Gatón
  2. Svrha podataka: Kontrola neželjene pošte, upravljanje komentarima.
  3. Legitimacija: Vaš pristanak
  4. Komunikacija podataka: Podaci se neće dostavljati trećim stranama, osim po zakonskoj obvezi.
  5. Pohrana podataka: Baza podataka koju hostira Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.