Блог

Гайд по GoPhish - часть 2

Экспертные материалы

Административная панель GoPhish

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

Вспоминаем, административная панель доступна по протоколу HTTPS (TCP-порт – 16000) на loopback-интерфейсе виртуального сервера gophish.fun. Устанавливаем соединение с VPN и через SSH-туннель подключаемся к веб-интерфейсу фреймворка (Рисунок 1).
Листинг 1.
openvpn --config conf.ovpn
Листинг 2.
ssh –L 8000:127.0.0.1:16000 root@10.8.0.1
Аутентификационные данные для доступа к административной панели GoPhish автоматически генерируются в момент установки фреймворка. Для их получения необходимо обратиться к журналу событий, указанному в конфигурационном файле. После успешной авторизации GoPhish предложит изменить пароль пользователю admin.

Sending Profiles

Первое с чего начнем – укажем экземпляру GoPhish реквизиты SMTP-сервера ретрансляции почтовых сообщений. Для этих целей предусмотрена вкладка Sending Profiles (Рисунок 2).
В качестве отправителя зададим произвольный адрес из домена gophish.fun. Это важно для того, чтобы пройти SPF-проверку на стороне SMTP-сервера получателя. Экземпляр Postfix, выступающий в роли ретранслятора почты, доступен анонимному пользователю по адресу 127.0.0.1 (25/TCP). Дополнительных заголовков исходящим Email-сообщений не требуется, сохраняем профиль.

Landing Pages

Следующим шагом предстоит создать шаблон веб-формы авторизации для захвата пользовательских аутентификационных данных. Оформление фишинговых страниц происходит на вкладке Landing Pages (Рисунок 3).
Процесс подготовки фишинговых страниц будет рассмотрен отдельно. Сейчас для демонстрации работоспособности связки GoPhish и Postfix возьмем HTML-код с формой отправки данных, содержащей поля ввода логина и пароля (Рисунок 4).
Пример HTML-страницы авторизации
<!DOCTYPE html><html><head>
<title>Login</title>
<style type="text/css">body {
font-family: sans-serif;
background-color: #f4f4f4;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
}
.login-container {
background-color: #fff;
padding: 20px;
border-radius: 8px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
width: 300px;
text-align: center;
}
.form-group {
margin-bottom: 15px;
text-align: left;
}
label {
display: block;
font-weight: bold;
margin-bottom: 5px;
}
input[type="text"],
input[type="password"] {
width: 100%;
padding: 8px;
border: 1px solid #ccc;
border-radius: 4px;
box-sizing: border-box;
}
button {
background-color: #4CAF50;
color: white;
padding: 10px 15px;
border: none;
border-radius: 4px;
cursor: pointer;
}
button:hover {
background-color: #3e8e41;
}
</style>
</head>
<body>
<div class="login-container">
<h2>Login</h2>
<form action="" method="post">
<div class="form-group"><label for="username">Username:</label> <input
id="username" name="username" required="" type="text"/></div>
<div class="form-group"><label for="password">Password:</label> <input
id="password" name="password" required="" type="password"/></div>
<button type="submit">Login</button></form>
</div>
</body></html>
Если в рамках фишинговой кампании захват пользовательских данных не требуется, то перед сохранением шаблона необходимо снять галочки с соответствующих полей. Последним настраиваемым параметром является URL для перенаправления жертвы после приема POST-запроса с формы.

Email Templates

О шаблонах почтовых сообщений ожидается отдельная статья. Пока же ограничимся созданием простого текстового письма в разделе Email Templates (Рисунок 5).

Users and Groups

Для формирования списка рассылки перейдем на вкладку Users & Groups. GoPhish позволяет импортировать данные из CSV-файлов, но в случае небольшой фокус-группы быстрее воспользоваться ручным вводом данных (Рисунок 6).
При добавлении пользователя не лишним будет указать его имя, фамилию и занимаемую должность (если конечно мы обладаем такой информацией). Это можно использовать для персонализации почтовых сообщений и фишинговых веб-страниц.

Campaigns

Почти готово, осталось собрать все созданные сущности в одной фишинговой кампании. Переходим на вкладку Campaigns и из выпадающих списков выбираем ранее подготовленные шаблоны почтового сообщения и фишинговой страницы. Задаем URL-адрес gophish.fun, SMTP-сервер для отправки и список получателей (Рисунок 7).
После запуска кампании проверяем входящую почту тестового ящика (Рисунок 8) и собранную статистику на соответствующей вкладке (Рисунок 9).

Повышаем доверие к SMTP-серверу

Успех эксперимента с фишинговой рассылкой во многом зависит от доверия SMTP-сервера получателя к отправляемому GoPhish почтовому сообщению. Чем выше
вероятность оказаться в спаме, тем меньше шансов завладеть аутентификационными данными пользователей. Наша цель – попасть в папку Входящие конечного адресата. Доверие к почтовику отправителя складывается из множества параметров.

Ниже по порядку постараемся их сконфигурировать, а в конце посмотрим, к чему это приведет.

Добавление PTR-записи

Первое с чего начнем – добавление PTR-записи виртуальному серверу gophish.fun. Авторизуемся на RUVDS, переходим в личный кабинет на вкладку доступных виртуальных серверов и далее в раздел Сеть (Рисунок 1). Если в момент конфигурирования VPS RUVDS не навесил стандартный тариф, то вносим изменения в PTR-запись (Рисунок 2).
Укажем соответствие внешнему IP-адресу VPS доменное имя gophish.fun (Рисунок 3).
Нажимаем Применить, через некоторое время изменения вступят в силу. На этом настройка PTR-записи завершена.

Добавление MX-записи

Что за почтовик без MX-записи? Правильно, следующим шагом настроим именно её для домена gophish.fun. Все из того же личного кабинета RUVDS перейдем на вкладку ДоменыРедактировать DNS-записи (Рисунок 4).
В раскрывшемся окне выбираем добавить запись типа MX. В качестве имени хоста укажем символ @ (представляет собой имя домена, для которого делается запись – в нашем случае gophish.fun), адрес почтового сервера – gophish.fun с приоритетом по-умолчанию 10 (Рисунок 5).
Мы успешно добавили MX-запись. Переходим к следующему шагу.

Добавление SPF-записи

Не покидая раздел Редактирования DNS-записей добавим SPF-запись. Sender Policy Framework – представляет собой TXT-запись со списком IP-адресов и доменов, имеющих право отправки Email-сообщений от имени почтового сервера gophish.fun (Рисунок 6).
Что здесь происходит? Разрешить отправку почты для сервера:

  • указанного в A-записи домена;
  • указанного в MX-записи домена;
  • с IP-адресом 194.87.103.2.

Все остальные, пытающиеся отправить почту от имени gophish.fun, не авторизованы, и почтовые серверы, выполняющие SPF-проверку, должны отклонять такие письма.

Настройка DKIM

DomainKeys Identified Mail для Postfix – важный шаг при повышении доверия к SMTP-серверу. DKIM добавляет цифровую подпись исходящим сообщениям, позволяя получателям проверить, что они действительно отправлены с указанного домена и не изменены по пути.

Существует несколько способов настроить DKIM. Наиболее популярное и надёжное решение реализации цифровой подписи – OpenDKIM. Начнем с обновления списка пакетов его установки.
Листинг 1.
sudo apt-get update
sudo apt-get install opendkim opendkim-tools
Создаём каталог для хранения ключей DKIM и перейдя в /etc/dkimkey генерируем необходимые файлы.
Листинг 2.
sudo mkdir /etc/dkimkeys
sudo chown opendkim:opendkim /etc/dkimkeys
sudo chmod 700 /etc/dkimkeys
Листинг 3.
sudo opendkim-genkey -r -d gophish.fun -s mail -t
sudo chown opendkim:opendkim /etc/dkimkeys/mail.private
sudo chmod 600 /etc/dkimkeys/mail.private
Разберемся с тем, что делает opendkim-genkey:

  • r – создает файл revocation.txt для возможного отзыва ключа;
  • d – домен, для которого генерируются ключи;
  • s – селектор, идентифицирующий различные ключи DKIM одного домена (обычно mail,но можно выбрать любое имя);
  • t – отключает вывод в stdout (полезно для автоматизации).

В результате получаем два файла:

  • /etc/dkimkeys/mail.private – приватный ключ (храним в безопасности);
  • /etc/dkimkeys/mail.txt – публичный ключ (добавляется в качестве еще одной DNS-записи для виртуального сервера).

Настройка публичного ключа DKIM для VPS будет происходить по аналогии с предыдущим шагом по добавлению SPF-записи. Однако вначале обратимся к содержимому файла mail.txt (Рисунок 7).
Извлекаем данные из круглых скобок, удаляем кавычки и только после переходим к созданию TXT-записи в личном кабинете RUVDS. В качестве имени указываем –mail._domainkey.gophish.fun, в качестве значения – очищенные строки из mail.txt (Рисунок 8).
Идем дальше и вносим изменения в конфигурационный файл /etc/opendkim.conf.
Найдем и изменим, или добавим следующие строки:

  • Syslog – включает логирование в syslog;
  • SyslogSuccess – включает логирование успешных подписей;
  • LogWhy – добавляет дополнительную информацию в журнал событий;
  • UserID – указывает пользователя и группу, от имени которых работает OpenDKIM;
  • Socket – указывает сокет, используемый Postfix для связи с OpenDKIM;
  • KeyTable – указывает файл, содержащий информацию о приватных ключах DKIM;
  • SigningTable – указывает файл, содержащий правила подписи;
  • ExternalIgnoreList – указывает список хостов, для которых не нужно проверять DKIM;
  • InternalHosts – указывает список хостов, для которых нужно подписывать почту;
  • OversignHeaders – указывает заголовки, которые всегда должны быть подписаны;
  • RequireSafeKeys – указывает, что приватные ключи должны быть доступны только пользователю opendkim.
Параметры к изменению в opendkim.conf
Syslog yes
SyslogSuccess yes
LogWhy yes
UserID opendkim:opendkim
Socket inet:8891@localhost
KeyTable refile:/etc/dkimkeys/KeyTable
SigningTable refile:/etc/dkimkeys/SigningTable
46
ExternalIgnoreList refile:/etc/dkimkeys/TrustedHosts
InternalHosts refile:/etc/dkimkeys/InternalHosts
OversignHeaders From,Sender,Reply-To,Cc,Subject,Date
RequireSafeKeys Yes
Свяжем селектор (mail), домен (gophish.fun) и путь к приватному ключу. Создадим файл /etc/dkimkeys/KeyTable.
Листинг 4.
sudo touch /etc/dkimkeys/KeyTable
sudo echo "mail._domainkey.gophish.fun
gophish.fun:mail:/etc/dkimkeys/mail.private" > /etc/dkimkeys/KeyTable
sudo chown opendkim:opendkim /etc/dkimkeys/KeyTable
sudo chmod 640 /etc/dkimkeys/KeyTable
Укажем, что вся исходящая почта с домена gophish.fun, должна быть подписана.
Создадим файл /etc/dkimkeys/SigningTable.
Листинг 5.
sudo touch /etc/dkimkeys/SigningTable
sudo echo "@gophish.fun mail._domainkey.gophish.fun" >
/etc/dkimkeys/SigningTable
sudo echo "*@gophish.fun mail._domainkey.gophish.fun" >>
/etc/dkimkeys/SigningTable
sudo chown opendkim:opendkim /etc/dkimkeys/SigningTable
sudo chmod 640 /etc/dkimkeys/SigningTable
Теперь определим хосты, для которых OpenDKIM будет подписывать почту.
Создадим файл /etc/dkimkeys/TrustedHosts.
Листинг 6.
sudo touch /etc/dkimkeys/TrustedHosts
sudo echo "127.0.0.1" > /etc/dkimkeys/TrustedHosts
sudo echo "localhost" >> /etc/dkimkeys/TrustedHosts
sudo echo "*.gophish.fun" >> /etc/dkimkeys/TrustedHosts
sudo chown opendkim:opendkim /etc/dkimkeys/TrustedHosts
sudo chmod 640 /etc/dkimkeys/TrustedHost
Предпоследним шагом внесём изменения в конфигурационный файл Postfix /etc/postfix/main.cf и свяжем почтовик с экземпляром OpenDKIM. В конец файла добавим следующие строки:

  • milter_default_actionPostfix должен принимать почту, даже если не удается связаться с milter (OpenDKIM);
  • milter_protocol – указывает используемый протокол milter;
  • smtpd_miltersOpenDKIM доступен через TCP-сокет на 127.0.0.1:8891;
  • non_smtpd_milters – указывает milter для не SMTP соединений.
Параметры к добавлению в main.cf
milter_default_action = accept
milter_protocol = 2
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891
Перезапускаем экземпляры OpenDKIM и Postfix. Настройка DKIM завершена!
Листинг 7.
sudo systemctl restart opendkim
sudo systemctl restart postfix

Настройка DMARC

Запись для DMARC настраивается после SPF и DKIM. Когда почтовый сервер адресата получает письмо, он проверяет его подлинность с помощью записей SPF и DKIM. Если письмо не проходит проверку, DMARC определяет, как поступить с таким сообщением, согласно заданной политике:

  • None – отправляются во Входящие;
  • Quarantine – помещаются в папку Спам;
  • Reject – отклоняются и не доставляются вовсе.

Ничего принципиально нового. В настройках DNS-записей VPS gophish.fun создадим TXT-запись с названием _dmark.gophish.fun (Рисунок 9).
Значение для записи dmarc.gophish.fun
_
v=DMARC1; p=quarantine; rua=mailto:rua@gophish.fun;
ruf=mailto:ruf@gophish.fun; adkim=r; aspf=r;
  • v – версия DMARC;
  • p – политика;
  • rua – адрес для агрегированных DMARC отчетов;
  • ruf – адрес, на который будут отправляться детализированные отчеты о сбоях;
  • adkim – указывает, как должен согласовываться DKIM (r, relaxed – разрешает частичное соответствие; или s, strict – требует точного соответствия);
  • aspf – указывает, как должен согласовываться SPF.
Мы настроили DMARC. Поздравляю!

Настройка BIMI

Brand Indicators for Message Identification – параметр проверки письма, с помощью которого получатель видит напротив рассылки логотип бренда. Также BIMI помогает почтовому сервису правильно идентифицировать и пропустить письмо во входящие клиента.

Технически BIMI – текстовая DNS-запись, аналогичная DMARC, но дополнительно к этому понадобится логотип в формате SVG, удовлетворяющий требованиям:

  • формат – SVG Tiny Portable/Secure;
  • содержит только теги <svg>, <desc>, <title>, и <path>;
  • SVG не должен содержать JavaScript;
  • небольшой размер файла;
  • пропорции – квадратный логотип;
  • обязательно содержит тег <desc> с описанием логотипа;
  • логотип размещен на внешнем веб-сервере и доступен по HTTPS.
Пример содержимого SVG-файла с логотипом
<svg width="128" height="128" viewBox="0 0 128 128"
xmlns="http://www.w3.org/2000/svg">
<desc>Company logo showing a blue circle with a white star inside.</desc>
<title>gophish.fun</title>
<path d="M64 10 L10 118 L118 118 Z" fill="#007bff"/>
</svg>
Доступ по HTTPS любезно предоставит экземпляр GoPhish. Сохраним логотип в каталоге /home/gophish/gophish/static/endpoint (в этом каталоге будут размещаться внешние элементы такие как стили, шрифты и изображения, необходимые для корректного отображения фишинговых страниц).

Теперь логотип доступен по адресу: https://gophish.fun/static/logo.svg. Осталось правильно настроить DNS, создадим TXT-запись BIMI для виртуального сервера gophish.fun (Рисунок 10).
Пример TXT-записи BIMI
default._bimi.gophish.fun IN TXT "v=BIMI1; l=
https://gophish.fun/static/logo.svg; a=; "
  • v – версия BIMI;
  • l – URL SVG-логотипа (обязательно HTTPS);
  • a – URL VMC-сертификата в формате PEM (если VMC отсутствует, оставьте a=;).

Настройка TLS-RPT

TLS-RPT – протокол для отправки отчетов о проблемах, возникающих при установлении зашифрованных TLS-соединений в момент доставки электронной почты.

Как и в предыдущих подразделах, основная часть настройки TLS-RPT заключается в добавлении специальной TXT-записи _smtp._tls в DNS-зону домена gophish.fun (Рисунок 11). Тем самым происходит информирование почтовых серверов о том, куда отправлять отчеты о проблемах TLS.
Пример TXT-записи TLS-RPT
smtp.
tls.gophish.fun IN TXT "v=TLSRPTv1;rua=mailto:tls-rpt@gophish.fun"
  • v – версия протокола TLS-RPT;
  • rua – отчеты должны отправляться по электронной почте на указанный адрес.

Спам-оценка

Интересно узнать, а всё ли сделано правильно? Поэтому перед боевым тестированием на целевых адресах проведем спам-оценку SMTP-сервера, воспользовавшись бесплатными Интернет-площадками Unspam и Mail-Tester.

Mail-Tester предоставляет незарегистрированным пользователям несколько проверок в сутки, чего вполне достаточно. Заходим на сайт и копируем предложенный адрес почтового ящика (Рисунок 11).
С сервисом Unspam ситуация несколько иная. Вначале нужно пройти регистрацию, а уже после станет доступен адрес для отправки тестового Email-сообщения (Рисунок 12).
Далее потребуется создать тестовую кампанию на отправку писем спам-оценщикам. В админке GoPhish переходим на вкладку управления пользователями и добавляем набор из двух почтовых адресов (Рисунок 13).
С тем, кому GoPhish будет отправлять письма разобрались. Теперь создадим простой Email-шаблон (Рисунок 14). Укажем отправителя письма, тему и тело сообщения.
В обязательном порядке снимаем галочку с добавления треккинногово изображения.
Переходим на вкладку добавления фишинговой кампании, заполняем поля по образцу и отправляем письма на проверку (Рисунок 15).
Что же, результат на Mail-Tester вполне удовлетворительный (Рисунок 16). Подготовленное письмо успешно прошло большинство проверок, за исключением возраста домена и его TLD, про важность которого мы говорили еще в самом начале (Рисунок 17).
Кроме того, сервис спам-оценок выдает рекомендацию по улучшению письма – добавить дополнительное поле List-Unsubscribe к SMTP-заголовку (Рисунок 18).

Указанный параметр предоставляет клиенту адрес для отписки. Однако, в ходе тестов с его присутствием сообщения попадали в папку Рассылки, что в некотором смысле равносильно спаму. Таким образом, исходя из результатов тестов, мы можем смело проигнорировать данную рекомендацию и не вносить дополнительных изменений.
Ситуация с Unspam во многом аналогична (Рисунок 19) – это возраст домена и отсутствие возможности у получателя отписаться от рассылки (но мы то не маркетинговая кампания, если вы понимаете, о чем я). Также рекомендовано придерживаться лучших практики оформления HTML-версий сообщений (с этим еще предстоит разбираться) и не включать в тему письма нестандартные символы (Рисунок 20; дискриминация по языковому признаку, не иначе).

Шаблоны почтовых сообщений

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

Шингл – хеш-сумма от некоторого нормализованного «кусочка» письма: IP-адреса отправителя, почтового ящика отправителя, темы, ссылок и прочего. Интересную статью на эту тему опубликовала команда Яндекса.

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

Большая часть манипуляций будет проводиться из административной панели GoPhish во вкладке Email Templates.

Дети взрослеют (заготовки почтовых ящиков)

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

Забегая вперед скажу, что в рамках статьи нам потребуется всего четыре Email, однако в процессе задействованных ящиков было гораздо больше и в какой-то момент их наличие стало определенной проблемой.

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

В процессе работы над статьей мы обратили внимание на возможность заведения нескольких полноценных аккаунтов на один номер телефона. Сделать это можно перейдя в личный кабинет Яндекс ID. Скролим вниз до раздела Семья и добавляем себе ребенка (Рисунок 1).
Создаем детский профиль, выбираем аккаунт для входа (если в текущей сессии браузера несколько активных Яндекс ID), указываем имя и дату рождения. Здесь важно задать возраст ребенку больше 14 лет, пропустить всплывающее предупреждения и нажать кнопку Далее (Рисунок 2). Придумываем логин для входа в пока еще детский аккаунт и устанавливаем надежный пароль. Верифицируем себя по номеру телефона основного аккаунта (звонок или смс-сообщение).
Поздравляю, у вас сын (Рисунок 3) – мы создали детский аккаунт! Не закрываем окно, прокручиваем в самый конец и выбираем Сделать взрослым (Рисунок 4).
Копируем ссылку, открываем в режиме Инкогнито. Авторизуемся через имя учетной записи и соглашаемся стать взрослым (Рисунок 5).
С этого момента мы имеем полноценный аккаунт в сервисах Яндекс с собственным почтовым ящиком. После тестов его можно удалить и завести новый. Подобными манипуляциями регистрируем 4 адреса и переходим к оформлению первого шаблона (Рисунок 6).

Тестовый шаблон без HTML-разметки и подозрительных ссылок

Название шаблона задаем произвольное, оно служит для идентификации в экземпляре GoPhish. Получатель сообщения его не увидит.
Пример названия для шаблона Email-сообщения
1. Text version (text version of the Email without trackers and links)
GoPhish поддерживает возможность импорта данных для шаблона. Для этого нажмите кнопку Import Email и вставьте содержимое исходного письма. Обычно его можно найти через функцию «Просмотреть оригинал» практически во всех почтовых клиентах.

Зададим адрес электронной почты от имени которой осуществим рассылку писем. Притворимся менеджером отдела разработки программного обеспечения компании.
Пример почты отправителя для шаблона Email-сообщения
sdd.manager@gophish.fun
Не менее важно сформулировать убедительную тему письма, исключающую любые подозрения пользователя к полученному сообщению. Кроме того, это помогает рассылке обходить спам-фильтры, поскольку это один из факторов, проверяемых поставщиками электронных услуг. Если тема письма выглядит подозрительно, принимающий сервер блокирует письмо.

Так как по легенде мы разработчики софта, то, пожалуй, обновим кому-нибудь интерфейс.
Пример темы письма для шаблона Email-сообщения
Обновление пользовательского интерфейса
Придерживаясь инженерного подхода, вначале создадим только текстовую версию почтового сообщения.
Пример тела сообщения для шаблона Email-сообщения
Уважаемый {{.Lastname}} {{.FirstName}}!
Как Вы знаете группа разработчиков активно внедряет механизмы оптимизации
рабочего портала вашего отдела.
В связи с этим вчера вышел в релиз новый интерфейс для экземпляра Keycloak.
Без существенных изменений по визуальной части, но серверные компоненты
теперь используют другую систему хранения данных.
Поэтому просьба проверить что никаких проблем с доступом нет и учетка
перенеслась корректно.
Надеюсь, что все заработает с первого раза и мне не придется отвечать на
гневные сообщения.
Спасибо за понимание!
По умолчанию, в GoPhish доступен ряд параметров, которые можно и нужно использовать при формировании шаблонов (как для Email, так и фишинговых страниц). Для персонализации письма сейчас использованы переменные FirstName и LastName. Немного далее, при оформлении треккера, также потребуется вернуться к документации GoPhish. Будьте внимательны, все параметры регистрозависимые.
Практически все спам-фильтры крайне негативно относятся к изображениям в теле почтовых сообщений. Мы же не хотим попасть в Спам и снимем галочку Add Tracking Image (Рисунок 1, п.5). Сохраняем шаблон и пробуем отправлять письмо (Рисунок 2).
Мама, мы не в спаме (Рисунок 3)! Но рано радоваться, едем дальше.

Потихоньку усложняем

Первый тест пройден, но этого мало. Необходимо завладеть паролями пользователей, а сделать это без добавления в тело сообщения специально подготовленного URL-адреса несколько сложнее. Поэтому, копируем предыдущий шаблон и дополнительно указываем ссылку на обновленный фишинговый портал.
Пример добавления URL-адреса в шаблон Email
Уважаемый {{.LastName}} {{.FirstName}}!
Как Вы знаете, группа разработчиков активно внедряет механизмы оптимизации
рабочего портала для вашего отдела.
В связи с этим вчера вышел в релиз новый интерфейс для экземпляра Keycloak.
Без существенных изменений по визуальной части, но серверные компоненты
теперь используют другую систему хранения данных.
Поэтому просьба проверить что никаких проблем с доступом нет и учетные данные
перенеслись корректно.
Надеюсь, что все заработает с первого раза и мне не придется отвечать на
гневные сообщения.
Спасибо за понимание!
Обновленная старичка авторизации: {{.URL}}
Здесь задействуется предопределенная переменная URL, которая будет инициализирована в момент отправки письма адресом фишингового сайта.

По аналогии создаем еще одну кампанию и отправляем обновленную версию письма на очередной почтовый ящик (Рисунок 4).
Успех преследует нас, нет причин для остановки!

Добавление HTML-версии письма

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

Из основного:
  • обязательно укажите кодировку UTF-8 в теге META блока HEAD;
  • используйте максимально простую структуру HTML-документа;
  • предпочтительнее инлайн-стили, поскольку подавляющее большинство почтовых клиентов игнорируют теги STYLE и внешние CSS-файлы;
  • допускается внутри блока HEAD использовать тег STYLE, но будьте готовы к тому, что некоторые клиенты могут их игнорировать или поддерживать не полностью;
  • используйте таблицы для создания макета письма – это старый, но проверенный способ обеспечить корректное отображение в большинстве почтовых клиентов;
  • определите основной шрифт для письма font-family, популярные и безопасные шрифты: Arial, Helvetica, Sans-serif, Verdana, Tahoma, Georgia.

Это всего лишь малая часть того, на что Спамоборона Яндекса или аналогичные анти-спам системы обращают внимание. Добиться идеальной со всех точек зрения HTML- версии письма мне так и не удалось, но не стоит отчаиваться, у вас все получится!

Берем последний шаблон, клонируем его и в дополнении к текстовой версии добавляем еще и HTML.
Пример HTML-версии почтового письма для шаблона Email-сообщения
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title>Обновленная страница авторизации</title>
<style type="text/css">
body {
width: 100% !important;
-webkit-text-size-adjust: 100%;
-ms-text-size-adjust: 100%;
margin: 0;
padding: 0;
line-height: 100%;
}
a {
color: #007bff;
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
img {
outline: none;
text-decoration: none;
border: none;
-ms-interpolation-mode: bicubic;
max-width: 100%;
}
table {
border-collapse: collapse !important;
}
@media screen and (max-width: 600px) {
table {
width: 100% !important;
}
}
</style>
</head>
<body style="margin: 0; padding: 0; background-color: #f4f4f4;">
<table cellpadding="0" cellspacing="0" border="0" width="100%">
<tr>
<td>
<table align="center" cellpadding="0" cellspacing="0" border="0"
width="600" style="width:600px; margin: 20px auto; background-color: #ffffff;
border-collapse: collapse;">
<tr>
<td>
<table cellpadding="0" cellspacing="0" border="0" width="100%">
<tr>
<td style="padding: 20px; font-family: Arial, sans-serif;
color: #333333; font-size: 16px; line-height: 1.5;">
<h1 style="font-size: 18px; margin-top: 0; margin-bottom:
10px; text-align: center;">Уважаемый {{.LastName}} {{.FirstName}}!</h1>
<p style="margin-bottom: 14px;">Как Вы знаете группа
разработчиков активно внедряет механизмы оптимизации рабочего портала вашего
отдела.</p>
<p style="margin-bottom: 14px;">В связи с этим вчера
вышел в релиз новый интерфейс для экземпляра Keycloak. Без существенных
изменений по визуальной части, но серверные компоненты теперь используют
другую систему хранения данных.</p>
<p style="margin-bottom: 14px;">Поэтому просьба проверить
что никаких проблем с доступом нет и учетка перенеслась корректно.</p>
<p style="margin-bottom: 14px;">Надеюсь, что все
заработает с первого раза и мне не придется отвечать на гневные
сообщения.</p>
<p style="margin-bottom: 14px;">Спасибо за понимание!</p>
<h2 style="font-size: 16px; margin-top: 20px; margin-
bottom: 10px; text-align: center;">Обновленная страница авторизации</h2>
<table border="0" cellpadding="0" cellspacing="0"
align="center">
<tr>
<td style="background-color: #007bff; border-radius:
5px;">
<a href="{{.URL}}" style="font-size: 16px; font-
family: Arial, sans-serif; color: #ffffff; text-decoration: none; display:
block; padding: 10px 20px;">Keycloak</a>
</td>
</tr>
</table>
<p style="font-size: 12px; color: #777; margin-top: 20px;
text-align: center;">&copy; 2025 ScanFactory</p>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>
Вы угадали, задействуем еще один ящик для теста. Новая кампания и отправляем третью версию письма. В конечном итоге наблюдаем HTML-версию в каталоге Входящих сообщений (Рисунок 5).