Die Veröffentlichung des Mitmproxy 11 Projekts wurde vorgestellt, das Werkzeuge zum Abfangen von Datenverkehr innerhalb von über HTTPS eingerichteten Verbindungen mit Inspektions-, Modifizierungs- und Wiedergabefunktionen entwickelt. Das Hauptziel von Mitmproxy ist die Organisation der Verkehrsnachverfolgung in Unternehmenssystemen und die Diagnose von Problemen, zum Beispiel die Identifizierung versteckter Netzwerkaktivitäten von Anwendungen. Der Quellcode des Projekts ist in Python geschrieben und wird unter der MIT-Lizenz vertrieben.
Für die Analyse von HTTPS-Datenverkehr wird Mitmproxy an einem Transitknoten platziert, der die Anfragen des Clients abfängt und diese in an den Zielserver gesendete Anfragen umwandelt. zu einem ServerMit dem im Verlauf der Client-Session angeforderten Server stellt Mitmproxy eine gewöhnliche HTTPS-Verbindung her, während mit dem Client im Namen des Zielservers eine künstliche Verbindung mit einem zur Laufzeit für den Client generierten Fake-SSL-Zertifikat hergestellt wird. Der vom Client empfangene Datenverkehr wird an den Zielserver weitergeleitet, und die eingehenden Antworten werden an den Client zurückgeleitet.

Zur Umleitung des Datenverkehrs über mitmproxy werden mehrere Methoden unterstützt, wie die Angabe der Adresse von mitmproxy als HTTP-Proxy in den Browsereinstellungen, die Arbeit als SOCKS5-Proxy, die Verwendung als Reverse Proxy vor dem HTTP-Server und die Einrichtung einer transparenten Weiterleitung mittels Paketfilterregeln oder durch Routing-Überlagerung. Um zu verhindern, dass das verwendete Fake-Zertifikat beim Client-Verbindungsaufbau Sicherheitswarnungen im Browser auslöst, wird der Benutzer aufgefordert, das mitmproxy-Stammzertifikat zu installieren, was entweder manuell oder durch das Öffnen eines speziellen Hosts im Browser mit der Adresse mitm.it erfolgen kann.

Mitmproxy unterstützt HTTP/2, HTTP/3, Websockets, die Normalisierung der Paketreihenfolge im Stream, das Einbinden von Handler-Skripten zur Echtzeitmodifikation des Datenverkehrs, die Speicherung von Anfragen für spätere Wiederholungen und die Generierung TLS-Zertifikate Für abgefangene Sitzungen die Bereinigung der Header hinsichtlich der Änderungszeit zur Deaktivierung des Client-Cachings, den Reverse-Proxy-Modus zur Weiterleitung des Datenverkehrs an den Server, Blocklisten zur Filterung bestimmter Anfragen, selektive Anfragenweiterleitung (einschließlich der Bereitstellung von lokalen Dateien in der Antwort), sowie die Änderung von Inhalten und Headers basierend auf regulären Ausdrücken. Zur Analyse des Datenverkehrs wird ein ähnliches Tool wie tcpdump mit der Kommandozeilenversion mitmdump sowie die Webschnittstelle mitmweb angeboten.


Ein zentrales Verbesserungsmerkmal in der neuen Version ist die vollständige Unterstützung des HTTP/3-Protokolls, das das QUIC-Protokoll (Quick UDP Internet Connections) als Transportmittel für HTTP/2 verwendet (QUIC stellt eine Erweiterung des UDP-Protokolls dar, die Multiplexing mehrerer Verbindungen unterstützt und Verschlüsselungsmethoden zur Verfügung stellt, die TLS/SSL entsprechen). In Mitmproxy kann für HTTP/3 sowohl ein transparenter Datenverkehrsüberwachung als auch der Betrieb als Reverse-Proxy genutzt werden. Die Funktionalität bei der Abhörung von HTTP/3 wurde in Firefox, Chrome und verschiedenen Versionen von cURL getestet.
Weitere bemerkenswerte Änderungen in der neuen Version betreffen die Verbesserungen der DNS-Unterstützung im Kontext des Hostings von DNS-Einträgen für HTTPS und ECH (Encrypted Client Hello). In der neuen Version wurde die Unterstützung für DNS-Anfragen hinzugefügt, die von A/AAAA abweichen (zum Beispiel wird im ECH die Information über den öffentlichen Verschlüsselungsschlüssel in den HTTPSSVC-DNS-Einträgen übertragen). Der Modus der Bereinigung von ECH-Schlüsseln aus HTTPS-Einträgen in DNS wurde eingeführt. Für die DNS-Verwaltung wurde auf die in Rust geschriebene Bibliothek Hickory gewechselt, die vom Projekt Let’s Encrypt entwickelt wird. Zudem wurde die Unterstützung für DNS-over-TCP hinzugefügt. Eine Option zum Deaktivieren der Verarbeitung von Einstellungen aus /etc/hosts wurde implementiert.
Quelle: opennet.ru
