Aktualisieren 2: Nachdem ich diesen Beitrag geschrieben hatte, entdeckte ich auch eine weitere Sicherheitsanfälligkeit in Trivia Crack, die es Benutzern ermöglichte, unbegrenzte Leben / Drehungen zu geben. Zu dieser Zeit habe ich dies als ein weiteres Feature zu Trivia Cracker hinzugefügt. Gestern (29.1.2016) hat Trivia Cracker damit begonnen, diese Funktion zu verhindern (die automatische Beantwortung von Fragen funktioniert weiterhin — wie in diesem Beitrag beschrieben). Aber was lustig ist, ist, dass der Trivia Crack-Server mich nicht nur verhindert, sondern auch speziell anruft!
Aktualisieren 1: Mit ähnlichen Techniken wie unten habe ich auch eine Cheating Chrome-Erweiterung für Candy Crush veröffentlicht. Holen Sie es hier.
Als die Ferienzeit vor ein paar Wochen begann, bemerkte ich, dass eine neue App, Trivia Crack, bei meinen Freunden immer beliebter wurde. Für diejenigen unter Ihnen, die es nicht wissen, ist Trivia Crack ein neues Spiel für Android, iPhone und Facebook. Die Prämisse des Spiels ist einfach und sehr ähnlich zu einer anderen beliebten App aus dem letzten Jahr, QuizUp. Im Wesentlichen beantworten Sie Quizfragen verschiedener Kategorien und treten gegen Ihre Freunde an, um mit Rechten zu prahlen. Trotz der Einfachheit (oder vielleicht gerade deswegen) ist Trivia Crack in letzter Zeit sehr beliebt geworden – es hat 5,3 Millionen Likes auf Facebook gesammelt und ist die beste kostenlose App im Google Play (Android) Store geworden.
Man könnte meinen, die Entwickler eines so ausgefeilten und erfolgreichen Spiels hätten sich die Zeit genommen, es auf eine Weise zu implementieren, die vor Betrug sicher ist, aber es stellt sich heraus, dass das Schreiben eines Programms zum Betrügen bei Trivia Crack eigentlich ziemlich einfach ist. Im Laufe eines Wochenendes konnte ich eine Chrome-Erweiterung, Trivia Cracker, schreiben und veröffentlichen, die mich von einem Medicore-at-Best-Trivia-Crack-Player zu einem scheinbar genialen Halbgott machte. Sie können Trivia Cracker unten in Aktion sehen:
Was ist also falsch an der Implementierung von Trivia Crack, mit der ich so einfach ein Tool erstellen konnte, mit dem jeder betrügen kann? Kurz gesagt – wenn der Trivia Crack-Client vom Trivia Crack-Server die nächste Frage an den Benutzer anfordert, antwortet der Server nicht nur mit der Frage und den möglichen Antworten, sondern sendet auch, welche Antwort die richtige Antwort ist. Die Details der Sicherheitsanfälligkeit, wie ich sie gefunden habe und wie ich eine Chrome-Erweiterung erstellt habe, um sie zu nutzen, sind unten aufgeführt.
1 – Die Schwachstelle finden
Nachdem ich zu oft gegen meine Freunde in Trivia Crack verloren hatte, entschied ich, dass ich sehen wollte, ob ich auf meine eigene, besondere Weise gewinnen konnte. Während ich nicht so gut in zufälligen Trivia bin, bin ich ziemlich gut im Reverse-Engineering. Ich vermutete, dass ich in der Lage sein könnte, meine eigenen Anfragen an die Server von Trivia Crack zu senden oder einige Daten in den Antworten von den Servern von Trivia Crack zu verwenden, um einen Vorteil im Spiel zu erlangen. Also habe ich angefangen zu recherchieren, welche Arten von Daten der Trivia Crack Client und Server hin und her geben.
Um diese Daten zu überprüfen, habe ich Trivia Crack in meinem Browser auf Facebook gespielt, während ich die Anfragen und Antworten, die zwischen dem Client und dem Server von Trivia Crack gesendet wurden, mit einem Tool aufzeichnete und überprüfte, das ich zuvor namens Gargl erstellt hatte. Ja, ich weiß, ich hätte Fiddler oder die Entwicklertools von Chrome verwenden können, um dasselbe zu tun. Ich habe mich stattdessen für Gargl entschieden, da Sie mit Gargl nicht nur Client / Server-Anforderungen / -Antworten anzeigen, sondern auch diese Anforderungen ändern und parametrisieren und dann automatisch Module in einer Programmiersprache Ihrer Wahl generieren können, sodass Sie dieselben Anforderungen stellen können ohne eine Codezeile zu schreiben. Dazu später mehr.Facebook Facebook Facebook-Crack
Wie auch immer, nachdem ich Gargl gesagt hatte, er solle mit der Aufnahme beginnen und in meinem Browser zu Trivia Crack auf Facebook gehen, bestand der erste Schritt darin, herauszufinden, welche der vielen Anfragen, die auf dieser Facebook-Seite gesendet wurden, mit Trivia Crack im Vergleich zu Facebook selbst zusammenhingen. Die Überprüfung des HTML-Codes auf der Seite ergab, dass der Trivia Crack-Inhalt über einen Iframe in Facebook eingebettet ist. Das Element direkt über diesem iframe war ein Formular, das an eine bestimmte URL gesendet werden sollte – https://preguntados.com/game .
Meine begrenzten Spanischkenntnisse erinnerten mich daran, dass „pregunta“ „Frage“ bedeutet, was mit Trivia zu tun zu haben scheint. Das Aufrufen der URL https://preguntados.com/game bestätigte diesen Verdacht:
Der nächste Schritt bestand darin, Trivia Crack zu spielen, und während ich spielte, sah ich mir die Anfragen an, die Gargl feststellt, die die Seite an eine URL sendet, die „preguntados.com“:
Als ich Trivia Crack-Fragen beantwortete, bemerkte ich, dass für jede Frage eine neue Anfrage ausgegeben wurde. Tatsächlich, Die Anfrage schien ausgegeben zu werden, bevor ich in Trivia Crack überhaupt „den Spinner gedreht“ habe, um festzustellen, welche Kategorie die nächste Frage sein würde:
Dies ließ mich denken, dass die Fragen möglicherweise vorbestimmt waren und der „zufällige Spinner“ tatsächlich vorbestimmt war, in einer bestimmten Kategorie zu landen (und eine bestimmte Frage zu stellen), basierend auf der Antwort des Servers aufapi.preguntados.com/api/users /<userId>/games/<GameID>“ Anfrage, die gesendet wurde, bevor Sie auf die Schaltfläche „Spin“ klicken. Für mich bedeutete dies, dass ich den Benutzer wahrscheinlich im Voraus auf die Frage aufmerksam machen konnte, die ihm gestellt werden sollte, damit er so viel Zeit hatte, wie er darüber nachdenken oder nachschlagen wollte. Dies wäre ein Vorteil, da Sie in Trivia Crack nur 30 Sekunden Zeit haben, um eine Frage zu beantworten, sobald die Frage angezeigt wird, um zu verhindern, dass der Benutzer nach Antworten sucht. Darüber hinaus ist es in einigen Spielmodi nicht nur die Anzahl der Fragen, die Sie richtig stellen, sondern auch die Zeit, die Sie zur Beantwortung benötigen, die bestimmt, ob Sie gewinnen. Wenn ich dem Benutzer die Frage im Voraus zeigen könnte, Sie könnten es offensichtlich viel schneller beantworten, sobald Trivia Crack selbst die Frage zeigt.
Also dachte ich, ich hätte eine Spur und grub mich in die Details dieser Anfrage. Es stellt sich heraus, dass diese Anfrage tatsächlich einen viel größeren „Cheater-Vorteil“ bot, als ich dachte …
2 – Die Sicherheitsanfälligkeit im Detail
Verwenden von Gargl, um die „API“ zu betrachten.preguntados.com/api/users/<userId>/games/<GameID>“ Anfrage / Antwort Im Detail konnte ich bestätigen, dass es tatsächlich die zu stellende Frage sowie die möglichen Antworten in der Antwort enthält. Ich war jedoch überrascht, dass die richtige Antwort auf die Frage auch in die Antwort eingebettet ist!
Wie Sie oben sehen können, enthält die Antwort auf diese Anfrage die Frage, die möglichen Antworten und welcher Index im Array der möglichen Antworten die richtige Antwort ist. Wenn es sich bei diesen Daten also tatsächlich um die nächste Frage handelt, sollte ich nach dem Klicken auf „Drehen“ gefragt werden: „Welches der folgenden afrikanischen Länder hat keine Küste?“ und die richtige Antwort sollte Antworten von oben sein, was „Alle tun“ ist. Ein Klick auf „Spin“ hat diese Hypothese bestätigt:
Ich habe auch meinen Browser verwendet, um festzustellen, dass wiederholte GET-Anforderungen an „api.preguntados.com/api/users/<userId>/games/<GameID>“ Geben Sie immer die gleiche Antwort, bis Sie die Frage beantworten. Dies bedeutet, dass ich diese URL von meinem eigenen Tool anfordern und trotzdem dieselbe Frage erhalten kann, die der Trivia Crack-Client auf Facebook erhalten würde.
Eine Antwort, die die richtige Antwort enthält, wenn das Ziel darin besteht, dass der Benutzer die Antwort selbst bestimmen muss, steht in direktem Widerspruch zur Programmierpraxis der „defensiven Programmierung“ – insbesondere zum Webprogrammierprinzip „Vertraue niemals dem Kunden“. Da der Server keine Kontrolle darüber hat, wie sich der Client verhält, kann er nicht davon ausgehen, dass der Client nicht böswillig handelt, und muss sich daher schützen. Der richtige Weg, das Verhalten der Antwortprüfung zu implementieren, besteht darin, dies auf der Serverseite zu tun. Senden Sie zu keinem Zeitpunkt die richtige Antwort an den Client, sondern lassen Sie den Client die Antwort des Benutzers an den Server senden, wo der Server sie dann auf Richtigkeit überprüft und dem Benutzer die Richtigkeit gutschreibt (und natürlich nur eine Antwort zulässt pro Benutzer und Frage gesendet werden).
Trivia Crack hat dies jedoch nicht getan und vertraut stattdessen dem Client. Jetzt ging es nur noch darum, einen böswilligen Client zu erstellen, um die Tatsache auszunutzen, dass die richtige Antwort in der Antwort gesendet wird. Idealerweise eine, die für nicht-technische Benutzer einfach zu installieren und zu verwenden wäre. Hmm … wie wäre es mit einer Chrome-Erweiterung, die dem Trivia Crack-Spiel nur eine Schaltfläche hinzufügt, wenn sie auf Facebook gespielt wird, die beim Klicken die aktuelle Frage automatisch richtig beantwortet??
3 – Ausnutzen der Sicherheitsanfälligkeit
Wie oben erwähnt, können Sie mit Gargl die von Ihnen aufgezeichneten Anforderungen übernehmen, nach Bedarf ändern und parametrieren und dann automatisch Module in einer Programmiersprache Ihrer Wahl generieren, um dieselben Anforderungen zu stellen. Ich werde nicht auf die Details dieses Prozesses eingehen, da Sie sich einen meiner Gargl-Blogbeiträge ansehen können, um diese Informationen zu finden, aber im Wesentlichen habe ich eine Gargl-Vorlagendatei für die verschiedenen API-Anforderungen von Trivia Crack mithilfe der Gargl Chrome-Erweiterung generiert und dann einen Gargl-Generator verwendet, um diese Vorlagendatei in eine Trivia Crack JavaScript-Bibliothek umzuwandeln. Die Verwendung von Gargl ermöglichte es mir, eine JavaScript-Bibliothek zu erstellen, die mit den Servern von Trivia Crack kommuniziert, ohne dazu eine Codezeile zu schreiben, und auch eine Vorlagendatei für die Zukunft zu haben, falls ich später dasselbe für eine andere Programmiersprache tun möchte.
Sobald ich diese Trivia Crack JavaScript-Bibliothek hatte, war es eine einfache Sache, eine Chrome-Erweiterung in JavaScript zu erstellen, die auf der Domain läuft, die in der Trivia Crack Facebook-Spielseite iframe geladen ist.preguntados.com ), fügt dem HTML-Code für das Spiel eine Schaltfläche hinzu und fordert beim Klicken auf diese Schaltfläche die „api.preguntados.com/api/users/<userId>/games/<GameID>“ URL, analysiert die Antwort auf die richtige Antwort und klickt dann auf die Antwortschaltfläche auf der Seite, die die richtige Antwort darstellt.