ZiChatBot у PyPI: шкідливі пакети та C2 через Zulip

Photo of author

CyberSecureFox Editorial Team

На Python Package Index (PyPI) виявлено три пакети, які, окрім заявленої функціональності, непомітно доставляють раніше невідоме шкідливе програмне забезпечення ZiChatBot для Windows і Linux, використовуючи публічний чат-сервіс Zulip як інфраструктуру команд і управління; це робить вразливими розробників і будь-які системи, де ці пакети могли бути встановлені в період з 16 по 22 липня 2025 року, і вимагає негайного аудиту залежностей та перевірки ознак зараження.

Технічні деталі атаки

Дослідники виявили три пакети на PyPI, оформлені як звичайні wheel-файли з робочою функціональністю:

  • uuid32-utils — містить шкідливий завантажувач;
  • colorinal — використовує схожий шкідливий модуль, як і uuid32-utils;
  • termncolor — виглядає як нешкідливий пакет, але декларує залежність від colorinal і тим самим транзитивно приносить шкідливий код.

Усі три пакети були завантажені до репозиторію PyPI в короткому проміжку між 16 і 22 липня 2025 року, що характерно для цілеспрямованої supply chain операції і добре вкладається у техніку Supply Chain Compromise в MITRE ATT&CK.

Механізм зараження на Windows

У Windows під час встановлення будь-якого з двох перших пакетів виконується прихована логіка:

  • з пакета витягується DLL-завантажувач terminate.dll і записується на диск;
  • під час імпорту бібліотеки в проєкт DLL автоматично завантажується;
  • terminate.dll виступає дропером ZiChatBot, розгортаючи основний модуль шкідливого ПЗ;
  • створюється запис автозапуску в реєстрі Windows (Run-подібний ключ);
  • код дропера виконує самоліквідацію, стираючи власні сліди з хоста.

У результаті в системі залишається лише ZiChatBot із постійною точкою запуску та мінімумом очевидних артефактів, що ускладнює ретроспективний аналіз.

Механізм зараження на Linux

У Linux застосовується подібна логіка з використанням розділюваного об’єкта:

  • витягується і запускається terminate.so;
  • ZiChatBot розміщується за шляхом /tmp/obsHub/obs-check-update;
  • для збереження постійності створюється запис у crontab, який періодично запускає шкідливий бінарний файл.

Використання каталогу /tmp і нейтрально виглядної назви obs-check-update знижує ймовірність виявлення під час поверхневого огляду системи.

Управління через Zulip як заміну класичного C2

Ключова особливість ZiChatBot — відсутність виділеного сервера команд і управління. Замість цього шкідливе ПЗ використовує публічні REST API корпоративного чат-застосунку Zulip, взаємодіючи з ним так само, як легітимний клієнт, через офіційно задокументовані інтерфейси Zulip API.

Поведінку ZiChatBot можна звести до такого:

  • підключення до визначених каналів/потоків Zulip через REST API;
  • отримання команд у вигляді корисного навантаження (shellcode);
  • виконання отриманого shellcode на скомпрометованій системі;
  • надсилання у відповідь емодзі-серця в канал Zulip як сигналу про успішне виконання команди.

Такий спосіб управління поєднує кілька переваг для зловмисників:

  • трафік до хмарного сервісу чатів виглядає легітимно і часто не фільтрується;
  • немає статичного домену або IP, характерних для традиційного C2;
  • зміна робочої області або облікових записів у Zulip повністю змінює «інфраструктуру» без витрат на хостинг.

З точки зору MITRE ATT&CK це відповідає техніці використання легітимних веб-сервісів для команд і управління (Web Service C2), раніше вже зафіксованій у діяльності просунутих угруповань.

Контекст і можлива причетність OceanLotus

За даними дослідників, дропер у поточній кампанії демонструє 64% схожість з іншим завантажувачем, раніше приписаним в’єтнамському угрупованню OceanLotus (APT32). MITRE описує цю групу під ідентифікатором G0050 як таку, що цілеспрямовано атакує різні організації в Азії.

Наприкінці 2024 року OceanLotus уже була помічена в атаці на китайську спільноту з кібербезпеки: використовувалися підроблені проєкти Visual Studio Code, які видавали за плагіни Cobalt Strike, що під час компіляції автоматично запускали троян. У тій кампанії зловмисники застосовували сервіс нотаток Notion як канал команд і управління, використовуючи публічний хмарний сервіс аналогічно тому, як зараз використовується Zulip, що підтверджується публічними аналізами та офіційною документацією Notion.

Поточну активність у PyPI не можна остаточно приписати OceanLotus, однак наявність схожого дропера і повторюваний патерн використання популярних SaaS-платформ (Notion, потім Zulip) як C2 вказують на еволюцію однієї й тієї самої операційної моделі:

  • зміщення від фішингу до атак через ланцюг постачання (IDE, репозиторії пакетів);
  • максимальне маскування інфраструктури C2 під звичайний корпоративний трафік;
  • орієнтація на розробників і фахівців із безпеки як початкових жертв.

Оцінка впливу на організації

Потенційно під удар потрапляють усі середовища, де могли бути встановлені пакети uuid32-utils, colorinal або termncolor у зазначений період. Найвищий ризик мають:

  • команди розробки, які використовують PyPI напряму з інтернету на робочих станціях і в CI/CD;
  • інфраструктура збирання та тестування, де виконання довільного коду відкриває шлях до компрометації артефактів і «зараження» кінцевих продуктів;
  • організації, де розробницькі станції мають розширені привілеї або доступ до чутливих даних.

Оскільки ZiChatBot виконує довільний shellcode, успішне зараження фактично дорівнює отриманню віддаленого керування з правами користувача процесу (а при запуску з підвищеними правами — із правами адміністратора/суперкористувача). Потенційні наслідки:

  • крадіжка вихідного коду, секретів із конфігурацій, ключів доступу до хмари;
  • підміна артефактів збирання і впровадження шкідливого коду в продукти організації;
  • латеральне переміщення всередині мережі через розробницькі станції як «міст» до більш захищених сегментів;
  • репутаційні втрати у разі поширення скомпрометованих пакетів кінцевим клієнтам.

Відсутність традиційного C2 і використання Zulip ускладнюють мережеве виявлення та відкат інциденту: блокування одного-двох доменів або IP не розв’язує проблему, а телеметрія щодо трафіку до популярних SaaS-сервісів зазвичай менш деталізована.

Практичні рекомендації із захисту

1. Негайна перевірка середовища

  • На всіх системах розробників і серверах збирання виконайте перевірку встановлених пакетів:
    • pip list | findstr uuid32-utils / pip list | findstr colorinal / pip list | findstr termncolor (Windows);
    • pip list | grep -E "uuid32-utils|colorinal|termncolor" (Linux).
  • У разі виявлення — зафіксуйте версії та контекст використання, потім видаліть пакети:
    • pip uninstall uuid32-utils colorinal termncolor.

2. Пошук артефактів ZiChatBot

  • Windows:
    • пошук файлів terminate.dll і підозрілих бінарних файлів, що з’явилися в період з 16 по 22 липня 2025 року;
    • перевірка ключів автозапуску (від імені адміністратора):
      • reg query HKCU\Software\Microsoft\Windows\CurrentVersion\Run
      • reg query HKLM\Software\Microsoft\Windows\CurrentVersion\Run

      та аналіз записів, які вказують на нестандартні виконувані файли в профілі користувача або у тимчасових каталогах.

  • Linux:
    • перевірка наявності шляху /tmp/obsHub/obs-check-update і будь-яких виконуваних файлів усередині;
    • перевірка планувальника завдань:
      • crontab -l від імені кожного користувача, який потенційно використовував Python;
      • перегляд системних crontab-файлів (/etc/crontab, /etc/cron.*) на наявність посилань на obs-check-update або аномальних завдань у /tmp.

3. Мережеве виявлення

  • У мережевій телеметрії та проксі-логах перевірте звернення з робочих станцій розробників і CI/CD до доменів, пов’язаних із Zulip, у нетиповий час або з незвичним обсягом трафіку.
  • Налаштуйте виявлення за аномальною активністю API до зовнішніх чат-сервісів (створення/читання повідомлень із серверів, на яких такі клієнти не повинні працювати).

4. Зміцнення ланцюга постачання Python-залежностей

  • Перейдіть на використання внутрішнього дзеркала PyPI з білим списком перевірених пакетів; прямий вихід на зовнішній PyPI з робочих станцій розробників обмежте.
  • Упровадьте контроль цілісності пакетів (перевірка хешів, репозиторії артефактів із криптографічним підписом).
  • Використовуйте статичний і динамічний аналіз для нових залежностей, особливо якщо вони невідомі або малопоширені.
  • Ізолюйте середовища збирання: мінімальні права, обмежений мережевий доступ (дозволяти лише необхідні сховища та оновлення, блокувати довільний доступ до зовнішніх SaaS-сервісів).

5. Організаційні заходи

  • Оновіть внутрішні політики вибору залежностей: заборона на «швидкий» імпорт випадкових пакетів без рев’ю та схвалення.
  • Проведіть коротке навчання команд розробки щодо ризиків атак через репозиторії пакетів і процедур перевірки нових модулів.
  • Скоординуйте дії команд безпеки та DevOps для інтеграції перевірок залежностей у pipeline (software composition analysis).

Ключовий висновок з інциденту із ZiChatBot у PyPI — розробницькі та збірні середовища мають розглядатися як пріоритетні активи: у найкоротші строки необхідно перевірити наявність пакетів uuid32-utils, colorinal і termncolor, видалити їх разом із виявленими артефактами (включно з /tmp/obsHub/obs-check-update і підозрілими записами автозапуску), а потім закріпити результат технічними заходами — переходом на контрольоване дзеркало PyPI, жорстким обмеженням мережевого доступу систем збирання та вбудованими в pipeline автоматичними перевірками сторонніх залежностей.


CyberSecureFox Editorial Team

Редакція CyberSecureFox висвітлює новини кібербезпеки, уразливості, malware-кампанії, ransomware-активність, AI security, cloud security та security advisories вендорів. Матеріали готуються на основі official advisories, даних CVE/NVD, сповіщень CISA, публікацій вендорів і відкритих звітів дослідників. Статті перевіряються перед публікацією та оновлюються за появи нових даних.

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.