audit تکنولوژی بلاکچین و دفتر کل توزیع شده سبب تحول بسیاری از صنایع و حوزهها شده است. با پا گرفتن این تکنولوژی و توسعه کاربردهای آن در زندگی واقعی، اهمیت کارا بودن آن بیشتر و بیشتر شده است؛ به خصوص آن که بیش از هر حوزه دیگری، کاربردهای این تکنولوژی محدود به امور مالی (دیفای)، پرداخت و ذخیره ارزش شده است.
با گره خوردن ارزش مالی به تکنولوژی بلاکچین، انگیزه خرابکاران، تبهکاران و هکرها برای بهرهگیری از این ثروت بیش از قبل شده است. هر جا پاداش یک حمله بیش از هزینه آن باشد، انگیزه کافی برای سو استفاده از آسیبپذیریهای احتمالی وجود دارد. گواه این جمله، به سرقت رفتن بیش از ۲.۱ میلیارد دلار در حملات مختلف به پروتکلهای دیفای در سال گذشته میلادی (۲۰۲۰) است.
در این مطلب از ضرورت بازبینی کد (audit) قراردادهای هوشمند در دنیای بلاکچین خواهیم گفت و درباره مراحل انجام آن بیشتر توضیح خواهیم داد. اما پیش از آن، کمی در مورد قراردادهای هوشمند صحبت کنیم:
فهرست محتوا
قرارداد هوشمند بازبینی کد audit چیست؟
اگر چه حمله به شبکههای لایه یک بیسابقه نیست و چندین بار رخ داده است، اما در خصوص شبکههای بزرگ لایه یک کنونی (برای مثال بیت کوین و اتریوم) هزینه این حملات بسیار بالاست .
برای مثال در مورد خاص شبکه بیت کوین احتیاج به در اختیار داشتن ۵۱ درصد از نودهای شبکه است که حتی با وجود امکان هش ریت اجارهای، به منابع مالی فراوانی برای حمله به شبکه احتیاج است . و بنا بر اصل اشاره شده در بالا، هدف چندان مناسبی برای کسب منفعت مالی نیستند.
در شبکههای کوچکتر (همانند BSV) این ماجرا بیسابقه نیست اما با رونق گرفتن دیفای، ابتدا در شبکه اتریوم و سپس در دیگر شبکههایی که از EVM یا انواع دیگر منطق که به آنها اجازه راهاندازی برنامههای غیرمتمرکز (dApp) را میدهد، حمله به قرارداد هوشمند برنامههای غیرمتمرکز پرمنفعتتر جلوه میکند؛ پاداشی شیرین در ازای هزینهای نسبتا اندک.
برای اینکه از تبعات احتمالی چنین حملاتی آگاه شوید، توجه شما را به هک The DAO جلب میکنم. این پلتفرم که اولین نمونه از سازمانهای مستقل غیرمتمرکز (DAO) در شبکه اتریوم بود، با جذب سرمایه از کاربران و با ایده برقراری نوع تازهای از مدیریت یک سازمان پا به عرصه نهاد.
وجود آسیبپذیری در قرارداد هوشمند audit بازبینی کد این پلتفرم اما سبب شد تا هکرها بتوانند یک سوم خزانه آن (در حدود ۷۰ میلیون دلار) را خالی کنند؛ اتفاقی که سبب انشقاق گستردهای در جامعه اتریوم شد. عدهای که به اصالت کد (Code is Law) اعتقاد داشتند و قائل به بازگشتناپذیر بودن تراکنشهای ثبت شده در دفتر کل بلاکچین بودند و برخی دیگر اعتقاد داشتند که باید با بازآرایی تراکنشها، مبلغ به سرقت رفته را بازگرداند.
در نهایت سرنوشت این دو دسته سبب ایجاد هارد فورک در شبکه اتریوم شد؛ دسته اول مسیر شاخه بدون تغییر را ادامه دادند که منجر به ایجاد شبکه اتریوک کلاسیک (ETC) شد و دسته دوم ادامهدهندگان مسیری شدند که امروز شبکه اتریوم (ETH) نام دارد.
اتریوم کلاسیک چیست؟ همهچیز درباره رمزارز ETC
بنابراین قراردادهای هوشمند audit را میتوان رشتهای کد نوشته شده به زبانهای برنامهنویسی دانست که بر روی بلاکچین راهاندازی میشوند و وظیفه دارند اعمال مختلفی را با توجه به شرایط از پیش تعیین شده و بدون دخالت انسان انجام دهد.
با توجه به سختی برگشتپذیری بلاکچین، میتوان قراردادهای هوشمند را از لحظه استقرار بر روی بلاکچین برگشتناپذیر دانست. بنابراین هر خطا و آسیبپذیری که پیش از راهاندازی کشف و رفع نشود، میتواند یک راه بالقوه برای استفاده هکرها باشد.
قرارداد هوشمند چیست؟ با کاربردهای Smart Contract آشنا شوید
بازبینی کد قرارداد هوشمند audit چیست؟
به بررسی همهجانبه کدهای قرارداد هوشمند پیش از راهاندازی و بارگذاری بر روی شبکه، بازبینی (Audit) گفته میشود. این عمل عموما از جانب گروهی خارج از مجموعه سازنده انجام میشود تا دیدی دقیقتر و بیطرفانه به دست آید.
پس از بررسی و آزمون کدها، گزارشی از جانب تیم بررسیکننده ارائه میشود که در آن به نقاط ضعف کدها و مواردی که میتواند بهبود یابد، اشاره شده است. تیم توسعهدهنده سپس دست به اصلاح موارد ذکر شده میزند.
اهمیت بازبینی قراردادهای هوشمند audit چیست؟
معمولا کنترل کیفیت هر نرمافزار شامل دو بخش تایید (verification) و اعتبارسنجی (validation) است. بلاکچین تکنولوژی به نسبت نوظهوری است و ابزارهای لازم برای برای آن به نسبت به دیگر شاخههای قدیمیتر برنامهنویسی محدود است؛ ابزارهایی همچون VeriSol، Certora، Slither، Solidifier و غیره برای این منظور به کار میروند. میتوانید لیست خوبی از ابزارهای تایید مناسب برای استفاد هدر زبان سالیدیتی را از این ریپو گیتهاب مشاهده کنید.
با توجه به نکته بالا، اهمیت بررسی دستی کدها audit در کنار روشهای خودکار بازبینی برای تشخیص عدم تکرار خطاهای رایج و به کار بردن بهترین روشها (best practice) در طراحی و اجرای کدها حیاتی است. همچنین ارائه گزارش بازبینی درخشان از جانب شرکتهای معتبر این حوزه به جلب اعتماد کاربران در دنیای ارزهای دیجیتال کمک میکند.
مراحل انجام بازبینی کد Audit چگونه است؟
بازبینی کد قراردادهای هوشمند مراحل مختلفی دارد که روند آن را شرح خواهیم داد:
مشخص کردن نسخه سورس کد
پیش از هر چیز، باید نسخهای از سورس کد که بازبینی روی آن انجام میشود، مشخص و ذکر شود. این قضیه به افزایش شفافیت فرایند بازبینی کمک میکند. همچنین به شما کمک میکند تا بین نسخهای که مورد بازبینی قرار گرفته است و تغییرات بعدی که روی کد انجام میدهید، تفکیک قائل شوید. میتوان این تفکیک را به کمک شماره نسخه (version number)، برچسب زمانی (time-stamp) و یا دیگر روشها مشخص کرد.
تفهیم پروژه
پیش از سپردن کد به تیمی خارجی برای بازبینی، ابتدا باید جلسهای توجیهی برای درک متقابل تیم بازبینیکننده نسبت به پروژه، اهداف و معماری آن برگزار شود.
بازبینی مستندات پروژه
تیم بررسیکننده باید مستندات (documentation) مختلف پروژه را به دقت بخوانند و بررسی کنند؛ مستنداتی که در خصوص الزامات تجاری، روند تصمیمگیری در مورد انتخاب نوع معماری، طراحی فنی و غیره نوشته شدهاند. همچنین باید به نتایج آزمونهای داخلی انجام شده دسترسی داشته باشند.
بررسی کد مقدماتی
تیم بررسیکننده باید بهدقت تمام کدهای موجود ریپوی پروژه را بخواند و درک کند که چرا این چنین به کار گرفته شده است.
تحلیل ایستای برنامه
تحلیل ایستای برنامه یا static code analysis نوعی تحلیل برنامه بدون اجرای کد است. این فرایند معمولا به کمک ابزارهای خودکار انجام میشود.
تحلیل کیفیت کد
در این بخش تیم بازبینیکننده میزان پیروی تیم توسعهدهنده به بهترین روشهای (best practices) برنامهنویسی را میسنجند. در این بخش ساختار کدها و توابع، قواعد نامگذاری، حوزه تغریف متغیرها و کامنتهای کدها سنجیده میشوند.
بررسی وجود آسیبپذیریهای رایج
در این بخش تیم بازبین به بررسی کدها برای یافتن خطاها و آسیبپذیریهایی که پیشتر در پروژههای دیگر سبب حمله شده است میپردازند. برخی از آسیبپذیریهای این چنینی عبارتند از:
- ورود دوباره (reentrancy)
- همپوشانی متغیرها (shadowing of variables)
- نشانگرهای ذخیرهسازی که بتوان از آن سو استفاده کرد (storage pointers)
- سرریز و تهریز (overflow and underflow)
- باگهایی که به هکرها این اجازه را دهد تا حملات محرومسازی از سرویس (DoS) را اجرا کنند.
- اعتبارسنجی اشتباه امضاهای رمزنگاری شده
- تولید اعداد (شبه) تصادفی به شکل غیرایمن
- نیازمندی بیش از حد به برچسبهای زمانی
- فرضیات اشتباه برای ترتیب چینش تراکنشها
لیست کاملتری از این آسیبپذیریها را میتوانید در این ریپو مشاهده کنید.
تحلیل کارکردی
در این بخش با اجرا کردن کد، بررسی میشود که آیا قرارداد نوشته شده از پس انجام اعمالی که انتظار میرود بر میآید یا نه. همچنین تمام نتایج ثبت و ضبط میشوند.
گزارشدهی و رهگیری
در انتهای بازبینی، تیم بررسیکننده گزارش جامعی تهیه و تنظیم میکند. پس از تحویل این گزارش، تیم توسعهدهنده باید نواقص و باگهای موجود را برطرف نماید و با ثبت نتایج، خاتمه یافتن آنها را اعلام کند. فرایند یافتن باگ و برطرف کردن آن، فرایندی تکرارشونده است و در تمامی این تکرارها، باید تمامی نتایج ثبت شوند.
برخی از شرکتهای ارائهدهنده خدمات بازبینی و امنیت
در طی سالهای اخیر، به تعداد شرکتهای فعال در این زمینه افزوده شده و تیمهای زیادی در صدد این هستند تا خلا موجود در این حوزه را برطرف نمایند و سهمی از این بازار کم رقیبی به چنگ آورند. لیست برخی از مهمترین این شرکتها در زیر آمده است:
- سرتیک (Certik)
سرتیک یکی از خوشنامترین شرکتهای امنیتی موجود در فضای بلاکچین است. این شرکت علاوه بر بازبینی قراردادهای هوشمند، سرویس امنیت یکپارچهای به نام اسکای نت را عرضه کرده است. این شرکت سرمایهگذاران و حامیان قدرتمندی همچون صرافی بایننس و ماتریکس دارد. - کوانت استمپ (Quantstamp)
تیم امنیت کوانت استمپ سوابق درخشانی در شرکتهای معظمی همچون گوگل، مایکروسافت و اپل دارند. این شرکت محصول شتابدهنده W18 Batch است. علاوه بر ارائه خدمات بازبینی، این شرکتهای ابزارهایی خودکار برای تشخیص نواقص امنیتی تهیه کرده است. - هکن (Hacken)
هکن گستره وسیعی از خدمات مربوط به امنیت را به کاربران خود ارائه میدهد؛ از آزمون نفوذ گرفته تا هماهنگی برای برنامههای کشف خطا (bug bounty). علاوه بر پلتفرمهای فعال در بلاکچین، این شرکت به دیگر شرکتهای نیازمند خدمات امنیتی خدمترسانی میکند و مشتریان بزرگی همچون خطوط هوایی Air Asia دارد. - کانسنسیس دیلیجنس (ConsenSys Diligence)
این پروژه که بخشی از چتر محصولات شرکت کانسنسیس است، ارائهدهنده یکی از برترین انواع بازبینی در کل بلاکچین است. دیگر محصول این شرکت با نام MythX، ابزاری خودکار برای کشف آسیبپذیریها در قراردادهای هوشمند شبکه اتریوم است.
از دیگر شرکتهای مهم دیگر این حوزه میتوان به Slowmist، Peckshield، OpenZeppelin، Trail of Bits و PWC را نام برد.
جمعبندی
بازبینی (audit) قراردادهای هوشمند اگرچه نمیتواند بهشکل کامل جلوی حملات هکرها به برنامههای غیرمتمرکز را بگیرد، اما با استفاده از خدمات متخصصان امنیت بلاکچین میتوان تا حد امکان این کار را برای هکرها سختتر کرد. همچنینی با پایبندی به بهترین روشهای کدنویسی، عملکرد برنامهها را میتوان بهبود بخشید و بروزرسانیهای متعاقب را راحتتر کرد.
در این مقاله با روند audit انجام یک بازبینی فرضی آشنا شدیم و برخی از مهمترین شرکتهای فعال را معرفی کردیم. همچنین از اهمیت چنین عملی و نقش آن در جذب کاربران گفتیم.