SOC Prime Bias: Високий

14 Apr 2026 18:38

VIPERTUNNEL Python Backdoor: Глибокий аналіз

Author Photo
SOC Prime Team linkedin icon Стежити
VIPERTUNNEL Python Backdoor: Глибокий аналіз
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Резюме

У звіті детально аналізується VIPERTUNNEL, бекдор на основі Python, який забезпечує стійкість через заплановане завдання і використовує зловмисний sitecustomize.py для завантаження заплутаної DLL. DLL дешифрує і виконує багатоетапний компонент, що встановлює SOCKS5 проксі до зафіксованого C2 сервера через порт 443. Інфраструктура пов’язана з UNC2165 і EvilCorp і поділяє техніки заплутування з ShadowCoil, що краде облікові дані.

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

Дослідники вивчили вивід Autoruns, ідентифікували заплановане завдання 523135538 і відстежили виконання до C:ProgramDatacp49spythonw.exe і його модуля sitecustomize.py. Зворотній інжиніринг b5yogiiy3c.dll виявив багатошарове заплутування, процедури дешифрування та фінальний етап, що створює SOCKS5 тунель з використанням жорстко заданих облікових даних. Аналіз інфраструктури пов’язав кілька доменів та IP-адрес з кампанією та підкреслив використання фреймворка Pyramid C2.

Пом’якшення

Встановіть моніторинг кінцевих точок, який відстежує виконання pythonw.exe без аргументів, створення запланованих завдань з числовими іменами та наявність sitecustomize.py у несподіваних місцях. Блокуйте вихідний трафік на відомі C2 домени та порти 443/8000 з аномальними відповідями HTTP 401. Реалізуйте суворий контроль додатків, щоб запобігти завантаженню несанкціонованих модулів Python.

Відповідь

Сповіщення про створення підозрілого запланованого завдання та виконання pythonw.exe без скрипту. Карантинуйте уражені хости, збирайте дампи пам’яті та шукайте характерні імена класів і жорстко задані облікові дані. Анулюйте скомпрометовані облікові дані та зруйнуйте C2 інфраструктуру, вказану у звіті.

graph TB classDef technique fill:#ffcc99 classDef process fill:#c2f0c2 classDef tool fill:#ffeb99 classDef file fill:#d9d9d9 classDef component fill:#cce5ff classDef c2 fill:#f4b084 classDef credential fill:#ffe6e6 tech_persistence[“<b>Техніка</b> – T1053.005 Заплановане завдання : Персистентність<br/><b>Опис</b>: Створює або змінює заплановане завдання для виконання шкідливого коду за розкладом.”] class tech_persistence technique tech_obfuscation[“<b>Техніка</b> – T1027 Обфусковані файли або інформація<br/><b>Опис</b>: Використовує кодування, стиснення та криптографію для приховування коду.”] class tech_obfuscation technique tech_deobfuscate[“<b>Техніка</b> – T1140 Деобфускація / декодування<br/><b>Опис</b>: Декодує Base85 та інші перетворення для отримання наступного етапу коду.”] class tech_deobfuscate technique tech_compile[“<b>Техніка</b> – T1027.004 Компіляція після доставки<br/><b>Опис</b>: Компілює код у пам’яті через compile() та exec().”] class tech_compile technique tech_reflect[“<b>Техніка</b> – T1620 Рефлективне завантаження коду<br/><b>Опис</b>: Виконує код напряму в пам’яті без запису на диск.”] class tech_reflect technique tech_proxy_ext[“<b>Техніка</b> – T1090.002 Зовнішній проксі<br/><b>Опис</b>: Використання зовнішнього SOCKS5 проксі для перенаправлення трафіку.”] class tech_proxy_ext technique tech_proxy_int[“<b>Техніка</b> – T1090.001 Внутрішній проксі<br/><b>Опис</b>: Використання внутрішніх проксі-компонентів.”] class tech_proxy_int technique tech_tunnel[“<b>Техніка</b> – T1572 Тунелювання протоколу<br/><b>Опис</b>: Інкапсуляція трафіку в SOCKS5 тунель.”] class tech_tunnel technique tech_encrypted[“<b>Техніка</b> – T1573 Зашифрований канал<br/><b>Опис</b>: Шифрування C2-комунікації (ChaCha20/XOR).”] class tech_encrypted technique tech_webc2[“<b>Техніка</b> – T1102 Вебсервіс<br/><b>Опис</b>: Комунікація з C2 через HTTPS.”] class tech_webc2 technique tech_nonstd[“<b>Техніка</b> – T1571 Нестандартний порт<br/><b>Опис</b>: Використання порту 443 для маскування трафіку.”] class tech_nonstd technique process_task[“<b>Процес</b> – Заплановане завдання 523135538<br/><b>Команда</b>: C:\\ProgramData\\cp49s\\pythonw.exe”] class process_task process tool_pythonw[“<b>Інструмент</b> – pythonw.exe<br/><b>Роль</b>: Виконує Python без консольного вікна.”] class tool_pythonw tool file_sitecustomize[“<b>Файл</b> – sitecustomize.py<br/><b>Призначення</b>: Автоімпорт і запуск DLL.”] class file_sitecustomize file file_dll[“<b>Файл</b> – b5yogiiy3c.dll<br/><b>Тип</b>: Обфускований Python payload.”] class file_dll file component_wire[“<b>Компонент</b> – Wire class<br/><b>Функція</b>: SOCKS5 клієнт.”] class component_wire component component_relay[“<b>Компонент</b> – Relay class<br/><b>Функція</b>: Переспрямування трафіку.”] class component_relay component component_commander[“<b>Компонент</b> – Commander class<br/><b>Функція</b>: Керування C2 командами.”] class component_commander component c2_server[“<b>C2 сервер</b> – Pyramid сервіс<br/><b>Відповідь</b>: HTTP 401 Basic realm=Proxy”] class c2_server c2 credentials[“<b>Облікові дані</b> – AnyUser / AnyPassword<br/><b>Використання</b>: Аутентифікація проксі”] class credentials credential tech_persistence –>|creates| process_task process_task –>|launches| tool_pythonw tool_pythonw –>|imports| file_sitecustomize file_sitecustomize –>|loads| file_dll file_dll –>|uses| tech_obfuscation file_dll –>|triggers| tech_deobfuscate tech_deobfuscate –>|leads to| tech_compile tech_compile –>|leads to| tech_reflect tech_reflect –>|executes| component_wire component_wire –>|works with| component_relay component_relay –>|controls| component_commander component_commander –>|contacts| c2_server c2_server –>|uses| tech_proxy_ext c2_server –>|uses| tech_proxy_int c2_server –>|tunnels via| tech_tunnel c2_server –>|encrypts channel| tech_encrypted c2_server –>|communicates over| tech_webc2 c2_server –>|uses port| tech_nonstd component_commander –>|auth with| credentials

Потік атаки

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

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

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

  • Нарис атаки та команди:

    Супротивник спочатку скидає зловмисний sitecustomize.py в ту ж директорію, що і pythonw.exe. Python автоматично імпортує sitecustomize.py при запуску інтерпретатора, дозволяючи атакуючому виконувати довільний код без передачі шляху до скрипту на командному рядку. Запускаючи pythonw.exe без будь-яких аргументів, подія створення процесу містить пустий CommandLine поле, чим задовольняється умова правила Sigma. Завантаження створює заплановане завдання для стійкості, забезпечуючи запуск інтерпретатора при запуску системи, тим самим підтримуючи довгострокове закріплення.

  • Скрипт тестування на регресію:

    # -------------------------------------------------
    # Встановлення зловмисного sitecustomize.py
    # -------------------------------------------------
    $payloadPath = 'C:ProgramDatacp49ssitecustomize.py'
    $exePath     = 'C:ProgramDatacp49spythonw.exe'
    
    # Переконайтесь, що цільова папка існує
    New-Item -ItemType Directory -Path (Split-Path $exePath) -Force | Out-Null
    
    # Розгорніть нешкідливу копію pythonw.exe для тесту (якщо ще не наявна)
    # У реальному сценарії з червоною командою це був би легітимний інтерпретатор
    if (-Not (Test-Path $exePath)) {
        # Скопіюйте з системної інсталяції Python (скоригуйте шлях за необхідності)
        Copy-Item 'C:Python39pythonw.exe' $exePath
    }
    
    # Створення зловмисного sitecustomize.py (створює заплановане завдання як доказ концепції)
    @"
    import subprocess, sys
    # Створити заплановане завдання, яке запускає pythonw.exe кожну хвилину (стійкість)
    subprocess.run(['schtasks', '/Create', '/SC', 'MINUTE', '/MO', '1',
                '/TN', 'UpdateTask', '/TR', sys.executable])
    "@ | Set-Content -Path $payloadPath -Encoding UTF8
    
    # -------------------------------------------------
    # Запуск виявлення (зловмисне виконання)
    # -------------------------------------------------
    Write-Host '[+] Запуск pythonw.exe з пустим командним рядком...'
    Start-Process -FilePath $exePath -ArgumentList '' -WindowStyle Hidden
    
    # Очікуйте короткий період для створення запланованого завдання (не обов'язково)
    Start-Sleep -Seconds 5
    
    Write-Host '[+] Пантекста виконано. Перевірте ваш SIEM на наявність сповіщення.'
    # -------------------------------------------------
    # Кінець скрипту
    # -------------------------------------------------
  • Команди очищення:

    # Видаліть зловмисний sitecustomize.py
    Remove-Item -Path 'C:ProgramDatacp49ssitecustomize.py' -Force -ErrorAction SilentlyContinue
    
    # Видаліть заплановане завдання, створене пантекстом
    schtasks /Delete /TN UpdateTask /F
    
    # За бажанням, видаліть скопійоване pythonw.exe (якщо це була тестова копія)
    # Remove-Item -Path 'C:ProgramDatacp49spythonw.exe' -Force
    
    Write-Host '[+] Очищення завершено.'