بلاکچین و رمزارز: پژوهشگر | مترجم | نویسنده
معرفی ÆGIS، سپری هوشمند برای قراردادهای هوشمند
مترجم: سپهر هاشمی
با سلام خدمت دوستان عزیز. مقالهای رو دیدم که داشتند ابزار امنیتی با عنوان ÆGIS: Smart Shielding of Smart Contracts رو معرفی میکردند و تصمیم گرفتم ترجمه و منتشر کنم. برای دریافت اصل مقاله اینجا کلیک کنید.
چکیده:
در سال های اخیر، قراردادهای هوشمند هدف سواستفادههای مهمی شده اند و میلیون ها دلار ضرر کرده اند. برخلاف برنامه های سنتی، قرارداد هوشمند پس از استقرار (Deploy) بروزرسانی نمیشود. اگرچه قبلاً ابزارهای مختلفی برای شناسایی آسیبپذیری در قراردادهای هوشمند ارائه شده بود، اما همه آنها در محافظت از قراردادهایی که قبلاً در بلاکچین مستقر شده اند، ناکام میمانند. علاوه بر این، آن ابزارها بر روی آسیبپذیری ها تمرکز میکنند اما اشارهای به کلاهبرداریها (مانند HoneyPot) ندارند. در این کار، ابزاری به نام ÆGIS را معرفی می کنیم که از قرارداد هوشمند و کاربران روی بلاکچین در قبال Exploit شدن محافظت میکند. برای این منظور، ÆGIS تراکنشها را در زمان واقعی بر اساس مطابقت با الگوها (Pattern) برمی گرداند. این الگوها، تشخیص معاملات مخربی که مسبب سواستفاده و یا کلاهبرداری هستند را رمزنگاری میکند. الگوهای جدید توسط یک قرارداد هوشمند رایگیری و ذخیره میشوند، سپس از مزایای مقاومت در برابر دستکاری و همچنین شفافیت ارائه شده توسط بلاکچین استفاده میکنند. قرارداد هوشمند وقتی اجازه بدهد حفاظت از آن بروزرسانی بشود، مانند یک سپر هوشمند عمل کرده است.
مقدمه:
از زمان ظهور بیتکوین (7)، طیف گسترده ای از بلاکچینهای مختلف نیز ظهور کرده اند. اتریوم (13)، با توجه به قراردادهای هوشمند، در حال حاضر محبوب ترین فناوری بلاکچین است. قراردادهای هوشمند برنامه هایی هستند که از طریق گرههای (Node) بلاکچین ذخیره و اجرا می شوند. آن قراردادها از طریق معاملات مستقر و فراخوانی میشوند. قراردادهای هوشمندِ مستقر، غیرقابل تغییر (Immutable) هستند، اما هنوز مستعد باگ هستند. علاوه براین، از آنجاکه صاحبان قراردادها ناشناس هستند، افشای مسئولیت پذیر نیز معمولاً غیرقابل انجام است. گرچه قراردادهای هوشمند با در نظر گرفتن قابلیت ارتقا و قابلیت حذف قابل اجرا هستند، اما این اجباری نیست. در حقیقت، اتریوم قبلاً با چندین حمله ویرانگر به قراردادهای هوشمند آسیبپذیر روبرو شده است. در سال 2016، یک مهاجم با سواستفاده از یک باگ بازپرداخت (Reenterancy) در یک قرارداد هوشمند سرمایه گذاری جمعی موسوم به DAO، بیش از 150 میلیون دلار را دزدید (10). در سال 2017، کیف پول Parity به دلیل باگ منطقی (Logic) در کنترل دسترسیِ قرارداد هوشمند دو بار هک شد و باعث خسارت بیش از 130 میلیون دلار شد (8). در سال 2018، یک شرکت امنیتی بلاکچین به نام Peck Shield گزارش داد که چندین قرارداد هوشمند مورد حمله قرار گرفته یا در برابر Integer Overflow (سرریز عدد صحیح) آسیب پذیر هستند (3). در سال 2019، تورس و همکاران گزارش دادند یک روند میان کلاهبرداران در حال ظهور است که آنها تلاش میکنند قربانیان خود را با استقرار قراردادهای بهظاهر آسیبپذیر که در واقع حاوی تله های مخفی (مانند HoneyPot) هستند، به دام بیندازند. این دام باعث می شود که کاربران در صورت تلاش برای سواستفاده یا تعامل با این قرارداد هوشمند، وجوه خود را از دست بدهند (12).
در پاسخ به این رویدادها، دانشگاه بسیاری از ابزارهای مختلف را پیشنهاد کرده است که به کاربران امکان می دهد قراردادهای هوشمند را قبل از اینکه در بلاکچین مستقر کنند یا با آنها تعامل داشته باشند در قبال آسیب پذیری و کلاهبرداری اسکن کنند (منابع شماره 4و5و11و12 را ببینید). بااینحال، همه این ابزارها نمیتوانند از کاربران بی توجه و قراردادهایی که قبلاً در بلاکچین مستقر شده اند، محافظت کنند. بمنظور محافظت از قراردادهای مستقر شده، رودلر و همکاران (9) از این اصل استفاده می کنند که هر سواستفادهای از طریق یک تراکنش صورت میپذیرد. آنها سریوم (Sereum)، مشتری اصلاح شده اتریوم را پیشنهاد میکنند که تراکنشهای مسبب حملات بازپرداختی را شناسایی کرده و بازمیگرداند. متأسفانه، سریوم سه اشکال عمده دارد. اول اینکه، با وجود انواع آسیب پذیری ها و کلاهبرداری های دیگر، فقط حملات بازپرداخت را تشخیص می دهد. دوم، هر زمان که نوع جدیدی از آسیب پذیری یا کلاهبرداری کشف بشود مشتری میبایست اصلاح و ویرایش بشود. سوم، نه تنها خود این ابزار بلکه هرگونه بروزرسانیِ آن نیز باید توسط اکثر گره ها به صورت دستی انجام شود تا مقررات امنیتی آن موثر واقع شود.
مشارکت ها: عمده مشارکت های ما به شرح زیر هستند:
- ما یک DSL (زبان خاص دامنه) جدیدی معرفی میکنیم که توصیف الگوهای آسیبپذیری را امکانپذیر میکند. این الگوها جرایانات دیتا و کنترل مخرب که در زمان اجرای تراکنشهای مخرب اتریوم اتفاق میافتند را منعکس میکند.
- ما ابزاری به نام ÆGIS ارائه میدهیم که تراکنشهای مخرب را براساس الگوهای آسیب پذیری برگردانده (مصرف گس، بدون اینکه اجازه بدهد آن تراکنش بر وضعیت بلاکچین اثر بگذارد) و از این طریق از حمله به قراردادهای هوشمند آسیب پذیر جلوگیری میکند.
- ما پیشنهاد میکنیم از یک قرارداد هوشمند برای ذخیره و رأی دادن به الگوهای آسیب پذیری جدید جهت انتشار سریع و ایمن بروزرسانی های امنیتی بدون اتکا به مکانیزم های بروزرسانی سمت مشتری استفاده کنیم. این امر یکپارچگی را تضمین میکند، دموکراسی را به ارمغان میآورد و شفافیت کامل در خصوص الگوهای آسیب پذیری پیشنهادی را فراهم میکند.
پیش زمینه:
بلاکچین اتریوم یک لجر (Ledger) عمومی غیر متمرکز است که توسط شبکهای از گرههایی که به یکدیگر بی اعتماد هستند، نگهداری میشود. هر گره یکی از چندین مشتری موجود اتریوم مثل geth را اجرا می کند. با استفاده از این مشتریان، کاربران می توانند تراکنشها را جهت ایجاد و فراخوانی قراردادهای هوشمند ارسال کنند. تراکنشها از طریق شبکه بلاکچین پخش میشوند و توسط ماینرها پردازش میشوند. اینها نوع خاصی از گره ها هستند که بلوک های جدیدی را پیشنهاد میدهند و قراردادهای هوشمند را از طریق ماشین مجازی اتریوم (EVM) اجرا میکنند. EVM یک ماشین مجازی کاملاً مبتنی بر stack و بدون رجیستر است که از یک مجموعه دستورالعمل کامل از کدهای عملیاتی (opcode) پشتیبانی می کند. این کدهای عملیاتی به قراردادهای هوشمند امکان انجام عملیات روی حافظه و تعامل با بلاکچین مانند بازیابی اطلاعات خاص (به عنوان مثال شماره بلوک فعلی) را میدهد. اتریوم برای اطمینان از خاتمه قرارداد و جلوگیری از حملات DDOS از گس (gas) استفاده می کند. بنابراین، هزینهای را برای یک کد عملیاتی اختصاص میدهد. اجرای یک قرارداد هوشمند منجر به اصلاح وضعیت آن میشود. مورد دوم در بلاکچین ذخیره می شود و شامل یک موجودی و یک فضای ذخیره سازی میباشد. موجودی، نشان دهنده میزان اتر (رمزارز اتریوم) است که در حال حاضر متعلق به قرارداد هوشمند است. فضای ذخیره سازی بعنوان یک ذخیره با ارزش کلیدی سازمان یافته است و به قرارداد هوشمند امکان ذخیره مقادیر و نگه داشتن وضعیت در زمان اجرا را می دهد. بطور خلاصه، EVM دستگاهی مبتنی بر تراکنش است که قرارداد هوشمند را براساس داده های ورودی تراکنش و کد بایتِ قرارداد هوشمند به روز میکند.
کار مرتبط:
قراردادهای هوشمند اتریوم برنامه هایی هستند که در سراسر بلاکچین اتریوم اجرا میشوند. متأسفانه، مانند هر برنامه دیگر، اینها نیز ممکن است حاوی باگ باشند و در معرض سواستفاده قرار بگیرند. همانطور که در منبع شماره 1 بحث شد، انواع مختلفی از آسیبپذیری وجود دارد که اغلب منجر به سود مالی برای مهاجم میشوند. این مسئله با این واقعیت بدتر می شود که قراردادهای هوشمند قابل تغییر نیستند. پس از استقرار، نمیتوان آنها را تغییر داد و آسیبپذیریها را نمیتوان برطرف کرد. علاوه بر این، ابزارهای خودکار برای اجرای حملات نیز وجود دارند (4). چندین مکانیسم دفاعی نیز پیشنهاد شده است (به عنوان مثال منابع شماره (5،11،12)). با اینحال، در حالی که این ابزارها آسیبپذیریها و کلاهبرداری ها را شناسایی میکنند، اما نمیتوانند از قراردادهای هوشمند استقراریافته در برابر سواستفاده و یا از کاربران غافل در برابر کلاهبرداری محافظت کنند. بنابراین، برای مقابله با موضوع آسیب پذیری در قراردادهای هوشمند مستقر شده، منبع شماره (9) اصلاحیهای را برای مشتری اتریوم ارائه میدهد. با اینحال، این رویکرد فقط با یک نوع حمله یعنی حمله بازپرداخت روبرو است و نیاز به اصلاح کلیه مشتریان در شبکه دارد. مورد بعد نیز به دلایل زیر خود یک مسئله است. از یک طرف، هر بروزرسانی نرم افزار تشخیص آسیبپذیری نیاز به بروزرسانی پیادهسازیهای مختلف مشتری اتریوم دارد. این مورد هم برای رفع اشکالات و هم برای ارتقاء عملکرد مانند شناسایی آسیبپذیریهای جدید صدق میکند. از طرفی دیگر، هر تغییری در مشتری باید توسط همه گره های شرکت کننده در بلاکچین اتریوم انجام بشود. این کار ممکن است زمانگیر باشد و سازگاری را بین مشتریهای بروز شده و بروز نشده قطع کند. در این کار، ما یک راه حل عمومی پیشنهاد میکنیم که فقط یک بار نیاز به اصلاح مشتری دارد و از قراردادها و کاربران در برابر آسیبپذیریهای موجود و آینده محافظت میکند، بدون اینکه هربار که کلاهبرداری جدید یا قرارداد هوشمند آسیبپذیر کشف بشود، مشتری نیاز به اصلاح داشته باشد.
روش شناسی:
ایده ما این است که هر مشتری اتریوم را با یک EVM اصلاح شده قادر به تفسیر یک DSL همراهی کنید. DSL به طور خاص متناسب با دستورالعملهای EVM طراحی شده است و امکان توصیف جرایانات دیتا و کنترل مخرب را بهشکل الگو فراهم میکند. سپس EVM اصلاح شده میتواند تراکنشها را در حین اجرا بر اساس تطبیق الگو برگرداند. بعنوان مثال، یکInteger Overflow مخرب میتواند همانند الگوی زیر توصیف بشود:
این الگو ارزیابی میکند ببیند یک تراکنش سه شرط زیر را داشته باشد: 1) جریان داده ای از سمت دستورالعمل CALLDATALOAD به دستور ADD وجود دارد. 2) نتیجهی تجمیع (نتیجه علامت + یعنی جمع stack[0] بعلاوه stack[1] ) که توسط EVM بر روی Stack پوش (push) شده است با مجموع دو عنصر stack قبلی متفاوت است. و 3) جریان داده ای از سمت نتیجه (result) به درون دستورالعمل SSTORE یا CALL وجود دارد.
الگوها از طریق یک قرارداد هوشمند که به صورت زنجیره ای مستقر شده است اداره می شوند (شکل 1 را ببینید). هر زمان یک آسیب پذیری یا کلاهبرداری جدیدی کشف شود، هرکسی ممکن است با استفاده از DSL یک الگوی جدیدی بنویسد و آن را از طریق قرارداد هوشمند پیشنهاد کند. این قرارداد لیستی از رأی دهندگان واجد شرایط را که به قبول یا رد الگوی جدید رأی میدهند، نگه میدارد. اگر اکثریت با "بله" رأی داده باشند، آن الگو به لیست الگوهای فعال اضافه میشود. در این صورت، به هر مشتری بطور خودکار اطلاع داده میشود و لیست بروز شده الگوهای قرارداد هوشمند (مانند بلاکچین) را بازیابی میکند. بنابراین، مشتریان بطور مستقل بروز میشوند. تنها نیازمندی، بروزرسانی سمت مشتری یکبارهی EVM برای اضافه کردن قابلیت پردازش الگوی تشریح شده در DSL میباشد. بعبارت دیگر، اگر یک الگو توسط مکانیزم رأی گیری پذیرفته شود، بلافاصله از طریق مکانیزم اجماع موجود بلاکچین اتریوم در بین تمام مشتریان بروز می شود.
مباحثه:
تنظیم لیست رأی دهندگان واجد شرایط بسیار مهم است، زیرا این افراد قدرت تصمیم گیری در مورد نتیجه معاملات را دارند. یکی از گزینه ها انتخاب ماینرها بعنوان رأی دهندگان واجد شرایط است، زیرا این افراد از قبل نقشی قدرتمند در تصمیم گیری در مورد معامله هایی که باید در بلاک ها قرار بگیرند دارند. با اینحال، ماینرها ممکن است انگیزه ای برای جلوگیری از آسیبپذیریها یا کلاهبرداری خاص و همچنین تخصص برای تصمیم گیری در مورد الگوهای اضافه یا رد شده نداشته باشند. علاوه براین، همانطور که در جدول 1 دیده می شود ، ماینرها نباید با توجه به قدرت استخراجشان دارای قدرت رأی باشند. در غیر این صورت، بخش کوچکی از ماینرهای برتر میتوانند تبانی کنند و بیش از پنجاه درصد آرا را با هم کنترل کنند. بنابراین، شاید بهتر باشد گروهی از متخصصان مستقل امنیتی مانند اعضای رجیستری SWC (طبقه بندی ضعف قرارداد هوشمند -Smart Contract Weakness Classification ) انتخاب شوند.
بر خلاف انتخابات دموکراتیک، که حریم خصوصی و اثباتپذیری از اهمیت بالاتری برخوردار است، یک سیستم رأی گیری برای آسیب پذیری ها نیازمند پاسخگویی خواهد بود. از این منظر، بیشتر شبیه سیستمهای رای گیری الکترونیکی "اتاق هیئت مدیره" است تا سیستمهای رای گیری الکترونیکی "پارلمانی". چنین سیستم هایی امکان ردیابی رای رمزگذاری نشده به یک رأی دهنده را فراهم می کند، که به نوبه خود، یک حوزه انتخابیه (به عنوان مثال سهامداران) را قادر می سازد تا رأی دهنده را نسبت به انتخاب رأی خود پاسخگو بدارد. دیگر شرط مهم عدالت است: شرطی که هر رأی دهنده باید از قدرت برابر برای تأثیرگذاری بر نتیجه، بدون توجه به زمان رأی دادن، برخوردار باشد. یکی از جنبه های این امر جلوگیری از درز و افشای نتایج متوسط است (که به رای دهندگان بعدی اطلاعات بیشتری در مورد تأثیر آرا آنها را میدهد). این امر میتواند با استفاده از تعهدات رمزنگاری محقق شود (منابع شماره 2 و 6). البته، این هنوز به رای دهندگان بعدی اجازه می دهد تابلوی تعداد آرا داده شده را ببینند، که نشان می دهد آیا نتیجه به طور بالقوه می تواند مساوی باشد یا نه. این امر عدالت را نقض میکند: آخرین رأی دهنده می تواند برای ایجاد یا از بین بردن یک تساوی بالقوه رأی دهد. برای کاهش این نگرانی ها، رای گیری باید خارج از زنجیره همراه با یک پروتکل قوی انجام شود. علاوه براین، این پروتکل باید به اثبات اجرای صحیح روند رأی دهی منجر شود، که سپس در درون زنجیره برای انجام الزامات پاسخگویی ذخیره می شود.
نتیجه گیری:
ما ÆGIS را بعنوان یک EVM اصلاح شده پیشنهاد میدهیم که از الگوها جهت محافظت از کاربران در برابر قراردادهای هوشمند آسیبپذیر و کلاهبرداری استفاده میکند. علاوه براین، ما مکانیزم جدیدی ارائه میدهیم که اجازه می دهد الگوها بسرعت و بطور شفاف از طریق بلاکچین بروز شوند. سرانجام، ما در مورد چالش هایی که در زمان غیرمتمرکزسازی حاکمیت این الگوها با آنها مواجه شدیم، بحث می کنیم.
قدردانی:
بخشی از این کار توسط صندوق تحقیقات ملی لوکزامبورگ (DNR) تحت اعتبار 13192291 پشتیبانی میشود.
مطلبی دیگر از این انتشارات
PhoenixDAO
مطلبی دیگر از این انتشارات
ViaBTC | حمایت از انجمن های کریپتویی : استخر ViaBTCبا قدرت به تقویت دنیای بلاکچین ادامه مى دهد
مطلبی دیگر از این انتشارات
اتصال کوتاه (Short Circuiting) با عملگر منطقی Nullish coalescing (??) در جاوااسکریپت