- Capture all android network traffic
- Modify target app
- Setup pcap remote
- Setup wireshark
- Перехват HTTPS-траффика между Android-устройством и внешним сервером
- Теория
- Практика
- Эмулятор Android: как отслеживать сетевой трафик?
- Анализ трафика приложений на Android Emulator. Причем здесь Root?
- Установка Android Emulator
- Установка сертификата для proxy-sniffer
- Проверяем, все ли ок
- Я есть root
- Делаем сертификат доверенным
- SSL-Unpinning
Capture all android network traffic
So you are performing a pentest on an android app and you have got into a situation where basic certificate pinning bypass doesn’t work. Or you have been dealing with custom protocol instead of good ol’ HTTP. The goal of this post is to teach you how to capture any network traffic on your android device (no root required).
How does it work you ask? We are going to use a fantastic app, provided by Andrey Egorov(@egorovandreyrm.), pcap remote. It works by creating a VPN connection and capturing all the traffic going through that connection and redirecting it to the wireshark where we can analyze it in real-time.
If you are testing on an android version greater than 7.0 you are going to need to tamper with an apk a little, since google changed network security policy and made it “harder” for us to play. Basically what we need to do is to modify the application to accept any self-signed CA so we can intercept and decrypt the traffic. For this example, I’m going to use ‘twitter’ android app. Let me show you.
Modify target app
Use apktool to decompile your apk.
In AndroidManifest.xml edit application tag and add ‘networkSecurityConfig’ parameter. Your target application might already have this value set, in that case you can skip this step.
Create/edit network security configuration file. It is stored at location specified in the application tag in AndroidManifest. By default its location is: ‘res/xml/network_security_config.xml’.
Edit it to look like this:
Recompile the apk, sign it and install it on the device.
Setup pcap remote
Now let’s setup pcap remote.
First we are going to install ssl certificate. Tap on 3 dots in top right corner, then settings and then ‘Install’ under ‘SSL Certificate’ category, follow the installation dialogs and set the device password if prompted.
Make sure to select ‘SSH Server’ as capturing mode and toggle ‘Make HTTPS/TLS connections decryptable’ .
On the top click on the triangle icon with number one in it and select your target application.
Setup wireshark
Now it’s time to connect wireshark with pcap remote.
NOTE: If you are using android emulator for testing, make sure to portforward the port.
Open wireshark and select ‘SSH remote capture: sshdump’.
Enter your phone’s IP address (or 127.0.0.1 if you are working with an emulator) and port that pcap remote is running on. Also on the ‘Authentication’ tab enter any ssh username and password and click start.
Start your application and analyze decrypted traffic in realtime.
Источник
Перехват HTTPS-траффика между Android-устройством и внешним сервером
Иногда бывает любопытно подсмотреть, что пересылают туда-сюда разные Android-приложения по HTTP и HTTPS протоколам. Иногда даже при разработке собственного ПО удобно видеть весь трафик в реальном времени. Для реализации этих задач давно придумано много хороших программ, таких, к примеру, как Charles или Fiddler2. На самом деле их намного больше, вот только две вышеуказанные дают возможность нормально просматривать не только HTTP, но и HTTPS.
Трудности начинаются тогда, когда речь заходит о перехвате трафика между Андроид-устройством и внешним сервером. В случае незашифрованного (HTTP-протокол) трафика всё весьма тривиально (вот и инструкция есть) — разрешаем Fiddler2 внешние соединения, в Андроиде устанавливаем прокси сервером адрес нашей машины с Fiddler2 — и вуаля, всё работает. А вот на настройку перехвата HTTPS-трафика у меня ушло чуть больше времени.
Теория
Итак, в чём же сложность? В том, что при использовании протокола HTTPS клиент по-умолчанию проверяет, а действительно ли тот сервер, к которому он подключился, является нужным. Для этого используются сертификаты. И вот у настоящего сервера этот сертификат, понятное дело, тоже настоящий и соответствует открытому URL, а вот у нашего прокси — нет. Для решения этой проблемы в десктопных операционных системах в таких случаях есть возможность сгенирировать в Fiddler2 поддельный сертификат, импортировать его в доверенные — и теперь клиент всегда будет верить, что соединение с Fiddler2 вполне безопасно. К сожалению, с мобильным устройством такой легкий финт ушами не прошел.
Во-первых, возможности импортировать внешний сертификат в Андроиде версий младше 4.0 нет. Есть какие-то не внушающие доверия варианты с рутоваными девайсами — но это не наш путь.
Во-вторых, в Андроид даже версии 4.0 импортировать сертификат Fiddler2 не получается. Дело в том, что генерируемый по-умолчанию сертификат не соответствует каким-то там Андроидовским критериям безопасности и не устанавливается. Его нужно генерировать специальным образом.
В-третьих, совсем даже не факт, что все подряд программы сразу поверят поддельному сертификату. Есть нюансы.
Практика
- Берём устройство с Андроидом версии 4.0 или выше. Нет, девайс с 2.3 не подойдет. Да, эмулятор версии 4.0 подойдет.
- Устанавливаем на компьютер последнюю версию Fiddler2.
- Устанавливаем специальные библиотеки генерации Андроид-совместимого сертификата безопасности отсюда.
- Экспортируем из Fiddler2 сертификат безопасности («Tools->Fiddler Options->HTTPS->Export root certificate to Desktop»). Кладём на флешку, в корень (ну или на эмулятор, если вы используете его).
- На Андроиде добавляем сертификат безопасности в доверенные(«Settings > Security > Install from SD card»)
Запускаем Fiddler2, разрешаем в настройках внешние коннекты .
На Андроиде в настройках сети прописываем в качестве прокси адрес нашей десктопной машины с Fiddler2.
Итак, с браузером получилось. К сожалению, не все программы столь доверчивы, как браузер. К примеру, в моей собственной софтине, где я использую Apache HTTP Client, способ не прокатил — плевал апачевский клиент на доверенные сертификаты операционки. В этом случае мне пришлось отключить эту проверку вручную, таким вот образом:
где EasySSLProtocolSocketFactory взят отсюда и разрешает доверие к любым сертификатам.
Не безопасно, только для отладки!
После этого трафик моей программы стал также успешно отображаться в Fiddler2.
Источник
Эмулятор Android: как отслеживать сетевой трафик?
Как отслеживать сетевой трафик, отправляемый и получаемый от моего эмулятора Android?
Есть два способа захвата сетевого трафика непосредственно из эмулятора Android:
Скопируйте и запустите ARM-совместимый двоичный файл tcpdump на эмуляторе, возможно, записав вывод на SD-карту (например tcpdump -s0 -w /sdcard/emulator.cap ).
Запустите, emulator -tcpdump emulator.cap -avd my_avd чтобы записать весь трафик эмулятора в локальный файл на вашем ПК
В обоих случаях вы можете проанализировать файл pcap с помощью tcpdump или Wireshark как обычно.
Также можно использовать http-прокси для отслеживания http-запросов от эмулятора. Вы можете передать -http-proxy флаг при запуске нового эмулятора, чтобы установить прокси (пример burp ) для мониторинга трафика Android. Пример использования ./emulator -http-proxy localhost:8080 -avd android2.2 . Обратите внимание, что в моем примере я использую Burp, и он прослушивает порт 8080. Более подробную информацию можно найти здесь .
Для OS X вы можете использовать Charles , это просто и удобно.
Для получения дополнительной информации, пожалуйста, ознакомьтесь с публикацией в блоге Android Emulator и Charles Proxy .
Текущая версия Android Studio неверно применила этот -tcpdump аргумент. Мне все еще удалось захватить дамп, передав соответствующий параметр в qemu следующим образом:
Да, wirehark будет работать.
Я не думаю, что есть простой способ отфильтровать только трафик эмулятора, поскольку он исходит с того же IP-адреса src.
Возможно, лучшим способом было бы создать очень простую среду VMware и запускать только там эмулятор, по крайней мере, так не было бы слишком большого фонового трафика.
Вы можете использовать Fiddler для отслеживания http-трафика:
Вы также можете использовать Fiddler2 здесь .
Теперь можно использовать Wireshark напрямую для захвата трафика эмулятора Android. Есть плагин extcap под названием androiddump, который делает это возможным. У вас должен быть tcpdump исполняемый файл в образе системы, работающий на эмуляторе (он есть в большинстве последних образов, протестирован с образами API 24 и API 27) и adbd работающий от имени пользователя root на хосте (просто запустите adb root ). В списке доступных интерфейсов в Wireshark (только версия Qt, устаревший GTK + его нет) или в списке, показанном с помощью, tshark -D должно быть несколько интерфейсов Android, позволяющих прослушивать трафик Bluetooth, Logcat или Wifi, например:
android-wifi-tcpdump-emulator-5554 (Android WiFi Android_SDK_built_for_x86 emulator-5554)
Источник
Анализ трафика приложений на Android Emulator. Причем здесь Root?
Привет! Я думаю, что наберется немало людей, перед которыми стоят интересные задачи по работе с приложениями. Например — анализ трафика для, разумеется, тестирования этих самых приложений! Вам выпало нелегкое бремя — необходимо отдебажить продовую сборку чего-либо и вы начинаете свои поиски решений проблем. А проблем у вас на этом пути будет много. О том, как их можно решить я и пишу.
Классический путь начинается с установки какого-нибудь Charles, настройки в нем proxy-сервера и попытки слушать трафик, однако мы быстро натыкаемся на проблему — все адекватные современные приложения используют HTTPS, а поэтому — на ваше устройство придется установить сертификат, который и позволит слушать трафик. Тут то и начинается самое интересное.
Давайте создадим чек-лист, на который будем ориентироваться в процессе:
⚑ Предварительные подготовления, позволяющие начать установку эмулятора
⚑ Вы находитесь здесь
⚐ Установка сертификата для MITM
⚐ Проверка работоспособности прослушки трафика
⚐ Перенос сертификата в системное хранилище
Установка Android Emulator
Я не буду описывать всю процедуру установки, надеюсь, вы сможете сделать все подготовительные действия, чтобы оказаться в ситуации, когда вам осталось лишь выбрать определенный тип OS в эмуляторе, а все предыдущие шаги уже выполнены.
1. Выбираем любой подходящий вариант, с важной оговоркой — это должна быть сборка без Google Play, но с Google Play Services (далее будет видно). Соответственно — выбираем устройство без треугольника
2. Выбираем любой интересующий образ в котором есть Google Play APIs
3. Устанавливаем параметр Cold Boot
Установка сертификата для proxy-sniffer
Для прослушки трафика я буду пользоваться Fiddler Everywhere. И покажу порядок настройки данной софтины, согласно которому мы закроем еще один пункт нашей дорожной карты.
Тут я сделаю небольшое лирическое отступление — данная программа платная, да и еще по подписке, и стоить будет, в лучшем случае — 10$ в месяц. Но, у вас будет триал в 30 дней, после которого нужно больше золота, поэтому можно использовать любой другой инструмент. Сам я пытался заюзать Postman — в нем тоже есть proxy-tooling, однако, корневые сертификаты, которые генерирует Postman, не пригодны для установки в Android 10 / 11. Однако, служба поддержки уже бдит, и, надеюсь, за отведенные 30 дней триала все заработает как надо (в Postman) и вы сможете пользоваться наиболее удобным (с моей точки зрения) инструментом для решения данной задачи. Когда это случится — я дополню данную статью. А теперь возвращаемся к процессу установки сертификата на устройство (эмулятор).
Нам необходимо раскрыть пункт Advanced Settings в настройках Fiddler, и экспортировать корневой сертификат. В данный момент я пользователь Windows и на данной ОС он окажется на рабочем столе, подсказка об этом показывается по наведению на значок вопроса.
После экспорта сертификата, плавным движением кистей рук, переносим его на запущенный эмулятор — файл окажется в папке . /Downloads . После чего можно сразу идти в настройки и устанавливать наш серт:
Отлично! Можем поставить галочку у еще одного пункта:
⚑ Установка сертификата для MITM
Проверяем, все ли ок
Самое время проверить, принесли ли наши усилия хоть какие-то полезные плоды. Подопытным кроликом сегодняшнего эксперимента будет приложение Reddit и первое, что мы увидим, если попытаемся загрузить посты:
А также бесконечное количество попыток SSL-handshake в Fiddler. Кажется, пора поставить прочерк сразу напротив двух пунктов нашей дорожной карты:
⚑ Проверка работоспособности прослушки трафика
Я есть root
Мне кажется, что наступил момент рассказать, для чего нам вообще рут? Все дело в том пресловутом изменении Android 7, после которого пользовательские сертификаты перестали быть доверенными. Посему — нам необходимо сделать что-то с нашим установленным сертификатом, чтобы мы смогли использовать его для изучения трафика нашего рабочего приложения. И сделать это можно, только если ваш девайс рутован. Тут же заключается и причина использования эмулятора, да и связанные с этим особенности: без эмулятора вам придется иметь постоянно рутованное устройство, если это отдельный выделенный смартфон — то проблем с этим особенно и нет (ну, кроме зарядки, постепенного устаревания и ограничений конкретной модели), однако, если у вас свой личный аппарат — то минусы от root могут быть существенными — не работающая система безопасности, сломанный Google Pay или отвалившиеся камеры. Ну и помимо всего прочего — эмулятор позволяет легко изменить версию Android (правда, придется повторить все действия, перечисленные тут, но у вас уже будет эта статья, а я вот это все пишу её не имея).
А теперь приступим. Благодаря прекраснейшему проекту весь процесс сводится к запуску всего лишь одного скрипта, с небольшими подготовительными работами. Также, обращайте внимание на то, что выводится в консоль и если вы пользуетесь Windows — то запускайте не .sh , а .bat . Возможно, WSL будет тут как раз кстати, но моя система, скажем так, с некоторыми особенностями, которые WSL использовать не позволяют (если вы знаете, как завести на Ryzen 5000-серии и WSL и Android Emulator — то прошу написать об этом комментарий).
А вот и сами работы:
Плюс, нужно перезагрузить эмулятор. Ну и, у пользователей Windows путь до образа будет примерно таким:
На выходе мы получаем рут, который сохраняется при перезагрузке эмулятора, но wipe делать не стоит.
Делаем сертификат доверенным
Для этого нам понадобится перенести его в хранилище доверенных сертификатов. Тут рут нам и нужен (не только тут, но это позже).
Для этого мы запускаем цепочку следующих команд:
После чего наблюдаем следующую картинку в системных сертификатах:
Наш сертификат стал системным, поэтому закроем еще один пункт:
⚑ Перенос сертификата в системное хранилище
И давайте сразу проверим наше приложение:
Отлично! Теперь мы можем слушать HTTPS-трафик любых (ли?) приложений с эмулятора. Давайте, чтобы закрепить результат, попробуем еще одно приложение — Avito (как говорили Ник и Майк — это крепкий орешек).
Кажется, тут что-то пошло не так. Впрочем вы и так все знаете, так как видели гигантский спойлер в самом начале, поэтому ставим еще одну галку:
SSL-Unpinning
На данную тему есть множество решений, но, как правило, все они крутятся вокруг одной идеи — пересборки приложения, которое вы хотите изучить. Данный подход весьма громоздкий, сложный и может сподвигнуть к прокрастинации, поэтому нужно что-то такое, что позволит сделать все намного проще и универсальнее. И рецепт этого чего-то прямо тут, бесплатно и без СМС:
Благодаря наличию root установим Xposed
Благодаря Xposed установим модуль для отвязки SSL-привязки
Profit. (два пункта тут смотрелись бы уныло)
А теперь давайте по порядку.
Установка Xposed
С учетом нашего изначального плана слушать всё и вся на эмуляторе на этом шаге появляются некоторые сложности — нужно подобрать удачную комбинацию программных решений, которые будут работать и на эмуляторе. Благодаря этой статье вам совершенно точно не придется тратить несколько часов на поиски этих решений и будет достаточно следовать простой инструкции:
Скачиваем последнюю версию Magisk-модуля с интересным названием Riru и устанавливаем его посредством Magisk
Закрываем эмулятор, а затем снова запускаем (данный шаг эмулирует перезагрузку, которая у меня, по каким-то причинам, не работает, если работает у вас — может быть достаточно и её)
Находим в репозитории Magisk модуль с названием Riru — LSPosed и устанавливаем его
Снова ребутим эмулятор
Открываем приложение LSPosed, в котором необходимо установить уже Xposed-модуль SSLUnpinning
Переключаем все галки в настройках данного модуля у всех приложений, которые хотим слушать и активируем сам модуль
После этого вы оказались в ситуации, когда у вас есть эмулятор с:
Полноценным рутом (Magisk)
Установленным MITM-сертификатом в User-space
Установленным Xposed (LSPosed)
Установленным модулем для SSL-Unpinning
В процессе имея следующий набор картинок:
Можно честно поставить галку:
Настал час проверить, работает ли этот паровоз:
Работает! Ник и Майк ошиблись! Можем ставить и последнюю галку:
Какие есть нюансы? Во первых — при каждом включении эмулятора будет необходимо снова делать сертификаты доверенными (в принципе, после всех этих процедур можно отключить Cold Boot, и тогда не придется, но рано или вам придется перезагрузить эмулятор «жестко», и тогда потребуется поработать и с сертификатами). Возможно, тут есть постоянное решение или это можно, на худой конец, автоматизировать, но я устал. Во вторых — не все приложения в принципе хотят запускаться на эмуляторе. Самый надежный вариант — иметь набор выделенных телефонов на разных версиях Android, все из которых будут иметь весь арсенал инструментов из данного мануала (с небольшими изменениями), но он не всегда возможен.
Под конец — я еще раз продублирую всю инструкцию по пунктам, чтобы был понятен сам алгоритм:
Делаем приготовления (ставим Android Studio), чтобы иметь возможность установить / запустить эмулятор
Устанавливаем эмулятор с параметрами, определенными выше
Устанавливаем интересующие нас приложения на эмулятор методом перетаскивания курсором и убеждаемся, что они в принципе работают и все это будет не зря
Получаем root (Magisk) посредством инструкции, указанной выше
Источник