TL; DR
Pakej PyPI bernama kawalan gcli menghantar alat akses jauh Windows yang lengkap: pengelogan ketukan kekunci, tangkapan kamera web dan mikrofon, pemantauan papan klip, akses kelayakan pelayar, kawalan skrin, kegigihan, peningkatan keistimewaan dan "140+ arahan" yang diiklankan sendiri. Ia tidak menyembunyikan apa itu: ringkasan PyPI pakej itu sendiri menggambarkannya sebagai "Alat akses jauh melalui npoint.io".
Perincian yang perlu dibincangkan sebentar ialah frasa itu "melalui npoint.io." Daripada menghubungi pelayan khusus, implan yang digunakan npoint[.]io (perkhidmatan percuma dan sah untuk mengehoskan dokumen JSON kecil) sebagai geganti arahan dan kawalannya. Operator menulis arahan ke dalam tong JSON; implan akan meninjau tong tersebut, melaksanakan dan menulis semula hasil. Tiada domain milik penyerang untuk disekat, tiada IP baharu untuk ditandai: trafik pergi ke perkhidmatan yang digunakan oleh pembangun setiap hari.
Enam versi diterbitkan dalam masa kira-kira tiga belas setengah jam, setiap satu lebih berkemampuan daripada yang sebelumnya. Setiap satu daripadanya telah dinilai ml_predicted_safe oleh pengelas automatik sebelum semakan manual mengklasifikasikan semula keluarga tersebut sebagai berniat jahat.
Anatomi serangan
kawalan gcli memasang pakej import gcli, pangkalan kod Python 35 modul. Tiada masa pemasangan hooks — tiada apa yang berjalan semasa pemasangan pipKeupayaan tersebut terdapat dalam modul itu sendiri, yang digunakan sebaik sahaja alat dijalankan dan susun atur modul berbunyi seperti helaian spesifikasi produk:
| Kawasan keupayaan | Modul |
|---|---|
| Pengawasan hos | keylog, webcam, audio, clipboard, desktop, monitoring |
| Akses kelayakan & data | browser, forensics, fileops, transfer, users |
| Pijakan & peningkatan | persistence, elevator, registry, security |
| Peninjauan hos & rangkaian | system, processes, network_config, wifi, bluetooth, netutils |
| Perintah & kawalan | client, host, session, protocol, npoint, crypto, encrypt |
Saluran arahan adalah bahagian yang menarik. Kebanyakan perkakasan akses jauh sampai ke pelayan yang dikawal oleh operator — IP, domain, penyedia hosting yang boleh dilaporkan dan dirahsiakan. kawalan gcli sebaliknya melayan a perkhidmatan JSON-bin percuma sebagai penyelesaian akhir. Yang npoint modul membaca dan menulis dokumen JSON kecil pada npoint[.]io melalui HTTPS biasa; yang Crypto/menyulitkan Modul membungkus muatan yang ditukar supaya kandungan bin bukan arahan teks biasa. Kesannya ialah geganti yang dimediasi dan disulitkan:
- Operator menjatuhkan arahan (yang disulitkan) ke dalam tong JSON.
- Implan, yang berjalan pada hos mangsa, meninjau bin tersebut, menyahsulit, melaksanakan salah satu pengendali arahannya dan menulis kembali hasil (yang disulitkan).
- Kepada monitor rangkaian, mangsa hanya bercakap dengan npoint[.]io — perkhidmatan dengan sebab yang sah untuk muncul dalam trafik pembangun.
Tiada muat turun peringkat kedua dan tiada pemuat yang dikaburkan di sini: keupayaan ini dihantar secara keseluruhan, dalam Python yang boleh dibaca, dan satu-satunya "persembunyian" ialah pilihan geganti dan penyulitan muatan yang disampaikan.
Mengapa dead-drop JSON-bin menarik secara operasi adalah wajar dijelaskan, kerana ia menjelaskan mengapa kita menjangkakan untuk melihat corak itu sekali lagi:
- Tiada titik akhir milik pengendali. Tiada domain C2 untuk didaftarkan, tiada VPS untuk disewa dan tiada apa-apa untuk dirampas oleh pembela atau pendaftar. Penyingkiran domain pakej tidak menyentuh saluran; penyingkiran saluran bermaksud meminta SaaS tujuan umum untuk mengawasi satu dokumen antara berjuta-juta.
- Pengubahan reputasi. HTTPS keluar kepada perkhidmatan pembangun yang terkenal tidak membawa sebarang penalti reputasi seperti domain baharu atau IP mentah. Banyak persediaan penapisan keluar membenarkannya secara tersirat.
- Asinkroni dan kebolehpenafian. Model tinjauan — implan mengambil dokumen pada selang masa dan bukannya memegang soket terbuka — menghasilkan trafik yang kelihatan seperti tinjauan API berkala, bukan sesi interaktif. Menyulitkan kandungan dokumen bermakna penganalisis yang menemui tong sampah itu pun melihat teks sandi, bukan senarai arahan.
- Putaran remehBerpindah ke tong yang berbeza, atau perkhidmatan nota/tampal yang berbeza sepenuhnya, merupakan perubahan konfigurasi satu baris untuk operator. Sebarang senarai sekatan yang dikunci pada geganti tertentu akan lapuk sebaik sahaja ia dihantar.
Tukar ganti yang diterima oleh pengendali ialah daya pemprosesan dan kependaman: geganti dead-drop adalah lebih perlahan dan lebar jalurnya lebih rendah daripada sambungan langsung. Bagi implan pengawasan dan kawalan yang kebanyakannya mengeluarkan arahan pendek dan mengumpul keputusan dari semasa ke semasa, pertukaran itu mudah dibuat.
Timeline
Keluarga itu menjadi semakin tegang. Cap masa penciptaan tiket untuk versi yang ditandai meletakkan keseluruhan arka yang diperhatikan dalam masa kira-kira tiga belas setengah jam, dan kiraan bukti pengimbas itu sendiri meningkat seiring dengan kod — daripada beberapa tapak yang ditandai dalam versi pertama kepada empat belas dalam versi terkini.
| versi | Pertama kali dilihat (UTC) | Nota |
|---|---|---|
0.1.0 | 2026-07-21 12:59 | Muat naik awal; permukaan bertanda minimum |
0.5.0 | 2026-07-21 18:01 | Keupayaan berkembang |
0.2.0 | 2026-07-21 18:03 | (penomboran versi tidak monoton dengan susunan muat naik) |
0.6.0 | 2026-07-22 00:44 | Set modul yang lebih luas |
0.7.0 | 2026-07-22 01:58 | Toolkit yang hampir lengkap |
0.7.1 | 2026-07-22 02:28 | Terkini; 35 modul, keupayaan penuh |
Nombor versi tidak diterbitkan mengikut susunan yang ketat, tetapi hala tujunya jelas: potongan kecil pertama, kemudian lelaran pantas ke arah 0.7.1 yang mempunyai ciri lengkap. Ini adalah bentuk projek di bawah pembangunan aktif yang dihantar ke daftar awam semasa ia berkembang, bukan penurunan sekali gus.
Petunjuk Kompromi
Semua penunjuk di bawah telah disahkan terhadap kandungan pakej pada cakera dan imbasan penunjuk deterministik versi 0.7.1; tiada satu pun yang bersifat spekulatif.
| Jenis | Petunjuk |
|---|---|
| Pakej (PyPI) | gcli-control, versi 0.1.0, 0.2.0, 0.5.0, 0.6.0, 0.7.0, 0.7.1 |
| Pakej import | gcli |
| Geganti C2 | npoint[.]io (JSON-bin dead-drop; muatan yang disulitkan) |
| Repositori yang dinyatakan | github[.]com/gcli-control/gcli |
| Cap jari tingkah laku | Modul pengawasan yang terletak bersama: keylog, webcam, audio, clipboard, browser, ditambah persistence, elevator dan lapisan arahan klien/host/protokol dalam satu pakej |
| memasang hooks | Tiada: keupayaan berjalan pada masa jalan alat, bukan semasa pemasangan |
Nota pemain pertahanan: Isyarat terkuat yang tahan lama bukanlah domain (hos geganti berputar secara remeh) tetapi bentuk: satu pakej yang menggabungkan tiga atau lebih primitif pengawasan hos yang berbeza dan menghalakan gelung arahan/respons melalui perkhidmatan pengehosan kandungan awam. Menyekat npoint[.]io outright tidak praktikal untuk kebanyakan kedai; memberi amaran tentang proses yang tidak dijangka yang kedua-duanya menangkap peranti input dan bercakap dengan perkhidmatan JSON-bin adalah jauh lebih mantap.
Tingkah laku & pembingkaian yang diperhatikan
Dua perkara menjadikan sampel ini luar biasa, dan kedua-duanya merupakan fakta yang boleh diperhatikan dan bukannya inferens tentang motif.
Ia mengiklankan dirinya sendiri. Ringkasan pakej yang diedarkan di PyPI menyenaraikan keupayaan dalam bahasa mudah — akses jauh, kawalan desktop, pengurusan pengguna, kamera web, audio, keylogger, kegigihan, data pelayar, WiFi, pendaftaran, “140+ arahan.” Tiada percubaan untuk menyampaikan kod tersebut sebagai pembantu binaan, pembalut CLI atau utiliti ejen AI, yang merupakan penyamaran yang lebih biasa kita lihat pada pendaftaran awam. Sama ada keterbukaan itu mencerminkan alat pasukan merah yang diterbitkan tanpa kawalan akses atau sesuatu yang lain adalah persoalan yang tidak dapat diselesaikan oleh kandungan pakej sahaja; apa yang pasti ialah kit alat akses jauh dan pengawasan tujuan umum yang berfungsi boleh dipasang oleh sesiapa sahaja yang mempunyai pip.
Ia bersandar pada kepercayaan dalam perkhidmatan yang baik. Menggunakan npoint[.]io kerana relay adalah teknik yang menentukan. Ia adalah contoh corak yang lebih luas — penghalaan C2 melalui SaaS yang sah (laman tampal, tong JSON, web sembanghooks, dokumen awan) supaya trafik berniat jahat bercampur dengan aktiviti pembangun biasa dan tiada titik akhir milik pengendali untuk dirampas. Muatan pada geganti telah disulitkan, jadi kandungan bin tidak akan dibaca sebagai arahan kepada pemerhati biasa.
Isyarat penerbit adalah nipis dan generik. Pakej itu mengisytiharkan Pengarang daripada “penyumbang gcli” dan lesen MIT, dan menunjukkan laman utama dan medan repositorinya pada github[.]com/gcli-control/gcliTiada satu pun daripada itu yang boleh disahkan: rentetan pengarang ialah teks bebas, pengepala lesen MIT tidak memerlukan sebarang kos, dan URL repositori dalam metadata pakej ialah tuntutan, bukan bukti asal usul. Coraknya — nama baharu, pengarang kolektif generik dan organisasi/repo rujukan kendiri yang dicipta di sekitar pakej — ialah rupa projek apabila ia didirikan khusus untuk membawa kod, bukannya alat sedia ada yang telah mengembangkan ciri kawalan jauh. Kami menganggap ini sebagai pemerhatian; ia selaras dengan, tetapi tidak dengan sendirinya mewujudkan, pengedaran yang dibina khas.
Kami menyifatkan pelupusan tersebut sebagai berniat jahat berdasarkan keupayaan dan penyampaian: implan akses jauh dan pengawasan yang lengkap dan boleh dijalankan, diedarkan pada indeks pakej awam dengan geganti rahsia. Kami tidak mengaitkan sasaran atau motif.
Impak, trend & apa yang boleh dilakukan oleh pembela
Titik buta untuk triage berorientasikan penyamaran. Banyak kunci triaj pakej automatik pada menyamar isyarat daripada perisian hasad pendaftaran biasa — gumpalan yang dikaburkan, masa pemasangan hooks, satu baris kata yang mengutip tauliah. Pakej yang ringkasnya secara terang-terangan seorang TIKUS, dengan kod yang boleh dibaca dan bersih serta tiada cangkuk pemasangan, tidak menunjukkan sebarang petunjuk tersebut dan boleh terlepas daripada heuristik yang menjangkakan penyembunyian. Isyarat yang menangkap kelas ini dengan andal adalah berasaskan struktur dan bukannya berasaskan penyamaran: bancian keupayaan (berapa banyak primitif pengawasan hos yang berbeza wujud bersama dalam satu pakej) dan analisis bentuk C2 (gelung arahan/respons yang dihalakan melalui perkhidmatan pengehosan kandungan tujuan umum). Pemeriksaan tersebut berfungsi tanpa mengira betapa jujur atau dihantui pembungkusannya adalah.
Trend SaaS-as-C2. Menyalahgunakan perkhidmatan pengehosan yang sah sebagai penyelesaian masalah bukanlah sesuatu yang baharu, tetapi ia terus berfungsi kerana kos pertahanan untuk menyekat perkhidmatan adalah tinggi dan kos serangan untuk menukar perkhidmatan hampir sifar. Jangkakan lebih banyak lagi. Pertahanan rangkaian yang dikunci pada domain buruk tertentu akan luput serta-merta; peraturan tingkah laku (“proses ini membaca papan klip dan kamera web dan kemudian bercakap dengan API pengehosan nota”) tidak.
Lakaran pengesanan konkrit. Peraturan tahan lama tidak menamakan npoint[.]io langsung. Ia menggabungkan dua pemerhatian yang lazim secara individu tetapi jarang berlaku secara bersama pada pembangun biasa atau hos CI:
amaran apabila satu proses, dalam satu sesi, kedua-duanya:
(A) mengakses peranti input primitif pengawasan hos — (cangkuk papan kekunci/tetikus), kamera, mikrofon, tangkapan skrin, gelung baca papan klip atau stor kelayakan pelayar ("Login Data" / "Negeri Tempatan" / DPAPI); DAN
(B) membuat permintaan keluar kepada perkhidmatan pengehosan kandungan/tampal/JSON-bin/chat-webhook awam kemudian mengemukakannya untuk semakan, tanpa mengira perkhidmatan khusus dalam (B).
Kedua-dua belah pihak tidak curiga: banyak alat yang sah memuat naik tangkapan skrin, dan ramai yang menyiarkan JSON ke API pengehosan. Konjungsi dalam satu proses jangka pendek ialah isyarat, dan ia bertahan daripada sebarang putaran geganti.
Langkah praktikal untuk pasukan:
- Anggap pemasangan pakej awam pada hos pembangun dan CI sebagai sempadan pelaksanaan, bukan kemudahan — RAT pada ejen binaan ialah RAT dengan rahsia anda.
- Lebih suka cermin dalaman yang disenarai dibenarkan; pakej yang dinamakan secara literal untuk alat kawalan jauh dan menggambarkan keylogger tidak sepatutnya diselesaikan pada indeks korporat.
- Amaran tentang gabungan — peranti input atau tangkapan skrin serta trafik keluar ke perkhidmatan kandungan/tampal/JSON-bin — dan bukannya pada mana-mana primitif tunggal, yang mempunyai kegunaan yang tidak berbahaya secara berasingan.
- Jangan bergantung pada skor "selamat" automatik sebagai keputusan terminal untuk pakej dengan keupayaan akses hos yang luas; halakannya kepada semakan manusia.
Keluarga pakej telah diklasifikasikan sebagai berniat jahat dan dirujuk untuk penyingkiran pendaftaran. Oleh kerana C2 berasaskan geganti tidak meninggalkan hos milik pengendali ke lubang sinkhole, nilai pertahanan tahan lama berada dalam cap jari tingkah laku di atas, bukan dalam mana-mana entri senarai sekatan tunggal.





