Atheris, Python kodini sinovdan o'tkazish uchun vositalar to'plami

Google ochildi yaqinda Atheris loyihasi, bu rivojlanishdir ochiq manbali vositalar to'plami ixtisoslashgan Python kodining sinovlari uchun va C / C ++ da yozilgan CPython uchun kengaytmalar.

Loyiha libFuzzer asosidagi dvigateldan foydalanadi va qo'shimcha xatolarni aniqlash uchun manzilni tozalash vositasi va aniqlanmagan xatti-harakatlarni tozalash vositalari bilan birgalikda ishlatilishi mumkin. Kod Apache 2.0 litsenziyasi ostida ochiq.

Google Atheris haqida

Google Atheris so'zlari bilan aytganda, bu Python kodi va mahalliy kengaytmalardagi xatolarni avtomatik ravishda topish uchun ishlatilishi mumkin bo'lgan vositalar to'plami. Atheris - bu "qamrab olinadigan" fuzzer, ya'ni "Atheris" dasturini ko'rishda bir necha bor turli xil ma'lumotlarni kiritishga harakat qiladi va qiziqarli yo'llarni topishga harakat qiladi.

Python 2.7 va Python 3.3+ uchun kodlarni ko'rib chiqish qo'llab-quvvatlanadi, ammo to'liq qo'llanma bilan qamrab olish uchun opcode statistikasini opcode orqali qo'llab-quvvatlaydigan Python 3.8 va 3.9 filiallaridan foydalanish tavsiya etiladi.

Jarayonda, Atheris kirish ma'lumotlarining mumkin bo'lgan kombinatsiyalarini ro'yxatlaydi va hisobot tuzadi aniqlangan barcha nosozliklar va aniqlanmagan istisnolar to'g'risida.

Masalan, Atheris-dagi YAML tahlil kutubxonasini tekshirishda ba'zi YAML konstruktsiyalari, masalan, tamsayı qiymati o'rniga "-_" ni belgilash yoki kalit o'rniga ro'yxatni ishlatish, kutilmagan holatlar o'rniga YAMLE xatolari standart xato.

Fuzz testi dasturlash xatolarini aniqlash uchun taniqli usuldir. Ushbu aniqlanadigan xatolarning aksariyati xavfsizlikka jiddiy ta'sir ko'rsatmoqda. Google ushbu texnikadan foydalanishda minglab xavfsizlik nuqsonlarini va boshqa xatolarni topdi. Fuzzing an'anaviy ravishda C yoki C ++ kabi ona tillarida qo'llaniladi, ammo o'tgan yili biz yangi Python fuzzing dvigatelini yaratdik. Bugun biz "Atheris" dvigatelini ochiq manba sifatida chiqardik.

Ateris xulq-atvoridagi farqlarni aniqlashda ham foydalanish mumkin bir xil vazifalarga yo'naltirilgan kutubxonalar. Masalan, xalqaro domen nomlarini dekodlash vazifasini bajaradigan "idna" Python to'plami va "libidn2" kutubxonasini qisqacha tekshirish natijasida ular har doim ham bir xil natija bermasligi aniqlandi.

Atheris uchun eng yaxshi foydalanishlardan biri bu diffuziyali diffuzorlar uchun. Bular xuddi shu narsani qilishga mo'ljallangan ikkita kutubxonaning xatti-harakatlaridagi farqlarni qidiradigan fuzzerlar. Piterning "idna" to'plamini C "libidn2" to'plami bilan taqqoslash uchun Atheris bilan birga keltirilgan namunalardan biri aynan shunday qiladi.

Xususan, agar domen Unicode ketma-ketligini ishlatgan bo'lsa, u holda "idna" va "libidn2" xalqaro domen nomini turli xostlarga o'zgartirgan.

Umuman olganda, Atheris "to'g'ri" xatti-harakatni ifodalash yoki hech bo'lmaganda qaysi xatti-harakatlar aniq emasligini ifoda etish uslubiga ega bo'lganingizda, toza Python kodida foydalidir. Bu kutubxona mahsulotining aniqligini baholaydigan fuzzerdagi maxsus kod kabi murakkab bo'lishi mumkin yoki kutilmagan istisnolar qo'yilmasligini tekshirish kabi oddiy bo'lishi mumkin.

Shuni hisobga olish muhimdir noaniq testlar kirish ma'lumotlarining har qanday tasodifiy birikmalar oqimini hosil qiladi, haqiqiy ma'lumotlarga yaqin (masalan, tasodifiy yorliq parametrlari bo'lgan HTML sahifalari, g'ayritabiiy sarlavhali fayllar yoki rasmlar va boshqalar) va bu jarayonda yuzaga kelishi mumkin bo'lgan nosozliklarni tuzatish.

Agar biron bir ketma-ketlik istisnoga olib keladigan bo'lsa yoki kutilgan javobga mos kelmasa, bu xatti-harakat, ehtimol, xato yoki zaiflikni ko'rsatadi.

Va nihoyat, aytib o'tilganidek Atheris 2.7 va 3.3+ versiyalarida Python kodi bilan ishlaydi, Google CPython uchun yozilgan 3.8+ va mahalliy kengaytmalarni ishlatishni qat'iy tavsiya qiladi.

Windows hali qo'llab-quvvatlanadigan operatsion tizimlar qatoriga kirmaydi, shuning uchun dvigatel hozircha faqat Linux va Mac OS X foydalanuvchilari uchun qiziq.

Uni ushbu platformalarda ishlatish uchun ishlab chiquvchilar Clang kompilyatorining oldingi versiyasini o'rnatgan bo'lishi kerak.

Agar siz bu haqda ko'proq bilmoqchi bo'lsangiz, asl yozuvni quyidagi havola.


Maqolaning mazmuni bizning printsiplarimizga rioya qiladi muharrirlik etikasi. Xato haqida xabar berish uchun bosing bu erda.

Birinchi bo'lib izohlang

Fikringizni qoldiring

Sizning email manzilingiz chop qilinmaydi.

*

*

  1. Ma'lumotlar uchun javobgardir: Migel Anxel Gaton
  2. Ma'lumotlarning maqsadi: SPAMni boshqarish, izohlarni boshqarish.
  3. Qonuniylashtirish: Sizning roziligingiz
  4. Ma'lumotlar haqida ma'lumot: qonuniy majburiyatlar bundan mustasno, ma'lumotlar uchinchi shaxslarga etkazilmaydi.
  5. Ma'lumotlarni saqlash: Occentus Networks (EU) tomonidan joylashtirilgan ma'lumotlar bazasi
  6. Huquqlar: istalgan vaqtda siz ma'lumotlaringizni cheklashingiz, tiklashingiz va o'chirishingiz mumkin.