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

Статья Все дело в обходе приложений Android SSL Pinning и Intercepting Proxy Unaware

вавилонец

CPU register
Пользователь
Регистрация
17.06.2021
Сообщения
1 116
Реакции
1 265
ОРИГИНАЛЬНАЯ СТАТЬЯ
ПЕРЕВЕДЕНО СПЕЦИАЛЬНО ДЛЯ xss.pro
$600 ---> 0x5B1f2Ac9cF5616D9d7F1819d1519912e85eb5C09 для поднятия ноды ETHEREUM и тестов

Что понадобится:​

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

Оглавление​

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

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

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

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

1670438459701.png


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

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

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


1670438485601.png


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

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

Репозиторий : sensepost/objection: 📱 objection — runtime mobile exploration (github.com)

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


1670438516152.png


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

Код:
 objection-g <имя пакета/PID> explore

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

1670438534669.png


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

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

Репо: Фрида (github.com)
Вот самый популярный и широко используемый метод.

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

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

1670438565903.png


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

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)

1670438586770.png


2.5 Использование apk-mitm

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

Репо:

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

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

1670438607420.png


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

1670438642488.png


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

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

Конфигурация сетевой безопасности позволяет приложениям настраивать свои параметры сетевой безопасности с помощью декларативного файла конфигурации . Вся конфигурация содержится в этом файле XML, и никаких изменений в коде не требуется.
Источник : конфигурация сетевой безопасности | Android-разработчики
Конфигурация сетевой безопасности работает в Android 7.0 или выше.
Шаг 1
: Декомпилируйте приложение Android с помощью apktool или альтернатив. И найдите network_security_config.xml файл в папке /res/xml.
Шаг 2.
Файл может выглядеть так, если приложение закрепило собственные сертификаты ЦС.

1670438660938.png


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

1*Bkv16rU_XMruaHICxzKj-A.png


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

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

Здесь первое, что всплывает в моей голове, это « Флаттер ». Приложения, основанные на флаттере, в основном « не знают о прокси ».
Итак, вот наш герой « Reflutter »:
« Эта структура помогает при обратном проектировании приложений Flutter с использованием исправленной версии библиотеки Flutter, которая уже скомпилирована и готова к переупаковке приложения. “

Репо: https://github.com/Impact-I/reFlutter
Шаг 1: установите рефлаттер с помощью pip
Шаг 2: Следуйте командам, показанным на скриншоте ниже.

1670438692605.png


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

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

1670438708456.png



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

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

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

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

За этот метод я хотел бы поблагодарить брата Фариса ❤.
(60) Фарис Мохаммед | LinkedIn

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

1670438736389.png


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

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

1670438757806.png


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


1670438769957.png



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

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

1670438806324.png


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

1670438822658.png


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

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


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