
Es gibt Situationen, in denen beim Entwickeln oder Testen einer mobilen Anwendung der Netzwerkverkehr der Anwendung angezeigt werden muss. Zeigen Sie den Datenverkehr für mobile Apps weiterhin an, indem Sie ihn in der Konsole Ihrer IDE anzeigen? Für diese Aufgabe gibt es effektivere Tools, z. B. Proxys. In diesem Artikel analysieren wir die beliebtesten HTTP (S) -Proxys, lernen, wie sie in der iOS-Entwicklung verwendet werden, und vergleichen sie nach verschiedenen Kriterien.
Weiter werden wir über die Verwendung von Proxys in der iOS-Entwicklung sprechen, aber viele Dinge sind auch in der Android-Entwicklung anwendbar.
Achtung, unter dem Schnitt viele Bilder.
Tools zur Analyse des Netzwerkverkehrs einer mobilen Anwendung können unterteilt werden in:
- Keine Integration in den Quellcode der zu testenden Anwendung erforderlich - Proxy:
- Integration in den Quellcode der zu testenden Anwendung erforderlich. Dazu gehören hauptsächlich Debugging-Frameworks:
Dies ist der erste Teil des Artikels, in dem wir die Verwendung von Proxys betrachten und sie nach verschiedenen Kriterien vergleichen. Im zweiten Teil des Artikels werden wir die Frameworks für das Debuggen gründlich durchgehen.
Mitmproxy

Mitmproxy ist ein kostenloser und Open-Source-HTTP (S) -Proxy (~ 12.000 Sterne auf Github), der aus Mitmproxy selbst besteht, einem Konsolendienstprogramm zum Proxy-Verkehr, mitmdump, einem zusätzlichen Konsolendienstprogramm, das ähnliche Funktionen wie tcpdump, jedoch für HTTP (S) bietet. Verkehr sowie mitmweb, das Webinterface für Mitmproxy.
Sie können Mitmproxy mit Homebrew installieren:
brew install mitmproxy
Oder laden Sie die gewünschte Version von der Release-Seite von der offiziellen Website herunter .
Nach erfolgreicher Installation müssen Sie in den Netzwerkeinstellungen einen Proxy angeben, um den HTTP-Verkehr von einem Simulator oder Gerät zu analysieren.
Für den Simulator müssen Sie HTTP- und HTTPS-Proxys in den Mac OS-Netzwerkeinstellungen aktivieren (Systemeinstellungen -> Netzwerk -> Erweitert -> Proxies):

Ein kleines Bash-Skript zur schnellen Aktivierung / Deaktivierung eines Proxys in den Netzwerkeinstellungen für Wi-Fi auf einem Mac. (Sobald wir den IP- und Proxy-Port in den Einstellungen registriert haben und dann den Befehl proxy on
oder proxy off
aus über die Konsole verwenden).
Um Datenverkehr von einem realen Gerät abzufangen, müssen Sie den Proxy in den Einstellungen des iOS-Netzwerks angeben, während die IP-Adresse des Computers, auf dem Mitmproxy ausgeführt wird, als Proxy-IP-Adresse und der Port 8080 festgelegt sind. (Die IP-Adresse des Computers kann unter Einstellungen> Netzwerk angezeigt werden.)

Zu diesem Zeitpunkt können wir bereits HTTP-Verkehr abfangen. Um jedoch HTTPS-Verkehr abzufangen, müssen Sie Mitmproxy-Zertifikate auf dem Simulator / Gerät installieren.
Gehen Sie dazu im Simulator wie folgt vor (für ein reales Gerät sind die Schritte ähnlich):
- Stellen Sie sicher, dass Mitmproxy ausgeführt wird und der Proxy in den Netzwerkeinstellungen (für den Simulator - MacOS-Einstellungen, für das Gerät - iOS-Einstellungen) wie oben beschrieben aktiviert und registriert ist. Gehen Sie nun zum Browser unter mitm.it und klicken Sie auf das Apple-Symbol, um das Mitmproxy-Zertifikat herunterzuladen. Es wird eine Warnung mit der Meldung angezeigt, dass diese Website versucht, die iOS-Einstellungen zu öffnen: Klicken Sie auf Zulassen.

- Installieren Sie dann das Mitmproxy-Zertifikat.

- Und die letzte Berührung: Für iOS Version 10.3 und höher müssen Sie den vollständigen Zugriff auf das Mitmproxy-Stammzertifikat aktivieren. Gehen Sie dazu zu Einstellungen> Allgemein> Info> Einstellungen für die Zertifikatvertrauensstellung und aktivieren Sie den vollständigen Zugriff für das Mitmproxy-Zertifikat.

Jetzt können wir den HTTPS-Verkehr vom Simulator aus analysieren. Es bleibt noch eine kleine Klarstellung: Das Zertifikat wird für einen bestimmten Simulator installiert, dh wenn wir es nur für den iPhone X-Simulator gemacht haben, müssen wir auf dem iPhone 8-Simulator dasselbe tun, damit der Proxy den HTTPS-Verkehr abfängt. Um den HTTPS-Verkehr von einem realen Gerät abzufangen, sind alle Schritte ähnlich. Hauptsache, es ist mit demselben lokalen Netzwerk verbunden wie ein Computer mit Mitmproxy.
Danach können Sie Mitmproxy über die Konsole ausführen und fühle mich wie ein Hacker oder Mitmweb Web Client.
Der Konsolen-Client bietet uns eine Röhrenschnittstelle (für GUI-Liebhaber gibt es sogar Mausunterstützung), in der alle abgefangenen Anforderungen angezeigt werden.

Sie können detaillierte Informationen zu jeder Anforderung anzeigen (Anforderungsparameter, Header, Antwort usw.)

Mitmproxy verfügt über ein leistungsstarkes Abfragefiltersystem mit Unterstützung für reguläre Ausdrücke. Sie können Anforderungen nach Code, Anforderungs- / Antworttext, Headern, Domäne usw. filtern. Rufen Sie die Hilfe zu verfügbaren Verknüpfungen und Filterausdrücken an, indem Sie auf ?
. Um beispielsweise die Liste der Abfragen für die aktuelle Sitzung zu löschen, können Sie einfach z
drücken und die Liste der Abfragen nach URL filtern, in der sich das Wort "apple" befindet. Sie müssen f
drücken und einen Filterausdruck nach URL ~u apple
schreiben, der einen regulären Ausdruck verwendet.

Vim-Fans werden sich auch über die Unterstützung von hjkl freuen. Wir haben fast eine sehr wichtige Verknüpfung vergessen. q
- Sie funktioniert beim Wechseln zwischen Bildschirmen wie eine Schaltfläche "Zurück". Wenn Sie auf diese Verknüpfung klicken, bietet Mitmproxy auf dem Hauptbildschirm mit einer Liste von Abfragen an, das Programm zu beenden.
Trotz der Konsolenoberfläche ist die Verwendung von Mitmproxy dank praktischer Verknüpfungen und einfacher intuitiver Steuerung ein Vergnügen. Unten finden Sie eine kleine Tabelle mit den wichtigsten Verknüpfungen.
Verknüpfung | Beschreibung |
---|
? | Hilfe |
z | Aktuelle Sitzungsliste löschen |
f | Sitzungsfilterung |
q | Zurück (Beenden auf dem Hauptbildschirm) |
d | Anforderung aus Sitzungsliste entfernen |
r | Anfrage wiederholen |
e | Anfrage in Datei speichern |
g | Top Sitzungsliste |
G. | Am Ende der Sitzungsliste |
Wenn Sie immer noch ein leidenschaftlicher Gegner der Konsole sind und nur die GUI-Anwendungen erkennen, hat es mitmweb eilig, uns zu helfen. Wir werden es vorerst auch über die Konsole starten. Später können wir eine Verknüpfung zum Desktop herstellen.

Der Web-Client befindet sich noch im Beta-Test und enthält nur die grundlegende Mitmproxy-Funktionalität (ausreichend für 95% der Aufgaben), die mit jeder neuen Version schrittweise durch neue Funktionen ergänzt wird. Trotzdem kann er jetzt verwendet werden und ist sehr praktisch. Einige Verknüpfungen aus der Konsolenversion funktionieren auch hier. Um beispielsweise die Liste der Anforderungen für die aktuelle Sitzung zu löschen, drücken Sie einfach z
. Sie können abgefangene Anforderungen auch über das Feld "Suchen" herausfiltern, wie wir es in der Konsolenanwendung getan haben, als wir den ~u apple
Filter ~u apple
angewendet haben.

Mitmproxy behauptet, den Websocket-Standard zu unterstützen, aber leider wurde die Anzeige von Websocket-Frames in der Benutzeroberfläche noch nicht implementiert, und laut den Entwicklern ist die Websocket-Funktionalität nur für das Dienstprogramm mitmdump verfügbar.
Charles

Charles ist vielleicht der beliebteste HTTP (S) -Proxy für MacOS. Sein einziger Nachteil ist, dass die Lizenz zum Zeitpunkt des Schreibens 50 US-Dollar kostet. Es gibt jedoch eine Testversion - sie funktioniert 30 Minuten lang, dann muss die Anwendung neu gestartet werden und der gesamte Abfrageverlauf geht verloren. Es gibt auch Startverzögerungen von fünf Sekunden.
Nach der Installation und dem ersten Start werden Sie von Charles aufgefordert, Zugriff zu gewähren, um den Systemproxy automatisch zu konfigurieren, "Berechtigungen gewähren" auszuwählen oder die Systemproxyeinstellungen jedes Mal manuell zu ändern. Daher ändert und aktiviert Charles selbst die System-Proxy-Einstellungen, während sie ausgeführt werden. Dies ist praktisch beim Debuggen auf dem Simulator. Auf einem realen Gerät müssen Sie jedoch die Proxy-Server-Einstellungen für das Netzwerk manuell festlegen, da der Proxy-Server die IP-Adresse des ausgeführten Computers angibt Charles, als Hafen - 8888.
Zu diesem Zeitpunkt können wir nur den HTTP-Verkehr anzeigen. Um den HTTPS-Verkehr von einem Simulator oder einem realen Gerät zu analysieren, müssen wir ein Charles-Zertifikat darauf installieren. Die Vorgehensweise ähnelt der Installation eines Mitmproxy-Zertifikats. Stellen Sie sicher, dass der Proxy in den iOS-Netzwerkeinstellungen (für ein reales Gerät) oder in den MacOS-Netzwerkeinstellungen (für einen Simulator) ausgeführt und aktiviert wird. Dann gehen wir zum Simulator / Gerät im Browser unter chls.pro/ssl. Es wird eine Warnung mit der Meldung angezeigt , dass diese Website versucht, die iOS-Einstellungen zu öffnen: Wählen Sie Zulassen . Wählen Sie anschließend Installieren, um das Zertifikat zu installieren. Nach der Installation des Zertifikats für iOS Version 10.3 und höher müssen Sie den vollständigen Zugriff auf das Charles-Stammzertifikat aktivieren. Gehen Sie dazu zu Einstellungen> Allgemein> Info> Einstellungen für die Zertifikatvertrauensstellung und aktivieren Sie den vollständigen Zugriff für das Charles-Zertifikat.

Zuletzt müssen Sie das SSL-Proxy in Charles konfigurieren. Standardmäßig wird der HTTPS-Verkehr nicht entschlüsselt, selbst wenn Sie alle erforderlichen Zertifikate installiert haben. Um das SSL-Proxy zu aktivieren, gehen Sie zu Proxy> SSL-Proxy-Einstellungen und aktivieren Sie das SSL-Proxy. Wenn es deaktiviert ist, haben Sie zwei Möglichkeiten: Aktivieren Sie das SSL-Proxy für alle Domänen oder nur für bestimmte. Um die SSL-Proxy-Funktion für alle Domänen zu aktivieren, müssen Sie einen Platzhalter hinzufügen: Klicken Sie auf die Schaltfläche Hinzufügen und geben Sie in allen Feldern *
an, damit die SSL-Einstellungen folgendermaßen aussehen.

Um das SSl-Proxy nur für bestimmte Domänen zu aktivieren, müssen Sie diese zur Liste hinzufügen und sicherstellen, dass der Platzhalterort deaktiviert ist. In diesem Fall fängt Charles weiterhin den gesamten Datenverkehr ab, aber HTTPS-Anforderungen für Domänen, die nicht in der Liste enthalten sind, werden nicht entschlüsselt.
Bei Verwendung von Charles ist es praktisch, Verkehrsüberwachungsfilter zu verwenden, die im Menü Proxy> Aufnahmeeinstellungen konfiguriert werden können: Sie können das Protokoll, die URL und den Port angeben.

Jetzt können wir den HTTPS-Verkehr anzeigen.

Charles unterstützt auch das Websocket-Protokoll und zeigt Nachrichten im Stil von iMessage an.

Der erste Proxy seiner Art, Charles für iOS, verdient besondere Erwähnung - die mobile Version von Charles, der Preis im App Store zum Zeitpunkt des Schreibens beträgt 9 US-Dollar. Die Anwendung enthält die grundlegenden Funktionen der Desktop-Version: Proxying des HTTP (S) -Verkehrs, Anzeigen des Inhalts von Anforderungen / Antworten und bequeme automatische Einstellung der Proxy-Einstellungen für ein Wi-Fi-Netzwerk.


Burp Suite ist ein Schweizer Messer aus Pentestern und Hackern, das eine unanständige Menge an Werkzeugen und Funktionen enthält. Eines der Module in Burp Suite ist ein Proxy, mit dem wir den HTTP (S) -Verkehr analysieren. Es gibt zwei Versionen der Anwendung: Professional und Community Edition. Die Community-Version ist kostenlos, es gibt keinen Schwachstellenscanner und die Anzahl der Anforderungen pro Zeiteinheit ist begrenzt. Trotzdem ist die kostenlose Version der Anwendung ein vollwertiges Testtool.
Nach dem Starten der Anwendung müssen Sie den Proxy hinzufügen und aktivieren, indem Sie auf Proxy> Optionen klicken.

Dann müssen Sie sicherstellen, dass der Intercept-Anforderungs-Interceptor deaktiviert ist. Andernfalls werden die Anforderungen abgefangen und gehalten, bis Sie ihm mitteilen, was mit dieser Anforderung zu tun ist - Abbrechen oder Weiterleiten an den Server. Schalten Sie es deshalb aus, jetzt brauchen wir es nicht mehr.

Als nächstes müssen Sie das Burp Suite-Zertifikat auf dem Simulator / Gerät installieren. Dieses Verfahren sollte uns nach der Installation der Mitmproxy- und Charles-Zertifikate bereits schmerzlich vertraut sein. Wir starten Burp Suite und vergessen nicht, den Proxy in den MacOS-Netzwerkeinstellungen für den Simulator oder in iOS für das reale Gerät zu aktivieren (Informationen hierzu finden Sie im Abschnitt Mitmproxy). Geben Sie die IP-Adresse des Computers an, auf dem Burp Suite als Proxyserver ausgeführt wird. als Port - 8080. Dann gehen wir zum Browser auf dem Simulator und geben die Adresse http: // burp ein . Klicken Sie anschließend auf der Website "CA-Zertifikat" auf die Schaltfläche und laden Sie das Zertifikat herunter.

Installieren Sie dann das Zertifikat. Nach der Installation des Zertifikats für iOS Version 10.3 und höher müssen Sie den vollständigen Zugriff auf das Burp Suite-Stammzertifikat aktivieren. Gehen Sie dazu zu Einstellungen> Allgemein> Info> Einstellungen für die Zertifikatvertrauensstellung und aktivieren Sie den vollständigen Zugriff für das Burp Suite-Zertifikat.

Über die Registerkarte Proxy -> HTTP-Verlauf können Sie den HTTP (S) -Verkehr einer mobilen Anwendung anzeigen. Es ist erwähnenswert, dass der Nachteil hier das Fehlen der JSON-Formatierung im Hauptteil der Anforderung / Antwort ist.

Das Problem mit der JSON-Formatierung kann durch Installieren des JSON Beautifier- Plugins behoben werden. Gehen Sie zur Installation zur Registerkarte Extender> BApp Store, suchen Sie den JSON Beautifier in der Liste der Plugins und klicken Sie auf Installieren.

Jetzt gibt es eine zusätzliche Registerkarte JSON Beautifier mit wunderschönem JSON.

Burp Suite unterstützt das Websocket-Protokoll. Websocket-Nachrichten finden Sie auf der speziellen Registerkarte Proxy> WebSockets-Verlauf.

OWASP ZAP

Owasp ZAP ist die Idee der weltberühmten Cybersecurity-Community Owasp. Außerdem ist der Proxy Open Source. Owasp ZAP wird oft mit Burp Suite verglichen, letztere ist jedoch weniger beliebt. Owasp ZAP ist völlig kostenlos, es gibt keine PRO-Versionen im Vergleich zu Burp Suite.
Nach dem Starten der Anwendung müssen Sie die Proxy-Einstellungen Einstellungen> Lokale Proxys überprüfen. Die Standardeinstellungen sollten folgendermaßen aussehen.

Gehen Sie dann zu Einstellungen> Dynamische SSL-Zertifikate, um das SSL-Zertifikat zu exportieren. Klicken Sie auf die Schaltfläche Speichern und speichern Sie das Zertifikat beispielsweise auf dem Desktop.

Als nächstes ziehen Sie einfach die Zertifikatdatei in den Simulator und ein Fenster öffnet sich, in dem Sie das Zertifikat installieren können. Wir stimmen zu und installieren es. Nach der Installation des Zertifikats für iOS Version 10.3 und höher müssen Sie den vollständigen Zugriff auf das OWASP ZAP-Stammzertifikat aktivieren. Gehen Sie dazu zu Einstellungen> Allgemein> Info> Einstellungen für die Zertifikatvertrauensstellung und aktivieren Sie den vollständigen Zugriff für das OWASP ZAP-Zertifikat.

Jetzt können wir den HTTPS-Verkehr anzeigen. JSON hat hier leider keine schöne Formatierung und bisher konnten wir diese Situation nicht beheben. In extremen Fällen können Sie einen JSON-Formatierer eines Drittanbieters verwenden, beispielsweise diesen .

OWASP ZAP unterstützt das Websocket-Protokoll. Websocket-Nachrichten finden Sie in einer speziellen Registerkarte WebSockets. Es ist auch praktisch, den "Kanal" zum Filtern nach Domain auszuwählen.

SSL-Pinning
Wenn SSL-Pinning in Ihrer Anwendung implementiert ist, wird kein Proxy-Anwendungsverkehr angezeigt, da der Proxy sein eigenes Zertifikat für SSL verwendet. In diesem Fall gibt es 4 Optionen:
- Deaktivieren Sie vorübergehend das SSL-Pinning, während Sie Netzwerkanforderungen mithilfe eines Proxys debuggen.
- Fügen Sie den debuggten Zertifikaten / Schlüsseln für Debug-Builds ein Proxy-Zertifikat / einen öffentlichen Schlüssel hinzu.
- Verwenden Sie Ihr Serverzertifikat für den Proxy anstelle des von ihm generierten eigenen Zertifikats.
- Verwenden Sie anstelle eines externen Proxys ein Debugging-Framework (die Liste der Frameworks wird ganz am Anfang des Artikels angegeben), das Anforderungen und Antworten direkt in der Anwendung selbst abfängt und anzeigt. Dies erfordert jedoch die Integration in den vorhandenen Anwendungsquellcode. Weitere Informationen zu diesen Tools finden Sie im nächsten Artikel.
Zusammenfassung
Beginnen wir mit Charles. Vielleicht der beste Proxy für diejenigen, die möchten, dass alles sofort funktioniert und so benutzerfreundlich wie möglich ist. Obwohl Charles den Benutzer an einigen Stellen überraschen mag, ist die Proxy-Funktionalität sehr umfangreich und verfügt über die schönste und nativste Oberfläche für macOS von allen im Artikel beschriebenen Proxy. Wenn es Ihnen nichts ausmacht, 50 US-Dollar für ein solches Instrument auszugeben, ist dies Ihre Wahl.
Fahren wir mit der Burp Suite fort. Das leistungsstärkste Tool, das einer bestimmten Funktionalität und sogar Benutzerfreundlichkeit entspricht, bietet Charles in einigen Fällen leicht Chancen. Außerdem gibt es ein System zur Erweiterung der Funktionalität in Form von Plug-Ins. Die Burp Suite hat sich seit langem als sehr zuverlässiges und genaues Werkzeug in den richtigen Händen etabliert. Wenn Ihnen die Funktionalität Ihres aktuellen Proxys fehlt, empfehle ich Ihnen, auf diese Instanz zu achten.
Jetzt ist Mitmproxy an der Reihe - ein junger und vielversprechender Proxy, der aktiv an Popularität gewinnt und von der Open Source-Community entwickelt wird. Der umstrittenste der von uns betrachteten Proxies, aber gleichzeitig nicht weniger interessant. Mitmproxy hebt sich von seinen Mitbewerbern durch seine unglaublich bequeme, einfache und funktionale Konsolen-Benutzeroberfläche ab. Es ist auch möglich, das Mitmweb-Webinterface zu verwenden, aber es befindet sich derzeit im Betatest, aufgrund dessen es möglicherweise selten vorkommt. Es treten jedoch Fehler auf, es gibt keinen Teil der erweiterten Mitmproxy-Funktionalität (sie wird schrittweise abgeschlossen), und es ist auch in Bezug auf die Bequemlichkeit gegenüber nativen Konkurrenten etwas schlechter. Die Unterstützung für das Websocket-Protokoll war ebenfalls sozusagen enttäuschend, aber es gibt keine Anzeige in der Benutzeroberfläche oder wir haben einfach nicht gelernt, wie man es vorbereitet, weil wir Mitmproxy nicht dazu bringen konnten, Websocket-Nachrichten anzuzeigen, obwohl wir solche Probleme mit anderen Proxys nicht hatten.
Und der letzte auf der Liste, aber nicht weniger interessant, war Owasp ZAP. Von den Pluspunkten gibt es ein erweiterbares Plug-In-System (subjektiv ist ihre Anzahl geringer als bei Burp Suite), aber leider konnten wir keine schöne JSON-Anzeige im Anforderungs- / Antworttext konfigurieren, was ein ziemlich kritisches Kriterium bei der Auswahl eines Proxys für die mobile Entwicklung ist. Owasp ZAP verfügt jedoch über ein fortschrittliches System zum Testen des Websocket-Datenverkehrs sowie über den großen Namen der Owasp-Community-Entwickler, die hinter mir stehen. Daher würde ich es nicht ausschließen und für seltene und komplexe Fälle in Betracht ziehen.
Unten finden Sie eine subjektive Übersichtstabelle der von uns analysierten Proxys.
Kriterium / Proxy | Mitmproxy | Charles | Burpsuite (CE) | Owasp zap |
---|
JSON-Formatierung | + | + | + | - - |
Abfragen bearbeiten und wiederholen | + | + | + | + |
Websocket-Unterstützung | - - | + | + | + |
Freie Software | + | - - | + | + |
Wir werden hier enden, wir hoffen, dass der Artikel nützlich sein wird, wir werden uns auch freuen, Kommentare abzugeben und wenn Sie Ihre Erfahrungen im Bereich des Testens und Überwachens des Datenverkehrs mobiler Anwendungen teilen.