بله، این بچه واقعاً با دستکاری قراردادهای هوشمند اتریوم، ۳۰۰ میلیون دلار را از بین برد!
سال گذشته، DAO، صندوق سرمایه گذاری مستقل غیر متمرکز، هک شد و ۵۰ میلیون دلار را از دست داد. در جولای(تير) ، یک هکر توانست با کشف اشکال(باگ) موجود در کیف پول های پاریتی(Parity)، از اتریوم ۳۱ میلیون دلار را به سرقت ببرد.
امروزه، ما هنوز هم دچار بدترین هک ها هستیم، با این تفاوت که سهم ها و مبالغ ها بزرگتر شده و دردسر بیشتری به همراه خواهند داشت.
دو روز پیش، کاربری به نام ‘devops۱۹۹’ در گیت هابِ پاریتی ، موضوعی را مطرح کرد با این عنوان:
“هر کسی می تواند قرارداد شما را از بین ببرد”
که به نظر می رسد او با این مطلب می خواهد به پاریتی(شرکتی که قراردادهای هوشمند به کاربران در شبکه ی اتریوم ارائه می دهد) درباره ی وجود آسیب پذیری در قرارداد هوشمندش اطلاع دهد.
قرارداد هوشمندی که او به آن اشاره دارد، مربوط به یک “قرارداد چند امضائی” می باشد که افراد زیادی از آن به عنوان یک “کیف پول دیجیتالی” برای ذخیره ی امن اتریوم هایشان استفاده می کنند. اینطور که معلوم است، این کیف پول یک اشکال(باگ) در کدش داشته. این باگ یا بهتر است بگوییم آسیب پذیری امنیتی به devops199 اجازه داد تا خودش را به عنوان یکی از صاحبان قرارداد جا بزند. این آسیب پذیری به او امکان انجام تقریباً هر کاری را می دهد.
سپس کاری که Devops199 انجام داد، که می تواند یکی از پرهزینه ترین اشتباهات باشد، این بود:
او قرارداد را از بین برد!
در اصل، او قابلیت قرارداد هوشمند که به مالکان اتریوم اجازه ی انتقال اتریوم هایشان می داد، را از بین برد. او، اتریوم را در قرارداد محبوس کرد و عملاً برای همیشه آن را بلااستفاده کرد. با این حال، اینگونه به نظر می رسد که او کاملاً متوجه نشده که چه اتفاقی افتاده است.
آیا انتقال اتریوم توسط صاحبان کار انجام می شود؟
نه… نه! تو پول خیلی زیادی را به فنا دادی و از بین بردی!
در اصل، هر کسی که از این کیف پول چند امضائی استفاده می کند از این به بعد نمی تواند به اتریوم هایشان دسترسی داشته باشند. برآورد مقدار اتریوم موجود در این قراردادها از ۱۵۰ میلیون دلار آمریکا تا ۳۰۰ میلیون دلار است.
پاریتی که کیف پول های چند امضائی اش در جولای هک شده بود، یک بار دیگر “هشدار امنیتی” صادر کرد و گفت:
“بسیار متأسفیم که اتفاق دیروز، به ویژه با تمام گمانه زنی های مربوط به این موضوع، باعث نگرانی بسیار و سردرگمی کاربران ما و انجمن شد. ما به رسیدگی به این وضعیت ادامه می دهیم و در حال بررسی تمامی راه حل ها و پیامدهای ممکن هستیم.”
آخرین مطلبی که از Devops199 دیدیم این بود:
ارائه ی راه حل
باید به این نکته توجه داشت که در واقع خود اتریوم، به طور کامل حذف نمی شود. اتریوم همچنان وجود دارد اما به سادگی قابل دسترسی نیست.
فرض کنید ۲۸۰ میلیون دلار در صندوق امانات بانک ذخیره شده است. فردی می تواند به نحوی وارد بانک شود و بگوید صاحب آن صندوق امانت است. او بدون هیچ مشکلی دسترسی کامل به صندوق خواهد داشت و در نتیجه می تواند کلید آن صندوق را برای همیشه از بین ببرد. این کلید، کاملاً منحصر به فرد است و به هیچ طریق نمی تواند مجدد تولید شود.
اما با این وجود، برای این مشکل، راه حلی وجود دارد. به لحظه ای برگردیم که کلید اصلی از دست رفته، آیا می دانید که این کلید را از دست نداده اید؟ شوخی نمیکنم، با بلاکچین، این امر واقعاً امکان پذیر است.
هنگامی که DAO، ابزار سرمایه گذاری غیر متمرکز، در اوایل امسال هک شد، تمامی تراکنش ها بر روی شبکه ی اتریوم برگشت خورد تا زمان هک. به عبارت دیگر تمام افراد موجود در شبکه تصمیم گرفتند تا بلاکچین را به قبل از وقوع هک، یعنی از آخرین بلوک، هارد فورک کنند که البته، از لحاظ فنی این موضوع علیه قوانین شبکه اتریوم بود.
اما با انجام این کار، تمامی تراکنش هایی که از آن بلوک به بعد اتفاق افتاده بودند، هرگز به سرانجام نمی رسیدند از جمله خود هک. به هر حال، یک تراکنش فقط هنگامی که در بلاکچین موجود باشد اجرا می شود.
با این وجود هنگامی که برای به دست آوردن مجدد وجوه از دست رفته در طول هک DAO، تصمیم به هارد فورک شبکه ی اتریوم گرفته شد، بخشی از شبکه با این تصمیم موافق نبودند. این افراد با بازگشت به آخرین بلوک قبل از هک موافق نبودند و ساختمان زنجیره ی اصلی را حفظ کردند. ناگهان، ۲ نسخه از اتریوم به وجود آمد:
اتریوم و اتریوم کلاسیک
امروز، در زمان نوشتن این مقاله، اتریوم کلاسیک هنوز هم وجود دارد و ارزش بازار آن حدود ۱.۳ میلیارد دلار است، در حالی که ارزش زنجیره ی اتریوم فورک شده(زنجیره ای که هک را به عقب برگرداند) حدود ۳۰ میلیارد دلار است.
با توجه به بحث های اخیر، بسیار بعید به نظر می رسد که شبکه ی اتریوم مجدداً برای هارد فورک انتخاب شود. شاید توسعه دهندگان پاریتی بتوانند راه حل سحرآمیزی برای این مشکل بیابند اما من به شخصه تردید دارم.
انتقاد دوباره از اتریوم
ممکن است هم اکنون زمان آن فرا رسیده باشد که یک گام به عقب برداشته و طرح قراردادهای هوشمند را دوباره بررسی کنیم. این اولین باری نیست که یک باگ در یکی از این قراردادها منجر به در معرض خطر قرار گرفتن مبالغ هنگفت می شود. بنیاد اتریوم تمایل دارد اتریوم را بزرگ جلوه دهد، چرا که یک پلتفرم قرارداد هوشمند، یک تورینگ کامل(turing-complete) است و این یعنی تقریباً هر چیزی را می توان بر روی آن کدگذاری کرده و به آن اعمال کرد.
تاکنون، این انتخاب خاص طراحی باعث شده بیش از نیم میلیارد دلار به هر طریقی به خطر افتد
کامل بودن تورینگ، همواره منجر به آسیب پذیری می شود، زیرا قدرت یک قرارداد به طور طبیعی به توانایی توسعه دهنده آن بستگی دارد. از هر توسعهدهنده ای بپرسید که چند وقت یکبار کدهایی که می نویسد، دانسته یا ندانسته به طور تصادفی شامل باگ های مختلفی است، ممکن است درک کنید که چرا کل مفهوم قراردادهای هوشمند « turing-complete» بدون ممیزی به طور وحشتناکی، زمانی که پای پول هنگفتی در میان است، خطرناک است.
انتخاب های طراحی، پیامدهایی به دنبال دارد و در برخی موارد زمان آن است که آن ها را مجدد ارزیابی کنیم. به عنوان مثال، برای یک پلتفرم عقد قرارداد هوشمند این منطقی است که فقط گسترش قراردادهای هوشمندِ از قبل تست شده را که شده توسط متخصصان بررسی شده، مجاز بداند.
البته، این یک فرآیندِ بسیار متمرکز در یک سیستم غیر متمرکز است. و قطعاً معیارهای بسیاری در پسِ طراحی یک پلتفرم قرارداد هوشمند وجود دارد. این سبک سنگین کردن ها ارزش فکر کردن دارند زیرا اگر هیچ چیز تغییر نکند، اتریوم همواره توسط مسائل امنیتی به دردسر خواهد افتاد.
حامیان اتریوم معتقدند که نباید این پلتفرم را برای اشتباهاتی که توسعه دهندگان قرارداد هوشمند داشته اند، سرزنش کرد و تا حدودی نیز این صحبت درست است. با این حال، فراموش نکنید که پاریتی توسط نوجوانی ناشناس، نابالغ و فاقد صلاحیت اجرا نشده و اولین قرارداد هوشمند او هم محسوب نمی شود، نه، پاریتی توسط خود گاوین وود (Gavin Wood)، یکی از بنیانگذاران اتریوم، بنا نهاده شده است.
اگر قراردادهای هوشمند او همواره چنین کاستی هایی دارند پس چگونه ایمن ترین قراردادهای هوشمند تورینگ کامل در آینده خواهند بود؟
نظر شما درباره این موضوع چیست؟ آیا این باگ های مهلک آخرین نوع از دست خواهد بود؟ راه حل جلوگیری از این قبیل حوادث چیست؟ نظرات و ایده های خود را با ما در میان بگذارید
هارد فورک از بلوک قبل از هک dao انجام نشد. از یک بلوک عادیِ پس از هک انجام شد و موجودی حسابها به نحوی آپدیت شد که پولِ هک شده به حساب افراد برگردونده بشه