Brute Force mal anders - Stämme Cracker
Eines meiner ersten Programme, damals noch mit C++.CLI, war ein Stämme Cracker. Als Grünschnabel habe ich mir damals Sourcecode zusammengesucht und so 10 Webbrowser-Controls gleichzeitig kontrolliert. Aus Nostalgiegründen, aber auch um zu zeigen dass sich in der Browsergame-Welt nicht vieles geändert hat, wurde nun ein neuer Cracker geschrieben. Um diesen wird sich der heutige Artikel drehen.
Fangen wir chronologisch an. Das Browsergame Die Stämme gibt es seid 2003 und hat seitdem massiven Zuwachs erfahren. Inzwischen wurde die 112te Welt gestartet mit mehreren Millionen aktiven Spielern auf allen Servern zusammen. In einem Thread auf Free-Hack ist damals ein Username-Grabber und Cracker erschienen, welcher mein Interesse geweckt hat. Stämme hatte damals, wohl mehr aus Debugzwecken, eine Liste von allen Usernamen auf der aktiven Welt in einer Liste gespeichert, welche per WebAccess zugänglich war. Dieser besagte User von Free-Hack stieß wohl auf diese Liste und schrieb prompt einen Cracker dafür, höchstwarscheinlich den ersten Stämme-Cracker überhaupt. Wie komme ich zu dieser Vermutung? Nunja, die Stämme Server waren auf solche massiven Zugangsanfragen nicht vorbereitet: Anstatt nach ein paar Versuchen die IP zu bannen, konnte man munter fröhlich so viele Username-Kombinationen ausprobieren wie man wollte. Und nachdem einige User von Free-Hack dieses Tool massiv nutzten, waren die Stämme Server komplett down-ge”DDosed”. Das Tool selbst war simple: Es grabbte die Username Liste und probierte dann pro Username ein paar Standartpasswörter wie “qwertz” und “passwort” durch. Die Erfolgsquote damals war erschreckend hoch. Bei 1000 Usernamen fand man locker 50 Accounts die man für seine Zwecke nutzen konnte. Mein damaliges Tool war natürlich weit unperformanter wie der Cracker von Free-Hack, aber das Erfolgserlebtnis dass man wirklich einen Account durch ein eigenes Tool gebrutet hatte wird mir immer in Erinnerung bleiben.
Ca. 7 Jahre später ist sowohl Stämme, als auch meine Programmierkentnisse weiter gereift. Aus Spass fing ich mit ein paar Leuten an wieder Stämme zu spielen. Und da kommen solche alten Gedanken wieder hoch “Wird es immernoch möglich sein, auf diesem Wege an Accounts zu kommen?”. Prompt wurde programmiert und prompt war auch schon das erste Problem vorhanden: Wie kam man an die Usernamen? Stämme bietet glücklicherweise eine Rangliste an, in der 25 Accounts pro Seite aufgelistet sind. Also wurde ein Login sowie ein Grabber geschrieben, um an die besagten Benutzernamen zu kommen. Da ich nur an Spielern interessiert war, welche besser wie ich sind, wurden die obersten 15000 Plazierungen ausgelesen.
Spannend wurde es beim bruten eines zufälligen Logins. Es stelle sich herraus: Stämme hat dazugelernt und blockiert die IP nach 11 fehlerhaften Loginversuchen. Doch hier ist Stämme in einer Zwickmühle. Es kann nicht den Login eines Accounts von jeder IP blockieren, denn sonst wäre es möglich die Accounts von Gegnern zu blockieren (quasi zu “freezen”). Andernseits ist das Loginsystem somit anfällig für Attacken von mehreren IPs. Die Lösung darauf ist simple: Proxylisten.
Ein Proxylistengrabber ist dank Regex schnell geschrieben, ein Proxychecker dank Paralell.ForEach ebenfalls zügig implementiert. Die Statistik fiel nicht so schlimm wie vor einigen Jahren aus, aber dennoch erschreckend: Unter den Top 600 Spielern (von welchen man meinen sollte, dass sie Ahnung haben) hatten 3 unzureichend sichere Passwörter. Alle drei Accounts hatten Premiumstatus (= es wurde Echtgeld investiert) und davon nicht gerade wenig.
Mit den Zugangsdaten könnte man z.B. das Kennwort ändern und alle Einheiten in den Kampf schicken, oder direkt andere Spieler beleidigen und den Account so bannen. Oder gar als Stammesadministrator ganze Stammeskriege anzetteln. In meinem Falle hab ich eine kleine Nachricht hinterlassen, dass die Spieler ihre Passwörter ändern sollten.
Und die Moral von der Geschicht: Verwendet “passwort” als Passwort nicht
Greez
Immer wieder schön neue Artikel von dir zu lesen :)!