Обзор Cerberus

Доброго времени суток дорогие друзья.
За окном гроза. Льет как из ведра. Погода последние две недели сильно портит настроение. Никакого желания работать. Но попробуем собраться и развлечь себя интересным делом. Будем писать обзор на очередной бот который попался нам в руки. Встречаем (тут фанфары) android-бота под названием Cerberus. Официальный топик https://xss.is/threads/29932/
Обзор немного не профильный. Я обычно не берурусь за андроид. Но решил попытать силы и в этом направлении. Жизнь не стоит на месте и все меняется. Значит либо мы идем в ногу со временем или мы в рядах отстающих. Ну что же. Постараемся не отстать от тенденций.

Описание:

Краткое описание:

Цитата:

Cerberus – андроид бот, который работал в привате на протяжении последних 2х лет. Сейчас мы решили выйти из привата, для поиска партнёров.

Возможности:

Цитата:

Отправка СМС
Перехват СМС
Cкрытый перехват СМС
Блокировка девайса
Отключение звука
Кейлоггер(месседжеры, ватц апп, телеграмм-сикрет, банки и т.д., кроме браузеров!)
Выполнение USSD команд
Переадресация вызова
Открытие фейк-страницы банка
Запуск любого установленного приложения
Пуш уведомление банка(Автоматический пуш – определяет какой установленный банк)
Открыть url в браузере
Получить все установленные приложения
Получить все контакты их телефонной книги
Получить все сохраненные СМС
Удаление любого приложения
Самоуничтожение бота
Автоматическое подтверждения прав и разрешений
Бот может иметь несколько запасных url для соединения с сервером
Инжекты(html+js+css, качаются на девайс и запускаются с диска, плохое соединение или отсутсвие интернета не повлияет на работу инжектов)
Граббер карт
Граббер почт
Автоматическое включения инжектов через время указанное в админ панели
Автоматическое отключения Google Play Protect + отключения через время указанное в админ панели
Антиэмулятор(Бот начинает работать после проявления активности девайса)

Свойства:

Цитата:

Модульность
Размер приложения бота от 125 до 180 КБ(Крипт около 1 МБ)
Работает на версиях Android 5 и выше
Скрытый перехват SMS работает от 5 версии и выше
Инжекты работают на всех актуальных версиях Android 5 – 9+
Данные между сервером и ботом шифруются по алгоритму RC4 + base64 с рандомным ключом
Блокировка удаления бота
Блокировка отключения админ прав
Блокировка отключения Accessibility Service
Может иметь несколько запасных доменов для отстука
Мультиязычность

Стоимость:
1 месяц – $2,000
3 месяца – $4,000
6 месяцев – $7,000
12 месяцев – $12,000

Только аренда!!!

Пересекаемся с автором. Благо он сам искал встречи. И на удивление быстро договариваемся на обзор. Как бы даже странно. Вот ничего не пришлось рассказывать.
Ну да ладушки. На руки получаем:
1. Доступ в аминку (в торе)
2. Билд (APK), размером 142,3 кб.
3. Доступ к билдеру (в торе)
4. Разрешение на реверс и публикацию материалов.

Оговорка по фрэйду:

Цитата:

<cerber_ovner> Тестовый режим сделаю. Приложение называется Testing Mode
<cerber_ovner> там отключено будет: проверка активности девайса, и проверка на запрещённые страны (СНГ)
<cerber_ovner> активность девайса, это для того чтобы бот загрузил основной модуль тебе надо двигаться с телефоном или, держа в руках, размахивать им.
<cerber_ovner> ну показать что ты не эмулятор
<cerber_ovner> в спец возможностях если что будет название приложения, в тестовом режиме Testing Mode надо будет включить. По факту люди сами будут придумывать всё) Типо Steam Service, Google Protect итд названия. Ну ты понял
<cerber_ovner> Работает на 5 андроиде и выше.

Поехали.

Знакомство с админкой: Рис.1 | Рис.2 | Рис.3 | Рис.4 | Рис.5 | Рис.6 | Рис.7 | Рис.8

Видим в админке одного бота. Автор поясняет что была сделка и покупатель на этой админке тестил билд. Да и бог с ним.
В принципе все остальное как на видео от автора в официальном топике. https://www.youtube.com/watch?v=dMu0JzyucZ0

Не сказать что бы я был в восторге от админки. Темная. Цвета выедают глаза. Такое ощущение, что на детвору рассчитано. Может я и не прав, но не люблю такие админки. Пусть это будет на моей совести Дополнительная информация – админку не выдают на руки. Она устанавливается на сервак и домен овнера. Арендатор получает к ней доступ и пользуется до тех пор, пока оплачивает аренду. Тут следует упомянуть старый добрый вопрос о абузах и смене доменов/ip адресов. Если бот попадет на трэкеры – жизнь такого домена/ip адреса будет крайне ограниченной. Арендатором хорошо в этом отношении. Весь гемор ляжет на автора. Но как быть с загрущками? Кто компенсирует простой если что?

Цитата:

<Ar3s> Смотри какой еще вопрос. Ты не даешь админку людям? Админка хостится у тебя?
<cerber_ovner> Да, так и есть. Это сделано в целях безопасности. Что бы не слили бота.
<Ar3s> Обфусцируй. Заверни в докер и отдавай. Ибо 100% обвинят с сливе логов на сторону. Как было с анубисом если что
<cerber_ovner> но его слили
<cerber_ovner> хоть и криво расшифровали для слива
<cerber_ovner> но всё же
<cerber_ovner> Мы людям и основной модуль бота не отдаём, он подтягивается с нашего сервера с админкой (через ТОР) при запросе бота
<cerber_ovner> т.е. мы основной модуль перестаём выдавать людям, как срок аренды кончается

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

Для теста нашел два девайса.
1. Sansung Galaxy Note 4 (android 6.0.1) Рис.9 / Рис.10
2. Xiaomi Redmi 5 (android 7.1.2) Рис.11

Для ясности – мой билд назывался "testing mode". Я не косил под всякие там флэши, адобы и гугл. Голый хардкор.
На момент тестов билд палился 16 антивирусами. Рис.12 (предоставлено автором)

Заливаем APK на тушки и производим запуск: Рис.13 | Рис.14 | Рис.15 | Рис.16 | Рис.17 | Рис.18

На старте я попытался вести себя как неопытный юзер. Ну боюсь я всего непонятного. Не включил так требуемых ботом прав. И тут началась жесть. Скрины сделать просто не смог. Телефон брыкался как дурной. Без остановки требовал права то на одно то на другое. В админку отстучался, но пользоваться им было невозможно.

Рис.19 | Рис.20 | Рис.21

Попытался дать нужные ему права – фигушки. Своими запросами телефон не давал войти в настройки и предоставить нужные права. Попытка убийства бота из админки не дала результата. Бот не удалялся. Написал автору. Тот быстро все проверил и подтвердил баг. За пару часов накатал исправление и выдал мне доступ к билдеру. (об этом позже). Отправил телефон в ребут. После ребута запросы перестали сыпаться. Но бот явно засел в телефоне. Аккумулятор жрало на ура. Хотелось попытаться очистить телефон и удалить бота штатными средствами. Установил KIS из плэй маркета. Запустил скан, получил алерт. Попытался удалить, но фигушки там. Ничего не помогало. Дал антивирусу админские права. Не помогает. Он находит два вируса (по словам автора – основное тело и модуль), но удалить не может. Зато я смог в настройках подрезать права бота. После чего благополучно удалил его с телефона. Повторная попытка установки не дала результатов. Пробовал и этот же билд и другой. Без толку.

Рис.22 | Рис.23 | Рис.24 | Рис.25

Сделал новый билд. Там кстати все просто в билдере. Рис.26

Вылез косяк. В тестовой админке не был настроен https. Мой билд не работал. Сделал без шифрования – взлетело. Автор пояснил что на демо админку не вешал белый домен и, следовательно, не настраивал сертификат.
Скачал на телефон и попробовал снова. Но на этот раз соглашался со всем и делал все что хочет бот. Установка прошла на ура. Не понравился момент с выдачей админиских привилегий. Я понимаю, что на андроиде иначе нельзя. Но этот момент нужно продумывать. Делать красивую заманушку на тему почему пользователь должен залезть в настройки и включить все. И обязательно нужно сделать больший период между запросами на доступ. Просто не успеваешь найти нужный пункт меню, что бы дать привилегии как запрос выскакивает снова.
Еще важный момент. На момент установки бота и выдачи привилегий в системе не была введена банковская карта. Бот открыл окно ввода банковских реквизитов. Если не вводить реквизиты – окно выскакивает снова. Если ввести – в админке появляется введенный текст. Без проверки кстати. И в самом андрюше карта не появляется почему-то.

Рис.27 | Рис.28 | Рис.29 | Рис.30 | Рис.31 | Рис.32

Попробовал и погонял функционал админки и бота. Отправлял уведомления, включал кейлогер, грабил корованы контакты и смс. Все работает без проблем.
Трудность возникла с pushup уведомлениями и открытием урла. Чет у меня не получалось самому это сделать. Но автор пояснил как и что. Все работает в общем.
Установил paypal приложение из маркета для проверки банк-модуля. При старте выскакивает окно пайпэла. Вводишь данные на вход. Затем тут же открывается родное окно, которое было слоем ниже. Там вводишь повторно. Проверки правильности ввода информации из первого окна нет. Можно писать любую чепуху.

Рис.33 | Рис.34 | Рис.35 | Рис.36 | Рис.37 | Рис.38 | Рис.39 | Рис.40 | Рис.41 | Рис.42 | Рис.43 | Рис.44

Реверс:
А тут, дорогие друзья, возник целый ряд проблем. Мне нужен был реверс. Нужно было понять есть ли там внутри анубис либо его части. Ибо тест на вирустотале показал сработку идентичную анубису.
Нашел реверсера. Отдал билд на распаковку… Пролет. "Ой да там строки пошифрованы…", "Да тут надо неделю потратить на анализ…" и т.д. Второй реверсер повел себя полностью аналогично. В запасе остался только модер с кору с ником f20f9f. Отдал человеку билд на анализ. Ответ получил достаточно оперативно. Первый блин комом и инфы не очень много, но давайте ее рассмотрим.

Цитата:

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

[CODE=java]"<activity android_exported="true" android_name="com.wdjkx.nrqphkwz.ConfirmLockPattern"> // This line was added by me. </activity>"[/CODE]

Цитата:

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

Крипт апк имеет. Идет шифрование классов "com.wdjkx.nrqphkwz.jqfnjcj.zmjotfcvb". На данном этапе развития малвари этого мало. Строки по коду не шифруются. Вклчюена отладки. Когда бот запущен он выводит кучу полезной инфы для ресерчеров ^_^
Шифрование присутствует. Но об этом ниже.

По сути обычный код, ни чего интересного. Есть во всех даже паблик ботах. Скорее всего будут проблемы работы на версиях андроида 8 и выше.
Цена данному боту баксов 300 это за глаза. Защиты от снг нету. Работает везде.

<f20f9f> rc4 есть

Код:
public String a(String paramString)
{
try
{
paramString = new String(new com.ksbtxnmxs.entvbx.a.a(paramString.substring(0, 12).getBytes()).a(b(new String(Base64.decode(paramString.substring(12), 0), "UTF-8"))));
return paramString;
}
catch (Exception paramString)
{
for (;;) {}
}
return "";
}

public byte[] b(String paramString)
{
int i2 = paramString.length();
byte[] arrayOfByte = new byte[i2 / 2];
int i1 = 0;
while (i1 < i2)
{
arrayOfByte[(i1 / 2)] = ((byte)((Character.digit(paramString.charAt(i1), 16) << 4) + Character.digit(paramString.charAt(i1 + 1), 16)));
i1 += 2;
}
return arrayOfByte;
}
Цитата:

<f20f9f> Расшифровка строк
<f20f9f> оба апк шифрованные прогуардом
<f20f9f> отилчие странное
<f20f9f> в 2 байта)
<f20f9f> ток похоже это не рц4 а цезарь))
<f20f9f> короче смотри

Код:
   if (this.a.b(this)) {
return;
}
paramBundle = new Point();
getWindowManager().getDefaultDisplay().getSize(paramBundle);
com.ksbtxnmxs.entvbx.b.a locala = this.a;
String str = this.b.O;
StringBuilder localStringBuilder = new StringBuilder();
this.b.getClass();
localStringBuilder.append("");
localStringBuilder.append(paramBundle.x);
locala.a(this, str, localStringBuilder.toString());
locala = this.a;
str = this.b.P;
localStringBuilder = new StringBuilder();
this.b.getClass();
localStringBuilder.append("");
localStringBuilder.append(paramBundle.y);
locala.a(this, str, localStringBuilder.toString());
try
{
if (!this.a.d(this, this.b.c).contains(this.b.aL)) {
break label239;
}
this.a.a(this.c, this.b.dT);
this.a.g(this);
}
catch (Exception paramBundle)
{
for (;;) {}
}
this.a.a(this.c, this.b.dS);
this.a.d(this);
label239:
paramBundle = this.a;
this.b.getClass();
com.ksbtxnmxs.entvbx.b.a.a(this, "", 10000L);
if (!this.a.a(this, kpgtlvfccubwalgy.class)) {
startService(new Intent(this, kpgtlvfccubwalgy.class));
}
finish();
Цитата:

<f20f9f> стартовый класс
<f20f9f> ни каких проверок ни чего чтобы прекратить работу активити

Цитата:

<Ar3s> Так а что на предмет наличия кусков анубиса?
<f20f9f> Анубиса нет
<f20f9f> Бот очень простой
<f20f9f> Делали на скорую руку

Цитата:

<Ar3s> Тут везде и всюду идет упоминание дополнительной либы. Основной. Т.е. бот работает по принципу лоадера и основной функционал выкачивает при старте.
<f20f9f> Мне кажется её тупо там нет
<f20f9f> На счёт либо сделано чисто но в ресурсах мусор
<f20f9f> То есть доп либ весомый нет
<f20f9f> Типа аппкомпакт
<f20f9f> На 8ке работа точно уже не будет
<Ar3s> почему?
<f20f9f> На 8 плюс ввели права чтобы приложение могло загружать апк файлы как лоадер
<f20f9f> Этих прав в манифесте нет
<f20f9f> И расширить функционал с помощью даже декс он не сможет
<f20f9f> Так как права должны быть прописаны в манифесте
<Ar3s> понял

Таким образом осталось три важных вопроса.
1. Что там за основной модуль бота? Который подтягивается при старте основного функционала – не понятно. Какова его функция и что внутри? Никто из реверсеров ни словом о нем не обмолвился.
2. Необходимо проверить работу доп. модуля на восьмой версии андроида. Таковой у меня прямо сейчас под рукой нет. А ради обзора я не побегу покупать.
3. Где там реализована защита от работы по СНГ?

Дабы пользователи форума не чувствовали себя обделенными – вот ссылки на теханализ сделанный сторонними специалистами – https://habr.com/ru/post/459858/ зеркало здесь https://xss.is/threads/30405/ А скоро выйдет еще материал от https://twitter.com/LukasStefanko (инфа от автора)
Сильно меня покоребил выход стороннего анализа. Ну не верю я в совпадения.

Инжекты:
В качестве примеров мне были выданы некоторые инжекты. Инжект представляет из себя html файл и png картинку. Рис.45

Цитата:

<cerber_ovner> это как пример людям даём
<cerber_ovner> для вёрстки своих
<cerber_ovner> во времена анубиса, ред алерта итд были темы на форумах ,мол пишу инжекты) Люди по 25$ их делли
<cerber_ovner> суть вся инжекта тебе надо сделать Android.returnResult(JSON)
<cerber_ovner> js код выполнить этот
<cerber_ovner> но учитывать надо ещё то, что многих функций JS нету в стандартном браузере на 5ом и 6ом андроиде
<cerber_ovner> а это let переменной, foreach цикла итд
<cerber_ovner> комментарии // не поддверживаются, только /* текст */
<cerber_ovner> просто если будут ошибки, инжект работать не будет
<Ar3s> это понятно
<cerber_ovner> + суть, инжекты многостраничные если, ты делаешь Android.returnResult на каждой странице, и он дополняет информацию сворованную у юзера, но если пользователь на последней странице, и надо инжект закрыть после выполнения, тебе надо exit true в json добавить. Ты увидешь, там скрытый input находится на формах везде
<cerber_ovner> на последней странице
<cerber_ovner> ну или в пейпал на первой, ибо это обозначает что всё, после ввода и выполнения надо закрыть инжект

Подведем итоги:
1. Заявленный функционал присутствует. Бот работает. Описанию соответствует.
Недостатки – не самый высокий уровень кода бота. Лишние килобайты стоило бы скинуть. Иногда сбоит. Например вываливается окно с повторным вводом кредитной карты. Нет проверки вводимых данных в инжектах. (Хотя я не представляю как такую проверку сделать на андроиде, но В ИДЕАЛЕ хотелось бы). Следует продумать обфускацию билдов. Сделать их более уникальными и защищенными.
2. СИ. Следует не пожалеть времени и серьезно поиграться с вариантами социальной инженерии. В боте есть основные, необходимые для работы, разводки. Но на мой взгляд их можно было сделать лучше и продуманнее. Пересмотреть так же запросы на повышение прав и их периодичность.
3. Админка не фонтан, но вполне юзабельна. Интуативно понятно, что и где находится. Кроме логов по ботам. К ним можно добраться только из самого бота, нажав соответствующую кнопку.
Цветовая гамма – на вкус и цвет. Из явных недостатков – нет массовой очистки логов. Приходится удалять по одному. Админка на серваке овнера!
4. Цена… Вот тут я сильно подвис. Спрос рождает предложение. Существующая цена сильно завышена. Но т.к. нет сильной конкуренции на этом направлении и тенденции направлены в сторону подобных трехзначных цифр – мне крыть нечем.

Общее впечатление – неплохо, но есть над чем еще поработать. Радует, что автор прям оперативно все исправляет и фиксит и. хочется надеяться, что это не навернется после первых трех продаж.

Предпубликационные дебаты:

Цитата:

<cerber_ovner>Про банковские карты – это испралвено. Признаюсь, Была такая проблема. Теперь если юзер закрыл форму ввода карты, она второй раз не вылезет. В админке надо будет активировать снова инжект карт.

Цитата:

<cerber_ovner> Ты невалидную карту 1234 5678 9012 345 не введёшь
<cerber_ovner> у карты контрольная сумма проверяется (это сделано чтобы юзер поверил что карту надо нормальную вводить)
<cerber_ovner> Я могу JS код дать из инжекта для проверки
<Ar3s> Я от балды ввел карту. И оно схавало. Я не использовал реальную карту!
<cerber_ovner> Карта проверяется алгоритмом луна, это не даёт ввести любые цифры (пользователь думает что надо реальную карту ввести). Возможно звезды сошлись и ты просто наугад ввел валидную последовательность.

Цитата:

<cerber_ovner> "защиты от снг нету работает везде"
<cerber_ovner> я только тебе тестовый режим в билдере галочку
<cerber_ovner> оставил
<cerber_ovner> чтобы по СНГ работа была
<cerber_ovner> а так блокруется по стране сим-карты
<Ar3s> Я делал сам два билда. Один тестовый, Второй как ты показывал, с включенной защитой. Реверсеру давал второй.
<cerber_ovner> Да я могу тебе сам показать исходник в котором проверка происходит.
<cerber_ovner> https://obzor.dlab.im/screen/cerberus/sng.png

Цитата:

<cerber_ovner> Про мусор с андроид студии не понятно немного, ибо андроид студия не участвовала в разработке вообще.

Цитата:

<cerber_ovner> Про то что не работает на 8ом андроиде – бред. Без проблем выдам тестовый билд, запустите либо на виртуалке, либо на реальном девайсе.
<cerber_ovner> у нас нету УСТАНОВКИ апк
<cerber_ovner> у нас АПК используется как плагинмодуль
<cerber_ovner> это дефолтный функционал андроида
<cerber_ovner> апк работает от наших прав)

Цитата:

<cerber_ovner> Далее про детекты и прочее: у нас нету своего криптора, это в планах. Используйте фтткрипт, и на выходе у вас будет 0 детектов. Всем нашим клиентам мы даём инвайт в их крипт сервис. У нас только идёт обфускация кода, для более трудного его анализа, и не более.

Цитата:

<cerber_ovner> Антивирус модуль не увидит (что второе опредялось – хз). Модуль ложится в приватную директорию приложения, без рут прав к ней доступа нету у сторонних приложений, это безопасность андроида.

Посткриптум:
Я оставляю в этом обзоре невыясненные моменты. Очень хочу что бы в топике разгорелись дискуссии и обсуждения работы продукта. Это позволит поставить все точки над I.

Отдельная благодарность автору бота за предоставленный материал.
Отдельная благодарность f20f9f за анализ APK.
Всем огромное спасибо за потраченное время. Поверьте я убил его гораздо больше. И очень жалею, что не все осветил. Сильно жали сроки. Старался как мог.

Записки на полях специально для damagelab by Ar3s.
Все совпадения случайны.
В результате тестов ни один хомячек не пострадал.

p.s. Перепост для тех кто не читал.

Оставьте комментарий