فریم ورک SODA یک چارچوب جدید تشخیص آنلاین عمومی برای قراردادهای هوشمند در بلاک چین است که از ماشین مجازی اتریوم (EVM) پشتیبانی می کند. قراردادهای هوشمند به اهداف پرسود و سودآور برای مهاجمان تبدیل شده اند زیرا می توانند مقدار زیادی پول را در خود نگه دارند. متأسفانه، روشهای آفلاین موجود برای کشف آسیبپذیریها در قراردادهای هوشمند یا بررسی صحت قراردادهای هوشمند، نمیتوانند به صورت آنلاین تراکنشهای مهاجم را شناسایی کنند. علاوه بر این، رویکردهای آنلاین موجود فقط بر حملات خاص تمرکز دارند و نمیتوانند به راحتی برای شناسایی حملات دیگر گسترش یابند.
از سوی دیگر، توسعه یک سیستم تشخیص آنلاین جدید از ابتدا، برای قراردادهای هوشمند زمانبر است و نیاز به درک عمیق لایه های بلاک چین دارد، بنابراین پیادهسازی و استقرار سریع مکانیزمها برای شناسایی حملات جدید را دشوار میکند. در این مقاله، ما یک چارچوب تشخیص آنلاین عمومی جدید به نام فریم ورک SODA در قراردادهای هوشمند را بررسی می کنیم که در هر بلاک چینی از ماشین مجازی اتریوم (EVM) پشتیبانی میکند.
مقدمه
فریم ورک SODA از طریق قابلیت، کارایی و سازگاری، خود را از رویکردهای آنلاین موجود متمایز می کند. اول اینکه، SODA به کاربران این امکان را میدهد تا با جدا کردن مجموعه اطلاعات و شناسایی حملات با طراحی لایهای، اپلیکیشنهایی را برای شناسایی حملات مختلف آنلاین (یعنی زمانی که حملات اتفاق میافتند) به راحتی توسعه دهند. در لایه بالاتر، SODA رابط های یکپارچه برای توسعه برنامه های تشخیص در برابر حملات مختلف ارائه می دهد. در لایه پایینی، SODA ابزار EVM را برای جمع آوری تمام اطلاعات اولیه لازم برای شناسایی حملات مختلف و ساخت 11 نوع اطلاعات ساختاری برای سهولت در توسعه برنامه ها ایجاد می کند. بر اساس فریم ورک SODA، کاربران می توانند برنامه های جدید را در چند خط کد بدون تغییر EVM توسعه دهند.
دوم اینکه، SODA کارآمد است زیرا بازیابی اطلاعات بر اساس تقاضا را برای کاهش هزینه های جمع آوری اطلاعات و اتخاذ پیوندهای پویا برای حذف هزینه های ارتباطات بین فرآیندی طراحی می کند. چنین طراحی به کاربران اجازه می دهد تا با استفاده از هر زبان برنامه نویسی که می تواند کتابخانه های پویا ایجاد کند و برنامه های تشخیص را توسعه دهد.
سومین نکته در خصوص فریم ورک SODA، از آنجایی که بلاک چین های بیشتری از EVM به عنوان بستر و زمان اجرای قرارداد هوشمند استفاده می کنند، SODA می تواند به راحتی به چنین بلاک چین هایی بدون تغییر برنامه ها منتقل شود. بر اساس فریم ورک SODA، حدودا 8 برنامه شناسایی برای تشخیص حملاتی که از آسیبپذیریهای اصلی در قراردادهای هوشمند استفاده میکنند توسعه داده شده و SODA در 3 بلاک چین محبوب: اتریوم، Expanse و Wanchain ادغام می شود. نتایج آزمایشی گسترده، اثربخشی و کارایی SODA و برنامههای تشخیص و شناسایی را نشان میدهد.
پیشینه
بسیاری از بلاک چینها از قراردادهای هوشمند پشتیبانی میکنند. این قراردادهای هوشمند برنامههای مستقلی هستند که منطق از پیش تعریفشده را بهطور خودکار و اجباری اجرا میکنند. قراردادهای هوشمند به اهداف پرسود و سودآور برای مهاجمان تبدیل شدهاند زیرا میتوانند مقدار زیادی پول را در خود نگه دارند. به عنوان مثال، ارزشمندترین قرارداد هوشمند روی اتریوم حدود 1.8 میلیون ETH دارد. حملات زیادی در سال های اخیر اتفاق افتاد که منجر به خسارات مالی شدید شد.
به عنوان مثال، با سوء استفاده از آسیب پذیری ورود مجدد در قرارداد هوشمند DAO، یک مهاجم 70 میلیون دلار ضرر مالی ایجاد کرد. علاوه بر این، بدون مدیریت صحیح، یک عملکرد مهم از قرارداد کیف پول چندامضایی مولتی سیگ (Multisig) منجر به زیان مالی 31 میلیون دلاری شد. همین قرارداد هوشمند دارای آسیبپذیری دیگری است که به هکرها اجازه میدهد قرارداد هوشمند را از بین ببرند و بنابراین 153 میلیون دلار مسدود شد.
قرارداد هوشمند EOSBet اعلانها را به درستی مدیریت نمیکرد به طوری که مهاجمان با سوء استفاده از چنین آسیبپذیری متحمل ضرر مالی 0.5 میلیون دلاری شدند.
تأثیرات منفی پایدار خواهد بود زیرا تراکنشهای هجومی پس از اضافه شدن به بلاک چین حذف نمیشوند و حتی تمدید میشوند، زیرا سایر بلاک چینها از ماشین مجازی اتریوم (EVM) به عنوان بستر و زمان اجرای قراردادهای هوشمند استفاده میکنند. (با توجه به اینکه بیش از 20 میلیون قرارداد هوشمند در آن مستقر شده است.)
رویکردهای موجود برای حفاظت از قراردادهای هوشمند را می توان تقریباً به آفلاین و آنلاین تقسیم کرد. رویکردهای آفلاین قراردادهای هوشمند را برای کشف آسیبپذیریها، بررسی صحت آنها، مهندسی معکوس بایت کد قراردادهای هوشمند و شناسایی قراردادهای هوشمند مخرب تجزیه و تحلیل میکنند. با این حال، روشهای آفلاین به دلیل کمبود اطلاعات زمان اجرا و محدودیتهای ذاتی تکنیکهای انتخابشده، نمیتوانند تضمین کنند که میتوان همه آسیبپذیریها را شناسایی و حذف کرد یا خیر؟ بنابراین قراردادهای هوشمند پس از پردازش توسط این رویکردها همچنان می توانند مورد حمله قرار گیرند.
رویکردهای آنلاین تلاش میکنند حملاتی را شناسایی کنند که قراردادهای هوشمند را هدف قرار میدهند یا از قراردادهای هوشمند در برابر حملات پس از استقرار محافظت میکنند که میتواند به دو دسته طبقهبندی شود. دسته اول کد حفاظتی را در منبع/کد بایت قراردادهای هوشمند درج می کند. با این حال، قابلیت های آنها توسط محدودیت اندازه بایت کد EVM و مکانیسم گس محدود شده است.
دسته دوم کد حفاظتی را در زمان اجرای قراردادهای هوشمند (به عنوان مثال EVM) درج می کند. با این حال، این رویکردها را نمی توان به راحتی برای شناسایی حملات جدید گسترش داد چرا که یا فاقد طراحی دقیق، پیاده سازی و ارزیابی هستند یا منابع مصرفی هستند و می توانند بسیاری از حملات را از دست بدهند. در ادامه رویکردهای موجود را در 8 برنامه شرح داده می شود.
رویکرد فریم ورک SODA
یک چارچوب تشخیص آنلاین عمومی جدید به نام SODA (یعنی چارچوب تشخیص آنلاین قرارداد هوشمند در برابر حملات) برای قراردادهای هوشمند در هر زنجیره بلوکی سازگار با EVM پیشنهاد شده و نحوه گسترش SODA برای محافظت از قراردادهای هوشمند در برابر حملات در برنامه مورد بحث قرار گرفته است.
فریم ورک SODA از طریق قابلیت، کارایی و سازگاری خود را از رویکردهای آنلاین موجود متمایز می کند. همانطور که گفته شد چارچوب SODA یک فریم ورک قابل توسعه است که به کاربران اجازه می دهد تا به راحتی برنامه هایی را برای تشخیص آنلاین حملات مختلف توسعه دهند. برای دستیابی به این هدف، SODA جمع آوری اطلاعات و تشخیص حمله را با طراحی لایه ای جدا می کند. در لایه بالاتر، SODA رابط های یکپارچه برای توسعه برنامه های شناسایی فراهم می کند. در لایه زیرین، SODA ابزار EVM را برای جمع آوری تمام اطلاعات ایجاد می کند که برای شناسایی حملات ضروری است.
جهت آشنایی با فریم ورک edgechain و نحوه استفاده از آن برای رمزنگاری، بر روی لینک مربوطه کلیک کنید.
علاوه بر این، چارچوب سودا 11 نوع اطلاعات ساختاری میسازد تا توسعه برنامههای تشخیص را آسان کند. بر اساس SODA، کاربران می توانند برنامه های جدید را در چند خط کد بدون تغییر EVM توسعه دهند. برای نمایش نحوه انجام این کار، 8 برنامه را برای شناسایی حملاتی که از آسیبپذیریهای اصلی در قراردادهای هوشمند سوءاستفاده میکنند، از جمله ورود مجدد، فراخوانی غیرمنتظره عملکرد، دادههای ورودی نامعتبر، بررسی نادرست مجوز، عدم بررسی پس از فراخوان قرارداد، از دست دادن رویداد انتقال و بررسی دقیق توسعه داده می شود.
دوم، SODA کارآمد است چرا که بازیابی اطلاعات درخواستی را طراحی می کند که فقط اطلاعات مورد نیاز برنامه های ثبت شده را جمع آوری می نماید تا هزینه جمع آوری اطلاعات را کاهش دهد. علاوه بر این، SODA برنامه ها را به صورت ناهمزمان اجرا می کند تا هزینه های اضافی را کاهش دهد زیرا اجرای قراردادهای هوشمند نیازی به منتظر ماندن برای نتایج برنامه ها ندارد. علاوه بر این، فریم ورک SODA پیوندهای پویا را برای حذف هزینه های ارتباطات بین فرآیندی (IPC) اتخاذ می کند. بنابراین، کاربران میتوانند با استفاده از هر زبان برنامهنویسی که میتواند کتابخانههای پیوند پویا (DLL) ایجاد و اپلیکیشنهای تشخیص را توسعه دهند. چنین طراحی امکان نصب/حذف اپلیکیشن های شناسایی را در طول اجرای بلاک چین فراهم می کند و بنابراین پاسخ سریع به حملات جدید را تسهیل می کند. آزمایشهای گسترده نشان میدهد که هزینه سربار SODA بدون یا با 8 برنامه تشخیص در پردازش بلوکهای تاریخی به ترتیب 0.4٪ و 25.5٪ است که برای تجزیه و تحلیل گذشتهنگر قابل قبول است.
علاوه بر این، هزینه سربار SODA با هر 8 برنامه در پردازش بلوکهای تازه استخراج شده ناچیز است، زیرا استخراج بلوک نسبت به تشخیص حمله زمانبرتر است. نتایج تجربی همچنین نشان میدهد که بازیابی اطلاعات بر اساس تقاضای پیشنهادی برای کاهش هزینه ها موثر است و تأخیر تشخیص ناچیز است. SODA با هر بلاک چینی که از EVM به عنوان زمان اجرای قرارداد هوشمند خود استفاده می کند، سازگار است. EVM ابتدا برای اتریوم طراحی شد و سپس به سرعت توسط بسیاری از بلاک چینهای دیگر (مانند Expanse، Wanchain، Tomochain، SmartMesh، CPChain، ThunderCore) مورد استفاده قرار گرفت. بنابراین، سودا می تواند توسط آنها استفاده شود.
برای نشان دادن سازگاری با سایر بلاک چین ها، فریم ورک SODA، حدود 8 برنامه شناسایی را در 3 بلاک چین، یعنی اتریوم، Expanse و Wanchain ادغام می کند. پس از اجرای این بلاک چین ها با SODA، حملات بسیاری شناسایی می شوند. شایان ذکر است که SODA اولین سیستم تشخیص آنلاین برای Expanse و Wanchain است.
کاربران بالقوه فریم ورک SODA شامل، (اما نه محدود به)، تحلیلگران امنیتی هستند که نگران رویدادهای امنیتی روی بلاک چین هستند، همچنین توسعه دهندگان قراردادهای هوشمند و اشخاص ثالثی که قراردادهای هوشمند را در زنجیره خصوصی ارزیابی می کنند. بنابراین، ما فرض میکنیم که کاربران SODA قابل اعتماد هستند و برنامههای تشخیصی که روی SODA اجرا میشوند بدون مشکل هستند. مشارکت ها این اثر سه سهم عمده دارد:
- فریم ورک SODA، به عنوان یک چارچوب آنلاین عمومی جدید برای شناسایی حملات روی بلاک چین های سازگار با ماشین مجازی اتریوم طراحی و پیاده سازی می شود. سودا از طریق قابلیت، کارایی و سازگاری خود را از رویکردهای آنلاین موجود متمایز می کند.
- بر اساس هشت SODA برنامه با روش های جدید، برای شناسایی حملاتی که از آسیب پذیری های عمده در قراردادهای هوشمند سوء استفاده می کنند، توسعه داده می شود. علاوه بر این، فریم ورک SODA در 3 بلاک چین محبوب سازگار با EVM ادغام می شود. برنامه های تشخیص و نتایج آزمایشی در https://github.com/pandabox-dev/SODA منتشر خواهند شد.
- با انجام آزمایشهای گسترده برای ارزیابی SODA، مشاهده میکنیم که SODA به همراه برنامههای تشخیص دیگر، حملات بسیاری را با هزینه های کم شناسایی کردند.
پیش زمینه
بلوک
بلاک چین لیستی در حال رشد از بلوک ها است که هر کدام شامل یک هش رمزنگاری از بلوک قبلی (برای پیوند دادن بلوک قبلی)، یک مهر زمانی، (زمانی که بلوک استخراج شد) و تراکنش ها می باشد. بلوک ها توسط ماینینگ تولید می شوند.
حساب
دو نوع حساب در اتریوم وجود دارد: حساب متعلق به خارجی (EOA) و قرارداد هوشمند. یک EOA توسط یک کلید خصوصی کنترل می شود و حاوی کد EVM نیست. یک حساب قرارداد هوشمند حاوی کد بایت EVM از کد اجرایی است و باید توسط یک EOA یا قرارداد هوشمند دیگری ایجاد شود. هر حساب با آدرس آن به مقدار 20 بایت، ارجاع داده می شود.
قرارداد هوشمند
یک قرارداد هوشمند معمولاً در یک زبان برنامه نویسی سطح بالا (به عنوان مثال، Solidity) ایجاد میشود و سپس در بایت کد EVM که دنبالهای از دستورالعملهای EVM است، کامپایل میشود.
EVM از مفسر خود برای اجرای دستورالعمل های EVM استفاده می کند و در حال حاضر بیش از 130 دستورالعمل EVM منحصر به فرد را پشتیبانی می کند. قبل از فراخوانی یک قرارداد هوشمند، بایت کد EVM آن باید بر روی بلاک چین مستقر شود. برای فراخوانی یک تابع در قرارداد هوشمند، باید شناسه تابع به جای نام تابع گیرنده ارائه شود. شناسه تابع، 4 بایت اول هش امضای تابع است که نام تابع با لیست انواع پارامترها است.
پشته، حافظه، ذخیره سازی
EVM یک ماشین مجازی مبتنی بر پشته (stack) است و از یک پشته برای ثبت عملکردها، نتایج محاسباتی دستورالعملهای EVM، پارامترهای تابع و غیره استفاده میکند.
حافظه یک فضای موقت برای ذخیره پارامترهای تابع، مقادیر بازگشتی تابع و غیره است.
ذخیره سازی یک فضای دائمی مانند پایگاه داده برای ذخیره جفت های کلید/مقدار است.
تراکنش
تراکنش پیامی است که توسط یک حساب ارسال می شود. دو نوع تراکنش وجود دارد که توسط فرستنده ها متمایز می شوند. به طور دقیق تر، یک EOA یک تراکنش خارجی و یک قرارداد هوشمند یک تراکنش داخلی ارسال می کند. یک بلوک فقط تراکنش های خارجی را ثبت می کند زیرا تراکنش های داخلی را می توان با اجرای قراردادهای هوشمند بازتولید کرد. یک تراکنش حاوی اطلاعات مهمی است، به عنوان مثال: مقدار ETH برای ارسال، بایت کد EVM یک قرارداد هوشمند که قرار است مستقر شود، پارامترهای فراخوانی یک قرارداد هوشمند و ...
رویداد (Event)
قراردادهای هوشمند با استفاده از دستورالعملهای ثبت وقایع، مانند LOG3، LOG2، LOG1، LOG0 و LOG4، رویدادها را منتشر میکنند. یک رویداد از صفر یا چند موضوع و یک فیلد داده تشکیل شده است.
ETH، توکن
ETH ارز رمزنگاری شده بومی اتریوم است. هنگامی که یک بلاک استخراج می شود، به استخراج کننده با اتریوم پاداش داده می شود. اتریوم از توکن های متعددی پشتیبانی می کند که رمزارزهایی هستند که به عنوان قراردادهای هوشمند پیاده سازی می شوند. یک توکن معمولاً باید با برخی استانداردهای توکن سازگار باشد، به عنوان مثال، ERC-20 یا استاندارد توکن ERC-721. در غیر این صورت، ابزارهای شخص ثالث (به عنوان مثال، کیف پول، صرافی ها) نمی توانند به درستی با آن تعامل داشته باشند.
گره کامل (Full node)
برای استخراج و تأیید بلوک ها، یک گره کامل بلاک چین، تمام بلوک های تاریخی را از گره های دیگر دانلود می کند و تراکنش های موجود در بلوک ها را دوباره پخش می کند. یک گره کامل مجهز به یک EVM برای اجرای قراردادهای هوشمند است. بنابراین، یک فول نود می تواند تمام اطلاعات بلوک ها، تراکنش ها و اجرای قراردادهای هوشمند را مشاهده کند.
طراحی و اجرای فریم ورک SODA
الف. معماری فریم ورک SODA
همانطور که در شکل بالا نشان داده شده است، SODA در یک گره کامل از هر بلاک چین سازگار با EVM یکپارچه شده است زیرا فقط یک گره کامل می تواند بلاک ها را استخراج کند. این مجموعه، اطلاعات و تشخیص حمله را با طراحی لایهای جدا میکند تا توسعه اپلیکیشنهای شناسایی آسان باشد. به طور دقیق تر، SODA از سه ماژول، یعنی جمع آوری کننده بلوک، جمع آوری کننده ترانس و جمع آوری کننده اطلاعات اولیه بلوک ها، تراکنش ها و دستورالعمل های EVM و به ترتیب از لایه قرارداد هوشمند، لایه توافق و لایه داده گره کامل استفاده می کند.
توجه داشته باشید که EVM به لایههای داده، اجماع و کاربرد خدمات میدهد، جایی که لایه داده شامل ساختارهای داده تعریفشده و انواع دادهها (به عنوان مثال، حساب ها، تراکنشها) است، لایه اجماع نحوه رسیدن گرهها به اجماع و قرارداد هوشمند را تنظیم و لایه قراردادهای هوشمند را ذخیره می کند. اطلاعات اولیه به جمعآورنده اطلاعات ماژول ارسال میشود که اطلاعات مورد نیاز را در اختیار برنامههای شناسایی قرار میدهد. برای سهولت درک رفتارهای قراردادهای هوشمند، 11 نوع اطلاعات ساختاری را انتزاع کرده و ماژول لایه انتزاعی اطلاعات را توسعه میدهد تا با خلاصه کردن اطلاعات اولیه از جمعآورنده اطلاعات، آنها را بسازد. اطلاعات جمعآوریشده زمان اجرا، در صف اطلاعات نگهداری میشود که از آن برنامههای شناسایی اطلاعات زمان اجرا را به صورت ناهمزمان مصرف میکنند.
یک برنامه تشخیص میتواند هم اطلاعات اولیه جمعآوریشده توسط جمعآورنده اطلاعات و هم اطلاعات ساختاری ارائهشده توسط IAL (یا information abstraction layer) برای شناسایی حملات خاص را به دست آورد. به طور دقیق تر، ابتدا باید برنامه از طریق رابط یکپارچه ارائه شده توسط مدیر ماژول ثبت شود و سپس مدیر اطلاعات جمع آوری کننده را در مورد اینکه چه اطلاعاتی باید به برنامه ارسال شود را مطلع می کند.
یک برنامه در صورت تشخیص ناهنجاری (به عنوان مثال، حمله، قرارداد هوشمند آسیبپذیر) به ثبتکننده اطلاع میدهد و ثبتکننده هشداری را با شرح موقعیتهای غیرعادی اعلام میکند. همانطور که در شکل بالا نشان داده شده است، همه برنامه های تشخیص در داخل فرآیند یک گره کامل اجرا می شوند اما در رشته ای متفاوت از رشته ای که EVM را اجرا می کند. (همانطور که در شکل نشان داده شده است.) چنین طراحی دارای سه مزیت است. اول، IPC (هزینه های ارتباطات بین فرآیندی) حذف می شود. دوم، اجازه اجرای برنامه ها به صورت ناهمزمان را دارد. سوم، به کاربران این امکان را میدهد تا برنامههای تشخیص را بدون تغییر EVM توسعه دهند.
ب. مدیر
مدیر مسئول ثبت و لغو ثبت برنامه های شناسایی است. هنگامی که فول نود شروع می شود، مدیر تمام DLL ها را در یک پوشه پیش فرض در حافظه بارگذاری می کند و تابع (register) را در هر DLL (dynamic link libraries) اجرا می کند که اطلاعات ثبت و مقداردهی اولیه برنامه را ارائه می دهد، از جمله: اطلاعات زمان اجرا مورد نیاز برنامه و شماره بلوک که نشاندهنده زمان راهاندازی برنامه و عملکردهای مورد استفاده برای دریافت اطلاعات زمان اجرا مختلف است.
مدیر از یک فرهنگ لغت برای حفظ اطلاعات ثبت نام همه برنامه ها استفاده می کند. فرهنگ لغت جفتهای کلید/مقدار را ثبت میکند، جایی که کلید نوع اطلاعات زمان اجرا و مقدار فهرست برنامههایی است که به چنین اطلاعاتی در مورد زمان اجرا نیاز دارند. اگر گره کامل اجرا نمی شود، لغو ثبت یک برنامه به سادگی، DLL مربوطه را از پوشه پیش فرض حذف می کند.
برای کسب اطلاعاتی در مورد تفاوت نود و ماینر، مقاله مربوطه را مطالعه فرمایید.
هنگامی که گره کامل اجرا می شود، می توان یک برنامه شناسایی را به صورت پویا ثبت کرد، با ارسال یک پیام ثبت نام به مدیر که حاوی مسیر کامل برنامه، اطلاعات زمان اجرا مورد نیاز برنامه و شماره بلوک است که نشان می دهد برنامه باید چه زمانی راه اندازی شود، و توابع مورد استفاده برای دریافت اطلاعات زمان اجرا مختلف چیست. به طور مشابه، زمانی که گره کامل اجرا میشود، میتوان یک برنامه را به صورت پویا لغو ثبت کرد: با ارسال یک پیام لغو ثبت به مدیر که حاوی اطلاعات مربوط به برنامه لغو ثبتشده و شماره بلوک است که نشان میدهد چه زمانی برنامه باید متوقف شود. برای سهولت استفاده، دو API، registerApp و unregisterApp را به ترتیب برای ثبت و لغو ثبت یک برنامه به EVM اضافه می کنیم. سپس، کاربران فقط می توانند آنها را در قسمت گره کامل برای ثبت نام یا لغو ثبت برنامه ها فراخوانی کنند.
ج. جمع آوری اطلاعات
جمعآورنده اطلاعات تمام اطلاعات زمان اجرا، از جمله اطلاعات بلوکها، تراکنشها و دستورالعملهای EVM اجرا شده را با سفارشیسازی EVM و در نظر گرفتن اثراتی که میتواند توسط هر تراکنش و هر دستور EVM اجرا شده ایجاد شود، به دست میآورد. به طور دقیق تر، فریم ورک SODA تمام فیلدهای هر بلوک و هر تراکنش را ثبت می کند. اگر یک دستورالعمل EVM یک مقدار را بخواند، SODA مقدار و مکان خوانده شده را ثبت می کند. به طور مشابه، اگر یک دستورالعمل EVM مقداری را بنویسد، SODA مقدار، مکان نوشته شده و مقدار قبلی ذخیره شده در آن مکان را ثبت می کند. توجه داشته باشید که مکان در حال خواندن یا نوشتن میتواند فیلدی از یک بلوک (به عنوان مثال، هش یک بلوک)، یک تراکنش، یا یک آیتم پشته، یک منطقه حافظه یا یک شکاف ذخیرهسازی یک قرارداد هوشمند باشد.
جمع کننده بلوک
جمع کننده بلوک تمام فیلدهای هر بلوک را بدست می آورد. پس از مطالعه کد منبع رسمی EVM توسعهیافته، مشخص می شود که یک بلوک از یک هدر بلوک و یک بدنه بلوک تعریف شده در block.go تشکیل شده است. هدر بلوک حاوی ابرداده های مفیدی است، مانند: شماره بلوک، دشواری استخراج بلوک، استخراج کننده ای که بلوک را تولید می کند، پاداش استخراج به ماینر و مهر زمانی که بلوک استخراج شده است.
جهت آشنایی با هزینه تراکنش در شبکه های مختلف، بر روی لینک مربوطه کلیک کنید.
بدنه بلوک شامل تراکنش های خارجی است. یک بلوک می تواند 0 تراکنش داشته باشد تا بدنه بلوک خالی باشد. برای دستیابی به اجماع، EVM بلوکهای تابع Process را در حالت processor.go تأیید میکند که برای هر بلوک دانلود شده فراخوانی میشود. از این رو، کدی را در ()Process اضافه می کنند تا تمام فیلدهای هر بلوک را ثبت کند.
جمع کننده ترانس
جمع کننده ترانس تمام فیلدهای هر تراکنش خارجی و داخلی را با فرآیندهای مختلف به دست می آورد. یک تراکنش خارجی حاوی اطلاعات زیادی است از جمله آدرس فرستنده تراکنش و گیرنده تراکنش و مقدار ETH برای ارسال و داده های ورودی. اگر تراکنش برای استقرار یک قرارداد هوشمند استفاده شود، داده های ورودی حاوی بایت کد قرارداد هوشمند است. اگر تراکنش برای فراخوانی یک تابع استفاده شود، داده های ورودی حاوی شناسه تابع است که نشان می دهد کدام تابع و آرگومان های تابع باید فراخوانی شود.
به این منظور کدی را به تابع ()ApplyTransaction در state processor.go اضافه می کند که هر تراکنش خارجی را در یک بلوک اجرا می کند تا تمام فیلدهای یک تراکنش خارجی را ثبت کند. اطلاعات حمل شده توسط یک تراکنش داخلی مشابه اطلاعات یک تراکنش خارجی است. تمام فیلدهای هر تراکنش داخلی با افزودن کد به کنترل کننده های تفسیر دستورالعمل های EVM CREATE، CALL، CALLCODE، DELEGATECALL، STATICCALL، SELFDESTRUCT ثبت می شود که می تواند تراکنش های داخلی ایجاد کند.
Ins Collector
بیش از 130 دستورالعمل EVM وجود دارد که توسط یک EVM پشتیبانی می شود. در فریم ورک SODA، کدی به کنترل کننده های تفسیر همه دستورالعمل های EVM اضافه می شود تا اطلاعات زمان اجرا تمام دستورالعمل های EVM اجرا شده را ضبط کند. برای جلوگیری از از دست دادن هر گونه اطلاعات مفید، تمام جلوه هایی را که می توان توسط هر دستورالعمل ایجاد کرد، ثبت می شود. انواع اطلاعات دستورالعملی که می تواند توسط فریم ورک SODA بدست آید به شرح زیر است.
1: SODA نام یک فیلد، مکانی در فیلد که باید خوانده شود و مقدار خوانده شده را ثبت می کند. (در صورتی که یک دستورالعمل قسمتی از یک بلوک، یک تراکنش یا قرارداد هوشمند اجرا شده را بخواند.) به عنوان مثال، برای دستور BLOCKHASH، که بلاک هش یک بلوک مشخص را دریافت می کند، SODA نام فیلد، "block hash" و مقدار آن را ثبت می کند.
2: SODA موجودی اصلی و موجودی جدید را در صورتی که یک دستورالعمل موجودی حساب را تغییر دهد، ثبت می کند. به عنوان مثال، برای دستور CALL که می تواند ETH را از حساب A به حساب B ارسال کند، SODA موجودی اصلی و موجودی جدید A و B را به ترتیب ثبت می کند.
3: SODA اقلام پشته مصرف شده یا اضافه شده توسط یک دستورالعمل را ثبت می کند.
4: SODA مقدار و مکان آن را در حافظه یا مکان ذخیره سازی ذخیره می کند. (اگر دستورالعملی حافظه یا ذخیره سازی را می خواند.) به عنوان مثال، برای دستور MLOAD که 32 بایت از حافظه را می خواند، سودا 32 بایت و اولین مورد پشته را که مکان خواندن را در حافظه نشان می دهد، ضبط می کند.
5: SODA مقدار اصلی، مقدار جدید و مکان آن را ثبت می کند.
نتیجه گیری
فریم ورک SODA یک چارچوب جدید تشخیص آنلاین عمومی برای شناسایی حملات مختلف است. SODA به دلیل قابلیت، کارایی و سازگاری، نسبت به رویکردهای آنلاین موجود برتری دارد. با فریم ورک SODA، کاربران می توانند به سرعت برنامه هایی را برای شناسایی و تشخیص حملات جدید توسعه دهند. این پلتفرم 8 برنامه را با روشهای تشخیص جدید برای شناسایی حملاتی که از آسیبپذیریهای اصلی در قراردادهای هوشمند سوءاستفاده میکنند، توسعه می دهد. علاوه بر این، SODA در سه بلاک چین محبوب که از EVM پشتیبانی میکنند ادغام می شود. با انجام آزمایشهای گسترده برای ارزیابی SODA، مشاهده میشود که این چارچوب همراه با برنامههای شناسایی میتواند به طور موثر بسیاری از حملات را با هزینه های کم شناسایی کند.