Những kẻ tấn công ngụy trang thành các dự án mã nguồn mở hợp pháp và lừa người được phỏng vấn thực thi mã độc để đánh cắp tài sản.
Tác giả: Joker&Ccj, Công nghệ SlowMist
Biên tập: KrsMt.
bối cảnh
Vào ngày 9 tháng 8 năm 2025, trong buổi phỏng vấn vòng đầu tiên, một thành viên cộng đồng, tự xưng là thành viên đội ngũ Web3 tại Ukraine, đã được yêu cầu sao chép một kho lưu trữ GitHub cục bộ. Lo ngại về tính bảo mật mã nguồn của kho lưu trữ, thành viên này gần đây đã liên hệ với đội ngũ bảo mật SlowMist để được hỗ trợ. Chúng tôi đã ngay lập tức phân tích dự án GitHub mã nguồn mở(EvaCodes-Community/UltraX) và phát hiện ra các vấn đề. Với sự đồng ý của thành viên này, chúng tôi đã đưa ra cảnh báo bảo mật.

Quá trình phân tích
Trước tiên, chúng ta hãy truy cập kho lưu trữ GitHub của dự án: https://github.com/EvaCodes-Community/UltraX. Từ những sửa đổi gần đây, chúng ta có thể thấy phiên bản mới nhất giới thiệu một gói của bên thứ ba có tên là [email protected] , thay thế cho gói [email protected] ban đầu.

Gói NPM [email protected] gốc đã bị đội ngũ bảo mật NPM xóa vì chứa mã độc hại.

[email protected] là gói NPM mới được phát hành.

Chúng tôi đã mở địa chỉ kho lưu trữ GitHub của gói NPM và phát hiện mã nguồn đã bị xóa trên GitHub. Do đó, ban đầu chúng tôi xác định rằng gói NPM là một thành phần đáng ngờ.

Sau khi phân tích, chúng tôi tìm thấy mã đáng ngờ trong /rtk-logger/lib/utils/smtp-connection.

Trước tiên, hãy phân tích mã index.js. Trong index.js, chúng ta import một số mô-đun, gọi fs.readFile để đọc nội dung của tệp LICENSE, truyền nó cho phương pháp parseLib() để phân tích cú pháp, sau đó gọi hàm eval() để thực thi động mã được trả về bởi phương pháp parseLib(). Phương pháp parseLib() tham chiếu đến mô-đun parse.js trong mục lục hiện tại.

Bạn có thể thấy parse.js gọi thuật toán giải mã aes-256-cbc, sử dụng Key và iv được mã hóa cứng trong mã. Đầu tiên, nó chuyển đổi văn bản mã hóa thập lục phân đầu vào thành một bộ đệm, sau đó thực hiện giải mã bằng crypto.createDecipheriv(), và cuối cùng chuyển đổi dữ liệu đã giải mã thành chuỗi UTF-8 và trả về.

Sau khi giải mã LICENSE, chúng ta có thể thấy rằng đây là một đoạn mã được mã hóa rất phức tạp, làm tăng thêm độ khó cho việc phân tích.

Sau khi giải mã, chúng tôi có thể xác nhận đây là một gói NPM độc hại. Kẻ tấn công đã triển khai một số hàm độc hại trong [email protected] . Đầu tiên, chúng thu thập dữ liệu mở rộng từ các trình duyệt chính (Chrome, Brave, Opera, Firefox), tệp ví tiền crypto và dữ liệu nhạy cảm của người dùng. Nếu tìm thấy dữ liệu liên quan, dữ liệu đó sẽ được tải lên máy chủ do kẻ tấn công kiểm soát.
Trong mã bên dưới, đường dẫn trình duyệt cụ thể và ID mở rộng ví tiền crypto được mã hóa cứng.

Chức năng chính của mã trong hình bên dưới là nhập mô-đun tích hợp của Node.js và các thư viện của bên thứ ba và lấy một số thông tin liên quan đến hệ thống để chuẩn bị cho các hoạt động độc hại tiếp theo.

Trong gói NPM độc hại, phương pháp uploadFiles() chịu trách nhiệm quét và thu thập các tệp cấu hình của các trình duyệt cụ thể (như Chrome, Brave và Opera), đánh cắp dữ liệu nhạy cảm từ ví crypto và gọi hàm Upload() để tải dữ liệu nhạy cảm lên máy chủ độc hại.

Phương pháp uploadMozilla() được sử dụng cụ thể để thu thập dữ liệu nhạy cảm từ trình duyệt Firefox và gọi hàm Upload() để tải dữ liệu nhạy cảm thu được lên máy chủ độc hại.

Phương pháp uploadEs() chủ yếu được sử dụng để lấy dữ liệu nhạy cảm từ ví Exodus và gọi hàm Upload() để tải dữ liệu nhạy cảm thu được lên máy chủ độc hại.

Phương pháp UpKeychain() chủ yếu đánh cắp mật khẩu, chứng chỉ và dữ liệu đăng nhập được lưu trữ trong Keychain và gọi hàm Upload() để tải dữ liệu nhạy cảm thu được lên máy chủ độc hại.

UpUserData đánh cắp thông tin cực kỳ nhạy cảm từ trình duyệt của người dùng, đặc biệt là thông tin đăng nhập và khóa có thể được sử dụng để giải mã dữ liệu khác và gọi hàm Upload() để tải dữ liệu nhạy cảm thu được lên máy chủ độc hại.

Phương pháp Upload() chủ yếu thực hiện chức năng tải dữ liệu nhạy cảm lên máy chủ độc hại (144[.]172[.]112[.]106) và không có xử lý nào được thực hiện trong hàm điều chỉnh hồi.

Ngoài việc lấy dữ liệu nhạy cảm của người dùng và dữ liệu ví, gói NPM độc hại còn thực hiện nhiều phương pháp độc hại khác.
Như được hiển thị trong đoạn mã bên dưới, phương pháp runP() kiểm tra xem tệp có tên p.zi trong mục lục. Nếu có, tệp sẽ được đổi tên thành p5.zip và giải nén bằng extractFile(). Nếu tệp không tồn tại, payload độc hại sẽ được tải xuống từ máy chủ từ xa (144[.]172[.]112[.]106), lưu dưới dạng p.zi, đổi tên thành p5.zip, rồi giải nén phương pháp extractFile().

Phương pháp Xt() hoạt động khác nhau tùy thuộc vào hệ điều hành. Nếu hệ điều hành là Windows và phát hiện thấy python.exe, nó sẽ tải xuống một tập lệnh Python từ máy chủ độc hại (144[.]172[.]112[.]106), lưu dưới dạng tệp .nlp và thực thi. Nếu python.exe không tồn tại, nó sẽ gọi runP() để tải xuống. Nếu hệ điều hành không phải là Windows, nó sẽ trực tiếp tải xuống tập lệnh Python và thực thi bằng Python 3.

Trong gói NPM độc hại, biến aj được gán cho một tập lệnh độc hại. Tập lệnh này định nghĩa một hàm makeLog gửi thông báo đến máy chủ độc hại. Hàm setHeader cố gắng phát hiện xem tập lệnh có đang chạy trong hoàn cảnh máy ảo hay không bằng cách kiểm tra thông tin hệ thống, sau đó gửi thông báo đến máy chủ độc hại (172[.]86[.]64[.]67).

Sau đó, mã độc cố gắng cài đặt thư viện socket.io-client bằng lệnh npm install. Thư viện này thiết lập kết nối socket với máy chủ C&C (172[.]86[.]64[.]67), lắng nghe các thông điệp "lệnh" từ máy chủ độc hại và khi nhận được lệnh, thực thi lệnh đó bằng phương thức exec() và gửi kết quả trở lại máy chủ độc hại. Máy chủ độc hại cũng có thể lấy thông tin hoàn cảnh hiện tại máy trạm bằng lệnh "whour".

Biến ak được gán một tập lệnh độc hại, chủ yếu được sử dụng để đánh cắp dữ liệu nhạy cảm từ trình duyệt và người dùng, sau đó gửi dữ liệu nhạy cảm đã đánh cắp trở lại máy chủ độc hại.

Biến al cũng được gán một tập lệnh độc hại, chủ yếu quét hệ thống tệp của máy tính mục tiêu, tìm kiếm các tệp dữ liệu nhạy cảm và gửi dữ liệu nhạy cảm bị đánh cắp đến một máy chủ độc hại.

Tập lệnh độc hại được gán cho biến am sẽ triển khai các chức năng như ghi nhật ký bàn phím, ảnh chụp màn hình và giám sát nội dung bảng tạm, đồng thời gửi dữ liệu đến máy chủ độc hại.


Chúng tôi cũng nhận thấy hai tài khoản GitHub đã fork kho lưu trữ này. Sau khi phân tích các dự án fork này, chúng tôi phát hiện gói NPM độc hại ban đầu [email protected] có trong tệp package.json.

Chỉ báo thỏa hiệp (IoC)
IP:
144[.]172[.]112[.]106
172[.]86[.]64[.]67
URL:
http://144[.]172[.]112[.]106:1224/pdown
http://144[.]172[.]112[.]106:1224/client/5346/64
https://api[.]npoint[.]io/96979650f5739bcbaebb
http://172[.]86[.]64[.]67/api/service/makelog
http://172[.]86[.]64[.]67/api/service/process/
http://172[.]86[.]64[.]67:4181
http://172[.]86[.]64[.]67:4188/tải lên
http://172[.]86[.]64[.]67:4186/tải lên
http://172[.]86[.]64[.]67:4187/tải lên
SHA256:
af46c7917f04a9039eb0b439a7615ec07b7ad88048cb24fe23c454c16dffcd57 - rtk-logger-1.11.5.tgz
Sử dụng kho lưu trữ GitHub [email protected] :
https://github[.]com/EvaCodes-Community/UltraX
Sử dụng kho lưu trữ GitHub [email protected] :
https://github[.]com/kylengn/UltraX
https://github[.]com/taqveemahsan/UltraX
https://github[.]com/zinping/Pain_project
Gói NPM độc hại:
https://www[.]npmjs[.]com/package/rtk-logger
https://www[.]npmjs[.]com/package/redux-ace
Địa chỉ tải xuống gói NPM
https://registry[.]npmjs[.]org/rtk-logger/-/rtk-logger-1.11.5.tgz
Tóm tắt
Trong sự cố lần, kẻ tấn công đã ngụy trang thành các dự án mã nguồn mở hợp pháp (EvaCodes-Community/UltraX) để lừa người được phỏng vấn tải xuống và chạy mã độc. Nếu người được phỏng vấn bất ngờ và chạy một dự án chứa các gói NPM độc hại, dữ liệu nhạy cảm có thể bị rò rỉ và tài sản bị đánh cắp. Chúng tôi khuyến cáo các nhà phát triển và người dùng nên hết sức cảnh giác với các dự án GitHub không rõ nguồn gốc. Nếu cần gỡ lỗi, nên hoàn cảnh và gỡ lỗi trên một máy riêng biệt không có dữ liệu nhạy cảm.
Tuyên bố miễn trừ trách nhiệm: Là một nền tảng thông tin blockchain, các bài viết được đăng trên trang web này chỉ phản ánh quan điểm tác giả và khách truy cập, không đại diện cho lập trường của Web3Caff. Thông tin trong các bài viết này chỉ mang tham khảo và không cấu thành bất kỳ lời khuyên hay ưu đãi đầu tư nào. Vui lòng tuân thủ luật pháp và quy định hiện hành của quốc gia hoặc khu vực của bạn.
Chào mừng bạn tham gia cộng đồng Web3Caff chính thức : Tài khoản X (Twitter) | Nghiên cứu Web3Caff Tài khoản X (Twitter) | Nhóm độc giả WeChat | Tài khoản công khai WeChat




