ZiChatBot là một mối đe dọa mạng mới được phát hiện đang âm thầm sử dụng REST API của ứng dụng chat nhóm hợp pháp Zulip để nhận lệnh và thực thi lệnh từ kẻ điều khiển. Cách triển khai này làm cho tin bảo mật mới nhất này khó bị phát hiện hơn so với mô hình C2 truyền thống, vì lưu lượng không đi tới máy chủ riêng dễ bị giám sát hoặc chặn.
Chuỗi tấn công qua gói Python độc hại
Mối đe dọa này được phát hiện sau khi nhiều gói Python độc hại xuất hiện trên PyPI từ tháng 7/2025. Các gói được ngụy trang như thư viện phát triển thông dụng để đánh lừa lập trình viên cài đặt vào dự án hoặc môi trường máy trạm.
Tham khảo báo cáo kỹ thuật liên quan tại Securelist.
Sau khi được cài đặt, các gói này âm thầm thả payload của ZiChatBot xuống hệ thống nạn nhân mà không tạo ra cảnh báo rõ ràng. Cơ chế lây nhiễm này phù hợp với một tấn công mạng theo chuỗi cung ứng, tận dụng niềm tin vào kho gói công khai.
Danh sách gói độc hại
- uuid32-utils
- colorinal
- termncolor
Trong đó, termncolor không chứa mã độc rõ ràng ở lớp bề mặt, nhưng khai báo colorinal như một dependency. Khi người dùng cài đặt termncolor, chuỗi cài đặt sẽ gián tiếp kích hoạt toàn bộ quá trình nhiễm.
Cơ chế command and control qua Zulip REST API
Điểm đặc biệt của lỗ hổng CVE trong trường hợp này không phải là một CVE cụ thể, mà là kỹ thuật vận hành C2 bất thường. ZiChatBot gửi toàn bộ hoạt động qua Zulip REST API, khiến lưu lượng trông giống giao tiếp ứng dụng hợp lệ thay vì kết nối đến hạ tầng độc hại.
Xác thực được thực hiện bằng API token nhúng trong HTTP header của mỗi yêu cầu. Việc sử dụng dịch vụ công khai làm giảm khả năng phát hiện qua các cơ chế giám sát mạng thông thường hoặc IDS.
Malware hoạt động qua hai cặp channel-topic trên Zulip:
- Một kênh gửi thông tin hệ thống cơ bản của máy bị nhiễm về phía kẻ điều khiển.
- Kênh còn lại nhận các tin nhắn chứa shellcode và thực thi trong luồng mới.
Sau khi lệnh chạy xong, mã độc phản hồi bằng một biểu tượng tim trong cuộc hội thoại để báo hiệu hoàn tất. Cách làm này cho thấy hoạt động điều khiển được ngụy trang kỹ như giao tiếp bình thường.
Ảnh hưởng hệ thống và cơ chế bám trụ
Phân tích cho thấy ZiChatBot là mối đe dọa đa nền tảng, ảnh hưởng đến cả Windows và Linux. Đây là một yếu tố làm tăng rủi ro bảo mật đối với môi trường phát triển và máy trạm có cài đặt công cụ Python.
Bản Windows của payload là một DLL có tên libcef.dll, được nạp thông qua executable hợp pháp vcpktsvr.exe. Để duy trì quyền truy cập, mã độc tạo một registry auto-run entry, đảm bảo tự khởi động lại khi người dùng đăng nhập.
Trên Linux, payload được đặt tại:
/tmp/obsHub/obs-check-updateNó sử dụng một mục crontab để duy trì bám trụ trên hệ thống bị xâm nhập. Điều này cho thấy kẻ tấn công cố gắng giữ xâm nhập trái phép ổn định ngay cả khi tiến trình ban đầu bị dừng.
Kỹ thuật che giấu và tự xóa dấu vết
Dropper sử dụng AES encryption ở chế độ CBC để che giấu các chuỗi nhạy cảm và payload nhúng. Sau khi triển khai ZiChatBot, shellcode được dùng để tự xóa, làm giảm dấu vết của giai đoạn lây nhiễm ban đầu.
Đây là một đặc trưng thường gặp trong các chiến dịch remote code execution gián tiếp, khi mã độc cố giảm khả năng bị phân tích tĩnh và phân tích hành vi.
Chi tiết kỹ thuật đáng chú ý
- 64% code similarity giữa dropper của ZiChatBot và một dropper từng được gán liên quan trong các phân tích trước đó.
- Hoạt động C2 không dùng máy chủ riêng mà ẩn trong REST API hợp pháp.
- Giao tiếp sử dụng shellcode trong tin nhắn để thực thi lệnh.
- Hành vi tự xóa giúp giảm khả năng phát hiện xâm nhập.
IOC và dấu hiệu cần theo dõi
Các IOC dưới đây được trích xuất trực tiếp từ nội dung phân tích. Các miền được mô tả theo ngữ cảnh đã nêu trong báo cáo.
- helper.zulipchat.com — Được khuyến nghị thêm vào denylist mạng để phát hiện máy vẫn liên lạc với hạ tầng đã bị vô hiệu hóa.
- /tmp/obsHub/obs-check-update — Đường dẫn payload trên Linux.
- libcef.dll — DLL của biến thể Windows.
- vcpktsvr.exe — Tệp thực thi hợp pháp được dùng để tải payload.
- uuid32-utils — Gói Python độc hại trên PyPI.
- colorinal — Gói phụ trợ có chứa dropper.
- termncolor — Gói giả mạo kích hoạt chuỗi cài đặt qua dependency.
Hành vi triển khai và điểm cần kiểm tra trên hệ thống
Vì các gói độc hại đã bị gỡ khỏi PyPI và tổ chức Zulip bị đối tượng sử dụng đã bị vô hiệu hóa, hệ thống từng cài đặt các package này vẫn có thể tiếp tục cố gắng kết nối tới endpoint cũ. Do đó, cập nhật bản vá không đủ nếu máy đã bị cài payload.
Trong môi trường điều tra threat intelligence, cần kiểm tra:
- Các tiến trình Python hoặc môi trường build đã từng cài uuid32-utils, colorinal, termncolor.
- Lưu lượng HTTP bất thường tới helper.zulipchat.com.
- Registry auto-run trên Windows liên quan đến vcpktsvr.exe hoặc libcef.dll.
- Crontab và file thực thi tại /tmp/obsHub/obs-check-update trên Linux.
Giá trị của phát hiện xâm nhập trong chuỗi cung ứng
Trường hợp ZiChatBot cho thấy một lỗ hổng zero-day không phải lúc nào cũng nằm ở phần mềm đích; đôi khi rủi ro đến từ cách chuỗi cung ứng phần mềm bị lạm dụng. Khi mã độc ẩn trong package hợp pháp bề ngoài, việc phát hiện tấn công cần dựa trên phân tích dependency, hành vi runtime và lưu lượng API thay vì chỉ quét chữ ký tĩnh.
Với các hệ thống phát triển, đặc biệt là máy có truy cập PyPI thường xuyên, cần theo dõi sát các dấu hiệu mối đe dọa liên quan đến package giả mạo, payload nhúng và kết nối đến dịch vụ công khai bị lợi dụng làm C2.
Làm sạch và kiểm tra tiếp xúc
Nếu phát hiện dấu hiệu liên quan đến chiến dịch này, cần rà soát toàn bộ môi trường build, máy lập trình và máy chủ CI/CD đã từng tải các package nêu trên. Các kết nối tới endpoint đã bị vô hiệu hóa nên được đưa vào rule giám sát để xác định hệ thống còn sót lại.
Đối với các bộ phận phân tích, nên lưu ý rằng lưu lượng của mối đe dọa mạng này có thể trông giống traffic ứng dụng bình thường. Vì vậy, việc đối chiếu logs, lịch sử cài package và các IOC đã nêu là bước quan trọng để xác định hệ thống bị xâm nhập.










