Skip to main content

Command Palette

Search for a command to run...

Làn sóng malware mới trên npm: Chỉ cần cài package là mất dữ liệu

Published
9 min read
Làn sóng malware mới trên npm: Chỉ cần cài package là mất dữ liệu

Tổng quan

Trong những năm gần đây, các cuộc tấn công chuỗi cung ứng phần mềm (software supply chain attack) đang trở thành một trong những mối đe dọa nghiêm trọng nhất đối với hệ sinh thái phát triển phần mềm hiện đại. Thay vì tấn công trực tiếp vào hệ thống mục tiêu, kẻ tấn công tập trung vào các thành phần phụ thuộc (dependencies) mà lập trình viên sử dụng hàng ngày. Khi một dependency bị cài cắm mã độc, tác động của nó có thể lan rộng tới hàng nghìn dự án phần mềm khác nhau.

Một ví dụ điển hình cho xu hướng này là chiến dịch PhantomRaven, nhắm vào hệ sinh thái npm – hệ thống quản lý package phổ biến nhất cho Node.js. Trong chiến dịch này, kẻ tấn công đã phát tán hàng chục package độc hại thông qua nhiều tài khoản npm khác nhau nhằm đánh cắp thông tin nhạy cảm từ môi trường phát triển của lập trình viên. Các package này được thiết kế để trông giống như các thư viện hợp lệ hoặc những package có thể được lập trình viên vô tình cài đặt khi tìm kiếm dependency cho dự án của mình.

Điểm đáng chú ý của PhantomRaven là việc sử dụng kỹ thuật Remote Dynamic Dependencies (RDD). Thay vì chứa trực tiếp mã độc trong package npm, các package này chỉ đóng vai trò như một “loader”, sau đó tải payload từ máy chủ bên ngoài trong quá trình cài đặt.

Trong các phần tiếp theo, bài viết sẽ đi sâu vào phân tích luồng hoạt động của chiến dịch PhantomRaven, nguyên nhân gốc rễ của lỗ hổng bị khai thác, các kỹ thuật khai thác được sử dụng, cũng như việc ánh xạ các hành vi tấn công với framework MITRE ATT&CK để làm rõ toàn bộ bức tranh của chiến dịch này.

Nguyên nhân chiến dịch

Thiếu kiểm soát dependency từ URL bên ngoài: Điều này có nghĩa là npm cho phép dependency được định nghĩa bằng remote URL, dẫn đến việc: code độc hại có thể được tải runtime và không bị kiểm tra bởi registry scanner.

Thiếu xác minh package: Một điểm đặc biệt trong hệ sinh thái npm đó là nó có tới hàng triệu package và bất kỳ ai cũng có thể publish package. Điều này đã vô tình tạo điều kiện cho attacker phát tán package giả mạo.

Sự phụ thuộc vào AI gợi ý thư viện: Một số package được thiết kế theo kỹ thuật slopsquatting. Tức là attacker đăng ký package với tên mà AI có thể “hallucinate” sau đó developer tin tưởng AI và cài đặt package.

Luồng tấn công

Như đã đề cập phía trên thì ở giai đoạn đầu, kẻ tấn công đăng tải hàng loạt package độc hại lên npm registry thông qua nhiều tài khoản khác nhau. Các package này thường được đặt tên theo kỹ thuật slopsquatting, tức là sử dụng những tên giống thư viện phổ biến hoặc giống các package có thể được AI gợi ý.

Ví dụ chúng có thể giả mạo các thư viện liên quan đến: Babel plugins, GraphQL tooling, ESLint configuration, developer utilities. Điều này làm tăng khả năng developer vô tình cài đặt các package độc hại khi tìm kiếm dependency cho dự án.

Tiếp đến sẽ là quá trình cài đặt package độc hại. Tại đây các Developer đã tin tưởng và cài đặt package bằng lệnh: npm install <package>.

Trong chiến dịch PhantomRaven, các package này chứa một kỹ thuật đặc biệt gọi là Remote Dynamic Dependencies (RDD). Thay vì khai báo dependency từ npm registry, package sẽ chỉ định dependency trỏ tới URL bên ngoài do attacker kiểm soát.

Ngay sau khi npm install được thực thi nó sẽ thực hiện một loạt các hành vi liên tiếp từ việc, đọc package.json, phát hiện dependency trỏ tới URL, tự động tải package từ server attacker rồi sau đó cài đặt dependency đó vào môi trường local. Như vậy, payload độc hại không tồn tại trong npm registry, mà được tải trực tiếp từ server của attacker trong quá trình cài đặt.

Sau khi dependency được tải xuống, mã độc sẽ được thực thi thông qua npm lifecycle scripts, thường là: preinstall, install hoặc postinstall. Những script này sẽ chạy tự động trong quá trình cài package mà không cần sự tương tác của người dùng. Payload trong PhantomRaven gần như giống nhau giữa các đợt tấn công, trong quá trình nghiên cứu cho thấy 257/259 dòng code của malware là giống nhau giữa các wave của chiến dịch. Điều này cho thấy attacker tập trung vào thay đổi hạ tầng phân phối hơn là thay đổi payload.

Sau khi thực thi, malware bắt đầu thu thập thông tin từ môi trường của developer. Thông tin đầu tiên mà kẻ tấn công nhắm đến chính là "cấu hình developer". Tại đây malware sẽ thực hiện đọc file hai file quan trọng: ~/.gitconfig~/.npmrc. Đây được coi là lưu trữ email developer, npm authentication token và git credential. Malware cũng kiểm tra environment variables để tìm token hoặc secret.

Một mục tiêu quan trọng khác của PhantomRaven là các token dùng trong pipeline DevOps. Malware tìm kiếm credential liên quan đến: GitHub Actions, GitLab CI, Jenkins, CircleCI. Hiểu cách khác là khi chiếm được những thứ này, kẻ tấn công sẽ có thể: truy cập repository, sửa pipeline build và nguy hiểm nhất đó là chèn mã độc vào phần mềm phát hành.

Ngoài credential, malware cũng thu thập thông tin hệ thống nhằm xác định nạn nhân: IP address, hostname, hệ điều hành rồi phiên bản Node.js mà nạn nhân đang dùng. Thông tin này giúp attacker phân loại nạn nhân và điều chỉnh payload theo một cách phù hợp mà chúng mong muốn.

Một chiến dịch tấn công nào cũng vậy, sẽ đều có hệ thống máy chủ C2 - nơi mà kẻ tấn công nhận lệnh cũng như gửi thông tin. Sau khi đã lấy được thông tin cần thiết chúng sẽ thiết lập các phương thức: HTTP GET request, HTTP POST request, WebSocket connection để kết nối C2 Server.

Việc sử dụng nhiều phương thức truyền dữ liệu giúp malware có khả năng duy trì kết nối ngay cả khi một giao thức bị chặn cũng như vượt qua các cơ chế giám sát mạng. Sau khi nhận được dữ liệu đánh cắp, attacker có thể: truy cập repository private, đánh cắp source code, chỉnh sửa pipeline CI/CD, chèn backdoor vào phần mềm build. Điều này biến PhantomRaven từ một cuộc tấn công vào developer cá nhân thành một cuộc tấn công chuỗi cung ứng phần mềm quy mô lớn.

Mapping MITRE ATT&CK

Tactic Technique Description
Initial Access T1195 – Supply Chain Compromise Phát tán package độc hại trên npm
Execution T1059 – Command and Script Interpreter Script JavaScript chạy khi cài dependency
Discovery T1082 – System Information Discovery Thu thập thông tin hệ thống
Credential Access T1552 – Unsecured Credentials Truy xuất token từ config files
Collection T1005 – Data from Local System Thu thập dữ liệu developer
Exfiltration T1041 – Exfiltration Over C2 Channel Gửi dữ liệu tới server attacker
Command and Control T1071 – Application Layer Protocol Sử dụng HTTP/WebSocket

Kết luận

Chiến dịch PhantomRaven cho thấy sự tiến hóa của các cuộc tấn công chuỗi cung ứng trong hệ sinh thái open source. Bằng cách kết hợp slopsquatting, Remote Dynamic Dependencies, và data harvesting scripts, attacker có thể âm thầm đánh cắp dữ liệu developer ngay trong quá trình cài đặt package.

Trong bối cảnh npm chứa hàng triệu dependency, chỉ một package độc hại cũng có thể dẫn đến compromise toàn bộ chuỗi phát triển phần mềm.

Do đó, việc kiểm soát dependency, giám sát hành vi cài đặt và bảo vệ token DevOps là yếu tố quan trọng để giảm thiểu rủi ro từ các chiến dịch tương tự.

Khuyến nghị

Kiểm tra và xác minh package trước khi cài đặt

  • Số lượng lượt tải xuống (downloads): Các package phổ biến thường có lượng download lớn và ổn định.

  • Repository nguồn: Kiểm tra xem package có liên kết tới repository GitHub hoặc GitLab hợp lệ hay không.

  • Lịch sử cập nhật: Package đáng tin cậy thường có lịch sử commit rõ ràng và maintainer hoạt động.

  • Maintainer uy tín: Tránh cài đặt package được publish bởi tài khoản mới tạo hoặc ít thông tin.

Hạn chế sử dụng dependency từ URL bên ngoài

  • Chỉ sử dụng dependency từ npm registry chính thức

  • Không sử dụng dependency từ URL không xác minh

  • Kiểm tra file package.json của các package mới cài

Bảo vệ token và thông tin xác thực

  • Không lưu token trực tiếp trong file cấu hình

  • Sử dụng secret manager hoặc environment vault

  • Thiết lập token expiration

  • Xoay vòng token định kỳ (token rotation)

Giám sát hành vi network trong quá trình cài đặt

Trong nhiều trường hợp, malware sẽ kết nối tới server attacker ngay khi package được cài đặt.

Do đó nên:

  • Giám sát lưu lượng mạng trong quá trình npm install

  • Phát hiện kết nối tới domain lạ

  • Chặn request tới domain không nằm trong whitelist.

Nâng cao nhận thức bảo mật cho developer

Các tổ chức nên đào tạo developer về:

  • Rủi ro từ supply chain attack

  • Cách nhận diện package độc hại

  • Cách bảo vệ token và secret.

IOCs

Malicious Domain

  • packages.storeartifact.com

  • npm.jpartifacts.com

  • package.storeartifacts.com

  • npm.artifactsnpm.com

URL / Phishing

MD5

  • AC89EE798372724756025B6EF400BDDD

  • 328BE455C1BD821A4F04194B8C905C6D

  • AF24E5FCEBA310E0953FA34AE40B75E5

  • 685017977342F93705E4A99B256D0B18

SHA1

  • 1C0BB37868D0208128EB99D0D2DD994DCC45F46F

  • 58EC6F2D933DAE3D4685CF5B318D13E564308FBC

  • C1AF38C04ED6D848904D99CBC322ABE6014B04F0

  • AF387331734F4575F6ED7FE3F919E70F6781A8B5

SHA256

  • 6F78E06CB72FD69F93F8E7A38F8F0B9A146F99DDA0C9C8729886C522D0CE18C9

  • BFAEA094A6908594813CC0D8F257A602143D041A2CAFEAF1E18F19AE0642E489

  • 53638DD5FD06CABBB6CDA83908BF5205A6AFBAFF500135607B0ACBFB18321F57

  • C227036E15FDC1AE368034AB737EC330C9B3CC029470C4C72B5324B4D9303A1F

IP C2 Server

  • 54.173.15.59

  • 100.26.42.247

  • 13.219.250.107

  • 54.227.45.171

Tham khảo

  1. New PhantomRaven NPM attack wave steals dev data via 88 packages

  2. The Return of PhantomRaven: Detecting Three New Waves of npm Supply Chain Attacks | Blog | Endor Labs

  3. PhantomRaven: npm Supply Chain Malware Steals Secrets

More from this blog

F

FPT IS Security

726 posts

Dedicated to providing insightful articles on cybersecurity threat intelligence, aimed at empowering individuals and organizations to navigate the digital landscape safely.