Nguy hiểm: Tấn công Chuỗi cung ứng PyPI tinh vi

Nguy hiểm: Tấn công Chuỗi cung ứng PyPI tinh vi

Các chuyên gia an ninh mạng gần đây đã công bố phát hiện về một mối đe dọa mạng phức tạp dưới dạng tấn công chuỗi cung ứng, bắt nguồn từ chỉ mục gói Python (PyPI). Cuộc tấn công này được Zscaler ThreatLabz tiết lộ, cho thấy sự tinh vi trong việc khai thác các hệ sinh thái mã nguồn mở.

Nội dung
Tổng quan về Cuộc Tấn Công Chuỗi Cung Ứng PyPI

Kịch bản Lây nhiễm Ban đầu
Phân tích Kỹ thuật Mã độc và Cơ chế Hoạt động

Giai đoạn 1: Khai thác DLL Sideloading và Giải mã Payload
Giai đoạn 2: Thu thập Thông tin và Liên lạc Command-and-Control (C2)
Cơ chế Duy trì và Ẩn mình
Khả năng Đa nền tảng
Hồ sơ Đối tượng Đe dọa và Chỉ số Thỏa hiệp (IOCs)

Chỉ số Thỏa hiệp (IOCs)
Biện pháp Phòng ngừa và Phát hiện

Tổng quan về Cuộc Tấn Công Chuỗi Cung Ứng PyPI

Gói độc hại được phát hiện có tên là termncolor, ngụy trang thành một tiện ích màu sắc vô hại dành cho terminal Python. Tuy nhiên, nó lại bí mật nhập một dependency độc hại khác mang tên colorinal. Dependency này đóng vai trò là vectơ lây nhiễm ban đầu, kích hoạt một quá trình triển khai mã độc đa giai đoạn.

Kỹ thuật chính được sử dụng bao gồm tấn công DLL sideloading, giải mã payload bằng thuật toán mã hóa AES, và che giấu các giao tiếp Command-and-Control (C2). Cả hai gói termncolorcolorinal đã bị xóa khỏi PyPI sau khi được phát hiện, điều này nhấn mạnh rủi ro liên tục trong các hệ sinh thái mã nguồn mở khi các tác nhân đe dọa khai thác cây phụ thuộc (dependency tree) để phân phối mã độc hại.

Kịch bản Lây nhiễm Ban đầu

Chuỗi tấn công khởi phát từ việc thực thi tệp tin unicode.py nằm trong gói colorinal. Tệp tin này đóng vai trò là điểm khởi đầu, kích hoạt quá trình tải và nạp một tệp thư viện động (DLL) được nhúng sẵn, có tên là terminate.dll. Việc tải DLL này là một bước quan trọng, cho phép mã độc thiết lập sự hiện diện ban đầu trên hệ thống nạn nhân mà không bị phát hiện dễ dàng.

Phân tích Kỹ thuật Mã độc và Cơ chế Hoạt động

Phân tích kỹ thuật sâu hơn cho thấy, ban đầu, gói termncolor dường như vô hại, chỉ hoạt động như một công cụ tô màu cho terminal mà không có dấu hiệu độc hại rõ ràng. Tuy nhiên, sự phụ thuộc của nó vào colorinal chính là điểm yếu, nơi payload được đưa vào thông qua phương thức is_color_supported trong tệp unicode.py.

Giai đoạn 1: Khai thác DLL Sideloading và Giải mã Payload

Phương thức is_color_supported sử dụng thư viện ctypes.CDLL để tải terminate.dll vào bộ nhớ. DLL này được lấy từ thư mục của script bằng cách sử dụng os.path.dirname(file), và nó giao tiếp với một hàm được xuất ra tên là envir bằng cách truyền một chuỗi mã hóa UTF-8xterminalunicode. Tương tác này không chỉ truy vấn khả năng của terminal mà còn đồng thời khởi tạo quá trình giải mã.

Sử dụng chế độ AES trong CBC với khóa giải mã chính là chuỗi xterminalunicode đã truyền, terminate.dll tiến hành giải mã và phát tán hai tệp tin quan trọng:

  • Một tệp thực thi hợp pháp và được ký số: vcpktsvr.exe
  • Một tệp DLL độc hại: libcef.dll

Các tệp này được lưu trữ trong thư mục %LOCALAPPDATA%vcpacket. Tại đây, vcpktsvr.exe sẽ tạo điều kiện cho kỹ thuật DLL sideloading để thực thi libcef.dll một cách bí mật. Để tránh bị phát hiện xâm nhập và giảm thiểu dấu vết pháp y, mã độc tự động xóa các tệp unicode.pyterminate.dll sau khi thực thi thành công.

Giai đoạn 2: Thu thập Thông tin và Liên lạc Command-and-Control (C2)

Tiến đến giai đoạn thứ hai, libcef.dll thực hiện trinh sát hệ thống bằng cách thu thập các chi tiết như tên máy tính, tên người dùng, và phiên bản hệ điều hành. Các thông tin này sau đó được định dạng và truyền đến máy chủ C2 thông qua giao thức HTTPS. Giao tiếp này được thiết kế để bắt chước các mẫu tin nhắn Zulip hợp pháp, giúp nó hòa trộn vào lưu lượng truy cập mạng thông thường và tránh bị phát hiện dựa trên phân tích mạng.

Cơ chế Duy trì và Ẩn mình

Khả năng duy trì trên hệ thống được thực hiện một cách khéo léo thông qua việc sửa đổi Registry Windows tại khóa HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRun. Một mục nhập mới có tên pkt-update được tạo ra, đảm bảo rằng vcpktsvr.exe sẽ tự động thực thi mỗi khi hệ thống khởi động. Việc khai thác khóa Run của Windows này giúp mã độc duy trì sự hiện diện lâu dài trên hệ thống bị tấn công mạng.

Hơn nữa, mã độc này giải quyết các API bằng cách sử dụng một thuật toán băm tùy chỉnh. Đây là một hàm nhẹ dựa trên giá trị ASCII, phép nhân và các phép toán bitwise để làm phức tạp việc phân tích tĩnh các tên DLL và API, từ đó gây khó khăn cho việc phân tích mã độc.

Khả năng Đa nền tảng

Mối đe dọa này còn mở rộng sang các nền tảng khác, với một biến thể dành cho hệ điều hành Linux. Biến thể Linux sử dụng tệp đối tượng chia sẻ (shared object file) có tên là terminate.so để tái tạo chức năng tương tự như phiên bản Windows. Điều này cho thấy sự linh hoạt và khả năng mở rộng của cuộc tấn công mạng này.

Hồ sơ Đối tượng Đe dọa và Chỉ số Thỏa hiệp (IOCs)

Phân tích hồ sơ tác nhân đe dọa thông qua dữ liệu phân tích Zulip chỉ ra rằng các hoạt động của nhóm này bắt đầu vào khoảng ngày 10 tháng 7 năm 2025. Các hoạt động này liên quan đến một địa chỉ email là [email protected] và ID người dùng là 937950. Đáng chú ý, việc sử dụng API Python để truyền tin nhắn rất phổ biến trong các hoạt động này.

Hoạt động đạt đỉnh điểm vào cuối tháng 7, bao gồm tổng cộng 90.692 tin nhắn được gửi qua các kênh riêng tư. Tuy nhiên, cơ sở hạ tầng C2 liên quan đến chiến dịch này hiện đã ngừng hoạt động.

Chỉ số Thỏa hiệp (IOCs)

Theo báo cáo từ Zscaler, các hệ thống phòng thủ của họ, bao gồm Cloud Sandbox, đã phát hiện các chỉ số liên quan đến cuộc tấn công này dưới các tên mối đe dọa sau:

  • Python.Backdoor.PyPI
  • Win64.Backdoor.Xterminal

Các chỉ số này cung cấp một lớp bảo vệ đa tầng chống lại các hành vi xâm nhập tương tự. Xem chi tiết hơn về các IOCs tại báo cáo của Zscaler ThreatLabz.

Biện pháp Phòng ngừa và Phát hiện

Sự cố này là một ví dụ điển hình cho thấy sự tinh vi ngày càng tăng của các mối đe dọa mạng trong chuỗi cung ứng. Kẻ tấn công vũ khí hóa các dependency để thực hiện giải mã, sideloading và thực thi mã từ xa (RCE).

Để đối phó với những mối nguy này, việc thẩm định gói phần mềm (package vetting) một cách nghiêm ngặt và giám sát thời gian chạy (runtime monitoring) trong toàn bộ quy trình phát triển là vô cùng cần thiết. Điều này góp phần tăng cường tổng thể an ninh mạng cho các tổ chức và người dùng cá nhân.