2 Punkte von GN⁺ 2024-01-15 | 1 Kommentare | Auf WhatsApp teilen

When Random Isn't

  • Es handelt sich um eine Anekdote von vor etwa 10 Jahren; bitte berücksichtigt, dass ich den eigentlichen Code verloren habe und mich an manche Teile nicht mehr genau erinnere.
  • Einige Details wurden vereinfacht, damit jeder, der sich für Computersicherheit interessiert, Freude daran haben kann.
  • Mit 14 entdeckte ich World of Warcraft und wurde süchtig danach.
  • Ich entdeckte Add-ons, mit denen sich die Benutzeroberfläche des Spiels verändern ließ, und begann, selbst welche zu entwickeln.
  • Die in der Programmiersprache Lua geschriebenen Add-ons bestanden aus einigen .lua-Quelldateien.
  • Mich faszinierte, dass das Spiel selbstgeschriebenen Quellcode laden und ausführen konnte.

Sicherheit von Add-ons

  • Benutzerprogrammierbare Add-ons zuzulassen, mag wie eine schlechte Idee wirken, weil das Bots ermöglichen könnte.
  • Das von Blizzard entwickelte System war ziemlich clever darin, willkürliches programmatisches Verhalten zu verhindern.
  • Die meisten UI-Elemente waren rein dekorativ oder informativ und vollständig uneingeschränkt.
  • APIs zum Sammeln von Informationen, etwa ein API-Aufruf zur Anzeige der Lebenspunkte eines Charakters, waren uneingeschränkt.
  • Einige API-Aufrufe waren jedoch geschützt, sodass sie nur aus offiziellem Blizzard-Code heraus aufgerufen werden konnten.
  • Die meisten APIs, die mit tatsächlichen Aktionen im Spiel zu tun hatten, waren geschützt.
  • Auch die APIs zum Abrufen der Weltposition und der Kamerarichtung wurden irgendwann geschützt.
  • Wenn man einen Button erstellen wollte, der einen bestimmten Zauber wirkt, konnte man einen speziellen Button anlegen, der beim Klicken Code in einer sicheren Umgebung ausführt.
  • Solche Buttons konnten im Kampf nicht erstellt, zerstört oder verschoben werden, um Automatisierung während des Kampfes zu verhindern.
  • Die sichere Umgebung konnte programmatisch festlegen, welcher Zauber gewirkt werden sollte, erlaubte jedoch nicht das Sammeln der Informationen, die für beliebige Automatisierung nötig wären.

Ein Backdoor-Kanal

  • Einige Jahre später interessierte ich mich mehr für „ernsthaftere“ Programmierung und spielte World of Warcraft kaum noch.
  • Trotzdem ließ mich der Gedanke nicht los, die sichere Umgebung auszuhebeln.
  • Statt Software von Drittanbietern zu verwenden, wollte ich die Herausforderung mit technisch erlaubten Werkzeugen lösen.
  • Ich entdeckte, dass die Funktion random auf der Liste der in der sicheren Umgebung erlaubten Funktionen stand, und entwickelte eine Möglichkeit, darüber Informationen hineinzuschmuggeln.

Probleme mit dem Zufallszahlengenerator

  • Es stellte sich heraus, dass random nur ein einfacher Wrapper um C's rand-Funktion war.
  • Die Implementierung von rand war ein einfacher und schwacher linearer Kongruenzgenerator.
  • Ich entwickelte eine Methode, den internen Zustand des RNG zurückzurechnen und so Informationen zu übertragen.

Alles zusammenführen

  • Sobald ich den internen Zustand des RNG zurückrechnen konnte, war ich in der Lage, in der sicheren Umgebung beliebige Automatisierungsentscheidungen zu treffen.
  • Ich griff in der unsicheren Umgebung auf Informationen zu, traf dort Entscheidungen und führte in der sicheren Umgebung die „zufällig“ ausgewählten Aktionen aus.

Fazit

  • Ich weiß nicht, wann Blizzard das Problem mit dem schwachen und gemeinsam genutzten RNG-Zustand behoben hat oder ob ihnen überhaupt bewusst war, dass es ein Problem gab.
  • Als ich den Code einige Jahre später noch einmal ausprobierte, funktionierte er nicht mehr.
  • Es war nur das Ausnutzen einer Nische in einem Videospiel, das ich eigentlich gar nicht wirklich nutzen wollte, aber die Manipulation von etwas, das zufällig wirkt, hatte einen fast magischen Reiz.

Meinung von GN⁺

  • Dieser Artikel bietet ein interessantes Beispiel aus den Bereichen Computersicherheit und Programmierung.
  • Die Erkundung einer kreativen Methode, Sicherheit im Spiel zu umgehen, schärft das Bewusstsein für die Bedeutung von Programmierkenntnissen und für potenzielle Schwachstellen.
  • Die Geschichte über das Ausnutzen einer RNG-Schwäche ist ein lehrreiches Beispiel, das Softwareentwickler an die Bedeutung von Sicherheit und Algorithmen erinnert.

1 Kommentare

 
GN⁺ 2024-01-15
Hacker-News-Kommentare
  • Ein Nutzer erwähnt, dass er vor einigen Monaten bereits eine Frage auf StackOverflow zum „Umkehren von RNGs (Zufallszahlengeneratoren)“ beantwortet habe. Er habe den Java-RNG angegriffen, der ein LCG-Design (linearer Kongruenzgenerator) ähnlich dem MSVC-RNG verwendet und abgeschnittene Ausgaben des internen Zustands liefert, weshalb die Angriffsmethode sehr ähnlich sei.

    • Er teilt seine Erfahrung damit, eine ähnliche Frage auf StackOverflow zum „Umkehren von RNGs“ beantwortet zu haben. Sowohl Java RNG als auch MSVC RNG verwenden ein LCG-Design, wodurch ähnliche Angriffe möglich sind.
  • Ein anderer Nutzer vermutet, dass dies theoretisch ausnutzbar wäre, falls der Server denselben RNG verwendet und man einen Server mit geringer Auslastung, niedrigen Ping, die Fähigkeit, ein präzises Zeitfenster für den aktuellen Zustand des RNG zu erhalten, sowie die Fähigkeit hätte, andere Ereignisse mit hoher ökonomischer Volatilität schnell zu erzeugen.

    • Es wird spekuliert, dass sich dies unter bestimmten Bedingungen ausnutzen ließe, wenn der Server denselben RNG verwendet.
  • Ein weiterer Nutzer weist darauf hin, dass der gegebene lineare Kongruenz-RNG nur 12.445 verschiedene Zahlen erzeugt, bevor er sich wiederholt, und merkt an, dass es sinnvoll wäre, für diesen Algorithmus bessere Parameter zu verwenden.

    • Es wird auf das Problem hingewiesen, dass der lineare Kongruenz-RNG nur eine begrenzte Anzahl von Zahlen erzeugt und sich dann wiederholt; die Notwendigkeit einer Verbesserung des Algorithmus wird betont.
  • Ein Nutzer sagt, dass World of Warcraft (WoW) sein Interesse am Programmieren geweckt habe. Das Spiel sei erschienen, als er sechs Jahre alt war, und mit dem Aufkommen privater Server habe er sich dafür interessiert, wie man eigene NPCs erstellt. Dadurch habe er Lua gelernt sowie das Kompilieren von Private-Server-Cores, den Umgang mit SVN und das Anwenden von Patches.

    • Er teilt die Erfahrung, dass WoW sein Interesse am Programmieren ausgelöst hat. Durch Private Server und das Lernen von Lua habe er Programmierkenntnisse erworben.
  • Ein Nutzer, der ein Zitat von John von Neumann teilt, sagt, dass alle Methoden zur Erzeugung von Zufallszahlen eine Sünde seien, und behauptet, dass strenge arithmetische Verfahren keine Methode zur Erzeugung von Zufallszahlen seien.

    • Er zitiert John von Neumanns Ansicht zur Erzeugung von Zufallszahlen und betont, dass strenge arithmetische Verfahren keine Methode zur Zufallszahlenerzeugung sind.
  • Ein Nutzer sagt, er habe ein Skript für das Auktionshaus in WoW geschrieben, das alle Auktionen scannte, unterbewertete Gegenstände kaufte und sie erneut einstellte. Wenn jemand den Preis senkte, konnte das Skript die Auktion abbrechen und sie zu einem etwas niedrigeren Preis erneut einstellen.

    • Er teilt die Erfahrung, mithilfe eines Skripts im WoW-Auktionshaus unendlich Gold verdient zu haben.
  • Ein Nutzer erwähnt einen Fall, in dem Hacker News aufgrund schwacher Zufallszahlen gehackt wurde. Er stellt einen entsprechenden Link bereit.

    • Es wird ein Fall erwähnt, in dem Hacker News wegen schwacher Zufallszahlen gehackt wurde, und auf das Sicherheitsproblem hingewiesen.
  • Ein Nutzer verwendet den Ausdruck „Wenn Variablen sich nicht ändern und Konstanten nicht konstant sind“.

    • Es wird ein satirischer Ausdruck über die Rolle von Variablen und Konstanten in der Programmierung verwendet.
  • Ein Nutzer, der WoW nicht gespielt hat, sagt, er habe gehört, dass viele Add-ons private Chats als Kommunikationsmittel nutzten. Wenn es einen Weg gebe, würden die Leute ihn am Ende ohnehin finden und verwenden.

    • Er hat gehört, dass WoW-Add-ons private Chats als Kommunikationsmittel nutzten, und meint, dass Menschen Kommunikationswege am Ende immer finden und nutzen werden.
  • In Bezug auf die ökonomischen Anreize rund um RNGs erwähnt ein Nutzer, dass ein unvollkommener RNG ausreiche, wenn praktisch nichts auf dem Spiel steht, etwa in Spielen. Wenn jedoch Geld im Spiel sei oder Sicherheit wichtig sei, etwa bei Krypto-Wallets oder Online-Casinos, werde die Qualität des RNG extrem wichtig.

    • Es wird darauf hingewiesen, dass ein unvollkommener RNG in unwichtigen Situationen wie Spielen ausreichen kann, die Genauigkeit des RNG aber entscheidend wird, wenn Geldwert oder Sicherheit wichtig sind.