A Google bemutatta nemrégiben megjelent Atheris projekt, amely a nyílt forráskódú eszközök halmaza specializált a Python kód fuzzing tesztjeihez és a CPython kiterjesztései C / C ++ nyelven írva.
A projekt libFuzzer alapú motort használ és a Cím-fertőtlenítő és a Meghatározatlan viselkedés-fertőtlenítő eszközökkel együtt használható további hibák felderítésére. A kód az Apache 2.0 licenc alatt van megnyitva.
A Google Atherisről
A Google Atheris szavaival élve, ez egy olyan eszköztár, amellyel automatikusan megtalálhatók a hibák a Python-kódban és a natív kiterjesztésekben. Az Atheris egy „lefedettség által vezérelt” fuzzer, ami azt jelenti, hogy Atheris többször is kipróbálja a műsor különböző bemeneteit, miközben nézi a futást, és megpróbál érdekes utakat találni.
A Python 2.7 és a Python 3.3+ kódok felülvizsgálata támogatott, de a teljes irányított lefedettség érdekében ajánlott a Python 3.8 és 3.9 elágazások használata, amelyek most opcode alapján támogatják az opcode statisztikákat.
A folyamat, Az Atheris felsorolja a bemeneti adatok lehetséges kombinációit, és jelentést készít minden észlelt hibáról és észrevétlen kivételről.
Például az Atheris-ben a YAML-elemző könyvtár ellenőrzésekor kiderült, hogy egyes YAML-konstrukciók, például egész szám helyett "-_" -t adnak meg, vagy kulcs helyett listát használnak, váratlan kivételt dobnak egy YAMLEhiba a standard hiba.
A fuzz teszt egy jól ismert technika a programozási hibák feltárására. Ezen észlelhető hibák közül sok komoly biztonsági következményekkel jár. A Google több ezer biztonsági rést és egyéb hibát talált a technika alkalmazásakor. A Fuzzing-et hagyományosan olyan anyanyelveken használják, mint a C vagy a C ++, de tavaly létrehoztunk egy új Python fuzzing motort. Ma nyílt forráskódként adtuk ki az Atheris fuzzing motorját.
atheris a viselkedésbeli különbségek azonosítására is használható az azonos feladatokat megcélzó könyvtárak közül. Például az "idna" Python csomag és a "libidn2" könyvtár összefoglaló ellenőrzése, amelyek a nemzetközivé vált tartománynevek dekódolását végzik, megállapították, hogy ezek nem mindig eredményezik ugyanazt az eredményt.
Az Atheris egyik legjobb felhasználási területe a differenciál diffúzorok. Ezek olyan fuzzerek, amelyek különbségeket keresnek két könyvtár viselkedésében, amelyek ugyanazt a célt szolgálják. Az Atheris-szel összekapcsolt egyik fuzzer pontosan ezt teszi, hogy összehasonlítsa a Python "idna" csomagját a C "libidn2" csomaggal.
Különösen, ha a tartomány Unicode szekvenciákat használt, akkor az "idna" és a "libidn2" a nemzetközivé vált tartománynevet különböző gazdagé alakította.
Általánosságban elmondható, hogy az Atheris tiszta Python-kódban hasznos, amennyiben képes kifejezni a "helyes" viselkedést, vagy legalábbis kifejezni, hogy melyik viselkedés biztosan nem helyes. Ez lehet olyan bonyolult, mint az egyedi kód a fuzzerben, amely értékeli a könyvtár kimenetének pontosságát, vagy olyan egyszerű, mint annak ellenőrzése, hogy nincsenek-e váratlan kivételek.
Fontos ezt figyelembe venni a fuzzing tesztek a bemenő adatok mindenféle véletlenszerű kombinációjának áramát generálják, közel a tényleges adatokhoz (pl. véletlenszerű címkeparaméterekkel rendelkező HTML-oldalak, rendellenes fejlécű fájlok vagy képek stb.), és javítsák ki a folyamat lehetséges hibáit.
Ha bármelyik szekvencia kivételt eredményez, vagy nem felel meg a várt válasznak, akkor ez a viselkedés valószínűleg hibát vagy sebezhetőséget jelez.
Végül, mint említettük Az Atheris Python kóddal működik a 2.7 és 3.3+ verziókban, bár a Google határozottan javasolja a 3.8+ és a CPython számára írt natív kiterjesztések használatát.
A Windows még nem tartozik a támogatott operációs rendszerek közé, így a motor egyelőre csak a Linux és a Mac OS X felhasználóit érdekli.
Ezen platformokon történő használatához a fejlesztőknek telepíteniük kell a Clang fordító frontendjének aktuális verzióját.
Ha többet szeretne tudni róla, ellenőrizheti az eredeti jegyzetet a következő link.