Содержание статьи
SMB
SMB — это сетевой протокол, который служит в основном для доступа к данным на удаленном компьютере. Говоря проще, когда ты пытаешься залезть на шару, то как раз им и пользуешься. Выпущен он был в далеком 1983 году, но лишь со времен Windows 2000 стал походить на тот, каким мы его знаем сейчас (например, работать на 445-м порте).
Сейчас есть три основные версии протокола. Существенная разница заключается в командах, пропускной способности (за счет разных вариантов кеширования) и обновлении безопасности (шифрование и заплатки дыр). Плюс разработчики не упускают возможности сделать работу с SMB более удобной, поэтому с каждым релизом в него добавляются разные плюхи (например, восстановление соединения при разрыве).
В рамках данной статьи мы рассматриваем конкретно SMBv2. Нам необходимо знать, что существует механизм защиты Microsoft SMB Protocol. Он основан на двух методах контроля доступа: share-level и user-level.
Для предоставления доступа методом share-level необходимо иметь соответствующий логин и пароль. После успешной аутентификации пользователь получает доступ ко всем данным, которые находятся на ресурсе.
Метод user-level также берет за основу логин и пароль. Отличие заключается в том, что в этом случае системный администратор задает список доступа, то есть явно указывает, каким пользователям и группам предоставить доступ к ресурсу. Нам интересен и тот и другой метод, так как в обоих случаях способ аутентификации остается неизменным — NTLMv2.
NTLMv2
Нас интересует именно NTLMv2, так как SMBv2, который мы будем рассматривать, использует его. Эта версия протокола сетевой аутентификации появилась во времена Windows NT 4.0 SP4 и с небольшими изменениями дожила до наших дней в составе Windows 10. В NTLMv2 используется одноименный тип рукопожатий (NTLMv2 handshake), считающийся более безопасным, чем устаревшие LM и NTLM первой версии.
Работает все следующим образом. При открытии документа со ссылкой на сетевую шару клиент (которым в нашем случае будет компьютер жертвы) передает этому серверу команду на получение контента. Для этого он отсылает ему имя пользователя и имя домена, на что сервер запускает процедуру авторизации по типу «запрос/ответ».
Он отправляет клиенту однократно используемое рандомное число — server nonce
. В ответ клиент отсылает новый запрос, который содержит другое псевдослучайное число — client nonce
и метку времени.
Запросы клиента и сервера объединяются в общий секрет (session nonce), из которого на стороне сервера вычисляется хеш сессии HMAC-MD5 или HMAC-SHA-256 (в зависимости от версии SMB и настроек безопасности).
На стороне клиента хеш сессии шифруется тремя ключами DES, генерируемыми из дополненного нулями и разделенного на три блока NT-хеша пользовательского пароля. Это и есть итоговый NTLMv2-ответ, который отправляется серверу.
Сервер объединяет NTLMv2-ответ со своим запросом и вычисляет от него новый хеш HMAC-MD5 или HMAC-SHA-256.
На финальном этапе контроллер домена получает хешированный NTLMv2-ответ вместе с запросами клиента и сервера. Он считывает из своей базы NT-хеш пользовательского пароля и расшифровывает полученный клиентский ответ. Если удачно — серверу возвращается ответ об успешной аутентификации.
Поясню для заядлых брутфорсеров: множество хешей NT составляет 2^128 (или более 340 тысяч дециллионов) вариантов. Средняя скорость брутфорса пар NTLM-хеш — пароль на компе с Core i7 и топовой видеокартой уровня GTX1080 составляет порядка 700 миллионов в секунду (зависит от программы и особенностей конфигурации). Поиск по радужным таблицам на нем же выполняется гораздо быстрее — на скорости около 100 000 миллионов в секунду.
Описание уязвимости
В конкретном примере рассматривается частный случай атаки Pass the Hash, подробности о которой читай во врезке. Атаковать мы будем с помощью Office Open XML. Это формат хранения офисных документов, и представляет он собой не что иное, как обычный ZIP-архив, в который упакованы текст, графика и остальные данные. Нам необходимо заставить документ обратиться к удаленному (естественно, подконтрольному нам) SMB-серверу, перехватить трафик и выудить оттуда хешированные учетные данные. Для этого воспользуемся возможностью данного формата встраивать в тело документа текст из другого документа (субдокумента).
В частности, в MS Office имеется функция под названием subDoc, о которой и пойдет речь. Сама функция ничего особо злого в себе не несет, так как предназначена она для динамического обновления контента.
К примеру, возьмем два файла: doc1 и doc2. Вставим при помощи функции subDoc
текст из doc1 в doc2. Изменим текст в doc1. Теперь при открытии файла doc2 он обратится к источнику текста и внесет те же самые изменения, а точнее — просто обновит содержимое.
Фокус в том, что мы можем модернизировать файл doc2 таким образом, чтобы он ссылался на файл на удаленном сервере (неважно, в локальной сети это будет или за NAT). На этот раз, открывая doc2, Word обратится по SMB-протоколу за содержимым, что позволит нам перехватить трафик и достать оттуда необходимые нам данные. Если файл будет недоступен, то документ просто не сможет обновиться.
Делать мы будем так, чтобы ссылка была вообще не на файл, а просто на сервер по SMB. На том конце, естественно, кто-то встретит нужные пакеты и получит заветный логин (в открытом виде) и NTLMv2-ответ (с которым в итоге и нужно развлекаться). При этом на стороне атакуемого не будет никакой подозрительной активности. Он просто открывает файл.
Подготовка
Для реализации описанной выше теории нам необходимы четыре вещи:
- Любая Linux-машина (какой уж взлом без линуксов-то…).
- Пакет Microsoft Word, начиная с 2007.
- Прямые руки.
- Компьютер жертвы или его имитация.
В эксперименте я использовал следующие программы:
- Ubuntu Server 16.04;
- MS Windows 7 Ultimate (сборка 7600);
- пакет MS Office 2010, стандартное издание.
Помимо Windows 7, успешные испытания были проведены на Windows Server 2012 R2, версия 6.3, билд 9600.
Скачать:
Скриншоты:
Важно:
Все статьи и материал на сайте размещаются из свободных источников. Приносим свои глубочайшие извинения, если Ваша статья или материал была опубликована без Вашего на то согласия.
Напишите нам, и мы в срочном порядке примем меры.