Разбор таска Let's Defend. DogWalk 0-Day Activity
Введение
В далеком 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. Рассмотрим порядок запуска пакета диагностики, расположенного на удаленном ресурсе:
Копирование файла во временную директорию, путь который известен заранее C:\Users\John Doe\AppData\Local\Temp\SDIAG_0636db01-fabd-49ed-bd1d-b3fbbe5fd0ca
Проверка цифровой подписи пакета
Если проверка подписи успешна, то запуск пакета диагностики
Для копирования пакета во временную директорию используется уязвимая функция 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
Просмотр электронной почты
Я предположил, что вредоносный файл был доставлен вложением в электронном письме.
В теле письма мы видим ссылку hxxps://52e9-3-17-146-251[.]ngrok[.]io/config/hotfix895214.diagcab, которая содержит в доменном имени ngrok, и указывает на файл hotfix895214.diagcab. Следующим шагом нужно убедиться, получилось ли пользователю установить сетевое соединение с вредоносным сервером.
Сетевые соединения
В сетевых подключениях, связанных с нашим хостом мы видим четыре сессии:
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>
В результате мы видим четыре события:
В событии ниже мы видим, что chrome запустил процесс msdt.exe с параметрами /cab "C:\Users\LetsDefend\Downloads\hotfix895214.diagcab. Теперь мы знаем, что файл с пакетом диагностики находился в директории Downloads пользователя LetsDefend.
В следующих двух событиях мы видим, что процесс 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>
Также убедимся в наличии файлов в директории автозагрузки:
Командой certutil.exe -hashfile .\<имя файла> MD5 получим хеш-суммы файлов и проверим их репутацию на virustotal.
Анализ пакета диагностики
С помощью 7zip откроем пакет диагностики hotfix895214.diagcab.
Посмотрим содержимое файла 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