Atheris, orodje za testiranje kode Python

Google je predstavil pred kratkim sprostitev Projekt Atheris, kar je razvoj nabor odprtokodnih orodij specializirano za mehke teste kode Python in razširitve za CPython, napisane v jeziku C / C ++.

Projekt uporablja motor na osnovi libFuzzer in se lahko uporablja skupaj z orodji za razkuževanje naslovov in nedefinirano vedenje za odkrivanje dodatnih napak. Koda je odprta pod licenco Apache 2.0.

O Googlu Atheris

Po besedah ​​Google Atherisa gre za nabor orodij, ki ga lahko uporabljamo za samodejno iskanje napak v kodi Python in izvornih razširitvah. Atheris je "pokritost", kar pomeni, da bo Atheris večkrat preizkusil različne vnose v vašo oddajo, medtem ko jo bo gledal in poskušal najti zanimive poti.

Podprt je pregled kode za Python 2.7 in Python 3.3+, vendar je za popolno vodeno pokritost priporočljivo uporabiti veji Python 3.8 in 3.9, ki zdaj podpirata statistiko opcode po opcode.

V postopku, Atheris našteva možne kombinacije vhodnih podatkov in ustvari poročilo za vse zaznane napake in neodkrite izjeme.

Na primer, pri preverjanju knjižnice za razčlenjevanje YAML v Atherisu je bilo ugotovljeno, da nekateri konstrukti YAML, na primer podajanje "-_" namesto celoštevilčne vrednosti ali uporaba seznama namesto ključa, vržejo nepričakovano izjemo namesto Standardna napaka YAMLErrors.

Test fuzz je dobro znana tehnika za odkrivanje programskih napak. Mnoge od teh zaznavnih napak imajo resne varnostne posledice. Google je pri tej tehniki našel na tisoče varnostnih ranljivosti in drugih napak. Fuzzing se tradicionalno uporablja v maternih jezikih, kot sta C ali C ++, toda lani smo ustvarili nov Python fuzzing engine. Danes smo kot odprtokodni izdelek izdali motor Atheris, ki piha.

Atheris se lahko uporablja tudi za prepoznavanje razlik v vedenju knjižnic, ki ciljajo na enake naloge. Na primer, zbirno preverjanje paketa Python "idna" in knjižnice "libidn2", ki opravljata nalogo dekodiranja internacionaliziranih domenskih imen, je pokazalo, da ne dajejo vedno enakega rezultata.

Eden najboljših načinov uporabe Atherisa je za diferencialne difuzorje. To so zmede, ki iščejo razlike v vedenju dveh knjižnic, ki naj bi storile isto. Eden od primerov zmede v paketu z Atherisom počne ravno to, da primerja Pythonov paket "idna" s paketom C "libidn2".

Če je domena uporabljala zaporedja Unicode, sta "idna" in "libidn2" pretvorila internacionalizirano ime domene v različne gostitelje.

Na splošno je Atheris uporaben v čisti Pythonovi kodi, če ima način, da izrazi, kaj je "pravilno" vedenje, ali vsaj izrazi, katera vedenja zagotovo niso pravilna. To je lahko tako zapleteno kot koda po meri v fuzzerju, ki ocenjuje natančnost izhodov knjižnice, ali tako preprosto kot preverjanje, da ne pride do nepričakovanih izjem.

Pomembno je, da to upoštevamo fuzzing testi ustvarijo tok vseh vrst naključnih kombinacij vhodnih podatkov, blizu dejanskih podatkov (npr. html strani z naključnimi parametri oznak, datoteke ali slike z neobičajnimi naslovi itd.) in v postopku odpravite morebitne napake.

Če katero koli zaporedje povzroči izjemo ali se ne ujema s pričakovanim odzivom, to vedenje najverjetneje kaže na napako ali ranljivost.

Končno, kot omenjeno Atheris deluje s kodo Python v različicah 2.7 in 3.3+, čeprav Google močno priporoča uporabo 3.8+ in izvorne razširitve, napisane za CPython.

Windows še ni med podprtimi operacijskimi sistemi, zato motor za zdaj zanima le uporabnike Linuxa in Mac OS X.

Za uporabo na teh platformah morajo razvijalci imeti nameščeno trenutno različico vmesnika prevajalnika Clang.

Če želite vedeti več o tem, lahko preverite izvirno opombo v naslednja povezava.


Pustite svoj komentar

Vaš e-naslov ne bo objavljen. Obvezna polja so označena z *

*

*

  1. Za podatke odgovoren: Miguel Ángel Gatón
  2. Namen podatkov: Nadzor neželene pošte, upravljanje komentarjev.
  3. Legitimacija: Vaše soglasje
  4. Sporočanje podatkov: Podatki se ne bodo posredovali tretjim osebam, razen po zakonski obveznosti.
  5. Shranjevanje podatkov: Zbirka podatkov, ki jo gosti Occentus Networks (EU)
  6. Pravice: Kadar koli lahko omejite, obnovite in izbrišete svoje podatke.