بازبینی کد (Audit) در قراردادهای هوشمند به چه معناست؟
در این سری از مقالات امنیت به زبان ساده قصد داریم به مبحث بازبینی کد (Audit) در قراردادهای هوشمند بپردازیم. بازبینی کد، تجزیه و تحلیل دقیقی را از کدهای قرارداد هوشمند ارائه میدهد. بازبینی کد برای محافظت از وجوه سرمایهگذاری شده در پلتفرمهای دیفای بسیار مهم است. با توجه به اینکه تمام تراکنشها در بلاکچین غیرقابل برگشت هستند این مورد بیشتر از قبل اهمیت خود را نشان میدهد. پس از بررسی و آزمون کدها، گزارشی از جانب تیم بررسیکننده ارائه میشود که در آن به نقاط ضعف کدها و مواردی که میتواند بهبود یابد، اشاره شده است. تیم توسعهدهنده بعد از مطالعه این گزارش موارد ذکر شده را اصلاح خواهد کرد. با دیجیکالا مگ همراه باشید تا با هم ببینیم این بازبینی به چه صورت انجام میشود.
معرفی
بازبینی امنیتی کدهای قرارداد هوشمند در اکوسیستم امور مالی غیرمتمرکز (DeFi) بسیار مرسوم است. اگر در یک پروژه بلاکچین سرمایهگذاری کردهاید، ممکن است تصمیم شما تا حد زیادی بر اساس نتایج بررسی کد قرارداد هوشمند باشد. بیایید با هم نگاهی به روشها، ابزارها و نتایجی که معمولاً در بازبینیهای امنیتی قراردادهای هوشمند مشاهده میشود بیندازیم تا بتوانید تصمیمات آگاهانهتری بگیریم.
بازبینی کد در یک قرارداد هوشمند چیست؟
در یک بازبینی، کدهای قرارداد هوشمند یک پروژه مورد بررسی و ارزیابی قرار می گیرند. این قراردادها معمولا با زبان برنامهنویسی «Solidity» نوشته میشوند و از طریق «GitHub» ارائه میشوند. بازبینی امنیتی کدهای قرارداد هوشمند بیشتر برای پروژههایی با تراکنشهایی با گردش چندین میلیون دلاری که دارای کاربران زیادی هستند اهمیت خود را به توسعهدهندگان یادآور میشود. فرآیند بازبینی کد معمولا شامل چهار مرحله زیر است:
۱. کدهای قراردادهای هوشمند به تیم بازبینی ارائه میشوند تا تحلیلهای اولیه روی آنها انجام شود.
۲. تیم بازبینی نتیجه تحلیلها را به توسعه دهندگان گزارش میدهد تا بر اساس این نتایج، اصلاحات پروژه انجام شود.
۳. تیم پروژه بر اساس گزارش اولیه در خصوص معایب عنوان شده تغییراتی را در پروژه ایجاد میکند.
۴. گزارش نهایی توسط تیم بازبینی ارائه میشود که در آن تمام معایب به همراه اصلاحات انجام شده منتشر میشود.
بازبینی قرارداد هوشمند هنگام سرمایهگذاری در پروژههای جدید DeFi ضروری است. این روند به استانداردی برای پروژههایی تبدیل شده است که قصد دارند توجه کاربران زیادی را به خود جلب کنند، در این میان بازبینی کدهای یک قرارداد هوشمند توسط برخی از شرکتهای مطرح در مباحث امنیت سایبری مانند سرتیک (Certik)، کوانت استمپ (Quantstamp)، هکن (Hacken) و کانسنسیس دیلیجنس (ConsenSys Diligence) باعث میشود کاربران بیشتری به این پروژهها اطمینان کنند.
به چه دلیل نیاز به بازبینی کد قرارداد هوشمند وجود دارد؟
از آنجا که سرمایهی بسیار زیادی از طریق قراردادهای هوشمند پردازش شده یا درون آنها قفل میشوند، هکرها علاقه زیادی به آنها پیدا کردهاند. در صورت بروز خطای امنیتی در قراردادهای هوشمند سرمایه بسیار بزرگی در معرض خطر قرار خواهد گرفت. برای مثال حدود ۶۰ میلیون دلار ETH طی یک حمله به DAO بلاکچین اتریوم از دست رفت، و این موضوع به همینجا نیز ختم نشد و در پایان به هاردفورک در شبکه اتریوم منجر شد.
از آنجایی که تراکنشها در بلاکچین غیرقابل برگشت هستند، اطمینان از ایمن بودن کد پروژه ضروری است. ماهیت بسیار امن فناوری بلاکچین، بازیابی وجوه و حل مشکلات را پس از انجام تراکنش دشوار میکند، بنابراین بهتر است از آسیبهای احتمالی جلوگیری نماییم حتی اگر مجبور به پرداخت هزینههای بالا شویم.
بازبینی کد قرارداد هوشمند به چه صورت انجام میشود؟
هر کدام از کمپانیهای امنیتی برای بازبینی کدها از تکنیکهای خاص خود استفاده میکنند، اما فرایند کلی آن تقریبا مشابه است. مراحل بازبینی کد به شرح ذیل است:
۱. قرارداد هوشمند و معماری پروژه توسط تیم تعریف شده و هدف از بازبینی کدها مشخص میشود. بدین ترتیب، تیم بازبینی برای نوشتن و استفاده از کدها میداند که اهداف پروژه چیست.
۲. یک برآورد از هزینه ها ارائه می شود.
۳. تیم بازبینی شروع به انجام تستهای دستی و خودکار میکند.
۴. یک گزارش اولیه از معایب پیدا شده در اختیار تیم پروژه برای رفع مشکلات قرار میگیرد.
۵. گزارش نهایی در خصوص مشکلات و اصلاحات پروژه به صورت مستند ارائه میشود.
روشهای بازبینی کد
بهرهوری
بازبینی کدهای قرارداد هوشمند فقط برای بررسی مشکلات امنیتی نیست. بلکه آنها بر روی موضوع بازدهی و بهینهسازی نیز متمرکز هستند. بعضی قراردادها، دسته پیچیده ای از تراکنش ها را انجام میدهند تا بتوانند فعالیت خود را تکمیل کنند. با توجه به اینکه هزینههای «GAS» در شبکههایی مانند اتریوم بسیار بالا است، قراردادهایی با بازدهی بالا میتوانند باعث کاهش چشمگیر هزینههای تراکنش شوند.
بهینه سازی عملکرد نیز نشانگر مهارت توسعه دهنده است. روشهای ناکارآمد شانس بیشتری برای شکست فراهم میکنند و باید از آنها اجتناب کرد. صرفهجویی در هزینههای تراکنش باعث میشود توجه کاربران زیادی به پلتفرمها جلب شود.
ضعفهای امنیتی قرارداد
بازبینی کد معمولا شامل پیدا کردن ضعفهای امنیتی قرارداد هستند. برخی از این ضعفها را به راحتی میتوان شناسایی کرد. اما پیدا کردن اکثر ضعف ها نیازمند تکنیکها و استراتژیهای پیچیده است. برای مثال، از طریق قراردادهای هوشمند ضعیف میتوان بازار را دستکاری و حملات «وام فوری» را پیاده سازی کرد. برای شبیهسازی حملات، تیمهای امنیتی تکنیک «آزمون شکستن» را انجام میدهند. برخی از آسیبپذیریهای مرسوم شامل موارد ذیل است:
۱. ورود مجدد (Reentrancy): این حمله زمانی اتفاق میافند که یک تابع به یک قرارداد غیرقابل اعتماد دستور فراخوان خارجی بدهد. در ادامه قرارداد غیرقابل اعتماد یک فراخوان معکوس به تابع اصلی میدهد تا داراییها را به سرقت ببرد.
۲. سرریز و پاریز عدد صحیح (Integer Overflow & Underflow): وقتی یک عملیات محاسباتی توسط قرارداد هوشمند انجام شود، اما خروجی از ظرفیت حافظه اصلی بیشتر شود. (معمولا ۱۸ مرتبه اعشار). این امر باعث میشود تا نتیجه محاسبه تغییر پیدا کند.
۳. فرانت رانینگ (Front Running): فرانت رانینگ به عمل «انجام تراکنشی قبل از تراکنشی مشخص و با آگاهی قبلی» گفته میشود در صورتی که کدها به شکل مناسبی ساختاربندی نشده باشند، برای خرید و فروشهای بازار پیش اخطار ایجاد میشود. در نتیجه، سایر افراد از این اطلاعات سوء استفاده میکنند و بر اساس آنها معامله خواهند کرد.
نقصهای امنیتی پلتفرمها
اکثر بازبینیها شامل ارزیابی شبکه میزبانی کننده از قراردادها و حتی API استفاده شده برای برقراری ارتباط با اپلیکیشن غیرمتمرکز هستند. ممکن است یک پروژه در برابر حملات DDoS ضعیف عمل کند و یا UI وب سایت آن آلوده شده باشد. در این صورت، کاربرانی که کیف پول خود را به اپلیکیشنهای بلاکچینی مخرب متصل کرده باشند در خطر خواهند بود.
گزارش بازبینی کد چیست؟
گزارش بازبینی در پایان فرایند به پروژه ارائه میشود. تیم توسعهدهنده موظف است اطلاعات موجود در گزارش را با کاربران و اعضای انجمن خود به اشتراک بگذارد. در غیر اینصورت، رتبه شفافیت پروژه افت میکند و افراد کمتری به آن اعتماد خواهند کرد. اکثر این گزارشها معایب پیدا شده را در دستهبندیهای مختلف از نظر سطح ریسک امنیتی مرتب میکنند. همچنین در آنها ذکر میشود که پروژه تا چه زمانی فرصت رفع معایب را دارد تا بتواند گزارش پایانی را دریافت کند.
یک گزارش استاندارد باید شامل خلاصه ای از اطلاعات، مثالهایی از کدهای زاید و توصیهها باشد. همچنین باید توضیح دهد که معایب پیدا شده در چه جایی از کدها هستند. پس از اینکه اقداماتی بر اساس گزارش اولیه انجام شد، گزارش نهایی توسط تیم بازبینی منتشر میشود.
معرفی تیمهای بازبینی کد
سرتیک (CertiK)
سرتیک (CertiK) به عنوان معتبرترین تیم بازبینی کد شناخته میشود و کدهای قرارداد هوشمند صدها پروژه توسط آنها مورد ارزیابی قرار گرفته است. از جمله قراردادهای پنکیک سواپ (PancakeSwap)، که بزرگترین بازارساز خودکار BSC است. در تصویر زیر می توانید بخشی از گزارش بازبینی سرتیک برای پنکیک سواپ را مشاهده کنید.
یک قسمت از وب سایت سرتیک (CertiK) به پروژههای بازبینی شده اختصاص یافته تا بتوانید آنها را با یکدیگر مقایسه کنید. هر کدام از پروژهها دارای یک امتیاز هستند که سطح امنیتی آنها را نشان میدهد. در بخش دیگری از این وب سایت نیز میتوانید لیست پروژههای در حال بازبینی را مشاهده کنید.
کانسنسیس دیلیجنس (ConsenSys Diligence)
ConsenSys توسط ژوزف لوبین (یکی از موسسان اتریوم) راه اندازی شده و یکی از معروفترین نهادهای رمزارزی در زمینه توسعه بلاکچین است. این تیم وظیفه بازبینی قراردادهای هوشمند اتریوم را بر عهده دارد. همچنین به یک سرویس خودکار برای بررسی قراردادهای EVM مجهز شده است.
هزینه بازبینی کد قرارداد هوشمند
هزینه دقیق این کار، به تعداد قراردادهای هوشمند بازبینی شده و اعتبار تیم بازبینی بستگی دارد. معمولا یک فرایند بازبینی هزاران دلار هزینه دارد. یک پروژه بزرگ باید حدود ۱۰ هزار دلار برای بازبینی کدهای خود هزینه پرداخت کند.
جمعبندی
خوشبختانه بازبینی کدهای قرارداد هوشمند به یک اصول اولیه استاندارد تبدیل شده است. با این حال زمانی که تمامی پروژههای دیفای این گواهی را داشته باشند دیگر نمیتوان پروژهها بر این اساس ارزشگذاری کرد، در این زمان است که خودتان شخصا باید گزارشات بازبینی پروژه را مطالعه کنید تا بتوانید تصمیمگیری نهایی را انجام دهید. حتی بدون داشتن دانش فنی نیز میتوان از اطلاعات موجود در آنها به برخی نتایج رسید و تصمیم گیری کرد. البته تصمیمگیریهای سرمایهگذاری شما همیشه باید در ابعاد گسترده و بر اساس معیارهای مختلف باشند.
منبع: halborn / hackernoon / Binance Academy