SOC Prime Bias: Критичний

09 Apr 2026 17:52

ChainShell: MuddyWater та російський MaaS

Author Photo
Ruslan Mikhalov Керівник досліджень загроз у SOC Prime linkedin icon Стежити
ChainShell: MuddyWater та російський MaaS
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Резюме

MuddyWater, іранський актор шпигунства, використовує російську платформу шкідливого ПЗ як послугу TAG-150 для доставки CastleRAT та новішого агенту C2 на базі Node.js з підтримкою блокчейну, відстежуваного як ChainShell, проти ізраїльських та інших цінних цілей. Активність підтримується відкритим, неправильно налаштованим вебсервером C2, скриптом для розгортання PowerShell (reset.ps1) і PE-шкідливими програмами, замаскованими за допомогою стеганографії. Кілька випусків CastleRAT (включаючи Build 120 і Build 13) містять спільні жорстко закодовані ідентифікатори, які вказують на те ж саме походження MaaS. Задня інфраструктура, вочевидь, кампанізована, використовуючи спільні домени (наприклад, serialmenot.com) та креденціали JWT для кожної операції для розділення доступу та відстеження по всіх розгортаннях.

Розслідування

JUMPSEC переглянула відкритий хост C2, відновила 15 зразків шкідливого ПЗ і пов’язала логіку розгортання reset.ps1 з доставкою як ChainShell, так і кількох білдів CastleRAT. Дослідники також співвіднесли сертифікати підпису коду (Amy Cherne і Donald Gay), які бачили в відомих інструментах MuddyWater, з інсталятором TAG-150 MSI, формуючи високодостовірний слід атрибуції. Додатковий перетин спостерігався в зразках в жорстко закодованих маркерах білдів, знову використовуваних іменуванням запланованих завдань і ID кампанії JWT, вбудованих в інструмент та сторонні артефакти сервера.

Пом’якшення

Слідкуйте за reset.ps1, пов’язаними запланованими завданнями та унікальними артефактами mutex або шляху до файлів, пов’язаними з CastleRAT та ChainShell. Блокуйте відому інфраструктуру TAG-150, включаючи serialmenot.com, ttrdomennew.com та sharecodepro.com, і ретельно перевіряйте встановлення компонентів Node.js, кероване PowerShell. Застосовуйте суворі контролі підпису коду та перевіряйте підозрілі сертифікати за відомими підписними матеріалами MuddyWater.

Реакція

Якщо виявлено індикатори, ізолюйте уражені пункти, захоплюйте повні образи дисків і пам’яті, і перевіряйте на залишки CastleRAT та ChainShell. відкличте або недовіряйте скомпрометовані сертифікати підпису коду, скиньте уражені креденціали та координуйте звітування із відповідними національними CERT. Огляд телеметрії мережі на шаблони доступу до Ethereum RPC та використання JWT, пов’язане з командою серцерідного налагодження serialmenot.com.

"graph TB %% Class definitions classDef action fill:#99ccff classDef tool fill:#ffcc99 classDef technique fill:#c2f0c2 classDef malware fill:#ff9999 classDef process fill:#ffd966 %% Nodes action_phishing["<b>Диія</b> – <b>T1566.002 Фішинг</b><br/>Шкідливий документ з макросами (ClickFix/BatClickFix), надісланий електронною поштою"] class action_phishing action action_user_exec["<b>Диія</b> – <b>T1204.002 Виконання користувача</b><br/>Жертва відкриває документ, який запускає PowerShell"] class action_user_exec action tool_powershell["<b>Інструмент</b> – <b>T1059.001 PowerShell</b><br/>Інтерпретатор скриптів, що використовується для завантаження завантажувача"] class tool_powershell tool tool_cmstp["<b>Інструмент</b> – <b>T1218.003 CMSTP</b><br/>Системна проксі-виконання для завантаження шкідливих INF"] class tool_cmstp tool technique_dll_sideload["<b>Техніка</b> – <b>T1574.002 DLL Сайдлоадінг</b><br/>Шкідливі DLL завантажуються через INF"] class technique_dll_sideload technique technique_dll_hijack["<b>Техніка</b> – <b>T1574.005 Захоплення потоку виконання</b><br/>Шкідливі userenv.dll та xmllite.dll розміщені поруч з легітимними бінарними файлами"] class technique_dll_hijack technique technique_scheduled_task["<b>Техніка</b> – <b>T1543.001 Створити або змінити системний процес</b><br/>Заплановані завдання (VirtualSmokestGuy120/666) для стійкості"] class technique_scheduled_task technique technique_steganography["<b>Техніка</b> – <b>T1027.003 Стеганографія</b><br/>Рідні PE завантаження, приховані всередині зображень JPEG"] class technique_steganography technique technique_embedded_payload["<b>Техніка</b> – <b>T1027.009 Вбудовані завантаження</b><br/>Додаткові завантаження, ще більш приховані"] class technique_embedded_payload technique technique_data_obfusc["<b>Техніка</b> – <b>T1001 Обфускація даних</b><br/>Шифрування AES-256-CBC трафіку C2"] class technique_data_obfusc technique technique_uac_bypass["<b>Техніка</b> – <b>T1548.002 Зловживання механізмом контролю підвищення привілеїв</b><br/>Виконання CMSTP обходить UAC"] class technique_uac_bypass technique technique_steal_cookie["<b>Техніка</b> – <b>T1539 Викрадення сеансових cookies</b><br/>Декодування cookies Chrome v127+ bound to app"] class technique_steal_cookie technique technique_forge_cookie["<b>Техніка</b> – <b>T1606.001 Підробка веб-креденціалів</b><br/>Використання вилучених cookies для аутентифікації"] class technique_forge_cookie technique technique_alt_auth["<b>Техніка</b> – <b>T1550.004 Використання альтернативного матеріалу аутентифікації</b><br/>Зловживання cookies для латерального переміщення"] class technique_alt_auth technique technique_vnc["<b>Техніка</b> – <b>T1021.005 Віддалені послуги VNC</b><br/>Прихований VNC надає невидимий контроль за робочим столом"] class technique_vnc technique technique_remote_service["<b>Техніка</b> – <b>T1021 Віддалені послуги</b><br/>Додаткове латеральне переміщення через віддалені сервіси"] class technique_remote_service technique technique_dead_drop["<b>Техніка</b> – <b>T1102.001 Розв’язувач dead drop</b><br/>Адреса C2, розв’язана зі смарт-контракту Ethereum"] class technique_dead_drop technique technique_websocket_bidirectional["<b>Техніка</b> – <b>T1102.002 Двосторонній WebSocket</b><br/>Канал WebSocket для обміну командами"] class technique_websocket_bidirectional technique technique_websocket_oneway["<b>Техніка</b> – <b>T1102.003 Односторонній зв’язок</b><br/>Резервний шлях C2"] class technique_websocket_oneway technique technique_web_protocol["<b>Техніка</b> – <b>T1071.001 Протоколи веб-програмного рівня</b><br/>Трафік через WebSocket за допомогою HTTPS"] class technique_web_protocol technique malware_chainshell["<b>Шкідливе ПЗ</b> – <b>Назва</b>: ChainShell<br/>Оркестратор завантажень, що обробляє C2, шифрування та латеральний рух"] class malware_chainshell malware %% Connections action_phishing –>|веде до| action_user_exec action_user_exec –>|виконує| tool_powershell tool_powershell –>|завантажує| tool_cmstp tool_cmstp –>|використовує| technique_dll_sideload tool_cmstp –>|обходить| technique_uac_bypass technique_dll_sideload –>|включає| technique_dll_hijack technique_dll_hijack –>|підтримує| technique_scheduled_task technique_scheduled_task –>|створює| malware_chainshell malware_chainshell –>|містить| technique_steganography malware_chainshell –>|містить| technique_embedded_payload malware_chainshell –>|шифрує| technique_data_obfusc malware_chainshell –>|вкрадає| technique_steal_cookie technique_steal_cookie –>|включає| technique_forge_cookie technique_forge_cookie –>|включає| technique_alt_auth technique_alt_auth –>|включає| technique_vnc technique_vnc –>|використовує| technique_remote_service malware_chainshell –>|розв’язує C2 через| technique_dead_drop technique_dead_drop –>|спілкується через| technique_websocket_bidirectional technique_websocket_bidirectional –>|зворотний до| technique_websocket_oneway technique_websocket_bidirectional –>|використовує протокол| technique_web_protocol "

Потік атаки

Детекції

Можлива спроба виявлення мови локальної системи (через cmdline)

Команда SOC Prime
07 квітня 2026

Можлива спроба виявлення мови локальної системи (через powershell)

Команда SOC Prime
07 квітня 2026

Виконання NodeJS з незвичайного розташування (через cmdline)

Команда SOC Prime
07 квітня 2026

Можлива спроба зловживання Publicnode Ethereum як каналом C2 (через dns_query)

Команда SOC Prime
07 квітня 2026

IOC (SourceIP) для виявлення: ChainShell: MuddyWater та Російське MaaS

Правила AI SOC Prime
07 квітня 2026

IOCs (DestinationIP) для виявлення: ChainShell: MuddyWater та Російське MaaS

Правила AI SOC Prime
07 квітня 2026

IOC (HashSha256) для виявлення: ChainShell: MuddyWater та Російське MaaS

Правила AI SOC Prime
07 квітня 2026

Виявлення зв’язку CastleRAT C2 за певними портами [Windows Network Connection]

Правила AI SOC Prime
07 квітня 2026

Виявлення розгортання ChainShell через Node.js у операціях MuddyWater [Створення процесу Windows]

Правила AI SOC Prime
07 квітня 2026

Виявлення PowerShell-скрипту Reset.ps1 для розгортання ChainShell [Windows Powershell]

Правила AI SOC Prime
07 квітня 2026

Виконання симуляції

Передумови: телеметрія та перевірка бази повинні пройти.

  • Опис атаки та команди:

    1. Етап 1 – Підготувати простий сервер C2 (запустити на машині нападника або контрольованій ВМ). Сервер слухає на порту 9999 та відображає отримані дані.

    2. Етап 2 – На цільовому комп’ютері з Windows запустити задній хід PowerShell який відкриває TCP-з’єднання з сервером C2 на порту 9999. Завантаження використовує рідні класи .NET, щоб уникнути створення окремого виконуваного файлу, імітуючи підхід «жити за рахунок системи».

    3. Етап 3 – Необов’язковий перехід через проксі: Спочатку скрипт PowerShell звертається до локального проксі HTTP (слухаючи на 127.0.0.1:8080), який переправляє трафік TCP до віддаленого сервера C2, демонструючи, що порт призначення не змінився.

    Ці кроки створюють події на міжмережевому екрані з DestinationPort = 9999, задовольняючи правило Sigma.

  • Сценарій регресійного тестування:

    # -------------------------------------------------
    # Симуляція CastleRAT-подібного C2 – PowerShell
    # -------------------------------------------------
    # 1. Визначити адресу сервера C2 (замініть на ваш тестовий IP)
    $c2Ip = "10.0.0.50"
    $c2Port = 9999
    
    # 2. НЕОБОВ'ЯЗКОВО: Визначити локальний проксі (якщо ви хочете протестувати перехід через проксі)
    $useProxy = $false
    $proxyHost = "127.0.0.1"
    $proxyPort = 8080
    
    # 3. Функція для відкриття потоку TCP (напряму або через проксі)
    function Invoke-C2Connection {
        param (
            [string]$destIp,
            [int]$destPort,
            [bool]$viaProxy
        )
        if ($viaProxy) {
            # Проста HTTP CONNECT тунель
            $proxyUri = "http://$proxyHost`:$proxyPort"
            $client = New-Object System.Net.Sockets.TcpClient($proxyHost,$proxyPort)
            $stream = $client.GetStream()
            $connectRequest = "CONNECT $destIp`:$destPort HTTP/1.1`r`nHost: $destIp`r`n`r`n"
            $bytes = [System.Text.Encoding]::ASCII.GetBytes($connectRequest)
            $stream.Write($bytes,0,$bytes.Length)
            # Скинути відповідь проксі
            $buffer = New-Object byte[] 1024
            $null = $stream.Read($buffer,0,$buffer.Length)
            Write-Host "[+] Підключення через проксі встановлено"
            return $stream
        } else {
            $client = New-Object System.Net.Sockets.TcpClient($destIp,$destPort)
            Write-Host "[+] Пряме з’єднання TCP встановлено"
            return $client.GetStream()
        }
    }
    
    # 4. Відкрийте з'єднання
    $stream = Invoke-C2Connection -destIp $c2Ip -destPort $c2Port -viaProxy:$useProxy
    
    # 5. Відправте простий маяк
    $beacon = "CastleRAT Маяк $(Get-Date -Format o)`n"
    $bytes = [System.Text.Encoding]::UTF8.GetBytes($beacon)
    $stream.Write($bytes,0,$bytes.Length)
    Write-Host "[+] Маяк відправлено"
    
    # 6. Утримуйте відкритий канал на короткий період (імітувати стійкість)
    Start-Sleep -Seconds 15
    
    # 7. Очистка
    $stream.Close()
    Write-Host "[+] З’єднання закрито"
  • Команди очищення:

    # Переконайтеся, що будь-які залишені TCP-з'єднання закриті
    Get-NetTCPConnection -RemotePort 9999 -State Established | ForEach-Object {
        try {
            $proc = Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue
            if ($proc) { Stop-Process -Id $proc.Id -Force }
        } catch {}
    }
    
    # Видаліть будь-який тимчасовий слухач проксі, якщо він був запущений локально
    Stop-Process -Name "python" -Force -ErrorAction SilentlyContinue

Додаткові спостереження та рекомендації з покращення

  1. Збагачення виявлення на основі портів: Об’єднайте перевірку порту з відомими зловмисними IP/доменами C2, TLS-фінгерпринтингом або евристикою аномального обсягу трафіку.
  2. Список дозволених легітимних служб: Створіть список винятків для застосунків, які законно використовують порти 9999 або 8888 (наприклад, певні бази даних або інструменти управління).
  3. Базовий контекст поведінки: Розгорніть статистичні моделі для відмічення низькочастотних вихідних з’єднань до високоризикових портів, що надходять з не серверних кінцевих точок.
  4. Контекст процесу: Корелюйте події на міжмережевому екрані з вихідним процесом (ImageFileName, CommandLine). Зв’яжіть з’єднання, зроблені несподіваними процесами (наприклад, powershell.exe, cmd.exe).

Застосовуючи ці пом’якшення, стійкість правила може бути підвищена з поточних 2 до 4-5 діапазонів, значно знижуючи кількість хибних спрацьовувань і зберігаючи виявлення реального трафіку CastleRAT C2.