اسکریپت در بلاکچین چیست؟ روشهای سوء استفاده از اسکریپت در ارزهای دیجیتال
اسکریپت در بلاکچین در واقع یک نوع کد است که کاربردهای آن مواردی مانند اجرای قرارداد هوشمند، مدیریت انتقال توکنها یا حتی ایجاد منطق پیچیده برای اپلیکیشنهای غیرمتمرکز را شامل میشود. توسعهدهندگان حوزه کریپتو با استفاده از زبانهای اسکریپتنویسی مانند پایتون (فریمورک Brownie)، جاوا اسکریپت (فریمورکهای Truffle و HardHat) و سالیدیتی (فریمورک Foundry)، امکانات و کاربردهای شبکههای بلاکچینی را بهبود میدهند. در ادامه این مقاله، با انواع عملیاتهای بلاکچینی که با استفاده از اسکریپت امکانپذیر شدهاند آشنا شده و در مورد سوءاستفاده هکرها از اسکریپتها نیز توضیحاتی ارائه میکنیم. با ما همراه باشید.
اسکریپت در بلاکچین چه نقشهایی ایفا میکند؟
اسکریپت در بلاکچین برای ساخت و اجرای کدهایی به کار گرفته میشود که نحوه انجام تراکنشها و تعاملات یک شبکه بلاکچینی را تعیین و مدیریت خواهند کرد. برخی از امکانات و قابلیتهای شبکههای بلاکچینی که از طریق اسکریپت ایجاد شدهاند، عبارتند از:
- قراردادهای هوشمند: امروزه بلاکچینهای مختلفی از قراردادهای هوشمند استفاده میکنند و میتوان از اسکریپتها برای تست قراردادها و اجرا و تعامل آنها در بلاکچین بهکار گرفت. این نوع قرارداد به صورت اتوماتیک و به محض فراهم شدن شرایط از پیش تعیین شده، اجرا میشود. برای مثال میتوان اسکریپتی برای یک قرارداد هوشمند طراحی کرد که فروش یک توکن را مدیریت میکند و به محض اینکه پرداخت کاربر تایید شود، توکنها را در اختیار او قرار دهد.
- رباتهای معاملاتی: اسکریپت در بلاکچین میتواند برای ساخت رباتهایی مورد استفاده قرار بگیرد که استراتژیهای معاملاتی مختلف را به صورت اتوماتیک اجرا میکنند. برای مثال میتوان به رباتهای آربیتراژ اشاره کرد که تغییر قیمت بین صرافیهای مختلف را بررسی کرده و به صورت اتوماتیک تراکنشهایی ثبت میکنند که از اختلاف قیمت یک دارایی در صرافیها سود کسب میکنند. برای مثال، یک ربات معاملاتی که برای آربیتراژ طراحی شده، میتواند بیت کوین را با قیمت پایینتر از یک صرافی خریداری کرده و بلافاصله آن را در یک صرافی که خرید ارز دیجیتال بیت کوین را با قیمت بالاتری انجام میدهد، به فروش برساند.
- زبانهای اسکریپتنویسی: توسعه بلاکچینها از طریق زبانهای اسکریپتنویسی امکانپذیر میشود. برای مثال، بیت کوین اسکریپت (Bitcoin Script) زبان اسکریپتنویسی برای بلاکچین بیت کوین است و توسعهدهندگان امکاناتی مانند تراکنشهای چندامضایی را از طریق آن امکانپذیر نمودهاند.
- پردازش تراکنش: اسکریپت در بلاکچین امکان پردازش خودکار تراکنشها را امکانپذیر میکند. برای مثال، یک اپلیکیشن غیرمتمرکز به کمک اسکریپتنویسی میتواند فرآیندهای معاملات، وام دادن و وام گرفتن را اتوماتیک کند. اتوماسیون فرآیندهای بلاکچینی، علاوه بر افزایش کارآمدی سیستم، احتمال خطا را نیز کاهش میدهد.
- اسکریپت صرافی ارز دیجیتال: توسعهدهندگان میتوانند از طریق اسکریپت صرافی ارز دیجیتال، بستر معاملاتی جدیدی ایجاد کنند. برای مثال، اسکریپت صرافی غیرمتمرکز که امکان ساخت بازار معاملاتی همتا به همتا را فراهم میکند.
سوء استفاده از اسکریپت در بلاکچین
اسکریپت در بلاکچین همانگونه که برای نوآوری، توسعه و اتوماسیون غیرمتمرکز مورد استفاده میگیرد، برای هکرها نیز ابزاری کاربردی محسوب میشود که به کمک آن، از ضعفهای سایر اسکریپتهای دارای مشکل امنیتی سوءاستفاده کنند. این ضعفها میتوانند امنیت قراردادهای هوشمند، اپلیکیشنهای غیرمتمرکز و حتی کل شبکههای بلاکچینی را با خطر مواجه کنند. هکرها با استفاده از روشهای اسکریپتنویسی مختلف، میتوانند فعالیتهای مخربی مانند سرقت دارایی و دستکاری اطلاعات بلاکچینی انجام دهند. این موضوع در نهایت به ضررهای سنگین چندصد میلیون دلاری برای حوزه کریپتو و کاربران آن منجر خواهد شد. برخی از روشهای رایج سوءاستفاده هکرها از اسکریپت در بلاکچین عبارتند از:
- ریاینترنسی (Reentrancy): این حمله شامل فراخوانی یکی از تابعهای قرارداد هوشمند است و به هکر اجازه میدهد که بهصورت پیدرپی از قرارداد برداشت انجام دهد. هک DAO در سال ۲۰۱۶ از همین روش انجام شد که در نتیجه آن، مقدار زیادی اتریوم (معادل ۶۰ میلیون دلار در آن زمان) به سرقت رفت. در این نوع حمله، ضعف قرارداد هوشمند در زمینه قفل کردن دارایی مورد سوءاستفاده قرار گرفت.
- ایراد در منطق (Logic Flaws): به هنگام نوشته شدن اسکریپت در بلاکچین، حتی سادهترین ایراد نیز میتواند به از دست رفتن حجم هنگفتی از دارایی منجر شود. برای مثال، یک اسکریپت ممکن است در محدود کردن دسترسی غیرمجاز عملکرد مناسبی نداشته باشد. در رابطه با قرارداد هوشمند نیز ممکن است شرایطی که برای اسکریپت آن تعیین شده، به اندازه کافی دقیق نباشند و باعث شوند که قرارداد رفتار غیرمنتظرهای از خود نشان دهد. برای مثال، یک ایراد کوچک در منطق کدنویسی کیف پول پریتی (Parity Wallet) باعث شد که بیش از ۳۰۰ میلیون واحد اتریوم فریز شوند و در نتیجه، فعالیت هزاران کاربر با اختلال مواجه شد.
- سرریز/پاریز عدد صحیح (Integer Overflow/Underflow): در زبان سالیدیتی، محاسباتی که شامل اعداد صحیح هستند، ممکن است از محدوده مورد نظر خارج شوند. اگر اسکریپت یک قرارداد هوشمند نتواند از این اتفاق جلوگیری کند و محدودیتهای محاسباتی ضروری را نداشته باشد، دستکاری شدن اطلاعات بسیار مهم امکانپذیر خواهد شد. برای مثال، یک هکر ممکن است با حمله Underflow یا «پاریز»، توکنهای جدیدی تولید کرده و موجودی کلی یک ارز دیجیتال را افزایش دهد و با فروش آنها در همان لحظه، سودی نجومی بهدست بیاورد و در نهایت، قیمت توکن را صفر کند. از حمله سرریز یا Overflow نیز معمولا برای دستکاری قرارداد قفل کردن دارایی استفاده میشود. فرض کنید یک پروژه قرار است یک هفته دیگر ایردراپ توزیع کند. هکر با دستکاری قرارداد مربوط به قفل شدن داراییها، عدد آن را صفر میکند و همان لحظه ایردراپ خود را دریافت میکند. البته امروز امکان انجام این نوع حملات، در شبکه اتریوم و شبکههای سازگار با ماشین مجازی اتریوم وجود ندارد؛ زیرا آخرین ورژنهای سالیدیتی، بررسیهای مربوط به Overflow و Underflow را انجام میدهند.
- فرانت رانینگ (Front-Running): در شبکههای بلاکچینی، اطلاعات تراکنشها برای همه افراد قابل مشاهده است. یک ربات فرانت رانینگ، اطلاعات تراکنشهای درون ممپولها را بررسی کرده و در زمانی دقیق، تراکنشهایی ثبت میکند که کارمزد آن از تراکنشهای کاربران عادی بیشتر است و در نتیجه زودتر پردازش میشوند. برای مثال، اگر ربات فرانت رانینگ یک تراکنش بزرگ را تشخیص دهد، بیدرنگ همان تراکنش را کپی کرده و با کارمزد بیشتر (و در نتیجه سریعتر از تراکنش بزرگ) آن را ثبت میکند. بدین ترتیب، هکر میتواند از تغییر قیمت ناشی از تراکنش بزرگ سود کسب کند. این روش سوء استفاده از اسکریپت در بلاکچین، در پلتفرمهای غیرمتمرکز که حتی کوچکترین تغییر قیمت ارزهای دیجیتال هم میتواند میزان سود و ضرر را تا حد زیادی تغییر دهد، بیشتر دیده میشود.
آشنایی با برخی از بزرگترین حملات در بلاکچین
در حالی که هک و حملات سایبری در حوزه کریپتو پدیدهای نادر نیست، برخی از بزرگترین نمونههای آنها به دلیل ضعف در کدها رخ دادهاند. در ادامه، با ۴ حمله سایبری مشهور حوزه کریپتو آشنا میشویم:
- هک دائو (The Dao): در سال ۲۰۱۶، یک ضعف امنیتی در سازمان خودگردان غیرمتمرکز اتریوم به از دست رفتن بیش از ۶۰ میلیون دلار دارایی منجر شد و سرنوشت این شبکه برای همیشه تغییر داد. در پی این حمله، اتریوم یک هاردفورک را تجربه کرد و دو ارز دیجیتال اتریوم و اتریوم کلاسیک ایجاد شدند.
- هک پریتی والت (Parity Wallet): در سال ۲۰۱۷، دو ضعف بزرگ در اسکریپت کیف پول پریتی پیدا شد. ضعف اول در سیستم چندامضایی این کیف پول بود که در نتیجه آن، ۳۰ میلیون دلار دارایی به سرقت رفت. مدتی بعد، یک باگ دیگر باعث شد بیش از ۳۰۰ میلیون دلار در قالب ETH فریز شود و در نتیجه، در فعالیت بسیاری از کاربران اختلال ایجاد گردید.
- حمله به پروتکل بیزدایکس (bZx Protocol): در سال ۲۰۲۰، پروتکل دیفای bZx قربانی چند حمله فلش لون (Flash Loan) بود. در این حملات، هکرها با استفاده از اسکریپتها توانستند قیمتها را دستکاری کنند و سرمایه هنگفتی را به جیب بزنند.
- اکسپلویت پالی نتورک (Poly Network): در سال ۲۰۲۱، یک پلتفرم چندزنجیرهای به نام پالی نتورک قربانی یک حمله سایبری بزرگ بود. ضعف امنیتی این پلتفرم در بخشی که تایید تراکنشهای بین زنجیرهای را مدیریت میکرد، به هکرها اجازه داد که معادل ۶۱۰ میلیون دلار ارز دیجیتال از آن خارج کنند.
اسکریپت در بلاکچین؛ ابزاری قدرتمند یا یک شمشیر دوسر؟
نقشهای اسکریپت در بلاکچین متعدد هستند و تقریبا همهچیز، از تراکنشهای کوچک گرفته تا اپلیکیشنهای غیرمتمرکز پیشرفته، به کمک آنها ساخته و اجرا میشوند. امروزه شاهد تکامل زبانهای اسکریپتنویسی مانند سالیدتی هستیم که باعث شده بلاکچین فراتر از یک ابزار انجام تراکنش همتا به همتا، و یک بستر جامع برای نوآوری توسعهدهندگان بااستعداد باشد. البته این میزان وابستگی به اسکریپت و اتوماسیون فرآیندها باعث شده که چالشهای امنیتی جدیدی نیز ایجاد شوند. ماهیت متنباز بلاکچین و حجم اطلاعاتی که به صورت عمومی و شفاف منتشر میکند، باعث شده که هکرها دائما روشهای پیچیدهتری برای حمله سایبری و سرقت داراییها پیدا کنند؛ از پیدا کردن ضعف اسکریپتها و سوءاستفاده از آنها گرفته تا اجرای اسکریپتهای پیشرفته به منظور انجام حملاتی نظیر فرانت رانینگ. بنابراین، همزمان با پیشرفت بلاکچین و زبانهای اسکریپتنویسی آن، باید به حذف ضعفهای احتمالی نیز توجه ویژهای شود و اسکریپتهای مهم هر بلاکچین نیز به صورت منظم حسابرسی (Audit) شوند.