Атаки SMB Relay и контроль NTLMv2 с помощью Python

Атаки SMB Relay и контроль NTLMv2 с помощью Python

В данной статье Марк Баггетт детально объясняет принцип работы атак SMB Relay, а также предлагает советы пен-тестерам по их использованию.

Автор: Марк Баггетт

Примечание редактора: В данной статье Марк Баггетт детально объясняет принцип работы атак SMB Relay, а также предлагает советы пен-тестерам по их использованию. И, кроме того, большую часть статьи Марка занимает демонстрация реализации атаки с помощью модуля Python’а при условии использования NTLMv2, более защищенного механизма аутентификации Windows. Действительно хороший материал!

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

В некоторых организациях активные системы защиты, как, например, определители хостов с ложными антивирусами, при подключении нового хоста будут сразу пытаться зайти на него. Данные системы перебирают списки административных имен пользователей и паролей, чтобы проверить новый компьютер, появившийся в сети. SMB Relay позволяет получить данные, использованные при попытках аутентификации, и в свою очередь использовать их для доступа к сети. В некотором роде атаки SMB Relay являются сетевой версией атак передачи хэша (которые Эд Скудис кратко описал в контексте psexec в его статье «Обязательства пен-тестера» http://pen-testing.sans.org/blog/2013/03/18/a-penetration-testers-pledge). Давайте рассмотрим принцип работы атак данного типа.

NTLM – протокол типа «запрос/ответ». Аутентификация происходит по следующему алгоритму. Первым шагом клиент пытается зайти, после чего сервер отправляет клиенту запрос. То есть сервер как бы говорит «Если ты действительно тот, за кого себя выдаешь, зашифруй данное сообщение (запрос Х) с помощью своего хэша». Далее Клиент шифрует запрос и отправляет серверу зашифрованный ответ. Сервер пытается расшифровать зашифрованный ответ с помощью хэша пароля пользователя. Если полученное сообщение соответствует запросу сервера, то пользователь считается аутентифицированным. Проиллюстрируем схему работы NTLM.

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

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

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

Сценарий

IP адрес нарушителя – 10.10.12.10

IP адрес цели – 10.10.12.20

IP адрес сервера со сканером хостов – 10.10.12.19

У Metasploit имеется чудесно работающий модуль SMB Relay. Нарушитель настраивает Metasploit следующим образом

Для симуляции сканера хостов я использую простой цикл FOR на Windows. На хосте 10.10.12.19 выполним следующую команду.

Когда сканнер (10.10.12.19) подключится к хосту 10.10.21.10 («слушателю» Metasploit’а), попытка аутентификации будет перенаправлена на целевой сервер (10.10.12.20). Аутентификация пройдет как по маслу, и Metasploit автоматически использует аутентифицированную сессию SMB для загрузки через Meterpreter информации на целевую машину. Обратите внимание на следующем рисунке, что Metasploit отправит «В доступе отказано» сканеру хостов при его попытке подключения на 10.10.12.10. Тем не менее, задача выполнена, и теперь на нашем хосте есть свой шелл, запущенный на целевом сервере (10.10.12.20).

В настоящее время SMB Relay на Metasploit поддерживает только NTLMv1, поэтому организации могут защититься от данной атаки с помощью изменения политики AD следующим образом (доступно в secpol.msc)

Меняем значение как показано на рисунке

После этого попробуем провести атаку повторно.

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

Но не стоит расстраиваться, мы со всем справимся! Давайте используем Python. Пару недель назад в своем блоге, в статье на тему использования Python-версии psexec (http://pen-testing.sans.org/blog/2013/03/27/psexec-python-rocks) я продемонстрировал скрипт psexec.py. Это реализованный на Python psexec, поставляемый с модулем IMPACKET. Команда, разрабатывающая IMPACKET – модуль для Python - , делает действительно полезную работу! Первое, что стоит отметить, они пишут великолепный модуль! Более того, они создали несколько показательных программ-примеров, демонстрирующих всю мощь модулей для Python. И самоe главное, поставляемый с IMPACKET скрипт SMBRELAYX.PY поддерживает NTLMv2! Это просто невероятно!

Для того чтобы запустить скрипт, придется немного поработать. Скачайте последнюю версию IMPACKET и исправьте пути в модуле, чтобы его запустить. Для этого я разместил все примеры в одной директории и поменял значение импорта, чтобы ссылаться на верные папки. SMBRELAYX должен иметь права на исполнение, чтобы запуститься на удаленном хосте после аутентификации. Что может быть лучше, чем Meterpreter? Давайте используем msfpayload и создадим EXE, после чего установим SMBRELAYX. SMBRELAYX.PY требует указать 2 параметра: -h – хост, который вы намереваетесь атаковать, и –e – процесс, который будет запущен на удаленной машине. Просто укажите данные значения, и вам останется лишь дождаться, когда к вам подключится сканер хостов. Ниже показан процесс создания msfpayload’ом исполнимого файла и инициирование работы SMBRELAYX.PY

Из-за того, что мы используем обратный шелл meterpreter’а, нам необходимо установить Metasploit, чтобы он был готов принять подключение после выполнения скрипта на целевой машине. Рассмотрим следующий рисунок

Теперь я выступлю в роли сканнера, попытаюсь подключиться к C$ на машине 10.10.12.10 со сканера хостов (10.10.12.19)

В отличие от ранее рассмотренного случая, сейчас мы получили ошибку «Система не может найти указанный путь». Хорошее сообщение. Думаю, администратор может задаться вопросом, почему его имя пользователя и пароль не подошли, прежде чем подумать, почему не существует указанный путь. Сообщение, отправленное скриптом SMBRELAYX.PY, кажется более изысканным, чем стандартное сообщение Metasploit. На него будут меньше обращать внимания. Сразу же мы видим, что переключение произошло в скрипте. Он аутентифицировался на 10.10.12.20 и запустил процесс meterpreter в качестве службы, используя имя пользователя и пароль, предоставленные с машины 10.10.12.19.

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

Вот и новый шелл, и все благодаря meterpreter. И, конечно же, Python позволит внедрить использованный нами скрипт в ваше средство для автоматизации атаки. Хотите получить больше информации о том, как создать собственную программу, автоматизирующую данную атаку, на Python? Уверен, да! Присоединяйтесь ко мне http://www.sans.org/course/python-for-pen-testers

Благодарю за внимание!

Ваш провайдер знает о вас больше, чем ваша девушка?

Присоединяйтесь и узнайте, как это остановить!