Atheris, Python kod za testiranje koda

Google predstavio nedavno izdanje Atheris projekat, što je razvoj set alata otvorenog koda specijalizovani za fuzzing testove Python koda i ekstenzije za CPython napisane na C / C ++.

Projekat koristi motor zasnovan na libFuzzer i može se koristiti zajedno s alatima za dezinfekciju adresa i neodređenog ponašanja za otkrivanje dodatnih grešaka. Kôd je otvoren pod licencom Apache 2.0.

O Google Atherisu

Prema riječima Google Atherisa, to je set alata koji se može koristiti za automatsko pronalaženje grešaka u Python kodu i izvornim ekstenzijama. Atheris je fuzzer koji „pokreće pokrivenost“, što znači da će Atheris u više navrata pokušati razne ulaze u vašu emisiju dok gleda kako se prikazuje i 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štaj na svim otkrivenim greškama i neotkrivenim iznimkama.

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

Test fuzz je dobro poznata tehnika za otkrivanje programskih grešaka. Mnoge od ovih grešaka koje se mogu otkriti imaju ozbiljne sigurnosne implikacije. Google je pronašao hiljade sigurnosnih ranjivosti i drugih grešaka kada koristi ovu tehniku. Fuzzing se tradicionalno koristi u materinjim jezicima poput C ili C ++, ali prošle godine stvorili smo novi Python fuzzing engine. Danas smo izdali Atheris fuzzing motor kao otvoreni izvor.

Atheris može se koristiti i za utvrđivanje razlika u ponašanju biblioteka 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 čudaci koji traže razlike u ponašanju dvije biblioteke kojima je namijenjeno da rade istu stvar. Jedan od primjera fuzzera u paketu s Atherisom radi upravo to da bi usporedio Pythonov "idna" paket sa 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 ispravna. Ovo može biti jednako složeno kao prilagođeni kod u fuzzeru koji procjenjuje tačnost izlaza biblioteke ili jednostavno kao provjera da se ne stvaraju neočekivane iznimke.

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

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

Konačno, 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 izvorne ekstenzije napisane za CPython.

Windows još nije među podržanim operativnim sistemima, 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, možete provjeriti originalnu bilješku u sljedeći link.


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

Budite prvi koji komentarišete

Ostavite komentar

Vaša e-mail adresa neće biti objavljena.

*

*

  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 obavezi.
  5. Pohrana podataka: Baza podataka koju hostuje Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.