کیف پول گرم بایننس هک شد و ۶.۲۸ میلیارد دلار از آن برداشت شد؛ ردیابی آنچین نشان میدهد چگونه مهاجم با استفاده از مجوز EIP-7702 کیف پول را تصاحب کرد و پیش از آنکه تتر و سایر ناشران بتوانند وجوه را مسدود کنند، آنها را جابهجا کرد و بازسازی کاملی از این بزرگترین حادثه امنیتی ارائه میدهد.
نویسنده: Dickson (@DicksonWuML)
گردآوری: Shenchao TechFlow
معرفی شنچائو: سرقت از کیفپولهای گرم بایننس بزرگترین رویداد امروز بازار کریپتو است. دیکسون، مهندس CertiK و عضو SEAL، سوابق آنچین را تراکنش به تراکنش ردیابی کرد و کل فرآیند آمادهسازی وجوه توسط مهاجم از طریق برداشت از Tornado Cash، تصاحب کیفپولهای گرم اتریوم بایننس با استفاده از مجوز EIP-7702، و مسابقه با Tether، Circle و سایر ناشران برای مسدودسازی وجوه را بازسازی کرد. مبالغ و زمانهای این مقاله آمار آنچین تا زمان انتشار نویسنده (حدود ساعت ۸ صبح به وقت پکن در ۳۰ اکتبر) است، زمانها به UTC هستند (+۸ ساعت برابر با وقت پکن) و هنوز رسماً توسط بایننس تأیید نشدهاند.
کیفپولهای گرم بایننس امروز در ۸ زنجیره تقریباً ۶.۲۸ میلیارد دلار از دست دادند. از این مبلغ، ۶.۰۷ میلیارد دلار در ۵۵ دقیقه اول خارج شد و پس از آن مهاجم بیش از دو ساعت بهطور مکرر یکی از کیفپولهای اتریوم را جارو کرد.
از آن زمان، Tether، Circle، Ripple، Paxos، World Liberty و بایننس تقریباً ۲.۸۰ میلیارد دلار را مسدود کردهاند. حدود ۳.۲۷ میلیارد دلار هنوز آزادانه قابل جابهجایی است، عمدتاً BTC و ETH.
کل حادثه را روی زنجیره ردیابی کردم، از جمله اینکه مهاجم چگونه وجوه را پیش از مسدودسازیها جابهجا کرد 🧵
تفکیک ۶.۲۸ میلیارد دلار (با قیمت UTC 20:24):
• اتریوم ۳.۷۴ میلیارد دلار
• بیتکوین ۱۸,۲۷۰.۲ BTC، ۱.۴۷ میلیارد دلار
• ترون ۶۱۲.۷ میلیون USDT + ۴۶.۴ میلیون TRX، ۶۲۷.۵ میلیون دلار
• XRP ۲۳۳.۵ میلیون XRP، ۲۹۶.۵ میلیون دلار
• سولانا ۹۷۰,۵۲۲ SOL، ۹۶.۱ میلیون دلار
• آربیتروم ۸,۴۲۶ ETH + ۷۴.۶ میلیون ARB، ۳۱.۸ میلیون دلار
• آوالانچ ۱.۸۱ میلیون AVAX + ۸.۴۱ میلیون USDt، ۲۴.۳ میلیون دلار
• آپتیمیزم ۴۴.۲ میلیون OP، ۴.۸ میلیون دلار
۳.۷۴ میلیارد دلار روی اتریوم در پنج دسته خارج شد:
• 20:24:23، یک sweep() واحد روی Binance 14: ۱۶۷,۴۶۴.۲۵ ETH، ۱.۶۱۵ میلیارد USDT و ۶۱ توکن دیگر، در مجموع ۲.۵۳ میلیارد دلار
• 20:41 و 20:59، ۷۸۰ میلیون + ۴۳ میلیون USDC از یک کیفپول هوشمند بایننس که به Binance 14 اعتماد داشت خارج شد، در مجموع ۸۲۲.۶ میلیون دلار
• 20:24:47، Binance 16 نه انتقال را مستقیماً به مهاجم امضا کرد: ۲۸,۰۰۵.۶ ETH، ۵۵.۷ میلیون USDT، ۲۵.۹ میلیون RLUSD، ۸۴.۵ WBTC، ۸۲۰,۰۰۰ UNI، ۱,۱۹۹ XAUt، ۱۸.۸ میلیون ENA، ۳۰۴,۶۰۰ LINK، ۵۸۳.۶ میلیارد PEPE، در مجموع ۱۷۴.۲ میلیون دلار
• 21:04 و 21:44، دو جاروی دیگر Binance 14: ۲,۰۷۰ ETH و ۲۰۴.۳ میلیون USDT، در مجموع ۲۰۹.۶ میلیون دلار
• 22:39، جاروی نهایی به یک کیفپول جدید: ۱۲۸.۵ ETH و ۱۲۲ توکن کوچک، حدود ۵۰۰,۰۰۰ دلار
بر اساس دارایی: ۱.۸۷ میلیارد USDT، ۸۲۳ میلیون USDC، ۴۵۷ میلیون دلار ETH (۱۹۷,۶۶۸ ETH)، ۸۸.۵ میلیون RLUSD، ۷۶.۸ میلیون wBETH، ۵۰.۵ میلیون XAUt، ۴۹.۶ میلیون UNI، ۴۴.۷ میلیون ENA، ۴۰.۱ میلیون PEPE، ۲۹.۶ میلیون LINK، ۲۷.۸ میلیون USD1، بهعلاوه حدود ۵۰ توکن کوچکتر.آمادهسازی از روز قبل آغاز شد. در ۲۸ اکتبر ساعت ۰۷:۳۹ UTC، کیف پول اصلی مهاجم 0x7c8601d4645b93cea45f71e118a729332e6b5ca0 ابتدا ۰.۱ ETH از Tornado Cash برداشت کرد، سپس دو بار دیگر برداشت کرد. سپس یک کیف پول دوم ۱ ETH از Tornado برداشت و آن را در ۲۹ اکتبر ساعت ۱۸:۲۰ به کیف پول اصلی منتقل کرد.
در ۲۹ اکتبر ساعت ۰۲:۲۸، آنها یک قرارداد sweeper مستقر کردند. از ۱۳:۵۱ تا ۱۶:۴۷، آنها روی کیف پولهای خودشان تمرین کردند: با استفاده از تفویض EIP-7702، تست USDT و USDC را sweep کردند و سپس برداشت کردند. در ۱۵:۵۹، آنها نسخه v2 را با یک تابع فراخوانی عمومی مستقر کردند، و همین تابع بود که بعداً ۸۲۳ میلیون دلار USDC را جابهجا کرد.
در ۲۰:۰۴:۵۲ UTC، مرحله اول شکست خورد. کیف پول XRP بایننس ۴۲,۷۵۰,۰۰۰.۱ RLUSD به مهاجم ارسال کرد، اما حساب XRP مهاجم هنوز وجود نداشت، بنابراین انتقال برگشت داده شد.
هشت ثانیه بعد، ۱۸۵,۰۱۷,۴۸۵.۵ XRP با موفقیت منتقل شد و بدین ترتیب حساب ایجاد شد. تا ساعت ۲۰:۰۹، چهار کیف پول XRP دیگر بایننس نیز خالی شده بودند.
یک واکنش زنجیرهای دنبال شد:
۲۰:۱۰ سولانا، ۹۶۵,۴۵۵.۱ SOL در یک تراکنش واحد جابهجا شد
۲۰:۱۸ آپتیمیزم، ۴۴.۲ میلیون OP
۲۰:۲۰ بیتکوین، ۱۸,۲۷۰.۲ BTC در ۱۱ تراکنش جابهجا شد و در همان بلوک به قطعات ۱,۰۰۰ BTC تقسیم شد
۲۰:۲۰ تا ۲۰:۲۲ ترون، ۶۱۲.۷ میلیون دلار USDT + ۴۶.۴ میلیون TRX
۲۰:۳۰ تا ۲۰:۳۵ آربیتروم و آوالانچ
اتریوم روش حمله را آشکار کرد. در ۲۰:۲۰:۵۹، مهاجم تراکنشی ارسال کرد که حامل ۵۰ مجوز EIP-7702 بود، همه امضاشده با کلید خصوصی Binance 14، متناظر با nonceهای ۱۸,۹۱۴,۷۷۵ تا ۱۸,۹۱۴,۸۲۴.
خود Binance 14 همین ۱۸,۹۱۴,۷۷۵ را در ۲۰:۱۷:۴۷ استفاده کرده بود، که نشان میدهد این مجوزها تنها چند دقیقه قبل از استفاده امضا شده بودند.
مجوز با nonce ۱۸,۹۱۴,۸۰۹ مطابقت داشت. تراکنش خود Binance 14 در همان بلوک از ۱۸,۹۱۴,۸۰۸ استفاده کرد، و از آن لحظه به بعد، Binance 14 در حال اجرای کد مهاجم بود.
در ۲۰:۲۴:۲۳، یک sweep() واحد ۱۶۷,۴۶۴ ETH و ۱.۶۱۵ میلیارد دلار USDT را از آن خارج کرد. بیست و چهار ثانیه بعد، Binance 16 نه انتقال را امضا کرد که مستقیماً به مهاجم ارسال شد. در ۲۰:۴۱ و ۲۰:۵۹، مهاجم از Binance 14 برای انتقال ۸۲۳ میلیون دلار USDC از یک کیف پول هوشمند بایننس که به آن اعتماد داشت استفاده کرد.
سپس مسابقه با مسدودسازیها آغاز شد. مهاجم به سرعت USDT را تقسیم کرد:
• در ۲۰:۳۰، ۵۰۰ میلیون دلار USDT به 0x9749…c762 منتقل شد. تا ۲۰:۵۹، ۳۲۵ میلیون دلار از آن از طریق بازارسازان RFQ به ETH تبدیل شده بود، و ۱۷۵ میلیون دلار باقیمانده به جلو منتقل شد
• در ۲۰:۳۳، ۲۰۰ میلیون دلار USDT به 0x0ddf…697e منتقل شد. حدود ۱۰ میلیون دلار در DEXها فروخته شد، و ۱۹۰ میلیون دلار به 0x8d53…639a منتقل شد، که ۶۰ میلیون دلار را در Aave واریز کرد و در مقابل آن ETH قرض گرفت
اولین دسته مسدودسازیهای Tether در ۲۱:۰۱:۳۵ اعمال شد: 0x5227، که هنوز ۹۷۱ میلیون دلار USDT داشت؛ و 0x9749، که قبلاً خالی شده بود. Circle ۸۲۳ میلیون دلار USDC را در ۲۱:۰۴:۵۹ مسدود کرد.
برخی وجوه در ثانیههای پایانی فرار کردند:• در ساعت ۲۱:۰۱:۵۹، 0x8d53 مبلغ ۱۳۰ میلیون USDT را به 0x77ed…c3eb منتقل کرد. چهل و هشت ثانیه بعد، در ساعت ۲۱:۰۲:۴۷، Tether نشانی 0x8d53 را مسدود کرد• از ۲۱:۰۴ تا ۲۱:۰۶، 0x77ed حدود ۵۰ میلیون USDT را در یک DEX فروخت و ۸۰ میلیون را به 0x7aa4…bfd1 منتقل کرد
• از ۲۱:۰۸ تا ۲۱:۱۱، 0x7aa4 حدود ۵۰ میلیون دیگر فروخت و ۳۰ میلیون نهایی را خارج کرد. تا زمانی که Tether در ساعت ۲۱:۱۲:۳۵ نشانی 0x7aa4 را مسدود کرد، آن کیف پول پیشتر خالی شده بود
• در ساعت ۲۱:۱۶:۱۱، 0xccbe…a263 مبلغ ۳۰ میلیون را خارج کرد. ۳۶ ثانیه بعد Tether نشانی 0xccbe را مسدود کرد و در ساعت ۲۱:۱۸:۵۹ مبلغ ۳۰ میلیون را در 0xb171…c8c3 توقیف کرد
• مبلغ ۱۷۵ میلیون که توسط 0x9749 خارج شده بود تا زمان مسدودسازی توسط Tether در ساعت ۲۱:۱۴:۵۹ در 0xaa24…54a0 باقی ماند
در مجموع، از ۱.۸۷۵ میلیارد USDT روی اتریوم، حدود ۴۳۵ میلیون پیش از آنکه لیست سیاه به آن برسد فروخته شد. ۱.۳۸ میلیارد مسدود شده و ۶۰ میلیون بهعنوان وثیقه در Aave گیر افتاده است.
اقدامات سایر ناشران، به ترتیب زمانی:
• ۲۰:۵۷:۴۷ World Liberty مبلغ ۴۸.۵ میلیون WLFI را در 0x5227 مسدود کرد
• ۲۱:۰۷:۵۵ Tether مبلغ ۸.۴۱ میلیون USDt را روی Avalanche مسدود کرد. مهاجم در ساعت ۲۱:۴۰:۴۷ تلاش کرد آن را جابهجا کند و تراکنش برگشت خورد
• از ۲۱:۰۹ تا ۲۱:۲۱ Tether مبلغ ۳۷۸.۷ میلیون USDT را در سه کیف پول روی ترون مسدود کرد. پیشتر ۲۳۴ میلیون از طریق SunSwap به TRX تبدیل شده بود
• ۲۱:۱۱:۲۳ Tether مبلغ ۱۲,۵۷۴ XAUt (حدود ۵۰ میلیون دلار) را مسدود کرد
• ۲۲:۰۰:۵۹ Ripple مبلغ RLUSD را مسدود کرد. مهاجم پیشتر آن را در ساعت ۲۱:۳۳ به 0xe702…958d منتقل کرده و ۴۸ میلیون را به ETH فروخته بود، و آخرین سفارش فروش و مسدودسازی در همان بلاک قرار گرفتند. ۴۰.۵ میلیون توقیف شد
• ۲۲:۱۰:۳۵ World Liberty مبلغ ۲۷.۸ میلیون USD1 را مسدود کرد
• ۲۲:۳۰:۴۷ Paxos مبلغ ۱,۹۰۷ PAXG را مسدود کرد
• ۲۲:۴۸:۳۵ بایننس مبلغ ۲۹,۹۳۴ wBETH (حدود ۷۵ میلیون دلار) را مسدود کرد؛ مهاجم پیشتر آن را در ساعت ۲۱:۵۲ به 0x7f9d…15e3 منتقل کرده بود
مبلغ ۳.۴۵ میلیون FDUSD متعلق به First Digital هنوز قابل انتقال است.
Binance 14 همچنان به قرارداد مهاجم واگذار شده بود، که به یک کشمکش تبدیل شد:
• در ساعت ۲۱:۰۴ و ۲۱:۴۴، مهاجم دوباره جاروب کرد: ابتدا ۱,۷۰۰ ETH، سپس ۳۷۰ ETH و ۲۰۰.۴ میلیون USDT. این USDT در 0x5227 فرود آمد که پیشتر توسط Tether مسدود شده بود
• در ساعت ۲۲:۰۶:۲۳، Tether خود Binance 14 را مسدود کرد. انتقالهای USDT خود بایننس از آن نشانی در ساعت ۲۲:۱۵ و ۲۳:۰۱ شکست خوردند
• در ساعت ۲۲:۳۹، مهاجم دوباره جاروب کرد، این بار به یک کیف پول جدید: ۱۲۸.۵ ETH و ۱۲۲ توکن کوچک
• از ۲۲:۵۵ تا ۲۳:۰۷، خود بایننس Binance 14 را خالی کرد: ۴۶ انتقال توکن به Binance 8، تقریباً یکی در هر ۱۲ ثانیه
• از ۲۳:۳۶ تا ۲۳:۳۸، مهاجم چهار بار دیگر sweep() را فراخوانی کرد و هر چهار بار خالی بود
خارج از اتریوم:
• آربیتروم، از ۲۱:۳۵ تا ۲۱:۳۸: تمام ۸,۴۲۶ ETH و ۷۴.۶ میلیون ARB به یک کیف پول جدید 7702 با نشانی 0x3e2b…32d5 منتقل شد، که در ساعت ۲۱:۴۱ مجوز ARB را برای معامله صادر کرد. تا ساعت ۲۳:۵۰ هنوز آنجا بود
• آوالانچ، ۲۱:۴۵:۳۴: مبلغ ۱,۸۱۳,۹۹۹ AVAX به 0x8035…c397 منتقل شد. سپس ۲۰۰,۰۰۵ AVAX از 0xc39e…9824 خارج شد، و در ساعت ۲۳:۲۷:۳۵ همان نشانی مبلغ ۱,۵۶۳,۸۱۲.۷۸ USDC را روی اتریوم از طریق پل زنجیرهای CCTP شرکت Circle دریافت کرد. چهار دقیقه بعد، در ساعت ۲۳:۳۱:۵۹، Circle آن را مسدود کرد• داراییهای بیتکوین، XRP، سولانا و آپتیمیزم هنوز جابهجا نشدهاند. بیتکوین در ۱۹ کیف پول پخش شده است که ۱۷ کیف پول از آنها هر کدام دقیقاً ۱,۰۰۰ بیتکوین نگه میدارند
وضعیت تا حدود ساعت ۲۳:۵۰ به وقت UTC:
مسدودشده، حدود ۲.۸۰ میلیارد دلار
• ۱.۳۸ میلیارد USDT روی اتریوم، ۳۷۸.۷ میلیون روی ترون، ۸.۴۱ میلیون روی آوالانچ (Tether)
• ۸۲۴.۶ میلیون USDC (Circle)
• ۴۰.۵ میلیون RLUSD (Ripple)، ۲۷.۸ میلیون USD1 (World Liberty)، ۱۲,۵۷۴ XAUt (Tether)، ۲۹,۹۳۴ wBETH (Binance)، ۱,۹۰۷ PAXG (Paxos)، ۴۸.۵ میلیون WLFI
مسدودنشده، حدود ۳.۲۷ میلیارد دلار
• ۱۸,۲۷۰ بیتکوین، ۱.۴۲ میلیارد دلار
• ۴۵۸,۷۷۰ اتریوم پخششده در ۹ کیف پول، ۱.۰۳ میلیارد دلار
• ۲۳۳.۵ میلیون XRP، ۲۸۹ میلیون دلار
• ۶۸۴.۶ میلیون TRX، ۲۴۳ میلیون دلار
• حدود ۱۳۶ میلیون دلار در سایر توکنها روی اتریوم
• ۹۷۰,۵۰۰ SOL، ۹۳ میلیون دلار، بهعلاوه ARB، AVAX و OP، حدود ۴۸ میلیون دلار
۶۰ میلیون USDT دیگر نیز بهعنوان وثیقه در Aave گیر افتاده است.
توجه: انتقالهای بیتکوین، XRP و ترون از طریق زمانبندی و اثر انگشت تراکنشها به هم مرتبط شدند: همان بازه زمانی، آدرسهای دریافتکننده کاملاً جدید، و کارمزدها و قالبهای تراکنش متفاوت از برداشتهای خود بایننس. مبلغ stolen با قیمتهای ساعت ۲۰:۲۴ به وقت UTC محاسبه شده است؛ داراییهای فعلی با قیمتهای حدود ساعت ۲۳:۵۰ به وقت UTC محاسبه شدهاند.
شواهد رویزنجیرهای برای هر تراکنش و مسدودسازی در پست زیر پیوست شده است. اگر چیزی را دیدید که از قلم افتاده، لطفاً به من اطلاع دهید!