Pengarang: Kseniia Yamburh, Jurutera Penyelidikan Perisian Hasad di Moonlock oleh MacPaw & Mykhailo Pazyniuk, Jurutera Penyelidikan Perisian Hasad di Moonlock oleh MacPaw
Perisian sumber terbuka adalah asas kepada inovasi tetapi juga membuka pintu kepada eksploitasi. Baru-baru ini, penyelidik Checkmarx
Di Moonlock, di mana kami menumpukan pada melindungi pengguna macOS, kami tahu kami perlu mendalami yang ini. Semasa kami membongkar lapisan, penemuan kami membawa kami ke 10 repositori tambahan - setiap satu berkongsi kod yang hampir sama, dengan variasi halus. Adakah ini kerja penempatan automatik? Kempen yang diselaraskan? Begini cara penyiasatan berlaku.
Kisah ini bermula dengan "Meme-Token-Hunter-Bot," nampaknya hanya alat utiliti lain untuk peminat crypto. READMEnya mengarahkan pengguna untuk melaksanakan main.py, fail yang biasanya memulakan fungsi utama dalam kebanyakan aplikasi berasaskan Python. Mengikuti arahan, kami menyelidiki main.py, hanya untuk mendapati ia memanggil skrip pembantu yang dipanggil base_helper.py. Fail pembantu ini akan menjadi asas penyiasatan kami.
Untuk mendapatkan pemahaman yang lebih jelas tentang cara Meme-Token-Hunter-Bot melaksanakan serangannya, kami melakar carta alir yang menunjukkan setiap langkah proses perisian hasad, daripada persediaan awal hingga penyusutan data. Perwakilan visual ini mendedahkan lapisan pengekodan dan taktik bersembunyi yang dibenamkan dalam pakej, menawarkan pandangan penuh tentang cara ia beroperasi.
Carta alir kami bermula dengan main.py, titik permulaan yang memanggil base_helper.py jika pakej mengesan ia berjalan pada macOS.
Fail ini termasuk URL dan nama fail yang dikodkan base64, disimpan dalam pembolehubah seperti kunci_dasar_kod dan lesen_dikodkan.
Nilai yang dikodkan ini menyembunyikan tujuan sebenar skrip, menutup URL yang bersambung ke https://coinsw[.]app/basec/ dan memuat turun fail selanjutnya ke direktori ~/tmpcode/.
Setelah fail dimuat turun, langkah seterusnya dalam carta alir kami menunjukkan perisian hasad melancarkan fail yang dipanggil MHTBot.py, mengubah hala semua output yang boleh dilihat ke /dev/null—menyembunyikan aktivitinya daripada pengguna dan alat pemantauan yang sama.
Dalam carta alir, MHTBot.py menonjol sebagai titik perubahan dalam serangan. Menggunakan PyQT5, fail ini mencipta antara muka pengguna grafik yang meniru perisian yang sah, memaparkan gesaan kata laluan dan bar kemajuan. Penyamaran ini direka untuk meyakinkan pengguna, sementara, pada hakikatnya, MHTBot.py secara senyap-senyap mengaktifkan satu siri modul merebut data di latar belakang.
MHTBot.py menggunakan teknik pengelakan yang bijak: ia menolak percubaan kata laluan pertama sebagai "tidak selamat," hanya menerima yang kedua. Kelewatan terbina dalam ini berkemungkinan bertujuan untuk mengelakkan pengesanan kotak pasir, kerana banyak persekitaran kotak pasir mempunyai masa jalan terhad yang mungkin berakhir sebelum perisian hasad diaktifkan sepenuhnya.
Sebagai sebahagian daripada taktik mengelaknya, Meme-Token-Hunter-Bot menggunakan kelewatan sebelum melancarkan operasi mencuri data utamanya. Kelewatan ini juga direka bentuk untuk mengelakkan pengesanan oleh persekitaran kotak pasir, yang selalunya mempunyai tempoh masa jalan yang terhad untuk analisis automatik. Dengan menangguhkan pelaksanaan, perisian hasad meningkatkan peluangnya untuk melepasi imbasan awal ini dan mengaktifkan sepenuhnya pada sistem pengguna sebenar.
Tangkapan skrin di bawah menyerlahkan kod khusus yang bertanggungjawab untuk kelewatan ini. Fungsi start_one_py_main_after_delay memulakan kelewatan selama 7000 milisaat (7 saat) menggunakan QTimer.singleShot, selepas itu ia memanggil fungsi run_one_py_main. Fungsi ini kemudian mencetuskan modul kecurian data utama, one.py, dalam urutan yang berasingan.
Apabila MHTBot.py mengalihkan kawalan kepada one.py, operasi mencuri data utama perisian hasad bermula. Coretan kod berikut mendedahkan cara one.py menggunakan pelbagai fungsi dan modul untuk mengumpul maklumat sensitif daripada sistem pengguna. Mari kita pecahkan setiap bahagian kod dan tujuannya.
Dalam coretan pertama, kita melihat fungsi main() menyediakan direktori tersembunyi untuk penyimpanan sementara data yang dicuri. Malware mencipta ~/.temp/premium/ sebagai direktori tersembunyi untuk menyimpan fail tanpa memberi amaran kepada pengguna. Selepas menyediakan direktori ini, fungsi memanggil pelbagai rutin untuk mengumpulkan data daripada aplikasi tertentu:
mediax(): Berkemungkinan menyasarkan Nota Apple untuk mengekstrak nota yang disimpan.
copy_stickies() dan copy_stickies_database(): Fungsi ini mengumpulkan data daripada aplikasi Stickies.
backup_ssh(): Mengumpul kunci SSH daripada sistem.
copy_terminal_history(): Menyalin fail sejarah terminal.
copy_ssh_and_keychain(): Mengekstrak data daripada SSH dan macOS Keychain.
Fungsi ini dikhususkan untuk mengumpul pelbagai data daripada aplikasi, bukti kelayakan pengguna dan konfigurasi SSH, menjadikan one.py penuai data yang merangkumi semua.
Fungsi search_files(), dilihat dalam coretan kod seterusnya, mengembangkan jangkauan pengumpulan data dengan menyasarkan jenis fail tertentu. Fungsi ini mencari melalui direktori biasa (Muat Turun, Dokumen, Desktop dan direktori rumah) untuk fail sensitif dengan sambungan seperti .txt, .csv, .json, .config dan .env. Jenis fail ini selalunya mengandungi tetapan konfigurasi, kunci API dan maklumat berharga yang lain.
Fail yang ditemui kemudiannya disalin ke direktori sementara, dimampatkan dan disediakan untuk exfiltration. Langkah ini memastikan bahawa sebarang data yang biasanya disimpan dalam direktori pengguna atau fail konfigurasi projek dikumpul.
Dalam coretan berikut, fungsi copy_terminal_history() dan copy_ssh_and_keychain() menangkap data pengguna kritikal. Perisian hasad mengekstrak sejarah terminal daripada fail .zprofile dan .zsh_history, yang berpotensi mendedahkan perintah yang dilaksanakan pengguna, termasuk sebarang maklumat sensitif atau bukti kelayakan yang ditaip dalam terminal.
Selain itu, direktori Rantai Kunci macOS dan SSH diakses untuk menangkap bukti kelayakan yang disulitkan, kata laluan dan kunci SSH yang disimpan dalam sistem, memberikan bukti kelayakan bernilai tinggi kepada penyerang.
Salah satu bahagian yang paling ketara dalam perisian hasad ini ialah menyasarkan dompet crypto. Fungsi zip_additional_wallets() mencari secara khusus direktori yang dikaitkan dengan dompet mata wang kripto yang popular. Malware secara sistematik mencari fail dompet kepunyaan Bitcoin, Electrum, Coinomi, Exodus dan dompet crypto utama yang lain. Setelah dikenal pasti, direktori dompet ini dizip dan disimpan dalam direktori sementara, sedia untuk exfiltration.
Malware juga termasuk fungsi khusus untuk kecurian data Telegram. Fungsi backup_telegram() dan backup_tdata() mencari direktori data Telegram, cuba mengakses mesej, kenalan dan media yang disimpan dalam apl. Dengan menyalin fail ini, perisian hasad mungkin membenarkan penyerang membina semula komunikasi Telegram dan sejarah media pengguna.
Selepas mengumpul maklumat sensitif, Meme-Token-Hunter-Bot meneruskan untuk mengeluarkan data ke pelayan jauh. Exfiltration ini dilaksanakan dengan satu siri fungsi yang mengendalikan penamaan semula fail, memuat naik dan memberitahu bot Telegram penyerang. Coretan kod berikut menggambarkan bagaimana proses ini berlaku.
Fungsi send_telegram_message menghantar mesej kepada bot Telegram yang telah diprakonfigurasikan, memberi amaran kepada penyerang bahawa kumpulan baru fail yang dicuri telah dimuat naik. Fungsi ini memastikan bahawa penyerang menerima kemas kini tepat pada masanya pada setiap exfiltration, membolehkan mereka memantau proses kecurian data dalam masa nyata.
Untuk mengelirukan lagi kehadirannya, perisian hasad menamakan semula fail yang dicuri dengan sambungan .minecraft—helah luar biasa yang mungkin bertujuan untuk memintas sistem pengesanan pencerobohan rangkaian asas yang memantau jenis fail tertentu. Setelah dinamakan semula, upload_file memulakan pemindahan data ke pelayan jauh penyerang. Fail dibuka dalam mod baca binari dan dimuat naik menggunakan requests.post() ke https://store1.gofile[.]io/, platform perkongsian fail awam.
Jika muat naik berjaya (ditandakan dengan kod status 200), fungsi itu mendapatkan semula pautan muat turun, yang kemudiannya dihantar kepada penyerang melalui Telegram.
Semasa siasatan kami, kami mengesyaki bahawa Meme-Token-Hunter-Bot mungkin bukan pakej terpencil. Menggunakan GitHub yang disasarkan
Menariknya, walaupun Meme-Token-Hunter-Bot telah wujud selama 10 bulan, ia hanya mula memasukkan kod hasad pada Ogos 2024, apabila base_helper.py—fail yang bertanggungjawab untuk memuat turun pencuri Python Stage-2—mula-mula diperkenalkan. Kemas kini terkini untuk fail ini telah dibuat pada 28 September 2024.
Sebaliknya, 11 repositori tambahan menerima kemas kini berniat jahat mereka sekitar dua bulan lalu, apabila base_helper.py ditambahkan. Masa yang diselaraskan ini menunjukkan bahawa repositori ini telah disediakan khusus untuk mengedarkan perisian hasad, berdasarkan kejayaan dan kaedah awal yang dilihat dalam Meme-Token-Hunter-Bot.
Kami juga menemui arahan pintasan Gatekeeper dalam beberapa repositori ini, yang direka untuk membimbing pengguna melalui memintas amaran keselamatan macOS. Arahan telah dibentangkan dalam format visual langkah demi langkah, menggalakkan pengguna untuk mengklik kanan aplikasi, pilih "Buka," dan memintas amaran Gatekeeper.
Selain itu, antara 10 repositori tambahan yang dikenal pasti, satu varian bernama "Solana-Bot" menonjol. Walaupun ia mengikuti aliran hasad yang sama seperti Meme-Token-Hunter-Bot, kami memerhatikan sedikit pengubahsuaian, terutamanya dalam nama fail dan penggunaan fungsi. Analisis perbezaan sebelah menyebelah bagi fail base_helper.py Solana-Bot dan Meme-Token-Hunter-Bot menyerlahkan perbezaan ini.
Perbezaan utama antara Solana-Bot dan Meme-Token-Hunter-Bot termasuk perubahan URL.
"aHR0cHM6Ly9jb2luc3cuYXBwL2Jhc2VjLw==" + "UENTQm90LnB5" = "https://coinsw.app/basec/PCSBot.py" <-- Solana-Bot "aHR0cHM6Ly9jb2luc3cuYXBwL2Jhc2VjLw==" + "TUhUQm90LnB5" = "https://coinsw.app/basec/MHTBot.py"
Siasatan terhadap Meme-Token-Hunter-Bot dan varian berkaitannya mendedahkan kempen yang dirancang dengan teliti yang menyasarkan pengguna macOS. Pada asalnya didedahkan oleh Checkmarx, pakej pencuri ini pada mulanya menyamar sebagai alat crypto telah berkembang menjadi ancaman yang lebih luas. Analisis kami menemui 11 repositori tambahan, setiap satu mengandungi sedikit variasi kod asal. Penyerang nampaknya telah menggunakan automasi untuk menjana repositori ini dengan pantas, menggunakan pengubahsuaian kecil dalam nama, label UI dan fungsi untuk mengelakkan pengesanan dan memastikan ketersediaan berterusan.
Namun begitu, kami juga memerhatikan taktik kejuruteraan sosial biasa yang ditujukan kepada pengguna macOS, terutamanya arahan pintasan Gatekeeper. Ini menunjukkan bahawa pelaku ancaman masih banyak bergantung pada mengeksploitasi kepercayaan pengguna. Walaupun teknik lanjutan yang dilihat dalam kempen ini, pergantungan pada pintasan dibantu pengguna ini menekankan keperluan untuk pendidikan pengguna yang berterusan.
Kesedaran adalah pertahanan terbaik. Sumber seperti blog Moonlock