آسیب پذیری های قرارداد هوشمند
در این مقاله از فکت کوینز آسیب پذیری های قرارداد هوشمند را مورد بحث قرار میدهیم. قراردادهای هوشمند کدهای نرم افزاری خوداجراشوندهای هستند که روی یک بلاک چین پیادهسازی و اجرا میشوند. استفاده از قراردادهای هوشمند مبتنی بر بلاکچین برای امنیت و شفافیت یک شبکه بسیار مفید است.
[irp posts=”10720″ name=”قرارداد هوشمند یا اسمارت کانترکت چیست؟”]
با این وجود نوشتن قرارداد هوشمند امن و قابل اعتماد میتواند به دلیل پیچیدگی زبانهای برنامهنویسی یک چالش بزرگ باشد. اما قراردادهای هوشمند میتوانند دارای آسیب پذیریهای امنیتی متنوعی باشند و باعث بروز ضررهای مالی شوند.
قراردادهای هوشمند نیز به عنوان برنامه های کامپیوتری دارای خطا هستند.از این رو نوشتن قرارداد قابل اعتماد و آزمایش آن قبل از پیاده سازی روی بستر بلاکچین بسیار اهمیت دارد. آسیب پذیری های قرارداد هوشمند می تواند ناشی از آسیب پذیریهای اتریوم و زبان سالیدیتی باشد.
آسیب پذیری های قرارداد هوشمند
- محیط اجرایی نا آشنا: محیط اتریوم با محیطهای اجرایی مثل موبایل، کامپیوتر و یا ابر (Cloud) متفاوت است. توسعه دهندگان عادت ندارند که کد آنها توسط گرههای یک شبکه جهانی ناشناس، اجرا شود.
- پشته نرم افزاری جدید: پشته (استک) اتریوم که شامل کامپایلر سالیدیتی، EVM، لایه اجماع و … است، با وجود آسیب پذیری های متنوع هنوز در حال توسعه میباشد و کامل نشده است.
- توانایی بسیار محدود در اصلاح قراردادها: به خاطر ماهیت تغییر ناپذیر بلاکچین، یک قرارداد پیادهسازی شده در بلاک چین نمیتواند اصلاح شود.
- مهاجمان ناشناس با انگیزه مالی: در مقایسه با سایر جرایم سایبری، سواستفاده از قراردادهای هوشمند سود بیشتری دارد. چون قیمت ارزهای دیجیتال به سرعت در حال افزایش است. انتقال آنها سریعتر بوده و به دلیل ناشناس بودن خطر مجازات کمتری دارد.
- وجود ماینرهای مخرب: یک ماینر مخرب میتواند ترتیب تراکنشها را تغییر داده و با اولویتبندی آنها سود بدست آورد. در صورتی که قرارداد نوشته شده به وضعیت بلاک وابسته باشد، ماینر میتواند با دستکاری آن، وضعیت را تغییر دهد. بنابراین هنگام نوشتن قرارداد باید به این موارد توجه کرد.
آسیب پذیری های قرارداد هوشمند سالیدیتی
کاربران و توسعه دهندگان دانش کمی درباره استفاده و پیاده سازی قراردادهای هوشمند دارند چرا که هنوز این فناوری در مراحل اولیه خود به سر می برد و نوپاست.
برخی از مهمترین آسیب پذیری ها به شرح زیر است:
مساله Re-entrancy
بیشتر بخوانید : Open Interest چیست؟ از اهمیت آن در معاملات بیتکوین اطلاع دارید؟
بیشتر بخوانید : دورهای تأمین مالی؛ آشنایی با مفهوم Funding Rounds
در زبان سالیدیتی تابعی به نام Fallback وجود دارد.این تابع نام و پارامتری ندارد. و به صورت دلخواه برنامه نویسی میشود.از آنجا که هر تابع با یک امضا (بر اساس نام و نوع پارامترها) شناسایی میشود، به محض اینکه تابعی فراخوانده میشود امضای آن به عنوان ورودی به قرارداد فراخواننده ارسال میشود.
بیشتر بخوانید : اندیکاتور هش ریبان (hash ribbons indicator) چیست؟
اگر مقادیر منطبق باشند اجرا به کد مربوطه پرش میکند و در غیر این صورت به تابع Fallback پرش می کند. بنابراین اگر در قرارداد تابعی بدون امضا وجود داشته باشد به این تابع ارجاع داده میشود. این امر به هکر اجازه میدهد توابع را به صورت مکرر فراخوانده و اتر یا گس (Gas) موجود را مصرف کند. حمله معروف DAO اتریوم هم در اثر همین مساله رخ داد.
بیشتر بخوانید : Isolated Margin و Cross Margin چیست و چه تفاوتی باهم دارند؟
مساله وابستگی به ترتیب تراکنش ها
یک بلاک متشکل از مجموعهای از تراکنش هاست.وضعیت بلاکچین هر چند دقیقه در طول هر دوره (epoch) به روز رسانی میشود. وضعیت قراردادهای هوشمند به وسیله مقادیر فیلدها (Fields) و موجودی فعلی تعیین می شود. هنگامی که یک کاربر تراکنشی را برای اجرای یک قراردادهوشمند در شبکه آغاز می کند، هیچ تضمینی در مورد اینکه آیا تراکنش در همان وضعیتی که قرارداد شروع شده بود انجام شود یا خیر، وجود ندارد که این از آسیب پذیری های قرارداد هوشمند است.
وضعیت واقعی قرارداد توسط کاربران در هنگام فراخواندن و انجام تراکنش قابل پیش بینی نیست. ترتیب تراکنش تنها به وسیله ماینر بلاک تعیین میشود، حتی اگر کاربر اول تراکنش t1 را قبل از کاربر دوم ارسال کند، هیچ تضمینی وجود ندارد که t1 قبل از t2 اجرا شود. بنابراین وضعیت نهایی یک قرارداد بستگی به ترتیب تراکنش ها دارد که توسط ماینر مشخص می شود.
مساله وابستگی به زمان
به طور معمول زمان یک بلاک با زمان سیستم ماینر تنظیم میشود. وقتی یک بلاک استخراج میشود، ماینر زمان را برای هر بلاک مشخص می کند. قرارداد هوشمند از زمان بلاک به عنوان یک شرط اولیه برای اجرای برخی از عملیات حیاتی استفاده میکند. به دلیل انعطاف پذیری زمان بلاک توسط ماینر، یک ماینر خرابکار میتواند زمان بلاک متفاوتی را انتخاب کند قراردادهای وابسته به زمان را دستکاری کند.
بیشتر بخوانید : ERC20: استانداردی برای صدور توکن در شبکه اتریوم
عدم مدیریت استثنا در سالیدیتی :
در قراردادها اغلب نیاز به فراخوانهای (Call) متعدد داریم. در حین فراخوانیها ممکن است موارد استثنایی رخ بدهد که منجر به خاتمه قرارداد شده و یا عملکرد آن مختل شود. استثناها در موقعیتهای مختلفی رخ میدهند، مثلا:
- جایی که گس کافی برای اجرای عملیات وجود نداشته باشد.
- جایی که Stack Limit بیش از اندازه فراخوانده شده باشد.
عدم مدیریت صحیح استثناها منجر به ضررهای مالی هم میشود.
سخن پایانی
قراردادهای هوشمند برنامههایی هستند که برای بیان منطق کسب و کار و مدیریت دادهها و داراییها بر بستر بلاکچین طراحی شدهاند. در این مقاله به بررسی آسیب پذیری های قرارداد هوشمند پرداخته شد. از جمله مسائل مربوط به بازفراخوانها یا Re-entrancy، وابستگی قراردادها به زمان یا ترتیب تراکنشها که هر کدام به تفصیل شرح داده شد.
[irp posts=”10734″ name=”چرخه حیات قرارداد هوشمند”]
قرارداد هوشمند برنامهای است که با استفاده از بلاکچین اتریوم به صورت خودکار اجرا میشود. این قرارداد مجموعهای از کدهای برنامه نویسی و داده هاست که در یک ادرس خاص در بلاکچین اتریوم قرار دارد و با انجام تراکنش اجرا میشوند.
برنامه نویسها از زبانهای C#، C++، پایتون یا جاوا و … برای نوشتن قراردادهای هوشمند استفاده میکنند. از دیگر زبانها که به طور تخصصی برای برنامه نویسی قرار دادهای هوشمند ساخته شده، زبان سالیدیتی (Solidity) است که توسط بنیانگذاران اتریوم طراحی شده است.
فکت کوینز مرجع خبر،تحلیل،آموزش رمز ارز
برای دیدن آموزش های رایگان بیشتر،عضو شوید
آخرین اخبار
- لیست شدن دوج کیلر (LEASH) در صرافی کوینکس
- لیست شدن سولچت (Chat) در صرافی کوینکس!
- تأثیر انتخابات مجلس سنای ایالات متحده بر آیندهی ارزهای دیجیتال
- مهمترین پیش بینیهای قیمت کاردانو: رشد 10 دلاری ADA
- رونمایی از سیستم پرداخت بریکس جهت مقابله با دلار آمریکا
- ارزهای SNS و PANDORA در صرافی کوینکس لیست شدند
- افزایش 50 درصدی قیمت شیبا اینو (SHIB) در یک روز
- ارزش بازار تتر از 100 میلیارد دلار گذشت: بررسی جزئیات
- چارلز هاسکینسون در برابر مجلس سنای ایالات متحده
- رالی عظیم ADA:آیا قیمت کاردانو به 10 دلارخواهد رسید؟