وبلاگ

ترجمهٔ خودکار · خواندن به انگلیسی

ماژول SSO 2 - آسیب‌پذیری‌های قرارداد هوشمند: بررسی عمیق حملات بازگشت مجدد

قراردادهای هوشمند شفافیت را ارائه می‌دهند اما خطراتی نیز به همراه دارند. این مقاله آسیب‌پذیری‌هایی مانند بازگشت مجدد را بررسی می‌کند و ضرر 150 میلیون دلاری DAO را به عنوان نمونه ذکر می‌کند. سرریز عدد صحیح منجر به شکست 900 میلیون دلاری BeautyChain شد. DAOMaker به دلیل نقص در کنترل دسترسی 4 میلیون دلار از دست داد. در حملات وام سریع، Harves Finance 38 میلیون دلار از دست داد.

توسط Markos Mebellis

ماژول SSO 2 - آسیب‌پذیری‌های قرارداد هوشمند: بررسی عمیق حملات بازگشت مجدد
در این صفحه

قراردادهای هوشمند با کارایی، شفافیت و ویژگی‌های تغییرناپذیر خود در حال متحول کردن صنایع جهانی هستند. با این حال، طراحی باز و خودکار آن‌ها نیز آن‌ها را در معرض خطر قرار می‌دهد. برای به حداکثر رساندن پتانسیل آن‌ها و در عین حال به حداقل رساندن تهدیدها، درک آسیب‌پذیری‌ها و مسیرهای حمله احتمالی آن‌ها حیاتی است. ساخت و نگهداری این قراردادها نیازمند توجه دقیق و پایبندی به بهترین شیوه‌ها است. این مقاله به آسیب‌پذیری‌های رایج می‌پردازد و برای افزایش درک، آن‌ها را با موارد دنیای واقعی نشان می‌دهد. بیایید نگاهی به مقاله زیر بیندازیم که با لطف Salus Security ارائه شده است.

آسیب‌پذیری‌های کلیدی:

**بازگشت مجدد:** در اینجا، مهاجمان از یک شکاف سوءاستفاده می‌کنند و پیش از تکمیل عملیات کلیدی یا به‌روزرسانی مقادیر، دوباره وارد توابع می‌شوند.

بازگشت مجدد تک‌تابعی: این زمانی رخ می‌دهد که یک قرارداد با یک قرارداد مخرب تعامل می‌کند و به دومی اجازه می‌دهد دوباره وارد یک تابع شود. برای مثال، قراردادهای مخرب می‌توانند به‌طور مداوم دوباره وارد تابع 'withdrawBalance' شوند و پیش از به‌روزرسانی موجودی‌ها، اتر بیشتری را تخلیه کنند.

حملات قابل توجه:

  • The DAO (2016): پس از جمع‌آوری 150 میلیون دلار، به دلیل آسیب‌پذیری‌های کدنویسی هک شد. این امر منجر به انشعاب در شبکه اتریوم شد.
  • PolyDex (2021): به دلیل حمله بازگشتی (reentrancy) به قرارداد هوشمند PLX Locker، 500 هزار دلار از دست داد.
  • Bacon Protocol (2022): به دلیل یک باگ بازگشتی (reentrancy) در تابع lend()، 1 میلیون دلار ضرر متحمل شد.
  • Lendf.Me (2020): حدود ۲۴.۷ میلیون دلار در چندین ارز دیجیتال از دست رفت.

**بازورود بین‌تابعی:** از وضعیت‌های مشترک میان توابع مختلف و محافظت ضعیف در برابر بازورود ناشی می‌شود. مثال «balances» در بالا نشان می‌دهد که با وجود محافظت «withdrawAll»، مهاجمان همچنان می‌توانند از تابع «transfer» سوءاستفاده کنند.

حوادث بدنام:

  • DFX Finance (۲۰۲۲): بیش از ۷ میلیون دلار به دلیل حمله‌ای که از تابعی بدون محافظت در برابر بازورود سوءاستفاده کرد، از دست رفت.
  • Hundred Finance (۲۰۲۲): حدود ۶.۵ میلیون دلار پس از آنکه حمله بازورود از تابع borrowFresh سوءاستفاده کرد، از دست رفت.
  • Fei Protocol (۲۰۲۲): حدود ۸۰ میلیون دلار از یک حمله با سوءاستفاده از حفره بازگشت‌پذیری از دست داد.

**بازگشت‌پذیری بین‌قراردادی:** ناشی از وضعیت‌های مشترک میان قراردادهای مختلف و ترتیب‌های نادرست تغییر متغیرهاست. حتی اگر توابع محافظت داشته باشند، توابع دیگر مانند «burnAccount» همچنان قابل سوءاستفاده هستند.

حملات برجسته:

  • Rari Capital (۲۰۲۱): در کمتر از یک ساعت حدود ۱۰ میلیون دلار (حدود ۲۶۰۰ ETH) از دست داد.
  • ValueDefi (۲۰۲۱): ۵۳۴۵.۳۱۴ WBNB را به دلیل محاسبات نادرست سهم که به داده‌های خارجی وابسته بود از دست داد.

بازگشت‌پذیری فقط‌خواندنی:

ری‌انترنسی فقط‌خواندنی از تابعی سوءاستفاده می‌کند که با وجود تغییرندادن وضعیت قرارداد، همچنان می‌تواند هنگام ناسازگاری وضعیت، خروجی‌های نادرست تولید کند.

حملات قابل توجه:

  • QuickSwap (2022): سوءاستفاده‌گران با استفاده نادرست از وام آنی، قیمت لحظه‌ای دارایی را دستکاری کردند و 138 ETH و 700 توکن MATIC را کلاهبرداری کردند. این امر به دلیل نقصی در اوراکل Curve LP ممکن شد.
  • dForce (2023): یک باگ ری‌انترنسی فقط‌خواندنی در کد دسترسی به اوراکل‌های قیمت در زنجیره‌های Arbitrum و Optimism با Curve Finance وجود داشت.
  • Sentimente (2023): حمله‌ای با سوءاستفاده از نقص ری‌انترنسی فقط‌خواندنی به سرقت 1 میلیون دلار منجر شد. خوشبختانه، 90% آن توسط مرتکب بازگردانده شد.
  • **Sturdy (2023)**حدود ۴۴۲ ETH به دلیل مشکل ورود مجدد فقط‌خواندنی در Balancer از دست رفت که در آن قیمت B-stETH-STABLE دستکاری شد.

پیشگیری از آسیب‌پذیری ورود مجدد:

  1. همیشه الگوی بررسی-اثر-تعامل را رعایت کنید.
  2. برای همه عملیات حساس از محافظت در برابر ورود مجدد استفاده کنید.
  3. هر فراخوانی خارجی را با دقت مدیریت کنید.

سرریز عدد صحیح:

وقتی محاسبات از حد فراتر می‌روند، سرریز می‌شوند و اغلب به مقادیر بسیار کوچک یا بسیار بزرگ منجر می‌شوند.

حملات نمونه:

  • BeautyChain (2018): مهاجمان 10^58 توکن BEC را از طریق سرریز عدد صحیح به دست آوردند و مبلغ حیرت‌انگیز 900 میلیون دلار را تخلیه کردند.
  • Poolz (2023): منجر به ضرری حدود 665,000 دلار در زنجیره‌های Ethereum، Binance و Polygon شد.

اقدامات مقابله با سرریز عدد صحیح:

  1. از روش‌های محاسبه ایمن مانند کتابخانه safeMath استفاده کنید.
  2. بررسی محدوده را در اولویت قرار دهید تا اطمینان حاصل شود نتایج در محدوده باقی می‌مانند.
  3. از نسخه کامپایلر Solidity 0.8.0 یا بالاتر برای تشخیص خودکار سرریز استفاده کنید.

کنترل دسترسی:
آسیب‌پذیری‌های کنترل دسترسی از نبود محدودیت‌های دسترسی سخت‌گیرانه روی توابعی که عملیات حیاتی را انجام می‌دهند ناشی می‌شود.

  • حملات شاخص:
  • DAOMaker (۲۰۲۱): حدود ۴ میلیون دلار پس از آنکه init تابع آسیب‌پذیر باقی ماند، به سرقت رفت.
  • GymNetwork (۲۰۲۲): بهره‌جویان از یک نقص احراز هویت در depositFromOtherContract() سوءاستفاده کردند و بدون هیچ پرداخت واقعی، افزایش غیرمجاز موجودی را ممکن ساختند. خسارت؟ حدود 2,475.91 WBNB.
  • Tempdao (2023): رویکرد سهل‌انگارانه در کنترل دسترسی برای تابع migrateStake منجر به خسارتی بیش از 2.34 میلیون دلار شد.

آسیب‌پذیری کنترل دسترسی

  • توضیحات: آسیب‌پذیری‌هایی که به دلیل سازوکارهای محدودسازی ناکافی برای کنترل دسترسی و امتیازات عملیات خاص در یک سیستم به وجود می‌آیند.

اقدامات پیشگیرانه:

  1. بررسی دقیق مجوزها: همیشه پروتکل‌های سخت‌گیرانه مجوز را برای توابع اجرا کنید، به‌ویژه توابعی که عملیات حساس را مدیریت می‌کنند.
  2. سازوکار چندامضایی: برای کارهایی که به تصمیم‌گیری مشترک نیاز دارند، از پروتکل‌های چندامضایی استفاده کنید که پیش از اجرای عملیات حساس به چندین تأیید نیاز دارند.

بردارهای حمله رایج

  • توضیحات: روش‌ها یا کانال‌های مختلفی که مهاجمان از طریق آن‌ها از آسیب‌پذیری‌های یک سیستم، عمدتاً در قراردادهای هوشمند، سوءاستفاده می‌کنند.

نمونه‌های قابل توجه:

  • حملات وام لحظه‌ای: از ویژگی وام‌گیری لحظه‌ای سیستم‌های مالی غیرمتمرکز برای انجام فعالیت‌های مخرب سوءاستفاده می‌کند.
  • پیش‌دستی: مهاجمان از تراکنش در انتظار کاربر دیگر مطلع می‌شوند و با ارائه کارمزد گس بالاتر روی آن اقدام می‌کنند.

حمله وام لحظه‌ای

  • توضیحات: هرچند FlashLoan به‌خودی‌خود یک حمله نیست، امکانی در DeFi است که به کاربران اجازه می‌دهد مبالغ قابل‌توجهی را فوراً و بدون وثیقه قرض بگیرند. این امکان به دلیل نقص‌های منطقی در تعاملات و روابط قراردادها مورد سوءاستفاده قرار گرفته است.

حملات قابل‌توجه:

  1. Harves Finance (2020.10.26): منجر به ضرر 38 میلیون دلاری شد.
  2. InverseFinance (2022.6.16): منجر به از دست رفتن 53.2445 WBTC و 99,976.29 USDT شد.
  3. NewFreeDAO (2022.9.8): ۴,۴۸۱ WBNB تخلیه شد که معادل تقریباً ۱.۲۵ میلیون دلار است.
  4. Lodestar (۲۰۲۲.۱۲.۱۱): از طریق دستکاری قیمت اوراکل مورد سوءاستفاده قرار گرفت.
  5. 0vix (۲۰۲۳.۴.۲۸): منجر به ضرر ۲ میلیون دلاری در زنجیره Polygon شد.

توصیه‌های پیشگیری:

  1. ویژگی‌های Flashloan را در طول توسعه پروژه بشناسید.
  2. برای تعیین دقیق قیمت، از میانگین‌گیری وزنی زمانی یا چند اوراکل استفاده کنید.

پیش‌دستی

  • توضیحات: مهاجم از memPool از تراکنش کاربر دیگری آگاه می‌شود و با ارائه کارمزد گس بالاتر از آن سوءاستفاده می‌کند.

حملات قابل توجه:

  1. Sushi Badger Digg (2021.1.25): منجر به از دست رفتن 81.68 ETH شد.
  2. استخر Sushiswap Ape-ETH (2022.5.17): مهاجم حدود 0.3 ETH سود کرد.
  3. Uniswap (2023.4.2): خسارتی حدود 25 میلیون دلار از طریق حمله ساندویچی ایجاد کرد.

توصیه‌های پیشگیری:

  1. هنگام معامله از محافظت در برابر لغزش استفاده کنید.
  2. معاملات را در ساعات غیر اوج، به‌ویژه در بازارهای پرنوسان انجام دهید.
  3. از FlashBot rpc توسط 1inch برای ارسال مستقیم معاملات به ماینرها استفاده کنید و بدین ترتیب memPool را دور بزنید.

خلاصه

تبریک! شما ماژول 2 - آسیب‌پذیری‌های قرارداد هوشمند: بررسی عمیق حملات بازگشتی و اکسپلویت‌های رایج را به پایان رساندید

بیایید آموخته‌هایتان را مرور کنیم:

آسیب‌پذیری‌های ورود مجدد - مهاجمان با ورود مجدد به توابع پیش از تکمیل کامل آن‌ها، از شکاف‌ها سوءاستفاده می‌کنند.

  • ورود مجدد تک‌تابعی: یک قرارداد مخرب به تابعی در قرارداد دیگری وارد می‌شود.
  • ورود مجدد بین‌تابعی: حالت‌های مشترک میان توابع مختلف به دلیل محافظت ضعیف در برابر ورود مجدد مورد سوءاستفاده قرار می‌گیرند.
  • ورود مجدد بین‌قراردادی: از حالت‌های مشترک میان قراردادهای مختلف سوءاستفاده می‌کند.
  • بازگشت‌پذیری فقط‌خواندنی: از تابعی سوءاستفاده می‌کند که هنگام ناسازگاری حالت، خروجی‌های نادرست تولید می‌کند.

سرریز عدد صحیح - محاسباتی که از محدودیت‌های تعیین‌شده فراتر می‌روند و به مقادیر حدی منجر می‌شوند.

آسیب‌پذیری‌های کنترل دسترسی - ناشی از نبود محدودیت‌های دسترسی سخت‌گیرانه بر توابع حیاتی است.

بردارهای رایج حمله - روش‌هایی که مهاجمان از طریق آن‌ها از آسیب‌پذیری‌های سیستم سوءاستفاده می‌کنند.

**حمله FlashLoan** - ویژگی‌ای در DeFi که امکان وام‌گیری بزرگ و فوری بدون وثیقه را فراهم می‌کند، اما به دلیل نقص‌های منطقی مورد سوءاستفاده قرار می‌گیرد.

حمله پیش‌دستی (Front-running)- مهاجمان از تراکنش‌های در انتظار آگاه می‌شوند و با ارائه کارمزد گس بالاتر از آن سود می‌برند.

این مقاله توسط این مجموعه ارائه شده است:

خلاصه — تصویر