DoS With Block Gas Limit چیست؟

DoS With Block Gas Limit چیست؟
هنگامی که قراردادهای هوشمند مستقر میشوند یا توابع داخل آنها فراخوانی میشوند، اجرای این اقدامات همیشه به مقدار مشخصی گاز نیاز دارد که بر اساس میزان محاسبات لازم برای تکمیل آنها تعیین میشود. شبکه اتریوم EVM یک محدودیت گاز بلوک مشخص میکند و مجموع تمام تراکنشهای موجود در یک بلوک نمیتواند از این حد بیشتر شود.
الگوهای برنامهنویسی که در برنامههای متمرکز بیضرر هستند، میتوانند در قراردادهای هوشمند به شرایط انکار سرویس (DoS) منجر شوند، زمانی که هزینه اجرای یک تابع از محدودیت گاز بلوک فراتر رود. بهعنوان مثال، تغییر دادن یک آرایه با اندازه نامشخص که با گذشت زمان بزرگتر میشود، میتواند به چنین شرایط DoS منجر شود.
زمانی که محدودیت گس تراکنش از محدودیت گس بلاک فراتر رود
اگر میزان گس موردنیاز یک تراکنش بیشتر از حد گس بلاک Block Gas باشد، آن تراکنش اصلاً در بلاک ثبت نخواهد شد. با این حال، نکته مهم این است که تراکنش اجرا یا پردازش نمیشود و به این دلیل که هیچ تغییری در وضعیت (State) ایجاد نمیکند، مفهوم بازگشت (Revert) در اینجا صدق نمیکند. در عوض، تراکنش صرفاً ماین نشده و در بلاک قرار نمیگیرد.
حمله انکار سرویس (DoS) از طریق افزایش مصرف گس در حلقههای نامحدود
هر بار اجرای یک حلقه در قراردادهای هوشمند، مقداری گس Gas مصرف میکند. هرچه تعداد تکرارهای حلقه بیشتر باشد، هزینه گس لازم برای اجرای تابع نیز افزایش مییابد. اگر شرایطی فراهم شود که یک مهاجم یا حتی فعالیت عادی کاربران بتواند تعداد تکرارهای یک حلقه را به میزان قابلتوجهی افزایش دهد، ممکن است منجر به افزایش چشمگیر گس Gas موردنیاز برای اجرای تابع شود، تا جایی که این مقدار از حد گس بلاک Block Gas فراتر برود.
اگر این اتفاق بیفتد، تراکنش به دلیل مصرف بیش از حد گس Gas اجرا نخواهد شد و در نتیجه یک آسیبپذیری انکار سرویس (DoS) ایجاد میشود. این وضعیت باعث میشود که تابع دیگر قابلاجرا نباشد، زیرا هر تلاشی برای اجرای آن، بیشتر از مقدار مجاز گس Gas در یک بلاک مصرف خواهد کرد.
در نتیجه، هر قابلیت قراردادی که به این تابع وابسته باشد، از کار خواهد افتاد. این شرایط میتواند منجر به مسدود شدن عملکردهای حیاتی قرارداد هوشمند Smart Contract شود و حتی ممکن است وجوه یا داراییهای ذخیرهشده در قرارداد برای همیشه قفل شوند، زیرا قرارداد دیگر نمیتواند عملیات لازم برای آزادسازی آنها را انجام دهد.
این ریسک بهویژه در قراردادهایی نگرانکننده است که به کاربران ناشناس اجازه میدهند تا بر تعداد تکرارهای حلقه تأثیر بگذارند. اگر مهاجم بتواند مقدار ورودی را بهگونهای تغییر دهد که تعداد اجرای حلقه بهطور غیرعادی افزایش یابد، میتواند باعث غیرفعال شدن برخی از توابع قرارداد شود و در نهایت دسترسیپذیری و کارایی قرارداد هوشمند را مختل کند.
DoS With Block Gas Limit چه تاثیری دارد؟
حمله Gas Limit DoS از طریق حلقههای نامحدود: اگر چنین شرایطی رخ دهد، تراکنش به دلیل تجاوز از محدودیت گاز نمیتواند اجرا شود، که منجر به یک آسیبپذیری انکار سرویس (DoS) میشود. در این حالت، تابع غیرقابل فراخوانی میشود، زیرا هر تلاش برای اجرای آن همواره گازی بیشتر از مقدار مجاز در یک بلوک مصرف خواهد کرد.
چه اقدامی باید انجام شود؟
1- در صورتی که انتظار دارید آرایههای بزرگی داشته باشید که با گذشت زمان رشد میکنند، احتیاط لازم است. اقداماتی که نیاز به پیمایش کل ساختار داده دارند، باید اجتناب شوند.
2- اگر مجبور هستید بر روی آرایهای با اندازه نامشخص پیمایش کنید، باید برنامهریزی کنید که این عملیات ممکن است به چندین بلوک نیاز داشته باشد و در نتیجه به چندین تراکنش نیاز خواهد داشت.