آسیب پذیری های قرارداد هوشمند
0

آسیب پذیری های قرارداد هوشمند

بازدید : 1386

در این مقاله آسیب پذیری های قرارداد هوشمند را مورد بحث قرار می دهیم. قراردادهای هوشمند قطعات نرم افزاری خوداجرا هستند که روی یک بلاکچین مستقر و اجرا می شوند. استفاده از قراردادهای هوشمند مبتنی بر بلاکچین برای مدیریت امنیت و شفافیت جهت کنترل تراکنش ها و ارتباطات در محیط های وابسته به اینترنت یک زمینه تحقیقاتی است.

[irp posts=”10720″ name=”قرارداد هوشمند یا اسمارت کانترکت چیست؟”]

با این وجود نوشتن قرارداد هوشمند امن و قابل اعتماد می تواند به دلیل پیچیدگی زبانهای برنامه نویسی و قابلیت های آنها یک چالش بزرگ باشد. رویدادهای مهمی رخ داده که نشان می دهد قراردادهای هوشمند می توانند دارای آسیب پذیری های امنیتی متنوعی باشند و باعث بروز ضررهای مالی شوند.

smartcontractvulnerabilities
آسیب پذیری های قرارداد هوشمند

به عنوان برنامه های کامپیوتری قراردادهای هوشمند نیز دارای خطا هستند.از این رو نوشتن قرارداد قابل اعتماد و تست آن قبل از استقرار بر روی بستر بلاکچین بسیار اهمیت دارد. آسیب پذیری های مربوط به قراردادها می تواند ناشی از آسی پذیری های اتریوم و سالیدیتی باشد.

آسیب پذیری های قرارداد هوشمند

محیط اجرایی نا آشنا : اتریوم با محیط های اجرایی مدیریت شده مثل موبایل ، PC و یا ابر متفاوت است.توسعه دهندگان عادت ندارند که کد آنها توسط گره های یک شبکه جهانی ناشناس ، بی اعتماد اجرا شود.

پشته نرم افزاری جدید: پشته اتریوم که شامل کامپایلر سالیدیتی ، EVM ، لایه توافق و … است، با وجود آسیب پذیری های متنوع هنوز در حال توسعه می باشد و کامل نشده است.

توانایی بسیار محدود در اصلاح قراردادها : به خاطر ماهیت تغییر ناپذیر بودن بلاکچین، یک قرارداد مستقر شده در بلاکچین نمی تواند اصلاح شود.

مهاجمان ناشناس با انگیزه مالی : در مقایسه با سایر جرایم سایبری، سواستفاده از قراردادهای هوشمند سود بیشتری دارد. چون قیمت ارزهای دیجیتال به سرعت در حال افزایش است. انتقال آنها سریعتر بوده و به دلیل ناشناس بودن خطر مجازات کمتری دارد.

وجود ماینر های مخرب : یک ماینر مخرب می تواند ترتیب تراکنش ها را تغییر داده و با اولویت بندی آنها سود بدست آورد. در صورتی که قرارداد نوشته شده به وضعیت بلاک وابسته باشد ،ماینر می تواند با دستکاری آن، وضعیت را تغییر دهد.بنابراین هنگام نوشتن قرارداد باید به این موارد توجه کرد.

آسیب پذیری های مربوط به سالیدیتی

کاربران و توسعه دهندگان دانش کمی درباره استفاده و پیاده سازی قراردادهای هوشمند دارند چرا که هنوز این فناوری در مراحل اولیه خود به سر می برد و نوپاست.

برخی از مهمترین آسیب پذیری ها به شرح زیر است:

مساله Re-entrancy :

در سالیدیتی تابعی به نام fallback وجود دارد.این تابع نام و پارامتری ندارد. و به صورت دلخواه برنامه نویسی می شود.از آنجا که هر تابع با یک امضا (بر اساس نام و نوع پارامترها) شناسایی می شود، به محض اینکه تابعی فراخوانی می شود امضای آن به عنوان ورودی به قرارداد فراخواننده ارسال می شود.

Re-entrancy
Re-entrancy در قراردادهوشمند

اگر مقادیر منطبق باشند اجرا به کد مربوطه پرش می کند و در غیر این صورت به تابع fallback پرش می کند.بنابراین در قرارداد تابعی بدون امضا وجود داشته باشد به این تابع ارجاع داده می شود. این امر به هکر اجازه می دهد توابع را به صورت مکرر فراخوانی کرده و اتر یا gas موجود را مصرف کند.حمله معروف DAO هم در اثر همین مساله رخ داد.

مساله وابستگی به ترتیب تراکنش ها :

یک بلاک متشکل از مجموعه ای از تراکنش هاست.وضعیت بلاکچین هر چند دقیقه در طول هر دوره (epoch) به روز رسانی می شود.وضعیت قراردادهای هوشمند به وسیله مقادیر فیلدها و موجودی فعلی تعیین می شود.هنگامی که یک کاربر تراکنشی را برای فراخوانی یک قرارداد در شبکه آغاز می کند، هیچ تضمینی در مورد اینکه آیا تراکنش در همان وضعیتی که قرارداد شروع شده بود انجام می شود یا خیر، وجود ندارد.

transaction-ordering
وابستگی به ترتیب تراکنش ها

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

مساله وابستگی به زمان :

به طور معمول زمان یک بلاک با زمان سیستم محلی ماینر تنظیم می شود.وقتی یک بلاک استخراج می شود، ماینر زمان را برای هر بلاک مشخص می کند.قرارداد هوشمند از زمان بلاک به عنوان یک شرط اولیه برای اجرای برخی از عملیات حیاتی استفاده می کند. به دلیل انعطاف پذیری زمان بلاک توسط ماینر ، یک ماینر خرابکار می تواند زمان بلاک متفاوتی را انتخاب کند قراردادهای وابسته به زمان را دستکاری کند.

عدم مدیریت استثنا در سالیدیتی :

در قراردادها اغلب نیاز به فراخوانی های متعدد داریم.در حین فراخوانی ها ممکن است موارد استثنایی رخ بدهد که منجر به خاتمه قرارداد شده و یا عملکرد آن مختل شود.استثناها در موقعیت های مختلفی رخ می دهند.مثلا :

  • جایی که gas کافی برای اجرای عملیات وجود نداشته باشد.
  • جایی که stack limit بیش از اندازه فراخوانی شده باشد.

عدم مدیریت صحیح استثناها منجر به ضررهای مالی هم می شود.

سخن پایانی

قراردادهای هوشمند برنامه هایی هستند که برای بیان منطق کسب و کار و مدیریت داده ها و دارایی ها بر بستر بلاکچین طراحی شده اند.در این مقاله به بررسی آسیب پذیری های قراردادهای هوشمند پرداخته شد.از جمله مسائل مربوط به فراخوانی های مجدد یا Re-entrancy، وابستگی قرارداد ها به زمان یا ترتیب تراکنش ها که هر کدام به تفصیل شرح داده شد.

[irp posts=”10734″ name=”چرخه حیات قرارداد هوشمند”]

0
0
برای پیشنهاد این مقاله به دیگر کاربران عزیز فکت کوینز روی دکمه زیر کلیک کنید
اشتراک در
اطلاع از

0 نظرات
بازخورد (Feedback) های اینلاین
مشاهده همه نظرات
محل تبلیغ
coinex
محاسبه‌گر ارزهای دیجیتال
ارز معادل
تومان

محاسبه با مبلغ تتر : تومان

0
نظر خود را بنویسید !x