Gigitan ular: Berhati-hatilah dengan perpustakaan Python yang berniat jahat

Awal minggu ini, dua perpustakaan Python yang mengandungi kod jahat telah dikeluarkan dari Python Package Index (PyPI), repositori rasmi Python untuk pakej pihak ketiga.

Ini adalah penjelmaan terbaru dari masalah yang dihadapi oleh banyak komuniti pengembangan perisian moden, yang menimbulkan persoalan penting bagi semua pembangun yang bergantung pada perisian sumber terbuka: Bagaimana anda memungkinkan orang menyumbangkan kod mereka sendiri ke repositori umum untuk digunakan kembali , tanpa repos tersebut menjadi vektor serangan?

Pada umumnya, repositori perpustakaan pihak ketiga rasmi untuk bahasa dijalankan kerana projek sumber terbuka, seperti Python, selamat. Tetapi versi perpustakaan yang berniat jahat dapat merebak dengan cepat jika tidak dicentang. Dan hakikat bahawa kebanyakan repositori bahasa seperti itu diawasi oleh sukarelawan bermakna hanya banyak mata yang melihat dan sumbangan tidak selalu mendapat pengawasan yang diperlukan.

Dua paket jahat yang dikeluarkan dari PyPI minggu ini menggunakan tipu muslihat yang disebut "typo squatting", iaitu memilih nama yang cukup serupa dengan paket yang biasa digunakan untuk melupakan pemberitahuan, dan itu boleh mengakibatkan pemasangan secara tidak sengaja jika seseorang salah menamakan nama yang dimaksudkan. Mencuba untuk menyamar sebagai dateutildan jellyfishpaket - digunakan untuk memanipulasi objek Python datetime dan melakukan pertandingan yang hampir sama pada rentetan, masing-masing - paket jahat dinamakan  python-dateutildan jeIlyfish (dengan huruf besar I dan bukan huruf kecil pertama L).

Apabila dipasang,  python-dateutildan jeIlyfishberkelakuan sama seperti yang asli - kecuali untuk mencuba data peribadi dari pembangun. Paul Ganssle, seorang pengembang dateutilpasukan itu, memberitahu ZDNet bahawa kemungkinan penyebab serangan itu adalah untuk mengetahui projek apa yang diusahakan oleh mangsa, untuk melancarkan serangan kemudian pada projek-projek tersebut.

Perpustakaan Python pada umumnya jatuh ke dalam dua kubu - modul yang membentuk pustaka standard yang dihantar dengan runtime Python, dan pakej pihak ketiga yang dihoskan di PyPI. Walaupun modul di perpustakaan standard diperiksa dengan teliti dan diperiksa dengan teliti, PyPI jauh lebih terbuka dengan reka bentuk, yang membolehkan komuniti pengguna Python menyumbang paket secara bebas untuk digunakan semula.

Projek berniat jahat telah dijumpai di PyPI sebelum ini. Dalam satu kes, typo pakej berniat jahat menumpaskan kerangka Django, yang merupakan asas pengembangan web di Python. Tetapi masalahnya nampaknya semakin mendesak. 

"Sebagai anggota pasukan keselamatan Python (PSRT), saya mendapat laporan mengenai setinggan typo atau pakej berbahaya setiap minggu," kata Christian Heimes, pengembang inti Python, dalam forum perbincangan pembangunan rasmi Python. "(Fakta menyeronokkan: Terdapat empat utas e-mel mengenai kandungan berniat jahat di PyPI bulan ini dan hari ini baru 4 Dis.)" 

Python Software Foundation mempunyai rancangan untuk melindungi PyPI daripada penyalahgunaan, tetapi mereka akan mengambil masa untuk dilancarkan sepenuhnya. Awal tahun ini, pasukan Python melancarkan pengesahan dua faktor sebagai pilihan untuk pengguna PyPI yang memuat naik pakej. Itu memberikan lapisan perlindungan bagi pemaju yang memuat naik ke PyPI, menjadikannya lebih sukar untuk merampas akaun mereka dan memuat naik perisian hasad atas nama mereka. Tetapi ia tidak mengatasi masalah ketik jongkok atau penyalahgunaan umum.

Inisiatif lain termasuk mencari cara untuk mengimbangi masalah tersebut dengan automasi. Kumpulan kerja dalam Python Software Foundation yang mengendalikan pembungkusan telah menerima geran dari Facebook Research untuk membuat ciri keselamatan PyPI yang lebih maju, seperti penandaan kriptografi pakej PyPI, dan pengesanan muat naik berbahaya secara automatik (daripada pemeriksaan manual intensif buruh).

Pihak ketiga juga menawarkan perlindungan. Reversing Labs, sebuah firma keselamatan bebas, menemui serangan berdasarkan PyPI setelah melakukan imbasan seluruh repositori untuk format fail yang mencurigakan. Tetapi syarikat itu mengakui bahawa imbasan seperti itu bukan pengganti pemeriksaan dalaman. "Untuk sangat mengurangi kemungkinan hosting malware," tulis perusahaan itu, "repositori semacam itu akan mendapat keuntungan dari pemprosesan berterusan dan proses tinjauan yang lebih baik."

Penyelesaian terbaik, seperti yang diketahui oleh pemaju Python, mesti datang dari dalam.