Back to Blog

#1: MEV Botlarını Flashbots Relay'deki Açıklardan Yararlanarak Ele Geçirme

Code Auditing
February 6, 2024
6 min read

Nisan 2023'te bir saldırgan, Flashbots rölesinde mevcut olan güvenlik açığından yararlanarak birden fazla MEV botuna saldırdı ve yaklaşık 20 milyon USD kâr elde etti. Bu saldırının temel nedeni, belirli koşullar altında özel bir işlemin genel havuza sızabilmesi ve saldırganın kâr elde etmek için sızdırılan işlemi backrun yapabilmesiydi. Saldırıda kullanılan birkaç gelişmiş tekniği de fark ettik; örneğin kurbanları tuzağa düşürmek için honeypot işlemleri kullanılması ve saldırı sözleşmesinde kendi kendini koruma mekanizması bulunması.

Arka Plan

Flashbots

Flashbots, web sitesinde belirtildiği üzere, "Ethereum ile başlayarak durumsal blok zincirlerinde Maksimum Çıkarılabilir Değer (MEV) tarafından ortaya konan olumsuz dışsallıkları azaltmak amacıyla kurulmuş bir araştırma ve geliştirme organizasyonudur." Flashbots bünyesinde arayıcılar, inşaatçılar ve röleler dahil olmak üzere birkaç farklı kuruluş yer almaktadır. Aşağıdaki görsel, aralarındaki ilişkiyi göstermektedir.

Görsel Flashbots belgesi'nden alınmıştır.

PBS (öneren-inşaatçı ayrımı) protokolü, blok önerenin kârı maksimize etmek amacıyla blok alanını (bir blok oluşturmak için seçildiklerinde) birden fazla inşaatçıya satmasına olanak tanıyan bir protokoldür. Özellikle, birden fazla arayıcı mempool içindeki işlemleri dinler ve inşaatçılara gönderilecek paketler oluşturur. İnşaatçı, arayıcılardan gelen paketleri bir araya getirir, en değerli bloğu oluşturur ve ardından röleye gönderir. Röle, bloğu blok önerene (bir epoch slotu için blok oluşturmak üzere seçilmiş doğrulayıcıya) iletir.

Bu mimaride röle, birbirine güvenmeyen hem inşaatçılar hem de önerenler tarafından güvenilen bir taraftır. Öneren, blok başlığını imzalamadan önce blok içeriğine erişemez. Ayrıca ücret miktarının öneren tarafına ödenmesini de güvence altına alır.

Ayrıntılı mimari ile ilgilenen okuyucuları Flashbots belgesi'ne yönlendiriyorum. Yalnızca rölenin sağlaması gereken güvenlik güvencesini hatırlamamız gerekiyor; yani blok zincirde DEĞİLSE röle, blok içeriğini önerene ifşa edemez. Aksi takdirde, kötü niyetli öneren sızdırılan blok içeriğini kâr elde etmek için kullanabilir (saldırıda gösterildiği gibi).

Sandviç Saldırısı

Sandviç saldırısı, bir saldırganın kâr elde etmek için iki işlem arasına bir takas yerleştirdiği durumdur. Bunu açıklamak için bir örnek kullanmak istiyorum.

WETH ve USDC olmak üzere iki token içeren bir DEX havuzumuz olduğunu varsayalım. Bir kullanıcı, WETH'i USDC ile takas etmek için bir takas talebi gönderir. Bu takas işlemi mempool'da yer alacak ve MEV botu (diyelim ki bir arayıcı) tarafından elde edilecektir. Ardından bot, kullanıcının takas işleminden önce ve sonra olmak üzere iki işlem gerçekleştirecektir.

Özellikle, botun ilk işlemi WETH kullanarak USDC takas etmektir; bu durum USDC'nin fiyatını artıracaktır. Ardından kullanıcının takas işlemi gerçekleştirilecektir (USDC'nin fiyatı ilk işlem nedeniyle daha yüksek olduğundan daha az USDC ile). Bunun ardından botun ikinci işlemi USDC'yi WETH ile takas edecek ve botun ilk takasına kıyasla daha fazla WETH elde edebilecektir.

Görsel, Liyi Zhou ve diğerlerinin "Merkeziyetsiz Zincir Üstü Borsalarda Yüksek Frekanslı Ticaret" adlı makalesinden alınmıştır.

Backrunning

Backrunning, büyük bir işlemin hemen ardından bir işlemi gerçekleştirme stratejisidir. Backrunning, temel olarak büyük değerli bir işlemin token fiyatı üzerindeki etkisinden kaynaklanan arbitraj fırsatlarından yararlanır. Örneğin, bir kullanıcı bir DEX havuzunda WETH'i USDC ile takas etmek için büyük bir işlem yaparsa, bu USDC'nin fiyatını diğer borsalara kıyasla daha yüksek hale getirebilir. Bir backrunning botu, daha fazla WETH almak için bu arbitraj fırsatını anında yakalayarak USDC'yi daha düşük fiyata WETH ile takas edebilir ve ardından kâr elde etmek için diğer borsaların DEX havuzlarında WETH satabilir.

Güvenlik Açığı

Olay sonrası analizde gösterildiği gibi, güvenlik açığı rölenin kodunda mevcuttu. İmzalı blok başlığı geçersiz olsa bile (imzanın kendisi geçerlidir) inşaatçının blok içeriğini (kötü niyetli) önerene ifşa ediyordu. Bu durumda, işaret zincirine gönderilen geçersiz blok başlığı ve blok içeriği reddedilecek ve öneren, kendi bloğunu göndermede yarışı kazanarak sızdırılan blok içeriğinden kâr elde etmek için yararlanabilecektir.

Saldırı Süreci

Saldırgan kötü niyetli öneren, kurbanlar ise sandviç işlemlerini gerçekleştirmeyi amaçlayan MEV botlarıdır.

Örnek olarak gerçek bir saldırı işlemini kullanalım.

Blok 16964664
Konum 0 Kurban işlemi: 0xd2edf726fd3a7f179c | Phalcon Explorer (blocksec.com) MEV botu 4,5 STG takas etmek için 2454,1 WETH kullandı
Konum 1 Saldırı işlemi: 0x4b2a2d03b3dc136ef9 | Phalcon Explorer (blocksec.com) Saldırgan 2454,1 WETH takas etmek için 158 STG kullandı

Kurban ve saldırı işlemleri sırasıyla 16964664 numaralı blokta 0 ve 1. konumlarda yer almaktadır. Temel olarak, kurban (MEV botu) uniswap WETH-STG havuzunda 4,5 STG takas etmek için 2454,1 WETH kullanarak büyük bir işlem gerçekleştirdi. Bu durum büyük bir arbitraj fırsatı yarattı ve saldırgan havuzdaki tüm WETH'i boşaltmak için 158 STG kullandı.

Soru şu ki, kurban (MEV botu) neden havuzda 4,5 STG token (yaklaşık 3 USD değerinde) takas etmek için 2.454 WETH (yaklaşık 5 milyon USD değerinde) kullanmak istedi? Kurbanın bu takası gerçekleştirdiğinde havuzdaki likiditenin gerçekten düşük olduğuna (0,005 WETH ve 4,5 STG) dikkat edin.

Analizimiz, MEV botunun bu saçma takası gerçekleştirmesini sağlayan iki neden olduğunu göstermektedir.

Birincisi, saldırgan kurbanı sandviç saldırısı gerçekleştirmesi için bu takası göndermeye çekmek amacıyla bir honeypot işlemi kullandı. Bu honeypot işleminin hash'i 0xd534c46ba5a444e886 | Phalcon Explorer (blocksec.com)'dur. Özellikle, saldırgan WETH'i STG ile takas etmek için bir işlemi yayınladı (blok 16964664'ten önce). Havuzdaki likidite gerçekten düşük olduğundan, bu durum MEV botuna sandviç saldırısı gerçekleştirme fırsatı yarattı. Aşağıdaki görselde görüldüğü gibi, MEV botu üç işlem içeren bir sandviç saldırısı paketi (Sandwich attack bundle) oluşturabilirdi.

İkincisi, MEV botu açgözlü bir sandviç stratejisi kullandı ve bu işlemi göndermek için Flashbots'tan yararlandı. Kârı maksimize etmek için paketin içindeki ilk işlem neredeyse tüm STG tokenlarını boşaltmaya çalışır (2.454 WETH ile). Bu, yaklaşık 700 USD (0,35 WETH) kâr elde etmek için 5 milyon USD (2.454 WETH) kullanan gerçekten açgözlü bir stratejidir – 7.000:1. Bot, bu takas zincire işlenmedikçe kamuya ifşa edilmeyeceği varsayımıyla hareket etti. Ancak bu varsayım, röledeki güvenlik açığı nedeniyle geçersiz hale geldi. Bundan yararlanarak saldırgan, botun ilk sandviç saldırısı işlemini içeren yeni bir paket oluşturdu ve 2.454 WETH elde etmek için bir backrunning işlemi ekledi.

BlockSec'in Twitter'daki görseli tüm saldırı sürecini göstermektedir.

Kendi Kendini Koruma Mekanizması

Saldırganın kurbanı çekmek için WETH'i STG ile takas eden bir honeypot işlemi gönderdiğini biliyoruz. Peki ya honeypot işleminden yararlanacak sandviç işlemleri mevcut değilse? Bu gibi durumlarda saldırgan, havuzun durumunu izledi ve 0,35 Ether'ini korumak için akıllıca bir hamleyle ters takas gerçekleştirdi. Aşağıda, honeypot işlemini gerçekleştiren akıllı sözleşmenin (0xe73f1576af5573714404a2e3181f7336d3d978f9) derlenmiş kodu bulunmaktadır.

Bulgularımızı doğrulamak için, honeypot işlemini Phalcon Fork'ta simüle ettik; ancak 16964664 numaralı blokta 0. konumda.

Özet

Bu, gelişmiş saldırı stratejileriyle Flashbots rölesindeki güvenlik açığından yararlanan ilk saldırıdır.

  • Birincisi, bu saldırı Flashbots rölesindeki sıfır gün güvenlik açığından yararlandı.
  • İkincisi, açgözlü sandviç stratejisini istismar etti ve MEV botunu (kurbanı) tuzağa çekmek için honeypot işlemleri kullandı.
  • Üçüncüsü, saldırının başarısız olması durumunda honeypot işleminin maliyetini (0,35 WETH) kurtarmak için bir kendi kendini koruma mekanizması içeriyordu.

Bu serideki diğer makaleleri okuyun:

Best Security Auditor for Web3

Validate design, code, and business logic before launch. Aligned with the highest industry security standards.

BlockSec Audit