Фишинг

Фишинг

Не забудь подписаться на https://t.me/the_dark_harbor

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


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


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


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


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


В качестве примера возьмем адрес блога - kaimi.io и рассмотрим порядок действий, а также вспомогательные инструменты.


Нам понадобится зарегистрировать домен, где будет размещен веб-ресурс. Позднее он может быть использован для проведения рассылок. Как выбрать имя?

  1. Придумать самостоятельно, используя распространенные техники, например:замена визуально схожих символов (i -> l)
  2. замена символов с использованием punycode (https://ru.wikipedia.org/wiki/Punycode)
  3. зарегистрировать произвольное имя, где разместить поддомен с целевым именем, которое
  4. будет видно в начале (вроде admin.kaimi.io.sample.com), особенно актуально для мобильных клиентов, где адресная строка в большинстве случаев урезана из-за размера экрана
  5. зарегистрировать ровно такой же домен в другой зоне (например, kaimi.it)
  6. придумать что-то "оригинальное", вроде kaimi-blog.io (не лучший вариант)
  7. Воспользоваться специальным ПО, которое реализует часть описанных методов, например:EvilURL (https://github.com/UndeadSec/EvilURL)
  8. DomainFuzz (https://github.com/monkeym4ster/DomainFuzz)
  9. CATPHISH (https://github.com/ring0lab/catphish)
  10. dnstwist (https://github.com/elceef/dnstwist)

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


Имя выбрали, перейдем к привязке имени к IP и настройке всевозможных полезностей. Можно разместиться на каком-нибудь хостинге, который предоставляет доступ к панели, где все настраивается в пару кликов или не настраивается... Я рассмотрю вариант использования VPS.


Итак, мы арендовали VPS (рекомендую ArubaCloud, как самое дешевое, 1€ в месяц на момент написания, либо DigitalOcean, как наиболее удобное, от 5$ в месяц). 


Необходимо настроить SPF, DKIM, DMARC. По порядку:

SPF - пользуемся одним из следующих мануалов:

DKIM и DMARC

Завалялся у меня скрипт для настройки VPS под рассылку AMS на Python. Честно не помню, откуда, мне кажется, на каком-то форуме взял. Если нарушаю чьи-то авторские права - напишите в комментариях.

Скачать: https://kaimi.io/wp-content/uploads/2018/05/vps-setup.zip


Как обычно, можно вручную:

Не забываем добавить пользователя, если планируется отправка с использованием почтовых клиентов. Также почтовые обязанности можно переложить на сторонние сервисы, что в ряде случаев может помочь, например, воспользоваться SendGrid (https://sendgrid.com), Mandrill (https://www.mandrill.com), GMail for Business (https://gsuite.google.com/products/gmail/) или даже Яндекс.Почта для домена (https://pdd.yandex.ru/domains_add/).


И, наконец, выпустим для нашего домена SSL-сертификат, домен ведь не только для рассылок используется. Подойдет сервис Let's Encrypt (https://letsencrypt.org/) для которого существует уйма скриптов для развертывания (в зависимости от используемого веб-сервера).


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


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


Второй вариант - воспользоваться Social-Engineer Toolkit (https://github.com/trustedsec/social-engineer-toolkit), после установки идем по мануалу или по здравому смыслу (все ведь знают английский на базовом уровне, да?) http://ironkali.blogspot.nl/2014/03/how-to...se-toolkit.html

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


Раз уж затронул тему фреймворков для фишинга, то упомяну еще несколько, которые умеют всё, но не всё и временами криво:

Еще может быть полезен инструмент elScripto (https://github.com/psych0tr1a/elScripto), если веб-ресурс создается для проведения "фишинга" пользователей в рамках другого веб-ресурса, на котором у вас имеется XSS.


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


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

Также можно использовать специальное OSINT ПО для сбора информации, например:

Тема полноценного OSINT по человеку или организации выходит за рамки данной статьи, однако приведу пару ссылок, которые помогут сориентироваться в сервисах, подходах и доступных инструментах:

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


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


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


Бывают варианты попроще:

Бывают посложнее:

Цель - сделать такое же.


Общий стиль. Тоже довольно очевидно. Следует обратить внимание на структуру, используемые обращения, визуальное оформление (цвет, шрифт) и т.д.


Заголовки. 

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

Занимательный набор заголовков, не правда ли? Тут и клиент, и IP, и имя компьютера...


Кстати, о спам-фильтрах, если видно использование какой-либо системы, то перед отправкой рекомендую взять отдельную систему, развернуть на ней тот же SpamAssassin и проверить свое письмо в нем, представление о потенциальном Score (субъективной оценке SpamAssassin вероятности того, что это спам) - отличная возможность внести правки до непосредственной рассылки.


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


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


Иногда имеет смысл указать несколько получателей (заголовок Cc) в рамках одной компании, добавляет доверия. 


Не забывайте о возможности манипуляции отображаемым отправителем (заголовок From, который следует детальнее рассмотреть, вдруг в компании принято использовать только имя, а вы вписали ФИО), указанием альтернативного получателя ответа (Reply-To) и прочих полезных заголовках, не лишним будет полистать RFC (https://tools.ietf.org/html/rfc2076).


Текст составлен, перейдем к вложениям. Ведь нас может интересовать не только факт открытия письма (который можно установить, например, с помощью ссылки на изображение, если письмо в формате HTML), а еще возможность проникновения на ПК получателя. 


Что шлют? В основном офисные документы, реже архивы. Слать типичные исполняемые расширения - 99% попадание под фильтр. Кстати, интересный момент по поводу вложений. Сталкивался с ситуацией, что вложения с любыми потенциально опасными расширениями (даже .reg) физически вырезаются из писем, однако архивы с паролем проходят на ура. 


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


В случае с офисными документами используются следующие варианты:

Если интересует только фиксация попытки открытия файла, то тут тоже есть простор, обращение к внешнему ресурсу (иногда с возможностью утечки полезных данных https://habr.com/post/354618/), подписывание документа сертификатом и фиксация факта обращения к CRL или Timestamp серверам и т.п.


Под некоторые решения можно найти подробные описания, что-то сгенерировать существующими продуктами (например, Metasploit Framework, Empire, но придется дорабатывать), что-то купить.


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


Теперь упомянем социальные сети и связанный с ними, а также с вышеперечисленными способами, фейковый веб-сайт.

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


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


И, наконец, совсем вкратце затрону физический аспект. Тут все очень индивидуально и практический опыт в области у меня более чем скудный. Обычно в том или ином формате появляется возможность взаимодействовать с сотрудниками. Что используется? В большинстве случаев Rubber Ducky (https://hakshop.com/products/usb-rubber-ducky-deluxe), а точнее похожая по нагрузке дешевая реплика с AliExpress (https://ru.aliexpress.com/item/BadUsb-Beetl...2732578586.html). 


Естественно, можно выковырять или взять за основу подходящий контроллер (Google -> Bad USB DIY) и собрать все в нужном корпусе или подсадить в какое-либо готовое устройство, например, мышь. Далее готовое устройство передается, отправляется, подкидывается, что в один или несколько заходов позволяет получить доступ к системе внутри целевой сети. 


На самом деле сложно подготовить, т.к. приходится учитывать множество нюансов (система пользователя, антивирусы, файрволлы, системы DLP, личный уровень паранойи и т.д.), но иногда, что характерно, срабатывает на ура.


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


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



Данная статья создана исключительно для ознакомления и не призывает к действиям!