هفته پیش دو اتفاق مهم به طور همزمان در دنیای بلاک چین رقم خورد؛ توقف چندساعته فعالیت شبکه سولانا و حمله ناموفق به شبکه اتریوم. در این مقاله قصد داریم تا این حمله ناموفق به شبکه اتریوم را توضیح داده و نکات مهم این اتفاق را باهم مرور کنیم. همچنین در مقاله زیر علل وقوع اختلال در شبکه سولانا را توضیح دادهایم؛ که پیشنهاد میکنیم این مقاله را نیز مطالعه کنید:
ماجرای حمله به شبکه اتریوم چه بود؟
روز سه شنبه ۲۳ شهریور ماه، یکی از کاربران استخر استخراج Flexpool وقوع اختلالی در عملکرد شبکه اتریوم را اعلام کرد. او نوشت:
دوباره شاهد وقوع خطا در شبکه اصلی اتریوم هستیم؟
در آن لحظه، شبکه بلاک چین اتریوم دچار انشعاب شد و همزمان دو زنجیره بلوکی متفاوت بوجود آمد. او در توضیح این اتفاق نوشت:
بعضی از نودهای من، بلاکهایی را دریافت کردهاند که عدد این بلاکها از نظر تئوری نمیتواند وجود داشته باشد و زنجیرهای طولانیتر در شبکه بوجود آمده است.
این نود شبکه اتریوم برای ماینینگ اتر از کلاینت Nethermind استفاده میکند. محققان متوجه شدند که یکی از نودهای شبکه اتریوم به جای ارائه یک بلاک، یک زنجیره از بلاکها را به شبکه معرفی کرده و همین موضوع برخی از نودهای شبکه را گمراه کرده است.
در شبکههایی که از ساختار گواه اثبات کار برای دستیابی به اجماع در شبکه استفاده میکنند، برای ایجاد هر بلاک جدید در شبکه، میان تمامی ماینرهای شبکه رقابتی بوجود میآید و هر نود با توجه به ضوابط تعریف شده در شبکه به دنبال یافتن بلاک جدید و دریافت پاداش آن است. هر بار که یک ماینر بلاک جدید را در شبکه پیدا کرد، آن را به سایر نودهای شبکه اعلام کرده و در صورت تایید آن، رقابت فعلی به پایان رسیده و ماینر پیروز، پاداش خود در دریافت میکند. سپس رقابت برای بلاک بعدی آغاز میشود و این روند به صورت مداوم در شبکه اجرا میشود.
اما اینبار، یکی از نودهای شبکه اتریوم، به جای ارائه یک بلاک، به یکباره ۵۵۰ بلاک را به شبکه معرفی کرد. البته این بلاکها مطابق ضوابط شبکه اتریوم ایجاد نشده بود. اما معرفی ۵۵۰ بلاک جدید، باعث بوجود آمدن انشعاب در شبکه شد. در این لحظه، ماینرها با دو زنجیره بلوکی مواجه شدند که یکی از آنها به اندازه ۵۵۰ بلاک، طولانیتر از زنجیره دیگر بود. در چنین مواقعی، نودهای شبکه زنجیره طولانیتر را به عنوان زنجیره اصلی انتخاب میکنند. اما زنجیره طولانیتر در این لحظه، زنجیره نامعتبری است که توسط یک نود متخلف و خارج از قواعد شبکه، ارائه شده است.
بسیاری از نودهای شبکه اتریوم به محض مواجهه با این زنجیره نامعتبر، آن را رد کردند و افزودن بلاک جدید به این زنجیره را نپذیرفتند. اما حدودا ۲۵ درصد از نودهای کلاینت ندرمایند این زنجیره جدید را به عنوان زنجیره معتبر شناسایی کردند و در واقع به دام افتادند. ماریس ون در ویجن (Marius Van Der Wijden) یکی از توسعهدهندگان شبکه اتریوم در این مورد نوشت:
فردی به هدف آسیب به شبکه اتریوم، تعداد ۵۵۰ بلاک جدید را به یکباره به شبکه معرفی کرد. اما این زنجیره از بلاکها مطابق قواعد ایجاد بلاک در شبکه اتریوم نبود؛ درصد کوچکی از ماینرهای Nethermind اتریوم این زنجیره را به عنوان زنجیره اصلی برگزیدند. اما درصد قابل توجهی از نودها، این زنجیره موازی ایجاد شده را رد کردند.
در نهایت این حمله به دلیل آنکه تنها ۲۰ نود شبکه، معادل ۰.۸ درصد از کل نودهای شبکه اتریوم، را به دام انداخت به عنوان یک حمله ناموفق به شبکه اتریوم قلمداد شد. پس از چند دقیقه، نودهای به دام افتاده مجددا به زنجیره اصلی بازگشتند و ماجرا به پایان رسید.
واکنش ندرمایند به این اتفاق چه بود؟
برخی از کاربران این حمله به شبکه اتریوم را در واقع حمله به نودهای ندرمایند میدانند. در ادامه یکی از انتقادهایی که خطاب به موسس ندرمایند منتشر شده را مشاهده میکنید:
چرا نودهای کلاینت ندرمایند، بلاکهای نامعتبر را به عنوان زنجیره اصلی شناسایی کردهاند؟ آیا دلیل این خطا مشخص شده است؟ ایا راهکاری برای تکرار نشدن این اتفاق وجود دارد؟
توماس استنزا موسس و اراپهدهنده کلاینت ندرمایند اتریوم در واکنش به این انتقاد در توییتر خود نوشت:
ما در آینده گزارشی را در این زمینه منتشر خواهیم کرد. اکنون این مشکل برطرف شده است.
ندرمایند پس از ۷ ساعت از وقوع حمله نسخه نرمافزاری خود را بروزرسانی کرد و از کاربران خود خواست تا آخرین نسخه را استفاده کنند. توماس در توییتر خود و در توضیح این اتفاق نوشت:
بخش قابل توجهی از نودهای ندرمایند در دام زنجیره بلوکی نامعتبر افتادند که دلیل آن عدم کنترل نکات امنیتی است که من مدتها قبل به آن اشاره کردهام.
آیا اتفاقی که برای اتریوم افتاد، نگران کننده است؟
ما در بالا سعی کردیم تا ماجرای حمله ناموفق به شبکه اتریوم را توضیح دهیم. اما هدف ما صرفا بیان اخبار نیست. بلکه رصد اتفاقات پشت این اخبار در حد توان خود و یادگیری یک روش حمله به شبکههای مبتنی بر الگوریتم گواه اثبات کار است. شبکه بلاکچین اتریوم در حال حاضر از الگوریتم PoW استفاده میکند. این حمله ناموفق، یکی از روشهای حمله به این مدل شبکهها را به ما یادآوری کرد و آن Blockchain selfish mining است. از آنجا که شبکههای بلاک چین اتریوم و بیت کوین، Open بوده در نتیجه هرکس میتواند به این شبکهها متصل شده و در آن مشارکت کند.
تمامی نودها در رقابت برای یافتن بلاک جدید در این شبکهها هستند تا پاداش دریافت کنند. در حالت طبیعی، هر نود یا ماینر به محض یافتن بلاک جدید، آن را در قالب یک پیام در شبکه منتشر میکند و در واقع به تمامی نودها اعلام میکند که او برنده این رقابت است. سایر ماینرها به محض دریافت این پیام و پس از بررسی بلاک، آن را تایید میکنند و با در نظر گرفتن اطلاعات آخرین بلاک، رقابت برای یافتن بلاک بعدی را آغاز میکنند.
اما در موقعیت سلفیش ماینینگ، شاهد رفتار خودخواهانه یک ماینر هستیم. در این حالت، ماینری که موفق به یافتن بلاک جدید شده به جای اعلام آن در شبکه، بلاک را نزد خود نگه داشته و تلاش برای یافتن بلاک جدید را آغاز میکند. در حالی که سایر نودها بی خبر از همهجا همچنان به دنبال بلاک قبلی هستند. در واقع این ماینر در تلاش برای ایجاد یک زنجیره خصوصی است. اصطلاحا به این نود، سلفیش ماینر میگویند.
این ماینر به کار خود ادامه میدهد تا آنجا که تراکنشهای مورد نظر خود را در بلاکهای زنجیره خصوصی خود جای دهد. تا زمانی که زنجیره خصوصی او از زنجیره اصلی شبکه طولانیتر باشد، او میتواند براساس اهداف خود، این روند را ادامه دهد. در شرایطی که زنجیره خصوصی او از زنجیره اصلی طولانیتر باشد، او به یکباره زنجیره خصوصی خود را در شبکه منتشر میکند. سایر نودها نیز به یکباره با زنجیرهای طولانیتر از زنجیره اصلی شبکه مواجه میشوند. در نتیجه شاهد شکلگیری دو زنجیره متفاوت در شبکه هستند و از آنجا که زنجیره سلفیش ماینر طولانیتر است، آن زنجیره را به عنوان زنجیره اصلی انتخاب میکنند. اکنون زنجیره مدنظر سلفیش ماینر به عنوان زنجیره اصلی شناسایی میشود. اما در برخی از بلاکهای این زنجیره، تراکنشهای مورد نظر این ماینر ذخیره شده و در صورتی که این زنجیره ادامه یابد، او به شبکه حملهای موفقیتآمیز انجام داده است. این اتفاق باعث ایجاد آسیب در شبکه خواهد شد.
تنوع کلاینتهای شبکه اتریوم
نکته بعدی که پس از این حمله، اهمیت آن دوباره به ما یادآوری شد، جمله ون در ویجن، توسعهدهنده اتریوم است؛ او پس از این حمله در توییتر خود نوشت:
تنوع در کلاینتهای شبکه اتریوم نکته بسیار حیاتی در سالمتر و امنتر ماندن اتریوم است. مخصوصا در وضعیتی که اتریوم در حال مهاجرت بزرگ به الگوریتم گواه اثبات سهام است.
اتریوم شبکهای توزیع شده از کامپیوترهایی است که با اجرای نرمافزاری به تایید تراکنشها و ایجاد بلاک در شبکه میپردازند. این مشارکتکنندگان در واقع نودهای شبکه اتریوم هستند. این نودها برای پیادهسازی یک نود در شبکه از کلاینتهای مختلف استفاده میکنند. در تصویر زیر موقعیت مکانی نودهای شبکه اتریوم را مشاهده میکنید:
همانطور که در تصویر فوق مشخص است، تمرکز مکانی نودهای شبکه اتریوم بیشتر در قاره آمریکا است. هر یک از این نودها از یک کلاینت اتریوم استفاده میکنند. در حال حاضر، کلاینتهای بسیاری در شبکه اتریوم فعالیت دارند. تفاوتهای این کلاینتها در زبان برنامهنویسی پشتیبانی شده مثل زبان Go، Rust و…، که هر نود بر اساس نیازها و شرایط از آنها استفاده میکند.
کلاینت Go Ethereum که به اختصار به آن Geth میگوییم، کلاینتی است که با زبان Go اجرا شده و اکنون پراستفادهترین کلاینت در شبکه اتریوم است. بیش از ۹۹ درصد از نودهای شبکه اتریوم از کلاینت گث استفاده میکنند.
ندرمایند یکی دیگر از کلاینتهای شبکه اتریوم است که این حمله ناموفق ۲۵ درصد از نودهای این کلاینت را به دام انداخت. این کلاینت از دو زبان برنامهنویسی سی شارپ و دات نت پشتیبانی میکند.
هرچه تنوع کلاینتهای شبکه اتریوم بیشتر باشد، شبکه امنیت بالاتری را تجربه خواهد کرد. هرچه سلطه یک کلاینت بیشتر باشد، در صورت وقوع خطا در آن، امنیت کل شبکه به صورت جدی به خطر خواهد افتاد. اما با متنوعسازی آنها علاوه بر تامین نیاز نودهای مختلف، شبکه نیز امنتر و سالمتر به کار خود ادامه میدهد.
سخن پایانی
در دو هفته اخیر شاهد دو اتفاق در دو شبکه بزرگ اتریوم و سولانا بودیم. در شبکه اتریوم، یکی از نودهای شبکه به یکباره ۵۵۰ بلاک جعلی را به شبکه معرفی کرد و حدودا ۱ درصد از نودها به اشتباه این زنجیره را به عنوان زنجیره اصلی اتریوم پذیرفتند. پس از گذشت مدتی کوتاه این نودها به شبکه اصلی بازگشتند و این حمله ناموفق ماند. در این مقاله، چگونگی حمله به شبکه بلاک چین اتریوم را نشان دادیم.