Добавление треккера к письму
Иногда бывает полезным собрать статистику по рассылке. До текущего момента о факте открытия письма мы узнавали только в случае перехода пользователя по предложенной ссылке. Попробуем внедрить в тело HTML маячок, который будет срабатывать в момент открытия Email-сообщения.
Классическим вариантом сигнализации, информирующей об открытии письма, является добавление пиксельной или же вовсе невидимой картинки в тело HTML-сообщения. В момент отображения содержимого в почтовом клиенте происходит отправка GET-запроса на получение изображения, что фиксируется фишинговым сервером и интерпретируется как факт открытия. Все бы ничего, но SMTP-серверы, настроенные на борьбу со спамом, с высокой долей вероятности отправят письма с подобными картинками в лучшем случае в Спам, а в худшем – не примут их вовсе.
Что же делать, как же быть? Вспомним про подходы к правильному оформлению HTML-версий Email-сообщений, где сказано, что необходимо отдавать предпочтение внутренним стилям HTML-элементов страницы. А что если попробовать указать в качестве фона блока BODY не градиент, а фоновое изображение? Пробуем.
В качестве треккера выступит URL-адрес с которого почтовый клиент адресата в момент отрисовки письма попытается скачать фоновое изображение с подконтрольного нами сервера. Клонируем HTML-версию шаблона и в теге BODY вносим незначительные изменения.
Классическим вариантом сигнализации, информирующей об открытии письма, является добавление пиксельной или же вовсе невидимой картинки в тело HTML-сообщения. В момент отображения содержимого в почтовом клиенте происходит отправка GET-запроса на получение изображения, что фиксируется фишинговым сервером и интерпретируется как факт открытия. Все бы ничего, но SMTP-серверы, настроенные на борьбу со спамом, с высокой долей вероятности отправят письма с подобными картинками в лучшем случае в Спам, а в худшем – не примут их вовсе.
Что же делать, как же быть? Вспомним про подходы к правильному оформлению HTML-версий Email-сообщений, где сказано, что необходимо отдавать предпочтение внутренним стилям HTML-элементов страницы. А что если попробовать указать в качестве фона блока BODY не градиент, а фоновое изображение? Пробуем.
В качестве треккера выступит URL-адрес с которого почтовый клиент адресата в момент отрисовки письма попытается скачать фоновое изображение с подконтрольного нами сервера. Клонируем HTML-версию шаблона и в теге BODY вносим незначительные изменения.
Редактирование открывающего тега BODY
<body style="margin: 0; padding: 0; background-
image:url('{{.BaseURL}}/track?rid={{.RId}}')">Запуск четвертой кампании и проверяем очередной почтовый ящик в сервисе Яндекс Почта (Рисунок 6).
Как видим, сообщение успешно доставлено в папку Входящие. При этом после открытия письма мы получаем сигнал даже в том случае, если пользователь не перешел по ссылке на фишинговый сайт.
Шаблон WEB-страницы
А ведь действительно, какая рыбалка без хорошей фишинговой страницы? Именно, после того как составили почтовое сообщение, важно удержать внимание пользователя и не отпугнуть подозрительно оформленной веб-страницей. В идеале она должна быть знакома адресату и практически неотличима от оригинала. Сейчас этим как раз и займемся.
Для создания фишинговой страницы в GoPhish предусмотрен раздел Landing Pages (Рисунок 1).
Для создания фишинговой страницы в GoPhish предусмотрен раздел Landing Pages (Рисунок 1).
Указываем название шаблона и вставляем HTML-код страницы в соответствующие места (Рисунок 2). Если хотим захватить аутентификационные данные, то не забываем установить галочку напротив Capture Submitted Data.
Фреймворк GoPhish при формировании шаблона фишинговой страницы позволяет ссылаться на различные статические компоненты (CSS, JS, PNG, ICO, Fonts и т.д.). Для этого необходимо предварительно сохранить их в домашнем каталоге GoPhish (в нашем случае – /home/gophish/gophish/static/endpoint). Далее к ним становится возможно обращаться по URL-адресу вида: https://gophish.fun/static/backgroung.png.
Фреймворк GoPhish при формировании шаблона фишинговой страницы позволяет ссылаться на различные статические компоненты (CSS, JS, PNG, ICO, Fonts и т.д.). Для этого необходимо предварительно сохранить их в домашнем каталоге GoPhish (в нашем случае – /home/gophish/gophish/static/endpoint). Далее к ним становится возможно обращаться по URL-адресу вида: https://gophish.fun/static/backgroung.png.
Целеполагание
В качестве оригинала возьмем логинку пентестерского личного кабинета ScanFactory – https://pentest.sf-cloud.ru/. При попытке доступа попадаем на единое окно входа Keycloak, где как раз предлагается ввести логин и пароль (Рисунок 3).
Сохранение веб-страницы
Начнем, пожалуй, с сохранения исходного кода страницы и всех статических элементов в локальную директорию. Для этого правой кнопкой мыши, сохранить как, веб-страница полностью и указываем путь. Переходим к загрузкам (Рисунок 4). Нам доступен код HTML-страницы и ряд дополнительных компонент (CSS и несколько JS-файлов). Сразу можно обратить внимание, что в каталоге присутствуют файлы с одинаковым именем (patternfly.min.css) и неверно заданы расширения для JS-файлов (Рисунок 5).
Перед тем как начать исправлять ошибки откроем сохраненный HTML-файл и убедимся в том, что внешний вид страницы авторизации сильно отличается от оригинала (Рисунок 6).
Минимальное сходство есть, не стоит отчаиваться – приступаем к исправлению ситуации. Одним из этапов приведения внешнего вида фишинговой страницы к ее оригинальному состоянию, является отыскание относительных путей, для всех статических элементов (CSS, JS, Fonts и т.д.) и их замена на подконтрольный URL-адрес (в нашем случае – https://gophish.fun/static). Параллельно будем догружать недостающие файлы на VPS в каталог /home/gophish/gophish/static/endpoint.
Исправляем код страницы (Sign in to factory.html)
Начнем с основного HTML-файла Sign in to factory.html – открываем с помощью любого привычного текстового редактора. Для упрощения поиска необходимых строк и их последующей замены, далее в примере будет использоваться Notepad++.
В блоке HEAD в теге LINK наблюдаем ссылки, содержащие относительные пути к ранее загруженным файлам CSS. В тегах SCRIPT то же самое, но с JS-файлами (в двух местах, строки 16 и 82).
Переименуем задублированные файлы, поправим расширения (Рисунок 7). После скопируем их на сервер gophish.fun по пути /home/gophish/gophish/static/endpoint.
В блоке HEAD в теге LINK наблюдаем ссылки, содержащие относительные пути к ранее загруженным файлам CSS. В тегах SCRIPT то же самое, но с JS-файлами (в двух местах, строки 16 и 82).
Переименуем задублированные файлы, поправим расширения (Рисунок 7). После скопируем их на сервер gophish.fun по пути /home/gophish/gophish/static/endpoint.
Теперь в файле Sign into factory.html произведем замену всех относительных путей на соответствующие URL-адреса (Рисунок 8). Для чистоты эксперимента давайте также поступим со строкой 10. Сохраним иконку favicon.ico локально и изменим атрибут HREF тега LINK на https://gophsih.fun/static/favicon.ico.
Переходим к административной панели GoPhish и создаем новый шаблон на вкладке Landing Pages. Содержимое модифицированного файла Sign in to factory.html вставляем в область HTML и сохраняем (Рисунок 9).
Для наглядного отображения вносимых изменений в веб-шаблон можно создать тестовую кампанию и отправить ссылку самому себе (Рисунок 10). Как не трудно заметить сильно лучше не стало, но ведь это только начало!
Рекурсия (пример с login.css)
Чтобы страница авторизации стала похожа на оригинал, необходимо рекурсивно пройтись по всем сохраненным файлам и проделать уже знакомые действия – определить места обращения к различным компонентам и заменить относительные пути на URL-адрес фишингово сайта. Ну и не забудем загрузить все недостающие элементы в каталог
/home/gophish/gophish/static/endpoint.
Разберем на примере файла login.css. Для остальных процесс аналогичен, однако требует внимательности и терпения. Пробуем найти вхождение подстрок вида: «./», «../», «url», «href», а также определить места обращения к внешним элементам по абсолютным или относительным путям. В данном случае таким мест два, строки 9 и 84 (Рисунок 11).
/home/gophish/gophish/static/endpoint.
Разберем на примере файла login.css. Для остальных процесс аналогичен, однако требует внимательности и терпения. Пробуем найти вхождение подстрок вида: «./», «../», «url», «href», а также определить места обращения к внешним элементам по абсолютным или относительным путям. В данном случае таким мест два, строки 9 и 84 (Рисунок 11).
Что здесь происходит? В момент отображения веб-страницы идет попытка загрузки фонового изображения keycloak-bg.png из директории ../img относительно расположения файла login.css. Таким образом, необходимо определить URL для login.css и уже относительно него сместиться к каталогу с фоновым изображением. Идем к оригиналу веб-страницы и смотрим откуда загружается login.css (Рисунок 12).
Файл login.css доступен по адресу https://auth.sf-cloud.ru/resources/8pqie/login/keycloak/css/login.css. Следовательно, чтобы сохранить фоновое изображение необходимо обратиться к https://auth.sf-cloud.ru/resources/8pqie/login/keycloak/img/keycloak-bg.png.
Сохраняем картинку в /home/gophish/gophish/static/endpoint, меняем URL в login.css на https://gophi
Сохраняем картинку в /home/gophish/gophish/static/endpoint, меняем URL в login.css на https://gophi
Успех – стало лучше, но еще необходимо скорректировать шрифты, некоторые отступы и кое-что еще. Продолжаем не спеша исправлять ссылки на внешние компоненты во всех доступных файлах и останавливаемся на той степени похожести, которая нас удовлетворит.
# Добавление шрифтов (пример с patternfly.mic.css)
Что по печатным символам? В файле patternfly.min.css обнаружено некоторое количество ссылок на загрузку внешних шрифтов (Рисунок 15). Будем так любезны их все загрузить в уже хорошо знакомый каталог /home/gophish/gophish/static/endpoint и заменить относительные пути на соответствующие URL-адреса.
Все также через исходный код страницы оригинала определяем URL-адрес к файлу patternfly.min.css – https://auth.sf-cloud.ru/resources/8pqie/common/keycloak/node_modules/@patternfly/patternfly/patternfly.min.css (Рисунок 16).
Интересующие шрифты находятся в подкаталогах вида: https://auth.sf-cloud.ru/resources/8pqie/common/keycloak/node_modules/@patternfly/patternfly/assets/fonts/RedHatDisplay/RedHatDisplay-Regular.woff2. (Рисунок 17, на два уровня выше относительно домашней директории patternfly.min.css).
Согласен. Ручками все это делать весьма и весьма утомительно. Да и тем более, чем больше ручного труда, тем выше шансы промахнуться. Для упрощения задачи откроем
patternfly.min.css с помощью Notepad++ и воспользуемся плагином JSTool.
Если в текстовом редакторе отсутствует JSTool, то через Плагины – Управление Плагинами находим его и устанавливаем.
Сейчас необходимо привести patternfly.min.css из однострочного вида к человеко-читаемому (временно). Выделяем весь текст, Плагины, JSTool, JSFormat (Рисунок 18).
patternfly.min.css с помощью Notepad++ и воспользуемся плагином JSTool.
Если в текстовом редакторе отсутствует JSTool, то через Плагины – Управление Плагинами находим его и устанавливаем.
Сейчас необходимо привести patternfly.min.css из однострочного вида к человеко-читаемому (временно). Выделяем весь текст, Плагины, JSTool, JSFormat (Рисунок 18).
Теперь найдем все строки с вхождением «url(» и пометим их закладкой (Рисунок 19). Таких оказалось 88, но не все из них подгружают локальные компоненты.
Далее выделенные строки копируем в отдельное окно – Поиск, Закладки, Копировать все строки с закладкой (Рисунок 20).
Вставляем данные в новый файл, очищаем от дубляжей и лишних символов, оставляя только пути до уникальных файлов (Рисунок 21).
Заменим лишние пробелы между словами и добавим в начало каждой строки URL-адрес https://auth.sf-cloud.ru/resources/8pqie/common/keycloak/node_modules/@patternfly/patternfly/. В конечном итоге получаем список из 79 уникальных ссылок на загрузку веб-шрифтов. Сохраним файл и перенесем на сервер gophish.fun во временный каталог /home/gophish/gophish/temp.
В автоматизации процесса нас выручит утилита wget, позволяющая запрашивать URL-адреса, записанные в файле. То, что нужно – переходим в каталог /home/gophish/gophish/static/endpoint и выполняем команду на загрузку файлов.
Листинг 1.
wget -i /home/gophish/gophish/temp/links.txtСкачать скачали. Не забываем теперь изменить все относительные пути в patternfly.min.css на внешние вида: https://gophish.fun/static/<веб-шрифт>, после чего возвращаем CSS-файл к однострочному виду.
Долго ли, коротко ли, но мы загрузили все компоненты и готовы увидеть результат (Рисунок 22). Уже значительно лучше, но здесь мы сталкиваемся с задачкой на внимательность – найди 10 отличий. Одно точно явно бросается в глаза и это значок скрытия и раскрытия вводимого пароля.
Долго ли, коротко ли, но мы загрузили все компоненты и готовы увидеть результат (Рисунок 22). Уже значительно лучше, но здесь мы сталкиваемся с задачкой на внимательность – найди 10 отличий. Одно точно явно бросается в глаза и это значок скрытия и раскрытия вводимого пароля.
Вижу – не вижу (стили для шрифта font-awesome.min)
По какой-то причине не подтянулись стили для шрифта font-awesome.min, но не беда. Добавим в заголовок HEAD еще один тег LINK.
Пример тега LINK для загрузки внешнего стиля на фишинговую веб-страницу
<link rel="stylesheet" href=" https://cdnjs.cloudflare.com/ajax/libs/font-
awesome/4.7.0/css/font-awesome.min.css"/>Успех неизбежен, пересохраним шаблон и обновим страницу. Как результат, получаем точную копию оригинальной веб-формы авторизации в экземпляре Keycloak (Рисунок 23).
Функциональность (мне нужны твои пароли)
Все отлично, мы добились максимальной внешней схожести фишинговой веб-страницы с ее оригинальной версией. Однако одной лишь визуальной составляющей недостаточно. Нужна еще функциональность, чтобы иметь возможность принять пароли пользователя после того, как он нажмет на кнопку «Sign In».
В очередной раз возвращаемся к HTML-версии фишингово сайта и находим форму отправки данных на сервер (Рисунок 24).
В очередной раз возвращаемся к HTML-версии фишингово сайта и находим форму отправки данных на сервер (Рисунок 24).
Здесь обратим внимание на интерактивные HTML-элементы. Для успешного приема данных из формы, необходимо, чтобы поле с именем пользователя содержало атрибут NAME со значением USERNAME, а поле ввода пароля со значением PASSWORD. Последним должен быть тег INPUT с атрибутом TYPE и значением SUBMIT.
Вносим изменения в подготавливаемый шаблон на вкладке Landing Pages и не забываем установить галочки для приема аутентификационных данных (Рисунок 25), указывая URL-адрес для редиректа пользователя (для примера, отправим его на оригинальную страничку аутентификации).
Вносим изменения в подготавливаемый шаблон на вкладке Landing Pages и не забываем установить галочки для приема аутентификационных данных (Рисунок 25), указывая URL-адрес для редиректа пользователя (для примера, отправим его на оригинальную страничку аутентификации).
Создаем новую кампанию, переходим по ссылке и проверяем наличие перехваченного пароля (Рисунок 26, 27)!
Успех!
Заключение
Пора заканчивать и подводить итоги. Предшествующий цикл статей детально рассмотрел этапы подготовки инфраструктуры для проведения реалистичных тестов на проникновение с использованием GoPhish. Мы последовательно прошли путь от установки и настройки фреймворка на виртуальном выделенном сервере до создания убедительных фишинговых кампаний.
Тщательная настройка почтового сервера позволили увеличить шансы доставки фишинговых писем в почтовые ящики целевой аудитории. Отдельно рассмотрели и применили техники оформления Email-сообщений, которые минимизируют вероятность их обнаружения спам-фильтрами.
Созданный шаблон веб-страницы авторизации, визуально неотличимый от оригинальной версии, значительно повышает шансы на успешный сбор учетных данных пользователей, а развернутый стенд продемонстрировал работоспособность всех компонентов системы, подтверждая возможность проведения эффективных и контролируемых тестов на проникновение.
Важно подчеркнуть, что все описанные методы должны использоваться исключительно в целях повышения осведомленности в области кибербезопасности и тестирования на проникновение с предварительного согласия тестируемой организации. Несанкционированное использование изложенных подходов в злонамеренных целях является незаконным и аморальным.
Имея в своем распоряжении подготовленную инфраструктуру, команды по кибербезопасности могут проводить реалистичные фишинговые кампании, оценивать уровень осведомленности сотрудников и выявлять слабые места в системе защиты.
Полученные результаты позволяют разработать программы обучения и внедрить необходимые меры для повышения устойчивости организации к атакам социальной направленности. Правильное и ответственное использование полученных знаний поможет организациям укрепить свою кибербезопасность и защитить себя от реальных угроз.
Тщательная настройка почтового сервера позволили увеличить шансы доставки фишинговых писем в почтовые ящики целевой аудитории. Отдельно рассмотрели и применили техники оформления Email-сообщений, которые минимизируют вероятность их обнаружения спам-фильтрами.
Созданный шаблон веб-страницы авторизации, визуально неотличимый от оригинальной версии, значительно повышает шансы на успешный сбор учетных данных пользователей, а развернутый стенд продемонстрировал работоспособность всех компонентов системы, подтверждая возможность проведения эффективных и контролируемых тестов на проникновение.
Важно подчеркнуть, что все описанные методы должны использоваться исключительно в целях повышения осведомленности в области кибербезопасности и тестирования на проникновение с предварительного согласия тестируемой организации. Несанкционированное использование изложенных подходов в злонамеренных целях является незаконным и аморальным.
Имея в своем распоряжении подготовленную инфраструктуру, команды по кибербезопасности могут проводить реалистичные фишинговые кампании, оценивать уровень осведомленности сотрудников и выявлять слабые места в системе защиты.
Полученные результаты позволяют разработать программы обучения и внедрить необходимые меры для повышения устойчивости организации к атакам социальной направленности. Правильное и ответственное использование полученных знаний поможет организациям укрепить свою кибербезопасность и защитить себя от реальных угроз.