Введение

В далеком 2020 году независимый исследователь Imre Rad опубликовал статью с уязвимостью в компоненте операционной системы Windows - msdt.exe (тот самый =) ). Microsoft посчитала найденную уязвимость недостаточно критичной, чтобы на нее реагировать. Однако после истории с Follina вендор решил выпустить патч, закрывающий уязвимость DogWalk.

Коротко о msdt.exe и пакетах диагностики

MSDT (Microsoft's Diagnostic Troubleshooting Wizard) - мастер диагностики и устранения проблем Windows, информация о работе msdt.exe. Если вы желаете использовать msdt.exe по назначению, то здесь список доступных пакетов для решения проблем в Windows.

Пакет устранения неисправностей состоит из следующих компонентов:

  • Манифест устранения неполадок- указывает на основные проблемы, которые может обнаружить пакет, и сценарии, используемые для их обнаружения, устранения и проверки их устранения. Расширение файла: .diagpkg.

  • Скрипты устранения неполадок - сценарии, используемые для определения наличия основной причины. Расширение файла: .ps1.

  • Скрипты разрешения - сценарии, используемые для устранения основной причины, обнаруженной сценарием устранения неполадок. Расширение файла: .ps1.

  • Скрипты проверки - сценарии, используемые для проверки того, смогли ли сценарии решить проблему. Расширение файла: .ps1.

  • Локализация ресурсов - строки локализованных ресурсов, используемые манифестом устранения неполадок и сценариями. Расширение файла: .psd1, .dll.mui.

Для удобства использования пакетов диагностики есть возможность создания файлов - DIAGCAB. DIAGCAB-файлы позволяют создать портативный архив, который будет использовать пакет диагностики размещенный на каком-либо ресурсе или включающий все файлы в себя.

Пакеты диагностики должны быть подписаны, чтобы пользователи msdt могли удостовериться в их подлинности. Пакеты, расположенные по пути %WINDIR%\diagnostics\system являются стандартными и не подлежат проверке сертификата.

Об уязвимости

Для описания уязвимости использовалась статья с Medium. Рассмотрим порядок запуска пакета диагностики, расположенного на удаленном ресурсе:

  1. Копирование файла во временную директорию, путь который известен заранее C:\Users\John Doe\AppData\Local\Temp\SDIAG_0636db01-fabd-49ed-bd1d-b3fbbe5fd0ca

  2. Проверка цифровой подписи пакета

  3. Если проверка подписи успешна, то запуск пакета диагностики

Для копирования пакета во временную директорию используется уязвимая функция SdpCopyDirectory из sdiageng.dll, код которой представлен ниже. Функция уязвима к Path Traversal.

TCHAR attackerControlledSourcePath[MAXPATH]; // this is the "user input"
 
 TCHAR tempDirectory[MAXPATH];
 GetTempPathW(MAXPATH, tempDirectory);
 
 TCHAR allFilesFromAttackerControlledSourcePath[MAXPATH];
 StringCchPrintfW(allFilesFromAttackerControlledSourcePath, MAXPATH,
 L"%s\\*.*", AttackerControlledSourcePath);
 hFind = FindFirstFile(allFilesFromAttackerControlledSourcePath, &FindFileData);
 
 do {
    TCHAR srcFile[MAXPATH];
    TCHAR dstFile[MAXPATH];
    StringCchPrintfW(srcFile, MAXPATH, L"%s\\%s",
 attackerControlledSourcePath, FindFileData.cFileName);
    StringCchPrintfW(dstFile, MAXPATH, L"%s\\%s", tempDirectory,
 FindFileData.cFileName);
 
    CopyFileW(srcFile, dstFile, TRUE);
 
 while (FindNextFile(hFind, &FindFileData) != 0);FindClose(hFind);

Мы можем определить имя файла, в пакете диагностики, следующим образом: ..\..\..\..\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\evil.exe, и закрепиться в директории автозагрузки.

Разбор таска LetsDefend: SOC174 - DogWalk 0-Day Activity

В LetsDefend есть два уровня тасков:

  • Security Analyst (кейсы для аналитиков 1-го уровня, по логам нужно определить является ли обнаруженная активность вредоносной)

  • Incident responder (кейсы ориентированы на реагирование, добавляется возможность подключаться к машинам по VNC и проводить анализ артефактов)

Также доступны следующие источники событий:

  • сетевые соединения

  • электронная почта

  • список запущенных процессов

  • выполняемые команды в терминале

  • сетевые соединения на хосте

  • история браузера

  • подключиться к хосту через VNC

Исходные данные

Нам известно следующее:

  • имя машины/ip: Jack-dev-server / 172.16.17.81

  • название правила, которое сработало: SOC174 - DogWalk 0-Day Activity

  • ID CVE: CVE-2022-34713

  • записка от L1 SOC: I saw that the diagcab file was run with msdt.exe at 11.08.2022 07:58. But I did not understand how this happened and what happened next.

  • причина реагирования: Running a diagcab file with msdt.exe

Описание алерта Let's Defend
Описание алерта Let's Defend

Просмотр электронной почты

Я предположил, что вредоносный файл был доставлен вложением в электронном письме.

Тело сообщения, которое получил пользователь Jack Hanma
Тело сообщения, которое получил пользователь Jack Hanma

В теле письма мы видим ссылку hxxps://52e9-3-17-146-251[.]ngrok[.]io/config/hotfix895214.diagcab, которая содержит в доменном имени ngrok, и указывает на файл hotfix895214.diagcab. Следующим шагом нужно убедиться, получилось ли пользователю установить сетевое соединение с вредоносным сервером.

Сетевые соединения

В сетевых подключениях, связанных с нашим хостом мы видим четыре сессии:

Сетевые соединения, связанные с IP: 172.16.17.81
Сетевые соединения, связанные с IP: 172.16.17.81

1-2 - пользователь запросил A-запись для доменного имени 52e9-3-17-146-251.ngrok.io и получил ответ от DNS-сервера:8.8.8.8 - A: 3.134.39.220

3 - пользователь запросил директорию /package

4 - пользователь запросил файл /AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup/calc.exe

Из вышесказанного делаем вывод, что пользователь перешел в директорию /package и загрузил файл /AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup/calc.exe

Анализ событий на хосте

Первым делом я проверил журнал Microsoft-Windows-Sysmon/Operational. События, связанные с Image = msdt.exe:

<QueryList>
  <Query Id="0" Path="Microsoft-Windows-Sysmon/Operational">
    <Select Path="Microsoft-Windows-Sysmon/Operational">*[EventData[Data[@Name='Image'] and Data='C:\Windows\System32\msdt.exe']]</Select>
  </Query>
</QueryList>

В результате мы видим четыре события:

События, связанные с Image=msdt.exe
События, связанные с Image=msdt.exe

В событии ниже мы видим, что chrome запустил процесс msdt.exe с параметрами /cab "C:\Users\LetsDefend\Downloads\hotfix895214.diagcab. Теперь мы знаем, что файл с пакетом диагностики находился в директории Downloads пользователя LetsDefend.

Описание запуска процесса msdt.exe
Описание запуска процесса msdt.exe

В следующих двух событиях мы видим, что процесс msdt.exe создал два файла в директории автозагрузки:

Событие создания файла
Событие создания файла
Событие создания файла
Событие создания файла

Проверим события chrome.exe:

<QueryList>
  <Query Id="0" Path="Microsoft-Windows-Sysmon/Operational">
    <Select Path="Microsoft-Windows-Sysmon/Operational">*[EventData[Data[@Name='Image'] and Data='C:\Program Files\Google\Chrome\Application\chrome.exe']]</Select>
  </Query>
</QueryList>
Убедились в том, что пакет диагностики загружали через chrome.exe
Убедились в том, что пакет диагностики загружали через chrome.exe

Также убедимся в наличии файлов в директории автозагрузки:

Файлы, расположенные в директории автозагрузки
Файлы, расположенные в директории автозагрузки

Командой certutil.exe -hashfile .\<имя файла> MD5 получим хеш-суммы файлов и проверим их репутацию на virustotal.

Репутация файла cmd.exe
Репутация файла cmd.exe

Анализ пакета диагностики

С помощью 7zip откроем пакет диагностики hotfix895214.diagcab.

Конфигурационный файл внутри пакета диагностики
Конфигурационный файл внутри пакета диагностики

Посмотрим содержимое файла custom.diagcfg

Содержимое файла custom.diagcfg
Содержимое файла custom.diagcfg

Обратим внимание на ключ Package, который указывает на расположение файлов пакета диагностики:

\\52e9-3-17-146-251.ngrok.is@ssl\DavWWWRoot\Package

В директории выше должен располагаться файл с именем ..\..\..\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\calc.exe2. К сожалению туннель ngrok больше недоступен.

Sigma Rules

В репозитории Sigma были правила основанные на создание процесса msdt.exe или загрузки модуля sdiageng.dll.
Добавлено правило детектирующие создание файлов в директории автозагрузки

Правила Sigma для детектирования аномалий msdt.exe:

sigma/rules/windows/file_event/file_event_win_msdt_autorun.yml
sigma/rules/windows/image_load/image_load_msdt_sdiageng.yml
sigma/rules/windows/process_creation/proc_creation_win_lolbins_by_office_applications.yml
sigma/rules/windows/process_creation/proc_creation_win_msdt_susp_cab_options.yml
sigma/rules/windows/process_creation/proc_creation_win_msdt_diagcab.yml:description
sigma/rules/windows/process_creation/proc_creation_win_possible_applocker_bypass.yml
sigma/rules/windows/process_creation/proc_creation_win_lolbin_msdt_answer_file.yml
sigma/rules/windows/process_creation/proc_creation_win_msdt.yml:description
sigma/rules/windows/process_creation/proc_creation_win_msdt_susp_parent.yml
sigma/rules/windows/process_creation/proc_creation_win_renamed_msdt.yml
sigma/rules/windows/process_creation/proc_creation_win_outlook_shell.yml

Комментарии (0)