Выпуск HTTPS-анализатора Mitmproxy 11 с поддержкой HTTP/3

Представлен релиз проекта Mitmproxy 11, развивающего инструментарий для перехвата трафика внутри соединений, установленных по HTTPS, с возможностями инспектирования, модификации и повторного воспроизведения трафика. Основным назначением Mitmproxy является организация отслеживания трафика в корпоративных системах и диагностика проблем, например, выявление скрытой сетевой активности приложений. Исходные тексты проекта написаны на языке Python и распространяются под лицензией MIT.

Для анализа HTTPS-трафика mitmproxy размещается на транзитном узле, на котором перехватывает запросы клиента и транслирует их в отправляемые от себя запросы к целевому серверу. С запрошенным в процессе клиентского сеанса сервером mitmproxy устанавливает обычное HTTPS-соединение, а с клиентом от имени целевого сервера устанавливается фиктивное соединение с подставным SSL-сертификатом, генерируемым для клиента на лету. Принятый от клиента трафик перенаправляется целевому серверу, а получаемые ответы транслируются обратно клиенту.


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


Mitmproxy поддерживает HTTP/2, HTTP/3, Websockets, нормализацию порядка следования пакетов в потоке, подключение скриптов-обработчиков для модификации трафика на лету, сохранение запросов для дальнейшего повторного воспроизведения, генерацию TLS-сертификатов для перехваченных сеансов, чистку заголовков о времени модификации для отключения кэширования на стороне клиента, режим обратного проксирования (Reverse proxy) для перенаправления трафика на сервер, списки блокировки для фильтрации определённых запросов, выборочное перенаправление запросов (в том числе для отдачи в ответ локальных файлов), изменение содержимого и заголовков на основе регулярных выражений. Для анализа трафика предлагается похожая на tcpdump утилита командной строки и web-интерфейс mitmweb.




Ключевым улучшением в новой версии является полная поддержка протокола HTTP/3, в котором задействован протокол QUIC (Quick UDP Internet Connections) в качестве транспорта для HTTP/2. QUIC представляет собой надстройку над протоколом UDP, поддерживающую мультиплексирование нескольких соединений и обеспечивающую методы шифрования, эквивалентные TLS/SSL. В Mitmproxy для HTTP/3 можно использовать как прозрачный перехват трафика, так и работу в виде обратного прокси. Работа при перехвате HTTP/3 протестирована в Firefox, Chrome и различных версиях cURL.

Другие заметные изменения в новой ветке связаны с улучшением поддержки DNS в контексте размещения в DNS записей для HTTPS и ECH (Encrypted Client Hello). В новой версии добавлена поддержка запроса DNS-записей, отличных от A/AAAA (например, в ECH информация об открытом ключе шифрования передаётся в DNS-записи httpSSVC). Добавлен режим чистки ключей ECH из httpS-записей в DNS. Для работы с DNS осуществлён переход на библиотеку Hickory, написанную на языке Rust и развиваемую проектом Let’s Encrypt. Добавлена поддержка DNS-over-TCP. Реализована опция для отключения обработки настроек из /etc/hosts.

Release. Ссылка here.