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

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

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

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

Статья Хищник среди нас. Учимся реверсить на примере Predator

predator(1).jpg

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

План работы

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

Основы реверс-инженерии

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

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

Итак, ты столкнулся с самым стандартным вирусом, который покрыт защитой. Тут есть несколько вариантов развития событий. Ты можешь использовать автоматический распаковщик, которые специально заточены под это. Они основываются уже на известных алгоритмах упаковки и защиты. К примеру, чтобы снять UPX ты можешь использовать UN-PACK. Чтобы вынести защиту ACProtect следует использовать ACKiller, ну а ASProtect ты можешь вынести с ноги используя Stripper.

Второй вариант развития событий это использовать универсальные распаковщики. К примеру QuickUnpack, RL!dePacker или Dr.Web FLY-CODE Unpacker, который основан на движке FLY-CODE антивируса Dr.Web. Отличие от первой ситуации в том, что большую часть работы придется делать самим. В любом случаи такой расклад событий гораздо лучше, чем последний метод о котором я расскажу далее.

Если все же тебе в руки попался профессионал своего дела, то вирус будет покрыть особым типом защиты, который скорее всего будет создан самим разработчиком малвари. Здесь потребуется ручная распаковка с помощью x64dbg или любого другого дизассемблера. Если файл запакован чем-то неизвестным, то это можно распознать по функциям GetProcAddressA, LoadLibraryA или GetModuleHandle из библиотеки kernal.

Как работать с вирусом

Давай пробежимся по короткому алгоритму, по нему проходит разбор малвари при ручной распаковке. Это так называемый план Б на случай если распаковщики и известные утилиты для вскрытия защиты не смогут тебе помочь.
  1. Определение сигнатуры упаковщика;
  2. Поиск Original Entry Point (OEP);
  3. Дамп вируса на диске;
  4. Восстановление кода вируса (таблицы импорта/экспорта);
  5. Пересборка.
Давай немного слов о библиотеках. Файл DLL ничем не отличается от обычного исполняемого файла. У него также есть точка входа в код программы, которая создана пакетом и OEP. Да, я совсем забыл о терминологии. Давай познакомимся с основным моментами, которые я буду использовать в статье.
  • Entry Point - адрес, по которому передается управление после загрузки программы в оперативную память.
  • Breakpoints - точки останова, их используют для анализа выполняемого кода. Таким образом можно узнать где и что выполняется в вирусе.
  • Original Entry Point (OEP) - это адрес, с которого бы начала выполняться программа, если бы не была упакован.
Теперь разберемся по режимам работы брэкпоинтов:
  1. Остановка при чтении;
  2. Остановка при записи;
  3. Выполнение памяти по заданному адресу.
А теперь перейдем к заумной части нашей статьи. Любой EXE по другому называется PE-файлом. Давай разберем, что это значит.
  • PE-файл - исполняемый EXE-файл, который содержит в себе исполняемый код и данные необходимые для правильной работы программы в системе.
Чаще всего такой файл разбит на несколько секций подобно оглавлению в книгах. Также давай разберемся с понятиями виртуальных адресов.
  • Virtual Address (VA) - виртуальный адрес элемента в памяти. Адрес загрузки берется из поля OptionalHeader в том случаи если он равен ImageBase.
  • Relative Virtual Address (RVA) - относительный виртуальный адрес, он отсчитывается от адреса загрузки, который либо равен ImageBase, либо нет.
Конечно, запомнить это не легко на первых этапах, но вскоре ты будешь помнить это как свои пять пальцев. Поэтому не буду задерживать. Чтобы вычислить относительный виртуальный адрес используй эту формулу:
  • RVA = VA – адрес загрузки
Давай изучим понятия на примере. Допустим ты нашел OEP, он равен 00503000, а ImageBase равен 00500000, тогда RVA оригинальной точки входа будет равен 3000. Значение ImageBase ты можешь найти, заглянув в любой редактор PE-заголовков.

Теперь я должен просветить тебя в наши планы и рассказать о том, по какому алгоритму стоит снимать упаковщик ручным способом. В статье я не буду этого делать, но как основу ты обязан это знать. Для этого обратимся к такому короткому плану:
  1. Находим относительный виртуальный адрес у OEP;
  2. Дампим полученную малварь;
  3. Восстанавливаем таблицу импорта;
  4. Подменяем точку входа на оригинальную.
От теории к практики. Посвящение в начинающие реверс-инженеры ты прошел! Держи свою голову, чтобы она не взорвалась от знаний, так как мы переходим к практической части нашей статьи.

Разбираем малварь на пальцах

MainWindow.jpg


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

В наличие есть три типа передачи информации: PHP, FTP и E-Mail. Думаю объяснять как это работает не стоит. Заглянем в раздел настроек и посмотрим, как там обстоят дела. Из основных моментов это заметание следов путем очистки журнала, запись в автозапуск и отключения различных функций, к примеру вызов диспетчера задач. Дальше описывать я не буду, а попробую создать вирус. Для этого переходим на последнюю вкладку и собираем PE-файл.

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

DiE.jpg


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

Entropy.jpg


Как ты видишь статус сжатия присутствует только на секции text. Она является одной из главных и порой именно в ней содержится вся необходимая нам информация. По статусу ты также можешь определить, покрыт ли файл упаковщиком или нет. Обычно если автор программы не прибегает к каким либо мерам защиты своего детища, то процесс сжатия не будет переваливать за 80%. Если же он додумался накинуть оберег для своего творения, то твоя шкала уйдет дальше этих несчастных цифр. Еще это все можно увидеть из графика и его скачкообразного движения вниз и вверх.

А теперь давай закрепим знания по теоретической части. Знания относительных виртуальных адресов тебе пригодится для работы с картой памятью. В DiE ты можешь открыть вкладку Карта памяти и посмотреть, что там происходит.

MemoryCard.jpg


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

Import.jpg


А в таблицах импорта у нас все глухо. Лишь одно доказательство того, что вирус использует библиотеку NET. Это ты можешь увидеть если обратишь внимание на библиотеку mscoree.dll. Она отвечает за шаблоны NET Framework.

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

Включаем динамику
Чтобы докопаться до заветной информации воспользуемся ExtremeDumper. Это утилита динамического анализа и с помощью нее мы сможем снять весь обвес по типу обфускатора или криптора. Давай запустим ее попробуем поймать процесс нашего вируса. Заранее предупреждаю, запуск вредоносной программы производить следует только в виртуальной среде. Так ты обезопасишь себя от несанкционированного доступа. После запуска дважды кликаем по нашему вирусу. Далее наведи мышку на окно ExtremeDumper и в выпадающем меню выбери функцию Refresh. Теперь у тебя в поле появился наш вирус. Дампим его и идем по пути готовой работы.

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

pestudio.jpg


Если присмотреться, то наш стиллер создает SQL базу и записывает туда всю собранную информацию. Также в строчках ты можешь найти ссылки и методы подключения по протоколу SMTP (почтовый протокол). Создание, хранение и сохранение - все это ты увидишь в этой утилите.

Повторно запустим наш вирус, но перед этим будем фильтровать трафик при помощи Wireshark. Перед запуском тебе требуется выбрать адаптер. У меня в его роли выступает Беспроводная сеть и поэтому я буду работать именно с ним. Все готово и теперь спустя пару минут перехвата давай попробуем отфильтровать нужные пакеты. Из pestudio мы выяснили, что стиллер делает запросы к определенным сайтам. Начнем копать с протокола HTTP. Для этого в поле фильтрации вводим http. После этого ты увидишь такую картину.

wireshark.jpg


Как ты мог заметить, вирус отправляет уведомления и возвращает ошибку, поскольку я собрал малварь без способов передачи информации. Ты можешь развлечься при помощи фильтров Wireshark и узнать больше информации о нашем подозреваемом. Я этим заниматься не буду, поскольку моя основная задача была убедиться в том, что программа обращается к определенным сайтам для передачи информации. Теперь ты знаешь нужные данные для работы, что же мешает заглянуть под капот и узнать, как написан такой софт?

Для этого я буду использовать достаточно известную утилиту от JetBrains с названием dotPeek. Скачать ты его можешь с . Загружаем, запускаем и работаем. Перетяни вирус на окно декомпилятора и буквально через пару минут случиться магия. Перед тобой явится исходный код вируса в полном объеме. На деле это выглядит так.

dotPeek.jpg


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

encrypted.jpg


Малварь шифрует информацию при помощи AES, это ты можешь увидеть в коде, ну а ключи для декодирования у тебя перед глазами. Передача данных проходит по порту 587. Воспользуйся этим при последующем перехвате трафика через акулу. Дам наводку по фильтру. Используй такую строчку, чтобы найти нужную информацию.

Код:
tcp.port == 587 || udp.port == 587

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

Обычно, перед тем, как передать пакеты с информацией серверу твое устройство делает предварительное соединения при помощи отправки TCP-пакета с флагом SYN. Он означает то, что устройство хочет провести подключение. Логично? Как по мне вполне. Если ответ от сервера будет положителен то передача начнется. Ну а флаг ACK в пакете TCP говорят о завершении подключения. Я объяснил все максимально коротко, более подробно о работе с TCP соединениями ты узнаешь в других моих статьях. Повторюсь, в моем случаи нет никакой информации кроме этих флагов так как я не указал место, куда стоит отправлять информацию.

Продолжим наше увлекательное путешествие по строчкам кода хищника. Переключимся на ветку RunPE и посмотрим, что импортировал наш софт. Здесь ты увидишь библиотеку kernal32 и ntdll. Импортированных модулей на горизонте не видно. Вернемся к Form1. Тут продолжаем импортируемые модули и натыкаемся на user32. Обычно, если ты такое видишь, то жди беды. Точка входа у нас это SetWindowsHookExA.

Также вирус регистрирует нажатие клавиш, это можно увидеть если ты пролистаешь код ниже. Записывает информацию наш вирус в файл с названием SysInfo.txt. А теперь я расскажу тебе, что за информацию пытался передать наша малварь в акуле. Файл записывается с именем Predator_Painv13_Notification. К нему добавляется имя компьютера, с которого будет отправлено письмо и имеет расширение TXT. В нем содержится текст такого формата: This is an email notifying you that has ran your logger and emails should be sent to you shortly and at interval choosen.

Далее идут детали подключения, а также несколько адресов. Еще вирус меняет значения реестра по пути: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\\Hidden. На заметку, это еще не автозапуск. Он тут реализуется совершенно иным образом. Для этого создается файл с названием autorun.inf и в него записывается следующие строчки:

Код:
[autorun]
open=Sys.exe
action=Run win32

Далее все это дело помещается по такому пути: Software\Microsoft\Windows\CurrentVersion\Run. Да, работа автозапуска работает очень странно, но не нам судить творения других людей. Также наш подозреваемый опирается на программу vbc.exe. Поэтому чисто в теории если ты не установишь библиотеку NET Framework, то хищник обойдет тебя стороной. Советы странные. Такие же странные как заставить пользователя выключить интернет. При первом запуске, чтобы сразу не спалиться стиллер использует timesleep. Не забудем про самое главное, где хранятся логи для дальнейшей отправки. Вся информация как не странно хранится в AppData. Для многих это будет очевидно, но все же не указать это при анализе очень не вежливо.

Также при помощи условного цикла реализуется функция отключения диспетчера задач. На коде все выглядит примерно следующим образом.

C#:
while (true)
      {
        if (Operators.CompareString(this.TaskManager, "DisableTaskManager", false) != 0)
        {
          Process[] processes = Process.GetProcesses();
          int index = 0;
          while (index < processes.Length)
          {
            Process process = processes[index];
            if (Operators.CompareString(process.ProcessName, "Taskmgr", false) == 0)
              process.Kill();
            checked { ++index; }
          }
        }
        if (Operators.CompareString(this.TaskManager, "DisableTaskManager", false) != 0)
        {
          Process[] processes = Process.GetProcesses();
          int index = 0;
          while (index < processes.Length)
          {
            Process process = processes[index];
            if (Operators.CompareString(process.ProcessName, "taskmgr", false) == 0)
              process.Kill();
            checked { ++index; }
          }

Помимо этого стиллер убивает реестр, консоль и конфигуратор. Поэтому если ты попытаешься что-либо запустить у тебя ничего не получится. А теперь перейдем к моменту о том, как малварь узнает IP адрес. Способов для определения адреса много, но наш подозреваемый делает запрос к сайту и возвращает ответ для записи. Больше в ветке Form1 искать нечего. Все данные по типу хоста, порта, паролей и логинов храниться в ветке Resources.

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


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

B13

Заблокирован
01.01.2020
412
55
BIT
134

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

План работы

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

Основы реверс-инженерии

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

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

Итак, ты столкнулся с самым стандартным вирусом, который покрыт защитой. Тут есть несколько вариантов развития событий. Ты можешь использовать автоматический распаковщик, которые специально заточены под это. Они основываются уже на известных алгоритмах упаковки и защиты. К примеру, чтобы снять UPX ты можешь использовать UN-PACK. Чтобы вынести защиту ACProtect следует использовать ACKiller, ну а ASProtect ты можешь вынести с ноги используя Stripper.

Второй вариант развития событий это использовать универсальные распаковщики. К примеру QuickUnpack, RL!dePacker или Dr.Web FLY-CODE Unpacker, который основан на движке FLY-CODE антивируса Dr.Web. Отличие от первой ситуации в том, что большую часть работы придется делать самим. В любом случаи такой расклад событий гораздо лучше, чем последний метод о котором я расскажу далее.

Если все же тебе в руки попался профессионал своего дела, то вирус будет покрыть особым типом защиты, который скорее всего будет создан самим разработчиком малвари. Здесь потребуется ручная распаковка с помощью x64dbg или любого другого дизассемблера. Если файл запакован чем-то неизвестным, то это можно распознать по функциям GetProcAddressA, LoadLibraryA или GetModuleHandle из библиотеки kernal.

Как работать с вирусом

Давай пробежимся по короткому алгоритму, по нему проходит разбор малвари при ручной распаковке. Это так называемый план Б на случай если распаковщики и известные утилиты для вскрытия защиты не смогут тебе помочь.
  1. Определение сигнатуры упаковщика;
  2. Поиск Original Entry Point (OEP);
  3. Дамп вируса на диске;
  4. Восстановление кода вируса (таблицы импорта/экспорта);
  5. Пересборка.
Давай немного слов о библиотеках. Файл DLL ничем не отличается от обычного исполняемого файла. У него также есть точка входа в код программы, которая создана пакетом и OEP. Да, я совсем забыл о терминологии. Давай познакомимся с основным моментами, которые я буду использовать в статье.
  • Entry Point - адрес, по которому передается управление после загрузки программы в оперативную память.
  • Breakpoints - точки останова, их используют для анализа выполняемого кода. Таким образом можно узнать где и что выполняется в вирусе.
  • Original Entry Point (OEP) - это адрес, с которого бы начала выполняться программа, если бы не была упакован.
Теперь разберемся по режимам работы брэкпоинтов:
  1. Остановка при чтении;
  2. Остановка при записи;
  3. Выполнение памяти по заданному адресу.
А теперь перейдем к заумной части нашей статьи. Любой EXE по другому называется PE-файлом. Давай разберем, что это значит.
  • PE-файл - исполняемый EXE-файл, который содержит в себе исполняемый код и данные необходимые для правильной работы программы в системе.
Чаще всего такой файл разбит на несколько секций подобно оглавлению в книгах. Также давай разберемся с понятиями виртуальных адресов.
  • Virtual Address (VA) - виртуальный адрес элемента в памяти. Адрес загрузки берется из поля OptionalHeader в том случаи если он равен ImageBase.
  • Relative Virtual Address (RVA) - относительный виртуальный адрес, он отсчитывается от адреса загрузки, который либо равен ImageBase, либо нет.
Конечно, запомнить это не легко на первых этапах, но вскоре ты будешь помнить это как свои пять пальцев. Поэтому не буду задерживать. Чтобы вычислить относительный виртуальный адрес используй эту формулу:
  • RVA = VA – адрес загрузки
Давай изучим понятия на примере. Допустим ты нашел OEP, он равен 00503000, а ImageBase равен 00500000, тогда RVA оригинальной точки входа будет равен 3000. Значение ImageBase ты можешь найти, заглянув в любой редактор PE-заголовков.

Теперь я должен просветить тебя в наши планы и рассказать о том, по какому алгоритму стоит снимать упаковщик ручным способом. В статье я не буду этого делать, но как основу ты обязан это знать. Для этого обратимся к такому короткому плану:
  1. Находим относительный виртуальный адрес у OEP;
  2. Дампим полученную малварь;
  3. Восстанавливаем таблицу импорта;
  4. Подменяем точку входа на оригинальную.
От теории к практики. Посвящение в начинающие реверс-инженеры ты прошел! Держи свою голову, чтобы она не взорвалась от знаний, так как мы переходим к практической части нашей статьи.

Разбираем малварь на пальцах

Посмотреть вложение 63277

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

В наличие есть три типа передачи информации: PHP, FTP и E-Mail. Думаю объяснять как это работает не стоит. Заглянем в раздел настроек и посмотрим, как там обстоят дела. Из основных моментов это заметание следов путем очистки журнала, запись в автозапуск и отключения различных функций, к примеру вызов диспетчера задач. Дальше описывать я не буду, а попробую создать вирус. Для этого переходим на последнюю вкладку и собираем PE-файл.

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

Посмотреть вложение 63278

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

Посмотреть вложение 63280

Как ты видишь статус сжатия присутствует только на секции text. Она является одной из главных и порой именно в ней содержится вся необходимая нам информация. По статусу ты также можешь определить, покрыт ли файл упаковщиком или нет. Обычно если автор программы не прибегает к каким либо мерам защиты своего детища, то процесс сжатия не будет переваливать за 80%. Если же он додумался накинуть оберег для своего творения, то твоя шкала уйдет дальше этих несчастных цифр. Еще это все можно увидеть из графика и его скачкообразного движения вниз и вверх.

А теперь давай закрепим знания по теоретической части. Знания относительных виртуальных адресов тебе пригодится для работы с картой памятью. В DiE ты можешь открыть вкладку Карта памяти и посмотреть, что там происходит.

Посмотреть вложение 63281

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

Посмотреть вложение 63282

А в таблицах импорта у нас все глухо. Лишь одно доказательство того, что вирус использует библиотеку NET. Это ты можешь увидеть если обратишь внимание на библиотеку mscoree.dll. Она отвечает за шаблоны NET Framework.

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

Включаем динамику
Чтобы докопаться до заветной информации воспользуемся ExtremeDumper. Это утилита динамического анализа и с помощью нее мы сможем снять весь обвес по типу обфускатора или криптора. Давай запустим ее попробуем поймать процесс нашего вируса. Заранее предупреждаю, запуск вредоносной программы производить следует только в виртуальной среде. Так ты обезопасишь себя от несанкционированного доступа. После запуска дважды кликаем по нашему вирусу. Далее наведи мышку на окно ExtremeDumper и в выпадающем меню выбери функцию Refresh. Теперь у тебя в поле появился наш вирус. Дампим его и идем по пути готовой работы.

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

Посмотреть вложение 63283

Если присмотреться, то наш стиллер создает SQL базу и записывает туда всю собранную информацию. Также в строчках ты можешь найти ссылки и методы подключения по протоколу SMTP (почтовый протокол). Создание, хранение и сохранение - все это ты увидишь в этой утилите.

Повторно запустим наш вирус, но перед этим будем фильтровать трафик при помощи Wireshark. Перед запуском тебе требуется выбрать адаптер. У меня в его роли выступает Беспроводная сеть и поэтому я буду работать именно с ним. Все готово и теперь спустя пару минут перехвата давай попробуем отфильтровать нужные пакеты. Из pestudio мы выяснили, что стиллер делает запросы к определенным сайтам. Начнем копать с протокола HTTP. Для этого в поле фильтрации вводим http. После этого ты увидишь такую картину.

Посмотреть вложение 63284

Как ты мог заметить, вирус отправляет уведомления и возвращает ошибку, поскольку я собрал малварь без способов передачи информации. Ты можешь развлечься при помощи фильтров Wireshark и узнать больше информации о нашем подозреваемом. Я этим заниматься не буду, поскольку моя основная задача была убедиться в том, что программа обращается к определенным сайтам для передачи информации. Теперь ты знаешь нужные данные для работы, что же мешает заглянуть под капот и узнать, как написан такой софт?

Для этого я буду использовать достаточно известную утилиту от JetBrains с названием dotPeek. Скачать ты его можешь с . Загружаем, запускаем и работаем. Перетяни вирус на окно декомпилятора и буквально через пару минут случиться магия. Перед тобой явится исходный код вируса в полном объеме. На деле это выглядит так.

Посмотреть вложение 63285

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

Посмотреть вложение 63286

Малварь шифрует информацию при помощи AES, это ты можешь увидеть в коде, ну а ключи для декодирования у тебя перед глазами. Передача данных проходит по порту 587. Воспользуйся этим при последующем перехвате трафика через акулу. Дам наводку по фильтру. Используй такую строчку, чтобы найти нужную информацию.

Код:
tcp.port == 587 || udp.port == 587

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

Обычно, перед тем, как передать пакеты с информацией серверу твое устройство делает предварительное соединения при помощи отправки TCP-пакета с флагом SYN. Он означает то, что устройство хочет провести подключение. Логично? Как по мне вполне. Если ответ от сервера будет положителен то передача начнется. Ну а флаг ACK в пакете TCP говорят о завершении подключения. Я объяснил все максимально коротко, более подробно о работе с TCP соединениями ты узнаешь в других моих статьях. Повторюсь, в моем случаи нет никакой информации кроме этих флагов так как я не указал место, куда стоит отправлять информацию.

Продолжим наше увлекательное путешествие по строчкам кода хищника. Переключимся на ветку RunPE и посмотрим, что импортировал наш софт. Здесь ты увидишь библиотеку kernal32 и ntdll. Импортированных модулей на горизонте не видно. Вернемся к Form1. Тут продолжаем импортируемые модули и натыкаемся на user32. Обычно, если ты такое видишь, то жди беды. Точка входа у нас это SetWindowsHookExA.

Также вирус регистрирует нажатие клавиш, это можно увидеть если ты пролистаешь код ниже. Записывает информацию наш вирус в файл с названием SysInfo.txt. А теперь я расскажу тебе, что за информацию пытался передать наша малварь в акуле. Файл записывается с именем Predator_Painv13_Notification. К нему добавляется имя компьютера, с которого будет отправлено письмо и имеет расширение TXT. В нем содержится текст такого формата: This is an email notifying you that has ran your logger and emails should be sent to you shortly and at interval choosen.

Далее идут детали подключения, а также несколько адресов. Еще вирус меняет значения реестра по пути: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\\Hidden. На заметку, это еще не автозапуск. Он тут реализуется совершенно иным образом. Для этого создается файл с названием autorun.inf и в него записывается следующие строчки:

Код:
[autorun]
open=Sys.exe
action=Run win32

Далее все это дело помещается по такому пути: Software\Microsoft\Windows\CurrentVersion\Run. Да, работа автозапуска работает очень странно, но не нам судить творения других людей. Также наш подозреваемый опирается на программу vbc.exe. Поэтому чисто в теории если ты не установишь библиотеку NET Framework, то хищник обойдет тебя стороной. Советы странные. Такие же странные как заставить пользователя выключить интернет. При первом запуске, чтобы сразу не спалиться стиллер использует timesleep. Не забудем про самое главное, где хранятся логи для дальнейшей отправки. Вся информация как не странно хранится в AppData. Для многих это будет очевидно, но все же не указать это при анализе очень не вежливо.

Также при помощи условного цикла реализуется функция отключения диспетчера задач. На коде все выглядит примерно следующим образом.

C#:
while (true)
      {
        if (Operators.CompareString(this.TaskManager, "DisableTaskManager", false) != 0)
        {
          Process[] processes = Process.GetProcesses();
          int index = 0;
          while (index < processes.Length)
          {
            Process process = processes[index];
            if (Operators.CompareString(process.ProcessName, "Taskmgr", false) == 0)
              process.Kill();
            checked { ++index; }
          }
        }
        if (Operators.CompareString(this.TaskManager, "DisableTaskManager", false) != 0)
        {
          Process[] processes = Process.GetProcesses();
          int index = 0;
          while (index < processes.Length)
          {
            Process process = processes[index];
            if (Operators.CompareString(process.ProcessName, "taskmgr", false) == 0)
              process.Kill();
            checked { ++index; }
          }

Помимо этого стиллер убивает реестр, консоль и конфигуратор. Поэтому если ты попытаешься что-либо запустить у тебя ничего не получится. А теперь перейдем к моменту о том, как малварь узнает IP адрес. Способов для определения адреса много, но наш подозреваемый делает запрос к сайту и возвращает ответ для записи. Больше в ветке Form1 искать нечего. Все данные по типу хоста, порта, паролей и логинов храниться в ветке Resources.

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


Заключение
Здесь я описал реверс стиллера Хищник, который как и остальные заслуживает должного внимания среди вирусологов. Также мы разобрали основы реверс-инженерии и теперь ты знаешь на базовом уровне то, как работать с малварью. Конечно, это еще не все, что может произойти в реальных условиях. Ты можешь столкнуться с самодельным шифрованием кода и тогда придется прибегать к ручному дизассемблированию. Но об этом я расскажу тебе в другой статье.
Спасибо за статью.
 
  • Нравится
Реакции: Strife
Мы в соцсетях:

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