c't 15/2023
S. 124
Wissen
Tornado Cash

Stürmische Zeiten

Wie die Krypto-Geldwaschmaschine Tornado Cash gehackt wurde

Der Kryptowährungsmixer Tornado Cash wurde von einem Hacker übernommen und dann wieder an die Community zurückgegeben. Der Fall ist technisch interessant und ein gutes Beispiel für Aufbau, Organisation und Probleme von Projekten in der Kryptoszene.

Von Sylvester Tremmel

Tornado Cash ist ein Mixing-Service für verschiedene Kryptowährungen. Mixing-Services, auch Tumbler genannt, ermöglichen anonyme Zahlungen mit Kryptowährungen. Die meisten davon bieten nämlich – anders als oft angenommen – keineswegs Anonymität, sondern nur Pseudonymität. Geldflüsse in Bitcoin, Ether & Co. lassen sich durchaus von einem Wallet zum nächsten verfolgen.

Sobald es gelingt, ein Wallet einer Person zuzuordnen, kann man auch die zugehörigen Geldflüsse nachvollziehen. Oft wird dann schnell klar, welche anderen Wallets diese Person kontrolliert, mit welchen Kryptodiensten sie interagiert hat und mit welchen Wallets anderer Personen sie Geld ausgetauscht hat. Genau das sollen Mixing-Services verhindern. Grob gesagt landen hier Einzahlungen vieler Leute in einen gemeinsamen Topf, aus dem der Service dann Auszahlungen bedient. Der Mixer garantiert, dass Nutzer nur so viel abheben können, wie sie zuvor eingezahlt haben, aber welche Abbuchungen zu welchen Einzahlungen gehören, ist nicht sichtbar.

100 Prozent Zustimmung: Das fatale Vertragsupdate hatte sich offenbar kein TORN-Besitzer genau genug angesehen.
100 Prozent Zustimmung: Das fatale Vertragsupdate hatte sich offenbar kein TORN-Besitzer genau genug angesehen.

Legal, illegal, dezentral

Befürworter sehen Tumbler als Systeme, die legitimerweise anonyme Zahlungsflüsse ermöglichen, so wie auch Bargeldzahlungen anonym sind. Kritiker sehen sie im Wesentlichen als Geldwäschesysteme – mit einigem Recht, denn nach fast jedem Schwindel mit Kryptowährungen schleusen die Betrüger ihre erbeuteten Token durch Mixing-Dienste. Durch Tornado Cash sollen allein nordkoreanische Hacker Token im Nominalwert von über 1 Milliarde US-Dollar geschleust haben. Im August 2022 wurde der Dienst vom US-amerikanischen Office of Foreign Assets Control (OFAC) mit Sanktionen belegt.

Das reduzierte zwar die Nutzeranzahl deutlich, konnte Tornado Cash aber nicht stoppen: Hinter dem Mixer steht kein Unternehmen mit Infrastruktur, die sich beschlagnahmen ließe, sondern eine dezentrale autonome Organisation (DAO). So eine DAO besteht aus einer Reihe von Smart Contracts, also Programmen auf der (Ethereum-)Blockchain [1]. Auch der eigentliche Mixing-Dienst von Tornado Cash setzt sich aus Smart Contracts zusammen, die durch geschickte Kryptografie die Zuordnung von Ein- und Auszahlungen verschleiern, ohne dass Nutzer irgendeiner Instanz vertrauen müssen. Solange die Blockchain besteht, solange besteht grundsätzlich auch Tornado Cash, ohne dass eine Behörde es abschalten könnte.

Wie alle Smart Contracts kann man auch die von Tornado Cash auf der Blockchain inspizieren und sich – ausreichendes Programmierwissen vorausgesetzt [2, 3] – von ihrer korrekten Funktionsweise überzeugen. Damit so eine Inaugenscheinnahme vor Betrug schützt, darf sich der Code eines Smart Contracts aber nicht plötzlich ändern; die Programme sind daher grundsätzlich unveränderlich. Wer schon einmal programmiert hat, weiß, dass das oft schiefgeht: Programmierfehler sind weitverbreitet und ein unveränderbarer Smart Contract ist auch unkorrigierbar. Immer wieder fallen DAOs simplen Fehlern oder übersehenen Sicherheitslücken in ihren Verträgen zum Opfer.

Vertrag by Proxy

Tornado Cash (und viele andere Projekte) setzen daher auf „upgradable Contracts“, in der Regel nach einem Proxy-Schema: Nutzer interagieren mit einem unveränderlichen Proxy-Vertrag auf der Blockchain. Der enthält den Vertragszustand, leitet Methodenaufrufe aber intern an einen Implementationsvertrag weiter. Spezielle Methoden des Proxys erlauben, den genutzten Implementationsvertrag durch einen neuen zu ersetzen und stellen beispielsweise sicher, dass dies nur mit einer gewissen Karenzzeit geschieht. Die Idee: Der unveränderliche Proxy-Vertrag ist relativ simpel und überprüfbar korrekt. Die eigentliche – komplexe und potenziell fehleranfällige – Vertragslogik kommt in den Implementationsvertrag, sodass man sie bei Bedarf korrigieren oder aktualisieren kann.

Auch Tornado Cash verwendet so ein System: Zwar sind die Verträge für den eigentlichen Mixer unveränderlich, aber die Projektverwaltung („Governance“) der DAO, die eine große Menge der projekteigenen TORN-Token kontrolliert, setzt auf solche Proxy-Schemata. TORN dient mehreren Zwecken. Zum einen haben die Token einen gewissen monetären Wert. Die DAO kann sie daher als Zahlungsmittel nutzen, beispielsweise um Programmierer zu entlohnen. Vor allem aber wird mithilfe von TORN das Projekt gesteuert: Wer TORN besitzt und sie im Governance-Vertrag einsperrt („locked“), der darf Updates für den Governance-Vertrag vorschlagen und sich an Abstimmungen über die Vorschläge beteiligen. Man vertraut darauf, dass böswillige Vertragsupdates von Token-Besitzern erkannt und mehrheitlich abgelehnt werden.

Das Einsperren von TORN-Token im Governance-Vertrag schafft auch einen Hebel gegen unerwünschtes Verhalten: Nutzer, die nicht nach den Regeln des Projekts spielen, können ihre TORN-Token verlieren, solange sich eine Mehrheit für einen solchen bestrafenden Update-Vorschlag findet.

Drum prüfe, wer sich ewig bindet

Genau an dieser Stelle setzte Ende Mai ein Angreifer an. Er unterbreitete den Vorschlag, die TORN-Token gewisser regelbrechender Nutzer zu kassieren und verwies auf einen früheren Vorschlag gleicher Logik. Der Vorschlag wurde einstimmig angenommen, wobei den abstimmenden TORN-Besitzern entging, dass der nun vorgeschlagene Updatevertrag eine Methode zur Selbstzerstörung besaß. Hier hätten eigentlich alle Alarmglocken schrillen müssen, denn durch solch einen „selfdestruct“ wird die Blockchain-Adresse des Vertrages wieder frei. Unter gewissen Voraussetzungen kann dann ein anderer Vertrag an diese Stelle treten.

Genau so ging der Hacker vor: Nachdem der Vorschlag angenommen worden war, zerstörte er den originalen Vertrag, ersetzte ihn durch einen neuen und dieses Update wurde dann umgesetzt. Der neue Vertrag verschaffte dem Hacker extrem viele Stimmrechte, sodass er fortan im Alleingang die Geschicke der DAO lenken konnte. Die neu erhaltene Macht nutzte er, um sich eine große Menge der TORN-Token in Projektbesitz auszuzahlen. Anschließend wechselte er diese in den Ethereum-Token Ether und nutzte – ironischerweise – Tornado Cash, um den weiteren Fluss dieser Ether zu verschleiern.

Bei all dem nutzte er diverse Adressen, ging in kleinen Stückelungen vor und sorgte sogar dafür, dass der ursprüngliche Zweck des Updates erfüllt wurde. All das vermutlich, damit die Attacke unentdeckt bleibt, was aber scheiterte. Noch während der Angreifer Token abzog, schlug das Projekt Alarm und versuchte, möglichst viele TORN-Token in Sicherheit zu bringen.

Tags darauf unterbreitete der Hacker einen Updatevorschlag, der seine Stimmrechte löschte und den normalen TORN-Besitzern wieder Kontrolle über die DAO verschaffte. In der DAO-Community wurde zwar diskutiert, ob diesem Vorschlag zu trauen sei, aber letztlich war die Debatte müßig: Der Hacker konnte mit seinen Stimmrechten das Update ohnehin im Alleingang annehmen. Offenbar war der Vorschlag ernst gemeint, zu Redaktionsschluss befand sich die DAO wieder in der Hand ihrer Mitglieder. Die hatten gerade über ein Update abgestimmt, das ein Auswechseln des Updatevertrages zwischen Abstimmung und Ausführung in Zukunft verhindern soll.

Der Ast, auf dem man sitzt

Warum der Angreifer die Projektkontrolle wieder abgab, ist offen. Er hätte jedenfalls noch deutlich mehr Schaden anrichten können: Unter anderem hat die DAO auch Kontrolle über „Tornado Cash Nova“, eine neue experimentelle Version des Mixers. Anders als die Mixer-Verträge der klassischen Version nutzen die Smart-Contracts von Novas Mixer ebenfalls das Proxy-Schema und stehen unter Kontrolle der DAO. Der Angreifer hätte sich wohl Zugriff auf die Nutzergelder im Nova-Topf verschaffen können.

Dass er es nicht tat, könnte mit seiner eigenen Nutzung von Tornado Cash zu tun haben. Denn egal wie unlöschbar, unveränderbar und fehlerfrei (?) der Mixing-Code auf der Blockchain ist: Damit das System funktioniert, müssen es eine Menge Leute benutzen. Wenn nur einige wenige in den virtuellen Topf einzahlen und von ihm abheben, dann lassen sich die Geldströme wieder mit einiger Sicherheit zuordnen.

Schon die OFAC-Sanktionen vergangenes Jahr haben die Nutzerzahlen von Tornado Cash massiv einbrechen lassen und den TORN-Kurs von knapp 30 US-Dollar in den einstelligen Bereich geschickt. Nach der aktuellen Attacke brach TORN von gut 6 Dollar auf etwas über 4 Dollar ein, Tendenz weiter fallend. Das dürfte der Angreifer nicht beabsichtigt haben, schließlich sollte die Attacke wohl unbemerkt bleiben. Nachdem das misslang, war ihm möglicherweise ein Fortbestehen des Projekts zu wichtig, um sich weiter auf dessen Kosten zu bereichern. Denn was nützen erbeutete Token, wenn man sie nicht waschen kann? (syt@ct.de)

Kommentieren