Фишинг под видом розыгрыша
Эта компания не была новичком в вопросах риска. Она работала в индустрии взыскания задолженностей, и им часто приходилось иметь дело с людьми, которые всячески избегали общения и напоминаний о том, что должны. Угрозы, разводы и наезды — всё это было для них обычным делом. Теперь же их волновал один простой вопрос:
Реально ли к ним вообще залезть?
Собственно, для этого нас и наняли.
Речь шла не о том, чтобы тестировать файрволы или запускать сканеры уязвимостей. Клиент хотел, чтобы мы смоделировали действия реального хакера, если его цель — проникнуть в системы, завладеть доступами и что-нибудь сломать. Но не с помощью хитрых программ, а языком — с помощью фишинга. Это был чистый социнжиниринг. Никаких взломов с проникновением, копирования пропусков или гостей в офисе. Можно было работать только через интернет, зато тут у нас был полный карт-бланш.
Они хотели выяснить:
Где у них дыры в защите?
Кого можно развести фишингом или по телефону?
Какие правила безопасности существуют только на бумаге?
Как далеко сможет пролезть один хакер, если у него вообще ничего нет?
Нам не дали ни учёток, ни имён, ни почт, ни внутренних бумаг. Только название конторы и отмашку.
Мы начинали с нуля.
Этап 1: Первичная разведка
Поиск лазейки всегда начинается с одного и того же: с исследований. И в этот раз всё было не так-то просто и быстро.
Компания занималась возвратом долгов. Эта та сфера, где пересекаются финансы, частная жизнь и всеобщее раздражение. Они не светились в сети так, как другие, и это понятно. Ни постов в блоге, ни рассказов про крутых сотрудников-спецов, ни новостей. Это ж не розничный бренд какой-то. Они не кричали о себе на каждом углу, а наоборот, старались не привлекать лишнего внимания.
Впрочем, для взлома нужно не внимание, а доступ. А доступ начинается с понимания. Поэтому мы начали собирать данные.
Сначала полезли на LinkedIn, но там было пусто. Лишь парочка человек указали компанию как место работы, да и должности у них были самые обычные. В общем, начинать было почти не с чего.

Пришлось расширить поиск.
Мы пропарсили их сайт в поисках информации о команде, контактных email-адресов, страниц с вакансиями или биографий. Сверили домены со старыми списками участников конференций. Поискали свежие вакансии, чтобы посмотреть, как у них устроен IT-стек и кто кому подчиняется. Прошерстили местные бизнес-справочники и официальные реестры. Даже проверили узкоспециализированные базы данных — вдруг там есть контакты их партнеров или подрядчиков.
Постепенно пазл начал складываться.
Пара имен. Несколько должностей. Потом нашли на каких-то левых новостных сайтах информацию о двух подрядчиках. У этих подрядчиков в пресс-релизах были отмечены сотрудники, а у тех в LinkedIn — контакты из нашей компании. Это помогло прикинуть структуру и начать рисовать внутреннюю иерархию.
В конечном итоге мы собрали достаточно данных, чтобы прикинуть шаблон корпоративной электронной почты: «первая буква имени[точка]фамилия». Из этого составили список из 30–40 вероятных email-адресов сотрудников и начали группировать их по категориям: IT и системные администраторы, финансы, руководство, поддержка.
И тут-то мы наткнулись на профиль CEO в LinkedIn.
Он сразу бросался в глаза. Если другие профили были пустыми или никакими, то его — вылизанным и уверенным. Он писал, что заседает в совете какой-то национальной спортивной религиозной ассоциации, постил фотки с мероприятий, хобби и прочие рекомендации. И вишенка на торте: прямо в дополнительной инфе лежал номер его личного телефона. Его мог видеть любой, у кого была учётка LinkedIn'а.

За всю нашу многолетнюю практику мы редко такое видели. Топ-менеджер размещает свой мобильный номер прямо в открытом доступе?
И тут мы поняли, с чего начнем.
Этап 2: Легенда
Теперь, когда у нас был личный номер гендиректора и чёткое представление о его личности, пришло время подумать над легендой.
Многие заблуждаются насчёт социальной инженерии. Это не фокусы из голливудского кино, не умение заболтать и не агрессивные продажи. Всё дело в доверии. А доверие работает, только когда сталкиваешься с чем-то знакомым.
Его профиль в LinkedIn уже подсказал нам идею. Он был не просто руководителем, а был связан с какой-то национальной религиозной спортивной организацией.

Эта деталь всё меняла. Она рассказала нам о его ценностях, его волонтёрской работе и о том, как он себя позиционирует в обществе. А еще она дала нам повод созвониться с ним и не спалиться.
Итак, мы придумали легенду.
Я стал молодёжным тренером из Денвера. Название команды, структура лиги — всё было настоящим, а тон общения — привычным для него. Я подгото��ился: мог говорить про местные игры, других членов правления и даже про сезонные мероприятия этой организации. Я был во всеоружии — подловить меня не получилось бы.
К счастью, он и не пытался.
Звонок был коротким. Что-то около трех минут. Я поблагодарил его за поддержку и сказал, что его, как члена правления, автоматом включили в розыгрыш для своих. Сделал вид, что это обычная ежегодная практика.
Он был вежлив. Дружелюбен. Поблагодарил за звонок. Сказал, что мы молодцы, раз устраиваем такое. Спросил моё имя и какую команду я тренирую. Я тут же ответил. Имена были реальными, и я произнёс их совершенно непринужденно.
Он даже не заподозрил ничего.
Я сказал, что розыгрыш будет завтра, и если он выиграет, я его наберу.
На этом всё.
Цель была не в том, чтобы он на что-то кликнул. Ещё не время. Цель была — закинуть удочку, чтобы он ждал следующего звонка, и чтобы наш следующий разговор выглядел как логичное продолжение предыдущего.
Он повесил трубку с мыслью, что его поблагодарили за служение важному для него делу. Я повесил трубку, зная, что теперь дорога открыта.
Этап 3: Готовим наживку
Зерно посеяно, пора превращать нашу легенду в реальную угрозу.
Тут всегда надо искать золотую середину. Наживка должна и работать как надо, и выглядеть правдоподобно. Можно написать гениальный пейлоад, но если жертва на него не клюнет — всё насмарку.
Поэтому мы решили не мудрить и состряпали поддельный Excel-документ с именем [Имя_клиента]_Raffle_[ОРГ].xls. Он был замаскирован под форму для подтверждения выигрыша — идеальное продолжение нашего недавнего звонка. В левом верхнем углу разместили логотип спортивной НКО, а сразу под ним — сообщение на желтой плашке:
«Поздравляем с выигрышем! Чтобы увидеть подробности, нажмите "Разрешить редактирование" в верхней части документа».

Мы специально ничего не конкретизировали. Ни суммы, ни названия приза. Лишь бы разжечь любопытство. Такое, которое отключает бдительность, особенно когда документ прилетает от того, с кем ты уже пообщался и вроде как доверяешь.
Хитрость была не в дизайне. Она была в ожиданиях. Когда человек уверен, что просто заканчивает начатое дело, он почти наверняка не будет париться насчёт следующего шага. Особенно, если этот шаг — рядовой клик по жёлтой кнопке «Включить содержимое» в Microsoft Office.
Мы написали простой, но эффективный VBA-макрос.
Он использовал функцию Auto_Open() для срабатывания при запуске файла. Макрос втихую вызывал PowerShell, чтобы тот раскодировал наш base64-реверс-шелл и отправил коннект назад, на наш listener по 443 порту. Этот порт обычно используется для зашифрованного трафика, поэтому он вряд ли был бы заблокирован, а понять, что происходит, без DPI тоже было бы сложно. Большинство антивирусов того времени пропускали такое, если только сам пейлоад уже не засветился в сигнатурах.
Раньше эта связка — макрос для запуска PowerShell — была просто убойной. Но годы шли, и Microsoft начала закручивать гайки. Теперь в скачанных документах Office макросы по умолчанию отключены. Чтобы открыть такой файл сегодня, нужно вручную обойти кучу защит, на что большинство пользователей не пойдет. Но на тот момент достаточно было одного клика по «Включить содержимое». Это была классическая корпоративная уязвимость. Многие компании просто не понимали, какую опасность представляют макросы, если не контролировать их запуск.

Сегодня мы бы ни за что не посоветовали использовать этот трюк в лоб, без доработок под современные защиты. Но тогда он сработал. И сработал как часы.
В этот момент пазл сложился. У нас был звонок. У нас была жертва, которая ждала продолжения. У нас был пейлоад, замаскированный под благодарность.
Теперь оставалось его открыть.
Этап 4: Второй звонок
На следующее утро я ему перезвонил.
Дождался середины дня, когда он, скорее всего, будет достаточно занят, чтобы лишний раз не задумываться, кто и почему ему звонит, но при этом еще будет на рабочем месте. Тот же тон. Тот же голос. Спокоен. Дружелюбен. Знаком. Я напомнил, кто я такой, и сказал, что у меня отличные новости.
Сказал, что его выбрали. Он выиграл.
Ни тени сомнения. Никакого недоумения. Только смех и удивление. Он такой: «Да ладно? Я обожаю гольф! Обалдеть!» А потом добавляет: «Похоже, это судьба».
Вот это и была точка невозврата. Он был на крючке. Мне даже не пришлось его уговаривать. Я просто достраивал историю, которую он сам себе нафантазировал.
Наш вредоносный макрос не просто устанавливал обратное соединение — он еще и подгружал картинку с «выигранными клюшками» и информацией о них. Так что кнопка, которая включала макрос, делала что-то «полезное» и для жертвы, а не просто висела для красоты.
Я сказал ему, что нужно заполнить форму подтверждения. Ничего официального — просто небольшой Excel-документ с описанием клюшек и полем для выбора способа доставки. Мимоходом заметил, что в Outlook форматирование иногда выглядит странно. И добавил: «Вверху, возможно, будет желтая полоска. Если что-то отобразится не так, просто нажмите „Включить содержимое“, и все заработает».

Он ответил, что уже открыл документ. Я слышал, как он кликает мышкой. Секунда — и он говорит: «Ага, получилось».
В тот же момент shell подключился. Обратное соединение появилось на listener'е. Beacon работал стабильно. Соединение чистое. Без ошибок, без лагов, без каких-либо признаков того, что нас заметили. И вот я уже на компьютере самого CEO.
Пейлоад отработал как часы. Подключение шло через 443-й порт и для любого файрвола или IDS без глубокого анализа пакетов выглядело как обычный HTTPS-трафик. Никаких алертов от антивируса, никаких сигналов от EDR. Просто тихое рукопожатие между его машиной и моей.

Под конец разговора он выдал еще кое-что.
«Если будете отправлять, — говорит, — могу свой номер в FedEx дать. Так проще будет».
И тут же продиктовал его. А через пять минут после того, как мы распрощались, от него пришел e-mail. Его домашний адрес, детали доставки и записка: «Используйте, пожалуйста, вот этот номер счета FEDEX: #[номер]».

Он-то думал, что помогает. А для нас это был бонус, о котором мы и не просили.
Что ж, звонок окончен, фишинг удался — рабочая станциявзломана. Теперь можно начинать настоящую работу.
Этап 5: Мы внутри
Рабочая станция гендира взломана, теперь-то и начинается самое интересное.
Наш куратор четко обозначил задачу перед началом теста. «Если получится войти, — сказал он, — проверьте, насколько далеко сможете продвинуться. Мы хотим понять, какой урон нанесет настоящий хакер, получив доступ к командной строке на одной из наших машин. Покажите, чем мы рискуем».
Что мы и сделали.
Соединение держалось отлично. Оно не падало, обеспечивая нам полный доступ к компьютеру гендира. Мы сразу же прояснили важный момент: у него на машине была локальная админка. Это открыло дверь для более глубокого доступа.
Начали с лёгкой разведки: получили доступ к файлам, посмотрели сетевые папки, изучили планировщик задач, историю браузера и сделали скриншоты. После этого включили кейлоггер, чтобы следить за активностью, и тихонько запустили веб-камеру, чтобы убедиться, что он на месте. Всё работало как надо. Никаких оповещений, никаких поп-апов — ничего подозрительного.
Он даже не догадывался, что мы уже там.
С повышенными привилегиями на машине мы смогли закрепиться в системе и запустить полный дамп памяти процесса LSASS, который управляет логинами в Windows.
И тут началось самое интересное.
Из дампа удалось вытащить пароль гендира в открытом виде. Он оказался в памяти просто потому, что система так работает. Ничего сверхъестественного, но для нас это была находка. Мы тут же начали проверять его на других компьютерах.
Сначала обратили внимание на машины в том же сетевом сегменте. На нескольких он сработал.
Позднее мы поняли, почему. IT-отдел навыдавал гендиру локальных админок на куче машин. Всё происходило постепенно, раз за разом. То ему надо было что-то поставить, то лень было ждать тикета в техподдержку. В общем, схема была простая: гендир попросил — гендир получил. Никакой глобальной политики. Никакой зачистки потом. Ему просто выдавали права, потому что так было проще или потому что начальство давило.
С таким бардаком мы зацепились не за один компьютер, а сразу за н��сколько. Прыгали с машины на машину, используя то его пароль, то хеши от локальных админок. С каждой машины собирали новые учётки, дампили память и смотрели логи, чтобы найти цели поинтереснее.
В конце концов мы добрались до системы одного из местных айтишников. Его пароль все еще был в памяти.
Мы извлекли пароль, убедились, что он рабочий, и использовали его для входа на контроллер домена. Авторизация прошла успешно. Теперь у нас были полные права администратора домена.

Вся эта цепочка, от первого звонка до полного захвата домена, была построена на доступе, который никому и в голому не пришло проверить. Никаких технических уязвимостей. Никаких zero-day. Никакой малвари, написанной под этот тест. Был только один документ, один голос и решение поверить незнакомцу.
Просто. Тихо. И эффективно.
Этап 6: Расставляем сети
Получив доступ к рабочей станции гендира и полный обзор домена, мы переключились на следующую цель: остальных сотрудников.
Нашей задачей был не просто взлом. Клиент хотел понять, как отреагируют сотрудники, если станут целью замотивированного и опытного хакера. Не какой-то случайный спам-фишинг, а что-то, во что можно поверить. Что-то, что не вызовет подозрений.
Вся суть этой фазы была в том, чтобы дотянуться до как можно большего числа людей.
Мы начали с определения целей. Собрав данные из открытых источников и просканировав внутреннюю сеть, составили список примерно из 30 сотрудников с подтвержденными личностями и ролями. Разбили их по отделам: финансы, кадры, поддержка, IT и несколько ключевых бизнес-юнитов.
Пришло время действовать.
Мы зарегистрировали домен, который не должен был вызвать подозрений: webmail-outlook.com. Купили его за неделю до использования. Но не сидели сложа руки, а повесили на него простую страничку-заглушку и начали «прогревать»: пускали немного трафика с разных IP, чтобы все выглядело по-настоящему. Цель — наработать домену репутацию. Свежезарегистрированные домены часто попадают под фильтры. А «прогретые» — нет.
После нескольких дней «прогрева» создали поддомен, повторяющий их реальную структуру. К примеру, настоящий портал компании был mail.clientname.com, а наш фишинговый домен превратился в [clientname].webmail-outlook.com. URL получался длинный, как будто корпоративный и знакомый.
Затем мы склонировали их страницу входа в Outlook.

Проследили, чтобы все совпадало. Шрифты. Кнопки. Скорость загрузки. Если кто-то открыл бы рядом настоящую страницу и поддельную, то вряд ли бы заметил разницу. А ещё мы скопировали их сообщение об ошибке. Так мы могли получить логин и пароль, а потом сразу перекинуть пользователя на реальный сайт. Для него всё выглядело так, словно он просто опечатался. Он вбивал пароль еще раз, уже на настоящем сайте, и все работало. Никаких тревожных звоночков. Никаких обращений в саппорт.

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

Запустили фишинговую кампанию.
Результаты не заставили себя ждать. Уже за первый час собрали приличный урожай. К вечеру 14 человек слили нам свои логины и пароли. Некоторые даже по несколько раз — редирект на реальный сайт убеждал их, что они просто с первого раза неправильно ввели пароль.
Никто ни о чем не сообщил. Ни один алерт не сработал. К ужину у нас на руках были доступы от трети всей компании.
Через 48 часов свернули фишинговый сайт, данные сохранили на отдельный носитель и передали клиенту вместе с финальным отчетом. Но результат был налицо.
Одно письмо. Один поддельный сайт-копирка. Четырнадцать учёток. И ноль подозрений.

Этап 7: Ещё один звонок
К этому моменту мы уже добились большего, чем от нас ожидали.
Взломали компьютер гендира, завладели правами администратора домена и собрали учётки у доброй половины компании. Но была еще одна идейка, которую хотелось попробовать.
А именно, клиент хотел знать: что будет, если кто-то позвонит в компанию и прикинется сотрудником? Можно ли по одному только голосу в трубке получить доступ, вообще не трогая клавиатуру?
Мы наметили подходящую точку входа: портал для сотрудников на выезде.
Еще во время первичного сбора информации нашли старую страницу входа для них. Она была зарыта где-то в недрах публичного сайта, на отдельном субдомене, и жила своей жизнью отдельно от основного портала компании. Никакой многофакторной аутентификации. Никаких современных защит. Просто базовая форма с полями для CID, логина и пароля.

Было ощущение, что про эту форму все давно забыли, так что она стала для нас идеальной целью.
Покопавшись в данных, собранных ранее, нашли настоящего выездного сотрудника. Он всплыл в каком-то старом документе, связанном с одним из клиентов. Теперь у нас было его имя, город, где он работает, и мы примерно понимали, чем он занимается.

Пора было звонить.
Набрали номер техподдержки и попросили кого-нибудь, кто может помочь с доступом к порталу. Нам ответил парень с ресепшена. Очень вежливый и терпеливый. Я представился Джимом, выездным представителем компании, и пожаловался, что не могу залогиниться. Сказал, что уже всё перепробовал: и CID, и логин, и пароль. Ничего не помогло.
После чего как бы между делом поинтересовался: «А можешь просто подтвердить мой CID и, типа, имя пользователя? Уже сто раз их вводил, наверняка где-то косячу».
Ни тени сомнения. Он без колебаний назвал мне оба.
А потом добавил то, чего мы никак не ожидали.
«Ты, наверное, просто пароль не тот вводишь. Хочешь, сброшу? Или прямо так продиктовать?»
Я на секунду замолчал, чисто чтобы повисла пауза.
И он его продиктовал!
И вот так у нас на руках оказалась рабочая учётка от рабочего портала. Вся легенда — это задолбавшийся пользователь. Никаких проверок документов. Никаких перезвонов. Просто сердобольный сотрудник, который думал, что помогает.

Мы проверили, что учётка рабочая, и занесли все данные в отчет.
Этот звонок, как и вся наша работа, доказал одну простую вещь. Чтобы взломать систему, сложные технические эксплойты не нужны. Нужен лишь голос, которому верят, проблема, которая всем знакома, и удачный момент, когда никто не смотрит слишком пристально.
Подведение итогов: почему это сработало
Всё началось с простого вопроса: «Реально ли сюда залезть?».
Оказалось, реально. Но главный вопрос — «Как так вышло?». А вышло так не из-за технической уязвимости, не из-за криво настроенного файрвола или забытой заплатки. Нет, всё дело было в людях, порядках и предположениях.
Буквально за пару дней мы получили доступ к компьютеру генерального директора с помощью обычного звонка и поддельного Excel-файла. Вытащили его учетные данные, получили права администратора на нескольких системах и поднялись до администратора домена, просто идя по следу из паролей и бесконтрольного доступа. С помощью фишинга, который полностью копировал настоящий сайт для входа, заполучили 14 логинов и паролей. А действующий доступ к рабочему порталу «полевых агентов» получили всего за один звонок, просто притворившись таким агентом.
Без навороченных эксплойтов. Без вирусов и малвари. Без сканирования. Без брутфорса.
Каждый наш удачный шаг в этом деле держался на трех китах: доверие, рутина и пофигизм.
Директор кликнул на файл просто по привычке. Работники вбивали свои учетные данные, потому что форма входа была один-в-один как настоящая. Парень из поддержки слил пароль, пото��у что я звучал убедительно и нёс правдоподобную дичь. И это не какие-то исключения из правил — это обычные будни обычной компании.
Опасными их сделало то, что никто ничего не проверял.
Заказчик серьезно отнесся к результатам нашей кампании. Они прогнали ключевых сотрудников через переобучение, переписали внутренние правила и прикрыли дыры в системах, которые слишком долго оставались незащищенными. Для нас же это стало очередным напоминанием, что в безопасности самое трудное — не найти уязвимость, а убедить людей, что они уязвимы, прежде чем кто-то другой на практике докажет им это — с печальными последствиями.
FAQ: об этом задании
Какой инструмент вы использовали для создания пейлоада?
Мы использовали VBA-макрос, встроенный в файл Excel, для запуска shell-соединения. Оно поднималось через порт 443 на наш listener.
Сработает ли такой трюк с макросом сегодня?
Уже нет. Microsoft теперь по умолчанию отключает макросы в скачанных файлах. В большинстве нормальных систем такое не прокатит, если только пользователь сам все не включит, пройдя через кучу подтверждений. Сейчас пришлось бы придумывать что-то новое, чтобы обойти современные защиты.
Генеральный директор в итоге узнал обо всём?
Нет. Работы проводились конфиденциально при внутренней координации со стороны клиента. Ему никогда не сообщали подробности напрямую.
Сколько времени прошло с первого звонка до получения прав администратора домена?
Менее недели от начала до конца. Первичный доступ мы получили за 48 часов. На горизонтальное перемещение и повышение привилегий ушла еще пара дней.
Что могло бы предотвратить эту атаку?
Обучение пользователей. Надлежащий контроль за правами администраторов. Мониторинг эндпоинтов. И, что наиболее важно, культура безопасности, в которой сотрудники приучены проверять даже самые правдоподобные запросы.
P. S.
Читайте также в нашем блоге:
