РАЗБОР На проверке 

Реверс-инжиниринг Android RAT: CraxsRAT и EagleSpy

Сергей Попов
Сергей Попов Red Team · 6,5 тыс. сообщений
Подписаться
34
Режим чтения
Развёрнутый манифест Android APK с фрагментами SMALI-байткода на тёмном столе, рядом схема классов с путём извлечения конфигурации CraxsRAT. Латунное пресс-папье и планшет с выводом Frida-перехвата...


CraxsRAT регулярно всплывает в кампаниях против финансового сектора Юго-Восточной Азии: фишинговый сайт под локальный бренд, скачивание APK, кража credentials, вывод средств - всё за одну сессию. В некоторых кампаниях исследователи находили десятки и сотни сэмплов с единой схемой генерации имён пакетов, замаскированных под бренды торговли, доставки и общепита. Когда такой билд попадает на стол, первое, что бросается в глаза - шаблонность архитектуры. Один билдер, одинаковая обфускация, предсказуемые места хранения C2-конфигурации. Ниже - полный цикл реверса: от распаковки APK и разбора манифеста до Frida-хуков для перехвата C2 и генерации YARA-правил.

Профиль угрозы: CraxsRAT, G700 и EagleSpy​

CraxsRAT и EagleSpy - два семейства Android RAT, которые постоянно мелькают в инцидентах финансового сектора Юго-Восточной Азии. Оба дают оператору полный удалённый контроль над устройством, но отличаются по происхождению и набору модулей.

CraxsRAT вырос из SpyMax (ранее SpyNote) после утечки исходников в 2020 году. За разработкой, по неподтверждённым данным, предположительно стоит актор под псевдонимом EVLF (атрибуция требует независимой верификации). Серверная часть на C# упакована DNGuard, мобильный payload - на Java. Одна из последних задокументированных версий - CraxsRAT v7.5 (предположительно апрель 2024). Дальше эволюция привела к G700 RAT - варианту с модулем ransomware locker, подменой криптовалютных адресов и функцией Hide SMS для бесшумного перехвата OTP. Как работает Hide SMS: модуль интегрируется с дефолтным SMS-приложением жертвы, подавляет входящие уведомления и перенаправляет каждый новый OTP в Telegram-бот оператора в реальном времени. Жертва не видит ни одного SMS.

EagleSpy v3.0 предположительно обнаружили в марте 2024 года на одном из хакерских форумов. Главное отличие - встроенный Google 2FA Stealer для перехвата кодов двухфакторной аутентификации и real-time передача через Telegram-бот. EagleSpy целенаправленно бьёт по криптовалютным кошелькам: Trustwallet, Metamask, Coinbase, Kraken. Механизм crypto injection мониторит открытые приложения - при обнаружении криптокошелька выкидывает overlay, поддельную страницу ввода seed-фразы или приватного ключа. Введённые данные уходят оператору мгновенно. Функция Injection обеспечивает персистентность: при каждом открытии кошелька overlay появляется снова. EagleSpy также умеет screen manipulation - отображение произвольного контента или блокировка экрана пустым изображением, чтобы замаскировать действия оператора на устройстве.

Оба семейства дают оператору: кейлоггинг, запись экрана и камеры, перехват SMS и звонков, GPS-трекинг, доступ к файловой системе и полноценный бэкдор через C2-панель.

Цепочка атаки Android RAT: от фишинга до эксфильтрации​

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

Фаза 1 - доставка. Основной вектор - фишинговые страницы под легитимные сервисы. В малайзийской кампании CraxsRAT это были поддельные сайты food-брендов с предложением «скачать приложение для покупки». EagleSpy распространяется через вредоносные APK в сторонних магазинах и ссылки в Telegram. G700 RAT поднимает поддельную страницу Google Play Store - оператор кидает жертве сокращённый URL, ведущий на фальшивую витрину с кнопкой «Установить». Это техника Malicious File (T1204.002, Execution) по MITRE ATT&CK.

Фаза 2 - инсталляция и закрепление. Часть билдов использует двухэтапную схему: dropper-APK с минимальным набором разрешений вытаскивает из assets/ скрытый payload и ставит его на устройство. Payload регистрирует BroadcastReceiver на BOOT_COMPLETED для автозагрузки и запрашивает Accessibility Service - через него перехватывает ввод и управляет жестами.

Фаза 3 - сбор данных. Кейлоггинг (T1056.001), скриншоты (T1113), запись камеры (T1125) и микрофона (T1123), чтение SMS, контактов, GPS-координат. Для финансовых атак критичен перехват SMS-OTP: G700 подавляет уведомления и перенаправляет коды в Telegram-бот, EagleSpy перехватывает Google 2FA напрямую.

Фаза 4 - монетизация. Прямая кража банковских credentials через overlay (фишинговая HTML-страница поверх банковского приложения). Подмена криптовалютных адресов - функция Binanceinj() в G700 заменяет адрес получателя на кошелёк оператора прямо в интерфейсе Binance, жертва видит «легитимную» транзакцию. Вымогательство через ransomware locker - кастомизируемый модуль с блокировкой устройства. В продвинутых сценариях оператор выводит на экран поддельное уведомление об «обновлении ПО», отключает touch-input и работает через удалённый доступ - жертва физически не может вмешаться.

Подготовка лаборатории для анализа вредоносного APK

Детонация RAT на основном устройстве - ошибка, которую допускают один раз. Второго шанса может не быть.

Эмулятор - AVD через Android Studio с root-доступом или Genymotion. Архитектура x86_64 для скорости, но ARM-сэмплы с нативными .so потребуют ARM-образ. Сетевая изоляция обязательна: эмулятор за NAT с контролируемым выходом. Стоит поднять fake C2 - HTTP-сервер на Python (http.server или Flask), принимающий POST-запросы и логирующий payload. Так можно увидеть формат первичной регистрации: device fingerprint, IMEI, информация о SIM-карте.

Статический анализ: jadx (DEX → Java), apktool (ресурсы + smali), Ghidra (нативные .so). Для первого прохода хватит jadx-gui за глаза - покажет основную картину.

Динамический анализ: Frida (JS-хуки в runtime JVM-процесса), mitmproxy или Burp Suite (HTTP/HTTPS-трафик), Wireshark (сырой трафик до TLS-хендшейка). Все инструменты работают в связке: Frida перехватывает расшифровку конфигурации внутри процесса, mitmproxy ловит уже расшифрованный HTTP-трафик на выходе.

Статический анализ CraxsRAT: распаковка APK и извлечение C2​

📚 Часть контента скрыта. Этот материал доступен участникам сообщества с рангом One Level или выше
Получить доступ просто — достаточно зарегистрироваться и проявить активность на форуме

, который вытаскивает childapp.apk из assets/ и ставит на устройство. Именно childapp.apk содержит основной RAT: C2-конфигурацию, фишинговые HTML-шаблоны в res/inject/ и полный набор spyware-модулей.

Я видел, как аналитики тратили часы на изучение dropper-кода и не находили ничего подозрительного - потому что интересное лежит во вложенном APK. Первым делом проверяйте assets/ на вложенные файлы: find sample_src/assets/ -name "[I].apk" -o -name "[/I].dex". Нашли вложенный APK - вытаскивайте и анализируйте отдельно как полноценный сэмпл.

Деобфускация строк и поиск C2-адресов​

CraxsRAT и производные используют Base64 для сокрытия C2-адресов и HTML-кода фишинговых страниц. Это минимальный барьер против автоматических сканеров, не криптография. Скорее красивый фантик, чем реальная защита.

В jadx-gui ищите вызовы android.util.Base64.decode() в классах конфигурации или инициализации. В smali-коде (через apktool) аналогичные вызовы выглядят как invoke-static {v0, v1}, Landroid/util/Base64;->decode([BI)[B. Результат декодирования - IP-адрес или URL C2-панели.

Конкретный паттерн из разбора G700: в каталоге res/inject/ хранятся Base64-закодированные HTML-страницы, имитирующие интерфейсы банков и криптобирж. Функция Binanceinj() декодирует HTML и подставляет адрес криптокошелька оператора вместо адреса получателя - жертва видит «нормальную» страницу транзакции.

ProGuard/R8 (штатный минификатор Android) переименовывает классы в a.b.c.d, но логику не скрывает - вызовы decode(), encrypt(), connect() сохраняют семантику. В некоторых кластерах билдов встречается дополнительное шифрование конфигурационных строк - алгоритмы варьируются между версиями. Тут статический анализ требует ручного восстановления алгоритма из smali. В таких случаях быстрее переключиться на динамику.

Динамический анализ Android RAT с Frida​

Статический анализ показывает структуру. Динамический - поведение: что RAT шлёт на C2, какие данные собирает и в какой последовательности.

Перехват декодирования конфигурации в runtime​

Когда C2-адрес зашифрован сложнее Base64, эффективнее перехватить результат, чем реверсить алгоритм вручную. Frida позволяет хукнуть android.util.Base64.decode() и увидеть все декодированные строки до их использования:
JavaScript:
Java.perform(function() {
    var Base64 = Java.use('android.util.Base64');
    Base64.decode.overload('[B', 'int').implementation = function(input, flags) {
        var result = this.decode(input, flags);
        var decoded = Java.use('java.lang.String').$new(result);
        if (decoded.indexOf('http') !== -1 || decoded.indexOf(':') !== -1) {
            console.log('[C2-candidate] ' + decoded);
        }
        return result;
    };
});
Скрипт перехватывает каждый вызов Base64-декодирования и выводит строки с URL-подобными паттернами. При запуске CraxsRAT-сэмпла в первые секунды после старта в консоль попадает адрес C2, порт и иногда токен авторизации. Для полноты аналогичный хук стоит повесить на overload с String-входом: .overload('java.lang.String', 'int').

Если RAT использует кастомное шифрование - стратегия меняется. В jadx находим метод расшифровки (принимает зашифрованную строку, возвращает открытый текст) и хукаем его return-значение. Имя класса берётся прямо из jadx - даже обфусцированное до a.b.c корректно резолвится Frida в runtime.

Подключение к эмулятору с root: запустить frida-server на устройстве, далее frida -U -f com.package.name -l hook.js --no-pause. Без root - инъекция frida-gadget через apktool, патч smali, пересборка и переподпись APK. Процедура занимает 5-10 минут и документирована в официальном руководстве Frida.

Анализ C2-трафика и эксфильтрации​

После извлечения C2-адреса запускаем сэмпл с mitmproxy в качестве прокси. CraxsRAT использует HTTP/HTTPS для первичной регистрации устройства - POST-запрос с device fingerprint: IMEI, номер SIM, модель, версия Android. Это System Information Discovery (T1082, Discovery). Дальнейшая коммуникация через Web Protocols (T1071.001, Command and Control) - оператор шлёт команды, RAT возвращает результаты.

EagleSpy v3.0 отличается каналом эксфильтрации: данные уходят напрямую в Telegram-бот. В трафике это обращения к api.telegram.org с методами sendMessage или sendDocument. Telegram-токен бота захардкожен в коде и вытаскивается тривиально - поиском строки api.telegram.org в выводе jadx. Комбинация токен + chat_id достаточна для идентификации оператора и мониторинга его активности. (Да, они реально хардкодят токен. Каждый раз.)

Извлечённый C2-адрес открывает операционные возможности: проверка через VirusTotal/Shodan на связанные сэмплы, передача в CERT для блокировки на уровне DNS/IP, анализ C2-панели для оценки масштаба кампании. В подобных кампаниях анализ C2-инфраструктуры позволял выявлять сотни связанных сэмплов.

Маппинг на MITRE ATT&CK: от сэмпла к TTP-профилю​

Сопоставление возможностей RAT с MITRE ATT&CK структурирует результаты для SOC и создания детектирующих правил:

Возможность RATТехника ATT&CKТактика
Фишинговый сайт, скачивание APKMalicious File (T1204.002)Execution
Перехват нажатий и PIN-кодовKeylogging (T1056.001)Collection, Credential Access
Запись экрана и скриншотыScreen Capture (T1113)Collection
Доступ к камереVideo Capture (T1125)Collection
Запись микрофонаAudio Capture (T1123)Collection
Сбор IMEI, SIM, моделиSystem Information Discovery (T1082)Discovery
Base64/DNGuard обфускацияObfuscated Files or Information (T1027)Defense Evasion
HTTP/HTTPS к C2-панелиWeb Protocols (T1071.001)Command and Control

EagleSpy дополнительно реализует overlay-атаку (фишинговая HTML поверх банковского приложения) и перехват Google 2FA. CraxsRAT/G700 добавляет блокировку экрана поддельным уведомлением об «обновлении» - оператору нужно время на перевод средств, и он отключает touch-input, пока жертва наблюдает progress bar.

Маппинг позволяет SOC-команде искать не конкретный хэш, а поведенческий паттерн: приложение с boot receiver + Accessibility Service + обращение к Telegram API из non-messenger процесса. Эта аномалия работает как детект вне зависимости от конкретного семейства.

Детект CraxsRAT: YARA-правила и IOC​

Результат реверса - не только понимание архитектуры RAT. Это конкретные артефакты: YARA-правила для сканирования инфраструктуры и IOC для обогащения SIEM.

На основе dropper-механизма G700/CraxsRAT формируем сигнатуру. Индикаторы: внутренний APK в assets, класс-инсталлятор, характерные разрешения:
Код:
rule CraxsRAT_Dropper_Pattern {
    meta:
        description = "CraxsRAT/G700 dropper APK indicators"
        source = "manual reverse engineering analysis"
    strings:
        $asset = "childapp.apk" ascii
        $installer = "SessionManager" ascii
        $perm = "WRITE_EXTERNAL_STORAGE" ascii
        $boot = "RECEIVE_BOOT_COMPLETED" ascii
    condition:
        uint32(0) == 0x04034b50
        and $asset and $installer
        and ($perm or $boot)
}
Правило проверяет ZIP-заголовок (APK = ZIP-архив, magic bytes PK), ищет строки childapp.apk и SessionManager. Это демонстрационное правило - в продакшене нужно дополнить хэшами конкретных сэмплов, протестировать false positive rate и расширить строковыми индикаторами из конкретного кластера билдов.

Сигнатурный подход (хэши, строки) устаревает быстро: каждый билд из RAT-билдера генерирует уникальный хэш. Поведенческий подход масштабируется лучше. Для CraxsRAT/EagleSpy поведенческий профиль: (1) установка не из Play Store, (2) немедленный запрос Accessibility Service, (3) регистрация на BOOT_COMPLETED, (4) сетевая активность к IP, не связанным с заявленной функциональностью. На сетевом уровне - обращения к api.telegram.org из non-messenger процесса или HTTP POST с JSON-payload, содержащим IMEI и SIM-данные, к серверу, не являющемуся легитимным API бренда.

Из каждого проанализированного сэмпла вытаскиваются три типа IOC:

Сетевые: IP-адреса и домены C2 (из Base64-декодированных строк или Frida-перехвата), порты подключения, Telegram-токены и chat_id для EagleSpy. Характеристики серверной инфраструктуры CraxsRAT варьируются между кампаниями - при анализе стоит фиксировать версию ОС, локализацию и другие параметры сервера как дополнительные индикаторы.

Файловые: SHA-256 хэш APK и хэш вложенного payload, имена пакетов. В ряде кампаний сэмплы CraxsRAT использовали единую схему генерации имён пакетов - паттерн имени позволяет детектировать новые билды без разбора каждого файла по отдельности.

Поведенческие: запрос Accessibility Service при первом запуске, обращение к api.telegram.org из non-messenger процесса, регистрация BroadcastReceiver на BOOT_COMPLETED в сочетании с CAMERA + RECORD_AUDIO + SEND_SMS.

Формирование IOC-фида из результатов реверса и его интеграция в SIEM/EDR - финальный этап, превращающий разовый анализ в системный детект. Одно YARA-правило на dropper-паттерн покрывает серию билдов из одного билдера, а не единичный хэш.

CraxsRAT и EagleSpy часто недооценивают из-за простоты билдера. И тут - системная ошибка. Код после SpyNote-утечки - копипаста, обфускация уровня Base64, Telegram-токены в открытом тексте. По качеству - уровень студенческого проекта. Но RAT-as-a-Service модель, где билдер уходит за сотню-другую долларов на Telegram-каналах, генерирует тысячи уникальных сэмплов ежемесячно. Каждый билд - новый хэш, слегка изменённые строки, другой C2. SOC, который ориентируется только на хэши и не строит поведенческие детекты (Accessibility Service + boot receiver + Telegram API из non-messenger процесса), пропускает основную массу потока. Одно YARA-правило, собранное за вечер реверса, закрывает больше сэмплов, чем месяц работы по спискам IOC из тикетов. Проблема не в том, что эти RAT технически примитивны - проблема в том, что их считают недостойными системного анализа. А потом сотни билдов одного CraxsRAT обнаруживаются постфактум, когда средства уже выведены. В ближайший год RAT-билдеры начнут автоматизировать ротацию C2 и строковую обфускацию - разрыв между скоростью генерации сэмплов и скоростью анализа станет ещё острее. Если хочется отработать навыки реверса мобильных сэмплов на контролируемых стендах - задачи на HackerLab.pro как раз для этого.
Полезно

Комментарии

0

Ещё по теме