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

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

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

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

Статья Назад в будущее. Как эволюционировал ратник Venom

back_to_the_future.png

Введение
Со времен первых компьютеров прошло достаточно большое количество времени. Тогда люди радовались каким-то мегабайтам на дискете, в то время как сейчас каждому пользователю требуется минимум один терабайт пространства на все нужды. Но даже в тех моментах из прошлого есть свои минусы. С первыми компьютерами появились и первые вредоносы. Вспомни сколько ущерба принес один червь Морис. Сейчас же технологии не стоят на месте, и проблема огромного количества малвари достаточно сильно терзает людей. В этой статье я не буду уходить слишком далеко и рассказывать о происхождении прародителей PetyA или WannaCry. Вместо этого тебе предстоит узнать, как далеко зашел достаточно популярный коммерческий ратник Venom. Обо всем по порядку, поэтому приступим к изучению.

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

Предыстория
В прошлом году в одной из своих статей я проводил исследование довольно известного приложения удаленного администрирования с названием Venom. В статье мы разобрали поведения вируса, его исходный код и трафик, который исходил от самой программы. Теперь же пришло время обновить арсенал и посмотреть, как сильно изменился ратник за 2 года. Напомню тебе, что до этого я рассматривал версию 2020 года. Думаю вспоминать про этот год не стоит, но совсем недавно я наткнулся на современную версию того же вируса, который датировался 2022 годом. Мое хобби не позволило пройти мимо такого контента и на свой страх и риск был скачан архив со всем содержимым. А теперь давай остановимся на моменте скачивания и разберем все по полочкам.

Рекурсивный подход
Итак, сам архив с файлом представлял собой папку внутри которой на вид был простой PE-файл. При распаковке все внезапно поменялось и вместо обычного инсталлера отображалась иконка самораспаковывающегося архива. Думаю, ты уже догадываешься, что здесь есть какой-то подвох. Если размышлять логически, то большинство вирьмейкеров любили использовать такой трюк еще пару лет назад. Ведь пока не распакуешь, не узнаешь, что лежит внутри. Для этого обычно стоит запустить виртуальную машину и открывать все это дело в изолированной среде, ради сохранности своих же данных. Такое решения принял и я. По итогу распаковки был обнаружен небольшой вредонос, который лежал среди файлов Венома. Казалось бы, достаточно очевидная ситуация, но не в нашем случаи. Приложение не имело икокни и носило название crack.exe. Ниже я оставил скриншот этого объекта в папке и добавил метаданные, которых к сожалению оказалось не так много.

crack.jpg


metadata_crack.jpg


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

Сам детект указывает на наличие NET библиотеки, а значит получить исходный код будет не так сложно.



DiE.jpg


Если перейти на вкладку энтропии, то статус будет несжатый в размере 68%. Это указывает на то, что файл не имеет никакого обвеса и его спокойно можно разреверсить без сторонних приложений. Поэтому запускаем dnSpy и скармливаем ему наше приложение. Ты можешь погулять по коду и осмотреть его. Вся важная нам информация об отправке храниться в PE-файле Crypto.exe. Разворачиваем вкладку Address и любуемся. А точнее там расположена информация о том, куда вся собранная информация отправляется. Не трудно догадаться, что панель управления располагалась на отдельном хостинге, а не машине. Поэтому ты и видишь ссылку, которая к сожалению не работает и ведет просто на предложение об аренде домена. Хотя попытка получить контроль над устройством хорошая. Вся начинка и команды расположены в Stub, там же можно найти список импортируемых модулей, среди которых как всегда висит любимый user32. Автозагрузка нашего вредоноса происходила как раз в функции Main(), ветки Program. На коде все это дело выглядело следующим образом:

C#:
public static void Main()
        {
            bool flag = false;
            Addresses.mtx = new Mutex(true, Addresses.Mutexx, ref flag);
            bool flag2 = !flag;
            if (flag2)
            {
                ProjectData.EndApp();
            }
            flag2 = (Operators.CompareString(Addresses.startup, "yes", false) == 0);
            if (flag2)
            {
                try
                {
                    string text = Environment.GetFolderPath(Environment.SpecialFolder.Startup) + "\\" + Path.GetFileNameWithoutExtension(Application.ExecutablePath) + ".exe";
                    flag2 = File.Exists(text);
                    if (!flag2)
                    {
                        File.Copy(Application.ExecutablePath, text);
                        File.SetAttributes(text, FileAttributes.Temporary);
                    }
                }
                catch (Exception ex)
                {
                }
            }
            Program.Run();
        }

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

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

venom_gui.jpg


Теперь ты можешь видеть всю необходимую информацию не обращаясь к меню управления устройством. Версия клиента/привилегия в системе/наличие антивируса и многое другое отображается прямо перед тобой. Но не будем забывать, что кроме этого у нас есть множество новых функций. К примеру теперь ты можешь выгружать полезную нагрузку прямо в зараженную систему. Стала доступна работа с реестром. Кража токенов из Дискорда или повышения привилегий можно делать в режиме реального времени. Напомню, в версии от 2020 года, чтобы получить привилегии выше юзера необходимо было выставить настройку перед билдом сервера. Из функций сборки теперь при запуске можно отключить диспетчер задач. Но вероятнее всего пользователь забьет тревогу, что не очень хорошо. Ну а для любителей веселья теперь есть функция Just for Fun. О ней ты узнаешь сам. Также добавился обмен файлами между устройством и зараженной машиной. Но не все так идеально. В старой версии присутствовали две очень интересные функции. Первая помогала создавать макросы в документах, а вторая выгружала готовые файлы на ресурс AnonFile и выдавала ссылку на скачивание. По современным функциям больше ничего нет, поэтому можно переходить к тестам самого билда. Создаем два файла разных версий и смотрим как сильно изменилась защита. Так как обзор этого софта описывается не первый раз, то почитать разбор версии от 2020 года ты можешь в этой статье.

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

DiE_client.jpg


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

sections_client.jpg


Интересный статус 78% и нет сжатых секций. Вероятнее всего присутствует какой-либо обвес в виде обфускатора или протектора. Давай проверим это при помощи просмотра строк.

strings_client.jpg


Наша теория подтвердилась. Файл явно чем-то защищен, поэтому чтобы снять протектор попробуем запустить и сдампить программу при помощи ExtremeDumper. После успешного дампа у тебя появится соответствующая папка с готовым файлом. Открываем его в dotPeek и смотрим результат. Я обратил внимание на ветку Program, там хранится система антипроцесс и анализ файлов. Простым языком если твой вредонос получит права администратора, то из обычного процесса он превратиться в критический, то есть тот, что используется системой. При их снятии обычно высвечивается уведомление о том, что файл используется сторонним процессом и его невозможно снять. Все это дело реализовано на условных циклах и с определенным таймаутом оно проверяет наличие новых прав. Если с сервера поступит сообщение о том, что пора стать критическим процессом, то параметр отвечающий за этот поменяется с False на True и будет проверять наличие прав для этого действия.. Напомню, в предыдущей версии все эти параметры надо было выставлять перед сборкой. На коде все это дело выглядит следующим образом:

C#:
try
{
    if (Convert.ToBoolean(Settings.BS_OD))
     {
     if (Methods.IsAdmin())
            ProcessCritical.Set();
      }
}
catch
{
}

Если приглядеться, то ты заметишь, что в любом другом случаи программа не отправляет и не выводит никаких ошибок, а просто пропускает сообщение с сервера. Очень простое, но не эффективное решение проблемы. А теперь перейдем к самому интересному. Чтобы ничего не пропустить рекомендую перейти в файл Settings.cs. Тут ты заметишь множество зашифрованных строк, но не стоит паниковать, сейчас я все тебе объясню. Сам процесс шифрования необходимой информации происходит прямо в коде с использованием Base64 и AES256. Как это выглядит. На сервере создается и шифруется ключ, после он передается в переменную вредоноса и выглядит следующим образом:

C#:
public static string Key = "azRBYXA3bDl0dWN2TFE1blB5VW5nWHkwTThTV29vS1g=";

После этого все загоняется в цикл со значением Boolean, то есть происходит процесс инициализации и расшифровки всей информации. И теперь самое забавное. На этом этапе сам ключ конвертируется из Base64 в UTF8, а после еще и в AES256. Ты спросишь меня зачем, если можно делать все сразу? Все просто, последний тип шифрования служит самим ключом для расшифровки других данных. Сам по себе шифр AES256 не может выдать тебе информацию в готовом виде без ключа доступа. В нашем случае переменная key и становиться ключом после таких махинаций. С ее помощью можно расшифровать остальные данные и узнать, что они скрывают. На коде все это дело выглядит следующим образом.

C#:
Settings.Key = Encoding.UTF8.GetString(Convert.FromBase64String(Settings.Key));
Settings.aes256 = new Aes256(Settings.Key);
Settings.Por_ts = Settings.aes256.Decrypt(Settings.Por_ts);
Settings.Hos_ts = Settings.aes256.Decrypt(Settings.Hos_ts);
Settings.Ver_sion = Settings.aes256.Decrypt(Settings.Ver_sion);
Settings.In_stall = Settings.aes256.Decrypt(Settings.In_stall);
Settings.MTX = Settings.aes256.Decrypt(Settings.MTX);
Settings.Paste_bin = Settings.aes256.Decrypt(Settings.Paste_bin);
Settings.An_ti = Settings.aes256.Decrypt(Settings.An_ti);
Settings.Anti_Process = Settings.aes256.Decrypt(Settings.Anti_Process);
Settings.BS_OD = Settings.aes256.Decrypt(Settings.BS_OD);
Settings.Group = Settings.aes256.Decrypt(Settings.Group);
Settings.Hw_id = HwidGen.HWID();
Settings.Server_signa_ture = Settings.aes256.Decrypt(Settings.Server_signa_ture);
Settings.Server_Certificate = new X509Certificate2(Convert.FromBase64String(Settings.aes256.Decrypt(Settings.Certifi_cate)));
return Settings.VerifyHash();

Как ты помнишь, в версии 2020 года структура программы выглядела совсем иначе и имела свои особенности. Здесь же все предельно доступно и понятно даже для начинающего реверс-инженера. Также меня напрягло название переменной BS_OD, оно выглядело крайне не естественно и очень не понятно. Чтобы понять где она применяется советую открыть файл method.cs и взглянуть на первые строчки кода. Здесь ты заметишь функцию с названием exit() и увидишь нашу переменную, которая по сути является командой выключения вируса. Для наглядности я оставил все это дело ниже.

C#:
public static void ClientOnExit()
    {
      try
      {
        if (Convert.ToBoolean(Settings.BS_OD) && Methods.IsAdmin())
          ProcessCritical.Exit();
        MutexControl.CloseMutex();
        ClientSocket.SslClient?.Close();
        ClientSocket.TcpClient?.Close();
      }
      catch
      {
      }
    }

Также давай я тебе расскажу как работает функция анти-процесса, которая является средством самообороны против удаления пользователем. Исходя из анализа кода такая вещь просто блокирует запуск процесса с определенным названием. Допустим если ты хочешь запустить программу с именем taskmanager.exe, то вирус его тут же заблокирует. Но если сменить название на 1.exe или любое другое, то файл без проблем запуститься. Такую уловку также использует большинство майнеров, но в отличие от Венома они снабжены таймером, который по истечении времени сам убивает процесс. А теперь давай я приведу тебе весь черный список имен файлов и приложений, который будет блокироваться вирусом.

  1. Taskmgr
  2. ProcessHacker
  3. procexp
  4. MSASCui
  5. MsMpEng
  6. MpUXSrv
  7. MpCmdRun
  8. NisSrv
  9. ConfigSecurityPolicy
  10. MSConfig
  11. Regedit
  12. UserAccountControlSettings

Список довольно небольшой, но в него входят довольно известные программы и встроенные утилиты Windows. Еще вирус имеет буфер со значениями 51200 байт. Довольно большой размер для такой программы. Но не будем забывать про функции записи звука и видео с зараженного устройства. На этом думаю стоит завершить наш анализ поскольку остальную часть кода ты сможешь изучить самостоятельно. Также исходя из моих предыдущих статей можно добавить к этому Yara и создать полноценное правило для детекта таких билдеров. Дам наводку на то, что стоит внимательно осмотреть строки, чтобы понять взаимосвязь с каждым новым файлом. Теперь стоит перейти к подведению итогов.

Подводим итоги
Итак, в этой статье мы рассмотрели новшества усовершенствованной версии Venom RAT и оценили степень защищенности кода. Не изменилось здесь только метод защиты исходного кода. В остальном код полностью отличается от предыдущих версий и имеет свои особенности. По функционалу стоит отдать предпочтения версии от 2020 года, поскольку она была разнообразней и функциональней, чем ее современный аналог. Про защиту стоит промолчать, так как с ней ничего не случилось. Ну а дизайн и удобства стали намного лучше с появлением 2022 версии. Теперь не надо лезть в диспетчер и думать, почему так сильно греется устройство. В остальном я думаю ты сам найдешь преимущества и недостатки, которые по твоему мнению считаются самыми важными.
 
Последнее редактирование модератором:
02.03.2021
543
398
BIT
177
Спасибо хорошая статья! Получается вирусописатели ударились в дизайн сделали модную черную тему, написали консоль для управления. Вангую в будущем они обновят вирус версии 2020 года и прикрутять на него красивую консоль с различными темами для красоты. Сказав что они сделали новую более лучшую версию. Такими темпами ребятам потребуется для рекламы маркетологов и apple нанимать
 
Мы в соцсетях:

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