عنوان اصلی: «سرقت کریسمس | تحلیل حمله به افزونه تراست والت»
منبع اصلی: اسلو میست تکنولوژی
زمینه
امروز صبح زود به وقت پکن، @zachxbt در یک کانال پست کرد و اعلام کرد: «برخی کاربران تراست والت گزارش دادهاند که موجودیهای آدرسهای کیف پول آنها در چند ساعت گذشته سرقت شده است.» متعاقباً، حساب رسمی X تراست والت نیز اطلاعیه رسمیای منتشر کرد که تأیید میکند نسخه ۲.۶۸ افزونه مرورگر تراست والت دارای ریسک امنیتی است و به همه کاربران نسخه ۲.۶۸ توصیه میکند فوراً آن نسخه را غیرفعال کرده و به نسخه ۲.۶۹ ارتقا دهند.
تکنیکها و تاکتیکها
پس از دریافت این اطلاعات، تیم امنیتی اسلو میست به سرعت نمونههای مرتبط را تحلیل کرد. ابتدا، کد اصلی نسخههای قبلاً منتشرشده ۲.۶۷ و ۲.۶۸ را مقایسه میکنیم:
با مقایسه تفاوتی (diff) کد دو نسخه، کد مخربی که هکر اضافه کرده بود به شرح زیر کشف شد:
کد مخرب روی تمام کیفپولهای موجود در افزونه پیمایش میکند، برای هر کیفپول کاربر یک درخواست «بازیابی عبارت بازیابی (seed phrase)» ارسال میکند تا عبارت بازیابی رمزگذاریشده را به دست آورد، و در نهایت آن را با استفاده از رمز عبور یا passkeyPassword واردشده توسط کاربر هنگام باز کردن قفل کیفپول، رمزگشایی میکند. اگر رمزگشایی موفقیتآمیز باشد، عبارت بازیابی کاربر به دامنه مهاجم `api.metrics-trustwallet[.]com` ارسال میشود.
ما همچنین اطلاعات دامنه مهاجم را تحلیل کردیم؛ مهاجم از دامنه زیر استفاده کرده بود: metrics-trustwallet.com.
با پرسوجو، مشخص شد دامنه مخرب در تاریخ ۲۰۲۵-۱۲-۰۸ ساعت ۰۲:۲۸:۱۸ ثبت شده و ثبتکننده دامنه: NICENIC INTERNATIONAL بوده است.
در تاریخ ۲۰۲۵-۱۲-۲۱، اولین رکوردهای درخواست هدفگیریشده به سمت api.metrics-trustwallet[.]com آغاز شد:
این جدول زمانی با تاریخ کاشت در پشتی (backdoor) یعنی ۲۲ دسامبر در کد، همخوانی نزدیکی دارد.
ما به ردیابی و تحلیل کد ادامه دادیم تا کل فرآیند حمله را بازسازی کنیم:
از طریق تحلیل پویا مشاهده میشود که پس از باز کردن قفل کیفپول، مهاجم اطلاعات عبارت بازیابی را در فیلد error در R1 قرار میدهد.
منبع این داده Error از طریق فراخوانی تابع GET_SEED_PHRASE به دست میآید. در حال حاضر، تراست والت از دو روش باز کردن قفل پشتیبانی میکند: رمز عبور و passkeyPassword. مهاجم در حین باز کردن قفل، رمز عبور یا passkeyPassword را به دست میآورد، سپس GET_SEED_PHRASE را فراخوانی میکند تا عبارت بازیابی (کلیدهای خصوصی مشابه هستند) کیفپول را بازیابی کند و عبارت بازیابی را در ‘errorMessage’ قرار میدهد.
در زیر کدی است که از emit برای فراخوانی GetSeedPhrase استفاده میکند، داده عبارت بازیابی را بازیابی کرده و در error قرار میدهد.
تحلیل ترافیک با BurpSuite نشان میدهد که پس از بهدست آوردن عبارت بازیابی، آن در فیلد errorMessage بدنه درخواست کپسوله شده و به سرور مخرب (https[://]api[.]metrics-trustwallet[.]com) ارسال میشود که با تحلیل قبلی مطابقت دارد.
از طریق فرآیند فوق، سرقت عبارتهای بازیابی/کلیدهای خصوصی تکمیل میشود. علاوه بر این، به نظر میرسد مهاجم با کد منبع افزونه آشنایی دارد و از پلتفرم تحلیل محصول متنباز PostHogJS برای جمعآوری اطلاعات کیفپول کاربران سوءاستفاده کرده است.
تحلیل داراییهای سرقتشده
(https://t.me/investigations/296)
بر اساس آدرسهای هکر افشاشده توسط ZachXBT، آمارهای ما نشان میدهد که تا زمان نگارش این متن، کل داراییهای سرقتشده در زنجیره بیتکوین حدود ۳۳ BTC (معادل حدود ۳ میلیون دلار آمریکا)، داراییهای سرقتشده در زنجیره سولانا حدود ۴۳۱ دلار آمریکا، و داراییهای سرقتشده در شبکه اصلی اتریوم و زنجیرههای لایه ۲ مختلف حدود ۳ میلیون دلار آمریکا ارزشگذاری میشوند. پس از سرقت وجوه، هکر برخی داراییها را با استفاده از صرافیهای متمرکز و پلهای متقاطع زنجیرهای مختلف منتقل و مبادله کرد.
جمعبندی
این حادثه در پشتی ناشی از تغییرات مخرب کد منبع در کدبیس داخلی افزونه تراست والت (منطق سرویس تحلیل) بود، نه معرفی بستههای عمومی شخص ثالث دستکاریشده (مانند بستههای npm مخرب). مهاجم مستقیماً کد خود برنامه را دستکاری کرد و از کتابخانه قانونی PostHog برای هدایت دادههای تحلیلی به یک سرور مخرب سوءاستفاده کرد. بنابراین، ما دلیلی داریم که باور کنیم این یک حمله APT حرفهای بوده است، و به احتمال زیاد مهاجم قبل از ۸ دسامبر، کنترل مجوزهای دستگاه توسعهدهنده مرتبط با تراست والت یا مجوزهای استقرار و انتشار را به دست آورده بود.
توصیهها:
۱. اگر افزونه تراست والت را نصب کردهاید، باید به عنوان پیشنیاز بررسی و عملیات، فوراً از اینترنت قطع شوید.
۲. بلافاصله کلیدهای خصوصی/عبارتهای بازیابی را صادر کرده و افزونه تراست والت را حذف نصب کنید.
۳. پس از پشتیبانگیری از کلیدهای خصوصی/عبارتهای بازیابی، وجوه را سریعاً به کیفپولهای دیگر منتقل کنید.
