ChainScript: Відстеження Node.js RAT через блокчейн
Detection stack
- AIDR
- Alert
- ETL
- Query
Резюме
ChainScript – це нещодавно виявлений віддалений доступ до трояну (RAT) на основі Node.js, що використовує децентралізовану блокчейн-інфраструктуру для виявлення команд і керування (C2). Шкідливе програмне забезпечення використовує техніку EtherHiding, запитуючи смарт-контракт Polygon для динамічного визначення активних кінцевих точок WebSocket і швидкої зміни інфраструктури. Його можливості включають інтерактивні оболонки, маніпулювання файлами та розвідку гаманця криптовалют.
Розслідування
Група Blackpoint’s Adversary Pursuit Group (APG) виявила ChainScript під час розслідування активності ClickFix, що включала зловмисні пакети Windows Installer. Аналітики спостерігали за компонентами зловмисного ПЗ, розміщеними в декількох каталогах з Microsoft-тематикою та смарт-контрактом Polygon, використовуваним як дозвіл. Розслідування показало, що атакуючий автоматизує розгортання контрактів-дозволів разом зі збірками шкідливого програмного забезпечення для забезпечення безпроблемних переходів C2.
Пом’якшення
Організації повинні зменшити шляхи виконання ClickFix, відключивши діалогове вікно Windows Run там, де воно не потрібне, та обмеживши встановлення MSI з каталогів, доступних для запису користувача. Команди безпеки повинні моніторити незвичні відносини процесів, особливо msiexec.exe створює wscript.exe або PowerShell. Користувачів слід навчати розпізнавати соціальну інженерію, яка запитує вручне виконання команд через Win+R.
Реагування
Якщо виявлено активність ChainScript, уражену систему слід негайно ізолювати, щоб запобігти бічному переміщенню або ексфільтрації даних через інтерактивну оболонку. Відповідачі мають виконати повний судовий перегляд вторинних навантажень та несанкціонованої стійкості в запланованих задачах або ключах реєстру Run. Потенційно відкриті облікові дані також слід змінити, особливо ті, що пов’язані з розширеннями браузера або локальними криптовалютними гаманцями.
Потік атаки
Ми все ще оновлюємо цю частину.
Визначення загроз
Можливі точки стійкості [ASEPs – Software/NTUSER Hive] (через registry_event)
Можливість виконання через приховані командні рядки PowerShell (через cmdline)
Виконання двійкового файлу NodeJS з незвичайного місця (через cmdline)
Підозрілі дочірні процеси NodeJS [Windows] (через cmdline)
LOLBAS WScript / CScript (через process_creation)
Можливе створення запланованого завдання (через powershell)
Підозріле заплановане завдання (через audit)
Індикатори компрометації (HashSha256) для виявлення: ChainScript: Відстеження Node.js RAT через блокчейн
Виявлення інфраструктури C2 на основі блокчейну для ChainScript [Підключення до мережі Windows]
Виявлення виконання ChainScript RAT через PowerShell [Windows PowerShell]
Виявлення виконання ChainScript Node.js RAT через Msiexec і Wscript [Створення процесу Windows]
Виконання симуляції
-
Опис атаки та команди: Атакуючий розгортає платіжне навантаження на основі Node.js, яке призначене для імітації ChainScript. Мета – виявлення інфраструктури C2 шляхом запиту публічної кінцевої точки Ethereum RPC. Скрипт ініціює підключення WebSocket та відправляє JSON-RPC
eth_callзапит. Критично, запит включає специфічний селектор функцій0x4ab7874eу межах навантаження. Ця дія спрямована на імітацію фази “виявлення” життєвого циклу шкідливого програмного забезпечення, коли адреса C2 вилучається зі смарт-контракту в блокчейні. -
Скрипт для регресійного тестування:
# Симуляційний скрипт для імітації виявлення блокчейну ChainScript через WebSocket # Це вимагає середовища Node.js або інструменту, здатного відправляти специфічні WebSocket JSON-RPC навантаження. # Для цієї симуляції ми використовуємо скрипт PowerShell для відправки сирого навантаження. $wsUri = "wss://eth-mainnet.g.alchemy.com/v2/YOUR_API_KEY" # Використовуємо заміщені кінцеві точки RPC $ws = New-Object System.Net.WebSockets.ClientWebSocket $ct = New-Object System.Threading.CancellationToken try { Write-Host "[+] Підключення до WebSocket RPC..." $connectTask = $ws.ConnectAsync($wsUri, $ct) $connectTask.Wait() Write-Host "[+] З'єднання встановлено." # Специфічне навантаження, що містить селектор функцій ChainScript $payload = '{ "jsonrpc":"2.0", "method":"eth_call", "params":[{ "to":"0x742d35Cc6634C0532925a3b844Bc454e4438f44e", "data":"0x4ab7874e0000000000000000000000000000000000000000000000000000000000000000" }], "id":1 }' $bytes = [System.Text.Encoding]::UTF8.GetBytes($payload) $segment = New-Object ArraySegment[Byte] -ArgumentList @(,$bytes) Write-Host "[+] Відправка навантаження виявлення ChainScript (eth_call + 0x4ab7874e)..." $sendTask = $ws.SendAsync($segment, [System.Net.WebSockets.WebSocketMessageType]::Text, $true, $ct) $sendTask.Wait() Write-Host "[+] Навантаження відправлено." } catch { Write-Error "[-] Симуляція не вдалася: $($_.Exception.Message)" } finally { if ($ws.State -eq 'Open') { $ws.CloseAsync([System.Net.WebSockets.WebSocketCloseStatus]::NormalClosure, "Закривання", $ct).Wait() } $ws.Dispose() Write-Host "[+] Очищення завершено." } -
Команди очищення:
# Скриптом не вносяться стійкі зміни. # Переконайтесь, що будь-які тимчасові процеси Node.js або локальні файли слухачів видалено. Stop-Process -Name "node" -ErrorAction SilentlyContinue Remove-Item -Path "$env:TEMPchainscript_sim.tmp" -ErrorAction SilentlyContinue