Tanıtım
Genellikle endüstrimizle ilgili çeşitli yönleri çalışkan ve istekli bir izleyici kitlesiyle tartışma fırsatım oluyor. Tuhaf ama atak saldırıları daha sık tartışma konusu istekler arasında yer alıyor. Bu belirli saldırı vektörüne olan ilginin, ürkütücü ve tehditkar doğasından kaynaklandığını düşünüyorum. Gerçekten de, atak saldırıları DeFi topluluğu tarafından paylaşılan daha inandırıcı korkuların arasında yer alıyor; ancak, üyelerinin ne kadar azının bir sandviç saldırısının tam olarak ne olduğunu ifade edebildiğini, bir yana, nasıl gerçekleştirildiğini açıklayan denklemleri türetebildiğine şaşırıyor. Zorlayarak kabul etmek zorundayım ki, tipik DeFi yayalarının sergilediği hayal kırıklığı verici düzeylerine rehberlik etme konusunda başarısız oldum. Deneyim, aslında yetenekli ve istekli bir izleyici kitlesini istedikleri anlayışa ulaştırmada başarısız olduğumu ve bu haklı olarak hak ettiklerini gösteriyor. Kararlılığım burada bir sandviç saldırısını gerçekleştirmenin tam itinererini ve endüstrinin en iyi exploitörlerinin değerli işlemlerin her birini kuruşu kuruşuna (harfi harfine) savunmalarına izin veren matematik yöntemlerini açığa çıkarmak ve yayınlamak. Başka türlü bir durumda, bu kadar kolay silahlandırılabilir bilgileri yayınlama konusunda etik bir soru olabilir. Ne yazık ki, bu bilgileri silahlandırmaya çalışacak olanlar zaten yaptılar, bu yüzden rakiplerimizin siyah kutularını boşaltmanın ve içeriklerini birlikte keşfetmenin olumsuz sonuçları olmadığını görüyorum.
Beklenen Davranış
Naif görünme riski alarak, kullanıcının genel sabit ürün likidite havuzuna karşı işlem yapacağını ve etkileşimde bulunduğu akıllı sözleşmelerin algoritmalarından tahmin edilen tokenları teslim almayı beklediği tipik durumu incelemeye başlamak istiyorum. Yani, tanıdık takas işleminin sonucu (denklem 1). Saldırgan ve kullanıcı tarafından gönderilen girdiler ve çıktılar arasındaki farkı belirlemek için, sırasıyla alt yazılar olarak saldırgan ve kullanıcıyı kullanacağım. Ayrıca, eski bir gelenek olan likidite havuzu takas ücretini küçük harfli Yunan harfi δ ile belirtmeyi ve büyük harfli Δ ile ticaret miktarlarını belirtmeyi gözlemleyeceğim. İleride, x işlem gören tokenı ve y likidite havuzundan saldırgaç veya kullanıcıya gönderilen tokenı ve düşük harfli Yunan harfleriyle likidite havuzu takas ücretini gösterecek şekilde bile varsayabiliriz ve ticaret miktarları büyük formdaki Δ ile göstereceğiz. x, y, δ, Δx, Δy, kullanıcı veya saldırgan cüzdanlarından çıkarılan ve eklenecek her zaman pozitif gerçek sayılar olarak kabul edilsin, dolayısıyla Δx, Δy ve.
Yaklaşık 2 milyon dolarlık bir toplam değeri temsil eden bir likidite havuzu var varsayalım. Kolaylık olması açısından, havuz ücret seviyesinin δ 0.003 (yani % 0.3 ya da 30 baz puana) sabitlendiğini varsayalım. Ardından, bir kullanıcının 20 ETH'i (yaklaşık 40.000 dolar nominal değer) havuzla takas yapmaya karar verdiğini varsayalım. Fiyat slippage etkisinden sonra beklenen sonuç, takas ücreti göz önünde bulundurularak şu şekilde özetlenmiştir (şekil 1).
Şekil 1: (naif) Beklenen Sonuç. 20 ETH, 500 ETH ve 1.000.000 USDC'den oluşan sabit ürün likidite havuzundan ve yaklaşık 2 milyon dolarlık toplam likiditeden 38.346,1538 USDC'ye takas edilir.
Yukarıda tasvir edilen şey, eğer bize kendimizi sabit-fonksiyonlu piyasa yapımının temelleri hakkında bilgili olma ayrıcalığını verirsek, istediğimiz sonuç. Bu, DeFi'ye yeni gelen ve özellikle CeFi'de önceden bilgisi olmayanların sıkça yaptığı bir hatadır. Frontrunning'in, satın almak istedikleri aynı tokena eşit derecede, hatta daha fazla ilgi gösteren bir başka katılımcı tarafından cazip bir fiyata vurulmaları gibi olduğu yanılsaması altında. Bu yanılsamayı dağıtmama izin verin. Önemli azınlık durumları dışında, önünüzden giden kişinin satın almak istediğiniz tokena eşit derecede ilgi duymadığını kesin bir şekilde söyleyebilirim.
Şekil 2: Adım 1 — İleriyi görmek için takas yapın. Saldırgan, kullanıcının beklenen takası hemen önünde aynı yönde büyük bir takas yaparak ve kullanıcının takasından hemen önce swap ücreti takasını zorlayarak (şekil 2). Bu, acemilere oldukça düşüncesiz bir hareket gibi görünebilir. Çoğu zaman DeFi'nin yeni gelenlerinin ve özellikle CeFi'de önceden bilgisi olmayanların, bir başkası tarafından kullanmaya çalıştıkları tokenı satın almak için cazip bir fiyat karşısında yenilgiye uğradıklarını düşünmeleri yanılsaması altındadır. Bu yanılsamanın gerçekten de uygun olmayan bir durum olduğunu gözden geçiririm.
Adım 2: Kullanıcının Takasına Rigged Likidite Havuzunda İzin Verin
Likidite havuzlarındaki fiyatlar şimdi uygun şekilde ayarlandı, böylece saldırı için sahne oluşturuldu ve artık kullanıcının takas işlemi, önden alma işleminden hemen sonra derhal gerçekleştirilmesi kritiktir (şekil 3). Bu, blok oluşturulurken tipik olarak gerçekleştirilen bu saldırılar riskli bir girişim olacaktır. Yani, bu saldırıyı deneyen kişi, işi kendi saldırısıysa başarısını garanti edebilir. Bir şans payı varsa, ihmal edilecek kadar küçük olur.
Şekil 3: Adım 2 — Kullanıcının takasından sonra saldırganın işlemine izin verin. Saldırgan, kullanıcının takasını önünden yapar. Kullanıcı, 20 ETH karşılığında 7.053,5213 USDC alır; önceden, sömürülmeyen örnekte, kullanıcı aynı takas için aynı likidite havuzunda 38.346,1538 USDC aldı (bu nedenle % 81,6 oranında azalma).
Adım 3: Yapılan Takası Geri Çalıştırın
Üçüncü ve son adımda, saldırgan ilk önden alma işlemini, yalnızca birkaç dakika önce satın aldığı tüm USDC'yi geri değiştirerek geri çevirir.
Şekil 4: Adım 3 — Takas işlemi geri çalıştırın. Önünden alma adımından hemen sonra saldırgana ait geri takip işlemi derhal gerçekleştirilir. Önden alınan 575.031,4616 USDC, tamamıyla 693.6444 ETH için geri takaslanır ve saldırgan 12.2767 ETH kazanır.
Burada önemli olan şey, saldırganın neredeyse hiçbir şey riske atmamış olması ve sistem için hiçbir değer sunmamış olmasıdır, belki de blok oluşturma sürecinin bir parçası olarak “blockchain'i güvenli kılma” konusunda dahil oldukları için belki de. Eğer bu son argüman ele alınacaksa, konsensüse katılanlar ile kendi başına zinciri kullananlar arasındaki ilişkiyi zorba olarak nitelendirmekten kaçınan pek çok kişinin tereddüt etmeyeceğini düşündüğü filan için.
Genel Sonuç
Yukarıda detaylandırılan adımlar saldırının mekanizmasını (şekil 2–4) ayrıntılı olarak anlatmakta ve birçoğunuz için şu ana kadar sunulan konuda çok fazla yeni bilgi sunmamış olabilir. Ancak, toplam süreç hakkındaki aşağıdaki perspektifin göz önünde bulundurulacak kadar yeni olması umudundayım, konunun ne kadar bilinirse bilinsin.
Bir an için düşünün ve komünite olarak bu tür saldırı vektörlerinin üstesinden gelinemeyeceği -- veya daha da kötüsü, altyapıyı yönetenlerin talep ettiği gaz maliyetlerine ek olarak ayrıca kurulmuş bir vergi aracı olarak işlev gösterirler -- kabul ettiğimiz. Ayrıca, bu tür sandviç saldırılarında gereksiz adımların çok olduğu ve bu adımları gerçekleştirmeden aynı sonuca ulaşmanın tercih edilir olduğunun anlaşıldığını düşünün. Bilmeyerek abarttığımı biliyorum, ama vaat ediyorum, bu önemli değil. Amacım aslında, indirgemeci bir bakış açısını dikkate almak.
Bir kullanıcı, yaklaşık 2M USD'ye yakın bir toplam likiditeye ve 0.3% likidite havuzu ücret oranına sahip bir likidite havuzunda ETH'yi USDC ile takas etmeye karar verir.
20 ETH'i likidite havuzuna göndermeyi ve algoritmalarda tahmin edilen tokenları almayı bekler ve ardından işlemi gerçekleştirir.
Bir yabancı gelir ve hiçbir uyarı olmaksızın ve hiçbir neden olmadan 12.2767 ETH alır.
Geriye kalan 7.7233 ETH, takas için likidite havuzuna gönderilir.
Likidite havuzu, hemen sonra takas işlem ücret seviyesini 53.63% (yani 17,776.9349% artış) olarak değiştirir.
Takas gerçekleştirilir ve kullanıcı beklenen% 38.346.1538 USDC yerine 7,053.5213 USDC alır.
Son olarak, likidite havuzu takası öncesi seviyeye geri döndürür (yani geriye 0.3%).
Yukarıdaki adımlar, tamamen yine de SANDviç saldırısını gerçekleştirme adımlarıyla reddedebilir. İki farklı mekanizmayı kullanmalarına rağmen, finansal ve, biraz da olsa, hesaplama açısından aynı sonuca varırlar. Benim gerçek mekanizmaya sahip olan herkesin bu konudaki ilgisini kaybetmek istemem, ancak kesin değer transferi ve kime olduğu konusundaki gerçekler konusunda sağlam bir temele sahip olmasını isterim.
Şekil 5: Genel Sonuç. Kullanıcı, 20 ETH gönderir, bunu saldırgan alır, saldırgan işlemden 12.2767 ETH çıkarır, takas için sadece 7.7233 ETH bırakır. Ardından, likidite havuzu takas işlem ücret seviyesini 0.3%'ten 53.63%'e değiştirir ve daha sonra değişimi gerçekleştirir. Kullanıcı, yeni ücret seviyesinde (eqn 1) 7,053.5213 USDC alır.
Kesinlik Sandviç Aydınlatması
Yukarıda ayrıntıları verilen sandviç saldırısı, sunulan durum açısından en iyisi olarak kabul edilir (ondalık basamakların eksikliği hariç). Yani, önden alma işleminde kullanılan 681.3677 ETH (aslında, 681.367696126344533020 ETH) bir yaklaşım değil ve saldırgan tarafından alınan 12.2767 ETH (aslında, 12.276688934466993032 ETH) elde edilebilecek maksimumdur.
Q kışkırtıcılık göz önüne alındığında saldırgan tarafından alınan ETH miktarının toplamı olduğuna göre gaz hesaba katılmadan önce. Üç swap denklemini iç içe geçirerek Q işlem ücreti, δ,