Guglo malkaŝis lastatempe la eldono de Projekto Atheris, kiu estas evoluo de aro de malfermfontaj iloj faka por malklarkonturaj testoj de Python-kodo kaj etendaĵoj por CPython skribitaj en C / C ++.
La projekto uzas libFuzzer-bazitan motoron kaj uzeblas kune kun la iloj de Adreso Sanigilo kaj Nedifinita Konduto Sanigilo por detekti aldonajn erarojn. La kodo estas malfermita laŭ la permesilo Apache 2.0.
Pri Google Atheris
Laŭ la vortoj de Google Atheris, ĝi estas ilaro uzebla por aŭtomate trovi erarojn en Python-kodo kaj denaskaj etendaĵoj. Atheris estas "kovrita pelilo", kio signifas, ke Atheris plurfoje provos diversajn enigaĵojn al via spektaklo dum ĝi spektas ĝin funkcii kaj provos trovi interesajn vojojn.
Kodo-revizio por Python 2.7 kaj Python 3.3+ estas subtenata, sed por plena gvidata priraportado, oni rekomendas uzi la Python 3.8 kaj 3.9-branĉojn, kiuj nun subtenas opkodajn statistikojn per opkodo.
En la procezo, Atheris listigas eblajn kombinaĵojn de eniraj datumoj kaj generas raporton pri ĉiuj eltrovitaj faŭltoj kaj nerimarkitaj esceptoj.
Ekzemple, kiam vi kontrolis la YAML-analizan bibliotekon en Atheris, oni trovis, ke iuj YAML-konstruoj, kiel ekzemple specifado de "-_" anstataŭ entjera valoro aŭ uzado de listo anstataŭ ŝlosilo, ĵetas neatenditan escepton anstataŭ YAMLErrors-normo eraro.
La fuzz-testo estas konata tekniko por malkovri programajn erarojn. Multaj el ĉi tiuj mezureblaj eraroj havas seriozajn sekurecajn implicojn. Google trovis milojn da sekurecaj vundeblecoj kaj aliajn cimojn uzante ĉi tiun teknikon. Fuzzing estas tradicie uzata en gepatraj lingvoj kiel C aŭ C ++, sed pasintjare ni kreis novan Python-fuzzing-motoron. Hodiaŭ ni publikigis la fuzan motoron Atheris kiel malfermfontecon.
Atheris povas ankaŭ esti uzata por identigi diferencojn de konduto de bibliotekoj celantaj identajn taskojn. Ekzemple, resuma kontrolo de la Python-pako "idna" kaj la biblioteko "libidn2", kiuj plenumas la taskon deĉifri internaciajn domajnajn nomojn, trovis, ke ili ne ĉiam produktas la saman rezulton.
Unu el la plej bonaj uzoj por Atheris estas por diferencialaj difuziloj. Ĉi tiuj estas fuzzers, kiuj serĉas diferencojn en la konduto de du bibliotekoj, kiuj celas fari la samon. Unu el la ekzemplaj fuzzers kun Atheris faras ĝuste ĉi tion por kompari la pakaĵon "idna" de Python kun la pako C "libidn2".
Aparte, se la domajno uzis unikodajn sekvencojn, tiam "idna" kaj "libidn2" konvertis la internaciigitan domajnan nomon al malsamaj gastigantoj.
Ĝenerale, Atheris utilas en pura Python-kodo kondiĉe ke vi havas manieron esprimi kio estas la "ĝusta" konduto, aŭ almenaŭ esprimi kiuj kondutoj sendube ne ĝustas. Ĉi tio povus esti tiel kompleksa kiel laŭmenda kodo en la fuzzer, kiu taksas la precizecon de la produktaĵo de biblioteko, aŭ tiel simple kiel kontroli, ke neniuj neatenditaj esceptoj leviĝas.
Gravas konsideri tion malklarkonturaj testoj generas fluon de ĉiaj hazardaj kombinaĵoj de eniraj datumoj, proksime al la realaj datumoj (ekzemple html-paĝoj kun hazardaj etikedaj parametroj, dosieroj aŭ bildoj kun nenormalaj titoloj ktp.) kaj riparu eblajn problemojn en la procezo.
Se iu sinsekvo rezultigas escepton aŭ ne kongruas kun la atendita respondo, ĉi tiu konduto plej verŝajne indikas cimon aŭ vundeblecon.
Fine, kiel menciite Atheris funkcias kun Python-kodo en la versio 2.7 kaj 3.3+, kvankam Google forte rekomendas uzi 3.8+ kaj denaskajn etendaĵojn verkitajn por CPython.
Vindozo ankoraŭ ne estas inter la subtenataj operaciumoj, do la motoro interesas nur uzantojn de Linukso kaj Mac OS X nuntempe.
Por uzi ĝin en ĉi tiuj platformoj, programistoj devas havi aktualan version de la interfaco de kompililo Clang instalita.
Se vi volas scii pli pri ĝi, vi povas kontroli la originalan noton en la sekva ligilo.