Các gói npm bị cài mã độc giải mã IP C2 từ địa chỉ người nhận Ethereum

Các nhà nghiên cứu an ninh mạng vừa cảnh báo về sự phát triển của kỹ thuật C2 dựa trên blockchain EtherHiding, giúp ẩn địa chỉ IP của máy chủ C2 bên trong một địa chỉ đích giả mạo của một giao dịch Ethereum trống hoàn toàn. Cách tiếp cận dead drop resolver mới này được phát hiện trong hai gói npm "bianira-ui" và "fluid-type-ui", với tên gọi NullReceiver.
Mô phỏng kỹ thuật NullReceiver trên npm và Ethereum

Các nhà nghiên cứu an ninh mạng vừa cảnh báo về một bước tiến hóa của kỹ thuật command-and-control (C2) dựa trên blockchain mang tên EtherHiding. Phương thức mới này giúp ẩn địa chỉ IP của máy chủ C2 bên trong một địa chỉ đích giả mạo của một giao dịch Ethereum hoàn toàn trống.

Cách tiếp cận dead drop resolver mới này được quan sát thấy trong hai gói npm bị cài mã độc là "bianira-ui" và "fluid-type-ui", đã được OpenSourceMalware đặt mật danh là NullReceiver. Tổ chức này mô tả đây là một "sự cải tiến có chủ đích so với EtherHiding". Hoạt động này được cho là có liên quan đến Triều Tiên.

Hiện tại, các gói này không còn khả dụng để tải xuống từ npm. Tuy nhiên, các số liệu thống kê cho thấy chúng đã được tải xuống vài trăm lần kể từ khi xuất hiện lần đầu vào ngày 28 tháng 7 năm 2026:

  • bianira-ui (109 lượt tải), được tải lên bởi người dùng npm "npmuser1101".
  • fluid-type-ui (587 lượt tải), được tải lên bởi người dùng npm "npmuser3002".

Sự tiến hóa từ EtherHiding

EtherHiding lần đầu tiên được Guardio Labs ghi nhận vào tháng 10 năm 2023 như một phương pháp bí mật bao gồm việc nhúng mã độc vào bên trong một smart contract trên các blockchain công khai như BNB Smart Chain (BSC) hoặc Ethereum. Kỹ thuật này được báo trước là "cấp độ tiếp theo của bulletproof hosting" vì nó cải thiện khả năng phục hồi hoạt động trước các nỗ lực triệt phá.

Việc sử dụng EtherHiding bởi các nhóm hacker Triều Tiên đã được Google Threat Intelligence Group (GTIG) trình bày chi tiết liên quan đến chiến dịch "Contagious Interview". Đây là một chiến dịch kéo dài nhằm đánh lừa các mục tiêu tiềm năng trên LinkedIn bằng các cơ hội việc làm hấp dẫn, sau đó yêu cầu họ hoàn thành một bài kiểm tra dẫn đến việc triển khai malware.

Cơ chế hoạt động của NullReceiver

Phát triển mới nhất cho thấy các tác nhân đe dọa đang tinh chỉnh thêm các chiến thuật của mình, khiến những người bảo vệ hệ thống khó phát hiện hơn.

"Thay vì hardcoding địa chỉ C2 hoặc ẩn nó trong giao dịch calldata (như trong EtherHiding), NullReceiver mã hóa trực tiếp IP C2 vào các byte của địa chỉ người nhận trong một giao dịch Ethereum có giá trị bằng 0 và không có dữ liệu," nhà nghiên cứu bảo mật Paul McCarty cho biết.

"Malware sẽ tra cứu ví của kẻ tấn công, đọc địa chỉ đích của giao dịch gửi đi gần nhất và giải mã IP C2 trực tiếp từ các byte địa chỉ đó, mà không cần smart contract hay trường payload nào liên quan."

Sơ đồ kỹ thuật NullReceiver
Minh họa cách NullReceiver giải mã IP từ địa chỉ ví.

Bằng cách nhúng địa chỉ IP C2 theo cách này, NullReceiver nhằm khắc phục một trong những thiếu sót lớn của EtherHiding là yêu cầu một địa chỉ đích cố định, công khai — thứ mà các bên phòng thủ có thể theo dõi khi các giao dịch mới chứa payload, địa chỉ IP C2 hoặc tập lệnh độc hại xảy ra với một khoản phí gas.

Ngược lại, NullReceiver cung cấp một địa chỉ đích không tồn tại. Địa chỉ này "tồn tại" chỉ để cung cấp một cách mã hóa địa chỉ IP C2 bên trong chính nó. Điều này làm cho việc quy trách nhiệm trở nên khó khăn, vì nó loại bỏ "điểm đích cố định, có thể theo dõi".

Quy trình thực thi trên máy nạn nhân

Cả hai gói npm mới được phát hiện (bianira-ui và fluid-type-ui) đều không gọi smart contract hay nhúng bất kỳ nội dung nào vào trường calldata của giao dịch. Thay vào đó, các thư viện JavaScript tận dụng kỹ thuật mới để trích xuất địa chỉ IP và kết nối với nó. Toàn bộ chuỗi hành động như sau:

  • Tra cứu một ví của kẻ tấn công đã được hard-coded ("0xa322e5f3d311d3080e6f0121063e9adc2490ef1a").
  • Tìm giao dịch gửi đi gần nhất của ví đó.
  • Đọc địa chỉ đích của giao dịch đó.
  • Giải mã địa chỉ IP C2 trực tiếp từ các byte địa chỉ bằng cách chuyển đổi bốn byte đầu tiên từ hệ thập lục phân sang số tương đương.
  • Kết nối tới địa chỉ IP đó ("166.88.134[.]62").

Phân tích các giao dịch ví cho thấy địa chỉ đích "To" cho mỗi giao dịch là giống nhau: "0xa658863ea658863e68656c6c6f6970626f742121". Trong khi "a658863e" trở thành "166.88.134[.]62", các byte đuôi "68656c6c6f6970626f742121" đại diện cho chuỗi ASCII "helloipbot!!".

Khả năng lẩn trốn vượt trội

Điều làm cho NullReceiver trở nên lén lút hơn là sự vắng mặt của mục tiêu cố định và dấu vân tay (fingerprint), chưa kể đến việc các giao dịch này rẻ hơn trước. Một sự khác biệt quan trọng là trong khi EtherHiding có thể vận chuyển một URL hoặc tập lệnh đầy đủ, NullReceiver chỉ có thể mã hóa một vài byte.

"NullReceiver không bao giờ tái sử dụng một điểm đích," OpenSourceMalware cho biết. "Mỗi lần tra cứu là một địa chỉ mới toanh, dùng một lần rồi bỏ. Một giao dịch NullReceiver không mang theo bất kỳ thứ gì thêm. Không có trường nào để nhận dạng dấu vân tay, bởi vì đơn giản là không có trường nào cả."

Ngoài ra, vì calldata tốn gas cho mỗi byte, EtherHiding phải trả phí cho việc đó. Chuyển khoản của NullReceiver hoàn toàn trống rỗng, khiến nó trở thành loại hình giao dịch rẻ nhất và ít gây chú ý nhất trên mạng lưới.