Reentrancy Attack چیست؟

حمله بازگشتی (Reentrancy Attack) چیست؟
حمله بازگشتی (Reentrancy Attack) از آسیبپذیری موجود در قراردادهای هوشمند استفاده میکند زمانی که یک تابع قبل از بهروزرسانی وضعیت خود، تماس خارجی به قرارداد دیگری برقرار میکند. این امر به قرارداد خارجی، که ممکن است مخرب باشد، اجازه میدهد تا دوباره وارد تابع اصلی شود و اقداماتی مانند برداشت وجوه را با استفاده از همان وضعیت تکرار کند. از طریق این نوع حملات، مهاجم ممکن است قادر باشد تمام وجوه موجود در یک قرارداد را تخلیه کند.
حمله بازگشتی (Reentrancy Attack) چه تاثیری دارد؟
1- تخلیه وجوه: فوریترین و تاثیرگذارترین پیامد، تخلیه وجوه قرارداد است. مهاجمان از آسیبپذیریها بهرهبرداری میکنند تا مبلغ بیشتری از آنچه مستحق آن هستند برداشت کنند و ممکن است موجودی قرارداد را به طور کامل خالی کنند.
2- فراخوانیهای غیرمجاز توابع: مهاجم میتواند فراخوانیهای غیرمجاز به توابع قرارداد را ایجاد کند. این امر میتواند منجر به اجرای اقدامات ناخواسته در داخل قرارداد یا سیستمهای مرتبط شود.
چه اقداماتی باید انجام شود؟
1- تغییر وضعیت قبل از فراخوانی قراردادهای خارجی: همیشه اطمینان حاصل کنید که هر تغییر وضعیت (مانند بهروزرسانی موجودیها) قبل از فراخوانی قراردادهای خارجی انجام میشود. به عبارت دیگر، موجودیها یا کدهای داخلی را قبل از فراخوانی کد خارجی بهروزرسانی کنید.
2- استفاده از اصلاحکنندههای تابعی که از بازگشتپذیری جلوگیری میکنند: از اصلاحکنندههایی مانند Re-entrancy Guard که توسط OpenZeppelin ارائه شدهاند، استفاده کنید تا از حملات بازگشتی جلوگیری شود.