Tin tặc đầu độc các crate Rust phổ biến để đánh cắp thông tin đăng nhập của lập trình viên
Các gói cập nhật độc hại đã biến quy trình build phần mềm thông thường thành công cụ phát tán malware, đánh cắp thông tin đăng nhập của nhà phát triển. Cuộc tấn công chuỗi cung ứng nhắm vào nhiều crate Rust phổ biến, trong đó có arrayref với hàng trăm triệu lượt tải về, chỉ trong khoảng thời gian chưa đầy hai giờ.

Tin tặc đầu độc các crate Rust phổ biến để đánh cắp thông tin đăng nhập của lập trình viên
Các bản cập nhật độc hại vừa biến quy trình build phần mềm định kỳ thành một con đường xâm nhập vào máy tính của lập trình viên. Nhóm phản ứng bảo mật Rust (Rust Security Response Team) đã công bố cuộc tấn công chuỗi cung ứng này vào thứ Năm, sau khi nhận được báo cáo về một crate có tên là proc-macro1. Cuộc điều tra cho thấy script build của crate này đã tải malware từ một máy chủ từ xa.
Cuộc tấn công không chỉ dừng lại ở một crate độc hại duy nhất. Kẻ tấn công đã phát hành một phiên bản mới của arrayref, một gói Rust hợp pháp và được sử dụng rộng rãi, với proc-macro1 được thêm vào như một dependency. Kẻ tấn công cũng đã thu hồi các bản phát hành hợp pháp gần đây của arrayref, giúp định hướng người dùng tải về bản phát hành bị nhiễm độc.
Chi tiết cuộc tấn công
Đội ngũ Rust không tin rằng người duy trì arrayref phải chịu trách nhiệm. Họ nghi ngờ máy tính hoặc thông tin đăng nhập của nhà phát triển này đã bị xâm phạm, và đã khóa tài khoản trong khi cố gắng liên hệ với họ. Kẻ tấn công cũng đã phát hành các phiên bản độc hại của hai crate khác do cùng nhà phát triển này duy trì, bao gồm internment và append-only-vec.
Các bản phát hành độc hại không tồn tại lâu trên crates.io. Arrayref 0.3.10 có mặt trong 86 phút, internment 0.8.7 trong 90 phút và append-only-vec 0.1.9 trong 107 phút trước khi bị gỡ bỏ. Đây là một khoảng thời gian hẹp, nhưng arrayref không phải là một gói bị lãng quên. Công ty bảo mật Aikido, công ty đã phân tích riêng cuộc tấn công, ước tính arrayref có khoảng 245 triệu lượt tải về trong suốt vòng đời, còn append-only-vec là hơn 4 triệu lượt. Tuy nhiên, những con số này không cho biết có bao nhiêu lập trình viên đã tải các phiên bản độc hại trong thời gian ngắn chúng tồn tại.
Cách thức hoạt động của malware
Aikido phát hiện ra rằng kẻ tấn công hầu như không thay đổi mã nguồn hợp pháp ban đầu, chỉ thêm dependency vào proc-macro1, một biến thể giả mạo (typosquat) của gói proc-macro2 hợp pháp. Mã độc được giấu trong file build.rs của proc-macro1.
Cargo, trình quản lý gói của Rust, chạy các script build trong quá trình biên dịch. Điều này cho phép proc-macro1 xác định hệ điều hành và kiến trúc bộ xử lý của máy tính nhà phát triển, tải xuống một payload phù hợp và thực thi nó.
Aikido tìm thấy malware được xây dựng cho Linux, Windows, Mac Intel và Mac Apple Silicon. Payload giai đoạn hai không chỉ là một trình tải đơn giản. Aikido phát hiện mã nhắm vào dữ liệu trình duyệt dựa trên Chromium, bao gồm hồ sơ của Google Chrome, Brave và Microsoft Edge, cũng như bộ nhớ tiện ích mở rộng trình duyệt được sử dụng bởi ví tiền điện tử. Nó cũng có chức năng thiết lập sự tồn tại (persistence) và nhận lệnh từ máy chủ của kẻ tấn công.
Khuyến cáo cho cộng đồng lập trình viên
Đội ngũ Rust cũng đã xóa các crate proc-macro-en, aovine, arone, aronenao và tinymember, cảnh báo rằng mọi phiên bản của các crate này đều nên được coi là độc hại. Các lập trình viên được khuyến cáo kiểm tra file Cargo.lock và bộ nhớ cache registry cục bộ của họ để phát hiện các gói bị ảnh hưởng.
Rust ghi nhận nhóm nghiên cứu của Nextron Systems đã phát hiện và báo cáo ban đầu cuộc tấn công. Hiện vẫn chưa rõ nhà phát triển hợp pháp đã bị xâm phạm bằng cách nào, có bao nhiêu lập trình viên đã tải các bản phát hành độc hại, và có bao nhiêu hệ thống cuối cùng đã thực thi payload.
Các gói độc hại có thể chỉ tồn tại chưa đầy hai giờ trên crates.io, nhưng kẻ đứng sau chúng đã chọn một con đường quen thuộc để xâm nhập vào máy tính của các lập trình viên. Đây là một lời nhắc nhở rõ ràng về tầm quan trọng của việc kiểm tra kỹ lưỡng các dependency trong các dự án phần mềm, đặc biệt là trong hệ sinh thái mã nguồn mở.