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

در این صفحه
قراردادهای هوشمند با کارایی، شفافیت و ویژگیهای تغییرناپذیر خود در حال متحول کردن صنایع جهانی هستند. با این حال، طراحی باز و خودکار آنها نیز آنها را در معرض خطر قرار میدهد. برای به حداکثر رساندن پتانسیل آنها و در عین حال به حداقل رساندن تهدیدها، درک آسیبپذیریها و مسیرهای حمله احتمالی آنها حیاتی است. ساخت و نگهداری این قراردادها نیازمند توجه دقیق و پایبندی به بهترین شیوهها است. این مقاله به آسیبپذیریهای رایج میپردازد و برای افزایش درک، آنها را با موارد دنیای واقعی نشان میدهد. بیایید نگاهی به مقاله زیر بیندازیم که با لطف 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 دستکاری شد.
پیشگیری از آسیبپذیری ورود مجدد:
- همیشه الگوی بررسی-اثر-تعامل را رعایت کنید.
- برای همه عملیات حساس از محافظت در برابر ورود مجدد استفاده کنید.
- هر فراخوانی خارجی را با دقت مدیریت کنید.
سرریز عدد صحیح:
وقتی محاسبات از حد فراتر میروند، سرریز میشوند و اغلب به مقادیر بسیار کوچک یا بسیار بزرگ منجر میشوند.
حملات نمونه:
- BeautyChain (2018): مهاجمان 10^58 توکن BEC را از طریق سرریز عدد صحیح به دست آوردند و مبلغ حیرتانگیز 900 میلیون دلار را تخلیه کردند.
- Poolz (2023): منجر به ضرری حدود 665,000 دلار در زنجیرههای Ethereum، Binance و Polygon شد.
اقدامات مقابله با سرریز عدد صحیح:
- از روشهای محاسبه ایمن مانند کتابخانه safeMath استفاده کنید.
- بررسی محدوده را در اولویت قرار دهید تا اطمینان حاصل شود نتایج در محدوده باقی میمانند.
- از نسخه کامپایلر Solidity 0.8.0 یا بالاتر برای تشخیص خودکار سرریز استفاده کنید.
کنترل دسترسی:
آسیبپذیریهای کنترل دسترسی از نبود محدودیتهای دسترسی سختگیرانه روی توابعی که عملیات حیاتی را انجام میدهند ناشی میشود.
- حملات شاخص:
- DAOMaker (۲۰۲۱): حدود ۴ میلیون دلار پس از آنکه
initتابع آسیبپذیر باقی ماند، به سرقت رفت. - GymNetwork (۲۰۲۲): بهرهجویان از یک نقص احراز هویت در depositFromOtherContract() سوءاستفاده کردند و بدون هیچ پرداخت واقعی، افزایش غیرمجاز موجودی را ممکن ساختند. خسارت؟ حدود 2,475.91 WBNB.
- Tempdao (2023): رویکرد سهلانگارانه در کنترل دسترسی برای تابع migrateStake منجر به خسارتی بیش از 2.34 میلیون دلار شد.
آسیبپذیری کنترل دسترسی
- توضیحات: آسیبپذیریهایی که به دلیل سازوکارهای محدودسازی ناکافی برای کنترل دسترسی و امتیازات عملیات خاص در یک سیستم به وجود میآیند.
اقدامات پیشگیرانه:
- بررسی دقیق مجوزها: همیشه پروتکلهای سختگیرانه مجوز را برای توابع اجرا کنید، بهویژه توابعی که عملیات حساس را مدیریت میکنند.
- سازوکار چندامضایی: برای کارهایی که به تصمیمگیری مشترک نیاز دارند، از پروتکلهای چندامضایی استفاده کنید که پیش از اجرای عملیات حساس به چندین تأیید نیاز دارند.
بردارهای حمله رایج
- توضیحات: روشها یا کانالهای مختلفی که مهاجمان از طریق آنها از آسیبپذیریهای یک سیستم، عمدتاً در قراردادهای هوشمند، سوءاستفاده میکنند.
نمونههای قابل توجه:
- حملات وام لحظهای: از ویژگی وامگیری لحظهای سیستمهای مالی غیرمتمرکز برای انجام فعالیتهای مخرب سوءاستفاده میکند.
- پیشدستی: مهاجمان از تراکنش در انتظار کاربر دیگر مطلع میشوند و با ارائه کارمزد گس بالاتر روی آن اقدام میکنند.
حمله وام لحظهای
- توضیحات: هرچند FlashLoan بهخودیخود یک حمله نیست، امکانی در DeFi است که به کاربران اجازه میدهد مبالغ قابلتوجهی را فوراً و بدون وثیقه قرض بگیرند. این امکان به دلیل نقصهای منطقی در تعاملات و روابط قراردادها مورد سوءاستفاده قرار گرفته است.
حملات قابلتوجه:
- Harves Finance (2020.10.26): منجر به ضرر 38 میلیون دلاری شد.
- InverseFinance (2022.6.16): منجر به از دست رفتن 53.2445 WBTC و 99,976.29 USDT شد.
- NewFreeDAO (2022.9.8): ۴,۴۸۱ WBNB تخلیه شد که معادل تقریباً ۱.۲۵ میلیون دلار است.
- Lodestar (۲۰۲۲.۱۲.۱۱): از طریق دستکاری قیمت اوراکل مورد سوءاستفاده قرار گرفت.
- 0vix (۲۰۲۳.۴.۲۸): منجر به ضرر ۲ میلیون دلاری در زنجیره Polygon شد.
توصیههای پیشگیری:
- ویژگیهای Flashloan را در طول توسعه پروژه بشناسید.
- برای تعیین دقیق قیمت، از میانگینگیری وزنی زمانی یا چند اوراکل استفاده کنید.
پیشدستی
- توضیحات: مهاجم از memPool از تراکنش کاربر دیگری آگاه میشود و با ارائه کارمزد گس بالاتر از آن سوءاستفاده میکند.
حملات قابل توجه:
- Sushi Badger Digg (2021.1.25): منجر به از دست رفتن 81.68 ETH شد.
- استخر Sushiswap Ape-ETH (2022.5.17): مهاجم حدود 0.3 ETH سود کرد.
- Uniswap (2023.4.2): خسارتی حدود 25 میلیون دلار از طریق حمله ساندویچی ایجاد کرد.
توصیههای پیشگیری:
- هنگام معامله از محافظت در برابر لغزش استفاده کنید.
- معاملات را در ساعات غیر اوج، بهویژه در بازارهای پرنوسان انجام دهید.
- از FlashBot rpc توسط 1inch برای ارسال مستقیم معاملات به ماینرها استفاده کنید و بدین ترتیب memPool را دور بزنید.
خلاصه
تبریک! شما ماژول 2 - آسیبپذیریهای قرارداد هوشمند: بررسی عمیق حملات بازگشتی و اکسپلویتهای رایج را به پایان رساندید
بیایید آموختههایتان را مرور کنیم:
آسیبپذیریهای ورود مجدد - مهاجمان با ورود مجدد به توابع پیش از تکمیل کامل آنها، از شکافها سوءاستفاده میکنند.
- ورود مجدد تکتابعی: یک قرارداد مخرب به تابعی در قرارداد دیگری وارد میشود.
- ورود مجدد بینتابعی: حالتهای مشترک میان توابع مختلف به دلیل محافظت ضعیف در برابر ورود مجدد مورد سوءاستفاده قرار میگیرند.
- ورود مجدد بینقراردادی: از حالتهای مشترک میان قراردادهای مختلف سوءاستفاده میکند.
- بازگشتپذیری فقطخواندنی: از تابعی سوءاستفاده میکند که هنگام ناسازگاری حالت، خروجیهای نادرست تولید میکند.
سرریز عدد صحیح - محاسباتی که از محدودیتهای تعیینشده فراتر میروند و به مقادیر حدی منجر میشوند.
آسیبپذیریهای کنترل دسترسی - ناشی از نبود محدودیتهای دسترسی سختگیرانه بر توابع حیاتی است.
بردارهای رایج حمله - روشهایی که مهاجمان از طریق آنها از آسیبپذیریهای سیستم سوءاستفاده میکنند.
**حمله FlashLoan** - ویژگیای در DeFi که امکان وامگیری بزرگ و فوری بدون وثیقه را فراهم میکند، اما به دلیل نقصهای منطقی مورد سوءاستفاده قرار میگیرد.
حمله پیشدستی (Front-running)- مهاجمان از تراکنشهای در انتظار آگاه میشوند و با ارائه کارمزد گس بالاتر از آن سود میبرند.
این مقاله توسط این مجموعه ارائه شده است:
