2 Punkte von GN⁺ 2024-06-30 | Noch keine Kommentare. | Auf WhatsApp teilen

Analyse der Lua-Sicherheitslücke in Factorio

Was ist Factorio?

  • Factorio ist ein Spiel, in dem man Fabriken automatisiert, um eine Rakete zu bauen und dem Planeten zu entkommen
  • Es wurden mehr als 3.500.000 Exemplare des Spiels verkauft, was es zu einem attraktiven Ziel für Sicherheitsforscher macht

Wie Lua im Spiel verwendet wird

  • Lua wird verwendet, um die Spiellogik zu implementieren sowie Mods und benutzerdefinierte Karten zu erstellen
  • Die Modding-Community ist sehr aktiv, und es gibt Tausende von Mods
  • Der Mod Alien Biomes verzeichnete 551K Downloads

Netzwerk-Exposition des Lua-Interpreters

  • Der Multiplayer-Modus von Factorio verwendet deterministischen Lockstep, um Clients zu synchronisieren
  • Wenn ein Spieler Lua-Code ausführt, müssen andere Spieler denselben Code ebenfalls ausführen
  • Dadurch entsteht die Möglichkeit, bösartigen Lua-Code über das Netzwerk auszuführen

Typischer Exploit-Pfad

  • Ein Factorio-Server wird mit einer bösartigen Karte gehostet
  • Wenn ein Client eine Verbindung zum Server herstellt, lädt er die Karte herunter und führt den Lua-Code aus
  • Schwächen in der Lua-Implementierung werden ausgenutzt, um gefälschte Objekte zu erzeugen
  • Über Speicherlecks oder Speicherkorruption wird das Verhalten des Programms verändert
  • Mithilfe dieser mächtigen Primitives wird Codeausführung erreicht

Die Gefährlichkeit von Lua-Bytecode

  • Lua ist eine Interpretersprache; geschriebener Code wird nicht direkt ausgeführt, sondern in Bytecode kompiliert
  • Wenn Bytecode direkt ausgeführt werden kann, lässt sich fehlerhafter Bytecode ausführen, um Speicher offenzulegen oder zu beschädigen

Bytecode-Validator

  • Die Lua-Entwickler implementierten einen Bytecode-Validator, um den Interpreter vor bösartigem Bytecode zu schützen, doch es wurden wiederholt Möglichkeiten zur Umgehung gefunden, weshalb er in Lua 5.2 entfernt wurde
  • Die Factorio-Entwickler implementierten einen eigenen Bytecode-Validator, dieser ist jedoch aufgrund einiger Off-by-one-Probleme nicht perfekt

Erzeugung gefälschter Objekte

  • Durch das Erzeugen gefälschter Objekte lassen sich sämtliche Funktionen des Interpreters ausnutzen
  • Mit Strings können beliebige Daten offengelegt werden, und mit Arrays sind Schreibzugriffe auf beliebigen Speicher möglich
  • Wenn native Funktionen aufgerufen werden können, lässt sich der Ausführungsfluss kontrollieren

Adressleck

  • Die print-Funktion von Lua kann Adressen offenlegen
  • In Factorio wurde sie entfernt, daher wird stattdessen eine Methode mit Type Confusion verwendet, um Adressen offenzulegen

TValues verstehen

  • Lua ist eine dynamische Sprache, bei der sich der Typ einer Variablen zur Laufzeit ändern kann
  • Intern verwendet Lua die TValue-Struktur, um Objekte darzustellen
  • TValue besitzt die Eigenschaften Typ (tt_) und Wert (value_)

Type Confusion mit FORLOOP

  • Der Opcode FORLOOP kann Type Confusion auslösen, da er den Initialwert der Schleife als Zahl behandelt
  • Dadurch lassen sich Adressen offenlegen

IEEE-754-Doppelte Genauigkeit

  • Doppelte Genauigkeit besteht aus Vorzeichen, Exponent und Mantisse
  • Lua stellt keine Integer dar, daher können Adressen bis 53 Bit ohne Präzisionsverlust offengelegt werden

Suche nach gefälschten Objekten

  • Durch das Verständnis von Upvalues und Closures lassen sich gefälschte Objekte finden
  • Upvalues ermöglichen den Zugriff auf Variablen aus äußeren Funktionen
  • Wenn durch Änderungen am Bytecode der Index eines Upvalue verändert wird, lassen sich gefälschte Objekte finden

Meinung von GN⁺

  • Dieser Artikel ist sehr hilfreich, um Sicherheitslücken in dynamischen Sprachen zu verstehen
  • Er erklärt gut, welche Sicherheitsprobleme in beliebten Spielen wie Factorio auftreten können
  • Ähnliche Schwachstellen können auch in anderen Projekten existieren, die Sprachen wie Lua verwenden
  • Bei der Einführung neuer Technologien oder von Open Source ist eine Sicherheitsprüfung unerlässlich
  • Ein anderes Projekt mit ähnlicher Funktionalität ist das Modding-System von Minecraft

Noch keine Kommentare.

Noch keine Kommentare.