با گسترش کاربرد گسترده اینترنت اشیاء و بلاک چین، تحقیق در مورد قراردادهای هوشمند توجه روزافزونی را به خود جلب کرده است و تشخیص تهدیدات امنیتی برای قراردادهای هوشمند یکی از کانون های اصلی است. این مقاله ابتدا آسیب پذیری های امنیتی رایج در قراردادهای هوشمند بلاک چین را معرفی می کند و سپس ابزارهای تشخیص آسیب پذیری برای قراردادهای هوشمند را بر اساس روش های تشخیص مختلف به شش دسته طبقه بندی می کند: 1) روش تأیید رسمی؛ 2) روش اجرای نمادین؛ 3) روش تست فازی؛ 4) روش نمایش میانی؛ 5) روش تحلیل لکه؛ و 6) روش یادگیری عمیق. ما 27 ابزار تشخیص را آزمایش و از جنبه های مختلفی از جمله توانایی تشخیص نسخه قرارداد هوشمند آنها را تجزیه و تحلیل می کنیم. در نهایت، نتیجه گیری می شود که اکثر ابزارهای تشخیص آسیب پذیری فعلی فقط می توانند آسیب پذیری ها را در یک نسخه واحد و قدیمی از قراردادهای هوشمند شناسایی کنند. اگرچه روش یادگیری عمیق انواع کمتری از آسیب پذیری های قراردادهای هوشمند را شناسایی می کند، اما دقت و کارایی تشخیص بالاتری دارد. بنابراین، ترکیب روش های تشخیص ایستا، مانند روش یادگیری عمیق و روش های تشخیص پویا، از جمله روش تست فازی برای شناسایی انواع بیشتری از آسیب پذیری ها در قراردادهای هوشمند چند نسخه ای برای دستیابی به دقت بالاتر، مسیری است که در آینده شایسته تحقیق است.
جدول محتوا
پیشرفت اینترنت اشیاء (IoT) به عرصه تولید و زندگی مردم نفوذ کرده است. برنامه های کاربردی جدید مانند خانه هوشمند، مراقبت های بهداشتی هوشمند و حمل و نقل هوشمند همگی بر اساس دستگاه های به هم پیوسته و با استفاده از فناوری اینترنت اشیاء برای نظارت و مدیریت از راه دور دستگاه ها هستند. اینترنت اشیاء در عین ایجاد باز بودن، به ناچار خطرات امنیتی را نیز به همراه می آورد. به عنوان مثال، در مدیریت متمرکز داده ها، مشکلات مربوط به حریم خصوصی و امنیت و همچنین مشکلات انتقال داده بین دستگاه ها و سرورها وجود دارد. ظهور فناوری قراردادهای هوشمند به طور مؤثر چنین مشکلاتی را در اینترنت اشیاء حل می کند.
عبارت قرارداد هوشمند به قطعه ای از کد اسکریپت اشاره دارد که می تواند به طور همزمان روی چندین گره از دفتر کل توزیع شده اجرا شود. در اواسط دهه 1990، رمزنگار نیک سابو مفهوم قرارداد هوشمند را پیشنهاد کرد. با این حال، به دلیل محدودیت های سطح فناوری در آن زمان، اعتماد به محیط عملیاتی قرارداد بالا نبود و قراردادهای هوشمند قابل توسعه و استقرار نبودند. تا ظهور فناوری بلاک چین، ویژگی های غیرمتمرکز، قابل اعتماد و غیرقابل تغییر آن، فضای جدیدی را برای توسعه قراردادهای هوشمند به ارمغان آورد.
قراردادهای هوشمند غیرمتمرکز و باز هستند. استفاده از این ویژگی ها به هر دستگاهی در محیط اینترنت اشیاء اجازه می دهد تا به یک گره باز تبدیل شود. گره ها می توانند اطلاعات داده را با یکدیگر به اشتراک بگذارند و داده ها را تأیید و معامله کنند. قراردادهای هوشمند توزیع شده اند. این ویژگی حریم خصوصی و تحمل تک نقطه شکست را برای تعاملات داده بین دستگاه های اینترنت اشیاء تضمین می کند. ویژگی توزیع شده همچنین سربار انتقال اطلاعات بین دستگاه های اینترنت اشیاء و سرورها را کاهش می دهد.
با گسترش کاربرد ترکیبی اینترنت اشیاء و قراردادهای هوشمند بلاک چین، تحقیقات امنیتی در مورد قراردادهای هوشمند توجه زیادی را به خود جلب کرده است. در سال های اخیر، حملات زیادی علیه قراردادهای هوشمند برای بلاک چین رخ داده است. در سال ۲۰۱۰، مهاجمی از آسیبپذیری سرریز عدد صحیح برای ایجاد ۱۸۴۴۶۷ میلیون بیت کوین در یک بلوک با ارتفاع ۷۴۶۳۸ استفاده کرد. ناکاموتو نسخه ۰.۳.۱ بیت کوین را ظرف ۵ ساعت پس از آگاهی از آسیب پذیری منتشر کرد و به سرعت آن را برطرف کرد. در سال ۲۰۱۲، سرورهای bitfloor و bitcoinica چهارمین صرافی بزرگ دلار جهان هک شدند و ۱۲۵۵۴ بیت کوین به سرقت رفت. در سال ۲۰۱۴، Mt. Gox، بزرگترین صرافی بیت کوین در آن زمان، اعلام کرد که ۸۵۰۰۰۰ بیت کوین به سرقت رفته است و خسارت آن به ۴۵۰ میلیون دلار آمریکا رسیده است. این رویداد دومین شوک بزرگ در تاریخ ارزهای مجازی را رقم زد. در سال ۲۰۱۶، پروژه تامین مالی جمعی DAO توسط هکرها مورد حمله قرار گرفت. مهاجم از آسیبپذیری دوباره ورود برای انتقال ۳.۶ میلیون اتریوم به یک آدرس ناشناس استفاده کرد و باعث شکست پروژه تامین مالی جمعی DAO شد. در سال ۲۰۲۰، تأیید شد که پروتکل زنجیرهای متقابل پلی نت مورد حمله قرار گرفته است.
هکر در عرض ۳۴ دقیقه، ۳۰۲ میلیون دلار، ۵۵ هزار اتریوم و ۲۰۰۰ بیت کوین به ارزش کل ۶۱۰ میلیون دلار آمریکا سرقت کرد [۱].
رویدادهای امنیتی ناشی از آسیب پذیری های قراردادهای هوشمند به طور مکرر رخ می دهد. این آسیب پذیری ها عمدتا شامل موارد زیر هستند: آسیب پذیری های دوباره ورود، حفره های کنترل دسترسی، سرریز عدد صحیح، عدم بررسی مقدار برگشتی تابع فراخوانی شده، انکار سرویس (DoS)، فراخوانی نماینده، حمله آدرس کوتاه، شرایط رقابتی/تراکنش غیرقانونی قبل از تراکنش، وابستگی ترتیب تراکنش، وابستگی به زمان و غیره. با توجه به مشکلات فزاینده ناشی از آسیب پذیری های قراردادهای هوشمند، تعداد زیادی ابزار تشخیص خودکار به طور مداوم در حال ظهور هستند. با استفاده از ابزارهای خودکار تشخیص آسیب پذیری، نه تنها نیازهای کشف و تحلیل آسیب پذیری برآورده می شود، بلکه آسیب پذیری های امنیتی در قرارداد نیز با کارایی بیشتری قابل استخراج است.
ابزارهای تشخیص آسیب پذیری موجود برای قراردادهای هوشمند را می توان بر اساس اینکه آیا قرارداد هوشمند برای تشخیص نیاز به اجرا دارد یا خیر، به تشخیص ایستا و تشخیص پویا تقسیم کرد. با توجه به روش های مختلف تشخیص، آنها را می توان به شش دسته تقسیم کرد: 1) روش تأیید رسمی؛ 2) روش اجرای نمادین؛ 3) روش تست فازی؛ 4) روش نمایش میانی؛ 5) روش تحلیل لکه؛ و 6) روش یادگیری عمیق. در این مقاله، شش نوع ابزار تشخیص آسیب پذیری قرارداد هوشمند از سه بعد مورد آزمایش و خلاصه شده اند: 1) نوع آسیب پذیری؛ 2) دقت تشخیص؛ و 3) توانایی تشخیص نسخه قرارداد.
به طور خلاصه، ما در این مقاله مشارکت های زیر را ارائه می دهیم:
- ما ابزارهای تشخیص آسیب پذیری قراردادهای هوشمند فعلی را طبقه بندی می کنیم. بر اساس روش های مختلف تشخیص، ابزارهای تشخیص آسیب پذیری را به شش دسته تقسیم می کنیم: الف) روش تأیید رسمی؛ ب) روش اجرای نمادین؛ ج) روش تست فازی؛ د) روش نمایش میانی؛ ه) روش تحلیل لکه؛ و و) روش یادگیری عمیق.
- ما آزمایشاتی را روی 27 ابزار تشخیص آسیب پذیری قرارداد هوشمند مختلف انجام می دهیم و انواع آسیب پذیری هایی را که توسط ابزارهای تشخیص مختلف قابل شناسایی است، تجزیه و تحلیل می کنیم. مشخص می شود که ابزارهای تشخیصی که از تأیید رسمی و نمایش میانی استفاده می کنند، می توانند اکثر انواع آسیب پذیری ها را شناسایی کنند، در حالی که ابزارهای تشخیصی که از تحلیل لکه و یادگیری عمیق استفاده می کنند، فقط می توانند انواع کمتری از آسیب پذیری ها را شناسایی کنند.
- ما شش ابزار نماینده از 27 ابزار تشخیصی را انتخاب می کنیم که می توانند هم آسیب پذیری های وابسته به زمان و هم آسیب پذیری های دوباره ورود را تشخیص دهند و آزمایشاتی را از نظر دقت تشخیص و توانایی تشخیص نسخه های قرارداد هوشمند انجام می دهیم.
- ما متوجه می شویم که ابزارهای تشخیص یادگیری عمیق فعلی می توانند انواع کمتری از آسیب پذیری های قراردادهای هوشمند را شناسایی کنند، اما دقت و کارایی بالایی دارند. اکثر ابزارهای تشخیص فقط می توانند یک نسخه یا برخی نسخه های قدیمی از قراردادهای هوشمند را شناسایی کنند، نه نسخه های کامل را.
بخش باقی مانده این مقاله به شرح زیر سازماندهی شده است. در بخش دوم، به طور خلاصه آسیب پذیری های رایج قراردادهای هوشمند را معرفی می کنیم.
هنگامی که در بخش سوم انواع مختلف روش های تشخیص آسیب پذیری برای قراردادهای هوشمند را به تفصیل مورد بحث قرار می دهیم. علاوه بر این، در بخش چهارم، آزمایش خود را گزارش می کنیم و ابزارهای تشخیص مختلف را از سه منظر، یعنی نوع آسیب پذیری، دقت تشخیص و توانایی تشخیص نسخه قرارداد، خلاصه می کنیم. در بخش پنجم، نتیجه گیری با توصیه ها و پیشنهاداتی برای جهت گیری های آتی در این زمینه تحقیقاتی ارائه می شود.
بخش دوم: آسیب پذیری های رایج قراردادهای هوشمند
اتریوم یک پلتفرم بلاکچین عمومی منبع باز است که از قابلیت قرارداد هوشمند پشتیبانی می کند و ماشین مجازی غیرمتمرکز اتریوم (EVM) را با تحویل قراردادهای نظیر به نظیر ارائه می دهد. EVM محیطی است که قراردادهای هوشمند در آن اجرا می شوند. این محیط به صورت سندباکس کپسوله شده و کاملاً ایزوله است. همچنین هنگام اجرا در EVM، قراردادهای هوشمند از دسترسی به یکدیگر محدود می شوند. سالیدیتی یکی از زبان های پیشرو برای نوشتن قراردادهای هوشمند است. ویژگی های زبانی و اکوسیستم قوی آن امکانات بیشتری را برای کاربردهای قراردادهای هوشمند ارائه می دهد.
در این بخش، ما آسیب پذیری های رایج قراردادهای هوشمند را معرفی می کنیم، از جمله آسیب پذیری دوباره ورود، سرریز عدد صحیح، فراخوانی نماینده، عدم بررسی مقدار برگشتی تابع فراخوانی شده، DoS، حمله آدرس کوتاه، وابستگی به زمان و وابستگی به ترتیب تراکنش.
الف) آسیب پذیری دوباره ورود (Reentrancy Vulnerability)
هنگام انتقال و برداشت اتریوم در یک قرارداد هوشمند اتریوم، قرارداد خارجی ناامن خارجی فراخوانی می شود و فراخوانی تابع قرارداد خارجی زودتر از تغییر متغیر حالت انجام می شود که منجر به ایجاد آسیب پذیری دوباره ورود می شود. همانطور که در شکل ۱ نشان داده شده است، به طور کلی، هنگامی که یک مهاجم عملیات انتقال را آغاز می کند، روش برداشت قرارداد اصلی تابع بازگشتی قرارداد خارجی را فراخوانی می کند، که باعث فعال شدن روش برداشت قرارداد اصلی می شود و در نتیجه متغیرهای حالت دفتر کل قرارداد خارجی که در دفتر کل قرارداد اصلی ثبت شده اند، غیرقابل تغییر می شوند [۲]. مهاجم می تواند از تابع بازگشتی برای فراخوانی مداوم روش برداشت قرارداد اصلی استفاده کند و عملیات انتقال مداوم را انجام دهد.
ب) سرریز عدد صحیح (integer Overflow)
در اتریوم، EVM یک نوع داده با اندازه ثابت را برای اعداد صحیح مشخص می کند. هنگامی که متغیر عدد صحیح از محدوده نمایش معتبر خود فراتر رود، آسیب پذیری سرریز عدد صحیح ایجاد می شود. سرریز ضرب، سرریز جمع و سرریز تفریق مشکلات اصلی در قراردادهای هوشمند هستند. پس از اینکه کاربر محتوا را وارد کرد و برنامه را اجرا کرد، اگر نتیجه محاسبه نهایی از محدوده ذخیره سازی نوع داده فراتر رود، ورودی قرارداد توسط مهاجم قابل بهره برداری است و در نتیجه یک آسیب پذیری امنیتی ایجاد می شود [۳]. به عنوان مثال، در سال ۲۰۱۸، رویداد “بازگشت به صفر در یک شب” توکن BEC به دلیل استفاده مهاجم از آسیب پذیری سرریز عدد صحیح رخ داد.
ج) عدم بررسی مقدار برگشتی (Unchecked Return Value)
در زبان سالیدیتی اتریوم، از آنجایی که اجرای برخی از توابع ممکن است مقادیر برگشتی غیرمعقول ایجاد کند، خطاهای منطقی در هنگام فراخوانی توابع رخ می دهد که منجر به ایجاد یک حفره عدم بررسی مقادیر برگشتی می شود. هنگام فراخوانی send() برای تراکنش انتقال، هنگامی که یک استثنا رخ می دهد، تابع بدون پرتاب استثنا، false را برمی گرداند و تراکنش ادامه می یابد که منجر به خطای عملکرد قرارداد می شود. بنابراین، هنگام فراخوانی توابعی مانند call()، callcode()، delegatecall() و static()، باید مقدار برگشتی تعیین شود تا از خرابی فراخوانی تابع جلوگیری شود.
سابقه های متعددی از DoS به دلیل رفتار عدم بررسی مقدار برگشتی در CVE وجود دارد. در فایل upnpevents.c از mini-upnpd 2.1 که دیمون ابزار سیستم تعبیه شده Miniupnp است، تابع upnpeventprepare به دلیل عدم اعتبارسنجی صحیح مقدار برگشتی تابع snprintf، درز اطلاعات در نظر گرفته می شود. همچنین در نسخه های قبل از Vixie Cron 3.0pl1-133 یک آسیب پذیری اعتبارسنجی ورودی وجود دارد. این آسیب پذیری ناشی از عدم بررسی مقدار برگشتی تابع calloc توسط برنامه است که می تواند با یک فایل کرونتاب بزرگ منجر به خرابی شود.
د) انکار سرویس توزیع شده (Distributed Denial of Service)
در یک قرارداد هوشمند، هنگامی که عملیات منطقی عادی قرارداد به طور مخرب مسدود شود، حمله DoS رخ می دهد. مهاجم با مختل کردن، تعلیق، مسدود کردن و سایر عملیات، عمداً روند عادی تجارت حلقه ای را مختل می کند، کانال معاملاتی را مسدود می کند و باعث می شود منطق خود قرارداد به طور عادی کار نکند. با مصرف مداوم منابع قرارداد، مهاجم کاربر را مجبور می کند که به طور موقت یا دائمی از قرارداد خارج شود و در نتیجه اتریوم را در قرارداد قفل کند. سه حمله DoS کلی در قراردادهای هوشمند وجود دارد [۴]. اول، مهاجم مقدار زیادی اتر و گاز مصرف می کند و باعث می شود قرارداد به طور موقت یا دائمی غیرقابل کار شود. دوم، حساب مالک با حق باز یا تعلیق تراکنش ها از دست می رود و منجر به حمله DoS غیرفعال می شود. سوم، از آنجایی که حالات قراردادهای هوشمند به نتیجه اجرای تابع خارجی بستگی دارد، هنگامی که تماس خارجی با شکست مواجه می شود یا رد می شود، منجر به حمله DoS نیز می شود. به عنوان مثال، حمله به koet در طول “عصر آشفته” در فوریه ۲۰۱۶ و حمله به قرارداد دولتی در ژوئن همان سال، همگی حملات DoS هستند.
ه) فراخوانی خطرناک DelegateCall
در یک قرارداد هوشمند اتریوم، زمانی که تابع یک قرارداد برای اجرا به قرارداد فعلی “کشیده” می شود، delegatecall() خطرناک ایجاد می شود که به عنوان فراخوانی نماینده نیز شناخته می شود. پس از فراخوانی نماینده، مقدار MSG، که یک متغیر داخلی است، به تماس گیرنده تغییر نمی کند، بلکه محیط اجرای تماس گیرنده، محیط اجرای است. هنگامی که یک مهاجم تابعی را به قراردادی فراخوانی می کند که با نام تابع مطابقت ندارد، تابع بازگشتی قرارداد فعال می شود. در رویداد معروف کیف پول Parity Multisig، به دلیل فراخوانی نامحدود نماینده در قرارداد، هر تابعی از کتابخانه کیف پول قابل فراخوانی است و تابع инициализация کیف پول هیچ تأییدی ندارد. مهاجم با استفاده از فراخوانی نماینده، به طور مکرر تابع инициализация را فراخوانی می کند، خود را به عنوان مالک قرارداد تغییر می دهد و عملیات انتقال اتریوم را در قرارداد پیاده می کند.
و) حمله آدرس کوتاه (Short Address Attack)
در یک قرارداد هوشمند، زمانی که از خارج فراخوانی می شود، مهاجم از آدرس آخرین بایت 0 طرف خود سوء استفاده می کند، بایت 0 آخر آدرس تغییر یافته را به طور مخرب حذف می کند و داده ها را به قرارداد هوشمند منتقل می کند که منجر به آسیب پذیری حمله آدرس کوتاه می شود. EVM به طور خودکار داده ها را کامل می کند و در نهایت مقدار انتقال اشتباه را ایجاد می کند که منجر به انتقال بیش از حد می شود. EVM تعداد بیت های آدرس را به شدت بررسی نمی کند و بیت های مفقود را به طور خودکار پر می کند. بنابراین، توسعه دهندگان باید یک مکانیسم بررسی دقیق آدرس را برای جلوگیری از حملات آدرس کوتاه اضافه کنند [۵].
ز) وابستگی به زمان و ترتیب تراکنش (Short Address Attack)
در بلاکچین، آسیب پذیری زمان و آسیب پذیری وابستگی به ترتیب تراکنش جزو آسیب پذیری های امنیتی سطح سیستم هستند [۶]. نشان های زمانی ترتیب همه بلوک های متصل را در بلاکچین تضمین می کنند. این شبیه نقش یک دفتر اسناد رسمی است که یک مقدار هش خاص ایجاد می کند که هیچ کس نمی تواند آن را تغییر دهد. با این حال، برخی از ماینرهای متقلب نیز می توانند به طور مخرب نشان های زمانی را بسازند، از نشان های زمانی بلوک در قراردادها به اشتباه استفاده کنند یا حتی محدودیت های مربوطه را برای راه اندازی حملات دور بزنند. حمله آسیب پذیری ترتیب تراکنش حمله ای است که عمدتاً به امضا معطوف است. همه تراکنش ها در بلاکچین باید امضا شوند، اما امضا شامل تمام اطلاعات رمزگذاری هش نیست. در استخر معاملات نامشخص، ترتیب ایجاد تراکنش به خواسته های ماینرها بستگی دارد که به احتمال زیاد با بسته ترتیب تراکنش در بلوک بسیار متفاوت است. قرارداد هوشمند نمی تواند ترتیب تراکنش را به طور دقیق پیش بینی کند و آسیب پذیری وابستگی به ترتیب تراکنش ایجاد می شود. مهاجم با نظارت بر ترتیب تراکنش ها در استخر تراکنش، بدون تغییر امضا،
روش های موجود برای تشخیص آسیب پذیری قراردادهای هوشمند
این بخش به بررسی شش روش مختلف برای تشخیص آسیبپذیریهای قراردادهای هوشمند میپردازد:
الف) روش تأیید رسمی:
هدف این روش تبدیل روابط منطقی موجود در قرارداد به یک مدل ریاضی با استفاده از زبان ریاضی است. این کار ابهام و کلیگویی را از بین میبرد و امکان میدهد تا با استفاده از اثباتهای منطقی دقیق، درستی و امنیت توابع موجود در قرارداد هوشمند را مورد آزمایش قرار داد.
در سال ۲۰۱۸، گریشچنکو و همکاران [۷] یک ابزار تشخیص قرارداد هوشمند به نام چارچوب F* را پیشنهاد کردند. این یک ابزار کامل تشخیص قرارداد هوشمند با معنای گام کوچک بایتکد EVM است که در آزمون F* رسمیسازی شده و بدین ترتیب آزمون رسمی اتریوم را با موفقیت پشت سر گذاشته است. در همان سال، هیلدنبراندت و همکاران [۸] به ترتیب ابزارهای تشخیص قرارداد هوشمند خود را با نامهای چارچوب KEVM، ایزابل/HOL [۹] و زئوس ارائه کردند. چارچوب KEVM یک مشخصه رسمی اجرایی از زبان EVM بر اساس پشته بایتکد است که با چارچوب K ساخته شده است. ایزابل/HOL ابزاری است که رسمیسازی موجود EVM را از طریق منطق برنامهنویسی معقول در سطح بایتکد گسترش میدهد، سپس توالیهای بایتکد را به بلوکهای کد خطی تبدیل میکند و یک منطق برنامهنویسی برای استنتاج این کدها ایجاد میکند. زئوس [۱۰] ابزاری است که از تفسیر انتزاعی، بررسی نمادین مدل و عبارات قیاسی برای آزمایش سریع امنیت قراردادهای هوشمند استفاده میکند. این ابزار یک نمونه اولیه برای پلتفرم بلاکچین اتریوم ساخته است که میتواند قراردادهای هوشمندی با بیش از ۲۲.۴ هزار مورد را ارزیابی کند. ارزیابی نشان میدهد که حدود ۹۴.۶ درصد از قراردادها در برابر حملات آسیبپذیر هستند. در سال ۲۰۱۹، لیانان و همکاران یک پلتفرم تأیید رسمی به نام Vaas را برای قراردادهای هوشمند راهاندازی کردند. این پلتفرم امنیت قراردادهای هوشمند را تشخیص و تأیید میکند، کدهای پرخطر را به طور دقیق شناسایی کرده و پیشنهادهایی برای اصلاح ارائه میدهد و به طور خودکار ۱۰ آسیبپذیری امنیتی متداول و ۳۲ نقص جزئی منطق عملکردی قراردادهای هوشمند را شناسایی میکند. همچنین از تشخیص امنیت زنجیره مورچهای، بلاکچین تنسنت، ETH، EOS، ONT، ترون، فیسکو-بکوس، فابریک و سایر پلتفرمهای بلاکچین پشتیبانی میکند.
ب) روش اجرای نمادین
ایده اصلی روش اجرای نمادین، نمادگذاری متغیرهای با مقادیر نامشخص در کد قرارداد هوشمند است. سپس این روش دستورالعملهای موجود در برنامه را تک به تک تجزیه و تحلیل، تفسیر و اجرا میکند، وضعیت اجرا را بهروزرسانی میکند و در این فرآیند به جستجوی قیود مسیر میپردازد. همزمان، گرههای انشعاب برای تکمیل تشخیص همه مسیرهای قابل اجرای برنامه، اجرای انشعابی را انجام میدهند تا خلأهای امنیتی را پیدا کنند.
در سال ۲۰۱۶، لو و همکاران [۱۱] یک ابزار تشخیص قرارداد هوشمند به نام Oyente را پیشنهاد کردند که یک ابزار اجرای نمادین برای یافتن آسیبپذیریهای بالقوه امنیتی قراردادهای هوشمند است. در سال ۲۰۱۷، ابزار تشخیص آسیبپذیری قراردادهای هوشمند دیگری به نام Mythril توسعه یافت. ابزار Mythril یک ابزار رسمی تشخیص آسیبپذیری قراردادهای هوشمند اتریوم است که میتواند با استفاده از اجرای نمادین، تمام مسیرهای ناامن احتمالی را کاوش کند و بدین ترتیب ۱۴ آسیبپذیری قرارداد هوشمند مانند وابستگی به زمان، نوشتن آدرس دلخواه و سرریز عدد صحیح را شناسایی کند.
در سال ۲۰۱۸، نیکولیک و همکاران [۱۲] ابزاری برای مشخص کردن و استدلال در مورد ردیابی ویژگیها به نام Maian را پیشنهاد کردند. این ابزار از تحلیل نمادین بین برنامهای و تأییدکنندههای مشخص برای نشان دادن روابط فراخوانی واقعی استفاده میکند. Maian به طور عمده بر روی سه نوع آسیبپذیری قرارداد هوشمند تمرکز دارد، از جمله انجماد دارایی نامحدود، افشای دارایی و انهدام قرارداد.
در همان سال، تسانکوف و همکاران [۱۳] به ترتیب ابزارهای تشخیص آسیبپذیری قرارداد هوشمند خود را با نامهای Securify، Teether و Sereum ارائه کردند. Securify یک ابزار تشخیص آسیبپذیری قراردادهای هوشمند اتریوم مقیاسپذیر و کاملاً خودکار است که میتواند ثابت کند رفتار قرارداد برای یک محتوای معین ایمن است. TeEther [۱۴] با توسعه یک تعریف مشترک از قراردادهای آسیبپذیر ساخته شده است. Sereum [۱۵] با استفاده از نظارت بر زمان اجرای سطح دستورالعمل بایتکد EVM، آسیبپذیریهای ورود مجدد را شناسایی میکند.
ج) روش تست فازی
هسته اصلی روش تست فازی، ورودی دادن دادههای تولید شده به برنامه برای تشخیص اجرای غیرعادی برنامه و در نتیجه کشف آسیبپذیریهای بالقوه است. تحقیقات در مورد این فناوری در زمینه قراردادهای هوشمند نیز در حال بالغ شدن است.
در سال ۲۰۱۸، جیانگ و همکاران [۱۶] یک ابزار تشخیص قرارداد هوشمند به نام ContractFuzzer را پیشنهاد کردند. ContractFuzzer رفتار زمان اجرای قرارداد هوشمند را از طریق ابزار ورود به سیستم EVM ثبت میکند و با تحلیل این گزارشها، آسیبپذیریهای امنیتی را گزارش میکند.
در همان سال، لیو و همکاران ابزاری برای تشخیص قراردادهای هوشمند به نام ReGuard را پیشنهاد کردند که به طور عمده بر روی آسیبپذیری بالقوه ورود مجدد قراردادهای هوشمند تمرکز دارد. ReGuard دادههای آزمایشی تصادفی و متنوعی را از طریق تکرار ایجاد میکند که میتواند هنگام اجرای قرارداد نظارت شود و شناسایی پویای آسیبپذیریهای ورود مجدد را امکانپذیر میسازد.
در سال ۲۰۱۹، هه و همکاران [۱۷] ابزاری برای تشخیص آسیبپذیریهای قراردادهای هوشمند به نام ILF را پیشنهاد کردند. این ابزار یک سیستم تشخیص آسیبپذیری قراردادهای هوشمند سر تا سر است و این روش را برای رسیدگی به مشکلات قراردادهای هوشمند فازی پیادهسازی میکند.
در سال ۲۰۲۰، تورس و همکاران [۱۸] ابزاری با نام ConFuzzius را پیشنهاد کردند که با استفاده از یک تستر فازی ترکیبی که اجرای نمادین و تست فازی را ترکیب میکند، آسیبپذیریهای امنیتی قراردادهای هوشمند اتریوم را شناسایی میکند. ConFuzzius با استفاده از تست فازی، کد سطحی قرارداد هوشمند را کاوش میکند و ورودیهایی را که شرایط پیچیده را برآورده میکنند، از طریق اجرای نمادین و حل قیود ایجاد میکند تا کد عمیقتر قرارداد هوشمند را کاوش کند.
در سال ۲۰۲۱، چوی و همکاران [۱۹] یک ابزار تشخیص دیگر به نام SMARTIAN را پیشنهاد کردند که یک فازی متنباز کاربردی است. این ابزار از تحلیل ایستایک بایتکد در یک قرارداد هوشمند برای پیشبینی توالی تراکنشها و تصمیمگیری در مورد اینکه آیا هر تراکنش باید الزامات خاصی را برآورده کند، استفاده میکند. در مرحله تست فازی، این ابزار از اطلاعات قبلی برای ساخت یک بدنه اولیه استفاده میکند و برای جمعآوری بازخورد بر اساس جریان داده و هدایت مؤثر تست فازی، تحلیل پویای جریان داده را انجام میدهد.
د) روش نمایش میانی
ایده اصلی روش نمایش میانی، تبدیل کد منبع یا بایتکد قرارداد هوشمند به نمایش میانی با سطح بیان معنایی بالا است. سپس با تحلیل این نمایش میانی، آسیبپذیریهای قرارداد هوشمند شناسایی میشود.
در سال ۲۰۱۸، برنت و همکاران [۲۰] یک چارچوب تحلیل امنیت قراردادهای هوشمند به نام Vandal را پیشنهاد کردند. این چارچوب به کاربران امکان میدهد از طریق مشخصات منطقی نوشته شده به زبان Souffle، تحلیل امنیتی روی قراردادهای هوشمند انجام دهند.
در همان سال، تیکهمیروف و همکاران [۲۱] به ترتیب ابزارهای تشخیص قرارداد هوشمند خود را با نامهای مادمکس، EthIR و اسمارتچک ارائه کردند. مادمکس [۲۲] یک ابزار تحلیل ایستا و بسیار قابل اعتماد برای قراردادهای هوشمند است که میتواند آسیبپذیریهای مرتبط با گاز را به طور خودکار شناسایی کند. EthIR [۲۳] یک ابزار تشخیص آسیبپذیری قرارداد هوشمند است که برای تولید CFG از Oyente و تبدیل CFG به نمایش مبتنی بر بایتکد مبتنی بر قانون (RBR) برای تحلیل بایتکد اتریوم متکی است. اسمارتچک ابزاری قابل توسعه است که کد منبع قراردادهای هوشمند را به یک نمایش میانی مبتنی بر XML تبدیل میکند و آسیبپذیریهای قراردادهای هوشمند را بر اساس الگوهای XPath شناسایی میکند.
در سال ۲۰۱۹، فایست و همکاران [۲۴] ابزاری به نام اسلیثر را پیشنهاد کردند که قرارداد هوشمند را به یک نمایش میانی به نام اسلیثیر تبدیل میکند. اسلیثیر از یک فرم تخصیص تک ایستا و مجموعه دستورالعمل سادهشده برای سادهسازی تحلیل آسیبپذیری قرارداد هوشمند استفاده میکند و اطلاعات معنایی را که ممکن است هنگام تبدیل کد قرارداد هوشمند به بایتکد از بین برود، حفظ میکند.
در همان سال، وانگ و همکاران [۲۵] ابزاری برای تشخیص آسیبپذیری قراردادهای هوشمند به نام ContractGuard را پیشنهاد کردند که یک سیستم تشخیص نفوذ (IDS) برای جلوگیری از حمله به قراردادهای هوشمند اتریوم است. ContractGuard جریان کنترل غیرعادی را بر اساس IDS شناسایی میکند و میتواند در قراردادهای هوشمند برای تجزیه و تحلیل مسیر بدون حلقه تگهای زمینه برای شناسایی آسیبپذیریهای قراردادهای هوشمند تعبیه شود.
ه. روش تحلیل لکه (Stain Analysis Method)
ایده اصلی روش تحلیل لکه، شناسایی و علامتگذاری اطلاعات لکه در برنامه، تحلیل منبع لکه، ردیابی مسیر انتشار لکه با استفاده از قوانین خاص و قضاوت در مورد اینکه آیا مورد بیضرر قرار گرفته است، و در نهایت دستیابی به هدف تشخیص آسیبپذیری است.
در سال ۲۰۱۸، تورس و همکاران [۲۶] چارچوب تحلیل امنیت قرارداد هوشمند Osiris را با ترکیب تحلیل لکه و اجرای نمادین پیشنهاد کردند. این چارچوب، کد منبع قرارداد ورودی را به بایتکد EVM کامپایل میکند، از اصل تحلیل نمادین برای ساخت یک نمودار جریان کنترل برای تحقق انتقال نتایج هر دستورالعمل استفاده میکند، گسترش لکهها را در حافظه و ذخیرهسازی تجزیه و تحلیل و ردیابی میکند، خطاهای عدد صحیح را شناسایی میکند و تشخیص آسیبپذیریهای قرارداد هوشمند را محقق میسازد.
در سال ۲۰۱۹، گائو و همکاران [۲۷] چارچوب تحلیل امنیت قرارداد هوشمند به نام Easyflow را پیشنهاد کردند که عمدتاً بر روی آسیبپذیری سرریز قراردادهای هوشمند متمرکز است. ابزار Easyflow مبتنی بر سطح EVM است و از مؤلفه تحلیل لکه برای ردیابی و تحلیل لکهها، نظارت بر فرآیند تراکنش و دستیابی به هدف تشخیص آسیبپذیریهای قراردادهای هوشمند استفاده میکند.
و. روش یادگیری عمیق (Deep Learning Method)
ایده اصلی روش یادگیری عمیق، آموزش مدل یادگیری عمیق با استخراج ویژگیهای آسیبپذیری قراردادهای هوشمند مختلف است تا به هدف تشخیص آسیبپذیری در قراردادهای هوشمند دست یابد.
در سال ۲۰۱۸، تان و همکاران [۲۸] ابزاری برای تشخیص آسیبپذیری قرارداد هوشمند به نام SaferSC را پیشنهاد کردند که ابزاری برای تشخیص سریع آسیبپذیری قراردادهای هوشمند با استفاده از یک روش یادگیری ماشینی، حافظه بلند مدت کوتاه (LSTM) است.
در سال ۲۰۲۰، ژوانگ و همکاران [۲۹] ابزاری برای تشخیص قرارداد هوشمند به نام DR-GCN و TMP را پیشنهاد کردند که ابزاری برای تشخیص سه آسیبپذیری قراردادهای هوشمند در اتریوم و زنجیرههای ویتربی است: وابستگی به زمان ورود مجدد و حلقه بینهایت از طریق شبکه عصبی گراف. ابزار تشخیص DR-GCN با ساختن گراف قرارداد هوشمند، ساختار نحوی و معنایی تابع قرارداد هوشمند را نشان میدهد و از طریق نوعی شبکه عصبی کانولوشنی گراف بدون بعد، آسیبپذیری قرارداد هوشمند را تشخیص میدهد. TMP یک گراف قرارداد هوشمند را برای نشان دادن ساختار نحوی و معنایی تابع قرارداد هوشمند میسازد و از طریق یک شبکه جدید انتشار اطلاعات زمانی، یاد میگیرد که آسیبپذیری قرارداد هوشمند را تشخیص دهد.
در همان سال، وانگ و همکاران [۳۰] ابزاری برای تشخیص آسیبپذیری قرارداد هوشمند به نام ContractWard را پیشنهاد کردند. با این ابزار، ابتدا ویژگیهای نحوی دودویی کد عملیات سادهشده قراردادهای هوشمند استخراج میشود. سپس از تعدادی الگوریتم یادگیری ماشینی و الگوریتمهای نمونهگیری برای ایجاد مدلهایی برای تشخیص آسیبپذیریها استفاده میشود.
در سال ۲۰۲۱، لیو و همکاران [۳۱] ابزاری برای تشخیص آسیبپذیری قرارداد هوشمند به نام AME را پیشنهاد کردند که یادگیری عمیق و حالت متخصص را ترکیب میکند.
الف. مقایسه ابزارهای تشخیص تهدید
الف. مقایسه انواع آسیبپذیریهای قابل شناسایی
ما آزمایشهایی را روی 27 ابزار تشخیص آسیبپذیری انجام دادیم تا انواع آسیبپذیریهایی که میتوانند شناسایی کنند را بررسی کنیم. نتایج این آزمایشها در شکل 2 نشان داده شده است. با توجه به دادههای موجود در شکل 2، میتوانیم نتیجه بگیریم که اکثر این ابزارها از تشخیص آسیبپذیریهایی مانند ورود مجدد، وابستگی به زمانبندی و سرریز عدد صحیح پشتیبانی میکنند. این آسیبپذیریها ممکن است با آسیبپذیری معروف DAO در ارتباط باشند. در میان این ابزارها، ابزارهایی که از روش تأیید صوری استفاده میکنند، به طور میانگین میتوانند شش آسیبپذیری را شناسایی کنند و ابزارهایی که از روش نمایش میانی استفاده میکنند، به طور میانگین 5.5 آسیبپذیری را شناسایی میکنند. این دو روش میتوانند اکثر انواع آسیبپذیریها را شناسایی کنند. ابزارهایی که از روش تحلیل لکه استفاده میکنند، به طور میانگین دو آسیبپذیری را شناسایی میکنند و ابزارهایی که از روش یادگیری عمیق استفاده میکنند، به طور میانگین 3.2 آسیبپذیری را شناسایی میکنند. این دو روش کمترین تعداد انواع آسیبپذیریها را شناسایی میکنند. این موضوع ممکن است به توسعه اولیه روشهای تأیید صوری و نمایش میانی مرتبط باشد. روش یادگیری عمیق یک حوزه تحقیقاتی است که در سالهای اخیر به سرعت توسعه یافته است و به دلیل دیرتر توسعه یافتن، انواع کمتری از آسیبپذیریهای قراردادهای هوشمند را شناسایی میکند.
ب. مقایسه قابلیتهای تشخیص
ما آزمایشهایی را با ابزارهای اصلی تشخیص آسیبپذیری قراردادهای هوشمند انجام دادیم و نتایج این آزمایشها در جدول ۱ نشان داده شده است. ابزارهای مورد بررسی شامل Vaas، Oyente، Smartcheck، ContractFuzzy، TMP و AME هستند. این ابزارها در تجزیه و تحلیل امنیت قراردادهای هوشمند از جامعیت بیشتری در تشخیص انواع آسیبپذیری، نرخ پایین هشدار کاذب و کارایی بالاتر برخوردارند. Vaas از روش تأیید صوری، Oyente از روش اجرای نمادین، Smartcheck از روش نمایش میانی، ContractFuzzy از روش تست فازی و TMP و AME از روش یادگیری عمیق استفاده میکنند.
در جدول ۱، ما کارایی ابزارها را در تشخیص آسیبپذیری ورود مجدد و وابستگی به زمانبندی ارائه کردهایم. در میان آسیبپذیریهای لایه کد سالیدیتی، آسیبپذیری ورود مجدد یکی از خطرناکترین و نمونهایترین موارد است. ماهیت زبان سالیدیتی و فراخوانی متقابل بین قراردادهای هوشمند ریشه اصلی این آسیبپذیری هستند. در لایه سیستم بلاکچین، آسیبپذیری وابستگی به زمانبندی اهمیت ویژهای دارد. اجرای اکثر قراردادهای هوشمند به زمانبندی بلوک فعلی وابسته است و این زمانبندی به طور مستقیم یا غیرمستقیم بر نتیجه اجرای قرارداد تأثیر میگذارد. اگر زمانبندی یک بلوک توسط ماینرها به صورت مخربانه تغییر یابد، عواقب جدی در پی خواهد داشت.
با توجه به جدول ۱، میتوانیم نتیجه بگیریم که اگرچه ابزارهای تشخیص مبتنی بر یادگیری عمیق جدیدتر هستند و آسیبپذیریهای کمتری را شناسایی میکنند، اما دقت تشخیص هدفمند آسیبپذیری و کارایی آنها بالا است. این موضوع ممکن است به این دلیل باشد که روش یادگیری عمیق میتواند ویژگیهای آسیبپذیری را بهتر مشخص کند.
ج. مقایسه قابلیت تشخیص نسخههای قرارداد
ما آزمایشهایی را با شش ابزار تشخیص پیشرو که طیف وسیعی از انواع آسیبپذیری را شناسایی میکنند، انجام دادیم. آزمایش ما عمدتاً بر توانایی این ابزارها در تشخیص آسیبپذیریهای نسخههای مختلف قراردادها متمرکز بود. نتایج این آزمایشها در جدول ۲ نشان داده شده است. در حال حاضر، نسخههای قرارداد هوشمند از ۰.۴ تا ۰.۸ متغیر هستند، اما ابزارهای کمی وجود دارند که بتوانند آسیبپذیریهای تمامی نسخههای قراردادهای هوشمند را شناسایی کنند. همانطور که در جدول ۲ مشاهده میشود، ابزارهایی مانند Oyente، TMP و AME تنها میتوانند تهدیدات امنیتی را در نسخه ۰.۴ قراردادهای هوشمند، مانند آسیبپذیری ورود مجدد و وابستگی به زمانبندی، تشخیص دهند. Oyente در میان این ابزارها همچنین میتواند آسیبپذیری سرریز عدد صحیح، آسیبپذیری مدیریت استثنا، آسیبپذیری سرریز پشته فراخوانی و آسیبپذیری وابستگی به ترتیب تراکنش را شناسایی کند.
Securify میتواند قراردادهای هوشمند نسخههای ۰.۵ و ۰.۶ را تشخیص دهد و آسیبپذیری ورود مجدد، مدیریت استثنا، اشتباه نوع داده، فراخوانی تابع ناشناخته و بلوکه شدن اتر را شناسایی میکند. Slither و Mythril میتوانند تمامی نسخههای قراردادهای هوشمند را تشخیص دهند. Mythril علاوه بر موارد دیگر، میتواند آسیبپذیری DoS، از دست رفتن اتر و وابستگی به پارامترهای بلوک را شناسایی کند.
Slither نسبت به Mythril پوشش بیشتری از کد را دارا است. از ۱۵ نوع آسیبپذیری که ما تحلیل کردیم، Mythril توانایی تحلیل ۷ مورد و Slither توانایی تحلیل ۶ مورد را دارد (شکل ۲). میانگین سرعت پردازش تشخیص آسیبپذیری نیز برای Slither سریعتر از Mythril است. دقت ابزار Mythril در مدیریت آسیبپذیریهای محاسباتی از Slither بالاتر است. Slither در تشخیص آسیبپذیریهای ورود مجدد دقت و کارایی بهتری دارد.
در مطالعات قبلی، Securify از نظر میانگین زمان اجرا به طور قابل توجهی کندتر بود و Slither و SmartCheck سریعتر بودند. از نظر دقت، Slither نرخ مثبت کاذب ۱۰.۹٪، Securify ۲۵٪ و SmartCheck نرخ مثبت کاذب بالای ۷۳.۶٪ دارد.
در حال حاضر، اکثر ابزارهای تشخیص آسیبپذیری قرارداد هوشمند نمیتوانند تمامی نسخههای قرارداد هوشمند را پوشش دهند. این موضوع ممکن است به این دلیل باشد که اکثر ابزارهای تشخیص پس از انتشار به طور مداوم نگهداری نمیشوند و تشخیص آسیبپذیری در نسخههای پایینتر قراردادهای هوشمند آسانتر است. قراردادهای هوشمند رایج در حال حاضر در نسخه ۰.۸ قرار دارند، بنابراین مطالعه روشهای تشخیص آسیبپذیری برای قراردادهای هوشمند با نسخههای متعدد نیز بسیار حائز اهمیت است.
نتیجهگیری
در این مقاله، ۲۷ ابزار تشخیص آسیبپذیری قرارداد هوشمند را بر اساس شش روش مختلف ارزیابی کردیم و نتیجه گرفتیم که اکثر ابزارهای تشخیص فعلی تنها میتوانند آسیبپذیریها را در یک نسخه قدیمی و منفرد از قرارداد هوشمند شناسایی کنند. در میان این ابزارها، اگرچه روشهایی که بر یادگیری عمیق مبتنی هستند انواع کمتری از آسیبپذیریهای قرارداد هوشمند را شناسایی میکنند، اما دقت و کارایی تشخیص بالاتری دارند.
روش تشخیص ایستاکی به لحاظ تئوری میتواند تمامی مسیرها را بررسی کند. با این حال، در آزمایشهای عملی، روشهای تشخیص ایستاکی در بررسی مسیرهای انشعابی برای برنامههایی با حجم زیاد کد و مسیرهای پیچیده، زمانبر هستند. برخی از روشهای ایستاکی مانند اجرای نمادین ایستاکی محدودیتهایی دارند زیرا حلکنندههای قیود آنها نمیتوانند عملیات غیرخطی را انجام دهند. روشهای تشخیص پویا میتوانند آسیبپذیریهای پیچیدهتری را که توسط روشهای ایستاکی قابل شناسایی نیستند و ساختار پیچیدهتری دارند، شناسایی کنند. با این حال، همچنان تشخیص دقیق آسیبپذیریهایی که با توالی خاصی از اتفاقات خاص ایجاد میشوند، غیرممکن است.
در حال حاضر، روشهای خودکار تشخیص آسیبپذیری یکی پس از دیگری پیشنهاد میشوند. به عنوان مثال، روشهای تشخیص آسیبپذیری مبتنی بر یادگیری ماشین و روشهای تشخیص آسیبپذیری مبتنی بر یادگیری عمیق وجود دارند. روش یادگیری ماشین از کارایی بالا و توانایی تعمیمپذیری خوبی برخوردار است و دقت تشخیص آسیبپذیریهای خاص در آن بالاتر است. در میان ابزارهای تشخیص مورد مطالعه، روش شبکه عصبی گرافیکی توانایی بالاتری در تشخیص آسیبپذیریها نشان داده است.
علاوه بر این، در حال حاضر ابزارهای کمی برای تشخیص قراردادهای هوشمند چند نسخه وجود دارد. بنابراین، پیشنهاد میشود ترکیب روشهای پویا و ایستاکی در عین استفاده از شبکههای عصبی گرافیکی برای بهبود دقت و تشخیص انواع بیشتری از آسیبپذیریها در قراردادهای هوشمند چند نسخه، مسیر ارزشمندی برای تحقیقات آینده باشد.
منبع :
Detection of Vulnerabilities of Blockchain Smart Contracts
Daojing He , Member, IEEE, Rui Wu , Xinji Li, Sammy Chan , Senior Member, IEEE, and Mohsen Guizani , Fellow, IEEE
خلاصه مقاله Detection of Vulnerabilities of Blockchain Smart Contracts
کشف آسیب پذیری ها در قراردادهای هوشمند بلاک چین برای تضمین امنیت و قابلیت اطمینان سیستم های مبتنی بر بلاک چین ضروری است. در اینجا خلاصه ای از روش های رایج استفاده شده آورده شده است:
روش های سنتی:
- تجزیه و تحلیل ایستا: ابزارهایی مانند Slither و Smartcheck کد قرارداد هوشمند را بدون اجرا تجزیه و تحلیل می کنند. آنها الگوهایی را شناسایی می کنند که اغلب نشان دهنده آسیب پذیری هایی مانند حملات دوباره ورود، سرریز اعداد صحیح و مشکلات کنترل دسترسی هستند.
- اجرای نمادین: این روش کد قرارداد را به طور نمادین اجرا می کند و تمام مسیرهای اجرایی بالقوه را برای کشف آسیب پذیری های احتمالی بررسی می کند. با این حال، برای قراردادهای پیچیده می تواند از نظر محاسباتی پرهزینه باشد.
تکنیک های نوظهور:
- یادگیری عمیق: مدل های یادگیری عمیق بر روی مجموعه داده های بزرگی از قراردادهای آسیب پذیر و غیر آسیب پذیر آموزش داده می شوند. سپس می توانند قراردادهای جدید را تجزیه و تحلیل کرده و آسیب پذیری ها را با دقت بالا شناسایی کنند.
- تأیید رسمی: این رویکرد دقیق از روش های ریاضی برای اثبات صحت یک قرارداد هوشمند استفاده می کند. در حالی که بسیار قابل اعتماد است، به تخصص قابل توجهی نیاز دارد و می تواند برای قراردادهای پیچیده چالش برانگیز باشد.
ملاحظات اضافی:
- آزمایش فازی: تولید تصادفی ورودی ها برای یک قرارداد هوشمند گاهی اوقات می تواند آسیب پذیری های غیرمنتظره را آشکار کند.
- بررسی انسانی: بررسی های امنیتی توسط توسعه دهندگان باتجربه هنوز برای شناسایی آسیب پذیری های پیچیده و بردارهای حمله بالقوه ضروری است.
در اینجا چند ابزار محبوب برای کشف آسیب پذیری قرارداد هوشمند آورده شده است:
- Oyente: ابزار تجزیه و تحلیل امنیتی متن باز که از تجزیه و تحلیل ایستا و اجرای نمادین استفاده می کند.
- Mythril: یکی دیگر از ابزارهای محبوب تجزیه و تحلیل ایستا با تمرکز بر یافتن آسیب پذیری های شناخته شده.
- Securify: قراردادها را از نظر انطباق و آسیب پذیری های امنیتی از طریق تجزیه و تحلیل نمودار وابستگی و استخراج اطلاعات معنایی تجزیه و تحلیل می کند.
- Slither: آسیب پذیری ها را بر اساس الگوها و بوی کد در قراردادهای هوشمند شناسایی می کند.
- Smartcheck: مشابه Slither، اما بر روی شناسایی آسیب پذیری های خاص مانند دوباره ورود و سرریز اعداد صحیح تمرکز دارد.
توجه به این نکته مهم است که هیچ روش واحدی کامل نیست و اغلب برای یک فرآیند جامع کشف آسیب پذیری، ترکیبی از تکنیک های مختلف توصیه می شود.
قرارداد هوشمند چیست
به برنامه هایی که تحت بلاکچین اجرا میشوند قرارداد هوشمند میگوییم