Atheris, інструментарый для тэставання кода Python

Google прадставіў нядаўна быў выпушчаны Праект Atheris, які з'яўляецца развіццём набор інструментаў з адкрытым зыходным кодам спецыялізаваны для недакладных тэстаў кода Python і пашырэнні для CPython, напісаныя на C / C ++.

У рамках праекта выкарыстоўвае рухавік на аснове libFuzzer і можа выкарыстоўвацца ў спалучэнні з інструментамі дэзінфекцыі адрасоў і нявызначанага паводзінаў для выяўлення дадатковых памылак. Код адкрыты пад ліцэнзіяй Apache 2.0.

Аб Google Atheris

Са слоў Google Atheris, гэта інструментарый, які можна выкарыстоўваць для аўтаматычнага пошуку памылак у кодзе Python і ўласных пашырэннях. Atheris - гэта сігналізатар, які ахоплівае ахоп, а гэта азначае, што Atheris будзе неаднаразова правяраць розныя ўваходы ў вашу праграму, назіраючы за яе выкананнем, і спрабаваць знайсці цікавыя шляхі.

Падтрымліваецца агляд кода для Python 2.7 і Python 3.3+, але для поўнага ахопу рэкамендуецца выкарыстоўваць галіны Python 3.8 і 3.9, якія цяпер падтрымліваюць статыстыку кодаў аперацый па кодзе.

У працэсе, Atheris пералічвае магчымыя камбінацыі ўваходных дадзеных і стварае справаздачу на ўсе выяўленыя няспраўнасці і не выяўленыя выключэнні.

Напрыклад, пры праверцы бібліятэкі разбору YAML у Atheris было ўстаноўлена, што некаторыя канструкцыі YAML, напрыклад, указанне "-_" замест цэлага значэння альбо выкарыстанне спіса замест ключа, выкідваюць нечаканае выключэнне замест Стандартная памылка YAMLErrors.

Тэст размытасці - добра вядомая методыка выяўлення памылак пры праграмаванні. Многія з гэтых выяўленых памылак маюць сур'ёзныя наступствы для бяспекі. Пры выкарыстанні гэтай тэхнікі Google выявіў тысячы слабых месцаў у бяспецы і іншых памылак. Fuzzing традыцыйна выкарыстоўваецца ў родных мовах, такіх як C або C ++, але ў мінулым годзе мы стварылі новы механізм разбурэння Python. Сёння мы выпусцілі распыляльны рухавік Atheris як адкрыты зыходны код.

Atheris таксама можа быць выкарыстана для выяўлення адрозненняў у паводзінах бібліятэк, арыентаваных на аднолькавыя задачы. Напрыклад, зводная праверка пакета Python "idna" і бібліятэкі "libidn2", якія выконваюць задачу дэкадавання інтэрнацыяналізаваных даменных імёнаў, выявіла, што яны не заўсёды даюць аднолькавы вынік.

Адзін з лепшых варыянтаў выкарыстання Atheris - дыферэнцыяльныя дыфузары. Гэта недарэчныя разведчыкі, якія шукаюць адрозненні ў паводзінах дзвюх бібліятэк, якія павінны рабіць адно і тое ж. Адзін з прыкладаў разладчыкаў, пастаўленых у камплекце з Atheris, робіць менавіта гэта для параўнання пакета "idna" Python з пакетам C "libidn2".

У прыватнасці, калі ў дамене выкарыстоўваліся Unicode-паслядоўнасці, "idna" і "libidn2" пераўтвараюць інтэрнацыяналізаванае даменнае імя ў розныя хасты.

Увогуле, Atheris карысны ў чыстым кодзе Python, пакуль у вас ёсць спосаб выказаць, што такое "правільнае" паводзіны, альбо, па меншай меры, выказаць, якое паводзіны дакладна не з'яўляецца правільным. Гэта можа быць гэтак жа складана, як і карыстацкі код у разборцы, які ацэньвае дакладнасць высновы бібліятэкі, альбо гэтак жа проста, як праверка адсутнасці нечаканых выключэнняў.

Важна ўлічваць гэта недакладныя тэсты генеруюць паток усіх відаў выпадковых камбінацый ўваходных дадзеных, блізка да рэальных дадзеных (напрыклад, html-старонкі з выпадковымі параметрамі тэгаў, файлы ці выявы з ненармальнымі загалоўкамі і г.д.) і выправіць магчымыя збоі ў працэсе.

Калі якая-небудзь паслядоўнасць прыводзіць да выключэння альбо не адпавядае чаканаму адказу, гэта паводзіны, хутчэй за ўсё, паказвае на памылку альбо ўразлівасць.

Нарэшце, як ужо згадвалася Atheris працуе з кодам Python у версіях 2.7 і 3.3+, хаця Google настойліва рэкамендуе выкарыстоўваць 3.8+ і ўласныя пашырэнні, напісаныя для CPython.

Windows яшчэ не ўваходзіць у лік падтрымоўваных аперацыйных сістэм, таму рухавік пакуль цікавы толькі карыстальнікам Linux і Mac OS X.

Каб выкарыстоўваць яго на гэтых платформах, распрацоўшчыкі павінны ўсталяваць бягучую версію інтэрфейсу кампілятара Clang.

Калі вы хочаце даведацца пра гэта больш, вы можаце праверыць арыгінальную нататку ў наступная спасылка.


Змест артыкула адпавядае нашым прынцыпам рэдакцыйная этыка. Каб паведаміць пра памылку, націсніце тут.

Будзьце першым, каб каментаваць

Пакіньце свой каментар

Ваш электронны адрас не будзе апублікаваны. Абавязковыя для запаўнення палі пазначаныя *

*

*

  1. Адказны за дадзеныя: Мігель Анхель Гатон
  2. Прызначэнне дадзеных: Кантроль спаму, кіраванне каментарыямі.
  3. Легітымнасць: ваша згода
  4. Перадача дадзеных: Дадзеныя не будуць перададзены трэцім асобам, за выключэннем юрыдычных абавязкаў.
  5. Захоўванне дадзеных: База дадзеных, размешчаная Occentus Networks (ЕС)
  6. Правы: у любы час вы можаце абмежаваць, аднавіць і выдаліць сваю інфармацыю.