TL; DR
Dua puluh pakej npm yang diterbitkan dalam tempoh dua hari pada akhir Julai dan awal Ogos 2026 menampilkan diri mereka sebagai pustaka komponen UI dalaman dan utiliti backend kongsi. Tiada satu pun daripadanya melaksanakan fungsi yang mereka iklankan. Setiap satu menghantar kelas rintisan, README yang menerangkan pakej sebagai dalaman dan fail yang dipanggil _polyfill.js.
Bahagian yang menarik ialah dari mana fail itu dipanggil. Ia bukan cangkuk pemasangan — manifes mengisytiharkan tiada prapasang, pemasangan atau pascapasang langsung. Sebaliknya, baris terakhir bagi index.js Berbunyi: try { require("./_polyfill"); } catch (_) {}Muatan menjalankan kod aplikasi kali pertama mengimport pakej. Memasang dengan --ignore-scripts, yang standard nasihat untuk mengurangkan pendedahan rantaian bekalan pada masa pemasangan, tidak menghalangnya.
Servis _polyfill.js dilakukan ialah mendapatkan fail boleh laku khusus platform daripada salah satu daripada tiga hos Cloudflare Workers, menulisnya ke direktori sementara di bawah nama rawak, menandakannya sebagai boleh laku dan melancarkannya terpisah daripada proses induk. Folder boleh laku itu sendiri merupakan pemuat: ia menyenaraikan produk keselamatan titik akhir mengikut nama proses, menyemak nama pengguna semasa terhadap akaun persekitaran analisis yang diketahui, menampal antara muka telemetri AMSI dan ETW dalam memori, memasang kegigihan di bawah nama komponen audio Windows dan mendapatkan binari ketiga bersaiz beberapa megabait. Peringkat ketiga tiba dengan disulitkan dan didekripsi dan dilaksanakan dalam memori dan bukannya ditulis ke cakera.
Pada 1 Ogos, kira-kira empat jam selepas pakej disahkan berniat jahat semasa semakan manual, sembilan belas daripada dua puluh nama telah dialih keluar daripada npm oleh penerbit mereka sendiri dalam urutan dua puluh lima saat. Pada 2 Ogos, salah satu daripada nama tersebut telah didaftarkan sekali lagi — oleh akaun yang berbeza, yang membawa kod yang sama. Infrastruktur penyampaian telah memenuhi ketiga-tiga peringkat semasa artikel ini ditulis.
| Kami | 20 nama npm, ~74 versi yang diterbitkan |
| Menamakan tema | beaver-ui-* (13), accounts-* (3), tambah afisha-storybook-default, bcore-bravo-eslint-config, arbocrate-sla-prober-arbocrate-sla-prober-core, a.poltoradnev-package-c |
| Trigger | Import modul (require), bukan skrip kitaran hayat npm |
| Peringkat 1 | _polyfill.js — pengambilan dan pelancaran |
| Peringkat 2 | Pemuat yang dipautkan secara statik, dikemas UPX pada Linux; penghitungan keselamatan titik akhir, penampalan AMSI/ETW, kegigihan |
| Peringkat 3 | beacon_linux.bin / beacon_mac.bin / update_win.exe, 4–13 MB; dihantar disulitkan, dilaksanakan dalam memori |
| Platform | Linux x64 dan arm64, macOS universal, Windows x64 |
| Penerbit | Dua akaun, satu pangkalan kod |
| status | 19 daripada 20 nama tidak diterbitkan oleh pengendali; 1 diterbitkan semula dan disiarkan secara langsung; infrastruktur penghantaran disiarkan secara langsung |
Anatomi serangan
Peringkat 1 — pakej
Setiap ahli menghantar bentuk tiga fail yang sama. indeks.js mengeksport kelas dengan di dalamnya() yang menetapkan boolean, a versi(), Dan konfigurasikan() yang menggabungkan objek pilihan. Tiada yang lain. BACA.md memberikan baris pemasangan, a memerlukan baris, dan ayat “Pakej dalaman. Lihat CONTRIBUTING.md untuk garis panduan” — MENYUMBANG.md tiada dalam tarball.
_polyfill.js bersaiz kurang sedikit daripada 5 KB dan dibaca sebagai kod infrastruktur biasa. Ia dibuka dengan tiga semakan persekitaran:
if (process.env.DISABLE_TELEMETRY ||
process.env.ANALYTICS_OPT_OUT ||
process.env.DO_NOT_TRACK)
return;Pembolehubah tersebut adalah kawalan privasi konvensional. Di sini ia mengawal sama ada binari dimuat turun dan dilaksanakan. Mesin yang menetapkan JANGAN_JEJAK dilangkau sepenuhnya.
Seterusnya datang setem run-once: fail di /tmp/.analytics_state, Atau keadaan_analitik di bawah % TEMP% pada Windows, yang masa pengubahsuaiannya dibandingkan dengan tetingkap 20,357 saat. Dalam tetingkap itu, modul akan kembali serta-merta, jadi import berulang semasa binaan menghasilkan satu percubaan pengambilan semula dan bukannya berpuluh-puluh.
Hos destinasi tidak hadir sebagai literal. Ia dipasang semasa runtime daripada serpihan:
["oob-worker.cf102-","baf.workers.d","ev"].join("")
Tiga hos dibina dengan cara ini dan dikocok sebelum digunakan, jadi susunannya berbeza-beza setiap pelaksanaan. Pengambilan semula ialah HTTPS GET yang disematkan pada IPv4 dengan Ejen Pengguna of nod-ambil/2.6 — nilai yang munasabah untuk proses Nod pancarkan. Respons di bawah 1,000 bait dibuang dan hos seterusnya dicuba.
Jika ketiga-tiganya gagal, modul tersebut akan kembali kepada DNS. Ia akan mengeluarkan pertanyaan TXT untuk c. untuk mendapatkan kiraan ketulan, kemudian permintaan 0. melalui n. dalam kelompok sepuluh, menggabungkan jawapan dan base64-menyahkod hasilnya. Laluan ini membawa fail boleh laku yang sama melalui rekod TXT DNS, yang bertahan dalam persekitaran di mana HTTP keluar ditapis tetapi resolusi DNS tidak.
Bait yang diambil ditulis kepada /var/tmp/.cache_<8-hex> pada Unix, atau %TEMP%\dotnet_diag_<8-hex>.exe pada Windows — nama fail yang dibaca sebagai artifak diagnostik .NET. Pada Unix, fail diberikan mod 0755. Pelancaran ialah bertelur bersama terpisah: benar, stdio: “abaikan”, dan tidak merujuk(), jadi anak itu hidup lebih lama daripada proses Node yang memulakannya; pada Windows, pemanggilan itu menambah tingkapSembunyikan: benar.
Dua butiran melengkapkan gambaran tersebut. Seorang pembantu ditakrifkan sebagai const _l = (…a) => proses.stderr.tulis(“”) dipanggil pada setiap langkah pengambilan semula — ia menulis rentetan kosong dan membuang argumennya, menduduki kedudukan di mana pembalakan akan diletakkan. Dan setiap pakej menghantar fail 81 KB pada lib/telemetri.js yang komen pengepalanya menerangkan "SDK Analisis" dengan "pengangkutan HTTPS dengan putaran dan percubaan semula titik akhir" dan "penemuan perkhidmatan berasaskan DNS untuk failover". Dalam binaan semasa, tiada apa yang memerlukannya.
Peringkat 2 — pemuat
Binari Linux x64 ialah ELF berpaut statik yang dimampatkan dengan UPX 3.96. Binaan macOS ialah binari universal yang meliputi x86_64 dan arm64; binaan Windows ialah boleh laku konsol PE32+ yang dilucutkan. Keempat-empatnya telah diambil dan diperiksa secara statik; tiada satu pun yang dilaksanakan.
Import binaan Windows dan jadual rentetan menerangkan kelakuannya dengan jelas. Ia menyelesaikan IsDebuggerPresent, SemakPenyahpepijatJarakLampuHadir, dan Proses Maklumat NtQuery, dan membaca SISTEM\CurrentControlSet\Services\Disk\Enum — laluan pendaftaran yang nilainya mengenal pasti pengawal cakera maya. Ia memanggil DapatkanDiskFreeSpaceExW dan GlobalMemoryStatusEx, selaras dengan menyemak sama ada sumber hos sepadan dengan tika analisis jangka pendek.
Ia membawa senarai nama pengguna: CurrentUser, Pentadbir IT, Hong Lee, Kotak Ujian, hapubws, milozs, timmy, admin, malware, sampel, virus, persekitaranBeberapa daripadanya merupakan artifak persekitaran analisis yang didokumenkan secara terbuka.
Ia juga membawa senarai produk keselamatan titik akhir dan nama prosesnya, yang disenaraikan melalui BuatToolhelp32Snapshot dan Proses32FirstW/Proses32SeterusnyaW:
- CrowdStrike Falcon (
csfalconservice,CSFalconContainer) - Karbon Hitam (
cb.exe) - Cylance (
cylancesvc.exe) - BitDefender (
bdagent.exe) - Kaspersky (
avp.exe,kavfs.exe) - Trend Mikro dan Keselamatan Mendalam (
coreServiceShell,ds_agent.exe) - FireEye/Trellix (
xagt.exe) - Tanium (
taniumclient.exe) - Hitmanpro (
hmpalert.exe) - elastik (
elastic-agent.exe,elastic-endpoint,filebeat.exe,winlogbeat.exe) - Wazuh dan OSSEC (
wazuh-agent.exe,ossec-agent.exe) - Check Point
- Windows Defender
Dua simbol tambahan terdapat: AmsiScanBuffer, titik masuk yang didedahkan oleh Windows untuk pengimbasan kandungan dalam memori dan EtwEventWrite, fungsi yang digunakan oleh Event Tracing untuk Windows untuk merekodkan peristiwa. Kedua-duanya merupakan sasaran biasa untuk pengubahsuaian dalam proses yang menyekat telemetri yang akan dihasilkan oleh antara muka tersebut.
Persistence muncul dua kali pada Windows. Binari disalin ke %APPDATA%\Microsoft\Windows\Themes\SystemSoundsService.exe, dan dua mekanisme merujuknya: nilai di bawah PERISIAN\Microsoft\Windows\Versi Semasa\Jalankan, dan tugasan berjadual yang didaftarkan sebagai
schtasks /Create /F /SC ONLOGON
/TN "\Microsoft\Windows\Multimedia\SystemSoundsService"
/TR "\"%s\""
/RL HIGHESTLaluan tugas, nama tugas dan nama boleh laku semuanya mencerminkan komponen audio Windows yang tulen. /RL TERTINGGI meminta tahap keistimewaan tertinggi yang tersedia.
Binaan macOS mengikuti corak yang sama dengan nama yang sesuai dengan platform: ia menulis senarai sifat untuk ~/Perpustakaan/LaunchAgents/com.apple.windowserver.helper.plist dan meletakkan laksanaannya di ~/.local/kongsi/masajalan/com.apple.masajalanIa menyemak untuk /Aplikasi/VMware Fusion.aplikasi dan /Perpustakaan/Sokongan Aplikasi/Alat VMware.
Keupayaan rangkaian merangkumi tiga pengangkutan: WININET.dll untuk HTTPS dengan https://%s:%d%s rentetan format, WS2_32.dll soket, dan DNSAPI.dll bersama DnsQuery_A bersebelahan dengan c.%s.%s format string — bentuk pertanyaan kiraan ketulan yang sama yang digunakan oleh peringkat pertama.
Huraian di atas adalah apa yang ditunjukkan oleh import, rentetan dan laluan pendaftaran binari semasa pemeriksaan. Analisis berbilang enjin awam bagi sampel Windows yang sama menambah butiran yang tidak dapat ditentukan oleh bacaan statik jadual import dengan sendirinya, dan dikaitkan di sini dan bukannya dinyatakan semula sebagai pemerhatian langsung. Analisis itu melaporkan bahawa rujukan AMSI dan ETW bukan sahaja diselesaikan tetapi ditambal — AmsiScanBuffer in amsi.dll dan EtwEventWrite in ntdll.dll — yang menyekat pengimbasan kandungan dalam memori dan pengesanan peristiwa untuk proses tersebut. Ia melaporkan pemeriksaan anti-analisis sebagai berasaskan masa sebagai tambahan kepada SemakPenyahpepijatJarakLampuHadir, dan mengenal pasti DapatkanKonteksBenang panggil sebagai semakan titik putus perkakasan yang membaca daftar debug. Ia juga melaporkan mutex satu-contoh, Global\{7A3B9E1F-C2D4-4F8A-B5E6-D7A1F0C3E2B9}, dan nama-nama Perkhidmatan Bunyi Sistem sebagai nilai Run-key. Nilai mutex tersebut bukan antara rentetan yang dipulihkan di sini — penapis pengekstrakan menggunakan token heksadesimal huruf besar yang dikurung — dan ia direkodkan dalam jadual penunjuk berdasarkan kekuatan analisis awam tersebut dan bukannya pemerhatian langsung.
Peringkat 3
Pemuat merujuk kepada satu set laluan selanjutnya pada hos yang sama. Semua boleh dicapai semasa analisis: beacon_linux.bin pada 5.3 MB, beacon_mac.bin pada 13.3 MB, kemas kini_win.exe pada 10.3 MB, dan tong sampah lengan pada 4.3 MB. Ini tidak diambil dan kelakuannya tidak diketahui.
Untuk laluan Windows, analisis awam pemuat menerangkan bagaimana peringkat ketiga itu dikendalikan: ia diambil melalui WinINet, tiba dengan disulitkan dan dinyahsulit dalam memori dan dilaksanakan secara reflektif — memori diperuntukkan, import diselesaikan, penempatan semula diproses dan kawalan dihantar ke thread baharu melalui CiptaBenangOleh itu, peringkat ketiga tidak pernah ditulis pada sistem fail, jadi pengesanan berasaskan fail dan forensik cakera pasca insiden tidak mempunyai apa-apa untuk dipulihkan daripadanya. Ini juga bermakna mendapatkan semula bait daripada hos penghantaran akan menghasilkan teks sandi, bukan fail boleh laku yang boleh dianalisis.
Timeline
Semua cap waktu adalah UTC dan berasal dari metadata pendaftaran npm, yang merekodkan penciptaan dan penyingkiran pakej secara bebas daripada mana-mana pemerhati.
| Bila | Servis |
|---|---|
| 2026-07-31 09:25:05 → 09:29:56 | Sepuluh nama dicipta, setiap satu bermula pada versi 0.0.1, kira-kira tiga belas saat selang. |
| 2026-08-01 09:38 → 11:29 | Nama sedia ada meningkat melalui nombor versi yang dinaikkan, 6.1.9 melalui 6.1.12, 9.9.9 melalui 9.9.12, 8.9.3 melalui 8.9.6, 5.4.6 melalui 5.4.9. |
| 2026-08-01 13:04:14 → 13:04:18 | Sembilan lagi beaver-ui-* nama yang dicipta dalam letusan empat saat, setiap satunya diterbitkan terus pada versi 12.x tanpa sejarah terdahulu. |
| 2026-08-01 ~13:00–14:30 | Versi dikelaskan sebagai berniat jahat pada semakan manual. |
| 2026-08-01 17:39:49 → 17:40:14 | Sembilan belas daripada dua puluh nama tidak diterbitkan dalam dua puluh lima saat, secara berurutan, dengan jarak kira-kira 1.2 saat. |
| 2026-08-02 18:58:41 | a.poltoradnev-package-c dicipta semula di bawah akaun penyelenggara yang berbeza, versi 0.0.2. |
| 2026-08-02 19:20:28 | versi 33.9.5 diterbitkan dengan nama yang sama. |
| 2026-08-02 20:14 | Ketiga-tiga hos penghantaran beroperasi di peringkat dua dan tiga; jawapan sandaran DNS dengan kiraan ketulan. |
Dua daripada entri ini patut difikirkan dengan teliti.
Letupan 13:04 meletakkan sembilan pakej dalam pendaftaran dalam masa empat saat, setiap satu dengan satu versi dalam dua belas saat dan tiada 0.0.1 di bawahnya. Nombor versi pada skala ini, pada nama yang berusia satu hari, tidak menggambarkan sejarah keluaran.
Urutan penyingkiran penerbitan juga sama mekanikalnya: sembilan belas nama, dua puluh lima saat, jarak genap. npm merekodkan ini sebagai peristiwa penyingkiran penerbitan biasa dan bukannya ruang letak yang ditinggalkan oleh penyingkiran yang dimulakan oleh pendaftaran, yang meletakkan tindakan dengan akaun penerbitan dan bukannya dengan pendaftaran.
Petunjuk kompromi
Hos dan laluan telah dinyahfangkan. Jangan selesaikan atau dapatkannya daripada sistem pengeluaran.
| Jenis | nilai |
|---|---|
| Hos penghantaran | oob-worker[.]cf99-9b3[.]workers[.]dev |
| Hos penghantaran | oob-worker[.]cf102-baf[.]workers[.]dev |
| Hos penghantaran | oob-worker[.]cf103-070[.]workers[.]dev |
| Pengangkutan DNS | tin[.]dl[.]well1[.]site (Linux x64), tina[.] (lengan64), ldr[.] (macOS), win[.] (Windows) — kiraan ketulan pada c.<domain>, data pada <n>.<domain> |
| Laluan Peringkat-2 | /pkg/package, /pkg/package-arm64, /pkg/loader_mac, /pkg/package.exe |
| Laluan Peringkat-3 | /pkg/beacon_linux.bin, /pkg/beacon_mac.bin, /pkg/update_win.exe, /pkg/arm.bin |
| Lepaskan laluan (Unix) | /var/tmp/.cache_<8-hex> |
| Lepaskan laluan (Windows) | %TEMP%\dotnet_diag_<8-hex>.exe |
| Kegigihan (Windows) | %APPDATA%\Microsoft\Windows\Themes\SystemSoundsService.exetugasan \Microsoft\Windows\Multimedia\SystemSoundsService; Nilai kekunci jalankan SOFTWARE\Microsoft\Windows\CurrentVersion\Run\SystemSoundsService |
| Mutex (Windows) | Global\{7A3B9E1F-C2D4-4F8A-B5E6-D7A1F0C3E2B9} |
| Kegigihan (macOS) | ~/Library/LaunchAgents/com.apple.windowserver.helper.plist; binari pada ~/.local/share/runtime/com.apple.runtime |
| Setem jalankan sekali | /tmp/.analytics_state, %TEMP%\analytics_state (tetingkap 20,357 s) |
| Minta tandatangan | HTTPS GET, disematkan IPv4, Ejen Pengguna: node-fetch/2.6 |
| Fail Peringkat-1 | _polyfill.js, SHA-256 392dc9ec85042ce1796bfa9b8c7bf6e05c7710579aab8b7b1eb73788683883af |
| Fail tidak dirujuk | lib/telemetry.js, SHA-256 2266c9b8e199daebe31a9afcb61d9b0d76706b63c92312fc8223d22de42e63c7 |
| Peringkat 2 (Linux x64) | SHA-256 7e486657f30594afda379b97030252a09a19fe8055e25c9e371544f59bd8e9e3 |
| Peringkat 2 (Linux arm64) | SHA-256 aafc37589c0d21fb729761a1579ca3b278b95bce152aacfa29243ffd27f5eeb7 |
| Peringkat 2 (macOS) | SHA-256 c214746c74cae8ece8bdaf69aa05da4db6ce013f9e77452d1eed1a002fd9ba00 |
| Peringkat 2 (Tingkap) | SHA-256 d632c2c0c7801c3da57cf849fe4b4ca8351d9a7fe73c31050bf5dbcc96a16791 |
Nama pakej
Atribusi dan tingkah laku yang diperhatikan
Dua akaun npm terlibat. Sembilan belas nama yang tidak diterbitkan telah diterbitkan oleh satu akaun; a.poltoradnev-pakej-c telah didaftarkan semula pada 2 Ogos di bawah nama akaun dan domain e-mel yang berbeza. Kod tersebut mempunyai keturunan yang sama dalam kedua-duanya, dan pendaftaran kedua membawa hos penghantaran yang sama, domain sandaran DNS yang sama, binaan laluan jatuh yang sama dan cap jalankan sekali yang sama.
Pasangan yang diterbitkan semula itu juga menunjukkan bagaimana ia dipasang. 0.0.2 dan 33.9.5 adalah serupa bait selain daripada rentetan versi dalam package.json, indeks.js dihantar sebagai 0.0.2 mengisytiharkan const VERSI = “33.9.5”Kedua-dua artifak telah dipotong daripada satu pokok sumber dan dinomborkan selepas itu. Tiada 0.0.2 sejarah pembangunan untuk 0.0.2 pelepasan untuk mewakili.
Penomboran versi merentasi keseluruhan set mengikuti logik yang sama. Nama pakej dalam kempen ini dibaca sebagai perkara yang akan wujud di dalam sesebuah organisasi dan bukannya pada pendaftaran awam: set komponen UI, konfigurasi ESLint, penyiasat SLA, pakej yang dinamakan sempena nama seseorang. Apabila binaan menyelesaikan kebergantungan mengikut nama dan merujuk pendaftaran awam bersama-sama pendaftaran persendirian, nombor versi yang lebih tinggi adalah yang menang. Nama yang dicipta pada 0.0.1 pada hari Isnin dan membawa 12.9.6 pada hari Selasa diletakkan untuk perbandingan itu.
Kedua-dua gelombang penerbitan juga berbeza dengan cara yang mencadangkan lelaran. Kod terdahulu menamakan fail muatannya persediaan.js dan menyenaraikan lima hos penghantaran; fail semasa dinamakan _polyfill.js dan menyenaraikan tiga. Versi terdahulu mengalih keluar fail yang digugurkan lima saat selepas pelancaran, meninggalkan proses berjalan daripada inod yang dipadam; versi semasa tidak. Yang tidak dirujuk lib/telemetri.js kekal dalam tarball merentasi kedua-duanya, masih dihantar, tidak lagi disambungkan melalui wayar.
Satu pemerhatian tentang suis pemutus litar adalah wajar dinyatakan sebelum inicisely, kerana ia melanggar bacaan biasa. TELEMETRI_LUMPUHKAN, ANALYTICS_OPT_OUT, dan JANGAN_JEJAK dihormati, dan ia diperiksa sebelum apa-apa lagi berlaku. Seorang penyelidik yang persekitaran analisisnya menetapkan mana-mana daripada mereka memerhatikan pakej yang tidak melakukan apa-apa langsung.
Impak dan apa yang boleh dilakukan oleh pembela
Akibat praktikal daripada pencetus masa import adalah sempit dan patut dinyatakan sendiri. npm pasang –abaikan-skrip menghalang skrip kitaran hayat daripada berjalan, dan ia adalah nasihat yang bernas. Ia tidak memberi kesan di sini, kerana kod ini tidak menggunakan skrip kitaran hayat. Muatan berjalan apabila kod aplikasi, ujian larian, bundler atau linter mengimport modul terlebih dahulu. Pada pelari CI yang memasang dan kemudian membina serta-merta, kedua-duanya hanya beberapa saat sahaja.
Untuk pemburuan, isyarat yang tahan lama adalah berstruktur dan bukannya literal. Hos, nama fail dan laluan drop akan berubah; bentuk ini lebih sukar untuk diubah:
- Titik masuk modul yang pernyataan terakhirnya ialah cuba { perlukan(“./x”); } tangkap (_) {} di sekeliling fail yang bukan sebahagian daripada API yang dieksport. Pakej dengan polifill tulen mengimportnya di bahagian atas dan menggunakan hasilnya. Menelan setiap ralat daripada import bahagian bawah fail bukanlah pengendalian ralat.
- Tali hos dipasang oleh .sertai(“”) daripada susunan serpihan. Kod sah tidak mempunyai sebab untuk membahagikan nama hos merentasi elemen array.
- Pakej yang kebergantungannya diisytiharkan kosong tetapi mencapai https, dns, dan proses_anak pada masa import. Pengambilan semula serta pelaksanaan dalam pakej yang mengiklankan komponen UI adalah keseluruhan penemuan.
- Nombor versi tidak konsisten dengan usia pakej. Satu nama yang pertama kali diterbitkan beberapa hari yang lalu pada versi utama dua digit, tanpa keluaran intervensi, menggambarkan sesuatu selain daripada perkembangannya.
- Menulis kepada / var / tmp or % TEMP% diikuti oleh a Chmod hingga 0755 dan anak benih yang terpisah. Urutannya pendek, teratur, dan jarang jinak bersama.
Pada hos Windows terdapat dua pemeriksaan keyakinan tinggi yang murah. Artifak kegigihan adalah rentetan tetap dan tiada satu pun daripadanya tergolong dalam sistem yang bersih: tugasan berjadual di \Microsoft\Windows\Multimedia\SystemSoundsService, nilai Run-key yang dinamakan Perkhidmatan Bunyi Sistem, dan fail boleh laku dengan nama itu di bawah %APPDATA%\Microsoft\Windows\Tema\Perkhidmatan audio Windows yang tulen tidak terdapat di mana-mana tempat tersebut. Kedua, pemuat menggunakan mutex satu contoh tetap, Global\{7A3B9E1F-C2D4-4F8A-B5E6-D7A1F0C3E2B9}; kehadirannya pada hos adalah penunjuk, dan kerana pemuat menganggap mutex sedia ada sebagai "sudah berjalan", penciptaan awal adalah inokulasi jangka pendek yang berdaya maju semasa pemulihan dijadualkan.
Pengesanan pada peringkat ketiga merupakan masalah yang lebih sukar dan perlu dijelaskan. Berdasarkan analisis awam, ia dinyahsulit dan dipetakan dalam memori dan bukannya ditulis ke cakera, jadi pengimbasan fail dan forensik cakera tidak akan melihatnya. Apa yang masih boleh diperhatikan ialah jejak pemuat itu sendiri — entri persistensi, mutex dan permintaan keluar kepada hos penghantaran atau domain DNS-TXT.
Bagi persekitaran yang menyelesaikan kebergantungan daripada kedua-dua pendaftaran persendirian dan awam, mitigasi tidak berubah oleh apa-apa di sini: nama dalaman skop supaya nama awam tidak dapat memenuhinya dan pin resolusi pada pendaftaran dalaman untuk skop tersebut. Tingkah laku inflasi versi yang diterangkan di atas hanya berfungsi apabila versi awam yang lebih tinggi boleh memenangi nama.
Akhirnya, penyingkiran penerbitan ini berbaloi untuk dibaca dengan teliti dan bukannya sebagai penutup. Sembilan belas nama meninggalkan pendaftaran dalam masa dua puluh lima saat dan seorang kembali sehari kemudian di bawah akaun baharu, dengan infrastruktur penghantaran tidak disentuh sepenuhnya. Penyingkiran pakej bukanlah penyingkiran operasi; hos terus berkhidmat pada setiap peringkat semasa ini ditulis. Mana-mana pokok kebergantungan yang menyelesaikan salah satu nama ini antara 31 Julai dan 1 Ogos harus dianggap sebagai mempunyai peluang untuk melaksanakan peringkat satu, sama ada nama itu masih wujud atau tidak.
Rujukan
- Analisis berbilang enjin bagi pemuat Windows — sumber untuk penampalan AMSI/ETW, pelaksanaan reflektif dalam memori dan butiran mutex yang dikaitkan di atas.
- dokumentasi skrip npm — peristiwa kitaran hayat yang tidak digunakan oleh kempen ini.
- dokumentasi pemasangan npm — meliputi - Abaikan skrip dan skopnya.







