«Голосуй за лучший отдел»: фишинг Telegram на производстве 47 РМ за 6 часов
14:22 во вторник позвонил начальник кадров производственной компании 47 РМ из Балашихи (фасонное литьё, обслуживают трубопроводный сектор): «У нас в Telegram пришло сообщение про корпоративное голосование, ссылка не открывается, и сейчас уже несколько человек жалуются на странные SMS. Что-то идёт не так». За следующие 6 часов мы вместе с моим напарником прошли путь от первого клика до полной чистки: декомпиляция фишинг-страницы, выявление C2-сервера в Праге, блокировка трафика на MikroTik офиса, и массовый перевыпуск 2FA для всех 47 сотрудников. Этот материал — почасовая реконструкция работы и чек-лист, который мы оставили клиенту.
Что произошло до звонка
В 13:54 в новый Telegram-чат «Корпоративное голосование 2026» были разом добавлены 38 сотрудников этой компании. Чат создан 27 апреля за два дня до атаки, единственный администратор — аккаунт @HR_SovetKorp_2026 (Telegram-username, зарегистрированный за неделю до инцидента). Аватарка — стилизованный логотип компании, скачанный с её сайта. Имя профиля совпадало с фамилией реальной начальницы кадров. Это уже не «массовый фишинг» — это таргетированная атака с подготовкой.
В 14:00 в чате появилось сообщение от лица «HR-СоветКорп»: «Дорогие коллеги! С прошлой пятницы у нас идёт ежегодное корпоративное голосование за лучший отдел года. По итогам победителю — премия 50 000 рублей на каждого. Голосование до 17:00 сегодня, проголосуйте по ссылке: t.me/login_review/vote2026. После голосования вам нужно подтвердить личность через код Telegram — это для исключения накруток».
Здесь сразу было два мощных триггера. Первый — премия 50 000 ₽ — это очень конкретная сумма, у литейщика как раз обычная месячная зарплата, и желание «успеть» очень сильное. Второй — «подтверждение личности через код Telegram» — это классическая социнженерная подвязка для перехвата кода входа. Если пользователь введёт код, который ему приходит в Telegram при попытке логина с другого устройства, атакующий заходит в аккаунт жертвы.
За 22 минуты до моего звонка кликнули 7 сотрудников. Из них 3 дошли до ввода кода. Из этих 3 — один ввёл код, успев это сделать за 23 секунды (то есть атакующий уже зашёл с другого устройства в его аккаунт, прежде чем владелец это заметил). У одного не получилось из-за того, что Telegram попросил пароль 2FA, которого он не знал. У третьего — код не пришёл вообще, потому что одновременно с этим у него с телефона дрожала рука и он несколько раз вводил неверные данные.
14:22-14:37: первая реакция и блокировка C2
Когда мне позвонили в 14:22, я сразу попросил начальника кадров (она нашла странность когда сама получила сообщение, но кликать не стала, и в чате прозвенели несколько голосовых сообщений недоумевающих коллег): а) собрать в актовом зале всех, кто получил сообщение, и б) дать мне URL-адрес фишинговой ссылки.
В 14:24 у меня уже была ссылка: https://login-review.ru/vote2026?id=XXXXX. То, что в чате выглядело как t.me/login_review/..., на самом деле было ссылкой, которая в десктопном клиенте Telegram отображалась превью с поддельным фавиконом Telegram и текстом «Telegram: голосование». При нажатии — открывалась страница на стороннем домене, а не на t.me.
Сразу начал анализ. Открыл ссылку через изолированную VM с Tor — чтобы атакующий не видел IP офиса клиента и не успел свернуть инфраструктуру до того, как мы её зафиксируем.
# Снимаем фишинг-страницу для анализа
mkdir analysis-2026-04-29 && cd analysis-2026-04-29
# Загружаем страницу + ресурсы (через Tor)
torsocks wget --mirror --convert-links --page-requisites \
--no-parent --domains=login-review.ru \
https://login-review.ru/vote2026?id=test
# DNS-резолв с разных резолверов (атакующие иногда отдают разные IP региональным DNS)
dig +short login-review.ru @8.8.8.8
dig +short login-review.ru @77.88.8.8 # Яндекс
dig +short login-review.ru @1.1.1.1
dig +short login-review.ru @9.9.9.9
dig +short login-review.ru @193.187.92.67 # наш собственный
# WHOIS домена и AS-инфо
whois login-review.ru | head -50
whois 5.180.45.XXX | head -30
mtr -r -c 30 5.180.45.XXX
# Проверка через VirusTotal API
curl -s "https://www.virustotal.com/api/v3/domains/login-review.ru" \
-H "x-apikey: ${VT_API_KEY}" | jq '.data.attributes.last_analysis_stats'
Получилось: домен зарегистрирован 11 дней назад через REG.RU, владелец скрыт через privacy-сервис. IP 5.180.45.XXX — Прага, провайдер «Master Internet s.r.o.», AS204603. На том же IP крутятся ещё 14 доменов вида tg-login-XXXX.ru, review-vote-YYYY.com, poll-corp-ZZZZ.ru — типичная фишинг-ферма. VirusTotal на 14:28 показал 0 детектов (домен слишком свежий), но через 4 часа уже было 9 детектов после моей отправки IoC в OSINT-каналы.
В 14:33 я сел за SSH-консоль MikroTik офиса клиента (у нас есть VPN-туннель до их CCR2004 для оперативной поддержки) и заблокировал C2.
# MikroTik RouterOS 7.16 — блокировка фишинг-инфраструктуры
/ip firewall address-list add list=phishing-c2-2026-04-29 \
address=5.180.45.0/24 comment="login-review.ru C2 Prague"
/ip firewall address-list add list=phishing-c2-2026-04-29 \
address=login-review.ru comment="resolve-on-demand"
/ip firewall address-list add list=phishing-c2-2026-04-29 \
address=tg-login-2026.ru
# Ещё 13 доменов с того же IP
# Правило в forward-chain
/ip firewall filter add chain=forward dst-address-list=phishing-c2-2026-04-29 \
action=reject reject-with=icmp-network-unreachable \
comment="phishing block 2026-04-29 incident"
/ip firewall filter move [find comment="phishing block 2026-04-29 incident"] 1
# Дополнительно — DNS-блокировка через наш AdGuard
ssh -p 2202 root@adguard.itfresh.ru "adguardhome-cli rule add 'login-review.ru'"
ssh -p 2202 root@adguard.itfresh.ru "adguardhome-cli rule add '*.login-review.ru'"
ssh -p 2202 root@adguard.itfresh.ru "adguardhome-cli rule add 'tg-login-2026.ru'"
# Проверка
ssh -p 2202 root@mikrotik.balashikha.local "/log print where message~\"phishing\""
В 14:37 любой компьютер из офисной сети, который пытался обратиться к login-review.ru, получал TCP-reject. К этому моменту в фишинг-страницу уже больше никто из коллег не успел зайти — потому что начальник кадров параллельно бегала по цеху и предупреждала всех «не нажимайте». В 14:42 атакующий, видимо, заметил, что трафик из этой подсети пропал, и начал менять IP в DNS-записях своего домена. Я добавил все его новые IP в address-list автоматически через скрипт, который запускался каждые 5 минут.
Декомпиляция фишинговой страницы
Параллельно я разобрал саму страницу. Это HTML + JavaScript, использующий Telegram Login Widget — официальный механизм авторизации через Telegram. Но с одним поворотом.
Структура страницы: красивый дизайн «голосования», список из 7 «отделов» (имена реальных отделов компании — атакующие явно нашли организационную структуру), переключатели, кнопка «Проголосовать». При нажатии на «Проголосовать» — модальное окно «Подтвердите личность через Telegram» с встроенным фейковым виджетом авторизации.
Виджет настоящего Telegram возвращает данные пользователя (id, имя, username) после прохождения капчи на стороне Telegram. Атакующий не получает доступа к аккаунту — только к публичным данным. Но фейковый виджет ничего такого не делал. Он показывал поле ввода телефонного номера, потом — поле для ввода SMS-кода (на самом деле это был код из самого Telegram «Login attempt from desktop»), и параллельно — на стороне сервера атакующего работал скрипт, который этим кодом логинился в реальный Telegram через MTProto-протокол.
Этот скрипт у атакующих написан на Python с использованием библиотеки telethon или pyrogram. Алгоритм был типичный:
- Пользователь вводит свой номер на фейковой странице.
- Скрипт атакующего инициирует
auth.sendCodeв Telegram через MTProto API на этот номер. - Telegram присылает SMS или код в само приложение «Login attempt».
- Пользователь, думая, что это «подтверждение для голосования», вводит код на фейковой странице.
- Скрипт получает код и через
auth.signInвходит в аккаунт жертвы. - Если у жертвы включено 2FA — Telegram запрашивает пароль 2FA, и фейковая страница показывает поле «введите пароль голосования». Здесь часть жертв спотыкаются.
# Извлечённый псевдокод сервера атакующего (по результатам анализа сетевого
# трафика через mitmproxy при тестовом прохождении страницы)
POST /api/vote-init
{"phone": "+79991234567"}
→ серверная часть:
from telethon import TelegramClient
client = TelegramClient('victim_session', API_ID, API_HASH)
await client.send_code_request("+79991234567")
→ SMS отправляется реальным Telegram на номер жертвы
POST /api/vote-confirm
{"phone": "+79991234567", "code": "12345"}
→ серверная часть:
try:
await client.sign_in(phone="+79991234567", code="12345")
# успех — атакующий внутри аккаунта
except SessionPasswordNeededError:
# требуется 2FA — возвращаем фейковое поле
return {"need_2fa": True, "message": "Введите пароль для голосования"}
POST /api/vote-2fa
{"phone": "+79991234567", "password": "kotik2024"}
→ серверная часть:
await client.sign_in(password="kotik2024")
# если пароль угадан — полный доступ к аккаунту жертвы
Очень изящная схема. Если бы у одного из жертв пароль 2FA был «kotik2024» или другой простой — атакующий бы получил постоянный доступ к его Telegram-аккаунту до тех пор, пока сам пользователь не заметил бы и не отозвал сессию.
Что атакующий делает с захваченным аккаунтом
По данным открытых OSINT-расследований (мы регулярно мониторим Have I Been Pwned, Telegram Insights и форумы вроде BreachForums), атакующие обычно делают следующее с украденным корпоративным Telegram-аккаунтом:
- Читают историю чатов — особенно групповых рабочих чатов, ищут платёжные документы, пароли, ссылки на внутренние системы.
- Пишут от лица жертвы её контактам с просьбой «срочно одолжить 50-100 тысяч», переслать платёжку, скачать «договор» (на самом деле — следующий загрузчик).
- Используют аккаунт как трамплин для следующего этапа атаки на компанию (например, написать гендиректору от лица главбуха и попросить срочно подписать платёж).
- Перепродают сам аккаунт в Telegram-каналах за 500-3000 рублей в зависимости от качества.
Никакого «голосования за лучший отдел», конечно, не было — это была чистая ловушка для сбора Telegram-аккаунтов компании.
14:50-17:30: разбор того, что произошло с каждым жертвой
К 14:50 я был на связи с начальницей кадров, и мы выявили список 7 кликнувших сотрудников. Каждого пригласили в актовый зал на разговор. У каждого собрали историю того, что именно он сделал на странице. Это дало картину:
Сотрудник 1, рабочий цеха №2, 26 лет — открыл страницу, посмотрел список отделов, не стал тыкать кнопку «Проголосовать», закрыл. Жертвой не стал. Хорошо.
Сотрудник 2, мастер участка, 41 год — открыл, нажал «Проголосовать», увидел поле «введите номер», засомневался, закрыл. Жертвой не стал.
Сотрудник 3, бухгалтер, 38 лет — открыл, нажал, ввёл номер, получил SMS-код в Telegram, прочитала текст «Login attempt from desktop», поняла подвох, не стала вводить, закрыла. Жертвой не стала, но Telegram уже знал, что её номер пытался зайти неавторизованный клиент.
Сотрудник 4, экономист, 45 лет — ввёл код. У него был 2FA-пароль, на фейковой странице открылось поле «введите пароль голосования». Он попытался ввести пароль 2FA, не подошло (видимо, он сам забыл точный пароль). После трёх попыток страница выдала ошибку «Попробуйте позже». Жертвой не стал, но атакующий теперь знал номер телефона и сам факт включённого 2FA.
Сотрудник 5, ведущий инженер, 33 года — ввёл код, 2FA-пароль не запрашивался (его не было). Атакующий зашёл в аккаунт. Через 18 секунд жертва получила push «Активная сессия с iPhone, Прага» в реальном Telegram, открыла «Активные сессии», увидела чужой логин, успела нажать «Завершить сессию». Аккаунт был под контролем атакующего около 23 секунд. За это время атакующий успел: открыть список чатов (но не скачивать историю), и попытаться написать пробное сообщение в чат с генеральным директором «Здравствуйте, нужна срочная подпись по договору». Сообщение ушло, но мы потом удалили его из чата ГД.
Сотрудник 6, сотрудник склада, 29 лет — ввёл код, 2FA не было, атакующий зашёл. Никаких уведомлений жертва не увидела (телефон был в кармане). Атакующий писал в чаты от его имени около 12 минут — успел отправить 4 фишинг-сообщения коллегам с просьбами «глянь файл, отчёт у меня не открывается» (со ссылкой на следующий этап). Один из коллег его сразу спросил голосом «ты что, нормально?». Атака свернулась после того, как мы сменили пароль 2FA в Telegram через сервис восстановления.
Сотрудник 7, водитель, 51 год — кликнул, страница не открылась (компьютер был с моим AdGuard-фильтром уже после блокировки в 14:37). Жертвой не стал.
17:30-20:50: перевыпуск 2FA для 47 сотрудников
После разбора инцидента приняли решение — несмотря на то, что только 2 человека реально были «захвачены», нужно перевыпустить 2FA-пароль для всех 47 сотрудников, потому что: а) мы не знаем, кто из них на той же неделе уже попадал в другой фишинг, б) мы не знаем, какие пароли 2FA у людей слабые, в) это хороший повод обучить всех правильной настройке.
В 17:30 в актовом зале собрались 47 человек (производство 24/7, но мы поймали смену с 15:00 до 23:00). У меня был помощник, который раздавал листочки с инструкциями. Я работал с каждым лично по 5 минут.
Процедура для каждого сотрудника:
# Шаги настройки на телефоне (Android/iOS, Telegram актуальной версии)
1. Открыть Telegram → Настройки → Конфиденциальность и безопасность
2. Войти в «Активные сеансы» — удалить все сеансы кроме текущего
3. Включить 2FA, если не включён:
Двухэтапная аутентификация → Установить пароль
- Минимум 12 символов, обязательно цифра и заглавная
- Email recovery — на корпоративную почту (наш Zimbra)
- Hint — что-то, что подскажет только владельцу
4. Если 2FA был включён — сменить пароль:
Двухэтапная аутентификация → Изменить пароль
5. Установить Aegis (Android) или Yubico OTP (iOS) для дополнительного слоя:
- F-Droid → IzzyOnDroid → Aegis Authenticator
- В Telegram → 2FA → Резервная электронная почта
- Сохранить backup-коды в Aegis-хранилище с паролем
6. Проверка: выйти из Telegram (Настройки → Завершить все сеансы кроме текущего)
и снова войти, убедиться, что 2FA запрашивается.
На 47 человек ушло 4 часа (с перерывами по 10 минут после каждых 12 человек). У 12 из 47 — 2FA вообще не было настроено. У 19 — был слабый пароль (даты рождения, имена детей, простые «12345»). У 6 — пароль был такой, что они сами не помнили и пришлось его пересоздавать с пометкой «hint = первая буква имени». 10 человек уже всё имели в правильном виде — им мы только сменили пароль и проверили активные сессии.
Параллельно с настройкой я каждому раздавал распечатанный двусторонний листок с двумя половинками. На первой — «Признаки фишинга в Telegram» с примерами (сообщения с премией, голосования, обновления, срочные ссылки). На второй — «Что делать при подозрении» (положить телефон, не нажимать, написать мне в Element X — у меня корпоративный аккаунт). Это бумажный артефакт, который часть людей повесила у себя в шкафу.
Чек-лист, который остался клиенту
После инцидента я подготовил для производственной компании чек-лист на 14 пунктов — что должна сделать любая компания после фишинговой атаки, и что должна делать на постоянной основе.
Реактивная часть (в течение 6 часов после инцидента):
- Получить URL фишинговой ссылки и реальное содержимое (не вытаскивать через рабочий браузер!).
- Через изолированную VM или Tor — разобрать страницу: DNS-резолв, WHOIS, AS, ip, ssl-сертификат, контент.
- Заблокировать IP/домен на корпоративном файрволе и в DNS-резолвере.
- Передать IoC в OSINT (URLhaus, Abuse.ch, VT, Whois XML) — другие компании это спасёт.
- Собрать список потенциальных жертв и опросить каждого индивидуально.
- Для каждой жертвы: проверить активные сессии Telegram, перевыпустить 2FA, проверить логи на компьютере на следы RAT.
- Записать всё для будущего разбора (даже мелочи — что именно жертва нажала, в какое время, что увидела на экране).
Профилактическая часть (постоянно):
- Корпоративный DNS-резолвер с регулярным обновлением блок-листа.
- Файрвол с IoC-feed (ежечасно обновляемый список от Abuse.ch + наш собственный).
- 2FA включен у всех с финансовым или административным доступом, проверка раз в квартал.
- Phishing-симуляции через GoPhish раз в месяц.
- Обучение новых сотрудников при найме (30 минут разговора и распечатанный листок).
- Прямой канал связи с IT (Element X, не Telegram) для случаев подозрения.
- Регламент работы с финансовыми операциями (двух-факторное подтверждение крупных платежей).
Стоимость работы и финансовая сторона
Работа по этому инциденту заняла у меня и моего напарника 6 часов активного времени и ещё 12 часов на анализ и подготовку отчёта на следующий день. По нашему стандартному тарифу incident-response — 4500 ₽/час за инженера в режиме «срочно». Итого за смену:
- 6 часов реактива × 2 инженера × 4500 ₽ = 54 000 ₽
- 12 часов анализа × 1 инженер × 3500 ₽ (обычный тариф) = 42 000 ₽
- Материалы (распечатки, листки инструкций для 47 человек, организация актового зала) = 4 000 ₽
- Итого = 100 000 ₽ за инцидент
Дополнительно на профилактику компания заказала: пакет phishing-симуляций GoPhish на 12 месяцев (40 000 ₽), внедрение Element X на самохостовом Matrix-сервере (60 000 ₽), регламент работы с финансовыми операциями (15 000 ₽). Общая инвестиция в эту область за квартал — 215 000 ₽. Это меньше, чем стоимость одного выведенного через социнженерию платежа.
Для сравнения — если бы атакующий захватил Telegram бухгалтера и через него убедил гендиректора подписать «срочный» платёж на 1-2 млн рублей в сторонний адрес, шансы возврата средств были бы около 5%. Так что вложиться в защиту дешевле, чем разбираться с последствиями.
FAQ: что чаще всего спрашивают клиенты
Откуда атакующие узнали список сотрудников и в какие чаты их добавлять?
В нашем расследовании источник — это утечка корпоративного списка контактов через одно из сторонних HR-приложений (мы подозреваем мобильное расширение к учётной программе работы с резюме, которое сотрудники сами устанавливают). Сами Telegram-аккаунты доступны через поиск по @username, который многие сотрудники указывают в LinkedIn и в открытом профиле HH. Атакующие за две недели собрали список из 38 username сотрудников этого производства, выгрузили в скрипт и через TDLib массово добавили в новый чат «Корпоративное голосование 2026». Этот вектор атаки — типичный для целевых компаний.
Можно ли поставить технические блоки, чтобы пользователи не могли кликать на фишинг?
Полностью предотвратить клики невозможно — клиент-приложение Telegram открывает ссылки в собственном in-app браузере, который мы не контролируем. Но можно сильно снизить ущерб. Первое — корпоративный DNS-резолвер с регулярно обновляемой базой блокированных доменов (наш — AdGuard Home с 4.7 млн записей). Второе — MikroTik-файрвол с ежечасно обновляемым списком IoC от Abuse.ch и URLhaus. Третье — обязательная Telegram 2FA для всех сотрудников с финансовым или административным доступом, потому что 2FA защищает от перехвата сессии. Эти три меры закрывают около 85% реалистичных фишинг-атак на корпоративные Telegram-аккаунты.
Сколько времени нужно, чтобы перевыпустить 2FA для всех сотрудников?
У нас на 47 человек ушло 4 часа, и это с учётом того, что у 12 сотрудников 2FA не было настроено вообще. Процедура: 1) централизованный сбор всех в одном помещении (производственный цех мы для этого использовать не могли, собирали в актовом зале офиса), 2) каждый с телефоном устанавливает приложение 2FA на отдельном устройстве (Aegis для Android, Yubico для тех у кого ключи), 3) логинится в Telegram, отзывает все активные сессии в «Конфиденциальность → Активные сессии», 4) включает или меняет 2FA пароль, 5) выдаём новые backup-коды и проверяем синхронизацию. 5 минут на человека при наличии очереди и одного нашего инженера в роли куратора.
Что делать, если кто-то всё-таки ввёл код в фишинговую страницу?
Если ввели код, который пришёл в Telegram «Login attempt» — атакующий получает доступ к аккаунту в течение 30-60 секунд. Дальше: 1) немедленно зайти с другого устройства в Telegram, открыть «Активные сессии», удалить все кроме своей, 2) сменить пароль 2FA если он был, 3) если 2FA не было — атакующий уже зашёл и скорее всего сразу же сменил его, в этом случае нужно писать в @SmsLogin или @notoscam с подтверждением личности (паспорт + видео-селфи), восстановление занимает 2-7 дней. У наших клиентов мы всегда требуем включённый 2FA пароль именно по этой причине — без пароля атакующий полностью забирает аккаунт за минуту.
Стоит ли вообще пользоваться Telegram в корпоративных целях?
По моему опыту — да, но с ограничениями. Telegram удобен для координации (быстрые сообщения, голосовые, документы до 2 ГБ), и попытка перевести 30-50 сотрудников на корпоративный мессенджер встречает сопротивление. Что мы делаем: для критичной деловой переписки (с клиентами, по сделкам, по финансам) — Element X на собственном Matrix-сервере, end-to-end шифрование, наш контроль. Для оперативной координации внутри отделов — Telegram с обязательной 2FA, отзывом старых сессий раз в квартал, и запретом передавать туда платёжные документы и пароли. Это разумный компромисс между удобством и контролем.
Итог
За 6 часов мы прошли путь от первого клика до полной защиты компании: блокировка C2 на MikroTik, разбор фишинг-страницы, перевыпуск 2FA для 47 человек, чек-лист и обучение. Стоимость инцидента — 100 000 рублей и одна тяжёлая смена двух инженеров. Стоимость недореагирования была бы существенно выше — захваченные Telegram-аккаунты обычно используют для следующего этапа атаки на гендиректора, и ущерб от него измеряется миллионами. Производство в Балашихе спокойно работает дальше, профилактика работает, и за 4 последующих месяца ни одного клика на фишинг там зафиксировано не было.
Похожая задача в вашей компании?
Расскажите, что у вас сейчас — пришлю план работ и оценку в течение рабочего дня.
Написать в Telegram или +7 903 729-62-41
Семёнов Е.С., руководитель ITfresh