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

05 Jan 2026 19:10

Новий Вірус VVS Stealer націлився на акаунти Discord через обфусцированный код Python

Author Photo
Ruslan Mikhalov Chief of Threat Research at SOC Prime linkedin icon Стежити
Новий Вірус VVS Stealer націлився на акаунти Discord через обфусцированный код Python
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Резюме

VVS Stealer – це новий інформаційний крадій, написаний на Python, який продається в Telegram. Він обфусцьований за допомогою Pyarmor, упакований з PyInstaller і зберігається за допомогою папки автозавантаження Windows. Шкідливе програмне забезпечення збирає токени Discord, облікові дані браузера, куки, історію, паролі і скріншоти. Воно також може впроваджувати шкідливий JavaScript-код, щоб захопити активні сесії Discord.

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

Unit 42 з Palo Alto Networks розкрило це шкідливе програмне забезпечення, зазначивши, що воно пропонується на продаж з квітня 2025 року. Дослідники описали техніку обфускації, модель поширення і функціональність, включаючи крадіжку облікових даних та ін’єкцію в Discord. Звіт пов’язує інструмент з франкомовними зловмисниками, активними в Telegram-групах, що сконцентровані на крадіжках.

Захист

Організації повинні контролювати невідомі виконувані файли PyInstaller і неочікувані ярлики в папці автозавантаження. Запровадьте правила виявлення для обфускованих Python скриптів і підозрілих JavaScript навантажень. Застосуйте багато-факторну автентифікацію для облікових записів Discord і браузера і обмежте адміністративні привілеї, які можуть бути використані для збору облікових даних.

Реакція

Якщо виявлено VVS Stealer, ізолюйте уражену кінцеву точку, зберіть пам’ять та артефакти файлів і вилучте IOCs. Видаліть шкідливий запис автозавантаження, завершите будь-які ін’єктовані процеси Discord, і невідкладно змініть паролі для скомпрометованих облікових записів. Проведіть повне судово-експертне дослідження, щоб знайти додаткові вкрадені облікові дані і забезпечити блокування віддаленої C2 інфраструктури.

“graph TB %% Class definitions classDef action fill:#99ccff classDef malware fill:#ff9999 classDef tool fill:#cccccc classDef technique fill:#ffff99 %% Nodes mal_vvs_stealer[“<b>Шкідливе програмне забезпечення</b> – <b>VVS Stealer</b><br /><b>Опис</b>: Інструмент для викрадення інформації, упакований за допомогою PyInstaller та обфускований з використанням PyArmor.”] class mal_vvs_stealer malware tool_pyinstaller[“<b>Інструмент</b> – <b>PyInstaller</b><br /><b>Опис</b>: Засіб для збірки Python-додатків в самостійні виконувані файли.”] class tool_pyinstaller tool tool_pyarmor[“<b>Інструмент</b> – <b>PyArmor</b><br /><b>Опис</b>: Обфускує байт-код Python для приховання шкідливої логіки.”] class tool_pyarmor tool tech_T1027[“<b>Техніка</b> – <b>T1027 Обфусковані файли або інформація</b><br /><b>Опис</b>: Зловмисники використовують обфускацію для приховання шкідливого коду.”] class tech_T1027 technique action_download_js[“<b>Дія</b> – Завантаження додаткового JavaScript-коду”] class action_download_js action tech_T1027_006[“<b>Техніка</b> – <b>T1027.006 HTML Smuggling</b><br /><b>Опис</b>: Вбудовування шкідливого коду в HTML, щоб обійти захист.”] class tech_T1027_006 technique tech_T1505[“<b>Техніка</b> – <b>T1505 Серверна компонент Софтвера</b><br /><b>Опис</b>: Встановлення додаткових серверних компонентів для підтримки шкідливої активності.”] class tech_T1505 technique action_persistence[“<b>Дія</b> – Встановлення стійкості через папку автозавантаження”] class action_persistence action tech_T1037_005[“<b>Техніка</b> – <b>T1037.005 Елементи автозавантаження</b><br /><b>Опис</b>: Розміщення виконуваних файлів у папці автозавантаження користувача для запуску при вході.”] class tech_T1037_005 technique tech_T1547[“<b>Техніка</b> – <b>T1547 Автозапуск при завантаженні або вході</b><br /><b>Опис</b>: Реєстрація програм для автоматичного запуску при завантаженні або вході.”] class tech_T1547 technique action_fake_error[“<b>Дія</b> – Відображення підробного спливаючого повідомлення про фатальну помилку”] class action_fake_error action tech_T1562_011[“<b>Техніка</b> – <b>T1562.011 Підробка попереджень безпеки</b><br /><b>Опис</b>: Відображення підроблених попереджень безпеки для обману користувачів.”] class tech_T1562_011 technique action_screenshot[“<b>Дія</b> – Захоплення зображення екрана”] class action_screenshot action tech_T1113[“<b>Техніка</b> – <b>T1113 Захоплення екрана</b><br /><b>Опис</b>: Захоплення знімків екрану робочого столу жертви.”] class tech_T1113 technique action_browser_harvest[“<b>Дія</b> – Збирання даних з браузера (кукі, паролі, історія)”] class action_browser_harvest action tech_T1555_003[“<b>Техніка</b> – <b>T1555.003 Дані для входу з веббраузерів</b><br /><b>Опис</b>: Екстракція збережених даних для входу та кукі з браузерів.”] class tech_T1555_003 technique action_discord_hijack[“<b>Дія</b> – Завершення роботи клієнта Discord та ін’єкція шкідливого JavaScript”] class action_discord_hijack action tech_T1539[“<b>Техніка</b> – <b>T1539 Викрадення веб-сеансової кукі</b><br /><b>Опис</b>: Отримання активних веб-сеанових кукі з браузерів.”] class tech_T1539 technique tech_T1134_003[“<b>Техніка</b> – <b>T1134.003 Маніпуляція токенами доступу</b><br /><b>Опис</b>: Викрадення або імітація аутентифікаційних токенів.”] class tech_T1134_003 technique action_c2_exfil[“<b>Дія</b> – Вивід даних через веб-орієнтовану команду і контроль”] class action_c2_exfil action tech_T1071_001[“<b>Техніка</b> – <b>T1071.001 Протоколи прикладного рівня: Веб-протоколи</b><br /><b>Опис</b>: Використання стандартного веб-трафіку для команди і контролю.”] class tech_T1071_001 technique tech_T1102[“<b>Техніка</b> – <b>T1102 Веб-сервіс</b><br /><b>Опис</b>: Комунікація з віддаленими серверами через веб-сервіси для виведення даних.”] class tech_T1102 technique %% Connections mal_vvs_stealer u002du002d>|використовує| tech_T1027 mal_vvs_stealer u002du002d>|упаковується з| tool_pyinstaller mal_vvs_stealer u002du002d>|обфускується з| tool_pyarmor mal_vvs_stealer u002du002d>|завантажує| action_download_js action_download_js u002du002d>|використовує| tech_T1027_006 action_download_js u002du002d>|використовує| tech_T1505 action_download_js u002du002d>|встановлює стійкість через| action_persistence action_persistence u002du002d>|використовує| tech_T1037_005 action_persistence u002du002d>|використовує| tech_T1547 action_persistence u002du002d>|відображає| action_fake_error action_fake_error u002du002d>|використовує| tech_T1562_011 action_fake_error u002du002d>|захоплює| action_screenshot action_screenshot u002du002d>|використовує| tech_T1113 action_screenshot u002du002d>|збирає| action_browser_harvest action_browser_harvest u002du002d>|використовує| tech_T1555_003 action_browser_harvest u002du002d>|націлює Discord і ін’єктує JS| action_discord_hijack action_discord_hijack u002du002d>|використовує| tech_T1539 action_discord_hijack u002du002d>|використовує| tech_T1134_003 action_discord_hijack u002du002d>|виводить через| action_c2_exfil action_c2_exfil u002du002d>|використовує| tech_T1071_001 action_c2_exfil u002du002d>|використовує| tech_T1102 “

Потік атаки

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

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

Обґрунтування: цей розділ деталізує точне виконання техніки суперника (TTP), розроблене для активації правила виявлення. Команди та оповідання МАЮТЬ безпосередньо відповідати ідентифікованим TTPs та прагнути генерувати точну телеметрію, очікувану логікою виявлення. Абстрактні або не пов’язані приклади призведуть до неправильного діагнозу.

  • Атака та команди розповіді:
    Оппонент скомпрометував обліковий запис з низькими привілеями на робочій станції Windows. Використовуючи PowerShell-дроппер, вони запускають шкідливе виконуване у файлі, упаковане з PyInstaller (VVS_Stealer.exe), яке спочатку породжує процес з командним рядком, що містить рядок “PyInstaller”. Навантаження потім насильно завершує активний клієнт Discord, щоб підготувати сцену до ін’єкції крадіжки токенів. Всі дії відбуваються у контексті поточного користувача, генеруючи єдину Створення процесу подію, яка відповідає критеріям правила.

    Крок за кроком:

    1. Скопіюйте шкідливий пакет PyInstaller в %TEMP%.
    2. Виконайте його з командним рядком, який явно містить слово “PyInstaller”.
    3. Шкідливий бінарний файл внутрішньо викликає taskkill /IM Discord.exe /F щоб завершити Discord.
    4. Завершення генерує Створення процесу подію, де Image поле вирішує шлях виконуваного файлу Discord (C:Users<user>AppDataLocalDiscordapp-... Discord.exe) та оригінальна команда запуску все ще містять “PyInstaller”.
  • Скрипт регресійного тесту: Наступний PowerShell-скрипт відтворює точну телеметрію, необхідну для запуску правила виявлення. Він навмисно уникає будь-яких реальних шкідливих навантажень; замість цього, він запускає безпечний notepad.exe процес, але удає себе виконуваним файлом, упакованим з PyInstaller, шляхом вбудовування ключового слова в командний рядок. Він також завершує будь-який запущений процес Discord, щоб відобразити умову “Image endswith Discord.exe”.

    # -------------------------------------------------
    # Скрипт симуляції – активує правило Sigma #f63685c4‑feea‑431b‑a749‑55cf8661e6ac
    # -------------------------------------------------
    
    # 1. Переконайтеся, що Discord працює (необов'язково, щоб забезпечити завершення)
    $discordPath = "$env:LOCALAPPDATADiscordapp-1.0.9005Discord.exe"
    if (-Not (Get-Process -Name "Discord" -ErrorAction SilentlyContinue)) {
        Start-Process -FilePath $discordPath -WindowStyle Hidden
        Start-Sleep -Seconds 5
    }
    
    # 2. Запустіть тупиковий процес з "PyInstaller" у його командному рядку.
    #    Використовуючи notepad.exe як нешкідливий заповнювач.
    $dummyCmd = "C:WindowsSystem32notepad.exe"
    $cmdLine = "PyInstaller_dummy_execution -run $dummyCmd"
    Start-Process -FilePath $dummyCmd -ArgumentList $cmdLine -WindowStyle Hidden
    Write-Host "[+] Запущено тупиковий процес з ключовим словом PyInstaller."
    
    # 3. Негайно завершити Discord, щоб згенерувати подію образу Discord.exe.
    if (Get-Process -Name "Discord" -ErrorAction SilentlyContinue) {
        Stop-Process -Name "Discord" -Force
        Write-Host "[+] Discord.exe завершено."
    }
    
    # 4. Опціонально: після короткої затримки закрити вікно з блокнотом.
    Start-Sleep -Seconds 8
    Get-Process -Name "notepad" -ErrorAction SilentlyContinue | Stop-Process -Force
    Write-Host "[+] Очищення завершено."
  • Команди очищення: Переконайтеся, що не залишилося залишкових процесів.

    # Видаліть будь-які залишкові процеси з блокнотом
    Get-Process -Name "notepad" -ErrorAction SilentlyContinue | Stop-Process -Force
    
    # Перезапустіть Discord, якщо це необхідно для подальшої роботи тесту
    $discordPath = "$env:LOCALAPPDATADiscordapp-1.0.9005Discord.exe"
    if (-Not (Get-Process -Name "Discord" -ErrorAction SilentlyContinue)) {
        Start-Process -FilePath $discordPath
        Write-Host "[+] Discord перезапущено для нормальної роботи."
    }