Разбор Zero-day уязвимости Microsoft Support Diagnostic Tool
CVE-2022–30190, она же Follina. По данным VirusTotal, первый раз уязвимость эксплуатировали 25 мая, а первый сабмит сделан японской командой исследователей nao_sec 27 мая.
Microsoft Support Diagnostic Tool — сервис в Windows 11/10/8.1/7, который собирает информацию для отправки в службу технической поддержки Microsoft. При обращении к службе поддержки Microsoft специалист поддержки выдаёт ключ, который вводится в MSDT. После запуска MSDT (в поиске Windows ввести MSDT) и ввода ключа, полученного от специалиста, сервис будет активирован и начнёт сбор и анализ информации, чтобы найти решение проблемы пользователя.
Пример обращения к MSDT
Кратко об уязвимости
Новый Zero-day баг позволяет удалённо выполнить код через Microsoft Office. Злоумышленник создает Maldoc, содержащий ссылку на внешний вредоносный OLE-объект, связанный с находящимся на удалённом сервере HTML-файлом.
Действие эксплойта:
Открытие полученного .doc или .rtf документа.
Документ ссылается на непримечательный URL с протоколом https, скачивающий HTML файл, содержащий код JavaScript.
JavaScript ссылается на URL с необычным идентификатором — ms-msdt вместо https.
В Windows «ms-msdt» является проприетарная ссылкой, вызывающей пакет устранения неполадок.
Командная строка, загруженная в MSDT через URL, запускает недоверенный код, располагающийся на удаленном сервере.
Подготовленный документ при открытии запускает Microsoft Support Diagnostic Tool (MSDT), через который передается любая команда для выполнения в системе, от безвредного запуска программ до повышения привилегий, сбора и передачи паролей. Microsoft были предупреждены о возможности эксплуатации, но без своевременного реагирования появилась возможность использования уязвимости. При эксплуатации окно ввода ключа появляется, но при этом параллельно происходит исполнение скрипта, не требуя ввода ключа.
Известны 2 формата документов, подверженных атакам: .doc (.docx) и .rtf. Подверженные уязвимости версии Office: 2013, 2016, 2019, 2021, Office ProPlus и Office 365. Для эксплуатации необязательно открывать документ, скрипт сработает при предварительном просмотре, также атака работает при отключенных макросах.
География попыток использования эксплойта по данным Securelist:
Пример обращения к ms-msdt
Зареверсил и сделал готовую версию эксплойта Джон Хаммонд. Его решение на GitHub. В терминале Kali Linux с помощью команды [python3 follina.py] создаётся файл «follina.doc», с загруженный html пейлоадом на порт :8000. Полученный документ уже подходит для отправки пользователям. По заготовленной команде после просмотра документа открывается калькулятор. Также заложены предустановки: [-c «notepad» ] откроет блокнот, а [-r 9001] запустит reverse shell на порт 9001, но при этом скачивается netcat binary на ПК жертвы с расположением C:\Windows\Tasks, без очистки binary, из-за чего сработает антивирус.
Пример запуска готового эксплойта
Распространение Follina
Поскольку CVE эксплуатируется через документ, применимы методы социальной инженерии:
Рассылка писем сотрудникам компании под видом рабочих документов.
Рассылка уведомлений, промоакций.
Размещение документа для скачивания на сайтах.
Загрузка файла на физический носитель (метод «дорожного яблока»).
Основная проблема заключается в самом формате файла. Из-за расширения .doc (.docx) пользователи не чувствуют опасности и спокойно скачивают файл, а дальше — дело техники.
Защита от Follina
Спустя почти месяц после первого сабмита Microsoft выпустили обновление безопасности, закрывающее уязвимость. Патч входит в июньский пак обновлений Windows. До этого было предложение частичное решение, закрывающее CVE-2022–30190. Оно заключалось в отключении протокола MSDT:
Запустить командную строку с правами администратора.
Для резервного копирования изменяемых ключей реестра выполнить команду reg export HKEY_CLASSES_ROOT\ms-msdt filename.
Запустить команду отключения поддержки URL MSDT: reg delete HKEY_CLASSES_ROOT\ms-msdt /f.
Почему же Follina? Название для CVE-2022–30190 придумал Кевин Бомонт, он расшифровал образец кода, полученного с VirusTotal, в который входил RAR-архив с именем 05–2022–0438.rar, а 0438 — это телефонный код итальянского города Follina.
«Официальное» лого уязвимости
К паранойи осведомленности сотрудников теперь добавилось знание о вредоносных .doc файлах. Несмотря на закрытие уязвимости, неизвестно, как злоумышленники ещё смогут эксплуатировать ms-msdt URL, в очередной раз можно порекомендовать не скачивать непонятные письма, полученные с частных электронных почтовых адресов.
Сигнатурное правило для обнаружения Follina
Специалисты компании «Перспективный мониторинг» разработали сигнатурное правило для обнаружения CVE-2022–30190.
alert tcp any $HTTP_PORTS → $HOME_NET any (msg: «AM EXPLOIT Microsoft Diagnostic Tool RCE via PCWDiagnostic aka Follina (CVE-2022–30190)»; flow: established, from_server; file_data; content: «location.href»; distance:0; content:»|22|ms-msdt|3A|»; distance:0; content:»/id»; content: «PCWDiagnostic»; content:»/skip»; content: «force»; content:»/param»; content: «IT_RebrowseForFile=?»; content: «IT_LaunchMethod=ContextMenu»; content: «IT_BrowseForFile=»; content:»$(»; distance:0; content:».exe»; distance:0; reference: url, huntress.com/blog/microsoft-office-remote-code-execution-follina-msdt-bug; reference: url, github.com/JMousqueton/PoC-CVE-2022–30190; reference: cve,2022–30190; classtype: client-side-exploit; sid:3202452; rev:2.
Follina состоит из 2 уязвимостей:
Переадресация на внешний ресурс при просмотре документа.
Удаленное исполнение команд через MSDT.
Сигнатура реагирует на выполнение кода в HTML-скрипте, содержащегося на адресуемой странице. В теле скрипта используется location.href для обращения к msdt:
content: «location.href»; distance:0; content:»|22|ms-msdt|3A|».
Далее перечисляются параметры обращения:
content:»/id»; content: «PCWDiagnostic»; content:»/skip»; content: «force»; content:»/param»; content: «IT_RebrowseForFile=?»; content: «IT_LaunchMethod=ContextMenu»; content: «IT_BrowseForFile=».
После IT_BrowseForFile= вводятся минимум 2 /…/, иначе скрипт не сработает. После чего идет $ (передаваемая программа), но без использования пробелов, поскольку они сломают процесс. Также передаваемая команда обязательно должна оканчиваться на .exe.
Существуют вариации с передачей дополнительных параметров в base64, но экспертами с Huntress было установлено, что они избыточны.