Перехват пакетов в один клик

Функция перехвата пакетов "человек-по-середине" (MITM) в один клик позволяет полностью автоматически включить глобальный MITM на устройстве. Отличие от часто используемых вами инструментов заключается в том, что вам не нужно беспокоиться о таких проблемах, как установка сертификата и настройка прокси, а также о различиях в методах перехвата для разных версий системы. Эта функция бесшовно работает на Android 6.0 - 14. Мы уже обо всем позаботились, вам нужно сосредоточиться только на конкретных задачах. Кроме того, поддерживается изменение и перехват пакетов в реальном времени, что делает этот инструмент более подходящим для реальных рабочих задач, а не просто для того, чтобы "посмотреть, что там в пакетах", по сравнению с обычными программами с графическим интерфейсом.

Помимо этого, мы можем гарантировать, что нет пакетов, которые нельзя перехватить (за исключением случаев с привязкой сертификата), а успешность перехвата также выше, чем у обычных программных методов. Вы можете перехватывать http/s трафик приложений. Скрипт автоматически применяет и отменяет MITM-атаку, и после его завершения устройство и сеть вернутся в исходное состояние. Вам не нужно делать никаких дополнительных настроек. Скрипт также поддерживает международный перехват пакетов (реализованный через вышестоящий прокси), что позволяет легко перехватывать трафик зарубежных приложений.

Внимание

Независимо от того, какую операционную систему вы используете, перед началом перехвата пакетов, для обеспечения точности и успешного выполнения с первого раза, пожалуйста, временно полностью отключите ваш **сетевой брандмауэр**.

Предварительная подготовка

Во-первых, убедитесь, что ваш компьютер и устройство находятся в одной подсети или подключены по USB. Далее мы будем предполагать, что 192.168.0.2 — это IP-адрес мобильного устройства, на котором запущен FIRERPA. Во-вторых, убедитесь, что вы успешно клонировали код проекта и установили все необходимые зависимости. Проверьте в командной строке, что mitmproxy успешно установлен (можно проверить, введя mitmdump в командной строке).

Если у вас нет Python и вы не знакомы с клонированием и зависимостями, вы можете скачать startmitm.exe на нашей странице релизов. Это упакованная версия startmitm.py, которая позволяет вам выполнять перехват пакетов без установки Python. Это консольное приложение, его параметры командной строки идентичны startmitm.py (этот файл может быть помечен антивирусом как вредоносный, пожалуйста, решите сами, использовать его или нет).

Базовый перехват пакетов

Подсказка

Приложение, пакеты которого вы перехватываете, может использовать SSL PINNING (привязку сертификата) или протокол QUIC. Оба этих случая могут повлиять на результат перехвата. Мы автоматически принудительно понижаем версию QUIC, но из-за возможного времени отката (Fallback) приложение может работать с очень медленной сетью, пожалуйста, подождите немного. Приложения с привязкой сертификата не могут быть перехвачены напрямую, вам потребуется написать скрипт Frida для обхода логики SSL PINNING.

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

python3 -u startmitm.py 192.168.0.2

Важно

**Обязательно помните, что после выполнения команды startmitm необходимо полностью закрыть и заново открыть приложение, пакеты которого вы хотите перехватить. Закрытие приложения из панели задач — ненадежный способ. Пожалуйста, используйте API для закрытия или самостоятельно выполните команду `kill -9` для всех PID, связанных с приложением, иначе перехват не будет работать корректно.**

Нажмите комбинацию клавиш CONTROL + C один раз, чтобы выйти из режима перехвата. Пожалуйста, не нажимайте ее несколько раз подряд.

Совместный перехват пакетов

Если вы хотите анализировать пакеты вместе с коллегами в локальной сети, выполните следующую команду. Затем попросите ваших коллег открыть в браузере http://Ваш_IP-адрес:7890, и они увидят ту же страницу перехвата, что и вы, и вы сможете анализировать данные вместе.

python3 -u startmitm.py 192.168.0.2 --web-port 7890 --web-host 0.0.0.0

Перехват для конкретного приложения

Если вам нужно перехватывать трафик конкретного приложения, а не всего системного трафика, вы можете добавить :имя_пакета после IP-адреса. Следующий пример будет перехватывать только трафик приложения com.some.package.

python3 -u startmitm.py 192.168.0.2:com.some.package

Изменение в реальном времени

Вы можете изменять данные запросов и ответов приложения в реальном времени. Эта функция основана на хуках событий mitmproxy. Вам нужно самостоятельно написать скрипт-хук, используя соответствующий API mitmproxy. Информацию о том, как писать скрипты-хуки, можно найти в официальной документации mitmproxy docs.mitmproxy.org/stable/addons-examples и в примерах кода mitmproxy/examples/contrib.

Предположим, вы написали скрипт-хук с именем http_flow_hook.py. Используйте следующую команду, чтобы применить его.

python3 -u startmitm.py 192.168.0.2 -s http_flow_hook.py

Разные сети

Если ваш телефон и компьютер находятся в разных сетях, но у вас есть физический доступ к устройству, вы также можете выполнять перехват пакетов через USB ADB. Убедитесь, что устройство подключено к компьютеру через USB ADB и авторизовано.

Если к компьютеру подключено только одно ADB-устройство, используйте следующую команду для перехвата. localhost означает использование ADB-устройства.

python3 -u startmitm.py localhost

Если к компьютеру подключено несколько ADB-устройств, вам нужно указать серийный номер ADB, который можно найти в выводе команды adb devices.

python3 -u startmitm.py localhost --serial bfde362

Если у вас более сложные условия, например, телефон и компьютер не находятся в одной сети и нет физического доступа к устройству, но вы можете получить доступ к порту FIRERPA, вы все равно можете выполнить MITM-атаку. Такая ситуация обычно возникает, когда вы используете встроенный сервис frp для перенаправления FIRERPA на удаленный сервер, или вы самостоятельно перенаправили порт 65000 FIRERPA в другое место. В этом случае вы и FIRERPA можете общаться только через этот один порт, а другие порты недоступны для взаимного доступа. В этой ситуации телефон не может получить доступ ни к одному порту на вашем компьютере, а ваш компьютер может получить доступ только к порту FIRERPA на телефоне (или у телефона есть публичный IP, но ваш компьютер находится во внутренней сети). В этом случае необходимо действовать следующим образом. (Взаимодействие сетей через OpenVPN не относится к вышеописанным случаям).

В этом случае необходимо использовать следующую комбинацию действий. Сначала установите свой публичный ключ ADB на устройство с помощью adb_pubkey.py или вызвав соответствующий API. После установки выполните следующие шаги, где x.x.x.x — это IP-адрес или 127.0.0.1, с которого можно подключиться к порту 65000, измените его в соответствии с вашей ситуацией.

adb connect x.x.x.x:65000

Наконец, действуйте так же, как описано выше, выполняя перехват через USB.

python3 -u startmitm.py localhost

Или так, как показано ниже. Здесь serial — это адрес из adb connect, а не шестнадцатеричный серийный номер.

python3 -u startmitm.py localhost --serial x.x.x.x:65000

Вышестоящий прокси / Международный перехват

startmitm запускает mitmproxy в качестве прокси-сервиса. По умолчанию трафик отправляется с сетевой карты локального компьютера. Если вам нужно, чтобы трафик проходил через вышестоящий прокси, а не напрямую, вы можете указать его следующим образом. В качестве вышестоящего прокси поддерживаются только прокси по протоколу HTTP. В то же время вам необходимо указать вышестоящий DNS, поддерживающий TCP-запросы, чтобы избежать DNS-спуфинга.

Совет

Режим вышестоящего прокси требует mitmproxy версии >= 9.0.0 (и Python >= 3.9).
python3 -u startmitm.py 192.168.0.2 --upstream http://127.0.0.1:7890 --proxy-dns 8.8.8.8

Если вышестоящий HTTP-прокси требует аутентификации, используйте следующую команду, заменив USER:PASSWORD.

python3 -u startmitm.py 192.168.0.2 --upstream http://USER:PASSWORD@x.x.x.x:8080 --proxy-dns 8.8.8.8

Все вышеперечисленные команды направят трафик устройства через вышестоящий прокси и отправят все DNS-запросы с локального компьютера на 8.8.8.8 через этот прокси.