uuid32-utilscolorinaltermncolorVề quy kết, cần đọc kỹ cách Kaspersky diễn đạt. Bài Securelist nói các mẫu được đưa vào Kaspersky Threat Attribution Engine, hay KTAE, để phân tích và các gói này có thể liên quan đến mã độc từng được thảo luận trong một báo cáo tình báo mối đe dọa về OceanLotus. Trang chỉ mục nghiên cứu mối đe dọa của Kaspersky thì trực tiếp hơn, nói công ty quy hoạt động PyPI/ZiChatBot này cho OceanLotus APT.
Một bản tóm tắt công khai mô tả mức quy kết là “độ tin cậy trung bình”.
Bức tranh công khai hiện có cho thấy đây là một chuỗi dropper đa nền tảng. Trang chỉ mục nghiên cứu mối đe dọa của Kaspersky nói các gói wheel độc hại trên PyPI nhắm vào cả Windows và Linux, đồng thời chứa dropper dùng để triển khai mã độc được đặt tên là ZiChatBot.
Một bản tóm tắt công khai mô tả các bước tiếp theo là trích xuất dropper dạng DLL hoặc .SO từ gói wheel, tạo cơ chế bám trụ qua Windows Registry hoặc crontab trên Linux, rồi triển khai ZiChatBot. Điều này khiến chiến dịch không chỉ đáng chú ý với máy chủ ứng dụng, mà còn với máy trạm của lập trình viên, môi trường ảo, hệ thống build/CI và image container từng cài các gói bị ảnh hưởng.
Chiến dịch cũng nhắc lại một bài học khó chịu trong an ninh chuỗi cung ứng phần mềm: một gói “chạy được” không đồng nghĩa với an toàn. Theo Kaspersky, các wheel độc hại vẫn cung cấp tính năng như quảng bá trên trang PyPI, đồng thời lén đưa tệp độc hại vào hệ thống.
Điểm khác thường của ZiChatBot là nó lạm dụng một nền tảng cộng tác hợp pháp làm lớp điều khiển. Theo tường thuật về phát hiện của Kaspersky, ZiChatBot không giao tiếp với máy chủ C2 chuyên dụng; thay vào đó, nó dùng một loạt REST API của Zulip, ứng dụng chat nhóm công khai, làm hạ tầng C2.
Tài liệu API của Zulip hỗ trợ các thao tác mà một mô hình C2 dựa trên chat có thể cần, gồm gửi tin nhắn, lấy tin nhắn, tải tệp lên, sửa hoặc xóa tin nhắn, tạo bộ lọc ngữ cảnh message narrow và làm việc với chủ đề trong kênh. Tài liệu bot của Zulip cũng mô tả các bot có thể chặn, xem và xử lý tin nhắn do người dùng gửi, rồi gửi tin nhắn mới để phản hồi.
Ở mức khái quát, điều này có nghĩa chỉ thị của người vận hành có thể được biểu diễn như tin nhắn chat hoặc tin nhắn theo chủ đề, còn mã độc có thể lấy các tin nhắn liên quan và gửi kết quả trở lại qua cùng dịch vụ. Các nguồn công khai được cung cấp không tiết lộ workspace Zulip cụ thể, thông tin xác thực bot, chuỗi endpoint hay tập lệnh mà ZiChatBot sử dụng. Vì vậy, cách mô tả an toàn nhất là: ZiChatBot đã lạm dụng chức năng REST API hợp pháp của Zulip để làm C2, thay vì dựa vào hạ tầng C2 do kẻ tấn công tự sở hữu.
Góc Zulip trong vụ này không đồng nghĩa với việc bản thân Zulip bị xâm nhập. Các nguồn được trích dẫn mô tả việc lạm dụng chức năng REST API và nhắn tin kiểu bot vốn hợp lệ, không phải một vụ xâm phạm dịch vụ chat.
Tương tự, điều này cũng không có nghĩa hạ tầng PyPI bị chiếm quyền. Báo cáo của Kaspersky nói các gói wheel độc hại đã được tải lên PyPI và mã độc sau đó bị gỡ khỏi kho.
Với đội phòng thủ, hàm ý thực tế là: lưu lượng đến một dịch vụ cộng tác hợp pháp vẫn có thể đáng ngờ nếu nó xuất phát từ máy, tiến trình, job CI hoặc tài khoản dịch vụ vốn không có lý do nghiệp vụ để nói chuyện với dịch vụ đó. Các danh sách chặn chỉ tập trung vào domain do kẻ tấn công sở hữu có thể bỏ sót kiểu lạm dụng này, nên điều tra cần xem cả ngữ cảnh tiến trình và nhu cầu sử dụng hợp lệ, không chỉ dựa vào uy tín của đích đến.
Trước hết, hãy rà soát danh mục gói. Tìm trên máy lập trình viên, build runner, môi trường ảo, dependency lockfile và image container xem có uuid32-utils, colorinal hoặc termncolor hay không.
Tiếp theo, xem lại mốc thời gian cài đặt từ tháng 7/2025 trở đi, là giai đoạn Kaspersky xác định các gói wheel độc hại bắt đầu được tải lên. Nếu các gói nêu trên xuất hiện trong log hoặc artifact, nên bảo toàn môi trường để điều tra thay vì chỉ xóa gói rồi bỏ qua.
Trên Windows, cần tìm các dấu hiệu bám trụ bất thường trong Registry; trên Linux, kiểm tra các mục crontab đáng ngờ. Điều này khớp với phần tóm tắt công khai về chuỗi lây nhiễm của chiến dịch.
Ngoài ra, hãy kiểm tra telemetry mạng và tiến trình để phát hiện hoạt động gọi API Zulip từ trình thông dịch Python, tiến trình cài gói, CI worker, máy chủ hoặc tài khoản dịch vụ vốn không sử dụng Zulip. Câu hỏi chính không phải “Zulip có hợp pháp không?”, mà là “máy và tiến trình cụ thể này có lý do hợp pháp để gọi API Zulip hay không?”.
Cuối cùng, đừng lấy việc thư viện hoạt động đúng như quảng cáo làm bằng chứng tin cậy. Trong chiến dịch này, các gói được báo cáo là vẫn cung cấp tính năng công khai, đồng thời đóng vai trò dropper cho tệp độc hại.
Chiến dịch PyPI được liên hệ với OceanLotus xoay quanh các gói wheel độc hại được tải lên từ tháng 7/2025, với các tên gói được nêu công khai gồm uuid32-utils, colorinal và termncolor. Những gói này phát tán ZiChatBot trên Windows và Linux; lựa chọn vận hành nổi bật của ZiChatBot là dùng REST API của Zulip làm command-and-control thay vì máy chủ C2 riêng do kẻ tấn công vận hành.
Comments
0 comments