
في 2 نوفمبر ، أطلقت شبكة Axion رمزها الجديد المعروف باسم AXN. وصف المشروع الأصل بأنه أداة استثمارية جديدة ، مدعيا أنه سيكون أكثر بلوكتشين ربحية من نوعه حتى الآن. خلال الفترة التي تسبق الإنزال الجوي لـ AXN ، يُزعم أن خمس فرق منفصلة فحصت رمز الرمز المميز ؛ كان أعزاء الصناعة مثل CertiK و Hacken من بين أولئك الذين أجروا عمليات التدقيق.
بعد ساعات قليلة من حدث المطالبة الحرة بالبروتوكول ، أصبح من الواضح أن شيئًا ما قد انحرف. قام ممثل غير مصرح له بسك 79 مليار AXN بشكل غير متوقع وتفريغها في السوق. انهار السعر بما يزيد عن 99 ٪ ، وحقق المهاجمون 1300 ETH رائعًا – تقدر قيمتها بنحو 500 ألف دولار في وقت النشر.
في الساعات التي تلت ذلك ، شجع الفريق المسؤول عن مشروع Axion المشاركين على الابتعاد عن التداول أو التفاعل مع الأصل ، موضحين عبر قناة التلغرام الرسمية للمنصة:
“لا تشتري AXN الآن ، ولا تتفاعل مع لوحة التحكم ،”
واصل حساب Twitter الخاص بشبكة Axion Network نشر التحديثات ، بما في ذلك:
ما زلنا هنا.
جميع أفراد AXN / HEX2T الذين كانوا محتجزين في وقت الاستغلال سيُضاف لهم الفضل.
سنطلق بوابة مكافآت السيولة لبناء احتياطي السيولة أيضًا.
نحن نعمل بجد لإعادة إطلاق AXN في أقرب وقت ممكن.
– أكسيون (axion_network) 2 نوفمبر 2020
على الرغم من هذه التأكيدات ، تتقدم CertiK لتقدم للمجتمع تفسيراً أوضح لما يرون أنه قد حدث بشكل خاطئ ، وإلقاء نظرة ثاقبة على كيفية منع هجمات مماثلة في المستقبل. تواصل كوينتيليغراف عبر البريد الإلكتروني مع “جاك دوردن” الذي وُصف لنا بأنه الرئيس التنفيذي لشبكة أكسيون ، لكنه لم يتلق ردًا فوريًا. لم يتم إدراج أي من أعضاء الفريق في الورقة البيضاء الخاصة بالمشروع أو على الموقع الإلكتروني ، كما تمت مشاركة اسم “Jack Durden” مع الراوي غير المرئي من الفيلم نادي القتال.
لاحظ أن ما تبقى من هذه المقالة مستنسخ حرفيًا ، بإذن من CertiK ، كخدمة عامة لتثقيف القراء حول فهم فريق التدقيق لما حدث. لم يدقق كوينتيليغراف الكود ، وبالتالي فإن الآراء المذكورة فيما بعد هي حصريًا تلك الخاصة بشيرتيك.
تقرير موظفي CertiK عن انهيار سعر Axion
في الثاني من نوفمبر 2020 في حوالي الساعة 11:00 صباحًا + التوقيت العالمي المنسق ، تمكن أحد المتسللين من سك حوالي 80 مليار من رموز AXN من خلال استخدام وظيفة unstake لعقد Axion Staking.
شرع المتسلل بعد ذلك في تفريغ الرموز المميزة في بورصة AXN Uniswap لـ Ether ، وكرر هذه العملية حتى تم استنزاف تبادل Uniswap وتم دفع سعر الرمز المميز إلى 0.
تم إبلاغنا بالحادث في غضون دقائق قليلة من وقوع الهجوم وبدأ محللو الأمن لدينا في تقييم الوضع على الفور.
لقد توصلنا إلى أن الهجوم كان مخططًا له على الأرجح من الداخل ، بما في ذلك حقنة تعليمات برمجية ضارة في الوقت الذي تم فيه نشر الكود عن طريق تغيير التعليمات البرمجية من تبعيات OpenZeppelin.
لم تكن الوظيفة المستغلة جزءًا من عملية التدقيق التي أجريناها حيث تمت إضافتها بعد دمج كود Axion معًا مع كود OpenZeppelin عبر “التسطيح” وحقنه في كود OpenZeppelin قبل النشر.
التخطيط
استخدم المخترق أموالاً مجهولة تم شراؤها من tornado.cash في اليوم السابق لحدوث الاختراق ، ملمحًا إلى هجوم تم التخطيط له مسبقًا. من المفترض لتوفير بعض الأموال في حالة فشل الهجوم ، تمت إعادة تداول 2.1 إيثر في tornado.cash مباشرة بعد استلام الحساب للأموال.
لإنهاء إعداد الهجوم ، اشترى المخترق حوالي 700 ألف رمز HEX2T من تبادل Uniswap. ومع ذلك ، لم تكن هذه الأموال في نهاية المطاف جزءًا من الهجوم ، وكانت بمثابة ستار دخان فيما يتعلق بكيفية وقوع الهجوم.
اقامة
بدأ المخترق طريقه نحو تفعيل هجومه عن طريق إنشاء حصة “فارغة” في عقد Staking الخاص بشبكة Axion Network من خلال استدعاء وظيفة الحصة بمبلغ 0 ومدة حصة يوم واحد في حوالي الساعة 09:00 صباحًا + التوقيت العالمي المنسق. أدى هذا إلى إنشاء إدخال جلسة للمهاجم بقيمة 0 وقيمة مشاركة 0 في معرف الجلسة 6.
بعد ذلك ، وافق المهاجم مسبقًا على كمية غير محدودة من AXN في تبادل Uniswap تحسباً لنجاح هجومهم. وبالتالي ، وافقوا على عقد NativeSwap الخاص بـ Axion لمبلغ الأموال التي يعتزمون تحويلها إلى رموز AXN.
استدعوا وظيفة الإيداع لعقد NativeSwap في حوالي الساعة 10:00 صباحًا + التوقيت العالمي المنسق ، ومع ذلك لم يتصل المخترق أبدًا بوظيفة السحب للعقد للمطالبة بـ AXN المبادلة كما هو واضح في وظيفة swapTokenBalanceOf لعقد NativeSwap. بعد ذلك ، قاموا بإجراء مكالمة أخرى فاشلة لوظيفة الإيداع قبل تنفيذ الهجوم.
إعدام
كانت هذه المعاملات مجرد شاشات دخانية لكيفية تنفيذ الهجوم غير المدروس بالفعل. نظرًا لأن المعاملات التي أجراها المهاجم لم تسفر عن أي تغيير في تعيين SessionDataOf ، فقد توصلنا إلى أن هذا كان هجومًا متعدد العناوين.
لقد بحثنا في الكود المصدري للعقد في مستودع GitHub والذي تمت مشاركته معنا لتحديد الخلل الذي قد يتسبب في تأثر تعيين جلسة DataOf.
لم نتمكن من الكشف عن أي تعيينات لها أو لأعضائها خارج وظائف الحصة مما دفعنا إلى التساؤل عما إذا كان نشر العقود قد تم بشكل صحيح.
ناقل الهجوم
بعد تحليل الكود المصدري لعقد Staking الذي تم نشره ، حددنا إدخال رمز في مكتبة AccessControl OpenZeppelin بين L665-L671 من كود المصدر المنشور لعقد Staking. وظيفة checkRole المرتبطة ليست جزءًا من تطبيق OpenZeppelin v3.0.1 ، والذي تم إدراجه كعنصر تبعية في مستودع GitHub للمشروع.
ضمن وظيفة checkRole ، توجد كتلة التجميع التالية:
تسمح هذه الوظيفة الخاصة لعنوان محدد بإجراء كتابة تعسفية للعقد بناءً على متغيرات الإدخال التي يكملها عبر مكالمات منخفضة المستوى. مع شرح ، ستبدو كتلة التجميع كما يلي:

هذه الوظيفة تم حقنه في النشر لأنه غير موجود في تطبيق OpenZeppelin AccessControl ، مما يعني أن أعضاء شبكة Axion الذين شاركوا في نشر الرمز المميز تصرفوا بشكل ضار.
خاتمة
استخدم الهجوم رمزًا تم حقنه عن عمد قبل نشر البروتوكول. هذا الحادث ليس له علاقة بعمليات التدقيق التي أجرتها CertiK وكان الطرف المسؤول عن الهجوم شخصًا بدا أنه متورط في نشر عقود شبكة أكسيون.
وكدرجة إضافية من الأمان ، يجب توحيد معايير تقارير التدقيق لتشمل عناوين العقود الذكية المنشورة التي تم التحقق من أن كود مصدرها هو نفسه الذي تم تدقيقه.
يعمل Security Oracle بمثابة مرحل على السلسلة لذكاء الأمان ، ويقوم بإجراء فحوصات أمنية تشمل التحقق من العقود الذكية المنشورة لتتناسب مع الإصدارات التي تم تدقيقها.