Harvesting MEV-Bots durch Ausnutzen von Schwachstellen im Flashbots Relay

MEV-Bots durch Flashbots-Relay-Schwachstelle ausgenutzt; Nr. 1 Sicherheitsvorfall der Top-10 "Awesome" Security Incidents 2023.

Harvesting MEV-Bots durch Ausnutzen von Schwachstellen im Flashbots Relay

Im April 2023 nutzte ein Angreifer eine Schwachstelle im Flashbots Relay aus, um mehrere MEV-Bots anzugreifen und rund 20 Millionen US-Dollar zu erbeuten. Die Kernursache des Angriffs war, dass eine private Transaktion unter bestimmten Bedingungen in den öffentlichen Pool gelangen konnte, und der Angreifer konnte die geleakte Transaktion rückwirkend ausführen, um Gewinne zu erzielen. Wir stellten auch eine Reihe ausgeklügelter Techniken fest, die beim Angriff eingesetzt wurden, z. B. die Verwendung von Honeypot-Transaktionen zur Attacke auf die Opfer und ein Selbstschutzmechanismus im Angriffsvertrag.

Hintergrund

Flashbots

Flashbots ist laut seiner Website eine „Forschungs- und Entwicklungsorganisation, die gegründet wurde, um die negativen externen Effekte zu mildern, die der maximal extrahierbare Wert (MEV) für zustandsbehaftete Blockchains mit sich bringt, beginnend mit Ethereum.“ An Flashbots sind verschiedene Entitäten beteiligt, darunter Sucher, Ersteller und Relais. Die folgende Abbildung zeigt ihre Beziehung.

Das Bild stammt aus dem Flashbots-Dokument.

Das PBS (Proposer-Builder Separation)-Protokoll ist ein Protokoll, das es dem Block-Proposer ermöglicht, seinen Blockplatz (sobald er für die Erstellung eines Blocks ausgewählt wurde) an mehrere Ersteller zu verkaufen – um die Gewinne zu maximieren. Speziell hören mehrere Sucher auf Transaktionen im Mempool und generieren Bundles, die an die Ersteller gesendet werden. Der Ersteller aggregiert Bundles von Suchern, erstellt den wertvollsten Block und sendet ihn dann an das Relais. Das Relais sendet den Block an den Block-Proposer, den Validator, der für die Erstellung eines Blocks für einen Epoch-Slot ausgewählt wurde.

In dieser Architektur ist das Relais eine vertrauenswürdige Partei für Ersteller und Proposer, die einander nicht vertrauen. Es stellt sicher, dass der Proposer den Blockinhalt nicht erhält, bevor er den Block-Header signiert. Es stellt auch sicher, dass die Gebühren an den Proposer gezahlt werden.

Interessierte Leser der detaillierten Architektur verweise ich auf das Flashbots-Dokument. Wir müssen uns nur die Sicherheitsgarantie merken, die vom Relais bereitgestellt werden muss, d. h. das Relais darf den Blockinhalt nicht an den Proposer offenlegen, wenn der Block NICHT in der Kette ist. Andernfalls kann der bösartige Proposer den geleakten Blockinhalt nutzen, um Gewinne zu erzielen (wie im Angriff gezeigt).

Sandwich-Angriff

Ein Sandwich-Angriff liegt vor, wenn ein Angreifer einen Tausch zwischen zwei Transaktionen platziert, um einen Gewinn zu erzielen. Ich möchte dies anhand eines Beispiels veranschaulichen.

Nehmen wir an, wir haben einen DEX-Pool mit zwei Token, WETH und USDC. Ein Benutzer reicht eine Swap-Anfrage ein, um WETH gegen USDC zu tauschen. Diese Swap-Transaktion wird im Mempool landen und vom MEV-Bot (sagen wir ein Sucher) erfasst. Dann erstellt der Bot zwei Transaktionen, eine vor und eine nach der Swap-Transaktion des Benutzers.

Insbesondere besteht die erste Transaktion des Bots darin, WETH gegen USDC zu tauschen, was den Preis von USDC erhöht. Dann wird die Swap-Transaktion des Benutzers ausgeführt (mit weniger USDC, da der Preis von USDC aufgrund der ersten Transaktion höher ist). Danach tauscht die zweite Transaktion des Bots USDC gegen WETH, was mehr WETH einbringen kann als beim ersten Tausch des Bots.

Das Bild stammt aus der Arbeit von Liyi Zhou et al. High-Frequency Trading on Decentralized On-Chain Exchanges.

Backrunning

Backrunning ist eine Strategie, um eine Transaktion unmittelbar nach einem großen Handel auszuführen. Backrunning nutzt im Grunde Arbitragemöglichkeiten, die sich aus dem Einfluss des großen Handels auf den Token-Preis ergeben. Wenn ein Benutzer beispielsweise einen großen Handel in einem DEX-Pool tätigt, um WETH gegen USDC zu tauschen, kann dies den Preis von USDC auf anderen Börsen höher machen. Ein Backrunning-Bot kann diese Arbitragemöglichkeit sofort nutzen, um USDC gegen WETH zu einem niedrigeren Preis zu tauschen, um mehr WETH zu erhalten und WETH dann an DEX-Pools anderer Börsen zu verkaufen, um Gewinne zu erzielen.

Die Schwachstelle

Wie in der Post-Mortem-Analyse gezeigt, befand sich die Schwachstelle im Code des Relais. Sie gibt den Blockinhalt des Erstellers an einen (bösartigen) Proposer weiter, selbst wenn der signierte Block-Header ungültig ist (die Signatur selbst ist gültig). In diesem Fall wird der ungültige Block-Header und der ungültige Blockinhalt, der an die Beacon-Kette gesendet wird, abgelehnt, und der Proposer kann das Rennen gewinnen, um seinen eigenen Block einzureichen und den geleakten Blockinhalt für Gewinne zu nutzen.

Der Angriffsprozess

Der Angreifer ist der bösartige Proposer und die Opfer sind die MEV-Bots, die Sandwich-Transaktionen durchführen wollen.

Nehmen wir eine echte Angriffstransaktion als Beispiel.

Block 16964664
Position 0 Opfertransaktion: 0xd2edf726fd3a7f179c | Phalcon Explorer (blocksec.com) MEV-Bot verwendete 2454,1 WETH zum Tausch von 4,5 STG
Position 1 Angriffstransaktion: 0x4b2a2d03b3dc136ef9 | Phalcon Explorer (blocksec.com) Der Angreifer verwendete 158 STG zum Abzug aller 2454,1 WETH

Die Opfer- und Angriffstransaktionen befinden sich in den Positionen 0 und 1 im Block 16964664. Im Grunde führte das Opfer (MEV-Bot) einen großen Handel durch und verwendete 2454,1 WETH, um 4,5 STG im Uniswap WETH-STG-Pool zu tauschen. Dies schuf eine große Arbitragemöglichkeit, und der Angreifer verwendete 158 STG, um das gesamte WETH im Pool abzugreifen.

Die Frage ist, warum war das Opfer (der MEV-Bot) bereit, 2.454 WETH (ca. 5 Mio. USD) für den Tausch von 4,5 STG-Tokens (ca. 3 USD) im Pool zu verwenden? Beachten Sie, dass die Liquidität im Pool zum Zeitpunkt des Tauschs durch das Opfer sehr gering war (0,005 WETH und 4,5 STG).

Unsere Analyse zeigt zwei Gründe, warum der MEV-Bot einen solch lächerlichen Tausch durchführte.

Erstens verwendete der Angreifer eine Honeypot-Transaktion, um das Opfer dazu zu verleiten, diesen Tausch durchzuführen, um den Sandwich-Angriff durchzuführen. Der Hash dieser Honeypot-Transaktion ist 0xd534c46ba5a444e886 | Phalcon Explorer (blocksec.com). Insbesondere übertrug der Angreifer eine Transaktion, um WETH gegen STG zu tauschen (vor Block 16964664). Da die Liquidität im Pool sehr gering ist, schafft dies eine Gelegenheit für den MEV-Bot, einen Sandwich-Angriff durchzuführen. Wie in der folgenden Abbildung gezeigt, konnte der MEV-Bot ein Sandwich-Angriffsbündel erstellen, das drei Transaktionen enthält (Sandwich-Angriffsbündel).

Zweitens verwendete der MEV-Bot eine gierige Sandwich-Strategie und nutzte Flashbots, um diese Transaktion zu senden. Um den Gewinn zu maximieren, versucht die erste Transaktion innerhalb des Bündels, fast alle STG-Token (mit 2.454 WETH) abzuziehen. Dies ist eine wirklich gierige Strategie, die 5 Millionen US-Dollar (2.454 WETH) einsetzt, um einen Gewinn von etwa 700 US-Dollar (0,35 WETH) zu erzielen – ein Verhältnis von 7.000:1. Der Bot ging davon aus, dass dieser Tausch nicht öffentlich bekannt gegeben wird, es sei denn, er wird in der Kette bestätigt. Diese Annahme wurde jedoch aufgrund der Schwachstelle des Relais gebrochen. Dies nutzte der Angreifer aus und erstellte ein neues Bündel, das die ursprüngliche Sandwich-Angriffstransaktion des Bots enthielt, und fügte eine Backrunning-Transaktion hinzu, um 2.454 WETH zu erhalten.

Die Abbildung in BlockSecs Twitter zeigt den gesamten Angriffsprozess.

Der Selbstschutzmechanismus

Wir wissen, dass der Angreifer eine Honeypot-Transaktion gesendet hat, um das Opfer durch den Tausch von WETH gegen STG zu locken. Was passiert jedoch, wenn keine Sandwich-Transaktionen verfügbar sind, um die Honeypot-Transaktion auszunutzen? In solchen Fällen überwachte der Angreifer den Status des Pools und führte einen umgekehrten Tausch durch, um seine 0,35 Ether zu sichern, ein kluger Schachzug. Nachstehend ist der dekompilierte Code des Smart Contracts (0xe73f1576af5573714404a2e3181f7336d3d978f9) aufgeführt, der die Honeypot-Transaktion ausgeführt hat.

Um unsere Erkenntnisse zu überprüfen, simulierten wir die Honeypot-Transaktion in Phalcon Fork, jedoch an Position 0 von Block 16964664.

Zusammenfassung

Dies ist der erste Angriff, der die Schwachstelle im Flashbots Relay mit ausgeklügelten Angriffsstrategien ausnutzte.

  • Erstens nutzte dieser Angriff eine Zero-Day-Schwachstelle im Flashbots Relay aus.
  • Zweitens nutzte er die gierige Sandwich-Strategie aus und verwendete Honeypot-Transaktionen, um den MEV-Bot (das Opfer) zu ködern.
  • Drittens enthielt er einen Selbstschutzmechanismus, um die Kosten (0,35 WETH) der Honeypot-Transaktion zu retten, falls der Angriff nicht erfolgreich war.

Lesen Sie weitere Artikel in dieser Reihe:

Sign up for the latest updates