Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
Tourmaline — Заметки по реверс-инжинирингу, деобфусцированный исходный код, IOC и правила YARA для Python-RAT Tourmaline ClickFix, охватывающие его DNS-туннель и C2 через блокчейн-дедроп. | Kitploit
Инструменты/GitHubGitHub/v-pun215/tourmaline
Управление индикаторами компрометации (IOC)Обратная инженерияАнализ вредоносных программЦифровая криминалистикаКриптографияКомандование и УправлениеРазведка угрозОбучение и ОбразованиеРеагирование на ИнцидентыАнализ DNS
GitHubv-pun215/tourmaline
4101 день назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →

Tourmaline

Заметки по реверс-инжинирингу, деобфусцированный исходный код, IOC и правила YARA для Python-RAT Tourmaline ClickFix, охватывающие его DNS-туннель и C2 через блокчейн-дедроп.

Репозиторий
Поделиться

Tourmaline

Я недавно наткнулся на образец искусно спроектированного вредоносного ПО, которое называет себя "Torumaline".

Этот README был очень любезно написан Claude, так как на момент создания этого репозитория я был крайне занят экзаменами.

Эксплуатация и расшифровка этого вредоносного ПО отняли у меня огромную часть времени, предназначенного для подготовки к математике!

Читайте пост в блоге!

ТОЛЬКО ДЛЯ ОБРАЗОВАТЕЛЬНЫХ И ИССЛЕДОВАТЕЛЬСКИХ ЦЕЛЕЙ
Все образцы предоставлены для анализа вредоносного ПО и защитных исследований. Не запускайте их вне песочницы и изолированной среды без доступа к сети.


Обзор

Tourmaline (Tourmaline.exe) — это сложный многоступенчатый Windows-инфостилер/бэкдор, распространяемый через кампанию ClickFix — поддельное всплывающее окно Cloudflare "Verify you are human" в браузере, которое обманом заставляет пользователей вручную запустить вредоносную команду или установщик.

Бинарный файл представляет собой специально созданный установщик Inno Setup 6.7.0 (Revision 2, 64-битные смещения), который включает в себя полную среду выполнения Python 3.11 и две ступени обфусцированной полезной нагрузки на Python. Он устанавливает постоянный бэкдор с:

  • DNS-туннелированием C2 через UDP-порт 53 (маскируясь под запросы к microsoft.com)
  • Тайником в блокчейне Ethereum для распространения IP-адресов C2 (тестовая сеть Sepolia)
  • Зашифрованным ChaCha20 каналом выполнения задач
  • Подписанными ECDSA командами для предотвращения sinkhole-атак
  • Анти-песочница тайм-локом (обратный отсчёт на 100 млн итераций, обходится за O(1))

Структура репозитория

root@kitploit:~
tourmaline/
├── README.md                  # Этот файл
├── LICENSE                    # Лицензия для исследовательского использования
├── .gitignore
│
├── src/                       # Извлечённый и деобфусцированный исходный код
│   ├── stage1_loader.py       # Этап 1: Оригинальный обфусцированный XOR-загрузчик с тайм-локом (main.py)
│   ├── stage2_backdoor.py     # Этап 2: Деобфусцированный основной бэкдор (из QGBdu.dxf)
│   └── decrypt_payload.py     # Утилита: Восстановление ключа за O(1) и расшифровка полезной нагрузки
│
├── iocs/                      # Индикаторы компрометации
│   ├── indicators.json        # Структурированные данные IOC (IP-адреса, хеши, домены, реестр)
│   ├── indicators.csv         # Плоский CSV для импорта в SIEM
│   └── rules.yar              # Правила обнаружения YARA
│
└── samples/                   # Образцы вредоносного ПО (защищены паролем)
    ├── README.md              # Инструкции по архиву с образцами
    ├── Tourmaline_sample.zip  # Пароль: infected - содержит Tourmaline.exe
    └── QGBdu.dxf             # Необработанный зашифрованный блоб полезной нагрузки Этапа 2

Вектор заражения

Вредоносное ПО распространяется через ClickFix — метод социальной инженерии, при котором скомпрометированный или контролируемый злоумышленником веб-сайт накладывает поддельную страницу проверки Cloudflare CAPTCHA или верификации браузера. Оверлей инструктирует жертву:

  1. Нажать Win+R
  2. Вставить команду (скопированную в буфер обмена JavaScript страницы)
  3. Нажать Enter

Вставленная команда загружает и молча запускает Tourmaline.exe. Установщик запускается с параметрами /VERYSILENT /SUPPRESSMSGBOXES /NORESTART.


Формат бинарного файла

Примечание: Стандартный innoextract 1.9 не может извлечь этот бинарный файл — он поддерживает только Revision 1. Revision 2 использует 64-битные смещения и требует пользовательского парсинга (см. src/decrypt_payload.py).


Поток выполнения

root@kitploit:~
Tourmaline.exe
│
├─ Установщик Inno Setup запускается молча
│   ├─ Извлекает среду выполнения Python 3.11 в %APPDATA%\Tourmaline\
│   ├─ Извлекает main.py (загрузчик Этапа 1)
│   ├─ Извлекает QGBdu.dxf (зашифрованный блоб Этапа 2)
│   ├─ Завершает все существующие экземпляры pythonw.exe
│   └─ Регистрирует персистентность (Task Scheduler / реестр)
│       └─ Имя: "TourmalineUpdate" / "Hardware monitoring service"
│
├─ Этап 1: main.py (XOR-загрузчик с тайм-локом)
│   ├─ Считает _n от 99 999 999 → 0 (анти-песочница задержка ~часы на медленных ВМ)
│   ├─ На каждом _n строит 33-байтовый XOR-ключ: struct.pack('>I', _n) + hardcoded_suffix
│   ├─ Проверяет ключ по известному открытому заголовку QGBdu.dxf
│   └─ При совпадении: полностью расшифровывает QGBdu.dxf и выполняет результат через exec()
│       └─ Обход за O(1): атака на основе известного открытого текста по первым 4 байтам (см. ниже)
│
└─ Этап 2: QGBdu.dxf → Python-бэкдор
    ├─ Читает MachineGuid из HKLM\SOFTWARE\Microsoft\Cryptography
    ├─ Формирует мьютекс Global\Tourmaline_<hash>
    ├─ Определяет IP-адрес C2 через тайник в Ethereum (тестовая сеть Sepolia)
    ├─ Устанавливает DNS-туннель к C2
    └─ Цикл poll-execute: получает задачи, выполняет Python через exec(), возвращает вывод

Этап 1 — Анти-песочница тайм-лок (обход за O(1))

Загрузчик (main.py) использует обратный отсчёт от 99 999 999 для поиска ключа XOR-расшифровки. На реальной машине это завершается за секунды (поскольку _n начинается с большого значения, а истинное значение близко к 14 511 188). В песочнице с коротким лимитом времени цикл никогда не завершается.

Структура ключа:

root@kitploit:~
full_key = struct.pack('>I', _n) + bytes.fromhex('2b0cffe07b06ac25793b3f00cfaa2dd5881c2d6378165247539dbbdaeb')

Поскольку мы знаем первые 16 байт открытого текста (g1 = lambda l6, ), мы можем мгновенно восстановить _n с помощью атаки на основе известного открытого текста XOR:

root@kitploit:~
key_prefix = bytes(ciphertext[i] ^ known_plaintext[i] for i in range(4))
# Результат: key_prefix = 00dd6c54 → _n = 14,511,188

Используйте src/decrypt_payload.py для воспроизведения этого.


Этап 2 — Архитектура основного бэкдора

Конфигурация (жёстко закодированная)

Тайник в блокчейне (устойчивость C2)

Вредоносное ПО вызывает смарт-контракт Ethereum в тестовой сети Sepolia для получения активного IP-адреса C2. Это означает, что злоумышленник может изменить IP-адрес C2 в любое время, обновив контракт — традиционное нарушение работы C2 на основе блокировки IP-адресов становится неэффективным.

root@kitploit:~
Contract : 0x2d7a04cca0c34005f58393f30ac725e25f19e5f5
Selector : 0xeb9fd6fe
Network  : Ethereum Sepolia (chainId 11155111)
RPC      : https://ethereum-sepolia-rpc.publicnode.com
Result   : ChaCha20-encrypted blob containing current C2 IP

Возвращённые данные расшифровываются с помощью жёстко закодированного ключа ChaCha20, чтобы раскрыть актуальный адрес C2. На момент анализа он разрешался в 158.94.211.185 (проверено через живой вызов RPC).

DNS-туннель (связь с C2)

Весь трафик C2 отправляется в виде необработанных UDP DNS-запросов напрямую на IP-адрес C2 через порт 53. Запросы структурированы как <encoded_data>.microsoft.com, обходя фильтрацию на основе DNS и выглядя как легитимная телеметрия Windows.

  • Пользовательская реализация: Не использует Python socket.getaddrinfo или какую-либо библиотеку DNS
  • Обфускация опкода: К каждому пакету применяется случайный XOR-байт к полю опкода DNS
  • Кодирование: Данные задач кодируются в base-формат метки DNS

Движок выполнения задач

Бэкдор реализует движок произвольного выполнения Python exec(). Задачи:

  1. Получаются от C2 через DNS-туннель
  2. Расшифровываются ChaCha20
  3. Проверяются по подписи ECDSA (предотвращает инъекцию sinkhole)
  4. Выполняются через exec() в постоянном пространстве имён с захватом вывода
  5. Результаты возвращаются на C2

Поддерживаемые типы задач: Python exec, загрузка/выгрузка файлов, команда оболочки, самообновление.


Индикаторы компрометации (IOC)

Сеть

Хеши файлов

ФайлSHA256
Tourmaline.exec9b390b3b7148f549df86503858d52e030b2b5e78fed0bc525ded5927f9265d6
Tourmaline.exe (MD5)b74ac808dea2de31caf024310694ef0c

Реестр / Персистентность


Правила YARA

См. iocs/rules.yar для правил обнаружения, охватывающих:

  • Константы загрузчика Этапа 1 (суффикс XOR-ключа, байты известного открытого текста)
  • Жёстко закодированные строки Этапа 2 (IP-адрес C2, адрес контракта, ключ ChaCha20)

Устранение / Очистка

Если это вредоносное ПО было выполнено на машине:

  1. Немедленно изолируйте — отключите от сети
  2. Завершите процессы: taskkill /F /IM pythonw.exe
  3. Удалите каталог установки: %APPDATA%\Tourmaline\ или %COMMONAPPDATA%\Tourmaline\
  4. Удалите персистентность:
    • Task Scheduler: удалите TourmalineUpdate
    • Проверьте HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run на наличие Tourmaline или SystemService
  5. Заблокируйте на брандмауэре: 158.94.211.185:53/UDP; блокируйте весь неожиданный исходящий UDP/53
  6. Заблокируйте Ethereum RPC на прокси: ethereum-sepolia-rpc.publicnode.com
  7. Переустановите систему — из-за возможности произвольного выполнения Python настоятельно рекомендуется полная переустановка

Воспроизведение анализа

Предварительные требования

root@kitploit:~
pip install pyOpenSSL cryptography

Расшифровка полезной нагрузки Этапа 2

root@kitploit:~
# Из корня репозитория:
python3 src/decrypt_payload.py samples/QGBdu.dxf decrypted_stage2.py

Извлечение образца вредоносного ПО

root@kitploit:~
7z x -pinfected samples/Tourmaline_sample.zip

Раскрытие информации


Лицензия

См. LICENSE. Этот репозиторий предназначен только для образовательных и защитных исследовательских целей.

Скачать инструмент
СвойствоЗначение
Имя файлаTourmaline.exe
Размер11 341 339 байт (~10,8 МБ)
MD5b74ac808dea2de31caf024310694ef0c
SHA256c9b390b3b7148f549df86503858d52e030b2b5e78fed0bc525ded5927f9265d6
ФорматInno Setup 6.7.0 Unicode (Revision 2, 64-битные смещения)
Тип PE32-битный PE, 11 секций
Размер оверлея10 447 387 байт
Смещение магии Inno0xD9864 (890 148 байт)
Имя приложенияTourmaline
Версия приложения2.63.519
GUID приложения{2C25872D-85FC-44C7-9B16-844E39E50A44}
Путь установки{commonappdata}\Tourmaline
Встроенная среда выполненияPython 3.11 (полная встраиваемая)
Файлы полезной нагрузки36 файлов в сплошном потоке LZMA2
ПараметрЗначение
IP-адрес C2158.94.211.185
Порт C253 (UDP)
ПротоколПользовательский DNS-over-UDP туннель
Поддельный доменmicrosoft.com
Ключ ChaCha2036f555c87f71581f57d83576c88193fdc00a0173f741a3e198e2d7abdc9cda59
Контракт блокчейна0x2d7a04cca0c34005f58393f30ac725e25f19e5f5 (Sepolia)
Публичный ключ ECDSAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEt17l3rGHHR9sYdHEvV8S+JRRCUHQQveSadlGk04xM/8WClDf/67Tyritt2+T18SY8n0xv1TKKl0AgnNFuboEEQ==
Имя службыSystemService / TourmalineUpdate
МьютексGlobal\Tourmaline_<MachineGuid-hash>
ТипЗначение
IP-адрес C2158.94.211.185
Порт C253/UDP
Поддельный домен*.microsoft.com (пользовательский UDP, не настоящий DNS)
Ethereum RPChttps://ethereum-sepolia-rpc.publicnode.com
Смарт-контракт0x2d7a04cca0c34005f58393f30ac725e25f19e5f5
КлючЗначение
HKLM\SOFTWARE\Microsoft\Cryptography\MachineGuidЧитается для фингерпринтинга жертвы
%APPDATA%\Tourmaline\Каталог установки
Task SchedulerTourmalineUpdate
Отображаемое имя службыHardware monitoring service
МьютексGlobal\Tourmaline_<hash>
ПолеЗначение
Дата обнаруженияСентябрь 2026
ИсследовательVihaan Pundir (v-pun215)
Вектор распространенияClickFix поддельная Cloudflare CAPTCHA
КлассификацияБэкдор / DNS-туннель C2 / Тайник в блокчейне
ПлатформаWindows (64-бит)