View on GitHub

PCAPdroid

User Guide

Оглавление > Дешифрование TLS

3.1 Введение

Начиная с версии 1.5.0, PCAPdroid умеет дешифровывать TLS и отображать дешифрованные данные прямо в приложении. Более того, он может сгенерировать SSLKEYLOGFILE, содержащий секреты дешифрования, которые могут быть в последствии использованы для дешифрования полученного PCAP сторонними средствами.

Большинство приложений сегодня работают через TLS, чтобы защитить свои данные от наблюдения и изучения. Такие соединения в PCAPdroid помечаются как TLS, либо HTTPS протокол. Дешифрование может быть полезным в следующих случаях:

Примечание: перед дешифрованием вам необходимо проверить условия использования приложения, чтобы узнать разрешено ли это

Примечание: запуск дешифрования TLS снизит безопасность вашего приложения. Вы должны делать это только если знаете что делаете, а также в течение ограниченного времени

Текущие ограничения:

Дешифрование TLS на Android не является легкой задачей, определенные технические знания и знакомство с данной темой необходимо. Есть множество подводных камней, которые будут обсуждены ниже. Также, устройство с root-правами поможет достичь успеха в большинстве случаев.

3.2 Начальная настройка

Дешифрование TLS может быть включена из настроек PCAPdroid.

     В настройках PCAPdroid (значок ⚙️ в верхнем правом углу), включите переключатель **Дешифрование TLS** в разделе **Просмотр траффика**.

При первом включении, помощник настройки поможет вам правильно настроить дешифрование. Этот процесс включает в себя следующие шаги:

  1. Загрузка и установка дополнения PCAPdroid-mitm. Фактически, процесс дешифрования производится mitmproxy, который встроен в дополнение
  2. Разрешение на управление mitm-дополнением. Это мера безопасности для предотвращения контроля дополнения другими приложениями.
  3. Установка корневого сертификата. Корневой сертификат, это то, что позволяет PCAPdroid дешифровать траффик приложения, и чтобы сделать это, его (прим. корневой сертификат) необходимо сначала добавить в хранилище сертификатов. Для обеспечения безопасности, прямо на устройстве генерируется уникальный корневой сертификат (прим. сертификат с другого устройства не подойдет).

Перед продолжением, проверьте имеет ли ваше устройство приложение для контроля автозапуска и фоновой активности приложений, как например Autostart на устройствах vivo или раздел Батарея на устройствах Huawei. Если в вашей системе есть подобное приложение, вам необходимо разрешить для mitm-дополнения доступные опции запуска (например автозапуск, запуск другими приложениями) и работу в фоне. Иначе PCAPdroid не сможет запустить процесс дешифрования.

3.3 Дешифрование

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

Для того, чтобы убедиться, что дешифрование работает, выберите целевым приложение которое наверняка можно дешифровать. Хорошим кандидатом на эту роль является Google Chrome. Включите дешифрование, выберите Chrome как целевое приложение и начните захват траффика в PCAPdroid. В Chrome откройте любой HTTPS сайт в новой вкладке, после чего вы должны увидеть дешифрованные данные соединений в PCAPdroid. Они обозначены значком зеленого открытого замка.

Значко замка и цвет являются индикаторами статуса дешифрования, который так же указывается и в деталях соединения:

Вы можете отобразить дешифрованные соединения, а также те для которых дешифрование не удалось, с помощью фильтров. Если вы откроете дешифрованное соединение, вкладки “Содержимое” и “HTTP” отобразят дешифрованное содержимое.

Если запись дампа в PCAP включена, то по завершению захвата вы увидите запрос на сохранение SSLKEYLOGFILE, который вы можете загрузить в Wireshark для дешифрования PCAP файла.

3.4 Подводные камни и возможные решения

Google Chrome является относительно простым для дешифрования приложением. Если вы попробуете дешифровать другие приложения, вы вскоре столкнетесь с некоторыми проблемами, которые в большинстве случаев можно решить с помощью устройств с root-правами и правильными инструментами.

3.4.1 Клиент не доверяет mitm сертификату

Данная ошибка дешифрования может случаться по разным причинам:

Если у вас Android 7 или новее, и приложение, которое вы пытаетесь дешифровать имеет значение целевого SDK больше 23, то это наиболее частая причина, по которой mitm-сертификат будет отвергнут приложением (т.к. приложения больше не доверяют пользовательским сертификатам). Чтобы решить данную проблему, вам потребуется:

Помимо прочего, некоторые приложения (чаще всего браузеры) используют сторонние хранилища доверенных сертификатов, независящие от системного хранилища. Вам необходимо выяснить - есть ли у них опция для отключения такого поведения, например в Firefox вы можете сделать это через about:config. Если такой опции не предусмотрено, то вам необходимо будет патчить приложение.

Если клиент все еще отказывается соединяться, тогда приложение, возможно, использует привязку к сертификату, что означает, что приложение активно производит проверку сертификатов по своему белому списку. Чтобы обойти это, потребуется:

3.4.2 Прозрачность сертификата

При дешифровании траффика браузера, браузер может отказаться от соединения с браузерами, сообщая об ошибке связанной с прозрачностью сертификатов. С контролем прозрачности сертификатов, сторонние корневые сертификаты добавленные в систему обычно отвергаются. Чтобы исправить это, необходимо:

3.4.3 Траффик все еще зашифрован

После дешифрования TLS траффика, содержимое все еще может быть зашифровано с использованием других протоколов. Это происходит, в частности, с Telegram и Whatsapp, которые используют свой собственный протокол шифрования. Подобные протоколы требуют разработки собственных инструментов для дешифрования, что выходит за рамки PCAPdroid.

Более того, помните что результат дешифрования может оказаться бинарный протокол, который не имеет удобо-читаемого для человека представления. Важно понимать, что бинарный протокол не обязательно означает что он зашифрован. Например, DNS является бинарным протоколом, но он не зашифрован.

3.5 Дешифрование через внешний mitmproxy

Для большей гибкости, к примеру, чтобы модифицировать траффик или использовать вышестоящий прокси, вы можете производить дешифрование TLS на любом другом SOCKS5 прокси, возможно запущенном на другом устройстве. Ниже пример того, как настроить для этого mitmproxy.

На ПК вы можете установить mitmproxy следуя официальной инструкции по установке. Оба устройства (ПК и Android с запущенным PCAPdroid) должны быть подключены к одной сети для этого. В качестве альтернативы, вы можете установить 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 версии 7.0.4, который является последней версией, не требующей rust. Если вы хотите установить версию 8+, следуйте данным инструкциям.

Примечание: при установки на Android устройство посредством termux, необходимо выбрать конкретное целевое приложение, чтобы не захватывать траффик других приложений. В ином случае траффик из termux зациклится, лишив тем самым устройство подключения к интернету.

После установки mitmproxy, необходимо выполнить следующие шаги:

  1. Запустить mitmproxy без каких-либо опций, тогда он сгенерирует mitm сертификат. Установите сертификат (обычно расположен в ~/.mitmproxy/mitmproxy-ca-cert.cer) на Android устройстве. Возможно, для этого потребуется заменить расширение .cer на расширение .crt
  2. Откройте настройки PCAPdroid
  3. Активируйте опцию “Включить SOCKS5 прокси”
  4. Укажите IP адрес и порт для будущего экземпляра mitmproxy (порт 8050 в этом примере)
  5. Запустите mitmproxy в режиме SOCKS5, с помощью команды mitmproxy --mode socks5 --listen-port 8050

С этого момента PCAPdroid будет перенаправлять весь TCP траффик на mitmproxy сервер, который будет проксировать соединения и дешифровывать TLS траффик. Однако помните, что генерируемый в PCAPdroid дамп по прежнему будет содержать зашифрованный траффик вместе с оригинальными IP адресами назначения и портами.