- Fiddler-инструмент для анализа трафика мобильных приложений. Выявляем уязвимости
- Перехват HTTPS-траффика между Android-устройством и внешним сервером
- Теория
- Практика
- Туториал: HTTPs запросы с iOS и Android девайсов не расшифровываются в Fiddler
- Настройка Fiddler на Windows для сниффинга трафика с iOS и Android девайсов
- Настройка iOS девайса для работы с Fiddler
- Настройка Android девайса для работы с Fiddler
- Запросы HTTPs остаются зашифрованными
- Первые шаги с Fiddler Classic
- Первые шаги
- 1. Установка и запуск
- 2. Выбор браузера для сниффинга
- 3. Начинаем сниффить трафик
- 4. Настройка прокси на Android
- 5. Настройка прокси на iOS
- Операции над запросами
- Подмена данных в Fiddler Classic
- 1.1 Automatic Breakpoints
- 1.2 AutoResponder
- Моделирование скорости
- Конструирование запросов
Fiddler-инструмент для анализа трафика мобильных приложений. Выявляем уязвимости
Согласно статистике, в 2020 году мобильные приложения были загружены пользователями более 240 млн раз, и это число продолжает расти.
Разработчики большое внимание уделяют удобству и внешнему виду, однако вопросам безопасности не всегда уделяется должное внимание. Недостаточная защищенность приложения увеличивает репутационные риски для компании-разработчика, а утечка конфиденциальных пользовательских данных негативно сказывается на его деловой репутации.
Большинство современных мобильных приложений построены на клиент-серверной архитектуре. Как правило, клиент функционирует под управлением одной из популярных мобильных ОС – Android или iOS, и обменивается данными с сервером. Использование открытых незащищенных протоколов передачи данных многократно увеличивают риски компрометации передаваемого трафика. Но даже защищенные соединения не всегда дают 100% гарантию надежности сохранности данных.
В данной статье мы познакомимся с инструментом Fiddler, позволяющим перехватывать и анализировать весь трафик между клиентом и сервером. Данный инструмент поможет аудитору выявить уязвимости в процессе клиент-серверного взаимодействия мобильного приложения.
Подготовительные шаги
Для начала установите Fiddler на ПК или ноутбук. Убедитесь, что ПК/ноутбук и смартфон находятся в одной сети (например, подключив устройства к одному wifi-роутеру). Это условие является обязательным, т.к. устройства не увидят друг друга. Проверить связь между устройствами можно через команду ping.
Настройка Fiddler
Далее, убедитесь, что Fiddler может принимать входящие соединения:
- Откройте Fiddler, далее: Tools → Options, вкладка «Connections»;
- Поставьте флажок «Allow remote computers to connect»;
- Перезапустите Fiddler, чтобы изменения в настройках вступили в силу.
Настройка устройства на базе Android
Убедитесь, что Fiddler запущен и брандмауэр Windows отключен, далее на Android-устройстве выполните шаги:
- Откройте настройки, далее выберите Wi-fi, затем нажмите на имя подключенной сети и удерживайте, пока не появится всплывающее окно;
- Нажмите «изменить сеть», далее в всплывающем окне разверните пункт «расширенные настройки»;
- Выберите «Вручную» в поле со списком «Прокси-сервер»;
- В поле «Имя хоста прокси-сервера» введите IP-адрес вашего ПК/ноутбука;
- В поле «порт прокси-сервера» введите порт (по умолчанию 8888).
После нажатия на кнопку «Сохранить» весь трафик смартфона должен быть виден в окне Fiddler.
Настройка устройств на базе iOS
Убедитесь, что Fiddler запущен и брандмауэр Windows отключен, далее на iOS-устройстве выполните шаги:
- Откройте Настройки → Wi-fi;
- Найдите сеть, к которой подключен смартфон, и нажмите на значок «i»;
- Пролистайте вниз, найдите «настройка прокси», далее выберите «Вручную»;
- В поле «Сервер» введите IP-адрес вашего ПК/ноутбука;
- В поле «Порт» введите значение по умолчанию: 8888.
После нажатия на кнопку «Сохранить» весь трафик смартфона должен быть виден в окне Fiddler.
Перехват HTTPS-трафика
С этими настройками возможен перехват только незащищенного HTTP-трафика. Для работы с защищенным HTTPS-трафиком потребуется установка корневого сертификата на устройствах, а также дополнительная настройка Fiddler.
- Перейдите по ссылке на устройстве: http://ipv4.fiddler:8888
- Установите сертификат:
Для Android: скачайте FiddlerRoot certificate, откройте его, установите и задайте имя.
Для iOS: скачайте FiddlerRoot certificate, откройте его, нажмите «разрешить», после чего перейдите в Настройки → Профиль загружен → Установить. Далее в Настройках → Основные → Об этом устройстве → Доверие сертификатам → найдите сертификат и сделайте его доверенным.
3. В настройках Fiddler (Options→ HTTPS) установите флажок «Decrypt HTTPS traffic», после чего разрешите установку сертификата.
После этого вы сможете работать и анализировать защищенный HTTPS-трафик в Fiddler.
В данной статье я познакомил вас с инструментом Fiddler для анализа трафика мобильных приложений на базе Android/iOS. Аудиторам он может быть полезен для поиска уязвимостей.
Источник
Перехват 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.
Источник
Туториал: HTTPs запросы с iOS и Android девайсов не расшифровываются в Fiddler
При работе с Fiddler часто возникают проблемы, которые решаются перезапуском сниффера, перезагрузкой компьютера или девайса, с которого сниффится трафик. Но бывает и такое, что перезапуском проблема не решилась и даже полной переустановкой фиддлера. Это статья не о чем-то новом и неизведанном, а скорее туториал, который поможет вам, когда вы всё сделали правильно, но «ничего не работает».
Для начала стоит проверить (даже, если уже проверяли) настройки Fiddler и девайса, с которого вы хотите сниффить трафик.
Настройка Fiddler на Windows для сниффинга трафика с iOS и Android девайсов
Перейти Tools -> Options
Во вкладке Connections установить галочку Allow remote computers to connect
Вкладка Connections
Перезагрузить Fiddler, чтобы изменения вступили в силу
Во вкладке HTTPS:
1) установить галочку на Capture HTTPS CONNECTs
2) установить галочку на Decrypt HTTPS traffic
3) в появившемся окне “Trust the Fiddler Root certificate” кликнуть Yes
4) в окне Security Warning кликнуть Yes
5) в окне Add certificate to the Machine Root List? Нажать Yes
6) в появившемся окне “Do you want to allow this app to make changes to your device?” выбрать Yes
7) установить галочку Ignore server certificate errors (unsafe)
Вкладка HTTPs
В остальных вкладках оставить всё по дефолту, нажать ОК
В верхнем тулбаре активировать Stream и Decode
Настройка iOS девайса для работы с Fiddler
Тапнуть пункт Wi-Fi
Тапнуть иконку i у сети, у которой подключен девайс
Проскроллить вниз и перейти в пункт Configure Proxy
В поле Server ввести свой IP адрес
В поле Port ввести свой Порт, тапнуть Save
Открыть браузер и ввести в адресную строку http://ipv4.fiddler:
Тапнуть на ссылку “FiddlerRoot certificate” и загрузить сертификат
Перейти в Settings -> General -> Profile и установить скачанный сертификат
Перейти в Settings -> General -> About -> Certificate Trust Settings и поставить чекбокс у нашего сертификата
Настройка Android девайса для работы с Fiddler
Тапнуть и удерживать сеть Wi-Fi, к которой подключен девайс
Выбрать Modify Network
Выбрать “Show advanced options”
Тапнуть Proxy и выбрать Manual
В поле Server ввести свой IP адрес
В поле Port ввести свой Порт, тапнуть Save
Открыть браузер и ввести в адресную строку http://ipv4.fiddler:
Тапнуть на ссылку “FiddlerRoot certificate”, сертификат загрузится на девайс
Установка должна произойти автоматически, если сертификат не установился, то свайпнуть вниз и тапнуть иконку Settings
Перейти Personal -> Security
Перейти в Credential Storage и тапнуть “Install from storage”
Тапнуть файл FiddlerRoot.cer
(Опционально) Ввести имя сертификата, например, FiddlerRoot
Проверить эту конфигурацию можно Trusted credentials -> User, там должен отобразится установленный сертификат
Запросы HTTPs остаются зашифрованными
Нужно здесь скачать плагин генерации сертификатов “CertMaker for iOS and Android”
Перейти в Fiddler в Tools -> Options -> HTTPS и в Certificates generated by выбрать CertMarker
На девайс повторно скачать сертификат с http://ipv4.fiddler:
Выполнить установку сертификата на девайсе
После всех вышеописанных манипуляций Fiddler будет послушно декодировать необходимые HTTPs запросы с девайса.
Источник
Первые шаги с Fiddler Classic
Привет! После знакомства с Charles Proxy большинство из читателей захотело узнать больше про инструменты мониторинга и анализа HTTP/HTTPS трафика. Расскажем про популярный у многих тестировщиков Fiddler. Описать все возможности Fiddler в одной статье вряд ли получится, поэтому давайте рассмотрим базовые возможности, которыми мы пользуемся каждый день.
Fiddler это:
Кроссплатформенное приложение прокси-сервера для отладки HTTP. Он позволяет пользователю просматривать HTTP, HTTPS и активированный трафик TCP-порта, доступ к которому осуществляется с локального компьютера, на него или через него. Сюда входят запросы и ответы, включая HTTP-заголовки и метаданные (например, файлы cookie, кэширование и кодирование информации), с функциями, предназначенными для помощи разработчикам и тестировщикам в анализе соединений и обмене сообщениями.
Первые шаги
1. Установка и запуск
Для начала необходимо загрузить и установить приложение.
Если у вас операционная система MAC или Linux, то для этого Вам необходимо будет перейти в соответствующий раздел для загрузки специальной версии Fiddler Everywhere. В данной статье мы будем рассматривать работу с Fiddler Classic для ОС Windows.
2. Выбор браузера для сниффинга
Для начала давайте выберем какой браузер мы хотим проксировать. В качестве примера мы выберем браузер Mozilla Firefox. Для этого перейдем во вкладку Browse -> далее выбрать нужный нам браузер.
3. Начинаем сниффить трафик
После того, как мы выбрали нужный нам браузер, нам необходимо установить сертификат. Для этого перейдем во вкладку Tools -> Options.
В открывшемся диалоговом окне нам необходимо выбрать вкладку HTTPS.
Далее необходимо выбрать чекбокс «Decrypt HTTPS traffic». Далее разрешить установку сертификата.
После того, как мы установили сертификат, давайте в браузере откроем, например, сайт Юлы. В разделе слева мы видим все запросы к хосту api.youla.io и не только. Среди запросов выберем нужный нам запрос, например на выдачу всех товаров: https://api.youla.io/api/v1/products
Для того, чтобы декодировать ответ, необходимо нажать на «Response body is incoded. Click to decode.».
4. Настройка прокси на Android
Чтобы отображались запросы приложения Android, вам необходимо разрешить удаленное подключение. Для этого перейдем во вкладку Tools -> Options. В открывшемся диалоговом окне нам необходимо выбрать вкладку Connections.
Далее необходимо выбрать чекбокс «Allow remote computers to connect» и «Capture FTP requests». Fiddler теперь прослушивает порт 8888 (это порт по умолчанию, вы можете изменить его из приведенной выше настройки). Для применения настроек, нажимаем «ОК» и перезапускаем Fiddler.
Теперь нам необходимо настроить наше Android устройство. Возьмите в руки телефон, откройте Свойства сети → Название сети WiFi → Прокси-сервер → Вручную → Имя хоста: *ваш IP* / Порт: *8888* → Сохраните измененные свойства сети (указывается IP адрес вашего ПК, на котором установлен Fiddler).
Перейдем по ссылке http://ipv4.fiddler:8888 и скачаем FiddlerRoot certificate, далее начнется автоматическая загрузка сертификата. Откройте его, задайте имя сертификата, и теперь у вас есть доступ к трафику Android-приложения.
В качестве примера, перейдем в приложение Юла и откроем карточку любого товара. В левой части экрана найдем запрос на карточку товара, это: https://api.youla.io/api/v1/product/5fc60e5e211e77413a1dc323 . А в правой верхней части находится – request запроса, в правой нижней – response. Не забываем нажать на «Response body is incoded. Click to decode.», чтобы декодировать ответ.
5. Настройка прокси на iOS
Возьмите в руки iPhone, откройте Свойства сети → Название сети WiFi → Прокси-сервер → Вручную → Имя хоста: *Наш IP* / Порт: *8888* → Сохраните измененные свойства сети.
Теперь необходимо перейти по ссылке http://ipv4.fiddler:8888 , скачать FiddlerRoot certificate, «Разрешить» загрузку профиля конфигурации.
Далее перейдите в Настройки → Профиль загружен → Установить.
Затем перейдите в Настройки → Основные → Об этом устройстве → Доверие сертификатам → найдите установленный сертификат и сделайте его «Доверенным».
В качестве примера, перейдем в приложение Юла и откроем карточку любого товара. В левой части экрана найдем запрос на карточку товара, это: https://api.youla.io/api/v1/product/5fc60e5e211e77413a1dc323 . А в правой верхней части находится – request запроса, в левой нижней – response. Для того, чтобы декодировать ответ, необходимо нажать на «Response body is incoded. Click to decode.».
Операции над запросами
Справа, в окне, где находятся request и response, располагаются дополнительные инструменты:
Statistics — позволяет получать различные статистики как по одному запросу, так и по пачке выделенных;
Inspectors — дает возможность просматривать в различном виде заголовки и данные запроса;
Filters — позволяет следить за конкретными запросами;
Timeline — визуальное представление выполненных запросов на временной шкале.
Подмена данных в Fiddler Classic
Представим, что нам надо протестировать на клиенте верстку. Нужно проверить, как будет отображаться большое количество бонусов у пользователя. Один из вариантов, который многие предложат: изменить в БД количество бонусов и проверить на клиенте. Да, вы будете правы! Однако на сервере может быть кэш, и необходимо подождать какое-то время, пока количество бонусов не обновится, либо просто подключиться к самой базе и выполнить запрос — это занимает определенное время. Есть вариант проще: изменить ответ от сервера! В Fiddler Classic есть несколько вариантов подмены данных, рассмотрим некоторые из них:
1.1 Automatic Breakpoints
Breakpoint — это некая точка остановки запроса. Когда обнаруживается запрос из заданного списка, он отображается справа и с ним можно взаимодействовать.
Для начала, давайте поставим breakpoint на request, т.е на запрос. Перейдем в Rules -> Automatic Breakpoints и выберем «Before requests»
Выполним запрос на пользователя https://api.youla.io/api/v1/user/5e6222bbbedcc5975d2375f8 и после выполнения запроса с клиента, в нашем случае это android приложение Юла, request запроса отображается справа. Мы его можем отредактировать.
Для того, чтобы отправить запрос, нажмем Run to Completion. Наш запрос отправится на сервер.
Но мы, например, хотим изменить количество бонусов у пользователя на клиенте. Для этого нам необходимо изменить ответ от сервера. Поэтому выберем «After Responses» в Rules -> Automatic Breakpoints.
У нас имеется приложение и профиль пользователя, у которого сейчас 45 бонусов на счету:
Запрос, в котором приходит это количество бонусов: https://api.youla.io/api/v1/user/5e6222bbbedcc5975d2375f8
В левой части экрана мы видим ответ от сервера.
Найдите нужный параметр — «bonus_cnt»:45. Далее измените значение параметра bonus_cnt, например, на 1 000 000 бонусов, и нажмите «Run to Completion».
На клиенте отобразится новое количество бонусов. Мы богаты!
1.2 AutoResponder
AutoResponder — это некая точка остановки запроса. Когда обнаруживается запрос из заданного списка, он отображается справа и с ним можно взаимодействовать.
Выберем необходимый нам запрос и перетащим его в правую часть.
После перетаскивания будет выглядеть так:
Далее нам надо изменить правило, для этого изменим:
METHOD:PUT EXACT:https://api.youla.io/api/v1/user/5e6222bbbedcc5975d2375f8?adv_id=99d548bc-0ca0-434e-b016-24611313d9de&app_id=android%2F10777&uid=85c9a921c27fb0e8&usr_latitude=55.9332685&usr_longitude=37.5032966×tamp=1607977265
На:
REGEX:.+/user/5e6222bbbedcc5975d2375f8*
Нам не важна часть до «/user/5e6222bbbedcc5975d2375f8» и после, сохраним, нажав Save. Далее правой клавишей мыши по запросу –> Edit Response.
В открывшемся окне идем в RAW, изменяем ответ:
Изменим значение с «45» на «1000000» бонусов:
Сохраним измененный ответ, нажав «Save» и перезапрашиваем экран «Профиль пользователя». Мы богаты:
Моделирование скорости
Данная возможность предоставляется в скрипте. Вы можете изменить его поведение, перейдя в настройки Rules -> Customize Rules и отредактировав значения блока скрипта:
if (m_SimulateModem) <
// Задержка отправки на 300 мсек на каждый загруженный КБ.
oSession [«просачивание-задержка»] = «300»;
// Задержка приема 150 мс на загруженный КБ.
oSession [«задержка-отклик»] = «150»;
>
Для включения данной функции перейдите в Rules -> Performance и выберите пункт «Simulate Modem Speeds».
Конструирование запросов
Представим, что нам нужно самостоятельно отправить запрос и посмотреть ответ. Для данной задачи есть инструмент Request Builder. С помощью данного инструмента можно самостоятельно конструировать HTTP-запросы. В качестве примера давайте запросим товары с экрана «Главная» в сервисе Юла.
Сначала выберем нужный нам метод, в нашем случае это GET запрос. Далее составим сам запрос: http://api.youla.io/api/v1/products
Следующим шагом — выполним наш запрос, нажав Execute. В левой части мы видим выполненный запрос на товары. Выберем данный запрос и через инструмент Inspectors посмотрим запрос и ответ:
Источник