• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Обзор стиллера Phoenix

coder

(L3) cache
Забанен
Регистрация
18.08.2023
Сообщения
213
Реакции
252
Пожалуйста, обратите внимание, что пользователь заблокирован
Всем привет
Я давненько наблюдаю за форумным рынком, решил пройтись по существующим продуктам и сделать публичный обзор, чтобы вы могли понять, какой софт достоин внимания, а какой является шлаком
Первым на обзор попал стиллер Phoenix, это MaaS решение, иными словами админка стоит на серверах владельца, клиенту достаточно оплатить подписку и можно начинать работать
Стоимость софта 99$ в месяц, что довольно сильно меня удивило, поскольку лично у меня не было бы мотивации даже встать со стула за эту сумму, не говоря уже о поддержке кучи клиентов

Никаких предварительных договоренностей с автором продукта у меня не было, я считаю, что они не нужны, поскольку обзор должен быть обьективным и показывать всё, как есть
Итак, на руках у меня доступ в админку стиллера. Админка находится в клирнете, на входе в неё меня встретила авторизация. Ввожу логин и пароль от аккаунта и попадаю в главное меню:
menu.jpg

В главном меню меня встретила надпись "Welcome, username" и табличка, указывающая до какого числа активна моя подписка
Как по мне, глупо выносить такое в отдельную вкладку, на странице много пустого места, практичнее было бы, если бы вся информация была на одной вкладке

Идём дальше, вкладка с логами:
[
logs.jpg

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

Настройки:

settings1.jpg
settings2.jpg

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

Цветовая схема админки мне понравилась, прикольно, не бьёт по глазам в ночное время суток, сделано в стиле минимализма
Так же под конец осмотра админки я заметил, что она стоит за обычным DDOS Guard, это меня сильно удивило, я бы не стал доверять безопасность такого проекта белому сервису, находящемуся в РУ

Ладно, админку посмотрели, переходим к билду. Я скачал билд и начал с осмотра в статике
Мы имеем нативный х86 бинарник весом 29 кб, в импорте видны следующие функции:
import1.png

import2.png

import3.png

import4.png

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

Переходим к IDA. Загрузив в неё бинарник, попадаем на точку входа
ep1.png
ep2.png

Как видим, сразу же при запуске стиллер создаёт мьютекс, название которого является статическим и лежит в открытом виде в секции данных
В моём случае, мьютекс имеет вид GUID'a. Если он существует, софт прекращает свою работу

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

Далее происходит инициализация таблицы, содержащей адреса winapi функций, первыми получаются адреса таких функций как SHGetFolderPathW из shell32.dll и FindNextFileW
К слову, об инициализации апи функций. Функции ищутся по хешу, для этого вызывается функция со следующим прототипом:

C:
LPVOID my_get_proc_address(LPCSTR LibName, int Hash)

Вот её вид в дизасме:

gpa.png

Как вы уже заметили, она вызывает GetModuleHandle и LoadLibraryA, что убивает весь смысл затеи с динамическим импортом. Впрочем, можно было ограничиться одним вызовом LoadLibraryA, но видимо автор не читал документацию к этой функции на мсдн
Далее происходит стандартная процедура перечисления функций в таблице экспорта, хеширование с помощью crc32 и возврат адреса функции в случае эквивалентности хешей, при этом не поддерживается обработка переадресcации функций (api forwarding), возможно поэтому некоторые функции, в том числе HeapAlloc, которая уходит в ntdll.RtlAllocateHeap импортируются статически

Далее выделяется память размером в MAX_PATH * 2 байт, адреса выделенной памяти помещаются в 3 глобальные переменные, мы назовём их LocalAppDataPath, DesktopPath и AppdataPath
После того как память была выделена, с помощью SHGetFolderPathW получаются пути к локалаппдате, рабочему столу и аппдате, они сохраняются в раннее выделенной памяти

После того, как пути получены, стиллер инициализирует массив из хендлов, в нём будут храниться хендлы потоков, которые создаются для работы
Всего создаётся 4 потока, 1 поток под сбор c appdata и localappdata, 1 поток под сбор со всех дисков, 1 поток под файлграббер (собирает рабочий стол), 1 поток под создание скриншота рабочего стола
Вызывается функция WaitForMultipleObjects, которая ожидает завершения всех потоков. После того, как потоки завершились, закрываются их хендлы
Тут случился забавный момент, в цикле автор закрывает 3 хендла, а не 4. Т.е 1 хендл остаётся не закрытым

Далее в потоках происходит сбор необходимых файлов, там нет ничего интересного лично для меня, но подмечу следующее
В рекламной теме сказано, что "файловый сканер" работает через системные вызовы, или же проще говоря, сисколлы
Я не понял смысла этой затеи, но раз сказано - проверим: открываем дизасм "файлового сканнера" и видим вот такое:
filescan1.png

Это обычный FindNextFileW, инициализацию которого можно увидеть здесь:
filescan2.png

CRC32 от FindNextFileW == -2114741223, поэтому всё сходится. Нас надули

Сейчас покажу полный вид этой функции, вы можете подумать, что блоки кода перемешаны control flow flattening'ом, но нет, код не обфусцирован
filescan3.png
filescan4.png
filescan5.png

После того, как все потоки отработали, производится отправка лога
Для отправки используется winsock2, загружается ws2_32.dll, получаются адреса нужных функций и идёт конект на адрес прокладки по порту 2227
В связи с тем что используются сокеты, стиллер не отстучит на машинах, где проброшен прокси. Так же, отстук на нестандартный порт вызовет затриггерит файрвол
send.png

Общие впечатления от кода стиллера:

Это ужас. Куча глобальных переменных, результат выполнения функций не проверяется, т.е если какой то кусок кода даст ошибку, стиллер пойдет дальше
Код не разделён на функциональные части, всё в куче, функционал перемешан в функциях, одна функция выполняет кучу задач
Так же в коде зачем то постоянно используются критические секции, вот, например, есть функция выделения памяти и перед тем как вызвать HeapAlloc стиллер постоянно входит в критическую секцию:
alloc.png

С технической частью всё, теперь просто погоняем софт на ВМ и посмотрим, как он работает в деле.

ОС - Win10 х64, антивирус отключен, проверяем только работоспособность
Софт на борту:

- Google Chrome (+ расширение metamask)
- Mozilla Firefox
- Exodus Wallet
- Electrum

Так же на рабочем столе находились несколько текстовых файлов со случайным содержимым, к тесту они никак не относятся
Стиллер отработал с первого раза, но с некоторыми "НО":

1) Exodus'a не было в логе
2) Пароли из Firefox, содержащие русские буквы и иероглифы были заменены вопросительными знаками
3) С рабочего стола были собраны бесполезные .txt файлы, граббер собирает файлы по расширению, в лог часто будет попадать ненужный мусор
4) Файл скриншота в архиве назывался $s.bmp, я так понимаю, $s это какая то метка для админки, которая должна быть заменена на слово, но почему то не заменилась
5) Криво отображается информация о системе в файле Log.txt. В полях System Layout и Keyboard Layouts какие то цифры, хотя должны быть идентификаторы раскладок

Итого:

Посмотрев стиллер, я могу сказать, что продукт сырой. Видимо, автор только учится кодить и при этом пытается заработать на своих клиентах
Очень много детских ошибок, код перегружен, функционал не полностью соответствует описанию
На данный момент я бы не советовал покупать этот стиллер, да, он оправдывает свою цену, но если вы настроены работать серьёзно - поищите другой вариант
 
Последнее редактирование:
Пожалуйста, обратите внимание, что пользователь заблокирован
Вот чего ожидал долгое время, когда люди с опытом разбирают подобные вещи ! Спасибо! Очень познавательно !:zns6:
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Это, чтобы по Ру не работали )
Ага, видимо иероглифы тоже не работают из за запрета работы по азии =)
 
У меня просто ассоциируется это, что он забыл написать setlocale(LC_ALL,"russian"); ) типа, исходя из других ошибок в разборе кода.
С другой стороны, пускай неправильно использовал функции, выделял память и т.д. Но блин зарабатывает даже так, можно)
Можно и похвалить было его в статье за это как бы.
А в общем статья отличная. И видно как автор читает код в дизассемблированом виде на высоком уровне.
 
Последнее редактирование:
Пожалуйста, обратите внимание, что пользователь заблокирован
Кстати, если кто то хочет обзор на конкретный софт и готов предоставить билды, можете писать в ПМ. Само собой, всё происходит анонимно, автор софта об этом не узнает
 
хочет обзор на конкретный софт
есть софт который у меня лучше всего отрабатывал на маках, мак-стиллеры рассматриваешь?
но там не голый билд, а уже упакованный (возможно), т.е. софт не в продаже, он выдается только для работы.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх