Bei der Interaktion mit dem Web- / API-Server über eine API in der Entwicklung von Smartphone-Anwendungen gibt es kein "Wenn Sie https verwenden, wird die Kommunikation vom Benutzer nicht bemerkt", wie dies bei Tools in der Webanwendung der Fall ist. Sie können den Kommunikationsinhalt überprüfen und manipulieren.
Wenn Sie die App- oder Server-API nicht unter dieser Voraussetzung entwerfen und implementieren, führt dies zu einer Fälschung der Übertragung der Spielergebnisse durch den App-Benutzer, einer Schadensoperation für den Raid-Boss usw. in sozialen Spielen, einem Kaufvorgang mit einer EC-Site-Anwendung usw. Wird auch möglich sein.
Außerdem habe ich kürzlich eine App namens "Alles, was Sie kostenlos Musik hören können !! - Net Radio" veröffentlicht](https://itunes.apple.com/jp/app/nettorajio-j-popmo-wu- liaode / id769979888? mt = 8) Überprüfen Sie, ob die in dieser App installierte statische Linkbibliothek nicht mit einem unbekannten externen Server kommuniziert oder ob Sie SSL verwenden möchten, aber nicht anderweitig kommunizieren Dazu verwende ich ein Proxyserver-Tool namens mitmproxy.
Der folgende Inhalt ist so
Was Sie brauchen ist:
Mitmproxy ist ein Befehlszeilen-Proxy-Tool. Der Name Mitm ist eine Abkürzung für Man-in-the-Middle und scheint von Begriffen zu stammen, die in Kommunikationsbegriffen wie Man-in-the-Middle-Attacke verwendet werden.
Ein Zwischenangriff ist radikal, aber ein nützliches Werkzeug, um eine von Ihnen selbst entwickelte App zu überprüfen.
Das Bild sieht folgendermaßen aus:
Der grobe Mechanismus besteht darin, die Internetfreigabe (die Funktion, mit der OSX selbst zum WLAN-Router wird) in der Standardeinstellung von Mac OSX zu verwenden, die Kommunikation mit dem Proxy weiterzuleiten und das WLAN auf dem tatsächlichen iOS-Gerät zu verwenden.
Um Mitmproxy auszuführen, benötigen Sie zuerst Python. Installieren Sie Python mit Homebrew.
$ brew update
$ brew upgrade
$ brew install python
Dann installiere pip. easy_insall sollte gleichzeitig mit der Installation von Python durch Brew installiert werden.
$ easy_install pip
Installieren Sie mitmproxy von pip
$ pip install mitmproxy
Wenn Sie es bereits installiert haben und aktualisieren möchten, fügen Sie die Option -U wie folgt hinzu und aktualisieren Sie es.
$ pip install mitmproxy -U
Durch die Installation mit pip werden auch die zugehörigen Bibliotheken installiert.
Geben Sie zum Ausführen den Port mit der Option -p wie folgt an.
$ mitmproxy -p 8080
Ich habe Port 8080 angegeben, dies erfordert jedoch auch, dass 8080 in den WLAN-Einstellungen von der iPhone-Seite angegeben wird.
Sie können die Serveradresse und die Portnummer angeben, indem Sie in den WLAN-Einstellungen von iOS Manuell mit HTTP-Proxy auswählen.
(In der Abbildung ist der Computername von Mac OSX sonnig. Dies ist der WLAN-Name. Machen Sie sich also keine Sorgen.)
Wenn Sie mitmproxy ausführen, wird in ~ / .mitmproxy / ein Zertifikat namens mitmroxy-ca.pem erstellt. Die Installation ist möglich, indem Sie dieses Zertifikat per E-Mail von OS X an das iPhone senden und das Zertifikat über den E-Mail-Client auf der iPhone-Seite öffnen. Sie können dieses Zertifikat unter [Einstellungen] [Allgemein] [Bereitstellung] überprüfen, das iOS-App-Entwicklern bekannt ist.
Eine einfache Verwendung von Mitmproxy besteht darin, Anforderungen und Antworten anzuzeigen, zu manipulieren oder die Kommunikation zu beenden.
In Bezug auf die Fälschung der Anforderung können Sie beispielsweise die Parameter der bereits gesendeten Anforderung ändern und die geänderte Anforderung erneut senden.
Drücken Sie in der Anforderungsliste auf dem Bildschirm in der Abbildung, in der Mitmproxy gestartet wird, die [Eingabetaste], um zum Bildschirm mit den GET-Anforderungs- / Antwortdetails zu gelangen. Anfrage bearbeiten (Abfrage, Pfad, URL, Header, Formular, Text, Methode) mit [e Schlüssel], Sie können zur Liste zurückkehren und die bearbeitete Anforderung mit der Taste [r] erneut abrufen.
Sie können Ihre Änderungen auch mit der [V-Taste] rückgängig machen, was schwer zu bemerken ist. Sie können diese Verknüpfungen überprüfen, indem Sie die [? -Taste] drücken.
Diese Fähigkeit zum interaktiven Bearbeiten von Anforderungen erleichtert das Ausprobieren von API-Aufrufen auf der Serverseite und ist somit ideal für die Validierung und das Testen, wenn die Spezifikationen auf der Server-API-Seite unbekannt sind. Sie können auch anomale Systeme testen, wenn Parameter durcheinander geraten, z. B. wenn Sie Rechnungspositionen anfordern und während des In-App-Kaufs Belege an den Server senden.
Im Gegenteil, bei diesem interaktiven Umschreiben wurde die Kommunikation auf der Anwendungsseite abgeschlossen, selbst wenn Sie die Anforderung und GET / POST erneut bearbeiten. Wenn Sie also testen können, indem Sie die manipulierte Anforderung / Antwort auf der Anwendungsseite usw. empfangen. Ich denke, es gibt nur wenige.
Mit mitmproxy können Sie für jede Kommunikation ein Skript anwenden, indem Sie eine Python-Skriptdatei angeben, die den Inhalt beschreibt, der im Voraus manipuliert werden soll, anstatt die Anforderung / Antwort durch interaktive Operation zu manipulieren.
Angenommen, Sie haben ein System namens Raid Boss in einem sozialen Spiel, in dem eine große Anzahl von Benutzern gegen einen gemeinsamen Boss kämpft.
In den meisten Fällen beträgt der Durchfluss:
--Benutzer A hat dem Boss 100 Schaden zugefügt
Wenn Sie den Schaden mit Mitmproxy ändern und die Anzahl der Belohnungsgegenstände ändern, die Schaden verursacht haben, wird dies wie folgt.
--Benutzer A hat dem Boss 100 Schaden zugefügt
Durch Fälschen der Anforderungsantwort mit einem Skript wird es möglich, Dinge zu tun, die durch interaktives Umschreiben nicht abgelaufen werden konnten.
$ mitmproxy -s examples/add_header.py
Die Datei add_header.py im Beispiel enthält den folgenden einfachen Inhalt, daher sollte sie zur Einführung gebracht werden.
add_header.py
def response(context, flow):
flow.response.headers["newheader"] = ["foo"]
Die Antwortmethode ist eine Methode, die die Kommunikationsantwort neu schreibt, bevor sie an den HTTP (S) -Client übermittelt wird. Überschreiben Sie diese Methode, fügen Sie "newheader" zum Antwortheader hinzu und setzen Sie den Wert auf den String "foo" aus der Liste.
Die Flow-Klasse und die Response-Klasse sind in flow.py definiert. Sie müssen sich daher auf sie beziehen, um die Spezifikationen zu verstehen.
https://github.com/mitmproxy/mitmproxy/blob/master/libmproxy/flow.py
Es gibt auch Beispielcode, der mithilfe eines Skripts ermittelt, ob die Anforderung für einen bestimmten Host bestimmt ist. Dies ist am hilfreichsten.
https://github.com/mitmproxy/mitmproxy/blob/master/examples/redirect_requests.py
redirect_requests.py erstellt und gibt eine ursprüngliche Antwort für alle Anforderungen an den Host auf "example.com" zurück und leitet zu "mitmproxy.org" weiter, wenn es sich um "example.org" handelt.
Basierend auf diesem Beispielcode kann die Anforderung an den von Ihnen vorbereiteten Host schnell manipuliert und überprüft werden.
Wenn Sie mitmproxy installieren, wird auch ein Tool namens mitmdump installiert. Im Gegensatz zu dem bisher erläuterten Mitmproxy gibt Mitmdump das Ergebnis an die Standardausgabe anstatt an die interaktive Listenanzeige wie den oben erwähnten Konsolenbildschirm aus. Sie können das Ergebnis also anscheinend eingrenzen, indem Sie es zusammen mit grep verwenden. Auf diese Weise möchten Sie https für einen bestimmten Host verwenden, können jedoch effizient überprüfen, ob es sich um http handelt.
--Versuchen Sie, eine illegale Anfrage per In-App-Kauf mit der Grundoperation von Mitmproxy zu stellen
Die hier beschriebene Methode ändert die WLAN-Einstellungen, um auf Port 8080 zuzugreifen. Wenn Sie jedoch einen transparenten Proxy verwenden, können Sie den tatsächlichen Computer wie gewohnt über den Standard-80-Port von WLAN kommunizieren lassen.
Informationen zur Verwendung des transparenten Proxys finden Sie auf der folgenden Website.
Transparenter Mitmproxy mit Wifi-Sharing auf dem Mac http://bagpack.hatenablog.jp/entry/2014/02/04/225553
Wenn die Web-API-Designer / -Betreiber und App-Entwickler der Welt die oben genannten Informationen nicht richtig kennen, dauert es eine andere Zeit als beim ursprünglichen Content-Management, z. B. die Wiederherstellung im Falle eines Fehlers und die Verfolgung von Verstößen, und es kommt zu Schäden. Es verursacht sogar ein Gefühl der Stagnation im Plan. Ich denke, der Anfang ist, dass wenn Sie mit einer Smartphone-Anwendung mit https kommunizieren, das Design aufgrund optimistischen Denkens wie Seelenfrieden passiv ist. Daher dachte ich, dass es das erste war, zu wissen, wie man die Kommunikation abfängt / manipuliert.
Tatsächlich scheint Apples Game Center Punktzahlen über Plist zu senden, und es scheint, dass Sie die Punktzahl des App-Benutzers ändern können, indem Sie die interaktive Anfrage von Mitmproxy fälschen (obwohl dies jetzt möglicherweise behoben ist). ..
Setting highscores on Apple's GameCenter http://mitmproxy.org/doc/tutorials/gamecenter.html
Die spezifischen Sicherheitsmaßnahmen variieren je nach den Anforderungen und Prioritäten der einzelnen Inhalte. Überzeugen Sie sich selbst. Oder Wenn Sie sich mit uns beraten, werden wir gemeinsam nachdenken.
mitmproxy http://mitmproxy.org/
Beispiel für ein Mitmproxy-Skript https://github.com/mitmproxy/mitmproxy/tree/master/examples
Überprüfen Sie den Inhalt der SSL-Kommunikation mit Mitmproxy http://ido.nu/kuma/2012/01/29/how-to-use-mitmproxy/
Haben Sie wegen der Abhängigkeit von pyasn1 und PyOpenSSL angefangen, pip zu verwenden? https://github.com/mitmproxy/mitmproxy/issues/37
Recommended Posts