Serangan terbaru pada pengguna PyPI menunjukkan penjahat hanya menjadi lebih baik

Lebih dari 400 paket jahat baru-baru ini diunggah ke PyPI (Python Package deal Index), gudang kode resmi untuk bahasa pemrograman Python, dalam indikasi terbaru bahwa penargetan pengembang perangkat lunak yang menggunakan bentuk serangan ini bukanlah iseng-iseng.

Semua 451 paket yang ditemukan baru-baru ini oleh firma keamanan Phylum berisi muatan berbahaya yang hampir identik dan diunggah secara beruntun yang datang secara berurutan. Setelah diinstal, paket membuat ekstensi JavaScript berbahaya yang dimuat setiap kali browser dibuka pada perangkat yang terinfeksi, sebuah trik yang membuat malware tetap bertahan selama reboot.

JavaScript memantau clipboard pengembang yang terinfeksi untuk setiap alamat cryptocurrency yang dapat disalin ke sana. Saat alamat ditemukan, malware menggantinya dengan alamat milik penyerang. Tujuannya: mencegat pembayaran yang ingin dilakukan pengembang ke pihak lain.

Pada bulan November, Phylum mengidentifikasi lusinan paket, diunduh ratusan kali, yang menggunakan JavaScript yang disandikan tinggi untuk secara diam-diam melakukan hal yang sama. Secara khusus, itu:

  • Membuat textarea pada halaman
  • Menempelkan konten clipboard apa pun ke dalamnya
  • Menggunakan serangkaian ekspresi reguler untuk mencari format alamat mata uang kripto yang umum
  • Mengganti alamat yang teridentifikasi dengan alamat yang dikontrol penyerang di textarea yang dibuat sebelumnya
  • Menyalin textarea ke clipboard

“Jika suatu saat pengembang yang dikompromikan menyalin alamat dompet, paket jahat akan mengganti alamat tersebut dengan alamat yang dikendalikan penyerang,” tulis Kepala Teknis Filum Louis Lang di pos November. “Penemuan/penggantian secara sembunyi-sembunyi ini akan menyebabkan pengguna akhir secara tidak sengaja mengirimkan dana mereka ke penyerang.”

Metode kebingungan baru

Selain sangat meningkatkan jumlah paket berbahaya yang diunggah, kampanye terbaru juga menggunakan cara yang sangat berbeda untuk menutupi jejaknya. Sedangkan paket yang diungkapkan pada bulan November menggunakan pengkodean untuk menyembunyikan perilaku JavaScript, paket baru menulis fungsi dan pengidentifikasi variabel dalam apa yang tampak sebagai kombinasi 16-bit acak dari ideograf bahasa Mandarin yang ditemukan dalam tabel berikut:

Titik kode Unicode Tulisan gambar Definisi
0x4eba pria; rakyat; umat manusia; orang lain
0x5200 pisau; koin lama; ukuran
0x53e3 mulut; ujung terbuka; gerbang masuk
0x5973 wanita, gadis; wanita
0x5b50 anak; buah, biji
0x5c71 gunung, bukit, puncak
0x65e5 matahari; hari; siang hari
0x6708 bulan; bulan
0x6728 pohon; kayu, kayu; kayu
0x6c34 air, cairan, losion, jus
0x76ee mata; lihat, lihat; pembagian, topik
0x99ac kuda; nama belakang
0x9a6c kuda; nama belakang
0x9ce5 burung
0x9e1f burung

Menggunakan tabel ini, baris kode

''.be a part of(map(getattr(__builtins__, oct.__str__()[-3 << 0] + hex.__str__()[-1 << 2] + copyright.__str__()[4 << 0]), [(((1 << 4) - 1) << 3) - 1, ((((3 << 2) + 1)) << 3) + 1, (7 << 4) - (1 << 1), ((((3 << 2) + 1)) << 2) - 1, (((3 << 3) + 1) << 1)]))

membuat fungsi bawaan chr dan memetakan fungsi ke daftar bilangan bulat [119, 105, 110, 51, 50]. Kemudian garis menggabungkannya menjadi sebuah string yang akhirnya tercipta 'win32'.

Peneliti filum menjelaskan:

Kita bisa melihat serangkaian panggilan semacam ini oct.__str__()[-3 << 0]. Itu [-3 << 0] mengevaluasi ke [-3] Dan oct.__str__() mengevaluasi ke string '<built-in perform oct>'. Menggunakan operator indeks Python [] pada string dengan a -3 akan mengambil karakter ke-3 dari akhir string, dalam hal ini '<built-in perform oct>'[-3] akan mengevaluasi ke 'c'. Melanjutkan ini pada 2 lainnya di sini memberi kita 'c' + 'h' + 'r' dan hanya mengevaluasi aritmatika bitwise kompleks yang ditempelkan pada akhirnya membuat kita memiliki:

''.be a part of(map(getattr(__builtins__, 'c' + 'h' + 'r'), [119, 105, 110, 51, 50]))

Itu getattr(__builtins__, 'c' + 'h' + 'r') hanya memberi kita fungsi bawaan chr dan kemudian memetakan chr ke daftar int [119, 105, 110, 51, 50] dan kemudian menggabungkan semuanya menjadi sebuah string yang akhirnya memberi kita 'win32'. Teknik ini dilanjutkan sepanjang keseluruhan kode.

Sambil memberikan tampilan kode yang sangat dikaburkan, teknik ini pada akhirnya mudah dikalahkan, kata para peneliti, hanya dengan mengamati apa yang dilakukan kode saat dijalankan.

Batch terbaru dari paket berbahaya mencoba memanfaatkan kesalahan ketik yang dibuat pengembang saat mengunduh salah satu dari paket yang sah ini:

  • bitcoinlib
  • ccxt
  • cryptocompare
  • cryptofeed
  • freqtrade
  • selenium
  • solana
  • vyper
  • soket net
  • yfinance
  • panda
  • matplotlib
  • aiohttp
  • beautifulsoup
  • tensorflow
  • selenium
  • scrapy
  • colorama
  • scikit-belajar
  • pytorch
  • pygame
  • pyinstaller

Paket yang menargetkan paket vyper yang sah, misalnya, menggunakan 13 nama file yang menghilangkan atau menggandakan satu karakter atau mengubah urutan dua karakter dari nama yang benar:

  • yper
  • vper
  • vyer
  • vype
  • vvyper
  • vyyper
  • vypper
  • vypeer
  • vyperr
  • yvper
  • vpyer
  • vyepr
  • vypre

“Teknik ini sangat mudah untuk diotomatisasi dengan skrip (kami membiarkan ini sebagai latihan untuk pembaca), dan seiring bertambahnya panjang nama paket yang sah, demikian juga kemungkinan kesalahan ketik,” tulis para peneliti. “Misalnya, sistem kami mendeteksi 38 kesalahan ketik dari cryptocompare paket diterbitkan hampir bersamaan oleh nama pengguna pinigin.9494.”

Ketersediaan paket berbahaya dalam repositori kode resmi yang sangat mirip dengan nama paket resmi dimulai setidaknya pada tahun 2016 ketika seorang mahasiswa mengunggah 214 paket jebakan ke repositori PyPI, RubyGems, dan NPM yang berisi nama paket sah yang sedikit dimodifikasi . Hasilnya: Kode penipu dieksekusi lebih dari 45.000 kali di lebih dari 17.000 area terpisah, dan lebih dari setengahnya diberikan hak administratif yang sangat kuat. Apa yang disebut serangan typosquatting telah berkembang sejak saat itu.

Nama dari semua 451 paket berbahaya yang ditemukan para peneliti Phylum disertakan dalam postingan weblog. Ini bukan ide yang buruk bagi siapa pun yang bermaksud mengunduh salah satu paket sah yang ditargetkan untuk memeriksa ulang apakah mereka tidak secara tidak sengaja mendapatkan doppelganger berbahaya.