• [ Регистрация ]Открытая и бесплатная
  • Tg admin@ALPHV_Admin (обязательно подтверждение в ЛС форума)

Статья Прокачиваем фишинг при помощи дыры в Exchange, Telegram-бота и Evilginx2

stihl

bot
Moderator
Регистрация
09.02.2012
Сообщения
1,385
Розыгрыши
0
Реакции
696
Deposit
0.228 BTC
stihl не предоставил(а) никакой дополнительной информации.
В этой статье я покажу, как мне удалось организовать фишинговую рассылку, используя критическую уязвимость в Exchange Server, чтобы повысить доверие к рассылаемым письмам. Начал с получения списка корпоративных адресов через устаревшую версию мобильного приложения, затем с помощью Evilginx2 и Telegram-бота создал неотличимый от оригинала лендинг и в итоге закрепился в сети организации.
Это исследование получило первое место на Для просмотра ссылки Войди или Зарегистрируйся в категории «Ловись рыбка». Соревнование ежегодно проводится компанией Awillix.

warning​

Статья имеет ознакомительный характер и предназначена для специалистов по безопасности, проводящих тестирование в рамках контракта. Автор и редакция не несут ответственности за любой вред, причиненный с применением изложенной информации. Распространение вредоносных программ, нарушение работы систем и нарушение тайны переписки преследуются по закону.

Как я получил адреса​

Исследуя корпоративный веб‑ресурс, я обнаружил, что там в открытом доступе лежала старая версия мобильного приложения. В отличие от актуальной на тот момент, она позволяла залогиниться без второго фактора.

Ссылка для скачивания приложения появляется, только если зайти с мобильного устройства. Но я просто включил в браузере эмуляцию телефона и скачал приложение на компьютер.

Для просмотра ссылки Войди или Зарегистрируйся
Дальше я провел разведку по открытым источникам и собрал небольшой список имейлов работников организации. Затем поспреил пароли в приложении, получил доступ к профилю одного из сотрудников и смог вытащить через API уже полный список адресов. Их‑то я и буду использовать для фишинговой рассылки.


Выбираем способ доставки​

В докладе Елизаветы Тишиной и Всеволода Кокорина «Вам письмо: старые новые атаки на почту», представленном на PHDays 2024, я подсмотрел один замечательный трюк: возможность слать электронные письма клиентам Microsoft Exchange Server с подменой адреса отправителя (за что большое спасибо докладчикам!).

Для просмотра ссылки Войди или Зарегистрируйся
Суть этого бага в том, что сервер некорректно парсит заголовок P2 FROM и этим можно воспользоваться — подделать поле отправителя так, чтобы там были сразу два адреса: реальный (который проверяет Exchange и скрыт от пользователя) и фейковый, который видит жертва. В итоге Exchange успешно подтверждает подлинность, и жертва видит, что получила письмо от доверенного сотрудника.

info​

Во время эксплуатации этой уязвимости патчи от Microsoft и других вендоров еще не были доступными для скачивания.
Если хочешь быстро проверить, можно ли подменять отправителя при пересылке из Gmail в Outlook, вот рабочий PoC (используй его ответственно):

Код:
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

# Твой аккаунт Gmail
sender_email = "ОТКОГООТПРАВИТЬ"
# Пароль приложения, взятый с https://myaccount.google.com/u/0/apppasswords
password = "ПАРОЛЬ_ПРИЛОЖЕНИЯ"
# Email, куда отправить письмо
receiver_email = "<КУДА_ОТПРАВИТЬ>"
# Ящик, который нужно показать получателю
spoofed_email = "<ЖЕЛАЕМЫЙАДРЕСОТПРАВИТЕЛЯ>"
smtp_server = "smtp.gmail.com"
smtp_port = 587
message = MIMEMultipart()
# Здесь можно подменить имя отправителя
message["From"] = f"<{spoofed_email}> "spoofed" <{sender_email}>"
# Текст письма
message.attach(MIMEText('Test for CVE-2024-49040', "plain"))

server = smtplib.SMTP(smtp_server, smtp_port)
server.set_debuglevel(1)
server.starttls()
server.login(sender_email, password)
print(message.as_string())
server.sendmail(sender_email, receiver_email, message.as_string())
Если тебе понадобятся другие связки, помимо Gmail → Outlook, то можешь обратиться к Для просмотра ссылки Войди или Зарегистрируйся.

Из‑за лимитов на отправку писем я использовал несколько аккаунтов Gmail. Эти адреса были заведены заранее — для совсем новых учеток у Google порой жесткие ограничения, и можно нарваться на блокировки или лимиты.

На каждом сервере, который я использовал для рассылки, я поместил скрипт на Python для работы с Gmail по API. Скрипт подменяет P2 FROM при отправке письма. Также я добавил рандомные паузы — чтобы не триггерить безопасность Gmail при отправке и корпоративные фильтры — при приеме.


Делаем лендинг​

Я сделал два варианта фишингового письма с одной темой — «Новая фича: подключение к удалёнке через Telegram». Добавил короткий текст и QR-код внутри — сканируешь и попадаешь в телеграм‑бота злоумышленника.

На скриншотах — полный текст каждого из вариантов письма.

Для просмотра ссылки Войди или ЗарегистрируйсяДля просмотра ссылки Войди или Зарегистрируйся

Я подготовил VPS для работы Telegram-ботов. Визуально боты идентичны, однако каждый вел на свой инстанс фишингового веб‑ресурса.

Для просмотра ссылки Войди или Зарегистрируйся

Также на отдельной VPS я развернул Evilginx2. Это прокси, который встает между пользователем и настоящим сайтом: созданный с его помощью ресурс полностью имитирует легитимный сайт и перехватывает запросы и ответы между жертвой и реальным сервером. Это позволяет злоумышленникам (или редтимерам) получать учетные данные и сессионные токены.

Правила перехвата валидных учеток и сессионных токенов я написал сам, а также настроил VPS так, чтобы перехваченные токены оставались активными еще некоторое время. Конкретные шаги здесь не привожу.

Так как я использовал Evilginx2, пользователи внутри клиента Telegram видели страницу с привычным для них интерфейсом сайта. Такое решение также позволяло сразу проверять корректность вводимых данных, так как фишинговый сервер проксировал трафик до легитимного ресурса и обратно.

Так я получил дополнительные сессии работников, которые изначально допускали опечатки в своих паролях или вводили устаревшее OTP: жертвы видели привычные сообщения об ошибке входа и вводили свои данные снова — на этот раз корректно.


Telegram WebApp​

Стоит отдельно поговорить про технологию WebApp в Telegram. С недавнего времени самый главный бот Telegram — @BotFather — тоже ее использует.

Для просмотра ссылки Войди или Зарегистрируйся
Боты, использующие WebApp, — это PWA, то есть Progressive Web Apps, которые запускаются внутри WebView (встроенного в приложение браузера). Открыв переписку с таким ботом, ты никогда не увидишь никаких URL внутри Telegram (что в мобильном приложении, что в десктоп‑версии)!

Да, на ПК можно залезть в экспериментальные настройки и активировать параметр Enable webview inspecting, а затем, кликнув в окне приложения правой кнопкой мыши (или нажав F12), открыть консоль разработчика.

Для просмотра ссылки Войди или Зарегистрируйся
Но кто этим будет заниматься из рядовых пользователей?

В итоге «регистрация в боте» работает так: жертва фишинга переходит по QR-коду из письма к Telegram-боту и, следуя приложенной к письму инструкции, проходит аутентификацию. Процесс при этом неотличим на глаз от легитимного за счет использования Evilginx2, а проверить его подлинность без специальной подготовки нельзя — поскольку мы находимся внутри веб‑приложения в Telegram.

На скриншоте ниже — код на Python, которым ты можешь вдохновляться, если захочешь создать похожего бота.

Для просмотра ссылки Войди или Зарегистрируйся

Активная фаза проведения фишинга​

После рассылки писем некоторое количество работников отсканировали QR-код, перешли к одному из фишинговых Telegram-ботов (какому конкретно — зависело от варианта письма) и авторизовались через фишинговый ресурс.

Для просмотра ссылки Войди или Зарегистрируйся
В конце они получали заранее подготовленное сообщение об успешной регистрации. Оно делается с помощью кастомизации фишлета Evilginx.

На одном из моих серверов при этом сохранялись следующие данные:

  • логин;
  • пароль;
  • сессионный токен, позволяющий получить доступ к целевому ресурсу организации.
Для просмотра ссылки Войди или Зарегистрируйся
Пример перехваченной сессии одного из первых попавшихся сотрудников
Пример перехваченной сессии одного из первых попавшихся сотрудников

Дальше я продлевал жизнь сессионных токенов с помощью специально разработанного скрипта на Bash. Он крутился на нескольких VPS и использовал curl, чтобы раз в несколько секунд отправлять на целевой ресурс запрос с токенами и поддельными заголовками User-Agent.

Дальше токены можно импортировать в браузер и использовать при атаке на организацию.


Выводы​

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

Для просмотра ссылки Войди или Зарегистрируйся
Для защиты от подобных проблем можно дать следующие рекомендации:

  • Проводить регулярные учебные фишинговые кампании, в том числе показывающие работникам, что нарушитель может подделывать адрес отправителя.
  • Проверить используемые средства защиты на наличие правил обнаружения Evilginx. Evilginx автоматически добавляет свой HTTP-заголовок X-Evilginx с доменом атакующего, что можно использовать как один из потенциальных признаков.
  • Запретить подключаться старым версиям мобильного приложения, особенно после изменений механизма аутентификации. В крайнем случае доступ к небезопасному эндпоинту API можно закрыть через WAF.
  • Своевременно устанавливать обновления безопасности (в данном случае Exchange Server). В идеале — после тестирования на работоспособность.
  • Если используются другие решения для защиты почты, обновлять их. Например, в «Лаборатории Касперского» Для просмотра ссылки Войди или Зарегистрируйся механизмы детекта спуфинга в своих решениях для защиты корпоративной почты. В том числе должна определяться эксплуатация CVE-2024-49040.
 
Activity
So far there's no one here
Сверху Снизу