Оглавление > Расшифровка TLS
3.1 Расшифровка HTTPS/TLS
PCAPdroid предоставляет возможность отправлять весь TCP траффик через SOCKS5 прокси. Подключая mitmproxy в режиме SOCKS5 позволяет расшифровывать траффик. Расшифровка TLS может быть использована например для изучения чистых (не зашифрованных) данных в HTTPS запросах. Заметка: расшифровка TLS недоступна когда включен режим захвата трафика с root-правами.
mitmproxy
может быть установлен на ПК по официальной инструкции, в таком случае оба устройства (и Android и ПК) должны быть подключены к одной и той же сети.
Однако можно обойтись без ПК и установить mitmproxy
прямо на Android-устройстве с помощью терминала Termux
. После установки termux
откройте его и выполните следующие команды:
pkg update
pkg install python openssl-1.1-static
python3 -m pip install --upgrade pip
CRYPTOGRAPHY_DONT_BUILD_RUST=1 CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS=1 \
LDFLAGS="$PREFIX/lib/openssl-1.1/libssl.a $PREFIX/lib/openssl-1.1/libcrypto.a" \
CFLAGS="-I$PREFIX/include/openssl-1.1" \
pip install mitmproxy==7.0.4
Примечание: при использовании mitmproxy
на Android-устройстве (посредством Termux
) необходимо выбирать конкретное целевое приложение, иначе траффик исходящий из Termux
с mitmproxy
зациклится, что приведет к проблемам с соединением.
Для включения расшифровки TLS в PCAPdroid:
- Запустите mitmproxy без опции генерации пользовательского сертификата и установите стандартный сертификат (обычно расположен по пути
~/.mitmproxy/mitmproxy-ca-cert.cer
на устройстве где установлен сам mitmproxy) на вашем Android-устройстве. Возможно потребуется сменить расширение файла на.crt
. - Откройте настройки PCAPdroid
- Включите пункт “Enable SOCKS5 Proxy”
- Настройте IP адрес и порт экземпляра
mitmproxy
(в данном примере порт 8050, IP либо от ПК в сети к которой подключены оба устройства, либо 127.0.0.1 еслиmitmproxy
запущен прямо на Android-устройстве). - Запустите
mitmproxy
в режиме SOCKS5 командойmitmproxy --mode socks5 --listen-port 8050
Теперь PCAPdroid будет перенаправлять весь TCP траффик через сервер mitmproxy, который выступит в роли прокси и будет расшифровывать TLS траффик. PCAP-файл сгенерированный PCAPdroid все еще будет содержать зашифрованный траффик с оригинальными IP и портом назначения пакетов. Тем не менее, включение расшифровки TLS траффика несет с собой высокую вероятность нарушения сетевого соединения приложений, в связи с чем рекомендуется использовать фильтр приложений, чтобы захватывать траффик только конкретно указанного приложения.
3.2 Расшифровка с Android 7
С момента выхода Android 7 (Nougat), Android-приложения не доверяют пользовательским сертификатам установленным в системе. Это означает что они не будут принимать сертификат от mitmproxy и их соединение с сетью будет потеряно. На устройствах с Root-доступом это можно легко решить установкой сертификата в качестве системного, а не пользовательского (см. https://docs.mitmproxy.org/stable/howto-install-system-trusted-ca-android). На устройствах без Root-доступа наиболее надежный способ решить проблему - изменить конфигурацию приложения чтобы оно доверяло пользовательским сертификатам как указано в инструкциях для разработчиков Android приложений. Если у Вас нет доступа к исходному коду целевого приложения, можно попробовать модифицировать приложение например через apktool.
Так же, есть более простой, но менее надежный способ, который не требует вмешательства в конфигурацию приложения. Используя VirtualXposed в совокупности PCAPdroid позволяет обмануть приложение и заставить его работать по старым политикам безопасности (действующие до выхода Android 7) при которых целевое приложение будет доверять сертификату от mitmproxy. VirtualXposed является приложением для виртуализации с открытым исходным кодом и доступно на F-Droid. Чтобы начать пользоваться VirtualXposed в совокупности с PCAPdroid:
- Настройте расшифровку TLS траффика в PCAPdroid как было описано выше
- Настройте фильтр приложений PCAPdroid чтобы захватывать траффик только от VirtualXposed
- Откройте VirtualXposed, выберите “Добавить приложение” и выберите целевое приложение (в появившемся диалоге выберите “virtualxposed”).
- Запустите целевое приложение из VirtualXposed.
В чем фокус? VirtualXposed использует целевую версию SDK установленную в значение 23. Это означает, что любое приложение с целевой версией SDK меньше 24 так же как и раньше доверяет пользовательским сертификатам, и это работает даже в Android 7! Любое приложение для виртуализации с подходящей целевой версией SDK так же подходит и может провернуть этот трюк. Однако стоит помнить, что приложение виртуализации предоставляет альтернативную среду для приложений, в связи с чем приложения могут работать некорректно и даже вылетать. Модифицирование конфигурации APK остается более предпочтительным способом.
3.3 Сообщения об ошибках
Следующие советы могут помочь в сообщениях об ошибках с рашифровкой TLS:
- Если mitmproxy показывает предупреждение “Client Handshake Failed”, это означает что все работает корректно, но приложение не доверяет сертификату сгенерированному mitmproxy. Удостоверьтесь, что сертификат mitmproxy корректно установлен и что целевое приложение принимает пользовательские сертификаты как описано выше.
- Некоторые приложения могут использовать привязку к конкретному сертификату. В таких случаях может помочь специальный инструмент для модификации APK файлов.
- Если mitmproxy не отображает никакого вывода, это означает что траффик не достигает mitmproxy. В таком случае проверьте настройки подключения.