Установка mitmproxy на Android и снифинг собственного трафика
Присутствовал недавно при обсуждении на тему того, как организовать MITM на собственном устройстве для просмотра собственного трафика. В качестве одного из вариантов был озвучен mitmproxy, но т.к. до этого я его не устанавливал на мобильное устройство (chroot готовой системы не в счет), то возникло желание попробовать. Результат (спойлер: успешный) под катом.
Немного матчасти вместо введения
Для установки и эффективного использования mitmproxy на Android необходимо чтобы устройство было рутовано и на него был установлен tmux и любой другой терминал (системный с окружением android). Весь процесс сводится к уcтановке mitmproxy вместе с необходимыми зависимостями и установке его сертификата в качестве корневого (именно системного, а не пользовательского).
Установка mitmproxy
Необходимо в сессии tmux выполнить команды ниже.
pkg install openssl-dev python-dev openssl-tool tsu
pip install mitmproxy
После установки необходимо запустить mitmproxy с указанием ip адреса, на котором будет поднят прокси сервер. Узнать ip адрес можно через терминал командой ip addr или в настройках сетевого соединения
Запускаем в режиме обычного прокси сервера
mitmproxy -mode regular --listen-host ip
Далее необходимо изменить настройки сетевого соединения, указав прокси (удерживаем палец на активном соединении, в контекстном меню выбираем "modify network".
В настройках proxy выбираем "manual" и прописываем ip адрес который получили по DHCP. Порт указываем по умолчанию 8080.
Пару слов по поводу того, зачем поднимать прокси на внешнем интерфейсе и почему не запустить mitmproxy в прозрачном режиме? Внешний интерфейс нужен для того (конкретно мне), чтобы подключать внешние устройства. А в прозрачном режиме mitmproxy отказался работать, и я пока не знаю почему (питон сыпется в исключениях).
Установка сертификата
Так вот, после запуска и настройки соединения в браузере на устройстве открываем страницу http://mitm.it (это локальная страница для скачивания сертификата). Скачиваем сертификат, считаем его хеш (необходимо для именования установленных в систему сертификатов)
tsudo openssl x509 -inform PEM -subject_hash_old -in /sdcard/Download/pem.crt | head -1
После выполнения этой команды необходимо скопировать хеш в следующую команду
tsudo cat /sdcard/Download/pem.crt >/sdcard/Download/5ed36f99.0
.o - расширение файла
Далее необходимо установить сертификат в систему. Пользовательские сертификаты могут не подойти, если хочется смотреть за трафиком сторонних приложений. Открываем системный терминал (либо подключаемся к устройству через adb).
Далее монтируем системный раздел в режим чтение/запись и копируем сертификат всистему
su
mount -o remount,rw /system
cp /sdcard/Download/5ed36f99.0 /system/etc/security/cacerts/
cd /system/etc/security/cacerts/
chmod 644 5ed36f99.0
После перезагрузки устройства сертификат будет загружен и можно запускать mitmproxy и использовать по назначению.
Примечание: для использования в связке с другими устройствами не забудьте установить сертификат в систему.