Atheris, Kit Alat Ujian Kod Python

Google melancarkan baru-baru ini pembebasan Projek Atheris, yang merupakan pengembangan dari satu set alat sumber terbuka khusus untuk ujian kabur kod Python dan sambungan untuk CPython ditulis dalam C / C ++.

Projek itu menggunakan enjin berasaskan libFuzzer dan boleh digunakan bersama-sama dengan alat Sanitizer Alamat dan Penghapus Tingkah Laku Tidak Ditentukan untuk mengesan kesalahan tambahan. Kod dibuka di bawah lesen Apache 2.0.

Mengenai Google Atheris

Dalam kata-kata Google Atheris, ini adalah toolkit yang dapat digunakan untuk mencari kesalahan secara automatik dalam kod Python dan sambungan asli. Atheris adalah fuzzer 'didorong oleh liputan', yang bermaksud bahawa Atheris akan berulang kali mencuba pelbagai input ke rancangan anda sambil menontonnya berjalan dan berusaha mencari jalan yang menarik.

Ulasan kod untuk Python 2.7 dan Python 3.3+ disokong, tetapi untuk liputan berpandu penuh, disarankan untuk menggunakan cabang Python 3.8 dan 3.9, yang kini menyokong statistik opcode dengan opcode.

Dalam proses, Atheris menyenaraikan kemungkinan kombinasi data input dan menghasilkan laporan pada semua kesalahan yang dikesan dan pengecualian yang tidak dapat dikesan.

Sebagai contoh, semasa memeriksa perpustakaan penghuraian YAML di Atheris, didapati bahawa beberapa konstruksi YAML, seperti menentukan "-_" bukan nilai integer atau menggunakan senarai sebagai ganti kunci, membuang pengecualian yang tidak dijangka dan bukan Kesalahan standard YAMLErrors.

Ujian fuzz adalah teknik yang terkenal untuk mengetahui kesalahan pengaturcaraan. Sebilangan besar kesalahan yang dapat dikesan ini mempunyai implikasi keselamatan yang serius. Google telah menemui ribuan kelemahan keselamatan dan bug lain ketika menggunakan teknik ini. Fuzzing secara tradisional digunakan dalam bahasa ibunda seperti C atau C ++, tetapi tahun lalu kami membuat mesin Python fuzzing baru. Hari ini, kami mengeluarkan enjin Atheris fuzzing sebagai sumber terbuka.

Atheris juga boleh digunakan untuk mengenal pasti perbezaan tingkah laku perpustakaan yang menyasarkan tugas yang serupa. Sebagai contoh, pemeriksaan ringkasan pakej Python "idna" dan pustaka "libidn2", yang menjalankan tugas penyahkodan nama domain antarabangsa, mendapati bahawa mereka tidak selalu menghasilkan hasil yang sama.

Salah satu kegunaan terbaik untuk Atheris adalah untuk pembeza. Ini adalah fuzzers yang mencari perbezaan dalam tingkah laku dua perpustakaan yang dimaksudkan untuk melakukan perkara yang sama. Salah satu contoh fuzzers yang digabungkan dengan Atheris melakukan ini untuk membandingkan pakej "idna" Python dengan pakej C "libidn2".

Khususnya, jika domain menggunakan urutan Unicode, maka "idna" dan "libidn2" menukar nama domain yang diantarabangsakan ke host yang berbeza.

Secara umum, Atheris berguna dalam kod Python tulen selagi ia mempunyai cara untuk menyatakan apa yang "betul" tingkah laku, atau sekurang-kurangnya menyatakan tingkah laku mana yang pasti tidak betul. Ini bisa menjadi rumit seperti kod khusus dalam fuzzer yang menilai ketepatan output perpustakaan, atau sesederhana memeriksa bahwa tidak ada pengecualian yang tidak diharapkan.

Penting untuk mengambil kira bahawa ujian kabur menghasilkan aliran semua jenis kombinasi data input secara rawak, dekat dengan data sebenar (misalnya halaman html dengan parameter tag rawak, fail atau gambar dengan tajuk yang tidak normal, dll.) dan perbaiki kemungkinan gangguan dalam proses tersebut.

Sekiranya sebarang urutan menghasilkan pengecualian atau tidak sesuai dengan respons yang diharapkan, tingkah laku ini kemungkinan besar menunjukkan bug atau kerentanan.

Akhirnya, seperti yang disebutkan Atheris berfungsi dengan kod Python dalam versi 2.7 dan 3.3+, walaupun Google sangat mengesyorkan menggunakan 3.8+ dan peluasan asli yang ditulis untuk CPython.

Windows belum termasuk di antara sistem operasi yang disokong, jadi enjin hanya menarik bagi pengguna Linux dan Mac OS X buat masa ini.

Untuk menggunakannya di platform ini, pembangun mesti memasang versi depan dari Clang frontiler compiler.

Sekiranya anda ingin mengetahui lebih lanjut mengenainya, anda boleh menyemak nota asal di pautan berikut.


Kandungan artikel mematuhi prinsip kami etika editorial. Untuk melaporkan ralat, klik di sini.

Menjadi yang pertama untuk komen

Tinggalkan komen anda

Alamat email anda tidak akan disiarkan.

*

*

  1. Bertanggungjawab atas data: Miguel Ángel Gatón
  2. Tujuan data: Mengendalikan SPAM, pengurusan komen.
  3. Perundangan: Persetujuan anda
  4. Komunikasi data: Data tidak akan disampaikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Pangkalan data yang dihoskan oleh Occentus Networks (EU)
  6. Hak: Pada bila-bila masa anda boleh menghadkan, memulihkan dan menghapus maklumat anda.

bool(benar)