BLOG

Pokémon Go API – Ein genauerer Blick auf automatisierte Angriffe

F5 Miniaturansicht
F5
Veröffentlicht am 16. August 2016

Dutzende Millionen Menschen erkunden die neue Welt von Pokémon Go. Es stellt sich heraus, dass viele dieser Benutzer überhaupt keine Menschen sind, sondern automatisierte Agenten oder Bots. Spiele-Bots sind kein neues Phänomen, aber Pokémon Go bietet einige neue Anwendungsfälle für Bots. Diese Bots haben begonnen, den Spaß aller zu stören, indem sie die Pokémon Go-Server mit automatisiertem Datenverkehr überlasten. Pokémon Go ist eine perfekte Fallstudie dafür, wie automatisierte Angriffe und Abwehrmaßnahmen auf mobile APIs funktionieren. Bei Shape haben wir täglich mit Angriffen dieser Art zu tun und dachten, wir würden uns die Ereignisse bei den Pokémon Go-API-Angriffen genauer ansehen.

Pokémon Go-API-Angriff

Niantic hat vor Kurzem einen Blog-Beitrag veröffentlicht, in dem die Probleme geschildert werden, die Bots durch die Generierung von automatisiertem Datenverkehr verursachen und die den Start des Unternehmens in Lateinamerika tatsächlich behindert haben. Das im Beitrag enthaltene Diagramm zeigt einen erheblichen Rückgang des räumlichen Abfrageverkehrs, seit Niantic am 03.08. um 13:00 Uhr PT Gegenmaßnahmen für die Automatisierung eingeführt hat. Der automatisierte Datenverkehr scheint etwa doppelt so groß gewesen zu sein wie der Datenverkehr echter menschlicher Spieler. Kein Wunder, dass die Pokémon Go-Server in den letzten Wochen stark überlastet waren.

 

Serverressourcen
Abbildung 1. Der räumliche Abfrageverkehr ist um über 50 % zurückgegangen, seit Niantic begonnen hat, Scraper zu blockieren. Quelle: Niantic-Blogbeitrag

Lernen Sie die Pokémon-Bots kennen

Es gibt zwei Arten von Pokémon-Bots. Der erste Bot-Typ automatisiert das normale Gameplay und kommt häufig bei anderen Gaming-Apps vor, da er Aktivitäten wie Herumlaufen und Pokémon-Fangen automatisiert. Beispiele für solche Bots sind MyGoBot und PokemonGo-Bot . Aber Pokémon Go hat zur Entwicklung eines neuen Bottyps namens Tracker oder Mapper inspiriert, der den Standort von Pokémon angibt. Diese Bots betreiben Pokémon Go-Kartendienste wie Pokevision und Go Radar .

So funktioniert ein Pokémon Go-Bot

Ein mobiler API-Bot ist ein Programm, das die Kommunikation zwischen einer mobilen App und ihren Backend-Servern nachahmt – in diesem Fall Server von Niantic. Der Bot teilt den Servern einfach mit, welche Aktionen ausgeführt werden, und verarbeitet die Antwort des Servers.

Abbildung 2 zeigt einen Screenshot einer Pokémon Go-Karte, die Pokémon in einem Umkreis von 3 Fuß um einen bestimmten Standort markiert. Um dies zu erreichen, befolgen die Bot-Ersteller normalerweise diese Schritte:

  1. Führen Sie ein Reverse Engineering des Kommunikationsprotokolls zwischen der mobilen App und dem Backend-Server durch. Der Bot-Ersteller spielt das Spiel, erfasst die Kommunikation zwischen der App und ihrem Server und entschlüsselt das Protokollformat.
  2. Schreiben Sie ein Programm, um eine Reihe „legitimer“ Anfragen an Backend-Server zu senden, damit diese Maßnahmen ergreifen. In diesem Fall erfolgt das Abrufen der Standorte von Pokémon in der Nähe über eine einzelne Anfrage mit einer gezielten GPS-Koordinate, ohne dass ein tatsächlicher Fußweg zum physischen Standort erforderlich ist. Die Herausforderung für den Bot besteht darin, die Erkennung durch einen Server zu umgehen und wie ein echter Mensch auszusehen .
  3. Stellen Sie zugehörige Funktionen bereit, beispielsweise die Integration mit Google Maps, oder integrieren Sie die eigene Kartenfunktionalität des Bots für den Benutzer.

Karte
Abbildung 2. Screenshot einer Pokémon Go-Karte

Cracks und Abwehrmaßnahmen für mobile Apps

Lassen Sie uns am Beispiel der Pokémon Go-App untersuchen, wie eine mobile App durch Reverse Engineering geknackt wird, um ihre Geheimnisse preiszugeben. Da Angreifer hauptsächlich die Android-App von Pokémon Go ausnutzten, konzentrieren wir uns auf Cracks und Abwehrmaßnahmen für Android-Apps.

Reverse Engineering des Protokolls

Die Pokémon Go-App und die Backend-Server kommunizieren mithilfe von ProtoBuf über SSL. ProtoBuf definiert das im Netzwerk übertragene Datenformat. Hier ist beispielsweise ein Auszug aus der ProtoBuf-Definition für Spielerstatistiken:

ProtoBuf-Definition für Spielerstatistiken

Pokémon Go wurde von POGOProtos innerhalb von nur zwei Wochen rückwärts entwickelt und online veröffentlicht. Wie konnte das so schnell passieren? Anfangs verwendete Niantic kein Certificate Pinning .

Certificate Pinning ist eine gängige Methode zum Schutz gegen Man-in-the-Middle-Angriffe. Kurz gesagt: Eine mobile App vertraut nur Serverzertifikaten, die in die App selbst eingebettet sind. Ohne Zertifikatspinnschutz kann ein Angreifer problemlos einen Proxy wie Mitmproxy oder Fiddler einrichten und das vom Angreifer erstellte Zertifikat auf seinem Telefon installieren. Als Nächstes kann sie ihr Telefon so konfigurieren, dass der Datenverkehr über den Proxy geleitet wird und der Datenverkehr zwischen der Pokémon Go-App und den Niantic-Servern abgehört wird. Es gibt tatsächlich ein Pokémon Go-spezifisches Proxy-Tool namens pokemon-go-mitm , das dies ermöglicht.

Am 31. Juli nahm Niantic eine große Änderung sowohl an seinem Server als auch an seiner Pokémon Go-App vor. Pokémon Go 0.31.0 wurde mit Zertifikatspinnschutz veröffentlicht. Leider war die Katze aus dem Sack und das Kommunikationsprotokoll war bereits öffentlich auf GitHub verfügbar. Darüber hinaus ist die korrekte Implementierung des Zertifikat-Pinnings nicht immer einfach. In den späteren Abschnitten behandeln wir einige Techniken, die von Angreifern häufig verwendet werden, um die Zertifikatssperre zu umgehen.

Statische APK-Analyse

Das Android-Anwendungspaket (APK) ist das von Android verwendete Paketdateiformat zum Installieren mobiler Apps. Android-Apps werden hauptsächlich in Java geschrieben und der Java-Code wird in das Dex-Format kompiliert und in eine APK-Datei integriert. Darüber hinaus können Android-Apps auch gemeinsam genutzte Bibliotheken aufrufen, die in nativem Code geschrieben sind ( Android NDK ).

Es ist bekannt, dass Dex-Dateien mit Tools wie Baksmali problemlos in SMALI-Sprachen zerlegt werden können. Anschließend dekompilieren Tools wie dex2jar und jd-gui die Dex-Datei weiter in leicht lesbaren Java-Code. Mithilfe dieser Techniken dekompilierten Angreifer die Pokémon Go-Android-App (Version 0.29.0 und 0.31.0) in Java-Code. Der unten gezeigte Beispielcode implementiert die Zertifikatsfixierung aus der Klasse com.nianticlabs.nia.network.NianticTrustManager .

Beispielcode

Wenn der Quellcode einer Anwendung offengelegt wird, ist Reverse Engineering ein Kinderspiel. Pokemon Go Xposed verwendete weniger als 100 Zeilen Java-Code, um die Pokémon Go-App zu täuschen und sie glauben zu machen, das Zertifikat vom MITMProxy sei das authentische Zertifikat von Niantic.

Wie hat Pokemon Go Xposed das geschafft? Ganz einfach. Das Tool hängt sich dazu einfach an den Aufruf der im obigen Codeausschnitt erwähnten Funktion checkServerTrusted an. Der Hook ändert den ersten Parameter der Funktion, chain , in den Wert des Zertifikats von Niantic. Dies bedeutet, dass die Pokémon Go-App dazu verleitet wird, dem Zertifikat zu vertrauen, unabhängig davon, welches nicht autorisierte Zertifikat der Proxy verwendet.

Es gibt viele Tools, die Angreifern die Demontage und statische Analyse erschweren können. ProGuard und DexGuard sind Tools, die Java-Code und Dex-Dateien verschleiern. Durch die Verschleierung wird der Code selbst in dekompilierter Form schwer lesbar. Ein anderer Ansatz besteht darin, Android-Packer zu verwenden, um die ursprüngliche classes.dex-Datei von Android-Apps zu verschlüsseln. Die verschlüsselte Dex-Datei wird zur Laufzeit im Speicher entschlüsselt, was die statische Analyse für die meisten Angreifer extrem schwierig, wenn nicht gar unmöglich macht. Die Verwendung einer nativen Bibliothek ist eine weitere Möglichkeit, den Schwierigkeitsgrad des Reverse Engineering der App erheblich zu erhöhen.

Reverse Engineering der nativen Bibliothek

Das interessanteste Katz-und-Maus-Spiel zwischen den Pokemongodev- Hackern und Niantic drehte sich um das Feld mit dem Namen „Unknown6“, das in der Signatur enthalten war, die mit der Kartenanfrage gesendet wurde, um Pokémon in der Nähe eines Standorts zu erhalten. „Unknown6“ ist eines der nicht identifizierten Felder im Reverse-Engineering-Protobuf. Zunächst war es egal, welcher Wert Unknown6 zugewiesen wurde; die Server von Niantic haben ihn einfach akzeptiert. Ab 13:00 Uhr PT am 03.08. konnten plötzlich alle Pokémon Go-Bots keine Pokémon mehr finden, was letztendlich zu dem erheblichen Abfragerückgang in Abbildung 1 führte.

Dann bemerkten die Hacker die Bedeutung des Felds „Unknown6“ im Protokoll und vermuteten zunächst, dass es sich bei Unknown6 um eine Art Digest oder HMAC zur Validierung der Integrität der Anfrage handelte. Dies löste in der Pokémon- Community großes Interesse aus und rasch wurde das Team „Unknown6“ gebildet, um zu versuchen, das mysteriöse Feld zu knacken. Aufgrund des großen Interesses von Programmierern und Nicht-Programmierern wurde der Discord -Kanal privatisiert, doch ein Live-Update -Kanal hielt alle über den Fortschritt der Cracking-Bemühungen auf dem Laufenden. Nach 3 Tagen und 5 Stunden, am Nachmittag des 06.08., konnte das Team Unknown6 den Sieg für sich beanspruchen und eine aktualisierte Pokémon Go-API veröffentlichen, mit der es wieder möglich war, Pokémon in der Nähe abzurufen.

Während die technischen Details des Hacks noch veröffentlicht werden müssen , wurden in den Foren und im Live-Update viele relevante Tools und Technologien erwähnt. IDA-Pro von Hex-Rays ist ein professionelles Tool, das den ARM-Code einer nativen Bibliothek disassemblieren kann, und der neue Hex-Rays-Decompiler kann eine Binärcodedatei in ein C-ähnliches Format dekompilieren. Mithilfe dieser Tools können Angreifer dynamische Analysen durchführen und die mobile App und ihre Bibliotheken zur Laufzeit debuggen. Natürlich ist das Reverse Engineering eines Binärprogramms selbst mit derart leistungsstarken Tools immer noch eine große Herausforderung. Ohne eine absichtliche Verschleierung ist der disassemblierte oder dekompilierte Code bereits schwer zu verstehen und die Codegröße ist häufig riesig. Zur Veranschaulichung der erforderlichen komplexen und unvorhersehbaren Arbeit wurde im Live-Update-Kanal und in einem anschließenden Interview beschrieben, wie die Verschlüsselungsfunktion von „Unknown6“ innerhalb von Stunden identifiziert wurde, das Team jedoch zusätzlich viel Zeit mit der Analyse eines anderen Felds namens „Unknown22“ verbrachte, das sich als nicht mit Unknown6 verbunden herausstellte.

Daher bietet die Verschleierung weiterhin viele praktische Vorteile für den Schutz nativer Bibliotheken. Ein hohes Maß an Verschleierung in einer Binärdatei kann den Schwierigkeitsgrad des Reverse Engineering um ein Vielfaches erhöhen. Wie die vielen erfolgreichen Cracks von Seriencodes für Windows und Windows-Anwendungen zeigen, sind motivierte mobile Cracker jedoch häufig erfolgreich.

Serverseitiger Schutz

Serverseitige Abwehrmaßnahmen funktionieren völlig anders als clientseitige Abwehrmaßnahmen. Hier sind einige der Techniken, die zum Schutz der mobilen API von Pokémon Go verwendet werden.

Ratenbegrenzung

Die Ratenbegrenzung ist ein gängiger Ansatz, um automatisierten Datenverkehr zu stoppen oder zumindest zu verlangsamen. In der Anfangszeit konnten Pokémon-Scanner Dutzende Anfragen pro Sekunde senden, Dutzende Zellen scannen und jedes Pokémon finden.

Am 31.07. hat Niantic Schutzmaßnahmen zur Ratenbegrenzung hinzugefügt. Wenn ein Konto innerhalb von ca. 5 Sekunden mehrere Kartenanfragen sendet, akzeptieren die Server von Niantic nur die erste Anfrage und löschen den Rest. Angreifer reagierten auf diese Ratenbegrenzungen, indem sie: a) eine Verzögerung (5 Sekunden) zwischen den Kartenanforderungen ihrer Scan-Programme einfügten b) mehrere Konten und mehrere Threads verwendeten, um die Ratenbegrenzung zu umgehen

Im Fall von Pokémon Go hat der Einsatz von Rate-Limiting gerade ein weiteres Schlachtfeld für automatisierte Angriffe eröffnet: die automatisierte Kontoerstellung. Sie stellten schnell fest, dass die Ratenbegrenzung zwar eine gute Grundtechnik ist, um die Automatisierung vor übermäßig aggressiven Scrapern oder unerfahrenen Angreifern zu schützen, fortgeschrittene Angreifer jedoch nicht daran hindert, automatisierte Anfragen durchzubringen.

IP-Blockierung

Das Blockieren von IPs ist eine traditionelle Technik, die von Standard-Netzwerk-Firewalls oder Web Application Firewalls (WAFs) verwendet wird, um Anfragen von verdächtigen IPs zu löschen. Es gibt viele Datenbanken, die die IP-Reputation verfolgen, und Firewalls und WAFs können solche Informationen regelmäßig abrufen.

Generell ist eine IP-basierte Sperrung riskant und ineffektiv. Das blinde Blockieren einer IP mit großem Datenverkehr kann dazu führen, dass das NAT einer Universität oder eines Unternehmens blockiert wird. Mittlerweile verwenden viele Pokémon-Bots oder -Scanner möglicherweise dynamische Residential-IP-Adressen. Diese IPs werden von den Kunden der ISPs gemeinsam genutzt. Das Sperren einer IP für einen längeren Zeitraum kann daher dazu führen, dass legitime Spieler blockiert werden.

Hosting-Dienste wie Amazon Web Services (AWS) und Digital Ocean sind für Angreifer ebenfalls Quellen für den Zugriff auf virtuelle Maschinen und neue IPs. Wenn Angreifer gestohlene Kreditkarten verwenden, können sie diese Ressourcen sogar kostenlos erhalten. Legitime Benutzer werden Hosting-Dienste jedoch niemals zum Surfen im Internet oder zum Spielen verwenden. Daher ist das Blockieren von IPs von Hosting-Diensten eine sichere Abwehrmaßnahme und wird häufig auf der Serverseite verwendet. Laut diesem Forenbeitrag könnte Niantic beschließen, IPs von AWS zu sperren.

Verhaltensanalyse

Die Verhaltensanalyse ist normalerweise die letzte Verteidigungslinie gegen fortgeschrittene Angreifer, die in der Lage sind, andere Abwehrmaßnahmen zu umgehen. Bots verhalten sich ganz anders als Menschen. Beispielsweise kann ein echter Mensch das Spiel nicht rund um die Uhr spielen oder 5 Pokémon in einer Sekunde fangen. Obwohl Verhaltensanalysen ein vielversprechender Ansatz zu sein scheinen, ist es keine leichte Aufgabe, ein präzises Erkennungssystem zu entwickeln, das mit riesigen Datenmengen wie Pokémon Go umgehen kann.

Niantic hat gerade ein Soft-Bann für Cheater verhängt, die GPS-Spoofing zum „Teleportieren“ verwenden (also sich plötzlich mit unmöglich hoher Geschwindigkeit bewegen). Es handelte sich vermutlich um ein „weiches Verbot“ aufgrund von Fehlalarmen; Familien teilen sich Konten und GPS-Messwerte können ungenau sein, wodurch einige legitime Anwendungsfälle wie Bots aussehen.

Etwa am 12. August 2016 veröffentlichte Niantic einen Hinweis auf seiner Website und wies darauf hin, dass ein Verstoß gegen die Servicebedingungen zu einer dauerhaften Sperrung eines Pokémon Go-Kontos führen kann. Darüber hinaus wurden inoffiziell mehrere Verbotsregeln für Bots bekannt gegeben . Beispielsweise werden Konten aufgrund der Pokémon-Überfangregel gesperrt, wenn sie an einem einzigen Tag mehr als tausend Pokémon fangen. Darüber hinaus ermutigt Niantic legitime Spieler , Cheater oder unangemessene Spieler zu melden .

Unserer Erfahrung nach kann eine auf Verhaltensmodellierung basierende Erkennung zwar äußerst effektiv sein, es ist jedoch oft technisch oder wirtschaftlich nicht machbar, sie intern zu entwickeln. Wie Niantic in seinem Blogbeitrag kommentierte: „Die Auseinandersetzung mit diesem Problem ist auch mit Opportunitätskosten verbunden. Entwickler müssen Zeit darauf verwenden, dieses Problem in den Griff zu bekommen, anstatt neue Funktionen zu entwickeln.“ Das größere Problem besteht darin, dass die Entwicklung einer Technologie zur Verteidigung gegen engagierte, technisch versierte Gegner, die mit Botnetzen und anderen Tools ausgestattet sind, die darauf ausgelegt sind, herkömmliche Abwehrmaßnahmen zu umgehen, zahlreiche hochspezialisierte Fähigkeiten und einen enormen Entwicklungsaufwand erfordert.

Das Spiel ist noch nicht vorbei

Da Pokémon Go bei den Spielern weiterhin beliebt ist, wird auch das Spiel zwischen den Bot-Herstellern und Niantic weitergehen. Die Abwehr des automatisierten Datenverkehrs stellt nicht nur für die Gaming-Branche, sondern für alle Branchen eine Herausforderung dar. Ähnliche Angriffs- und Verteidigungsaktivitäten finden bei Apps von Banken, Fluggesellschaften und Einzelhändlern statt, und hier geht es um um Größenordnungen mehr als den Verlust von ein paar Relaxos . Bots und ähnliche Angriffstools sind für Unternehmen kein Spaß, wenn ihre Kunden und Benutzer aufgrund unerwünschten automatisierten Datenverkehrs nicht auf Dienste zugreifen können.