Забираем почту без sms и регистрации

Не прошло и месяца, как мы решили, что пора написать статьи по итогу наших выступлений на OFFZONE-2018. Первая статья будет исполнена по мотивам доклада с FastTrack «MS Exchange Relay attack without sms and registration».

При проведении RedTeam использование фишинга является обязательным — можно построить великолепную защиту на периметре, но какой-нибудь пользователь поведется на фишинг и даст злоумышленнику возможность оказаться сразу внутри сети. Все прекрасно знают, что в основном для фишинга используют ссылки на сторонние сайты, по которым пользователю нужно перейти или документ с макросом. Службы безопасности под угрозой санкций «дрессируют» пользователей, говоря, что ни в коем случае нельзя нажимать на кнопочку «включить содержимое». И в принципе успех есть — пользователи на такого рода рассылки ведутся все реже. Но злоумышленники тоже не стоят на месте — фишинг становится все более интересным. От нас Заказчики также требуют каких-то интересных фишинговых рассылок. Да и мы сами заинтересованы в том, чтобы сотрудники Заказчика повелись на фишинг, и мы смогли им объяснить, на что следует обращать внимание при получении письма.

Почему именно такие методы для фишинга?


Многие компании используют MS Exchange в качестве корпоративного почтового сервера. Это удобно для компании, но также удобно и для злоумышленника. Злоумышленнику интересно отправлять с почты жертвы сообщения, а также скачивать какие-либо письма. Мы, как RedTeam, хотим полностью имитировать действия злоумышленника и нам интересно совершать с почтой такие же действия. Естественно, в нашем случае скачивание почты происходит не в полном объеме, и Заказчик об этом предварительно уведомляется. Ибо конфиденциальная информация, все дела.

Для осуществления такого рода действий нам нужна почтовая сессия пользователя. Первое что нужно продумать — как такую сессию перехватить. Решили воспользоваться старым добрым NTLM Relay (т.к. в большинстве компаний до сих пор используется NTLM). Да, в случае Kerberos работать не будет — можно закрывать статью и дальше не читать.

NTLM Relay известен давно и реализаций его также достаточно. Мы тоже не стали изобретать велосипед и взяли одну из реализаций с GitHub от Arno0×0x. Однако все оказалось не так просто и пришлось немного дописывать. А именно:

  • сделать, чтобы все работало со всеми современными версиями ОС Windows (не работало на win10 и win server2016);
  • сделать, чтобы работало с последним Impacket«ом;
  • добавить удобную систему логирования.


Доработанную версию можно найти на нашем github.

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

Как сформировать фишинговый документ?


В качестве примера рассмотрим совершенно «чистый» документ mydoc3.docx, который является самым обычным документом Microsoft Word.

qhfzu4immrvbunyhhtkquijf_6w.jpeg

Любой документ Microsoft Office является zip-архивом, состоящим из xml, которые в итоге и формируют ваш красивый документ. Для того, чтобы сделать вложенный документ, нам необходимо внести изменения в файлы с расширением .rels. В зависимости от версии MS Office изменения необходимо внести либо в document.xml.rels, либо в settings.xml.rels. В данной статье рассматривается Office 365, и изменения вносятся в settings.xml.rels.

gvl_el9spieruf3-oi7ebyn8kum.jpeg

В качестве вложенного документа даем ссылку на ресурс, на котором находится этот самый вложенный документ. В нашем случае вложенный документ находится на smb-ресурсе \\127.0.0.1\subdoctest\

vo8ek6cjbb3ujb25muzizw3dsis.jpeg

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

5srdr6cwcqyckb-wa2hx5fdxfue.jpeg

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

ssxx9qy8acppddbgoxee3bjoi3q.jpeg

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

А куда все будет приходить?


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

Для того, чтобы все запустить, достаточно минимального набора — последний Impacket, тулза MSExchangeRelay и Python2.7.
Запускаем все командой:

python MsExchangeRelay.py -v -t https://exchange_addr/ews/exchange.asmx -r sendMail -d "example@email.com" -s Hello -m sampleMsg.html -o out.txt
exchange_addr – адрес exchange сервера Заказчика
example@email.com – почтовый адрес на который вы хотите отправить сообщения с почты жертвы.
-s Hello – тема письма
-m sampleMsg.html – тело письма, которое хотите отправить
-o out.txt – место куда пишутся логи.


После запуска на сервере поднимаются SMB и HTTP сервера, которые ожидают подключения к ним.

fbv_gdeuf-sslphsu7dgwcolhym.jpeg

После успешного коннекта видно, с каким логином и с какого IP-адреса залогинился пользователь:

b5qlncntglraiglm3ssvhtdactc.jpeg

Как теперь это применять?


Применять такой способ можно на разных кейсах.

Кейс 1. Внешний нарушитель, у Заказчика открыт исходящий 445 порт

В таком случае можно использовать ссылку на smb-ресурс. Вся прелесть такой ссылки заключается в том, что ОС Windows не хочет лишний раз беспокоить пользователя, если сама может справиться. Соответственно, при открытии документа с ссылкой на smb-ресурс Windows сама отправляет доменные креды пользователя данному ресурсу. То есть для пользователя не происходит ничего. Пользователь открывает документ. И все. Подозрения не вызывает ничего. А у нас уже есть пользовательская почтовая сессия.
Открытый порт 445, хоть и редко, но встречается до сих пор. Поэтому его тоже рассматриваем и оставляем.

Кейс 2. Внутренний нарушитель

ua-nrturlt8wmhhttmjpxmtozgq.jpeg
Здесь мы также применяем ссылку на smb-ресурс. В случае удачного перехвата сессии на указанный почтовый адрес придет письмо, которое мы указали.

Кейс 3. Внешний нарушитель и закрыт исходящий порт 445

rkhjz7iomq_a6g5wbtqeq65eh4q.jpeg
Можем использовать ссылку на HTTP-сервер. Однако в данном случае все будет не так прозрачно для пользователя. При открытии документа пользователь увидит стандартное окошко от Windows, в котором запрашивается логин и пароль пользователя. Момент, который может смутить пользователя — доменное имя evil_http_server — оно должно быть максимально похоже на доменное имя exchange сервера Заказчика.

qgmuq1qmzgin7fjeiwcrwjh-lug.jpeg После того, как пользователь введет свои креды, мы получаем его сессию и отправляем письмо.

Вместо заключения


NTLMRelay можно оборачивать в разные контейнеры и придумывать совершенно разные подходы к фишингу пользователей. Пока жив NTLM — живы и такого рода атаки. Так что экспериментируйте!

P.S. Спасибо организаторам OFFZONE-2018 за отличную конференцию!

© Habrahabr.ru