Усложняем жизнь реверсерам, или PT MAZE против уязвимостей в Android-приложениях

  • #Реверс
  • #PT_Maze

О чем статья

Исследуем популярные в России Android-приложения и проверяем, можно ли повысить их защищенность с помощью протектора PT MAZE

Большинство Android-приложений легко поддаются реверсу: злоумышленнику достаточно воспользоваться бесплатными инструментами декомпиляции, чтобы получить близкий к исходному код и проанализировать его на предмет уязвимостей. Простота процесса открывает широкие возможности для автоматизации — в том числе с помощью сканеров, выполняющих статический анализ кода. Тем не менее мы можем усложнить жизнь злоумышленникам с помощью протекторов, реализующих разные техники обфускации, шифрования кода/файлов приложения, искажения графа потока управления и т. д. 

Мы взяли 94 наиболее популярных в России мобильных приложения (по статистике на август 2025 г.) и на их примере проверили эффективность протектора PT MAZE для сокрытия потенциальных уязвимостей, а также механизмов защиты. 

Методология 

Для загрузки APK-файлов мы выбрали утилиту Apkdgo. В качестве сканера уязвимостей взяли Mobile Security Framework со встроенным модулем APKiD (автоматически выполняет сигнатурную проверку на наличие защитных техник). Для проведения шилдинга использовали PT MAZE, в конфигурацию которого входили следующие защитные механизмы: 

  • обфускация идентификаторов ресурсов;
  • обфускация нативной библиотеки;
  • шифрование значений ресурсов; 
  • шифрование сторонних библиотек;
  • шифрование строк; 
  • упаковка и шифрование DEX-файлов;
  • усиление безопасности SSL/TLS-соединений;
  • удаление метаданных.

Чтобы сравнить эффективность протектора для разных типов приложений, мы разделили выбранные APK-файлы на восемь категорий (см. рис. 1). Важный момент: мы фокусировались на статическом анализе, поэтому не учитывали техники RASP и другие средства противодействия динамическому анализу, которые есть в арсенале PT MAZE.

Рисунок 1. Разбивка приложений по категориям.svg
Рисунок 1. Разбивка приложений по категориям
Рисунок 2. Этапы исследования.svg
Рисунок 2. Этапы исследования

Чтобы не раскрывать конфиденциальные данные, мы тестировали приложения локально. Результаты использовали только для сбора статистики: не сохраняли и не публиковали их на mobsf.live

Анализ уязвимостей

При оценке приложений MobSF выявляет следующие категории элементов, влияющие на безопасность софта:

  • High — уязвимости высокого уровня риска. Их эксплуатация может привести к утечке конфиденциальных данных, компрометации приложения или обходу механизмов защиты. Например, ошибки в криптографических алгоритмах, небезопасные сетевые конфигурации, уязвимые параметры, неконтролируемый доступ к данным и др.
  • Medium — уязвимости среднего уровня риска. Они указывают на небезопасные практики разработки и наличие конфигураций, которые могут привести к компрометации приложения или утечке данных. Например, слабые криптографические алгоритмы, опасные операции с файлами и БД, уязвимые реализации WebView и т. д.
  • Info — недостатки, которые могут косвенно повлиять на безопасность приложения. Например, детали реализации кода (работа с каталогами и буфером обмена, использование криптографических библиотек и др.), сетевых конфигураций и внешних сервисов. Это не уязвимости, но MobSF учитывает их при расчете итоговой оценки безопасности.
  • Secure — успешно реализованные защитные меры. Например, проверки на root и отладку, защита от tapjacking, контроль целостности среды (через специализированные API), SSL-пиннинг и безопасные параметры внешних сервисов.

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

После проведения первичного сканирования мы применили ко всем приложениям шилдинг с одинаковыми параметрами. Сравнительный анализ показал: благодаря протектору общее число уязвимостей, обнаруженных с помощью MobSF, сократилось на 40%. При этом количество элементов категории High снизилось на 67%, Medium — на 24%, Info — на 80%. 

Рисунок 3. Среднее число уязвимостей на приложение.svg
Рисунок 3. Среднее число уязвимостей на приложение

Отдельно остановимся на элементах категории Secure. После шилдинга видимость корректно реализованных мер безопасности снижается. Это приводит к ложноотрицательным результатам в отчетах MobSF: защитные механизмы сохраняются, но их уже нельзя выявить с помощью статического анализа. В среднем число выявленных элементов категории Secure сократилось на 67%.

Рисунок 4. Среднее число выявленных Secure-элементов на приложение.svg
Рисунок 4. Среднее число выявленных Secure-элементов на приложение

Также анализ показал, что эффективность протектора при сокрытии уязвимостей варьируется в зависимости от категории приложения (см. рис. 5).

Рисунок 5. Эффективность протектора_ доля скрытых уязвимостей в приложениях разных категорий.svg
Рисунок 5. Эффективность протектора: доля скрытых уязвимостей в приложениях разных категорий
Group 68.svg
Рисунок 6. Среднее количество уязвимостей до и после шилдинга

Вводим дополнительные метрики

Помимо анализа уязвимостей и недостатков защиты, MobSF фиксирует следующие элементы, формирующие потенциальные векторы атак:

  • Hotspot — потенциально небезопасные практики разработки, требующие ручной проверки (домены, разрешения, сертификаты).
  • Code Analysis — участки кода, в которых есть уязвимости и небезопасные методы. 
  • Behavior Analysis — потенциально опасное поведение приложения;
  • Вызовы Android API — указывают на использование небезопасных функций.
  • Зависимости SBOM — указывают на наличие известных уязвимостей в сторонних библиотеках.
  • Количество строковых значений.
  • Обнаруженные секреты (учетные данные, API-ключи, токены), домены и URL.

Анализ показал: после проведения шилдинга количество секретов, обнаруженных с помощью MobSF, сократилось на 71%. По остальным метрикам видимость недостатков снизилась в среднем на 90%.

Рисунок 7. Эффективность протектора_ доля скрытых секретов.svg
Рисунок 7. Эффективность протектора: доля скрытых секретов

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

Обнаружение защитных техник

Первичный анализ APK-файлов с помощью модуля APKiD показал, что во всех исследуемых приложениях использовались следующие защитные техники:

  • anti_debug — защита от отладки;
  • anti_disassembly — защита от дизассемблирования;
  • anti_vm — защита от запуска в виртуальных машинах;
  • obfuscator — обфускация исходного кода.

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

Рисунок 8. Эффективность протектора_ доля скрытых защитных техник.svg
Рисунок 8. Эффективность протектора: доля скрытых защитных техник

Отметим, что из-за ложноположительных срабатываний сканера число обнаруживаемых строковых значений в среднем увеличилось в 10,3 раза

Результаты: эффективность протектора

Рисунок 8. Эффективность протектора_ доля скрытых защитных техник (1).svg

Мы дěлаем Positive Research → для ИБ-экспертов, бизнеса и всех, кто интересуется ✽ {кибербезопасностью}