SMB Hijacking. Kerberos не помеха

в 8:53, , рубрики: intercepter-ng, kerberos, smbrelay, sniffing, информационная безопасность, метки: , , ,

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

Процесс развития релеинга уже давно стоит на месте. И верно, чего казалось бы там улучшать, все ясно и понятно.
Чуть больше года назад в Intercepter'е появилась возможность осуществлять перенаправление NTLMv2. Спустя 3 месяца подобный функционал появился и в Metasploit'е, а затем отдельно взятые энтузиасты стали накидывать свои наработки. Вот он, логический предел. Сам SMBRelay уже практически не применяется, гораздо удобнее в этом плане осуществлять NTLM-Relay через другие протоколы, в частности HTTP. К тому же жизнь SMBRelay'ю в доменных сетях осложняет «непобедимый» Kerberos, зачастую именуемый лекарством от SMBRelay. Своим исследованием я хотел бы разрушить этот миф и представить совершенно новый подход к проведению атаки на протокол SMB.
Стоит заметить, что это уже будет не совсем SMBRelay, назовем данную технику SMB Hijacking.

Начнем из далека…

В новой версии интерцептера появился NTLM-Response граббер, встроенный в WPAD MiTM.
Для удобства использования было решено сделать возможность вызывать John the Ripper с перехваченным хешем, чтобы быстро проверить, установлен ли пустой или легкий пароль. После чего все хеши которые перехватывает снифер и которые поддаются брутфорсу через JTR были приведены в соотвествующий формат.

В архиве семплов Wireshark'а нашелся лог с авторизацией Kerberos, из которого Cain смог вытащить хеш и методом перебора подобрать пароль.
Брутфорс возможен благодаря тому, что в запросе AS-REQ на сервер аутентификации передается шифрованый паролем пользователя timestamp, часть которого заранее известна. Обработчик Kerberos аутентификации был добавлен и протестирован на живом контроллере домена (Windows 2008 R2). К удивлению хеш не перехватился. Все дело в том, что в Windows 2008 добавились новые алгоритмы шифрования и вместо ранее применяемого rc4-hmac, теперь по-умолчанию используется aes256-cts-hmac-sha1-96. Выдергивается этот хеш из пакета точно так же как и rc4-hmac, вот только появилась другая проблема.
На данный момент нет переборщиков способных восстановить пароль из timestamp'а зашифрованного aes'ом. В мейллисте john'a один товарищ написал патч для JTR, но судя по отзывам он еще сыроват и самое главное процесс перебора в сотни раз медленней чем перебор rc4.

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

image
Даунгрейд осуществляется простой заменой возможных методов в исходящем пакете жертвы.

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

Во время раздумий и анализа трафика возник совершенно странный вопрос: а зачем нам вообще что-то re(p)lay'ить ?! Да не зачем!

Что из себя представляет сеанс SMB?

1. Host_A соединяется с Host_B
2. Выбирается протокол сеанса
3. Выбирается способ авторизации
4. Набор команд…

ЗАЧЕМ НАМ РЕЛЕИТЬ АВТОРИЗАЦИЮ ЖЕРТВЫ ЕСЛИ ОНА САМА ПРЕКРАСНО АВТОРИЗУЕТСЯ НА НУЖНОМ РЕСУРСЕ?!

Нам всего лишь нужно встать посередине и проксировать соединение, дождаться пока Host_A авторизуется на Host_B, а затем взять контроль над сессией в свои руки!
Мы уже авторизованы и можем внедрить свой код в SMB сеанс. Нас совершенно не интересует каким способом авторизовывался клиент, будь то NTLM или Kerberos!
Сам сеанс никак не шифруется, а SMB Signing на рядовых клиентах в 99% случаев не используется.
Помимо бОльших возможностей, эта техника гораздо элегантнее чем SMBRelay, с нас снимается необходимость реализовывать самостоятельно мудреный процесс SMB авторизации.
Достаточно реализовать минимальный набор команд, которые позволят загрузить файл и выполнить его запуск.

Весь этот функционал появился в новой версии Intercepter-NG и протестирован в реальных условиях с самыми последними версиями Windows 2008 и Windows 7/8.

Какие же сложности и особенности имеются в реализации данной атаки.
Начиная с Vista стал использоваться новый протокол SMB2. Основным отличием от старой версии является упрощенный набор команд и увеличение производительности.
Для нас важным является соблюсти два правила. Во первых, каждый SMB сеанс имеет свой Session ID, а во вторых в заголовке SMB2 имеется поле Command Sequence Number,
т.е. порядковый номер команды. Для внедрения команд необходимо указывать идентификатор сессии и инкрементировать счетчик команд.

Т.к. в Intercepter существующий SMBRelay основан на чужом коде, использующем старый формат SMB, то было принято решение не лепить костыли и с нуля реализовать основной набор команд SMB2.

Логика внедрения в сессию следующая:

1. Встать посередине между атакуемым и третьим хостом
2. Дождаться команды SessionSetup Response с положительным ответом
3. Получить Session ID и текущий номер команды
4. Скопировать файл на административную шару (admin$)
5. Создать службу, которая запустит наш файл
6. Запустить службу
7. cmd.exe

Пятый и шестой пункты возможны лишь потому, что Microsoft позволяет передавать RPC запросы поверх SMB.

image

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

Керберос нам не помеха. Кстати Kerberos в SMB используется только если обращение к компьютеру производится по имени, а если обращаться на шару через IP то применяется только NTLM. При атаке клиентов домена, атакующему вовсе не обязательно самому быть членом домена.
Использовать SMB Hijacking можно и в обычной рабочей группе, при условии соблюдения требований: наличие административного доступа у атакуемого и доступные административные ресурсы IPC$ADMIN$.
Помимо пассивного перехвата SMB сессий, Intercepter так же инжектит ссылку на SMB ресурс в web трафик атакуемого, что значительно ускоряет процесс получения доступа.

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

Демо-видео по проведению SMB Hijacking ниже.

Помимо Kerberos Downgrade и SMB Hijacking в новой версии Intercepter'а произошли следующие изменения.

Во встроенный прокси-сервер WPAD MiTM'а интегрирован NTLM-Response граббер. Полученные хеши можно подвергнуть перебору.
Теперь для ряда перехватываемых хешей доступен запуск брутфорса прямо из программы, для этого необходимо предварительно скачать JTR (с патчем jumbo) и положить его в папку с Intercepter'ом.
В Smart Scan добавлен новый метод OS фингерпринтинга, дающий более точный результат.
Появился SYN сканнер портов, whitelist мак адресов для DHCP MiTM, поддержка IDN (национальных доменных имен) и еще множество улучшений и исправлений.

SMB Hijacking используется по-умолчанию, если необходимо провести старый SMBRelay, то нужно переключить соответствующую галку в экспертном режиме.

Задать вопросы можно на форуме или по почте.

Информация представлена в ознакомительных целях. Автор не несет ответственности за любой возможный вред, причиненный материалами данной статьи.

Автор: Intercepter

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js