September 4, 2024

Уничтожаем XWorm, или как унижать школьников

Судя по заголовку статьи вы уже наверное поняли что сегодня мы обсудим как взломать хост XWorm, и временно приостановить распространение вируса удалённого доступа.

Представим ситуацию: Ваш друг(по совместительству ебл#н) скинул вам вирус удалённого доступа(RAT) под видом Rust читов.

А вы же в свою очередь увидели что Rust чит весит 134кб. , вы решили наказать вашего псведо-друга.

Первым делом вы зашли WinDbg, и начали анализировать сам билдер.

При тщательной проверки вы обнаружили вызов стека: builder!XWorm.Client.isDisconnected+0xa9 - это место, где происходит разыменование нулевого указателя. На стеке видно, что регистр ecx содержит нулевое значение, что приводит к ошибке при попытке чтения из памяти по этому адресу.

а также саму Ошибку доступа: В результате выполнения кода возникает исключение "Access violation" (код c0000005), указывающее на попытку чтения из нулевого адреса памяти (NULL pointer).

далее вы провели разбор дампов памяти и обнаружили там:

Регистры:

  • eax=0330c234
  • ebx=0113e8d4
  • ecx=00000000 (нулевой указатель)
  • edx=018c0000
  • esi=0330c234
  • edi=0113e55c

при дальнейшем анализе вы поняли что инструкция: mov eax, dword ptr [ecx] пытается прочитать 4 байта по адресу, указанному в ecx, который равен нулю. Это приводит к исключению.

дальше вы залезли в Стек вызовов и обнаружили там:

  • builder!XWorm.Client.isDisconnected+0xa9
  • clr!CallDescrWorkerInternal+0x34
  • clr!CallDescrWorkerWithHandler+0x6b
  • И так далее

А теперь объясняю для тех кто в ревёрсинге разбираются также как и Asoru разбирается в коде, т.е мягко говоря плачевно:

Перед вами уязвимость без определённого CVE: XWorm Trojan - Null Pointer Derefernce DoS

Как понятно по названию уязвимости, мы будем рассматривать DoS сервера управляющего вирусом удалённого доступа - XWorm.

А теперь анализ для душнил ревёрсеров:

Исключение: Исключение "Access violation" указывает на то, что код пытался получить доступ к памяти по адресу 0x00000000, что недопустимо.Причина сбоя: Программа пытается разыменовать указатель ecx, который в данном случае равен нулю, что и вызывает сбой.

Причина сбоя: Программа пытается разыменовать указатель ecx, который в данном случае равен нулю, что и вызывает сбой.

Анализ уязвимости:

Уязвимость представляет собой проблему "NULL Pointer Dereference" (разыменование нулевого указателя), которая приводит к отказу в обслуживании (DoS). Эта уязвимость затрагивает XWorm Trojan, который использует сложные функции, такие как шифровальщик и кейлоггер, и может вызывать сбои на стороне сервера управления угрозами (C2) при получении определённых данных от жертвы.

Скучный анализ закончен, переходим к практике.

Шаг 1: Подготовка

  1. Настройка тестовой среды:
    • Создай виртуальную машину с Windows 10.
    • Установи XWorm Trojan 2.1 на тестовую систему.
    • Убедись, что у тя есть средства для анализа сетевого трафика и мониторинга системы, такие как Wireshark и Process Monitor.

Инструменты:

  • Disassembler: IDA Pro, Ghidra.
  • Decompiler: dotPeek, ILSpy (если XWorm написан на .NET).
  • Отладчик: WinDbg.
  • Клиент для взаимодействия: Netcat или подобные утилиты для отправки данных.

Шаг 2: Анализ уязвимости

  1. Исследование уязвимости:
    • Изучи код и поведение функции isDisconnected, чтобы понять, где происходит разыменование нулевого указателя.
    • Используй инструменты декомпиляции и дисассемблера(выше), чтобы найти точное место, где происходит сбой в коде.

Воспроизведение ошибки:

  • Запусти XWorm Trojan и проанализируй, при каких условиях возникает ошибка.
  • Используй WinDbg для создания дампов памяти и анализа ошибки "Access Violation" при разыменовании нулевого указателя.

Шаг 3: Разработка эксплойта

  1. Создание тестового входного потока:
    • Определи формат данных, который софт ожидает. В данном случае это может быть формат TCP/UDP-пакета или другой протокол.
    • Создай данные, которые вызывают сбой. В этом случае мы будем ху#рить 1000 байт данных, чтобы вызвать ошибку.

Скрипт для отправки данных:

  • Используй Python с библиотеками для работы с сетевыми протоколами, например, socket, чтобы создать скрипт, который отправляет данные на IP-адрес и порт, используемый XWorm для управления.

сейчас выдам скрипт для л#хов которые не хотят учится сами делать хоть что-то в этой жизни:

import socket

# тут ща локалка, но ты подключи порт к которому соединён XWorm Trojan (вроде там 1741, я точно не помню) target_ip = '192.168.1.100' target_port = 12345 # порт тут задавай

# Зачатие сокета with socket.socket (socket.AF_INET, socket.SOCK_STREAM) as s: s.connect ((target_ip, target_port)) data = b’A' * 1000 # Отправляем 1000 байт данных (я бы ща пошутил про потерю пакетов в Udp, да только боюсь до вас не дойдёт) s.sendall (data)

Отправка данных и проверка:

  • Запусти скрипт и наблюдай, как XWorm ахуевает на отправленные данные.
  • Используй Process Monitor для наблюдения за сбоями и остановками процесса.

Короче в качестве итогов подведу: Не используйте XWorm, спите по ночам внатуре, 7 утра - а я ещё не спал, от того и столько ошибок в тексте, простите если это вышло нечитаемо, я старался >:

и подписывайтесь на канал - https://t.me/thiasoft, тут много подобного трэша.

Статью писал - @Xahrvs

Материал для ознакомления взят тут - https://www.exploit-db.com/exploits/51265