محققای ScamSniffer اخیرا متوجه شدن که یسری از Wallet Drainerها ، برنامه یا کد مخربی که همه دارایی های موجود در یه کیف پول رمزارز رو تخلیه و سرقت میکنه، از Create2 برای دور زدن هشدارهای امنیتی در کیف های پول خاصی استفاده میکنن.
بعد از مشاهده تراکنش های غیرمعمول، مشکوک شدن و بررسی بیشتری انجام دادن و متوجه شدن که با این روش ، مجرمین در شش ماه گذشته ، نزدیک به 60 میلیون دلار از 99000 نفر سرقت کردن.
در شکل بالا، قربانی بطور مستقیم، sfrxETH خودش رو به 0x4d9f7773deb9cc44b34066f5e36a5ec98ac92d40
انتقال داده. اما اگه این آدرس رو باز کنیم، متوجه میشیم که هیچ تراکنشی از قبل براش وجود نداره و آدرس یه قرارداد هستش.
اگه تراکنش ایجاد قرارداد این آدرس رو باز کنیم، میبینیم که ازش برای انتقال دارایی های سرقت شده هم استفاده شده :
در تصویر بالا اگه به قسمت call trace نگاه کنید، میبینید که 0x4d9f7773deb9cc44b34066f5e36a5ec98ac92d40
بعد از فراخوانی به create2 ایجاد شده.
Create2 چیه ؟
Create2 یه تابع Solidity هستش که امکان ایجاد قرارداد در آدرسهای قطعی شبکه اتریوم رو میده. این تابع در هارد فورک بیزانتیوم (Byzantium) شبکه اتریوم (بروزرسانی قسطنطنیه (Constantinople)) معرفی شد.
اپکد CREATE2 این امکان رو به ما میده که آدرس قرارداد رو قبل از استقرار اون در شبکه اتریوم محاسبه و پیش بینی کنیم. یعنی قراردادهایی که هنوز در شبکه بلاکچین نیستن بخصوص آدرس هایی که هنوز روی زنجیره قرار نگرفتن اما قابل اعتماد هستن ، رو میتونیم استفاده کنیم. Uniswap از این ویژگی برای ایجاد قراردادهای Pair استفاده میکنه.
برخلاف اپکد CREATE ، محاسبه آدرس قرارداد با CREATE2 وابسته به nonce اکانت نیست و آدرس جدید براساس پارامترهای زیر محاسبه میشه :
- آدرس سازنده (address)
- یه مقدار مبهم بعنوان پارامتر (salt)
- کد ایجاد قرارداد (init_code)
فرمول محاسبه هم بصورت زیر هستش :
1 |
keccak256(0xff ++ address ++ salt ++ keccak256(init_code))[12:] |
این ویژگی این امکان رو میده که ،یه مهاجم به راحتی آدرس های جدید موقتی رو برای هر امضای مخرب ایجاد کنه. بعد از اینکه قربانی signature رو امضاء کرد، مهاجم قراردادی رو در همون آدرس ایجاد و دارایی قربانی رو به اون آدرس انتقال میده.
مهاجم در حقیقت از این راه میتونه بررسی های امنیتی برخی از کیف های پول رو دور بزنه. چون آدرس جدید هستش،بنابراین اطلاعات معناداری روی زنجیره، برای اینکه مشخص بشه دارای ریسک هست ، وجود نداره.
محققا اومدن سایتهای فیشینگ مرتبط با Drainerها رو که در دیتابیسشون بود، رو هم بررسی کردن و مشاهده کردن که برخیشون از این تکنیک برای دور زدن هشدارهای امنیتی استفاده میکنن.
همونطور که در شکل بالا مشاهده میکنید :
- سایت فیشینگ یه امضای مخرب رو برای Increase Allowance ایجاد میکنه. منظور از Increase Allowance ، نوعی تراکنش هستش که امکان انتقال مقدار خاصی از رمزارز رو فراهم میکنه.
- Spender آدرسی هستش که از قبل توسط Drainer محاسبه شده. منظور از Spender ، آدرسی که در صورت تایید مالک توکن ، میتونه توکن ها رو از طرف شخصی انتقال بده.
- بنابراین اگه آدرس spender رو باز کنیم، میبینیم که چیزی از تراکنش توش نیست .
یه نمونه واقعی :
محققا یه نمونه از یه قربانی واقعی بنام John Doe رو هم منتشر کردن. قربانی 927 هزار دلار در قالب رمزارز GMX ، بعد از تایید تراکنش signal Transfer به GMX :Reward Router روی Arbitrum رو از دست داده.
گیرنده ، 0xbD2BF58Be46619B7A22cE9457e1D51A10B82EB91 ، یه آدرس قرارداد از پیش محاسبه شده هستش، این آدرس زمانی ایجاد شده که Drainer ، میخواسته دارایی رو انتقال بده.
Drainer حتی این قرارداد رو متن باز هم کرده :
تابع calculateAddress
آدرس رو محاسبه میکنه.
تابع createAndCall
هم قرارداد رو ایجاد و توکن هارو انتقال میده.
Address Poisoning :
محققا با تیم SlowMist هم ارتباط گرفتن و متوجه شدن اونا هم چنین موردی رو مشاهده کردن. این محققا گفتن که این تکنیک رو در یه حمله ی Address Poisoning Phishing مشاهده کردن که یه گروهی از مجرمین تونستن از طریق Create2 ، از ماه آگوست بطور مستمر 3 میلیون دلار از 11 قربانی سرقت کنن که یکیشون 1.6 میلیون دلار ضرر کرده.
حمله ی Address Poisoning Phishing اینجوریه که ، مهاجمها میتونن از روش محاسبه ی آدرس Create2 ، تعداد زیادی آدرس رو بصورت آفلاین از قبل تولید کنن، بعدش از بین این آدرسها ، مواردی که نزدیک به آدرس هدف هستش رو استخراج کنن و انتقال جعلی رو باهاش انجام بدن.
در یه موردی هم 20 میلیون دلار رمزارز رو با این تکنیک میخواستن انتقال بدن که طرف متوجه شده و اونو مسدود کرده .
استفاده از آدرس های مشابه، در بدافزارهای سرقت کلیپبورد مانند Laplas Clipper هم مشاهده شده. توصیه شده قبل از انتقال ، همه ی آدرس رو بررسی کنید.
اگه علاقمند به شکار باگ در پلتفرمهای رمزارز هستید، immunefi یه پلتفرم باگ بانتی برای این حوزه هستش.