Dutzende Millionen Menschen erkunden die neue Welt von Pokémon Go. Wie sich herausstellt, sind viele dieser Nutzer gar keine Menschen, sondern automatisierte Agenten – sogenannte Bots. Bots, die Spiele spielen, sind kein neues Phänomen, doch Pokémon Go eröffnet ihnen einige neue Einsatzmöglichkeiten. Diese Bots beeinträchtigen inzwischen den Spielspaß aller, indem sie die Pokémon-Go-Server mit automatisiertem Datenverkehr überlasten. Pokémon Go ist ein perfektes Fallbeispiel dafür, wie automatisierte Angriffe auf mobile APIs und entsprechende Abwehrmaßnahmen funktionieren. Bei Shape haben wir täglich mit solchen Angriffen zu tun. Deshalb wollten wir uns genauer ansehen, was bei den Angriffen auf die Pokémon-Go-API passiert ist.
Angriff auf die Pokémon-Go-API
Niantic veröffentlichte kürzlich einen Blogbeitrag über die Probleme, die Bots durch die Erzeugung automatisierten Datenverkehrs verursachten und die sogar den Start in Lateinamerika beeinträchtigten. Das im Beitrag enthaltene Diagramm zeigt einen deutlichen Rückgang des Datenverkehrs durch räumliche Abfragen, seit Niantic am 03.08. um 13:00 Uhr PT Gegenmaßnahmen gegen die Automatisierung eingeführt hat. Der automatisierte Datenverkehr scheint etwa doppelt so hoch gewesen zu sein wie der von echten menschlichen Spielern. Kein Wunder, dass die Pokémon-Go-Server in den vergangenen Wochen stark überlastet waren.

Abbildung 1. Der Datenverkehr durch räumliche Abfragen ist um mehr als 50 % zurückgegangen, seit Niantic damit begonnen hat, Scraper zu blockieren. Quelle: Niantic-Blogbeitrag
Die Pokémon-Bots kennenlernen
Es gibt zwei Arten von Pokémon-Bots. Die erste Art automatisiert den normalen Spielablauf und ist auch in anderen Spiele-Apps häufig anzutreffen. Dabei werden Aktivitäten wie das Herumlaufen und Fangen von Pokémon automatisiert. Beispiele für solche Bots sind MyGoBot und PokemonGo-Bot. Pokémon Go hat jedoch die Entwicklung einer neuen Art von Bot angeregt, die als Tracker oder Mapper bezeichnet wird und die Standorte von Pokémon anzeigt. Diese Bots bilden die Grundlage für Pokémon-Go-Kartendienste wie Pokevision und Go Radar.
So funktioniert ein Pokémon-Go-Bot
Ein Mobile-API-Bot ist ein Programm, das die Kommunikation zwischen einer mobilen App und ihren Backend-Servern nachahmt – in diesem Fall den Servern von Niantic. Der Bot teilt den Servern lediglich mit, welche Aktionen ausgeführt werden, und verarbeitet deren Antwort.
Abbildung 2 zeigt einen Screenshot einer Pokémon-Go-Karte, auf der Pokémon in der Nähe markiert sind, die sich in einem Umkreis von drei Schritten um einen bestimmten Standort befinden. Dazu gehen die Bot-Entwickler in der Regel wie folgt vor:
- Das Kommunikationsprotokoll zwischen der mobilen App und dem Backend-Server wird mittels Reverse Engineering analysiert. Dazu spielt der Bot-Entwickler das Spiel, zeichnet die Kommunikation zwischen der App und ihrem Server auf und entschlüsselt das Protokollformat.
- Schreiben Sie ein Programm, das eine Reihe „legitimer“ Anfragen an Backend-Server sendet, um Aktionen auszuführen. In diesem Fall genügt eine einzige Anfrage mit einer bestimmten GPS-Koordinate, um die Standorte von Pokémon in der Nähe abzurufen, ohne tatsächlich zu diesem Ort laufen zu müssen. Die Herausforderung für den Bot besteht darin, die Erkennung durch den Server zu umgehen und wie ein echter Mensch zu wirken.
- Stellen Sie ergänzende Funktionen bereit, etwa eine Integration mit Google Maps oder eine eigene Kartenfunktion des Bots für den Nutzer.

Abbildung 2. Screenshot einer Pokémon-Go-Karte
Angriffe auf mobile Apps und Schutzmaßnahmen
Am Beispiel der Pokémon-Go-App wollen wir untersuchen, wie eine mobile App mithilfe von Reverse Engineering geknackt wird, um ihre Geheimnisse offenzulegen. Da die Angreifer hauptsächlich die Android-App von Pokémon Go ausnutzten, konzentrieren wir uns auf das Knacken und den Schutz von Android-Apps.
Reverse Engineering des Protokolls
Die Pokémon-Go-App und die Backend-Server kommunizieren über SSL mithilfe von ProtoBuf. ProtoBuf definiert das Format der über das Netzwerk übertragenen Daten. Hier ist beispielsweise ein Auszug aus der ProtoBuf-Definition für Spielerstatistiken:

Pokémon Go wurde innerhalb von nur zwei Wochen von POGOProtos mittels Reverse Engineering analysiert und online veröffentlicht. Wie konnte das so schnell geschehen? Anfangs verwendete Niantic kein Certificate Pinning.
Certificate Pinning ist ein gängiger Schutz vor Man-in-the-Middle-Angriffen. Kurz gesagt vertraut eine mobile App nur Serverzertifikaten, die in der App selbst hinterlegt sind. Ohne den Schutz durch Certificate Pinning kann eine Angreiferin problemlos einen Proxy wie Mitmproxy oder Fiddler einrichten und das von ihr erstellte Zertifikat auf ihrem Smartphone installieren. Anschließend kann sie ihr Smartphone so konfigurieren, dass der Datenverkehr über den Proxy geleitet wird, und den Datenverkehr zwischen der Pokémon-Go-App und den Niantic-Servern mitschneiden. Dafür gibt es sogar ein spezielles Proxy-Tool für Pokémon Go namens pokemon-go-mitm.
Am 31. Juli nahm Niantic sowohl an seinem Server als auch an seiner Pokémon-Go-App eine umfassende Änderung vor. Pokémon Go 0.31.0 wurde mit Certificate-Pinning-Schutz veröffentlicht. Leider war die Katze bereits aus dem Sack und das Kommunikationsprotokoll auf GitHub öffentlich verfügbar. Zudem ist es nicht immer einfach, Certificate Pinning korrekt zu implementieren. In den folgenden Abschnitten behandeln wir einige Techniken, die Angreifer häufig einsetzen, um Certificate Pinning zu umgehen.
Statische APK-Analyse
Das Android-Anwendungspaket (APK) ist das von Android zur Installation mobiler Apps verwendete Paketdateiformat. Android-Apps werden hauptsächlich in Java geschrieben. 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).
Dex-Dateien lassen sich bekanntermaßen mithilfe von Tools wie Baksmali problemlos in SMALI-Sprachen disassemblieren. 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-App für Android (Version 0.29.0 und 0.31.0) in Java-Code. Der unten gezeigte Beispielcode implementiert Certificate Pinning aus der Klasse com.nianticlabs.nia.network.NianticTrustManager.

Wenn der Quellcode einer Anwendung offengelegt wird, ist Reverse Engineering ein Kinderspiel. Pokemon Go Xposed benötigte weniger als 100 Zeilen Java-Code, um der Pokémon-Go-App vorzutäuschen, das Zertifikat von MITMProxy sei das authentische Zertifikat von Niantic.
Wie hat Pokemon Go Xposed das geschafft? Ganz einfach. Das Tool klinkt sich lediglich in den Aufruf der Funktion checkServerTrusted ein, die im obigen Codeausschnitt erwähnt wird. Der Hook ändert den ersten Parameter der Funktion, chain, auf den Wert des Zertifikats von Niantic. Das bedeutet, dass die Pokémon-Go-App dazu gebracht wird, dem Zertifikat zu vertrauen – unabhängig davon, welches nicht autorisierte Zertifikat der Proxy verwendet.
Es gibt viele Tools, die Angreifern die Disassemblierung und statische Analyse erschweren können. ProGuard und DexGuard sind Tools, die Java-Code und Dex-Dateien verschleiern. Durch die Verschleierung ist der Code selbst in dekompilierter Form nur schwer lesbar. Ein weiterer Ansatz besteht darin, Android-Packer zu verwenden, um die ursprüngliche Datei classes.dex von Android-Apps zu verschlüsseln. Die verschlüsselte Dex-Datei wird zur Laufzeit im Arbeitsspeicher entschlüsselt, wodurch die statische Analyse für die meisten Angreifer äußerst schwierig, wenn nicht sogar unmöglich wird. Die Verwendung einer nativen Bibliothek ist eine weitere Möglichkeit, das Reverse Engineering der App erheblich zu erschweren.
Reverse Engineering der nativen Bibliothek
Das interessanteste Katz-und-Maus-Spiel zwischen den pokemongodev Hackern und Niantic drehte sich um das Feld „Unknown6“, das in der Signatur enthalten war, die bei der Kartenanfrage gesendet wurde, um Pokémon in der Nähe eines Standorts zu finden. „Unknown6“ ist eines der nicht identifizierten Felder im mittels Reverse Engineering rekonstruierten Protobuf. Anfangs spielte es keine Rolle, welcher Wert Unknown6 zugewiesen wurde; die Niantic-Server akzeptierten ihn einfach. Ab 13:00 Uhr PT am 03.08. konnten plötzlich sämtliche Pokémon-Go-Bots keine Pokémon mehr finden, was schließlich zu dem deutlichen Rückgang der Abfragen in Abbildung 1 führte.
Die Hacker erkannten daraufhin die Bedeutung des Feldes „Unknown6“ im Protokoll und vermuteten zunächst, dass es sich bei Unknown6 um eine Art Hashwert oder HMAC zur Überprüfung der Integrität der Anfrage handelte. Dies stieß in der pokemongodev‑Community auf enormes Interesse, und es wurde rasch ein „Unknown6“-Team gebildet, das versuchte, das Geheimnis dieses rätselhaften Feldes zu lüften. Der Discord‑Kanal wurde aufgrund des großen Interesses von Programmierern und Nichtprogrammierern auf privat gestellt, doch ein Live-Update‑Kanal hielt alle über den Fortschritt der Entschlüsselungsversuche auf dem Laufenden. Nach 3 Tagen und 5 Stunden, am Nachmittag des 06.08., verkündete das Unknown6-Team seinen Erfolg und veröffentlichte eine aktualisierte Pokémon-Go-API, mit der sich wieder Pokémon in der Nähe abrufen ließen.
Obwohl die technische Dokumentation zu den Einzelheiten des Hacks noch nicht veröffentlicht wurde, wurden in den Foren und im Live-Update zahlreiche 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ärcode-Datei in ein C-ähnliches Format dekompilieren. Mit diesen Tools können Angreifer dynamische Analysen durchführen und die mobile App sowie ihre Bibliotheken zur Laufzeit debuggen. Natürlich bleibt das Reverse Engineering eines Binärprogramms selbst mit derart leistungsfähigen Tools eine enorme Herausforderung. Auch ohne absichtliche Verschleierung ist der disassemblierte oder dekompilierte Code bereits schwer verständlich, und der Codeumfang ist häufig riesig. Um den komplexen und unvorhersehbaren Arbeitsaufwand zu veranschaulichen, wurde im Live-Update-Kanal und in einem späteren Interview beschrieben, wie die Verschlüsselungsfunktion von „Unknown6“ innerhalb weniger Stunden identifiziert wurde, das Team jedoch noch sehr viel zusätzliche Zeit mit der Analyse eines anderen Feldes namens „Unknown22“ verbrachte, das sich letztlich als unabhängig von Unknown6 herausstellte.
Daher bietet Verschleierung nach wie vor viele praktische Vorteile beim Schutz nativer Bibliotheken. Ein hoher Grad an Verschleierung in einer Binärdatei kann das Reverse Engineering um Größenordnungen erschweren. Wie jedoch die vielen erfolgreich geknackten Seriennummern für Windows und Windows-Anwendungen zeigen, sind motivierte Hacker im Mobilbereich häufig erfolgreich.
Serverseitiger Schutz
Serverseitige Schutzmaßnahmen funktionieren völlig anders als clientseitige. Im Folgenden werden einige der Techniken vorgestellt, die zum Schutz der mobilen API von Pokémon Go eingesetzt werden.
Ratenbegrenzung
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 durchsuchen und jedes Pokémon finden.
Am 31.07. führte Niantic Schutzmaßnahmen zur Anfrageratenbegrenzung ein. Wenn ein Konto innerhalb von etwa 5 Sekunden mehrere Kartenanfragen sendete, akzeptierten die Server von Niantic nur die erste Anfrage und verwarfen die übrigen. Die Angreifer reagierten auf diese Begrenzungen, indem sie: a) zwischen den Kartenanfragen ihrer Scanprogramme eine Verzögerung von 5 Sekunden einbauten und b) mehrere Konten und Threads verwendeten, um die Anfrageratenbegrenzung zu umgehen.
Im Fall von Pokémon Go eröffnete der Einsatz von Ratenbegrenzung lediglich ein weiteres Schlachtfeld für automatisierte Angriffe: die automatisierte Kontoerstellung. Die Angreifer stellten schnell fest, dass Ratenbegrenzung zwar eine gute grundlegende Methode ist, um die Automatisierung durch übermäßig aggressive Scraper oder unerfahrene Angreifer einzudämmen, fortgeschrittene Angreifer jedoch nicht daran hindert, automatisierte Anfragen durchzubringen.
IP-Blockierung
Das Blockieren von IP-Adressen ist eine herkömmliche Technik, die von standardmäßigen Netzwerk-Firewalls oder Web Application Firewalls (WAFs) eingesetzt wird, um Anfragen von verdächtigen IP-Adressen zu verwerfen. Es gibt zahlreiche Datenbanken, die die Reputation von IP-Adressen erfassen. Firewalls und WAFs können solche Informationen regelmäßig abrufen.
Im Allgemeinen ist die IP-basierte Sperrung riskant und ineffektiv. Wird eine IP-Adresse mit hohem Datenverkehrsaufkommen pauschal gesperrt, kann dadurch unter Umständen das NAT einer Universität oder eines Unternehmens blockiert werden. Gleichzeitig nutzen viele Pokémon-Bots oder -Scanner möglicherweise dynamische IP-Adressen von Privatanschlüssen. Diese IP-Adressen werden von den Kunden der Internetanbieter gemeinsam genutzt, sodass eine langfristige Sperrung einer IP-Adresse auch legitime Spieler blockieren kann.
Hostingdienste wie Amazon Web Services (AWS) und Digital Ocean bieten Angreifern ebenfalls die Möglichkeit, virtuelle Maschinen und neue IP-Adressen zu erhalten. Wenn Angreifer gestohlene Kreditkarten verwenden, können sie diese Ressourcen sogar kostenlos beziehen. Legitime Nutzer verwenden Hostingdienste jedoch niemals, um im Internet zu surfen oder Spiele zu spielen. Daher ist das Sperren von IP-Adressen solcher Hostingdienste eine sichere Abwehrmaßnahme und wird häufig serverseitig eingesetzt. Laut diesem Forenbeitrag könnte Niantic beschließen, IP-Adressen von AWS zu sperren.
Verhaltensanalyse
Die Verhaltensanalyse ist in der Regel die letzte Verteidigungslinie gegen fortgeschrittene Angreifer, die andere Schutzmaßnahmen umgehen können. Bots verhalten sich ganz anders als Menschen. Ein echter Mensch kann beispielsweise nicht rund um die Uhr spielen oder fünf Pokémon in einer Sekunde fangen. Auch wenn die Verhaltensanalyse vielversprechend klingt, ist es keine leichte Aufgabe, ein präzises Erkennungssystem zu entwickeln, das die enormen Datenmengen eines Spiels wie Pokémon Go bewältigen kann.
Niantic hat gerade eine vorübergehende Sperre für Betrüger eingeführt, die GPS-Spoofing nutzen, um sich zu „teleportieren“ (d. h. sich plötzlich mit einer unmöglich hohen Geschwindigkeit fortzubewegen). Vermutlich handelt es sich wegen möglicher Fehlalarme nur um eine „vorübergehende Sperre“: Familien nutzen mitunter gemeinsame Konten, und GPS-Daten können ungenau sein, sodass manche legitimen Nutzungsmuster wie Bot-Aktivitäten wirken.
Um den 12. August 2016 veröffentlichte Niantic einen Hinweis auf seiner Website, in dem das Unternehmen erklärte, dass Verstöße gegen seine Nutzungsbedingungen zu einer dauerhaften Sperrung eines Pokémon-Go-Kontos führen können. Außerdem wurden mehrere gegen Bots gerichtete Sperrregeln inoffiziell bekannt gegeben. Beispielsweise werden Konten gemäß der Regel gegen übermäßiges Fangen von Pokémon gesperrt, wenn mit ihnen an einem einzigen Tag mehr als tausend Pokémon gefangen werden. Darüber hinaus fordert Niantic reguläre Spieler dazu auf, Betrüger oder Spieler mit unangemessenem Verhalten zu melden.
Unserer Erfahrung nach kann eine auf Verhaltensmodellierung basierende Erkennung äußerst effektiv sein, doch ihre interne Entwicklung ist technisch oder wirtschaftlich oft nicht realisierbar. Wie Niantic in seinem Blogbeitrag anmerkte: „Die Bewältigung dieses Problems verursacht auch Opportunitätskosten. Entwickler müssen Zeit darauf verwenden, dieses Problem einzudämmen, anstatt neue Funktionen zu entwickeln.“ Das größere Problem besteht darin, dass die Entwicklung einer Technologie zur Abwehr entschlossener, technisch versierter Angreifer, die mit Botnetzen und anderen Werkzeugen zur Umgehung herkömmlicher Schutzmaßnahmen ausgestattet sind, zahlreiche hoch spezialisierte Kompetenzen und einen enormen Entwicklungsaufwand erfordert.
Das Spiel ist noch nicht vorbei
Solange Pokémon Go bei den Spielern beliebt bleibt, wird auch das Katz-und-Maus-Spiel zwischen Bot-Entwicklern und Niantic weitergehen. Die Abwehr von automatisiertem Datenverkehr stellt nicht nur die Spielebranche, sondern alle Branchen vor Herausforderungen. Ähnliche Angriffs- und Abwehraktivitäten finden bei Apps von Banken, Fluggesellschaften und Einzelhändlern statt, wo ungleich mehr auf dem Spiel steht als der Verlust einiger weniger Relaxos. Bots und damit verbundene Angriffswerkzeuge sind für Unternehmen alles andere als ein Spiel, wenn ihre Kunden und Nutzer aufgrund unerwünschten automatisierten Datenverkehrs nicht auf Dienste zugreifen können.
Über den Autor
Ähnliche Blogbeiträge
F5 und Equinix bündeln ihre Kräfte, um die sichere Anwendungsbereitstellung in Multicloud-Umgebungen zu vereinfachen
F5 und Equinix ermöglichen es Unternehmen, sich weltweit sicher und zuverlässig mit ihren Partnern zu vernetzen.

API-Sicherheitsrisiken und -herausforderungen
Erfahren Sie, warum APIs für die moderne App-Entwicklung unverzichtbar sind und wie Sie sie vor den häufigsten Sicherheitslücken schützen. Profitieren Sie von Expertentipps und direkt umsetzbaren Strategien.
Ein Meilenstein für die Community Impact Grants von F5
F5 feiert das fünfjährige Bestehen seines innovativen Community Impact Grant-Programms, das gemeinnützige Organisationen, bei denen sich F5-Mitarbeitende ehrenamtlich engagieren, mit Fördermitteln in Höhe von 5.000 US-Dollar unterstützt.
Mit moderner, anpassungsfähiger und sicherer Gesundheits-IT Leben retten
Die IT-Investitionen im Gesundheitswesen tragen dazu bei, die schnellsten Wege zu einer besseren Versorgung zu finden, indem sie die medizinische Betreuung näher an die Patientinnen und Patienten bringen. Viele Gesundheitsunternehmen nutzen riesige Mengen an klinischen und anderen Gesundheitsdaten, um Entwicklungen zu verfolgen und übergreifende Trends in der gesamten Gesundheitslandschaft zu erkennen. Gleichzeitig nähern sie sich einer möglichst präzisen, individuell zugeschnittenen Versorgung an.
Verbesserung der Benutzer- und Administrationserfahrung durch sicheren hybriden Zugriff
Diese Kombination aus BIG-IP Access Policy Manager und Azure Active Directory ermöglicht Identitätsföderation, zentralisierten Benutzerzugriff (über Single Sign-on) und erhöhte Anwendungssicherheit (durch Multi-Faktor-Authentifizierung) für geschäftskritische Anwendungen sowie cloudbasierte und SaaS-Anwendungen. Dieser Ansatz vereinfacht die Einrichtung und Bereitstellung, reduziert den Verwaltungsaufwand und verbessert die gesamte Administration.
Das Internet der Sicherheitsdinge
Nein, das ist keine Tirade über die Sicherheit des IoT. Es ist eine Geschichte über Veränderung – genauer gesagt über Veränderung und ihre Auswirkungen auf die Sicherheit. Veränderung ist allgegenwärtig. Es gibt unzählige Axiome und Sprichwörter über Veränderung, also ist es ...