Các nhà nghiên cứu an ninh mạng đang gióng lên hồi chuông cảnh báo về "hoạt động độc hại" được phát hiện trong các phiên bản mới phát hành của node-ipc.
Theo Socket và StepSecurity, ba phiên bản khác nhau của gói npm này đã được xác nhận là độc hại, bao gồm:
"Phân tích ban đầu cho thấy [email protected], [email protected] và [email protected] chứa hành vi stealer/backdoor đã được obfuscated," Socket cho biết.
Mã độc này dường như thực hiện thu thập dấu vết (fingerprint) môi trường máy chủ, liệt kê và đọc các tệp cục bộ, nén và chia nhỏ dữ liệu thu thập được, bọc payload trong một lớp mã hóa và cố gắng thực hiện exfiltration (trích xuất dữ liệu) thông qua một điểm cuối mạng được lựa chọn qua logic DNS/address.
Hơn 90 loại thông tin nhạy cảm bị nhắm mục tiêu
StepSecurity cho biết payload đã được obfuscated kỹ lưỡng sẽ được kích hoạt khi gói được gọi lúc thực thi (runtime) và cố gắng trích xuất một tập hợp rộng lớn các bí mật của nhà phát triển và đám mây đến một máy chủ C2 bên ngoài.
Danh sách này bao gồm 90 loại thông tin xác thực, bao gồm Amazon Web Services, Google Cloud, Microsoft Azure, SSH keys, Kubernetes tokens, cấu hình GitHub CLI, cài đặt Claude AI và Kiro IDE, trạng thái Terraform, mật khẩu cơ sở dữ liệu, lịch sử shell và nhiều hơn nữa. Dữ liệu thu thập sau đó được nén thành kho lưu trữ GZIP và truyền đến tên miền sh.azurestaticprovider[.]net.
Ba phiên bản này được phát hành bởi một tài khoản tên là "atiertant", vốn không có mối liên hệ nào với tác giả ban đầu của gói là "riaevangelist". Mặc dù "atiertant" xuất hiện trong danh sách người duy trì (maintainer), tài khoản này chưa từng có lịch sử phát hành liên quan đến gói node-ipc trước đó. Bản cập nhật gần nhất của gói này là vào tháng 8 năm 2024.
Kỹ thuật tấn công tinh vi và nhắm mục tiêu
Điều đáng chú ý là hoạt động này không dựa vào bất kỳ npm lifecycle hooks nào như preinstall, install hoặc postinstall scripts. Thay vào đó, nó chèn payload độc hại dưới dạng một Immediately Invoked Function Expression (IIFE) vào cuối tệp node-ipc.cjs. Điều này khiến mã độc thực thi vô điều kiện mỗi khi có lệnh require('node-ipc').
Sự bất thường chưa dừng lại ở đó, vì payload thực hiện kiểm tra dấu vết SHA-256 và so sánh nó với một mã hash cứng được lắp ghép từ tám đoạn bảng obfuscated nhúng trong mã nguồn, trước khi tiến hành liệt kê hệ thống và thu hoạch thông tin xác thực toàn diện.
"Điều này có nghĩa là phiên bản 12.0.1 hoàn toàn không hoạt động trên bất kỳ máy nào mà đường dẫn module chính không khớp với giá trị hash mục tiêu," nhà nghiên cứu Sai Likhith của StepSecurity cho biết. "Kẻ tấn công biết chính xác dự án hoặc nhà phát triển nào đang bị nhắm mục tiêu và đã tính toán trước mã hash điểm đầu vào của họ trước khi phát hành. Các phiên bản 9.x không có rào cản này và sẽ thực thi toàn bộ payload trên bất kỳ hệ thống nào tải chúng."
Kênh trích xuất dữ liệu qua DNS
Mã độc cũng tích hợp một kênh exfiltration thứ hai bên cạnh việc gửi HTTPS POST đến tên miền Azure giả mạo. Kỹ thuật này bao gồm việc mã hóa các phần của kho lưu trữ dưới dạng bản ghi DNS TXT sau khi ghi đè bộ giải tên miền (DNS resolver) của hệ thống bằng Google Public DNS để lách qua các kiểm soát an ninh dựa trên DNS cục bộ.
StepSecurity giải thích: "Đầu tiên nó phân giải sh.azurestaticprovider.net bằng 1.1.1.1 (chính) hoặc 8.8.8.8 (dự phòng) để lấy IP của C2. Sau đó, nó nhắm thẳng bộ giải tên miền đến IP của C2 cho tất cả các truy vấn trích xuất dữ liệu."
Việc gửi dữ liệu trực tiếp đến DNS sink của C2 là một kỹ thuật chống phát hiện đáng chú ý. Vì các truy vấn trích xuất không bao giờ chạm đến các máy chủ DNS công cộng, nên sẽ không có hoạt động bt.node.js nào có thể quan sát được trong nhật ký DNS công cộng.
Quá khứ "Protestware" và Khuyến nghị
Đây không phải là lần đầu tiên gói npm này tích hợp các tính năng độc hại. Vào tháng 3 năm 2022, người duy trì gói này đã cố tình đưa vào khả năng phá hoại trong các phiên bản 10.1.1 và 10.1.2 bằng cách ghi đè các tệp trên hệ thống đặt tại Nga hoặc Belarus.
Người dùng được khuyến nghị thực hiện các bước sau ngay lập tức:
- Gỡ bỏ các phiên bản node-ipc bị xâm nhập và cài đặt lại phiên bản sạch đã biết (9.2.1 và 12.0.0).
- Coi như hệ thống đã bị xâm nhập và thực hiện thay đổi (rotate) tất cả thông tin xác thực và bí mật (secrets).
- Kiểm tra hoạt động phát hành npm cho bất kỳ gói nào có thể truy cập được bằng các mã thông báo (tokens) đã bị lộ.
- Xem xét nhật ký chạy workflow để tìm hoạt động nghi ngờ và kiểm tra nhật ký đám mây để xem liệu có hành động trái phép nào được thực hiện bởi các thực thể IAM hay không.
- Chặn lưu lượng truy cập đi đến tên miền C2.