Все дело в обходе приложений Android SSL Pinning и Intercepting Proxy Unaware.

Nov 27 2022
Hola H3ckers, мы все знаем, что существует множество статей на тему «Как перехватывать HTTPS-трафик приложений Android», поэтому здесь мы не будем их освещать. Если вы ничего не нашли, обратитесь к следующему: Настройка Android-устройства для работы с Burp — PortSwigger Предварительные требования: Знакомство с прокси-сервером BurpSuite, базовым пентестированием Android и такими инструментами, как adb, frida, Objection, приложение Magisk, декомпиляция/перекомпиляция APK и Подписание АПК.

Хола Х3керс,

Мы все знаем, что существует множество статей на тему «Как перехватить HTTPS-трафик приложений для Android», поэтому здесь мы не будем их рассматривать. Если вы ничего не нашли, обратитесь к следующему:

Настройка Android-устройства для работы с Burp — PortSwigger

Предпосылки:

Знаком с прокси-сервером BurpSuite, базовым пентестированием Android и такими инструментами, как adb, frida, Objection, приложение Magisk, декомпиляция/перекомпиляция APK и подписание APK.

Оглавление

  1. Есть ли в моем целевом приложении закрепление SSL?
  2. Подождите, как мы можем подтвердить пиннинг?
  3. Время обхода
  4. Почему я не могу перехватить трафик приложения, даже если приложение работает с HTTP

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

2. Подождите, как мы можем подтвердить закрепление?

После настройки прокси-сервера как на устройстве, так и на прокси-сервере (Burp), запустите целевое приложение, затем выполните некоторые действия, которые обеспечивают связь между целевым приложением и их сервером.

Пришло время понаблюдать за приборной панелью Burp, в частности, за разделом «Журнал». Если закрепление установлено, то мы сможем увидеть ошибку сертификата следующим образом:

2. Время обхода

2.1 Переместить сертификат — модуль Magisk:

Если ваше устройство рутировано с помощью приложения Magisk, тогда модуль Move Certificate является одним из хороших вариантов.

Этот модуль переместит доверенные сертификаты пользователя в системное хранилище, заставив систему (root) доверять сертификату, который устанавливает пользователь (сертификат нашего прокси CA).

2.2 Инструмент возражения

Репозиторий : sensepost/objection: возражение — мобильное исследование во время выполнения (github.com)

Шаг 1 : Убедитесь, что сервер frida запущен на устройстве Android.

Шаг 2: Прикрепите целевое приложение с возражением с помощью следующей команды:

Возражение -g <имя пакета/PID> исследовать

Затем выполните команду « android sslpinning disable » .

Вот и все, скрипт найдет классы закрепления SSL и перехватит их во время выполнения, чтобы обойти закрепление.

2.3 Фреймворк Фрида

Репо: Фрида (github.com)

Вот самый популярный и широко используемый метод.

Шаг 1 : Убедитесь, что сервер frida запущен на устройстве Android.

Шаг 2: Подключите целевое приложение к frida и запустите свой любимый скрипт обхода SSL.

Ниже приведены мои любимые сценарии:

https://codeshare.frida.re/@akabe1/frida-multiple-unpinning/
https://codeshare.frida.re/@pcipolloni/universal-android-ssl-pinning-bypass-with-frida/

2.4 Использование Xposed Framework

Если ваше устройство рутировано с помощью Xposed framework , вы можете попробовать следующие модули, чтобы обойти закрепление

  1. ac-pm/SSLUnpinning_Xposed: модуль Android Xposed для обхода проверки сертификата SSL (закрепление сертификата). (github.com)
  2. ViRb3/TrustMeAlready: Отключить проверку и закрепление SSL на Android для всей системы (github.com)

apk-mitm — это CLI-приложение, которое автоматически подготавливает файлы Android APK для проверки HTTPS, изменяя файлы apk и переупаковывая их.

Репо:

shroudedcode/apk-mitm: CLI-приложение, которое автоматически подготавливает файлы Android APK для проверки HTTPS (github.com).

apk-mitm можно вытащить с помощью npm.

Шаг 1: Запустите apk-mitm, как показано ниже.

Вот и все, apk-mitm сделал свое дело. Теперь мы можем установить пропатченный apk и перехватить трафик приложения.

2.6 Изменение файла network_security_config.xml

Конфигурация сетевой безопасности позволяет приложениям настраивать свои параметры сетевой безопасности с помощью декларативного файла конфигурации . Вся конфигурация содержится в этом файле XML, и никаких изменений в коде не требуется.

Источник : конфигурация сетевой безопасности | Android-разработчики

Конфигурация сетевой безопасности работает в Android 7.0 или выше.

Шаг 1 : Декомпилируйте приложение Android с помощью apktool или альтернатив. И найдите файл network_security_config.xml в папке /res/xml.

Шаг 2. Файл может выглядеть так, если приложение закрепило собственные сертификаты ЦС.

Источник изображения: developer.android.com

Шаг 3 : Удалите этот раздел тега <pin-set>… </pin-set> и добавьте следующее:

Шаг 4: Теперь сохраните файл и перепакуйте приложение, используя apktool и uber-apk-signer (для подписи измененного apk).

Вот и все, установите наш новый apk, и все готово.

3. Что делать, если приложение не перехватывается, а также не показывает никаких ошибок !!

Здесь первое, что всплывает в моей голове, это « Флаттер ». Приложения, основанные на флаттере, в основном « не знают о прокси ».

Итак, вот наш герой « Reflutter »:

« Эта структура помогает при обратном проектировании приложений Flutter с использованием исправленной версии библиотеки Flutter, которая уже скомпилирована и готова к переупаковке приложения. “

Репо:https://github.com/Impact-I/reFlutter

Шаг 1: установите рефлаттер с помощью pip

Шаг 2: Следуйте командам, показанным на скриншоте ниже.

Шаг 3: Подпишите приложение с помощью uber-apk-signer или любых других альтернатив и установите его.

Шаг 4: Теперь в прокси-сервере Burp начните прослушивать порт 8083 , а также включите « Поддержка невидимого прокси ».

Вот и все, вы готовы идти… !

4. Мое приложение использует только HTTP, но я все равно не могу его перехватить!!

Хм... как-то странно, но иногда такое случается.

Приложения с таким поведением в основном называются приложениями, не поддерживающими прокси-сервер . Такие приложения направляют трафик напрямую в Интернет, не взаимодействуя с общесистемными настройками прокси.

Время обхода:

За этот метод я хотел бы поблагодарить брата Фариса ❤.

(60) Фарис Мохаммед | LinkedIn

Шаг 1: Узнайте адрес домена, с которым приложение связывается с помощью Wireshark. Показано ниже.

Шаг 2: Декомпилируйте приложение с помощью apktool

Шаг 3: Войдите в декомпилированную папку и с помощью инструмента ack/grep найдите файл, в котором упоминается доменное имя.

Шаг 4: Замените доменное имя IP-адресом и портом BurpSuite.

Шаг 5: Перепакуйте приложение, подпишите его и установите на Android-устройство.

Шаг 7: В прокси-сервере BurpSuite на вкладке «Обработка запросов» укажите хост и порт перенаправления в качестве исходного адреса домена, который использовался приложением в первую очередь.

Шаг 8: Настройте соответствие и замену в параметрах прокси, чтобы заменить значение заголовка узла с IP-адреса прослушивателя burp на исходный доменный адрес приложения.

Вот и все. Теперь HTTP-трафик приложения будет перехватываться нашим прокси-сервером Burp.

Примечание. — Здесь, поскольку мы заменяем жестко заданный домен приложения, нам не нужно настраивать прокси-сервер устройства, поскольку приложение напрямую взаимодействует с жестко заданным доменом (мы заменили его IP-адресом нашего прокси-сервера).

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

Спасибо, ребята, удачного взлома :)