Забираем почту без 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.
Любой документ Microsoft Office является zip-архивом, состоящим из xml, которые в итоге и формируют ваш красивый документ. Для того, чтобы сделать вложенный документ, нам необходимо внести изменения в файлы с расширением .rels. В зависимости от версии MS Office изменения необходимо внести либо в document.xml.rels, либо в settings.xml.rels. В данной статье рассматривается Office 365, и изменения вносятся в settings.xml.rels.
В качестве вложенного документа даем ссылку на ресурс, на котором находится этот самый вложенный документ. В нашем случае вложенный документ находится на smb-ресурсе \\127.0.0.1\subdoctest\
Сохраняем изменения и открываем полученный документ. В случае успеха документ будет выглядеть следующим образом:
Однако в таком виде он вызывает подозрения у пользователей. Надо его немножечко изменить и постараться скрыть ссылку при помощи применения различных стилей и белого цвета шрифта.
В итоге получили совершенно не подозрительный документ, при открытии которого 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 сервера, которые ожидают подключения к ним.
После успешного коннекта видно, с каким логином и с какого IP-адреса залогинился пользователь:
Как теперь это применять?
Применять такой способ можно на разных кейсах.
Кейс 1. Внешний нарушитель, у Заказчика открыт исходящий 445 порт
В таком случае можно использовать ссылку на smb-ресурс. Вся прелесть такой ссылки заключается в том, что ОС Windows не хочет лишний раз беспокоить пользователя, если сама может справиться. Соответственно, при открытии документа с ссылкой на smb-ресурс Windows сама отправляет доменные креды пользователя данному ресурсу. То есть для пользователя не происходит ничего. Пользователь открывает документ. И все. Подозрения не вызывает ничего. А у нас уже есть пользовательская почтовая сессия.
Открытый порт 445, хоть и редко, но встречается до сих пор. Поэтому его тоже рассматриваем и оставляем.
Кейс 2. Внутренний нарушитель
Здесь мы также применяем ссылку на smb-ресурс. В случае удачного перехвата сессии на указанный почтовый адрес придет письмо, которое мы указали.
Кейс 3. Внешний нарушитель и закрыт исходящий порт 445
Можем использовать ссылку на HTTP-сервер. Однако в данном случае все будет не так прозрачно для пользователя. При открытии документа пользователь увидит стандартное окошко от Windows, в котором запрашивается логин и пароль пользователя. Момент, который может смутить пользователя — доменное имя evil_http_server — оно должно быть максимально похоже на доменное имя exchange сервера Заказчика.
После того, как пользователь введет свои креды, мы получаем его сессию и отправляем письмо.
Вместо заключения
NTLMRelay можно оборачивать в разные контейнеры и придумывать совершенно разные подходы к фишингу пользователей. Пока жив NTLM — живы и такого рода атаки. Так что экспериментируйте!
P.S. Спасибо организаторам OFFZONE-2018 за отличную конференцию!