Сейчас в программе открытых кибериспытаний Innostage есть одно главное недопустимое событие и три промежуточных с меньшим вознаграждением. И вот 19 июля этичный хакер prorok забрал положенные 100 тысяч рублей за компрометацию учётной записи. Как ему удалось это сделать? Рассказываем подробнее.
Чтобы забраться к нам в инфраструктуру, prorok использовал старый добрый фишинг.
Подготовка к атаке: письмо, адреса и рычаги давления
Чтобы фишинг сработал, нужно хорошо знать потенциальную жертву, в нашем случае, сотрудников компании и внутренние процессы.
В нашей программе открытых кибериспытаний фишинг разрешён только через корпоративную почту, так что у prorok был сразу определён канал действия. Все необходимые данные для рассылки хакер нашёл с помощью OSINT.
Адресаты
В адресном листе было около 1000 получателей. Большая часть из них была обнаружена с помощью The Harvester, инструмента, который позволяет автоматизировать OSINT. Контакты также собирались через соцсети, в частности, LinkedIn и ВК.
«Я не стал отсеивать этот список, решил запустить по тому, что есть — хотелось быстрее протестировать взлом. Меня заблокировали где-то на середине, то есть не до всех пользователей дошли письма. Если бы потратил время на отсев, меня, скорее всего, вычислили бы не так быстро, а так когда ИБ-служба увидела рассылку в том числе уволенным сотрудникам, они сразу всё распознали».
Письмо
Эксперты SOC и сотрудники, которые заметили фишинг, сошлись во мнении, что письмо было очень качественным и почти не отличалось от наших корпоративных рассылок.
Отправитель
Отправителем значился Отдел технической поддержки. Почтовый домен выглядел как innostage.com.ru, но поскольку дополнительный домен [.com.] добавлен в середину адреса после .ru, он вызвал гораздо меньше вопросов.
Специальные плашки
Все внешние письма Innostage маркируются специальной меткой. Prorok обнаружил ее ещё в начале июля, когда проводил разведку и отправил письмо на общий адрес Innostage. В ответе сохранилась версия оригинального письма в том формате, который видит его внутренний получатель.
Текст письма
Не обошлось без помощи нейросетей — письмо шлифовалось долго и упорно, чтобы получить идеальный тон между официальным и дружелюбным. В самом тексте были раскиданы факты, которые позволяли скрыть фишинг.
Новый почтовый сервер объяснял странный, отличающийся домен.
Новый сервер для vpn объяснял некорректную ссылку.
У «новых» почтового и vpn сервера были схожие домены. Кроме того, даже в подписи использовался тот же домен [.com.ru] — из-за этого разница с настоящим адресом не бросилась в глаза.
В письме была отсылка к автоматической маркировке«Внешняя почта».
А ещё использовались рычаги давления:
Потеря всех писем и встреч в календаре — для сотрудников в такой большой команде, как Innostage, это могло остановить работу.
Рассылка была в пятницу, а потенциальный переезд в «выходные», так что варианта отложить действия из письма не было.
Время атаковать!
Всего волн было две — в 11:08 и в 13:21.
В первую волну сотрудники получили 287 писем с фишинговой ссылкой на vpn.innostage-group.com.
Prorok смог обойти корпоративное решение по защите почты путем специально сформированной ссылки, которая приводила на фишинговый ресурс.
Как получить аутентификационные данные
Домены отправителей и целевые URL мимикрировали под легитимный ресурс компании vpn.innostage-group.ru.
«Я предполагал, что такая организация, как вы, не сделает VPN просто по доменной учётной записи, и, скорее всего, там будет второй фактор».
Когда пользователь вводил учетные данные в форму (даже несуществующие) и нажимал на LOG IN, его автоматически перенаправляло на страницу для ввода кода 2FA. Тут тоже срабатывала хитрость: крутилась иконка загрузки, создавалось ощущение процесса входа. Через 20 секунд система снова просила код 2FA, прикрываясь ошибкой. Уловка сработала — несколько сотрудников вводили код по два раза.
Всего было скомпрометировано 3 учетных записи. В одном случае сотрудник передал все аутентификационные данные, включая 2FA-код (дважды!). 0 процентов осуждения, 100 процентов назначения курса по фишингу в корпакадемии.
В 12:02 prorok подключился к VPN с адреса 87.251.78[.]223 с недоменного устройства.
Закрепиться внутри сети: хорошая попытка, но не свезло
Условие промежуточного события — компрометация и закрепление. Второе багхантеру не удалось: SOC оказался на шаг впереди и успел проанализировать и заблокировать зловред, скачиваемый на фишинговом ресурсе.
«Я не смог оперативно проникнуть в систему, поскольку скачал нужный VPN-клиент уже после того, как получил данные учетной записи. Я просто не подумал об этом. Я действовал один, но возможно, если бы у нас была команда, коллеги бы подсказали бы мне это сделать, и закрепление бы состоялось».
Но вот как это должно было быть.
После ввода учётных данных и нажатии на кнопку входа автоматически начинается загрузка исполняемого файла «vpn-client-2.1.1.exe», мимикрирующего под легитимный VPN-клиент, и перенаправление на страницу для ввода кода 2FA.
При ручном запуске этого исполняемого файла (автоматически он не запускается) выполняется следующая цепочка событий::
Объект «vpn-client-2.1.1.exe» копирует своё тело в директорию «C:\Users\Public\vpn-client-2.1.1.exe» (запись в данную директорию имеют все пользователи).
Выполняется HTTP GET-запрос на ресурс 5.8.38[.]130:8000 для получения вредоносной DLL-библиотеки: HTTP://5.8.38[.]130:8000/REMOTE.DLL.
Библиотека remote.dll загружается в память без сохранения на уровне файловой системы.
Выполняется загрузка архива с Python: https://www.python.org/ftp/python/3.10.2/python-3.10.2-embed-amd64.zip с последующей распаковкой содержимого в директорию C:\Users\Public\Python\.
Запуск скрипта через интерпретатор Python, который загружает шелл-код в память, настраивает распределение памяти и создание потока с помощью функций Windows API (VirtualAlloc, CreateThread, WaitForSingleObject) и выполняет шелл-код в новом потоке внутри процесса.
Ответный ход SOC: как реагировала команда Innostage
«Я не был готов к такой оперативной работе отдела безопасности. Они достаточно быстро реагировали и блокировали меня».
Первые сообщения в SOC о возможном фишинге поступили в SOC в районе 11:30: бдительные сотрудники не переходили по ссылкам, а сразу отправляли подозрительное сообщение в Центр противодействия киберугрозам компании.
В 12:06 уже появились первые сообщения о фишинге в корпоративных чатах.
Параллельно SOC уже реагировал на инцидент. У нас в Innostage для управления реагированием внедрён собственный продукт Orchestrator, который позволяет действовать комплексно в случае атак, управляя всеми СЗИ из одного окна.
В 12:18 почтовый адрес отправителя support@innostage-group.com[.]ru был занесен в черный список на почтовом средстве защиты.
В 12:32 начались блокировки фишингового ресурса по доменному имени и по IP-адресу на всех межсетевых экранах компании. В 12:34 заблокировали почтовый сервер, с которого шла рассылка.
'Доменное имя vpn.innostage-group.com.ru успешно заблокировано'
'Хост 31.31.196.104 успешно заблокирован'
'Доменное имя server141.***.ru успешно заблокировано'
Чтобы минизимировать риски компрометации пользователей, был запущен сценарий на Оркестраторе, удаливший фишинговые письма.
В 12:39 нашли скомпрометированные учётные записи — все три пришлись на первую волну. Разорвали все VPN-сессии и заблокировали пользователей в нашем домене.
Спустя 40 минут пошла вторая волна рассылки: теперь уже с почтового адреса support@lnnostage-group.com[.]ru (31.31.196[.]33) было разослано ещё 300 писем по новому списку получателей. Вторая волна закончилась быстрее, чем первая: сотрудники SOC понимали, с чем имеют дело, и заблокировали все ресурсы — и адрес отправителя, и почтовый сервер, и фишинговый сайт, а также удалили все фишинговые письма всего за 15 минут.
'Адрес 5.8.38.130 успешно заблокирован'
'Доменное имя vpn.lnnostage-group.com.ru успешно заблокировано'
В процессе расследования сработали наши правила корреляции, которые выявили аномальное подключение скомпрометированного пользователя к VPN: устройство и IP-адрес отличались от собранного в профиле. Адрес подключения также был добавлен в черный список на МСЭ.
Вывод
Первое — хорошо, что это открытые кибериспытания, а не реальный злоумышленник. Вознаграждение за атаку составило 100 тысяч рублей, а будь это реальный мошенник, ущерба могло бы быть гораздо больше.
Второе — ещё раз убедились, что фишингу как и любви, покорны все. Так что важно сохранять бдительность и регулярно проводить тренировки внутри компании.
Кстати, в июле количество атак на Innostage выросло до 330 тысяч, это почти в 15 раз больше, чем за июнь. «Этичные» хакеры активно проводят разведку нашей инфраструктуры. Зовем и вас попробовать свои силы в программе открытых кибериспытаний на платформе для исследователей безопасности Standoff Bug Bounty.