Fiyatlar yükleniyor…

Akıllı Kontrat Onayları Nasıl İptal Edilir (ve Neden Etmeli)

Kullanılmayan token onayları en önemli saldırı vektörlerinden biridir. Ethereum ve L2 ağlarında riskli izinleri bulmak, sınıflandırmak ve iptal etmek için aylık bir rutin hazırladık.

Akıllı Kontrat Onayları Nasıl İptal Edilir (ve Neden Etmeli)

Token onayı gerçekte nedir ve neden işlemin ötesinde yaşar

Bir merkeziyetsiz borsada token takas ettiğinizde, bir para piyasasında varlık ödünç verdiğinizde ya da bir DeFi paneli üzerinden stake ettiğinizde, tokenlarınızı bir kişiye teslim etmezsiniz. Token'ın akıllı kontratına, farklı bir akıllı kontratın sizin adınıza belirli sayıda tokeninizi taşımasına izin vermesini isteyen bir mesaj imzalarsınız. İmzaladığınız bu mesaj onaydır ve siz ya da biri açıkça iptal edene kadar zincir üzerinde süresiz olarak yaşar.

Yeni başlayanların yanlış anladığı kısım burasıdır. Onay tek bir işleme bağlı değildir. Süregelen bir izindir. 2023'te etkileşimde bulunduğunuz DEX veya borç verme protokolü, ilke olarak bugün de cüzdanınızdan token taşıyabilir; çünkü token kontratının kendisi buna izin verildiğini kayıt altına almıştır.

Etherscan gibi bir araçta göreceğiniz iki çeşit vardır. 'Sınırlı' bir onay bir tavan belirler, örneğin 100 USDC; bu tavana ulaşıldıktan sonra kontratın sizden yeniden imza istemesi gerekir. 'Sınırsız' onay (teknik olarak bir uint256'da, yani 256 bitlik işaretsiz tam sayıda temsil edilebilecek maksimum değer, ya da o kadar büyük bir sayı ki sınırsız sayılabilir) herhangi bir tavan koymaz. Çoğu DeFi arayüzü varsayılan olarak sınırsız onay kullanır; çünkü bu, kullanıcıyı her sonraki işlemde fazladan bir imzadan kurtarır ve aynı dapp için iki kez gas ödemek gereksiz hissettirir.

Takas gerçek bir dengeyle gelir: sınırsız onay sizin için de pratiktir ve o kontratın kontrolünü daha sonra ele geçirecek biri için de pratiktir.

Risk: unutulmuş bir onay nasıl bir varlık kaybına dönüşür

Başarısızlık biçimi nadiren yeni bir zeki hacktir. Neredeyse her zaman üç eski kalıptan biridir ve üçü de aylardır zincir üzerinde bekleyen onaylar yüzünden daha da kötüleşir.

1. Kontratın kendisi ele geçirilir. Bir geliştirici anahtarı kimlik avıyla alınır, bir çoklu imza cüzdanı ele geçirilir ya da protokol, saldırganların kontratları kötü niyetli bir sürüme yükselten bir teklif geçirdiği bir yönetişim saldırısına uğrar. Kontrat bir kez düşmanca hale geldiğinde, elinde tuttuğu hâlâ aktif her onay, kullanıcının cüzdanına doğrultulmuş dolu bir silah haline gelir. Kullanıcının yeni hiçbir şeyle etkileşimde bulunması gerekmez. Kontrat kendi başına transferFrom çağrısı yapar.

2. Protokol terk edilir ama kontrat duraklatılmaz. Pek çok DeFi projesi yayınlar, para toplar, ilgiyi kaybeder ve sessizce faaliyetine son verir. Kontratlar çalışmaya devam eder. Daha sonra bir açık bulunursa ve yamayacak bir ekip yoksa, saldırganlar o adresi bir zamanlar onaylamış her cüzdanı boşaltabilir. Bu durum 2020-2021 döngüsündeki eski stake ve getiri toplayıcı kontratlarla defalarca yaşanmıştır.

3. Gerçek bir dapp gibi görünen bir kimlik avı sitesini onayladınız. Sahte bir Uniswap veya Aave arayüzü, saldırganın kontrol ettiği bir kontrata onay imzalatır. Kullanıcı işlem yaptığını sanır ama aslında bir yabancıya belirli bir tokeni boşaltma izni vermiştir. Bu durumda onayı iptal etmek acildir ve tek çözümdür; çünkü imzalanan onay zaten zincir üzerindedir.

Bu listede eksik olana dikkat edin: varlık kaybının gerçekleşmesi için 'yeniden hacklenmeniz' gerekmez. Açık, blockchain'in soğuk hafızasında oturan ve gelecekte onu tetikleyecek bir olayı bekleyen onayın ta kendisidir.

Önceden onayladıklarınızı nasıl görürsünüz

İlk adım envanter çıkarmaktır. Cüzdanınızı, aynı zincir üstü verileri okuyan ve bunu birbirinden biraz farklı şekillerde sunan üç araçtan birine bağlayın.

Revoke.cash yeni başlayanlar için en uygun olanıdır. Siteye girersiniz, cüzdanınızı bağlarsınız ve bugün Ethereum, Arbitrum, Optimism, Base, Polygon, BNB Chain ve diğer büyük EVM (Ethereum Sanal Makinesi) ağlarını kapsayan desteklenen zincirlerde imzaladığınız tüm onayları listeler. Her satırda token, harcama yapan taraf (tokeni taşıyabilen sözleşme), izin miktarı (ne kadar taşıyabileceği) ve bir 'Revoke' (İptal Et) düğmesi yer alır. Ayrıca uzun süredir kullanılmamış sözleşmeleri potansiyel olarak atıl olarak işaretler.

Etherscan token-onay aracı etherscan.io/tokenapprovalchecker adresinde bulunur. Revoke.cash'e kıyasla biraz daha kaba bir arayüze sahiptir, ancak uzun süredir kamusal geçmişi olan bir ekip tarafından işletilir ve bazen Revoke.cash'in kaçırdığı uç durumları yakalar. İş akışı aynıdır: bağlan, gözden geçir, iptal et.

Rabby'nin yerleşik onay yöneticisi üçüncü taraf bir siteyi ziyaret etmeyi gerektirmeyen tek zincir üstü seçenektir. Rabby bir cüzdandır (tarayıcı eklentisi ve mobil uygulama) ve kendisi onaylarınızı okuyarak cüzdan arayüzünün içinde bir 'tehlikeli onaylar' listesi sunar. Rabby kullanıyorsanız bu en düşük sürtünmeli yoldur. Veri aynı veridir; arayüz yalnızca zaten güvendiğiniz bir yerde bulunur.

Hangi aracı seçerseniz seçin, oturum başına yalnızca bir tane kullanın. Birden çok onay-kontrol sekmesini aynı anda açmanın riski, cüzdanınızın hangi siteye bağlı olduğunu takip etmeyi zorlaştırmasıdır; bu da başlı başına hafif bir kimlik avı riski oluşturur.

Hangi onayların gerçekten tehlikeli olduğunu nasıl anlarsınız

Listeyi elde ettiğinizde her şeyi iptal etmenize gerek yoktur. İyi bir ilk geçiş, en riskli kalemlere öncelik verir.

Sonsuz onaylar ilk sırada gelir. Listeyi, çoğu zaman 1.15792e+59 gibi bilimsel gösterimle görüntülenen, maksimum uint256'nın kodlanmış biçimi olan büyük bir sayı içeren satırlara göre sıralayın ya da filtreleyin. Bunlar en yüksek kaldıraçlı temizliklerdir. Her biri, sözleşme yeniden sormadan cüzdanınızdaki o tokenin yüzde 100'ünü taşıyabilen bir sözleşmedir.

Artık kullanmadığınız sözleşmelere verilmiş sınırlı onaylar ikinci sıradadır. İki yıl önce bir stake sözleşmesine tam olarak 500 token için onay verdiyseniz ve artık o sözleşmeyi kullanmıyorsanız, o onay hâlâ geçerlidir. Sonsuz onaydan daha küçük bir etki alanına sahiptir, ancak hâlâ izleme yapmadığınız bir sözleşmeye doğrultulmuş dolu bir silah gibidir.

Atıl duran sözleşmeler incelenmeyi hak eder. Çoğu onay aracı bir 'son kullanım' zaman damgası gösterir ya da bir yıldan uzun süredir işlem yapmamış sözleşmeleri işaretler. Bunlar, büyük olasılıkla terk edilmiş projelere ait olan onaylardır ve terk edilmiş projeler, ileride istismar edilme olasılığı en yüksek onaylardır. Bunları iptal edin.

Hâlâ kullandığınız etkin sözleşmeler bekleyebilir. Uniswap üzerinde etkin şekilde işlem yapıyorsanız ve Aave'de borç veriyorsanız, bu onayları açık tutabilirsiniz. Her işlemde onayı iptal edip yeniden vermek gaz israfına yol açar ve başlı başına bir güvenlik riski olan imza yorgunluğuna neden olur. Aylık temizliğin amacı sıfır onay değildir; amaç sıfır eski onaydır.

İptal etmenin mekaniği ve gerçekte ne kadara mal olduğu

İptal etmenin kendisi de zincir üstü bir işlemdir. Token sözleşmesindeki approve fonksiyonunu çağırarak o harcama yapan taraf için izin miktarınızı sıfırlarsınız. Token sözleşmesi yeni izin miktarını kaydeder ve o bloktan itibaren harcama yapan taraf artık tokenlarınızı taşıyamaz.

Ethereum ana ağında, tek bir iptal işlemi, ağın yoğunluğuna bağlı olarak genellikle bir ila beş dolar arasında bir gaz maliyetine sahiptir. Yirmi eski onayınız varsa, bu küçümsenecek bir tutar değildir. Base, Arbitrum veya Optimism gibi katman-2 ağlarında (L2'ler) aynı çağrı birkaç sent, bazen bir centin kesri kadar sürer; çünkü L2'ler işlemleri toplar, Ethereum'dan güvenlik alır ve çok daha düşük ücret uygular. Aylık temizliğinizi nereye yapacağınızı seçiyorsanız, fiilen kullandığınız L2'de yapmak neredeyse her zaman doğru karardır.

Burada küçük ama gerçek bir tuzak vardır. Bir iptal işlemi gönderdiğinizde, cüzdanın yine de gaz ödemesi gerekir ve bu gaz, o zincirin yerli varlığından gelmelidir; yani Ethereum ve Arbitrum'da ETH, Polygon'da MATIC, BNB Chain'de BNB. Cüzdanınızda yalnızca stablecoin varsa ve yerli varlık bakiyeniz sıfırsa, iptal işlemi başarısız olur. Temizlemeyi düşündüğünüz her cüzdanda, birkaç dolar değerinde küçük bir miktarda yerli token bulundurun.

Başka bir tuzak: iptal etmek, gazı geri alamayacağınız anlamında geri alınamaz, ancak ertesi gün aynı sözleşmeye yeniden onay verebileceğiniz anlamında önemsiz şekilde geri alınabilir. Daha sonra tekrar kullanmaya karar verdiğiniz bir sözleşmeyi iptal etmenin herhangi bir cezası yoktur; yalnızca yeni bir onay imzalamanız, bunun için gaz ödemeniz ve yolunuza devam etmeniz gerekir.

İptal etmenin yapmadıkları

İptal etmek, iptal ettiğiniz sözleşmeden kaynaklanacak gelecekteki tükenmeleri engeller. Zaten gerçekleşmiş bir tükenmeyi geri alamaz, alamaz. Cüzdanınız Mart ayında boşaltıldıysa ve siz Mayıs ayında iptal ettiyseniz, Mart ayındaki tokenlar gitmiştir ve iptal işlemi, yasal, adli veya kurtarılabilir anlamda hırsızlıkla ilgisizdir.

İptal etmek, yarın imzalayacağınız yeni bir onaydan da sizi korumaz. Bir kimlik avı sitesini ziyaret eder, kötü niyetli bir sözleşmeye onay verir ve ardından temizlik yapmaya çalışırsanız, sorun yeni onaydır; eski Uniswap izninizi iptal etmek bunu çözmeye yetmez.

İptal etmek tokenlarınızı taşımaz. Bir takas, üçüncü bir taraftan imza ya da harcama yapan sözleşmeyle herhangi bir etkileşim gerektirmez. Token sözleşmesinin kendisine, izin defterindeki bir satırı sıfırlamasını söyleyen tek bir fonksiyon çağrısıdır.

Sürdürebileceğiniz aylık bir rutin

İnsanların onayları hiç iptal etmemesinin tek ve en büyük nedeni, bunun tek seferlik bir iş gibi hissettirmesidir; bu da yapılmamasını garanti eder. En güvenilir çözüm, onu bir takvim etkinliğine bağlamaktır. Ayın ilk pazar günü popüler bir tercihtir çünkü hafta sonları sakindir ve işlemin tam ortasında olma ihtimaliniz düşüktür; bazı insanlar kredi kartı ekstresinin kapandığı günü aynı nedenden dolayı seçer. Belirli gün önemli değildir. Önemli olan tekrardır.

Temizlik gününde iş akışı kısadır. Revoke.cash, Etherscan veya Rabby onay yöneticinizi açın. Aktif olarak kullandığınız cüzdanı bağlayın. Önce süresiz onayları sıralayın ve bunları iptal edin. Ardından, aracın genellikle işaretlediği uyku halindeki sözleşmeleri tarayın ve onları iptal edin. Hâlâ kullandığınız aktif sözleşmelere dokunmayın. Her işlemi onaylayın, yerleşmesini bekleyin ve sekmeyi kapatın.

L2 üzerindeki zaman maliyeti: yaklaşık beş ila on dakika. Ana ağdaki zaman maliyeti: benzer, artı birkaç dolarlık gas. Alışkanlık bir kez yerleştiğinde, banka ekstrenizi kontrol etmekten daha az zaman alır ve ilk bir drenajı engellediğinde kendini amorti eder.

Cüzdan güvenliği haberlerini akıllıca takip etme yöntemi

Cüzdan güvenliği olayları hızlı ilerler ve 'yönetilebilir bir hack' ile 'toplam kayıp' arasındaki fark, neredeyse her zaman kullanıcının savunmasız bir sözleşmeden ne kadar çabuk haberdar olduğu ve bir saldırgan süpürmeden önce onayını iptal edip etmediğidir. Her protokolün yönetim forumunu, denetim raporlarını ve olay sonrası incelemelerini elle takip etmek kaybedilen bir oyundur. Zippfeed, cüzdan güvenliği ve DeFi istismar manşetlerini duygu puanlaması (bullish, neutral veya bearish) ve bir önem derecelendirmesi ile öne çıkarır; böylece bir sonraki drenajdan sonra değil, önce doğru onayları iptal edebilirsiniz.

Sıkça sorulan sorular

Revoke.cash kullanmak güvenli mi?
Revoke.cash, en yaygın kullanılan onay yönetim araçlarından biridir ve varsayılan olarak salt okunur çalışır. Cüzdanınızı bağladığınızda site onaylarınızı okuyabilir, ancak sizin imzalamadığınız bir işlem olmadan fonlarınızı hareket ettiremez. Bununla birlikte, herhangi bir dapp için geçerli olan standart riskler burada da geçerlidir; bu yüzden URL'yi her zaman kontrol edin, arama motoruyla aramak yerine sık kullanılanlara ekleyin ve anlamadığınız bir işlemi asla imzalamayın. Eğitim amaçlıdır, finansal tavsiye değildir. Saygın bir araç kullanmak iyi bir alışkanlıktır, ancak hiçbir araç imzaladığınız şeyi okuma ihtiyacını ortadan kaldırmaz.
Bir ERC-20 onayı gerçekte nasıl çalışır?
Bir onayı imzaladığınızda, token'ın akıllı kontratındaki approve fonksiyonunu çağırarak belirli bir harcayan adresine, belirli bir miktara kadar token'ınızı taşıma yetkisi verirsiniz. Token kontratı bu izni kaydeder ve harcayan, sizin adınıza limit dahilinde transferFrom çağrısı yapabilir. Onay, sıfıra geri çekene kadar zincir üzerinde kalır. Bu nedenle çoktan kullanım dışı kalmış bir kontrata verilmiş bir onay yıllar sonra bile hâlâ aktif bir risk oluşturur.
Sahip olduğum her onayı iptal etmeli miyim?
Her şeyi iptal etmeniz gerekmez ve bunu yapmaya çalışmak genellikle gaz israfına ve imza yorgunluğuna yol açar. Artık kullanmadığınız kontratlara verilmiş süresiz onaylara öncelik verin, ardından kullanılmayan kontratlara, sonra da eski protokollere verilmiş sınırlı onaylara geçin. Aktif olarak kullandığınız protokoller için onayları açık bırakın, çünkü her işlemden önce onayı kaldırıp yeniden vermek para harcar ve gerçek bir güvenlik avantajı sağlamaz. Bir temizliğin amacı sıfır onay değil, sıfır eskimiş onaydır.
Zaten cüzdanım boşaltıldıysa, onayı iptal etmek paramı geri getirir mi?
Hayır. Onay iptali ileriye dönük bir işlemdir. İptal edilen kontratın gelecekte token'larınızı taşımasını engeller, ancak zaten çalınmış token'ları geri çeviremez, iade edemez veya kurtaramaz. Cüzdanınız boşaltıldıysa izlemeniz gereken yol onay temizliği değil, olay müdahalesidir: kalan fonları yeni bir cüzdan taşıyın, işlemleri belgelendirin ve ilgili projeyle blockchain analiz firmalarına bildirin. Onay hijyeni önlem niteliğindedir, geri ödeme mekanizması değil.