World of Warcraft: Eine einfache Code-Zeile kann den Spieler teuer zu stehen kommen

22.07.2016
G DATA Blog

Vor wenigen Tagen machte eine neue Betrugsmasche die Runde, die den WoW-Spielern mehr Gold oder seltene Gegenstände versprach. Diese Betrugsversuche sind an sich bei MMORPGs ja nun nichts Neues und werden in der Regel durch „Social Engineering“-Techniken durchgeführt. In der Vergangenheit geschah dies oft in Verbindung mit gefälschten Item-ID Codes, die dem ahnungslosen Opfer seltene (Mount)-Gegenstände oder größere Mengen an Gold (der In-Game Währung bei WoW) versprachen. Bei der neuesten Betrugsmasche wird allerdings nicht nur Social Engineering verwendet, sondern sie beruht auf der Ausnutzung eines bislang nicht dokumentierten Interface Feature.

Die neueste Masche

Man stelle sich die folgende Situation vor: ein In-Game Charakter, der einer populären WoW-Gilde anzugehören scheint, nähert sich dem eigenen In-Game Charakter und verspricht, seltene oder mächtige Gegenstände, wie z.B. Mounts, Waffen, (o.ä.) zu verschaffen/zu schenken. In den meisten Fällen besitzt dieser „vertrauenswürdige“ Charakter diese nicht, so dass es laut der Masche bei der Übergabe bzw. Beschaffung angeblich zu Problemen kommt. Die Falle schnappt zu, wenn der Angreifer den unwissenden Spieler davon überzeugt, es einmal mit einem einfachen Kommandozeilen-Befehl im Chat-Fenster zu versuchen, um die Gegenstände doch noch zu beschaffen:

/run RemoveExtraSpaces=RunScript 

Das Interface des Spiels (z.B. Aktionsleiste, der Chat oder andere 2D-Grafik Elemente) und weitere Add-Ons (z.B. Mods die das Interface verbessern sollen) sind in der Lua Skript Sprache geschrieben worden. Beide Seiten der Gleichung (RemoveExtraSpaces  und RunScript) sind legitime Funktionen und Teil der WoW Lua API. Die Eingabe dieser einen Zeile in das Chat-Fenster verändert jedoch das Verhalten des WoW Interfaces.

Was macht dieser Befehl?

  • /run ist ein Befehl, nachfolgenden Text als ein Lua Skript zu interpretieren
  • RemoveExtraSpaces ist eine Funktion, die unnötige Leerzeichen im Text entfernt
  • RunScript ist eine Funktion, Text als Lua Code auszuführen (ähnlich wie beim /run Befehl)

Was ist daran gefährlich?

Die Funktion RemoveExtraSpaces wird auf jede Chat-Nachricht angewandt, die der Spieler erhält. Der oben genannte Kommandozeilen-Befehl ersetzt nun die Funktion RemoveExtraSpaces mit der Funktion RunScript, was im Entwickler-Fachjargon „hooking“ genannt wird. Sobald nun die Original-Funktion überschrieben wurde, wird jede neue Nachricht als Lua Code interpretiert und ausgeführt. Das Szenario setzt sich nun so fort:

Der ahnungslose Spieler gibt den genannten Kommandozeilen-Befehl in seinem eigenen Chat-Fenster ein, da dieser natürlich gerne die versprochenen Gegenstände erhalten möchte. Sobald er allerdings die Chat-Nachricht abgesendet hat, wird es ein jähes Erwachen geben, da er sich in diesem Moment zum hilflosen Opfer gemacht hat.

Das oben Gezeigte ist ein eher harmloses Beispiel für den Missbrauch, ein Machbarkeitsbeweis oder auch Proof of Concept (PoC). Nichts desto trotz offenbart es, dass nun der Angreifer das Interface des Opfers ferngesteuert kontrollieren kann. Dies ist ein sehr ähnliches Verhalten wie bei Trojanern auf einem Computer: sie stellen sich als hilfreiches Tool dar und entfalten anschließend das schadhafte Verhalten. Im wahren (Spiel-)Leben lassen die Angreifer ein anderes Skript laufen, welches natürlich nicht nur ein Chat-Fenster mit dem Text „Test“ erscheinen lässt. Was genau passiert, wird in den folgenden Abschnitten detailliert erläutert.

Temporäre Persistenz und versteckte Befehle

Nachdem das Opfer die Sicherheitslücke in seinem Interface für den Angreifer geöffnet hat sendet dieser die folgende Chat-Nachricht:

Diese Nachricht wird bei einem gekaperten Interface nicht angezeigt, sondern sofort ausgeführt. Die Tatsache dass der Chat nun nicht mehr funktioniert, könnte das Opfer Verdacht schöpfen lassen bzw. ihn zum Neustart des Spiels bewegen. Wir vermuten daher folgende Vorgehensweise, die weniger auffällig ist: Der Angreifer fügt mit dem oben gezeigten Befehl rasch einen neuen Kommunikation-Kanal hinzu und stellt dann möglicherweise die Funktion des Chats wieder her.

Hierbei muss man erwähnen, dass Wow Add-Ons die Möglichkeit haben, mittels eines versteckten Messaging-Kanals lokal und global zu kommunizieren. Dieser Kanal kann durch die Nutzung von „CHAT_MSG_ADDON“ Events genutzt werden.

Das Skript erzeugt einen Frame (Zeile 2; z), dem verschiedene Eigenschaften zugewiesen werden können. Das Skript registriert sich für das Event „CHAT_MSG_ADDON“, mit einem bestimmten Präfix (Zeile 6 und 25). Nur wer dieses geheime Präfix kennt, ist in der Lage, das Interface unbemerkt aus der Ferne zu kontrollieren. Sehr vereinfacht könnte man diese Funktionsweise mit einem Passwort für eine bestimmte Hintertür vergleichen.

In Folge würde das Interface einen Befehlscode, der mit dem passenden Präfix und dem Event „CHAT_MSG_ADDON“ an das Opfer gesendet wird, ohne angezeigten Dialog ausgeführt werden. Das Opfer bekommt davon nichts mit. 

Zusammenfassung: Wenn der Angreifer will, dass das was er mit dem Charakter oder dem Account des Opfers anstellt, nicht sichtbar sein soll, dann ist er dazu in der Lage dies zu tun!

Obwohl wir hier davon sprechen, dass Add-Ons untereinander über versteckte Kanäle kommunizieren, muss ein attackierter Spieler kein Add-On installiert haben. Der Angriff funktioniert auch ohne installierte Add-Ons und das stellt ein Novum in Bereich der WoW In-Game Attacken dar. 

Welcher Schaden kann entstehen?

Der Angreifer hat durch den vollen Zugriff auf das Interface des Opfers jederzeit die Möglichkeit, den Charakter des Spielers pixelgenau auf der Karte zu lokalisieren. Diese Details zu sehen, liegt normalerweise nicht im Rahmen der Möglichkeiten eines Angreifers.

Sobald der Angreifer sich in der Nähe des Opfers befindet, kann er es durch Nutzung des Handeln-Fensters virtuell „ausrauben“. Durch den Vollzugriff auf das Opfer-Interface kann er Handelsgeschäfte ohne einen erhaltenen Gegenwert zu Ungunsten des Opfers abschließen. 

In unserem oben genannten Szenario wird eine „Social Engineering“-Attacke mit einer technischen Attacke verbunden. Diese können nun durch die übernommene Kontrolle des User-Interfaces weiter fortgeführt werden. Dabei würde nun der betroffene Spielercharakter Nachrichten an verbundene Freunde oder Gilden-Mitglieder versenden und diese scheinbar auffordern, die simple aber effektive Skript-Zeile auszuführen. Die Erfahrung hat oft genug gezeigt, dass solche Aufforderungen häufig allzu bedenkenlos von den Empfängern der Nachricht ausgeführt werden, da sie dem Absender vertrauen.  

Wie kann man sich effektiv schützen?

So simpel es auch klingen mag: Geben Sie keine Skript-Befehle in das Chat-Fenster ein! Stellen Sie jede Aufforderung, Skript-Befehle in das Interface einzutragen, in Frage. 

Im gegebenen Beispiel hatte sich der Angreifer als ein Mitglied einer populären Gilde ausgegeben, der er in Wirklichkeit nicht angehört hat. Er hatte den Namen dieser Gilde kopiert und enthaltene Buchstaben gegen ähnlich aussehende Buchstaben ausgetauscht – kleine „L“s in Große „I“s verwandelt. Diese Art der Manipulation, man nennt sie Typosquatting, ist eine bekannte Angriffsform bei Phishing-Attacken.

Des Weiteren raten wir zur erhöhten Vorsicht beim Download und der Verwendung von Add-Ons, die aus der Community stammen: Verwenden Sie populäre und vertrauenswürdige Webseiten und halten Sie die Add-Ons immer auf dem aktuellen Stand. Diese können ebenfalls als Angriffs-Vektor verwendet werden, wie es bereits im Jahre 2014 mit der sogenannten „ElvUI Backdoor“ der Fall war. Eine weitere Zeile Code in einem Add-On, eben wie die beschriebene, verhängnisvolle, dürfte kaum jemandem auffallen.

Die Sicherheitslücke im Programmcode kann nur durch Blizzard geschlossen werden, indem sie sicherstellen, dass das Überschreiben von solchen wichtigen Funktionen in Zukunft nicht mehr möglich ist. Während der Erstellung des Artikels erschien gestern ein Pre-Release für das kommende Add-On „Legion“. Blizzard hat auf den Vorfall reagiert und zeigt nun nach der Eingabe aber vor der Ausführung von Skripten eine Warnung für den Spieler an, die er quittieren muss.

Die Angabe „Ja“ lässt die Meldung dann dauerhaft verschwinden, ein Neustart bringt sie nicht wieder zurück und eine erneute Aktivierung der Abfrage ist uns bis jetzt nicht aufgefallen. Um die Abfrage wieder zu aktivieren, muss man händisch eine Zeile, und nur diese Zeile, in der Konfiguration löschen:

Zeile: SET AllowDangerousScripts "1"
Datei: config-cache.wtf 
Pfad: World of Warcraft\WTF\Account\<ACCOUNTNAME>\

Wichtige IT-Security-News per E-Mail

  • Aktuelle IT-Gefahren
  • Schutz-Tipps für Privatkunden
  • 15 % Willkommensgutschein