So schnüffeln Sie den HTTPS-Verkehr eines iOS-Geräts



Hallo, mein Name ist Andrey Batutin, ich bin Senior iOS Developer bei DataArt, und heute werden wir den HTTPS-Verkehr Ihres iPhones abhören.

FoodSniffer und womit es gegessen wird


Nehmen Sie zum Beispiel die sehr einfache iOS-App FoodSniffer . Es zeigt dem Benutzer je nach Tageszeit, was er essen soll.



Die Anwendung empfängt vom Server JSON des Formulars:

[ { "name" : "soup", "consumePeriod" : "morning" }, … ] 

Der Server ist in diesem Fall Dropbox, und JSON kann hier angezeigt werden .

Problem Nummer 1


Es ist ein Fehler aufgetreten, dass anstelle von zwei Elementen in der Liste der am Morgen zugelassenen Lebensmittel in der Anwendung nur eines angezeigt wird.

Eine Möglichkeit, um zu überprüfen, was schief gelaufen ist, besteht darin, den JSON zu sehen, den der Server an Sie zurückgibt.

Wie kann man Verkehr schnüffeln?


Angenommen, Ihr MacOS-Computer und Ihr iOS-Gerät befinden sich im selben lokalen Netzwerk. Dies sieht ungefähr so ​​aus:



Der Datenverkehr wird unabhängig vom Computerverkehr von einem iOS-Gerät über einen Router zu einem Server übertragen.

Um den Datenverkehr eines iOS-Geräts zu lesen, müssen wir ihn über unseren Mac laufen lassen. Ungefähr so:



Darüber hinaus benötigen wir einen HTTP / S- Proxyserver , mit dem wir den Datenverkehr des iOS-Geräts überwachen / ändern können.

Eine weitere sehr wichtige Aufgabe besteht darin, HTTPS- Verkehr abhören zu können. Der Haken ist, dass das HTTPS-Protokoll so erstellt wurde, dass außer dem Client und dem Server niemand lesen konnte, was in HTTPS-Anforderungen übertragen wird. Daher muss der HTTPS-Proxy auch ein SSL-Zertifikat mit sich bringen , das für die Arbeit mit HTTPS-Verkehr erforderlich ist.

Mit anderen Worten, wir müssen den M an-in-the-Middle- Angriff auf unser eigenes Netzwerk implementieren.



Charles Web Debugging-Proxy-Anwendung


Wie Sie sehen können, ist das Abhören von HTTPS-Verkehr eine mehrstufige Aufgabe. Um mein Leben so weit wie möglich zu vereinfachen, verwende ich Charles Proxy .

Beginnen wir mit den Nachteilen:

  • Es wird bezahlt, aber die einzige Einschränkung in der Testversion ist, dass Charles nicht länger als 30 Minuten arbeitet. Dann muss es neu gestartet werden. Beim Start treten immer noch Verzögerungen von fünf Sekunden auf. Es ist nervig, aber du kannst leben.
  • Wenn Sie ein echtes Hacker-Tool benötigen, um rund um die Uhr auf einem Remote-Server zu arbeiten, und selbst mit einer normalen CLI, ist Charles nichts für Sie.
  • Wenn Sie unter Windows arbeiten, ist es besser, Fiddler zu nehmen , das ebenfalls kostenlos ist.
  • Wenn Sie einen Proxyserver für eine große Anzahl von Geräten benötigen (mehr als zwei oder drei), ist Charles nichts für Sie.
  • Wenn Sie mit TCP / IP-Paketen in reiner Form arbeiten müssen, nehmen Sie Wireshark .

Jetzt die Profis:

  • Benutzerfreundliche Benutzeroberfläche. Charles benötigt keine besonderen Kenntnisse, um zu installieren, zu konfigurieren oder zu verwenden. Normale MacOs-Fensteranwendung.
  • HTTPS für iOS - Charles verfügt über eine Reihe von Tools, mit denen das HTTPS-Sniffing von Ihrem iOS-Gerät so einfach wie möglich ist.
  • Funktionalität - Charles kann schnüffeln, den durch ihn fließenden Verkehr ändern, ein langsames Internet simulieren, Statistiken sammeln und Verkehr in verschiedenen Formaten importieren / exportieren.
  • Verfügbar für Windows und Linux.

Für mich ist dies die beste Lösung für das Verhältnis von Funktionalität und Benutzerfreundlichkeit bei der Arbeit mit iOS-Geräten.

Charles und iOS Geräte einrichten


Im Folgenden wird das anfängliche Einrichtungsverfahren für ein iOS-Gerät für die Arbeit mit Charles Proxy beschrieben.

1. Starten Sie Charles auf dem Computer:



2. Installieren Sie das Charles Root-Zertifikat auf Ihrem iOS-Gerät:

Wählen Sie im Menü Hilfe -> SSL-Proxing -> Charles Root-Zertifikat auf Mobilgerät oder Remote-Browser installieren.



Das folgende Fenster wird angezeigt:



3. Geben Sie in den Netzwerkeinstellungen des iOS-Geräts die IP-Adresse und den Port von Charles Proxy an:



Abhängig von der Architektur Ihres Netzwerks kann die IP-Adresse, auf der Charles ausgeführt wird, variieren.

4. Öffnen Sie den Browser auf dem iOS-Gerät und folgen Sie dem Link - http://chls.pro/ssl .



5. Installieren Sie das Charles SSL-Zertifikat auf dem Gerät:



6. In den Geräteeinstellungen geben wir an, dass wir diesem Zertifikat voll vertrauen:



Die sechste Stufe wird für Geräte mit iOS 10 und höher benötigt.

In den Phasen 5 bis 6 haben wir ein SSL-Zertifikat auf dem Charles-Gerät installiert und angegeben, dass wir ihm vertrauen. Das heißt, jetzt wird der gesamte mit diesem Zertifikat signierte HTTPS-Verkehr nicht mehr von ATS blockiert.

So beobachten Sie den iOS-Geräteverkehr


Öffnen Sie die FoodSniffer- App. Wenn die Proxy-Einrichtung korrekt durchgeführt wurde, sollte ein Bildschirm wie der folgende angezeigt werden:



Gehen Sie in Charles Proxy zu Extras -> Kein Caching.

Deaktivieren Sie das Caching auf dem Proxyserver vollständig.



Die Anwendung implementiert Pull-to-Refresh. Nach dem Aktualisieren der Produktliste sollte https://www.dropbox.com in der Liste auf der linken Seite in Charles angezeigt werden. Klicken Sie mit der rechten Maustaste darauf und wählen Sie SSL-Proxing aktivieren .



Aktualisieren Sie danach die Liste der Produkte in der Anwendung erneut. Jetzt sollten Sie so etwas sehen:



Jetzt können wir den HTTPS-Verkehr, der von der Anwendung auf Dropbox für unseren JSON stammt, frei lesen.

Aber das ist noch nicht alles!

Dropbox gibt JSON nicht direkt vom dropbox.com-Host. Stattdessen werden 302 Antworten zurückgegeben und an einen anderen Host weitergeleitet, von dem die Daten heruntergeladen werden.

Sie finden es in der Raw-Antwort der folgenden Abfrage:



In diesem Fall ist es -
uc9c29db95802af8490afc3afda9.dl.dropboxusercontent.com .

Sie werden höchstwahrscheinlich einen etwas anderen Host haben.

Aktivieren Sie dann SSL Proxing: Aktiviert dafür.

Wir aktualisieren FoodSniffer erneut.

Und jetzt können wir endlich den echten JSON sehen, den die Anwendung zeigt!



Wir sehen, dass wir abends nur eine Art von Essen haben - Whisky, schreiben Sie unserem Teamleiter darüber und gehen Sie Kaffee trinken, das Problem ist nicht auf unserer Seite.

* Das Projekt verwendet bereits korrigiertes JSON mit zwei Arten von Lebensmitteln für den Abend: Bier und Whisky.
* Wenn der Host http://uc9c29db95802af8490afc3afda9.dl.dropboxusercontent.com oder ähnliches in der Liste auf der linken Seite des Fensters nicht angezeigt wird, aktualisieren Sie die Liste der Produkte in der Anwendung mehrmals.

Problem Nr. 2 oder Ändern des HTTPS-Verkehrs eines iOS-Geräts


Das Backend-Team hat das Menü für den Abend festgelegt, und jetzt ist der JSON korrekt gebildet. Aber was ist, wenn es Morgen ist und ich nicht bis zum Abend warten möchte, um die Lösung zu überprüfen?

Eine Möglichkeit besteht darin, mit Charles den JSON zu ändern, der von Dropbox zu Ihnen kommt.

In diesem Fall müssen wir den Verbrauchszeitraum von Abend auf Morgen ändern.

Wählen Sie dazu im Menü Extras -> Umschreiben .

Fügen Sie im angezeigten Fenster " Rewrite Settings" eine neue Kategorie zum Überschreiben hinzu - Dropbox .



Fügen Sie den Host hinzu, indem Sie den https-Port im Menü "Speicherort bearbeiten" angeben:



Danach fügen wir im Menü "Umschreiberegel" die folgenden Umschreiberegeln hinzu :



Das heißt, jetzt wird in jedem Text der Antwort von unserem Server das Wort Abend durch das Wort Morgen ersetzt .

Bei Bedarf können wir einen beliebigen Teil der HTTP-Anforderung / Antwort ändern und den Text durch einen Regex-Ausdruck ersetzen.

Nachdem wir die Liste aktualisiert haben, sollten wir vier Arten von Produkten sehen:



Fazit


Charles ist recht einfach, Shareware, verfügt über umfangreiche HTTPS-Proxy-Funktionen. Aus meiner Sicht funktioniert es am besten, wenn Sie mit MacOS- und iOS-Geräten arbeiten.

Dies ist bei weitem nicht der einzige Weg, um den Verkehr zu schnüffeln. Für den HTTP / S-Verkehr ist Fiddler ebenfalls weit verbreitet. Wenn Sie tiefer in den TCP / IP-Stack einsteigen müssen, gibt es Wireshark .

Darüber hinaus liegt ein Problem beim Anheften von Zertifikaten vor . Wenn es in Ihrer Anwendung implementiert ist, müssen Sie entweder das Charles SSL-Zertifikat zur Liste der zulässigen Zertifikate hinzufügen oder Tools wie Frida verwenden , um das Anheften von Zertifikaten bereits auf Anwendungsebene zu deaktivieren. Ich hoffe, im nächsten Artikel mehr darüber zu sprechen.

Ich würde mich freuen, wenn Sie uns Ihre Erfahrungen mit der Überwachung des Datenverkehrs mitteilen, einschließlich HTTP / S, Tipps und Lifehacks.

Hinweis Verwenden Sie diese Technik bitte nur für Ihre Anwendungen. Seid weiße Hasenhacker!

Anmerkung 2. Vor kurzem wurde die Geschichte darüber auf Ukrainisch veröffentlicht , aber auf Russisch veröffentliche ich sie zum ersten Mal.

Source: https://habr.com/ru/post/de419677/


All Articles