Sicherheit in Online-Spielen
Feature

Sicherheit in Online-Spielen


Online-Spielwelten werden nicht nur von Monstern bedroht, sondern manchmal auch von den Spielern selbst. Darüber hat CipSoft mit Tibia in den vergangenen 13 Jahren viel gelernt – teilweise auch sehr schmerzhaft.

Making Games

@ Facebook

Making Games

@ Twitter
comment

Während der Fußball-Europameisterschaft 2004 in Portugal erhielt der Online-Wettanbieter mybet.com folgende E-Mail: »Hi! Wir werden bald einen Angriff gegen eure Seite starten. Unser Team braucht Geld. Eure Webseite bringt hohe Einnahmen. Wir wollen, dass ihr uns bezahlt. Wir denken, dass 15.000 US-Dollar ein angemessener Betrag für euch wäre. Wenn ihr nicht bezahlt, werden wir Eure Webseite für eine lange Zeit angreifen.«
Zuerst hielt man die E-Mail für einen schlechten Scherz. Doch kurz vor Anpfiff wurde die Webseite mit einer Distributed-Denial-of-Service-Attacke von einem Bot-Netz aus tausenden mit Trojanern infizierten Windows-Rechnern überzogen. Die Webseite war für die Kunden nicht mehr erreichbar, und es konnten keine Wetteinsätze für das Spiel platziert werden. Dem Betreiber entstanden hohe Umsatzeinbußen.
Obwohl derart kriminelle Aktionen zum Glück eine Ausnahme darstellen, zeigt das Beispiel doch, wie verletzlich Internet-Geschäftsmodelle sind. Im Folgenden werden typische Angriffsszenarien vorgestellt, aber auch einige Gegenmaßnahmen präsentiert, wie wir sie im Laufe der Jahre beim Betrieb unseres Online-Rollenspiels Tibia entwickelt haben.

Sicherheitsaspekte
Aber was ist überhaupt unter dem Begriff »Sicherheit« zu verstehen? Zum einen muss ein System sicher für den Benutzer sein. Er muss es ohne Gefahr für seine Gesundheit oder gar sein Leben verwenden können. Dazu gehören im Bereich der Computerspiele beispielsweise die Ergonomie (gute Les- und Bedienbarkeit) oder die Vermeidung schneller Farb- oder Hell-Dunkel-Wechsel, um keine epileptischen Anfälle hervorzurufen. Außerdem vertraut der Benutzer darauf, dass ein System robust ist, also bei Fehlbedienung nicht abstürzt, und dass seine eingegebenen Daten dauerhaft erhalten bleiben. Besondere Relevanz hat in letzter Zeit das Thema Datenschutz gewonnen: Persönliche Daten des Benutzers sollen nur für den von ihm beabsichtigten Zweck verwendet und nicht an Dritte weitergegeben werden.
Dieser Bereich soll hier aber nicht weiter vertieft werden. Vielmehr geht es um den zweiten Aspekt von Sicherheit, nämlich die Sicherheit vor dem Benutzer. Ein ehrlicher Spieler erwartet von einem Online-Spiel, dass sich alle Mitspieler an die Regeln halten (Fairness), dass nur er seinen Spielzugang verwenden kann (Zugangskontrolle), dass seine Daten nicht verfälscht werden (Integrität) und dass er den Dienst jederzeit nutzen kann (Verfügbarkeit). Diese Ziele werden aber durch böswillige Spieler gefährdet.
So nutzen einige User Spielschwächen aus und verschaffen sich dadurch einen unfairen Vorteil (Cheating). Andere Spieler versuchen, die Verfügungsmacht über fremde Spielzugänge oder gar den gesamten Dienst zu bekommen (Account- bzw. System-Hacking). Wieder andere stören den Dienst und machen ihn so unbrauchbar (Denial of Service).

Tabelle 1: Motive der böswilligen Spieler

Motive
Was treibt Spieler zu derartig destruktivem Verhalten? Hierfür gibt es vielfältige Motive (siehe Tabelle 1):

  • Langwierige oder schwierige Aufgaben können angenehmer auf nicht vorgesehenen Wegen gelöst werden.
  • Die unfair erworbenen Vorteile können gewinnbringend im Wettstreit mit anderen Spielern eingesetzt oder gegen bares Geld verkauft werden.
  • Die Überlistung des Systems befriedigt die Neugier, reizt als technische Herausforderung und schafft Ansehen bei den Mitspielern. (Entdeckte Schwachstellen anschließend bitte beim Betreiber melden!)
  • Die Zerstörung der Errungenschaften oder des Spielspaßes anderer Spieler erfolgt aus Neid, Rache oder zur Erpressung.

Mittel gegen Farmbots
Gerade in Online-Rollenspielen sind viele immer wiederkehrende Aufgaben nötig, um seinen Charakter voranzubringen (Grinding). Wie schön wäre es, diese Tätigkeiten automatisiert ausführen zu lassen, statt dazu selbst vor dem Computer sitzen zu müssen! Programme, die so etwas leisten, heißen »Bots«, die Kurzform für Roboter. Ein »Farmbot« ermöglicht etwa das vollständig automatisierte Jagen, also das Sammeln von Gütern und Erfahrungspunkten. Dazu läuft er einen vorgegebenen Weg ab, greift auftauchende Monster an, sammelt Beute ein und heilt sich bei Bedarf selbst. Ja, er reagiert sogar auf Ansprache durch andere Spieler, um nicht gleich als Bot erkannt zu werden. Dass mittlerweile sowohl die Programme als auch die damit erworbenen Güter kommerziell vertrieben werden, zeigt das Ausmaß dieses Problems.
Aber warum ist es überhaupt ein Problem? Schließlich bringt sich der Betrüger zunächst selbst um seinen Spielspaß, wenn er nicht selbst spielt. Andererseits blockiert er länger als üblich Jagdgebiete, in denen auch andere Spieler unterwegs sein wollen, und zerstört so auch deren Spielspaß. Er erreicht leichter Plätze in Highscore-Listen und verzerrt dadurch den Wettbewerb. Er kann außerdem die auf unfairem Weg erhaltene Macht auch im Kampf gegen andere Spieler einsetzen. Und es gelangen übermäßig viele Güter in den Wirtschaftskreislauf, was auch die Preise für ehrlich erworbene Güter drückt.
Glücklicherweise gibt es Mittel gegen Farmbots: In Tibia mit seinen vielfältigen Interaktionsmöglichkeiten zwischen den Spielern konnte die Community zur Selbsthilfe greifen und die Bots blockieren oder töten. Nachdem diese in den sicheren Tutoriumsbereich ausgewichen waren, beschränkten wir den Geldtransfer von dort in den eigentlichen Spielbereich. Außerdem wurde das Machtmissbrauchspotenzial durch Regeln für den Kampf zwischen Spielern eingedämmt (Abbildung 1). Krasse Fälle haben wir durch Gamemaster verbannt, die im Spiel patrouillierten. Um aber das Problem möglichst flächendeckend zu lösen, arbeiten wir momentan an einer automatischen Detektion und Bestrafung von Cheatern.

Abbildung 1: Ungerechtfertigte Angriffe auf andere Spieler werden erkannt und sanktioniert.

Cheating ist facettenreich
Allerdings hat Cheating noch viele andere Gesichter, meist in Form von Client-Manipulationen. Egal ob Wall-Hacks, Eingabehilfen (z.B. Aimbots, die besser zielen oder Triggerbots, die bei Bedarf rechtzeitig heilen) oder unzulässige Kommandos (z.B. Schießen durch Wände): Generell können alle Daten, die clientseitig vorhanden sind, verfälscht werden. Serverseitige Programmierfehler werden ebenso ausgenutzt wie Content-Fehler, wenn man etwa ein Gut bei einem Händler teuerer verkaufen als einkaufen kann. Ebenfalls in die Kategorie Cheating fällt Account-Sharing: Mehrere Menschen, oft aus verschiedenen Zeitzonen, teilen sich einen Spielzugang und können so rund um die Uhr einen Charakter voranbringen.
Am schönsten wäre es natürlich, Cheating unmöglich zu machen. Das bedeutet unter anderem, Fehler zu vermeiden, die dann auch nicht ausgenutzt werden können und zusätzlich die Aufgaben so komplex zu gestalten, dass sie nicht automatisiert werden können. Soweit das nicht realisierbar ist, kann Cheating durch Änderung der Spielregeln zumindest nutzlos gemacht (vgl. oben: Einschränkung des Geldtransfers) oder entdeckt und bestraft werden. Schließlich besteht die Möglichkeit, bestimmte Cheats zu erlauben, also als Feature in den offiziellen Client zu übernehmen, um die ehrlichen Spieler nicht länger zu benachteiligen. Vielleicht weist der massive Einsatz von Cheats ja auch in Einzelfällen auf schlechtes Game-Design hin?

Account-Hacking
In den persistenten Welten von Online-Rollenspielen häufen die Spieler im Laufe ihres Spielerlebens gewaltige virtuelle Werte an. Diese wecken natürlich Begehrlichkeiten bei den Mitspielern. Umso wichtiger ist es, die Spielzugänge (Accounts) vor unbefugtem Zugriff zu schützen. In der Anfangszeit Tibias wurden beim Login Charaktername und Passwort unverschlüsselt übertragen. Zwar benötigte man unmittelbaren Zugriff auf die Verbindung zwischen Client des Opfers und Server, um das Passwort abfangen zu können, aber in WG-Netzen oder in Internet-Cafés bestand diese Möglichkeit durchaus.
Deswegen werden die Login-Daten mittlerweile verschlüsselt. Dazu ist ein asymmetrisches Verfahren nötig, bei dem der Client für die Verschlüsselung einen allgemein bekannten öffentlichen Schlüssel verwendet, die Entschlüsselung aber nur für denjenigen möglich ist, der den privaten Schlüssel kennt. Um anschließend auch die Kommunikation des laufenden Spiels unbefugten Blicken zu entziehen, verwenden wir ein effizienteres, symmetrisches Verfahren. Den dafür nötigen Schlüssel, der für Ver- und Entschlüsselung gleichermaßen verwendet wird, erzeugt der Client und schickt ihn mit den Login-Daten asymmetrisch verschlüsselt an den Server. Wir setzen die anerkanntermaßen sicheren Verfahren RSA (asymmetrisch) und XTEA (symmetrisch) ein; von selbstentwickelten Verfahren ist dringend abzuraten. Echte Sicherheit entsteht nicht durch Geheimhaltung des Verfahrens (Security by Obscurity), sondern beruht allein auf der Geheimhaltung der Schlüssel (Abbildung 2).

Was tun bei Brute Force?
Auch wenn der Einsatz der Passwörter durch das beschriebene Verfahren sicher ist, sind die Accounts noch auf viele andere Arten bedroht: Bei Brute-Force-Attacken werden alle möglichen Passwörter durchprobiert, bis das richtige gefunden ist. Spieler werden verleitet, ihr Passwort auf Webseiten einzugeben, die der echten Webseite täuschend ähnlich sieht (Phishing). Angreifer geben sich als CipSoft-Mitarbeiter aus und fragen ihr Opfer nach ihrem Passwort (Social Engineering). Computer werden mit Keyloggern oder Trojanern infiziert, um Passwörter direkt bei der Tastatureingabe abgreifen zu können.
Auf technischer Ebene hilft ein Brute-Force-Schutz, der einen Account nach zu vielen fehlgeschlagenen Login-Versuchen für eine gewisse Zeit deaktiviert. Auf sozialer Ebene versuchen wir eine Sensibilisierung der oft noch sehr jungen Spieler, die zum Teil erstmalig mit den »dunklen Seiten« des Internet in Berührung kommen: »Wählt sichere Passwörter, die in keinem Wörterbuch stehen und am besten aus einer zufälligen Mischung aus Buchstaben, Ziffern und Sonderzeichen bestehen! Geht sorgsam mit eueren Zugangsdaten um, speichert sie nirgends und verratet sie niemandem! Verhaltet euch im Internet vorsichtig und surft nicht auf dubiose Webseiten!«

Abbildung 2: Die Kommunikation zwischen Client und Server sollte verschlüsselt ablaufen – asymmetrisch mit RSA, symmetrisch mit XTEA.

System-Hacking
Der Super-GAU tritt ein, wenn ein Angreifer Daten auf dem Server verändern kann oder sich gar die volle Verfügungsmacht über den Server verschafft. Dies kann beispielsweise durch Ausnutzen von Programmierfehlern in der Anwendung geschehen. Eine naive Implementierung eines Web-Formulars zur Abfrage der Daten eines Spielers könnte etwa den Namen entgegennehmen und diesen direkt in eine Datenbank-Anfrage einbauen:

SELECT * FROM Characters WHERE Name = '_____';

Gibt ein Angreifer nun statt eines Spielernamens die Zeichenkette

'; DELETE FROM Characters; --

ein, entstehen dadurch zwei SQL-Anfragen (SQL-Injection), von denen die zweite den kompletten Datenbankinhalt zerstört (die beiden Minuszeichen verwandeln den Rest der Zeile in einen Kommentar):

SELECT * FROM Characters WHERE Name = ''; DELETE FROM Characters; --';

Eine gute Implementierung würde zunächst die Eingabe auf Gültigkeit prüfen -- am besten mittels regulärem Ausdruck -- und anschließend, wenn Hochkomma oder Anführungszeichen erlaubt sind, diese durch vorangestellte Backslashes unschädlich machen (in PHP beispielsweise mithilfe der Funktion »AddSlashes«).
Eine Studie des amerikanischen Netzbetreibers Verizon hat derartige SQL-Injections als dritthäufigste Hacking-Methode identifiziert. Davor rangieren Keylogger und Trojaner, mit denen jeweils Passwörter abgefangen werden. Es folgen böswilliges oder unvorsichtiges Verhalten von Zugangsberechtigten und Fehler in der Systemkonfiguration.
Folglich ist bei Internetdiensten eine äußerst sorgfältige Programmierung unerlässlich, die alle Benutzereingaben genauestens überprüft. Strenge Programmierrichtlinien und der Einsatz von Werkzeugen zur statischen Code-Analyse sind dabei besonders hilfreich. Das Betriebssystem der Server muss natürlich auf dem neuesten Stand sein und darf keine bekannten Sicherheitslücken mehr enthalten. Dienste, die nicht benötigt werden (z.B. FTP und Telnet; stattdessen grundsätzlich SSH als Zugangsweg verwenden), sollten deaktiviert und zusätzlich der Zugang durch eine Firewall kontrolliert werden. Eine regelmäßige Überwachung der Server hilft, Hacking-Versuche frühzeitig zu erkennen und möglicherweise noch stoppen zu können (Intrusion Detection). Aber auch die Zugangsberechtigten und ihr verantwortungsbewusster Umgang dürfen nicht aus den Augen verloren werden.

Abbildung 3: Die Infrastruktur eines Internetdienstes ist vielfältig angreifbar. Möglich sind Bandbreiten-Attacken (1), Paketraten-Attacken (2) sowie Attacken auf Applikationsebene (3).Denial of Service
Kommen wir zum vierten Angriffsszenario, den Denial-of-Service-Attacken (DoS-Attacken). Hierbei wird ein Dienst mit so vielen sinnlosen Anfragen überschwemmt, dass er seiner eigentlichen Arbeit nicht mehr nachkommen kann. Um drei mögliche Angriffspunkte zu identifizieren, schauen wir uns die Infrastruktur eines Internet-Dienstes an (Abbildung 3): Clients schicken ihre Anfragen über das Internet an den Core-Router des Rechenzentrums, dieser leitet sie an den dort stehenden Server weiter.
Ein Rechenzentrum ist beispielsweise mit einer Kapazität von 20 GBit/s an das Internet angeschlossen, die interne Vernetzung erfolgt mit 2 GBit-Leitungen. Wenn also ein Angriff eine Stärke von 2 GBit/s erreicht, ist der Server innerhalb des Rechenzentrums nicht mehr erreichbar; bei 20 GBit/s ist das gesamte Rechenzentrum lahm gelegt (1: Bandbreiten-Attacke). Die am Server eingehenden Daten müssen natürlich verarbeitet werden. Selbst kleine Steuerungspakete des Internet-Protokolls kosten Ressourcen. Bei etwa 500.000 der besonders aufwändigen SYN-Pakete pro Sekunde ist die Leistungsfähigkeit eines Servers erschöpft, obwohl sie nur eine Bandbreite von ca. 200 MBit/s benötigen (2: Paketraten-Attacke). Schließlich verbrauchen gültige Kommandos Rechenzeit der Anwendung. Tausendfach wiederholte aufwändige Anfragen zwingen auch den stärksten Rechner in die Knie (3: Attacke auf Applikationsebene).
Ist denn dagegen kein Kraut gewachsen? Doch! Gegen Bandbreiten-Attacken helfen eine immer leistungsfähigere Anbindung, die dann nicht mehr so leicht verstopft werden kann sowie die frühzeitige Filterung von unerwünschten Paketen durch das Rechenzentrum oder sogar schon durch den Internet-Backbone-Betreiber. Bei Paketraten-Attacken kann eine Firewall nützlich sein, die mit ausgeklügelten Verfahren effizient sinnvolle von sinnlosen Steuerungspaketen unterscheidet. Sie kann als Software-Firewall auf dem Server selbst (z.B. das Linux-Programm »iptables«) oder als eigenständiges vorgeschaltetes Gerät realisiert werden, was natürlich deutlich leistungsfähiger ist. Und selbstverständlich kann auch die Anwendung selbst durch effiziente Programmierung und Wiederholungszähler zumindest die Attacken auf Applikationsebene abfangen. Aber letztlich ist eine permanente Beobachtung des Themas und ein ständiges Wettrüsten erforderlich, um mit den ebenfalls wachsenden Möglichkeiten der Angreifer Schritt zu halten.

Maßnahmen bei CipSoft
Welche Erkenntnisse haben wir bei CipSoft aus der Beschäftigung mit dem Thema »Sicherheit in Online-Spielen« gewonnen?

  • Jede Kette ist nur so stark wie ihr schwächstes Glied. Perfektionismus in einzelnen Teilen bringt nichts, solange andere Bereiche noch ungesichert sind.
  • Angreifer sind sehr erfinderisch und finden jede Lücke. Deswegen lieber allgemein bekannte, bewährte Konzepte einsetzen als selbstgestrickte. Keine »Security by Obscurity«!
  • Client und Browser sind in der Hand des »Feindes«. Von dort kommende Daten sind nicht vertrauenswürdig und müssen unbedingt auf Gültigkeit geprüft werden. Dazu lieber »Whitelisting« (Beschreibung der gültigen Daten) als »Blacklisting« (Beschreibung der ungültigen Daten) einsetzen, um keine Sonderfälle zu übersehen.
  • Es gibt keine absolut sicheren Systeme. Es passieren immer Fehler; damit muss man rechnen und einen Plan B in der Tasche haben.

Aus diesen Erkenntnissen heraus empfehlen wir die folgende mehrstufige Vorgehensweise:

  1. Risikoanalyse: Was muss mit welchem Aufwand geschützt werden? Der Client ist vernachlässigbar, da er ja sowieso vom Angreifer manipuliert werden kann. Die zentrale Datenbank mit allen Spielerdaten ist wichtiger als der Game-Server.
  2. Abschreckung: Dem Angreifer zeigen, dass man gerüstet ist und es für ihn nicht einfach wird. Manche Hacker geben dann vielleicht schon auf und wenden sich leichteren Opfern zu (»Not-in-my-Backyard-Strategie«).
  3. Abwehr: Seine Hausaufgaben machen, sorgfältig arbeiten und immer auf dem aktuellsten Stand sein. Trotzdem mit Fehlern und Lücken rechnen.
  4. Schadensbegrenzung: Die Daten auf dem System verschlüsseln, damit sie einem Eindringling nichts nutzen (z.B. Passwörter nicht im Klartext, sondern als Hash-Wert ablegen), oder Daten überhaupt nicht speichern (z.B. Kreditkarten-Informationen zur Zahlungsabwicklung direkt an die Bank weiterleiten).
  5. Monitoring: Permanente Überwachung des Systems, um Angriffsversuche noch abwehren zu können oder einen erfolgreichen Einbruch überhaupt zeitnah zu entdecken.

Sicherheit ist kein Thema, mit dem man sich einmal beschäftigen und es dann abhaken kann. Vielmehr muss man immer am Ball bleiben und ständig auf Veränderungen reagieren. Es bleibt spannend! Leider.
Stephan Börzsönyi

Stephan Börzsönyi
ist einer von vier Gründern und Geschäftsführern des Onlinespiele-Entwicklers CipSoft.

Stephan ist Diplom-Informatiker und Master of Business Administration. Er ist zuständig für die Entwicklung des Tibia- und TibiaME-Game-Servers. Zudem kümmert er sich bei CipSoft um Finanzen, Personal und Organisation.