Анатомія атаки: VIPERTUNNEL
Detection stack
- AIDR
- Alert
- ETL
- Query
Резюме
VIPERTUNNEL — це бекдор на основі Python, який використовується кіберзлочинцями для підтримання постійного доступу та ретрансляції шкідливого трафіку через скомпрометовані системи. Він використовує легітимні інтерпретатори Python та сценарії запуску для виконання заплутаних шкідливих програм безпосередньо в пам’яті. Зловмисне ПЗ підтримує латеральний рух і тунелювання через SOCKS5, допомагаючи атакуючим встановити прихований канал зв’язку.
Розслідування
InfoGuard Labs провела технічний аналіз імпланту VIPERTUNNEL, виявленого під час інциденту із програмою-здирником DragonForce. Розслідування виявило багатоступеневий ланцюг виконання, що включає розкладені завдання, змінені бібліотеки Python та шкідливі програми, захищені тришаровою обфускацією. Дослідники також знайшли зв’язки між шкідливим ПЗ та фреймворком постексплуатації Pyramid.
Пом’якшення
Захисникам слід перевірити розкладені завдання Windows на наявність незвичайних виконань на основі Python та контролювати файл sitecustomize.py на наявність несанкціонованих змін. Також рекомендується впровадити засоби контролю, які позначають текстові файли, що видають себе за двійковий код DLL. Організаціям слід визначити вихідний мережевий трафік для виявлення несподіваних підключень SOCKS або незвичайних комунікацій по порту 443.
Реакція
Якщо VIPERTUNNEL виявлено, адміністраторам слід негайно переглянути журнали безпеки Windows за ID події 4698 щоб ідентифікувати підозрілі розкладені завдання. Каталоги установки Python слід перевірити на наявність шкідливих скриптів, а телеметрію мережі слід аналізувати на предмет поведінки, подібної до проксі SOCKS. Кореляція артефактів з кінцевих точок з мережею-місцем доказів є важливою для повного розгортування вторгнення.
Потік Атаки
Виявлення
Створення файлів Python у підозрілих папках (через file_event)
Переглянути
Виявлення VIPERTUNNEL SOCKS5 Proxy та тунелювання через TCP порт 443 [Підключення мережі Windows]
Переглянути
Запуск запланованого завдання pythonw.exe з C:ProgramDatacp49s [Створення процесу Windows]
Переглянути
## Виконання симуляції
Передумова: Телеметрія та базовий контроль перед польотом повинні бути пройдені.
Обґрунтування: У цьому розділі детально описано точну реалізацію техніки супротивника (TTP), розробленої для активації правила виявлення. Команди та розповіді МАЮТЬ напряму відображати виявлені TTPs та націлювання на генерування точного очікуваного телеметричного сигналу вищезгаданим логіком виявлення. Абстрактні або нерелевантні приклади призведуть до помилкової діагностики.
-
Наратив атаки та команди: Супротивник має намір встановити канал командування та управління (C2) за допомогою проксі SOCKS5 для передачі внутрішнього трафіку через зовнішній слухач. Щоб уникнути базової фільтрації портів, супротивник використовує TCP порт 443. Однак для симуляції конкретного підпису VIPERTUNNEL, визначеного в правилі, супротивник ініціює текстову рукостискання SOCKS5 через порт 443, замість того, щоб обгорнути його в TLS. Це імітує неправильну конфігурацію або “інертну” реалізацію C2, яку правило виявлення спеціально створене для виявлення через протокольну перевірку.
-
Скрипт регресійного тесту: Цей скрипт використовує однорядковий Python для ініціації рукостискання SOCKS5 проти локального слухача, симулюючи ідентифікацію протоколу.
import socket import time # Параметри симуляції TARGET_IP = "127.0.0.1" # У реальному тесті це буде IP-слухача TARGET_PORT = 443 def simulate_socks5_tunnel(): print(f"[*] Спроба симулювати рукостискання SOCKS5 на порту {TARGET_PORT}...") try: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((TARGET_IP, TARGET_PORT)) # Привітання SOCKS5: [Версія (0x05), NMethods (0x01), Метод (0x00)] # Метод 0x00 = Не потребується автентифікація greeting = b"x05x01x00" s.send(greeting) response = s.recv(1024) print(f"[+] Отримано відповідь: {response.hex()}") print("[+] Симуляція завершена. Перевірте журнали брандмауера на ідентифікацію протоколу 'socks5'.") s.close() except Exception as e: print(f"[-] Помилка: {e}") print("[!] Увага: Переконайтеся, що слухач активний на цільовому порту для прийому рукостискання.") if __name__ == "__main__": simulate_socks5_tunnel() -
Команди очищення:
# Завершити будь-які активні процеси симуляції python Stop-Process -Name "python" -ErrorAction SilentlyContinue # Видалити тимчасові файли слухача, якщо були створені Remove-Item -Path ".sim_listener.log" -ErrorAction SilentlyContinue