Pencemaran Rantaian Pemasok Arch Linux AUR yang Dikaitkan dengan Paket npm Berbahaya

iconMetaEra
Kongsi
AI summary iconRingkasan

Latar belakang

Pada Jun 2026, ekosistem Arch Linux AUR mengalami insiden racun rantai bekalan berskala besar, yang oleh Sonatype dinamakan "Atomic Arch". Insiden ini bukan disebabkan oleh kelemahan zero-day dalam repositori rasmi Arch Linux, pacman, helper AUR, atau Arch Linux itu sendiri, tetapi penyerang menyalahgunakan mekanisme pengambilalihan pakej yatim AUR, mengambil alih secara sah pakej-pakej yang telah lama tidak diselenggarakan tetapi masih dipercayai oleh pengguna, dan mengubah PKGBUILD atau skrip pemasangan mereka.

Semasa pengguna menjalankan operasi pemasangan atau pengemaskinian AUR biasa, skrip jahat akan memanggil npm atau Bun, memasang pakej JavaScript yang dikendalikan oleh penyerang, dan menggunakan hook siklus hidup npm untuk menjalankan beban Linux ELF. Beban ini terutama menargetkan stesen kerja dan persekitaran pembinaan Linux, dan mampu mencuri maklumat sensitif seperti GitHub, npm, SSH, Docker/Podman, Vault, data peramban, dan sejarah shell.

Pada peringkat pengumuman awam, jumlah paket AUR yang terkesan telah meningkat dari awalnya lebih daripada 400 kepada sekitar 1,500. Kejadian ini menunjukkan bahawa komponen "tidak diselenggarakan tetapi masih dipercayai" dalam ekosistem sumber terbuka sedang menjadi pintu masuk rangkaian baru bagi penyerang untuk menggabungkan skrip, hook lifecycle pengurus paket, dan persekitaran tempatan pembangun.

Tulisan ini berdasarkan analisis statik oleh MistEye terhadap `runescape-launcher`, `atomic-lockfile@1.4.2`, dan `js-digest@4.2.2`, serta menghuraikan tahap teknikal utama rantai serangan tersebut. Sampel-sampel di atas bukanlah keseluruhan sampel serangan, tetapi digunakan untuk mengungkap profil teknikal serangan.

MistEye respons

MistEye ialah sistem intelijen ancaman Web3 dan pemantauan keselamatan dinamik yang dikembangkan secara kendiri oleh SlowMist, yang menggabungkan kemampuan pemantauan keselamatan dan pengumpulan intelijen untuk memberikan amaran risiko serta perlindungan aset secara real-time kepada pengguna.

Dalam insiden pencemaran rantai bekalan Arch Linux AUR ini, MistEye menganalisis dan mengaitkan elemen rantai serangan termasuk pakej jahat yang berkaitan, bergantung npm, beban ELF, komunikasi C2, dan muat turun peringkat kedua, serta mengekstrak IOC yang berkaitan. Berdasarkan keputusan analisis, MistEye telah menghantar amaran risiko tinggi dan pemberitahuan intelijen ancaman kepada pelanggan, membantu pelanggan mengenal pasti dan mengendalikan risiko rantai bekalan tersebut dengan segera. Butiran intelijen:

Berikut adalah analisis teknikal terperinci.

Analisis rantai serangan: AUR install scriptlet hingga skrip siklus hidup npm

Garis teknikal serangan ini boleh diringkaskan sebagai tiga peringkat bertingkat: penyerang mengambil alih pakej AUR dan mengubah skrip pembinaan/pasangan, memicu npm install semasa pemasangan atau pengemaskinian pacman, kemudian memanfaatkan skrip kitaran hidup npm (preinstall) untuk secara automatik menjalankan beban asli Linux ELF yang disematkan dalam pakej tersebut. Berikut adalah penjelasan terperinci bagi setiap tiga peringkat.

Tahap pertama: Skrip pemasangan AUR menyerahkan kuasa pelaksanaan kepada npm

Sebagai contoh, dengan pakej runescape-launcher (versi 2.2.12-1), penyerang memperkenalkan rujukan kepada install.sh dalam .SRCINFO dan PKGBUILD, serta menyatakan npm sebagai bergantung pada masa berjalan.

Pernyataan utama dalam .SRCINFO:

Pernyataan yang sepadan dalam PKGBUILD:

install.sh adalah fail scriptlet pacman. Penyerang mentakrifkan fungsi post_install() dalam fail tersebut dan mengarahkan post_upgrade() ke fungsi yang sama:

fig:

Rantai pelaksanaan utama adalah seperti berikut:

.SRCINFO menyatakan install = install.sh dan depends = npm

→ Pernyataan sinkronisasi PKGBUILD install="install.sh" dan depends=('npm' ...)

→ makepkg memasukkan install.sh ke dalam paket pacman akhir

→ panggil post_install() semasa pemasangan pertama pacman

→ memanggil post_upgrade() semasa pengupayaan pacman

→ post_upgrade() memanggil post_install()

→ post_install() masuk ke /tmp

→ Jalankan npm install atomic-lockfile commander chalk → npm memasang atomic-lockfile@1.4.2

→ Trigger preinstall untuk atomic-lockfile

→ Eksekusi beban ELF Linux x86-64 src/hooks/deps

Perlu diperhatikan beberapa perkara: commander dan chalk adalah pakej sah dan popular di npm, bukan pasti pakej jahat; logik setcap asal/bersamaan juga wujud dalam post_install() yang sama, dan titik tambahan jahat ialah cd /tmp serta npm install atomic-lockfile commander chalk.

Niat reka bentuk inti lapisan ini ialah: menjadikan siklus pemasangan/peningkatan paket pacman sebagai landasan untuk mentransfer kuasa eksekusi daripada pengurus paket sistem ke npm, dan ia akan dipicu semasa pemasangan pertama dan peningkatan.

Tahap Kedua: npm lifecycle memicu ELF asli — atomic-lockfile@1.4.2

atomic-lockfile@1.4.2 ialah paket npm jahat pertama yang digunakan dalam serangan ini. Paket ini pura-pura sebagai pustaka alat kunci fail, mempertahankan struktur pustaka TypeScript/JavaScript yang lengkap, entri main/module/exports, CLI, dan definisi jenis. Namun, penyerang mengkonfigurasi skrip.preinstall dalam package.json untuk menjalankan binari asli semasa pemasangan:

fig:

src/hooks/deps bukan skrip pemasangan dependensi biasa, tetapi fail boleh eksekusi Linux x86-64 PIE ELF yang telah dikeluarkan jadual simbol. Metadata utama:

  • Laluan fail: src/hooks/deps
  • Jenis fail: ELF 64-bit LSB pie executable, x86-64, berpaut dinamik, disingkirkan
  • ELF SHA-256:6144d433f8a0316869877b5f834c801251bbb936e5f1577c5680878c7443c98b
  • Saiz: 3,040,376 bait
  • Ketergantungan dinamik: libbpf.so.1, libm.so.6, libc.so.6
  • SHA-256 objek eBPF terbenam: 3607de2597f8955f9a88f36ee43b64d3891b8ef536e99fa098e80169350f7b01
  • Pengesanan objek eBPF bersarang: 0x324f9
  • SHA-256 tarball asal: 64bc53032ecfbf4e25d0191d75321821ba2ae01bdb123b4c8c2ebd12161253fc

Kemampuan beban ELF ini merangkumi pengumpulan kredensial, persistensi, komunikasi/unggahan melalui saluran berbeza, serta cubaan untuk mengaktifkan komponen eBPF senyap apabila berada dalam keadaan root atau memiliki capability yang sesuai, yang akan dijelaskan satu per satu di bawah.

Pendekodan XOR berulang dan perkhidmatan tersembunyi Tor C2

Dalam payload ELF pada atomic-lockfile@1.4.2, C2 utama tidak muncul sebagai rentetan teks biasa, tetapi disimpan selepas dienkod menggunakan repeating-XOR. Sampel menyimpan kunci 32 bait pada offset 0x1aa60 dan ciphertext 62 bait pada offset 0x2da96. Cara dekodnya ialah:

plain[i] = cipher[i] ^ key[i % 32]

Mendapat alamat perkhidmatan tersembunyi Tor v3 setelah dinyahkod:

olrh4mibs62l6kkuvvjyc5lrercqg5tz543r4lsw3o6mh5qb7g7sneid.onion

Panjang 62 bait tepat sesuai dengan 56 aksara hostname Tor v3 ditambah sufiks .onion. Selain C2 host, sampel juga menggunakan pendekatan serupa untuk mengodkan pengenal dan versi agen:

  • Nama agen: atomic, offset kunci 0x1bc60, offset sifir 0x3fddf
  • Versi agen: 0.8.2, offset kunci 0x1c900, offset sifir 0x3fde5

Reka bentuk ini memastikan bahawa C2 yang lengkap tidak akan muncul dalam output strings biasa. Oleh itu, hanya bergantung kepada strings | grep .onion, peraturan YARA teks biasa, atau proses pengambilan IOC yang mudah, mungkin tidak dapat mengesan C2 perkhidmatan tersembunyi ini.

Laluan komunikasi Tor/SOCKS

Walaupun host C2 disembunyikan dengan kod XOR, rentetan teks biasa yang berkaitan SOCKS/Tor masih kelihatan dalam ELF, contohnya:

Gabungan rentetan ini dengan alamat .onion yang dinyahkodkan menunjukkan bahawa payload tersebut mengandungi kerangka komunikasi untuk mengakses perkhidmatan tersembunyi C2 melalui SOCKS/Tor.

Sementara itu, ELF juga mengandungi rentetan berkaitan pembinaan dan muat naik permintaan HTTP, termasuk POST, GET, HTTP/1.0, HTTP/1.1, Host:, Content-Length:, Content-Type: application/json, Content-Type: application/octet-stream, POST /upload HTTP/1.1, dan Content-Type: multipart/form-data. POST /upload dan templat multipart menunjukkan bahawa payload mempunyai kemampuan pembinaan muat naik, tetapi sama ada ia berkaitan dengan perkhidmatan temp.sh atau benar-benar menghantar data keluar masih perlu disahkan dengan bukti trafik dinamik, log proxy, atau bukti forensik hos.

Credentials and Development Environment Collection Surface

Permukaan pengumpulan kredensial ELF ini meliputi beberapa titik penyimpanan kredensial utama pada stesen kerja pembangun moden.

Dalam konteks kredensial platform jarak jauh, beban mengandungi rentetan yang berkaitan dengan pengesahan token GitHub dan pengenalan repositori—GET /user, GET /user/repos, Authorization: Bearer, Accept: application/vnd.github+json; rentetan pengesahan token npm—GET /-/whoami, registry.npmjs.org, _authToken=; serta rentetan yang berkaitan dengan kredensial Vault—/.vault-token, X-Vault-Token:.

Dalam hal alat komunikasi serta kolaborasi langsung, rentetan yang berkaitan dengan Slack mengandungi laluan API auth.test, conversations.list, users.info serta soalan SQL Cookie terhadap %.slack.com; dalam hal Teams/Skype mengandungi X-Skypetoken:, authsvc.teams.microsoft.com dan soalan Cookie terhadap %teams.microsoft.com; rentetan yang berkaitan dengan Discord seperti discord: juga muncul.

Dalam konteks persekitaran tempatan dan kontena, beban memperhatikan fail kredensial SSH seperti .ssh, known_hosts, PRIVATE KEY, dan PuTTY-User-Key-File, serta laluan histori .bash_history, .zsh_history, .env, dan Cookie serta Local Storage pada perambut siri Chromium. String yang berkaitan dengan Docker/Podman dan alat DevOps—termasuk docker login, docker push, docker pull, docker build, docker run, docker tag, docker-compose, podman login, podman push—muncul dalam ELF, tetapi pada masa ini hanya boleh dijadikan petunjuk string statik, dan rantai pengumpulan penuh belum dikonfirmasi. Claude: String yang sama juga boleh menjadi petunjuk berkaitan alat AI, tetapi tidak boleh membuktikan pengumpulan data Claude secara berasingan.

fig:

Unggah dan muat turun fasa dua

Beban mengandungi templat muat naik HTTP multipart, serta laluan sementara data seperti /var/tmp dan /secrets. Sampel mempunyai kemampuan untuk berkomunikasi tugas/hasil melalui onion C2 dan membina permintaan muat naik multipart; sama ada ia berkaitan dengan perkhidmatan temp.sh, atau sama ada muat naik atau eksfiltrasi berjaya dilakukan pada hos mangsa tertentu, perlu dikonfirmasi melalui eksekusi dinamik, log proxy, atau bukti forensik hos. Rantaian muat turun fasa kedua juga meninggalkan jejak statik yang jelas: laluan pemeriksaan hash fasa kedua ditunjukkan oleh string /bin/sha256/ dan sha256 fetch:; server returned empty binary dan tmp 200 headers too large menunjukkan adanya logik penanganan ralat untuk kegagalan muat turun fasa kedua. Jejak pengambilan Tor bundle /tor-expert-bundle- bersama dengan rantaian penghantaran SOCKS membentuk petunjuk muat turun staging.

Petunjuk cryptominer yang diduga

String /usr/bin/monero-wallet-gui ditemui dalam ELF atomic-lockfile. Bersama dengan saluran muat turun peringkat dua, dijangka beban mungkin diambil semula pada peringkat dua bersama binari berkaitan penambangan Monero. Ciri-ciri kuat penambang seperti xmrig, randomx, stratum, domain kolam penambangan, atau alamat dompet tidak disahkan dalam sampel semasa, oleh itu tidak boleh disimpulkan bahawa penambang dalaman ada.

Persisten

Templat perkhidmatan systemd muncul dalam sampel, mencakup dua skenario pelaksanaan: peringkat pengguna dan peringkat sistem. Ini menunjukkan bahawa beban mempunyai niat untuk mendaftarkan dirinya sebagai perkhidmatan sistem dan terus berjalan selepas reboot atau apabila sesi pengguna dimulakan.

eBPF隐身 dan anti-forensik

eBPF (extended Berkeley Packet Filter) ialah mekanisme yang disediakan oleh kernel Linux, yang membolehkan pengguna memuatkan dan menjalankan program tersuai yang dibatasi tanpa mengubah kod sumber kernel. Dalam penggunaan biasa, ia digunakan untuk penyaringan rangkaian, keterlihatan, dan pemantauan keselamatan, tetapi komponen eBPF dalam sampel ini direka sebagai alat arah sebaliknya—bukan untuk "melihat" sistem, tetapi untuk "menyembunyikan" dirinya.

Beban ELF atomic-lockfile@1.4.2 src/hooks/deps bergantung kepada libbpf.so.1 dan mencuba memuatkan objek eBPF boleh dipindahkan yang disematkan melalui API seperti bpf_object__open_mem, bpf_object__load, bpf_program__attach, dan bpf_map__pin. Logik ini tidak dilaksanakan tanpa syarat: sampel akan memanggil geteuid() terlebih dahulu untuk memeriksa sama ada pengguna adalah root, kemudian membaca /proc/self/status, menganalisis medan CapEff:, dan menguji bit kemampuan yang sepadan dengan CAP_BPF dan CAP_SYS_ADMIN. Dengan lebih tepat, sampel hanya akan memasuki laluan percubaan pemuatan eBPF apabila syarat keizinan dipenuhi. Dengan kata lain, ia lebih mirip modul penyamar bersyarat; bukti statik semasa tidak menunjukkan ia berjaya menaikkan hak akses.

Pembalikan menunjukkan bahawa program induk akan membaca objek tertanam dengan panjang 0xce28 daripada peralihan 0x324f9, iaitu objek eBPF sebanyak 52,776 bait. SHA-256 objek tersebut ialah:

3607de2597f8955f9a88f36ee43b64d3891b8ef536e99fa098e80169350f7b01

fig:

Objek eBPF yang diekstrak adalah hasil kompilasi berdiri sendiri, jenis failnya ELF 64-bit LSB relocatable, dengan maklumat debug_info / BTF dan tidak disrip. Maklumat pemyelesaian masalahnya juga bocor laluan sumber:

/cloud/scales/agent/../ebpf/scales.bpf.c

Objek eBPF ini menggabungkan BPF maps (jadual data untuk menyimpan keadaan) dan tracepoints (titik sambung peristiwa kernel) untuk menghasilkan pelbagai jejak kemampuan penyamaran dan anti-forensik. Maklumat penukaran dan simbolnya mengandungi nama-nama seperti hidden_pids, hidden_names, hidden_inodes, net_fds, diag_fds, getdents64, ptrace, recvmsg, dan bpf_probe_write_user, yang menunjukkan bahawa objektif rekaannya termasuk menyembunyikan proses, menyembunyikan entri direktori, menyembunyikan socket/inode yang berkaitan dengan sambungan rangkaian, serta mengganggu pemasangan pemeriksa.

Secara khusus, jejak fungsi objek eBPF ini boleh dibahagikan kepada tiga kategori:

  1. Sembunyikan proses dan entri direktori: hidden_pids digunakan untuk menyimpan PID yang perlu disembunyikan; logik berkaitan sched_process_exec akan memadankan nama proses berdasarkan hidden_names semasa program baru dilaksanakan, dan PID yang padan akan dimasukkan ke dalam set tersembunyi. Logik berkaitan getdents64 berkaitan dengan pemprosesan hasil bacaan direktori, sampel jahat boleh menggunakannya untuk menyembunyikan PID atau entri direktori tertentu daripada senarai direktori seperti /proc.
  2. Penggangguan pengenalan sambungan rangkaian: petunjuk seperti recvmsg, socket, hidden_inodes, net_fds, diag_fds menunjukkan penggangguan terhadap hasil pengenalan sambungan rangkaian, yang mungkin mempengaruhi maklumat socket/inode yang dilihat oleh alat seperti ss dan netstat.
  3. Menghalang pemyelesaian dan pemalsuan hasil balikan: ptrace, PTRACE_ATTACH, PTRACE_SEIZE, dan bpf_send_signal(9) menunjukkan reka bentuk anti-forensik untuk menghalang pemasangan debugger; pelbagai rentetan bpf_probe_write_user menunjukkan jejak pelaksanaan objek ini untuk mengubah buffer bacaan pengguna, yang juga merupakan cara utama untuk menyembunyikan entri direktori dan entri rangkaian.

Kerana analisis ini adalah statik dan sampel tidak dijalankan secara dinamik, kejayaan pemuatan objek eBPF pada hos tertentu tidak boleh dikonfirmasi, dan tidak boleh dinyatakan bahawa proses, entri direktori, atau sambungan rangkaian telah disembunyikan secara sebenarnya. Namun, berdasarkan logik semakan keizinan, struktur map, cakupan tracepoint, dan jejak penggunaan bpf_probe_write_user, niat reka bentuknya adalah untuk menyembunyikan jejak proses, entri direktori, dan soket/inode yang berkaitan dengan sambungan rangkaian di bawah akses root atau kemampuan kernel yang sesuai, serta menghalang analisis dinamik.

Tahap ketiga: Penyamaran sufiks .mjs — js-digest@4.2.2

js-digest@4.2.2 ialah paket npm jahat yang digunakan dalam gelombang serangan seterusnya. Paket ini menyamar sebagai pustaka alat ringkasan/enkripsi JavaScript, mengandungi fail sumber yang kelihatan sah seperti aes.js, sha256.js, hmac-sha512.js, index.js. Penyerang juga mengkonfigurasi entri preinstall dalam package.json:

Perbezaan utama dengan atomic-lockfile ialah strategi penamaan beban. Suffix .mjs pada install-deps.mjs mengimplikasikan ia adalah modul JavaScript ESM, yang boleh mengurangkan kewaspadaan penilai manusia dan peraturan pengesanan berdasarkan ekstensi. Namun, pengenalpastian jenis fail statik menunjukkan ia sebenarnya adalah ELF PIE Linux x86-64. Metadata utama:

  • Laluan fail: lib/install-deps.mjs
  • Suffix implies: ESM JavaScript module
  • Jenis fail sebenar: ELF 64-bit LSB pie executable, x86-64, dinamik berpaut, disingkirkan
  • ELF SHA-256:7883bda1ff15425f2dbe622c45a3ae105ddfa6175009bbf0b0cad9bf5c79b316
  • Saiz: 3,193,176 bait
  • Ketergantungan dinamik: libbpf.so.1, libm.so.6, libc.so.6
  • SHA-256 objek eBPF terbenam: 3607de2597f8955f9a88f36ee43b64d3891b8ef536e99fa098e80169350f7b01
  • Pengesanan objek eBPF bersarang: 0x37d91
  • SHA-256 tarball asal: 0e6a2b7ef9e15c1b8b002466d75257f7ef4105b7e3f2183df1527de2e1d2bf6f

js-digest juga menggunakan repeating-XOR untuk menyembunyikan C2. Kunci 32 bait ditanam pada offset 0x1cba0, dan 62 bait teks tersandi disimpan pada offset 0x32bcb; hasil dekripsi sepenuhnya sepadan dengan atomic-lockfile:

olrh4mibs62l6kkuvvjyc5lrercqg5tz543r4lsw3o6mh5qb7g7sneid.onion

ID dan versi agennya adalah:

  • Nama agen: cryjs (offset kunci 0x1d740, offset sifir 0x45ec2)
  • Versi agen: 0.8.4 (offset kunci 0x1ec40, offset sifir 0x45ec7)

Nama agen kedua-duanya (atomic vs cryjs) dan versinya (0.8.2 vs 0.8.4) berbeza, tetapi berkongsi alamat C2 onion yang sama dan objek eBPF terbenam yang sama.

js-digest sangat konsisten dengan atomic-lockfile dalam hal string terkait pengumpulan kredensial, rantai transmisi SOCKS/Tor, templat muat naik multipart, templat string systemd yang berterusan, dan segmen muat turun fasa dua (/bin/sha256/, sha256 fetch:). Petunjuk berkaitan Docker/Podman dan @reboot pada js-digest kurang jelas berbanding atomic-lockfile, dan /usr/bin/monero-wallet-gui juga tidak disahkan sebagai kecocokan dalam js-digest.

Sufiks .mjs yang disamarkan adalah teknik pengelakan yang perlu diperhatikan dalam serangan ini: ia memanfaatkan kelemahan pengesanan perbezaan—peraturan pencocokan pola berdasarkan rentetan dan nama fail mungkin menggolongkan fail .mjs ke dalam senarai putih "Modul JavaScript" tanpa memeriksa jenis MIME sebenar atau kepala ELF.

Contoh berkaitan: Bukti keras ganda yang berkaitan dengan onion C2 dan objek eBPF

Terdapat dua bukti keras yang boleh dikenalpasti secara berasingan antara dua paket npm jahat, atomic-lockfile@1.4.2 dan js-digest@4.2.2:

Bukti keras satu: Kongsi perkhidmatan tersembunyi Tor C2. Dua beban ELF, walaupun hos berbeza, nama agen berbeza (atomic vs cryjs), versi berbeza (0.8.2 vs 0.8.4), dan masing-masing menggunakan kunci repeating-XOR dan teks tersulit yang berbeza, tetapi selepas dinyahkod, kedua-duanya menunjuk ke alamat perkhidmatan tersembunyi Tor yang sama, olrh4mibs62l6kkuvvjyc5lrercqg5tz543r4lsw3o6mh5qb7g7sneid.onion. Tidak mungkin dua kerangka jahat yang dibangunkan secara berasingan secara kebetulan memilih alamat onion v3 56 aksara yang sama sebagai C2.

Bukti keras dua: Byte objek eBPF yang dibagi adalah identik. SHA-256 objek eBPF yang dapat dipindahkan yang tertanam dalam kedua ELF adalah sama:

3607de2597f8955f9a88f36ee43b64d3891b8ef536e99fa098e80169350f7b01

Objek eBPF ini berukuran 52,776 bait, jenis failnya adalah ELF 64-bit LSB relocatable, dengan debug_info dan tidak di-stripped, dengan laluan sumber ditandai sebagai scales.bpf.c. Peta utama (hidden_pids, hidden_names, hidden_inodes), tracepoints (getdents64, sched_process_exec, ptrace, openat, recvmsg, dsb.), dan fungsi utama (walk_dirent, name_to_pid, bpf_probe_write_user) sepenuhnya sepadan dalam kedua-dua sampel. Objek eBPF ini adalah hasil kompilasi; keseragaman pada peringkat byte bermakna kedua-dua ELF dibina menggunakan sumber C eBPF yang sama.

Selain bukti keras di atas, dua beban ELF juga menunjukkan pendekatan reka bentuk yang sangat serupa dalam hal string berkaitan pengumpulan kredensial, arsitektur penghantaran SOCKS/Tor, templat muat naik multipart, dan string templat persistensi systemd. Kekonsistenan ini merupakan pemerhatian tambahan yang menyokong lebih lanjut kesimpulan bahawa kedua-dua sampel berasal dari sumber yang sama.

Perbezaan utama antara dua sampel adalah seperti berikut: hash ELF hos berbeza, nama dan versi agent berbeza (atomic / 0.8.2 vs cryjs / 0.8.4), strategi penamaan beban berbeza (src/hooks/deps vs penyamaran .mjs), /usr/bin/monero-wallet-gui hanya muncul dalam atomic-lockfile, dan ExecStart=@reboot juga hanya secara statik tercapai dalam atomic-lockfile. Perbezaan ini menunjukkan bahawa dua sampel berkaitan rapat dengan infrastruktur operasi yang sama, rantai pembinaan yang sama, atau kelompok aktiviti yang sama, bukan sekadar pengemasan semula.

Ringkasan

Serangan racun rantai bekalan AUR Arch Linux ini mencerminkan pemanfaatan berganda dua titik lemah struktur dalam ekosistem perisian sumber terbuka: pertama, mekanisme pengambilan semula pakej yatim AUR tidak mempunyai semakan kepercayaan terhadap pihak yang mengambil alih; kedua, skrip hayat pengurus pakej (pacman dan npm) mempunyai sempadan kepercayaan yang boleh dieksekusi yang disambungkan semasa peringkat pemasangan—penyerang tidak bergantung pada sebarang kelemahan perisian, tetapi hanya dengan penyalahgunaan mekanisme penyelenggaraan ekosistem sumber terbuka dan perilaku reka bentuk pengurus pakej untuk membina rantai serangan yang lengkap.

Ciri-ciri teknikal rantai serangan ini boleh diringkaskan dalam tiga aras berikut:

AUR penyalahgunaan warisan kepercayaan. Penyerang tidak membuat pakej baru atau memanfaatkan kelemahan perisian, tetapi mengambil alih pakej AUR yang tidak diselenggarakan untuk mewarisi basis pengguna yang sedia ada. Sebagai contoh, runescape-launcher, penyerang mengambil alih pakej melalui proses pengambilalihan AUR yang sah, kemudian menyisipkan arahan npm install atomic-lockfile ke dalam install.sh, dan memanggil post_install() melalui post_upgrade() supaya ia juga dipicu semasa pengemaskinian. Pengguna mangsa yang menjalankan operasi biasa seperti yay -S atau paru -S tidak mengharapkan PKGBUILD dan skrip .install telah dimanipulasi.

Penghubungan siklus hidup dua lapisan dan penyembunyian C2. Penyerang menggunakan scriptlet post_install()/post_upgrade() pacman sebagai titik masuk, memicu npm install semasa pemasangan/peningkatan pakej AUR, kemudian memanfaatkan lifecycle preinstall npm untuk menjalankan beban ELF Linux. Alamat C2 beban disembunyikan melalui kod repeating-XOR, sehingga strings/grep .onion yang mudah tidak dapat mengekstraknya secara langsung. C2 onion lebih sesuai digambarkan sebagai saluran komunikasi tugas, hasil, dan status; beban juga mempunyai kemampuan membina permintaan muat naik multipart. Samada ia sepadan dengan perkhidmatan temp.sh atau sama ada muat naik berjaya di hos mangsa tertentu, perlu disahkan dengan bukti dinamik atau log.

Kombinasi beban mencakup kemampuan serangan berbilang peringkat. Beban ELF mencakup kemampuan pengumpulan kredensial (GitHub/npm/Slack/Discord/Teams/Vault/SSH/browser, serta petunjuk string DevOps seperti Docker/Podman), komunikasi saluran berbilang dan muat naik struktur (onion C2 + templat muat naik berbilang bahagian), templat kekal (sistem systemd user/system service yang kompatibel dengan WantedBy=multi-user.target dan WantedBy=default.target), dan pengelakan pertahanan bersyarat (mencuba mengaktifkan eBPF untuk menyembunyikan proses, nama fail, dan socket/inode apabila kebenaran dipenuhi, bpf_send_signal(9) untuk menghalang pemeriksaan ptrace). js-digest juga memperkenalkan penyamaran sufiks .mjs, yang semakin mengurangkan keberkesanan pengesanan berdasarkan sufiks.

Cadangan:

  1. Segera semak sama ada terdapat PKGBUILD atau skrip .install yang mengandungi arahan npm install atomic-lockfile, bun install js-digest, atau arahan pengambilan npm/Bun serupa dalam pakej AUR yang telah dipasang. Jika menemui pakej yang terjejas, segera lakukan bukti dan tukar kredensial dalam persekitaran terpisah.
  2. Semak sama ada terdapat service/timer systemd yang tidak biasa di ~/.config/systemd/user dan /etc/systemd/system, serta sama ada terdapat BPF maps yang tidak biasa seperti hidden_pids, hidden_names, hidden_inodes di /sys/fs/bpf/.
  3. Untuk hos pembangun yang terkesan, gantikan GitHub PAT/GITHUB_TOKEN, token npm, sesi Slack/Discord/Teams, token Vault, kunci SSH, kredensial Docker/Podman, dan semua kunci yang disimpan dalam .env.
  4. Lingkungan pembinaan CI/CD disarankan dibina semula daripada imej dasar yang boleh dipercayai, bukan sekadar membersihkan node_modules atau menghapuskan paket jahat tunggal.
  5. Cadangkan agar pengguna AUR mengkaji setiap baris PKGBUILD dan skrip .install sebelum memasang sebarang pakej yang baru saja diambil alih atau tidak aktif dalam jangka masa panjang, dengan memperhatikan sama ada terdapat panggilan perintah luar seperti npm install, bun install, curl, wget.

IOC

Domain

olrh4mibs62l6kkuvvjyc5lrercqg5tz543r4lsw3o6mh5qb7g7sneid[.]onion

Ketergantungan jahat

npm:atomic-lockfile@1.4.2

npm:js-digest@4.2.2

npm:nextfile-js@1.4.2

npm:lockfile-js@1.4.2

Fail jahat

nama fail: src/hooks/deps SHA256: 6144d433f8a0316869877b5f834c801251bbb936e5f1577c5680878c7443c98b

nama fail: lib/install-deps.mjs SHA256: 7883bda1ff15425f2dbe622c45a3ae105ddfa6175009bbf0b0cad9bf5c79b316

nama fail: atomic-lockfile-1.4.2.tar.gz SHA256: 64bc53032ecfbf4e25d0191d75321821ba2ae01bdb123b4c8c2ebd12161253fc

nama fail: js-digest-4.2.2.tar.gz SHA256: 0e6a2b7ef9e15c1b8b002466d75257f7ef4105b7e3f2183df1527de2e1d2bf6f

nama fail: objek eBPF terbenam SHA256: 3607de2597f8955f9a88f36ee43b64d3891b8ef536e99fa098e80169350f7b01

Artikel ini ditulis oleh pasukan intelijen ancaman SlowMist yang menggabungkan sistem intelijen ancaman MistEye dan analisis yang didorong oleh AI SlowMist Agent. Sebarang soalan, sila hubungi atau berikan maklum balas.

Pautan rujukan

1.https://www.sonatype.com/blog/atomic-arch-npm-campaign-adds-malicious-dependency

Penafian: Maklumat yang terdapat pada halaman ini mungkin telah diperoleh daripada pihak ketiga dan tidak semestinya menggambarkan pandangan atau pendapat KuCoin. Kandungan ini adalah disediakan bagi tujuan maklumat umum sahaja, tanpa sebarang perwakilan atau waranti dalam apa jua bentuk, dan juga tidak boleh ditafsirkan sebagai nasihat kewangan atau pelaburan. KuCoin tidak akan bertanggungjawab untuk sebarang kesilapan atau pengabaian, atau untuk sebarang akibat yang terhasil daripada penggunaan maklumat ini. Pelaburan dalam aset digital boleh membawa risiko. Sila menilai risiko produk dan toleransi risiko anda dengan teliti berdasarkan keadaan kewangan anda sendiri. Untuk maklumat lanjut, sila rujuk kepada Terma Penggunaan dan Pendedahan Risiko kami.