"ثق ولكن تحقق" (الثقة ، ولكن للتحقق) ، لا تفعل "بعد الحقيقة". أخطر خطأ أسود تحت الأضواء.
بسبب ثبات العقد ، سيعتمد المشروع ضمنيًا على الكود المكتوب منذ سنوات عديدة. عندما نصلح الأخطاء ، نحتاج إلى إيلاء المزيد من الاهتمام لتأثيرها المحتمل.
هذه المرة حدث مثل هذا.
الجدول الزمني
في هذا المقال ، سأستخدم كلمة "نحن" للإشارة إلى كل أولئك الذين عملوا بجد في هذا الحدث. أشعر أنه بينما ساهمت في البداية قليلاً في العثور على الخطأ ، ساعد عدد لا يحصى من الأشخاص كثيرًا خلال العملية.
** 13: 10 بالتوقيت العالمي المنسق ** 11 مليون دولار أمريكي (أو ما يعادله بالعملة المحلية) / ETH [1] بالُوعَة.
** 13:19 بالتوقيت العالمي ** تنشر Michal على ETHSecurity حول الانخفاض المفاجئ في سعر pETH.
كان إيغور أول من لاحظ وجود خطأ ما. بفضله ، بدأنا في إجراء مزيد من التحقيق.
ولكن كيف يقوم الروبوت بإعادة إدخال add_l Liquidity () في استدعاء remove_l Liquidity ()؟
** 14:01 بالتوقيت العالمي ** شكلت فريق طوارئ بشأن هذه المسألة.
** 14: 07 بالتوقيت العالمي ** نحن نستخدم أداة فك التحويل المفضلة لدينا [2] فك تجميع عقد JPEGd ولاحظ أن فتحات حماية إعادة الدخول مختلفة بعض الشيء.
** 14: 27 UTC ** أكدنا هذه المشكلة من خلال عقد اختبار محلي بسيط.
@خارجي
nonreentrant ("قفل")
اختبار def (العنوان: العنوان) -> منطقي:
عودة صحيح
@خارجي
nonreentrant ("قفل")
def test2 (العنوان: العنوان) -> منطقي:
عودة كاذبة
هذا ليس مجرد خطأ عائد آخر.
في هذه المرحلة ، أدركنا مدى تأثير ذلك. حظر الرسالة ، أزلنا الرسائل العامة حول هذه الثغرة الأمنية.
** 14: 37 بالتوقيت العالمي المنسق ** ساعد Wavey في تحديد الالتزام الضعيف والإصدار المتأثر. لقد أكدنا أنا وتشارلز هذا أيضًا من خلال فحص ناتج برنامج التحويل البرمجي Vyper يدويًا.
إنه سباق ضد المخترقين.
لحسن الحظ ، يخلط الناس أيضًا بينه وبين إعادة الدخول للقراءة فقط. مقتطف من قناة Web3 Security Alert - تم اختراق Alchemix و Metronome DAO أيضًا بسبب خطأ إعادة الدخول للقراءة فقط [3]
وجد مايكل ثغرات أمنية محتملة في مجموعتي alETH و msETH التي تعمل بالإصدار 0.2.15 أيضًا.
** 14: 50 UTC ** msETH / ETH مستنفد [4] 。
** 15: 34 UTC ** تم استنفاد alETH / ETH [5] 。
** 15:43 بالتوقيت العالمي ** وجدنا ثغرة أمنية في CRV / ETH تم تجميعها مع الإصدار 0.3.0 من Vyper [6] . من الضروري أن نحافظ على سرية العقود المتأثرة لأطول فترة ممكنة.
** 16: 11 بالتوقيت العالمي ** نبدأ العمل على نقاط ضعف القبعة البيضاء.
لسوء الحظ ، تجري العديد من المنظمات أبحاثًا مستقلة في نفس الوقت ، وتكثر الشائعات. في الساعة 16:44 بالتوقيت العالمي المنسق ، قررنا إصدار بيان عام بخصوص الإصدار المتأثر [7] 。
بحلول الساعة 18:32 بالتوقيت العالمي المنسق ، كان لدينا ثغرة لإثبات صحة المفهوم يمكن استخدامها لإنقاذ القبعة البيضاء المحتملة. تعمل bpak من Chainlight أيضًا على ثغرة أمنية في نفس الوقت وشاركتها الساعة 19:06 بالتوقيت العالمي المنسق.
بعد خمس دقائق ، في تمام الساعة 19:11 بالتوقيت العالمي المنسق ، سرق شخص ما الأموال [8] 。
يختلف هيكل الهجوم كثيرًا عن إثبات المفهوم لدينا ومن غير المحتمل أن يكون تسربًا من فريقنا. على أي حال ، إنه محبط للغاية.
لا يزال ، هناك الكثير لفعله.
** 21:26 بالتوقيت العالمي المنسق ** توصل أديسون إلى خطة طموحة لحفظ الأصول المتبقية في مجموعة CRVETH.
إذا أرسلت 30k crv إلى crv / eth pool ،
يمكنك تحديث الرسوم الإدارية
ثم قم بتعيين معدل crv / eth حول 0.15 eth لكل crv
يمكن استخلاص كل مئات K crv في حوض السباحة
** 21: 52 بالتوقيت العالمي المنسق ** قدمت bpak إثباتًا عمليًا لمفهوم يمكن أن يوفر 3100 ETH.
بعد عشر دقائق ، في الساعة 22:02 بالتوقيت العالمي ، هُزمنا مرة أخرى. والمثير للدهشة أن CRV تدير روبوتات المصاريف [9] تم أخذ الأموال واستنزاف المجمع [10] 。
لوم
اللوم (بالمي) * كلام قوي. توجيه أصابع الاتهام غير مجدي. أعتقد أنه من المفيد التفكير فيما يمكن القيام به بشكل أفضل.
منافسة
هُزمت جميع جهود القبعة البيضاء في أقل من نصف ساعة. في بعض الأحيان ، كل ثانية مهمة.
ربما كان من الممكن تنفيذ هذه الهجمات بإعداد وموارد أفضل. في الوقت نفسه ، يبدو أن هذا سيف ذو حدين. هل من الجيد حقًا تجميع المعلومات حول كيفية تنفيذ الاختراق؟ بمن يجب أن نثق؟
من ناحية أخرى ، أعتقد أن العملية برمتها فعالة للغاية. انتقلنا من الشك الأولي إلى تأكيد من كان ضعيفًا خلال ساعتين و 4 دقائق.
الإفصاح عن المعلومات
أنا مدقق حسابات وهاكر قبعة بيضاء.
صناعة التدقيق لديها ثقافة نشر فريدة من نوعها. نحن نتقاضى رواتبنا مقابل قيادتنا للفكر التقني وفهمنا العميق لمواطن الضعف. طريقة واحدة لإثبات قيادتهم وعمقهم هي النشر [11] "السبق الصحفي" على القرصنة. الباحثون مكلفون ، والعائد على الاستثمار هو الدعاية.
من ناحية أخرى ، هناك حجة مقنعة مفادها أن الكشف المبكر عن إصدار متأثر سيكون له تأثير كبير على إنقاذ القبعة البيضاء.
لو كانت نصف ساعة إضافية ، لكان بالإمكان توفير 18 مليون دولار.
لا يدفع المدققون مقابل تأثير تقاريرهم. بدلاً من ذلك ، يحصلون على إعجابات وتغريدات وتغطية. يبدو أن هذه مشكلة.
الخطوة التالية
أنا لا أتفق مع "نحتاج إلى تحقق رسمي لحل هذه المشكلة" وما شابه. يمكن اكتشاف هذا الخطأ عن طريق اختبار الوحدة. يعد التحقق الرسمي مفيدًا جدًا للعديد من أنواع الأخطاء ، لكنني لا أعتقد أنه مفيد بنفس القدر للمترجمين البسيطين نسبيًا وغير المحسنين.
لاحظ أنه تم إصلاح هذا الخطأ في نوفمبر 2021 [12] 。
أعتقد أن ثغرة Vyper هذه ليست مشكلة في تقنية فريق Vyper أو اللغة نفسها ، ولكنها مشكلة عملية. تم إصلاح هذا الخطأ منذ وقت طويل دون إدراك تأثيره المحتمل في وقت الإصلاح.
لسوء الحظ ، من السهل التغاضي عن السلع العامة. بسبب ثبات العقد ، تعتمد المشاريع ضمنيًا على الكود المكتوب منذ سنوات عديدة. يجب أن يكون مطورو البروتوكول وخبراء الأمن على دراية بآخر التطورات الأمنية عبر مجموعة التنفيذ.
شاهد النسخة الأصلية
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
الجدول الزمني وانعكاسات اختراق Vyper
"ثق ولكن تحقق" (الثقة ، ولكن للتحقق) ، لا تفعل "بعد الحقيقة". أخطر خطأ أسود تحت الأضواء.
هذه المرة حدث مثل هذا.
الجدول الزمني
في هذا المقال ، سأستخدم كلمة "نحن" للإشارة إلى كل أولئك الذين عملوا بجد في هذا الحدث. أشعر أنه بينما ساهمت في البداية قليلاً في العثور على الخطأ ، ساعد عدد لا يحصى من الأشخاص كثيرًا خلال العملية.
** 13: 10 بالتوقيت العالمي المنسق ** 11 مليون دولار أمريكي (أو ما يعادله بالعملة المحلية) / ETH [1] بالُوعَة.
** 13:19 بالتوقيت العالمي ** تنشر Michal على ETHSecurity حول الانخفاض المفاجئ في سعر pETH.
كان إيغور أول من لاحظ وجود خطأ ما. بفضله ، بدأنا في إجراء مزيد من التحقيق.
** 14:01 بالتوقيت العالمي ** شكلت فريق طوارئ بشأن هذه المسألة.
** 14: 07 بالتوقيت العالمي ** نحن نستخدم أداة فك التحويل المفضلة لدينا [2] فك تجميع عقد JPEGd ولاحظ أن فتحات حماية إعادة الدخول مختلفة بعض الشيء.
// إدخال جدول الإرسال من أجل add_l Liquidity (uint256 [2] ,uint256) التسمية_0057: إذا (التخزين [0x00] ) {التراجع (الذاكرة [0x00: 0x00]) ؛ } تخزين [0x00] = 0x01 ؛ // إدخال جدول الإرسال لـ remove_l Liquidity (uint256، uint256 [2] ) التسمية_1AF3: إذا (التخزين [0x02] ) {التراجع (الذاكرة [0x00: 0x00]) ؛ } تخزين [0x02] = 0x01 ؛
** 14: 27 UTC ** أكدنا هذه المشكلة من خلال عقد اختبار محلي بسيط.
@خارجي nonreentrant ("قفل") اختبار def (العنوان: العنوان) -> منطقي: عودة صحيح @خارجي nonreentrant ("قفل") def test2 (العنوان: العنوان) -> منطقي: عودة كاذبة
هذا ليس مجرد خطأ عائد آخر.
في هذه المرحلة ، أدركنا مدى تأثير ذلك. حظر الرسالة ، أزلنا الرسائل العامة حول هذه الثغرة الأمنية.
** 14: 37 بالتوقيت العالمي المنسق ** ساعد Wavey في تحديد الالتزام الضعيف والإصدار المتأثر. لقد أكدنا أنا وتشارلز هذا أيضًا من خلال فحص ناتج برنامج التحويل البرمجي Vyper يدويًا.
إنه سباق ضد المخترقين.
لحسن الحظ ، يخلط الناس أيضًا بينه وبين إعادة الدخول للقراءة فقط. مقتطف من قناة Web3 Security Alert - تم اختراق Alchemix و Metronome DAO أيضًا بسبب خطأ إعادة الدخول للقراءة فقط [3]
وجد مايكل ثغرات أمنية محتملة في مجموعتي alETH و msETH التي تعمل بالإصدار 0.2.15 أيضًا.
** 14: 50 UTC ** msETH / ETH مستنفد [4] 。
** 15: 34 UTC ** تم استنفاد alETH / ETH [5] 。
** 15:43 بالتوقيت العالمي ** وجدنا ثغرة أمنية في CRV / ETH تم تجميعها مع الإصدار 0.3.0 من Vyper [6] . من الضروري أن نحافظ على سرية العقود المتأثرة لأطول فترة ممكنة.
** 16: 11 بالتوقيت العالمي ** نبدأ العمل على نقاط ضعف القبعة البيضاء.
لسوء الحظ ، تجري العديد من المنظمات أبحاثًا مستقلة في نفس الوقت ، وتكثر الشائعات. في الساعة 16:44 بالتوقيت العالمي المنسق ، قررنا إصدار بيان عام بخصوص الإصدار المتأثر [7] 。
بحلول الساعة 18:32 بالتوقيت العالمي المنسق ، كان لدينا ثغرة لإثبات صحة المفهوم يمكن استخدامها لإنقاذ القبعة البيضاء المحتملة. تعمل bpak من Chainlight أيضًا على ثغرة أمنية في نفس الوقت وشاركتها الساعة 19:06 بالتوقيت العالمي المنسق.
بعد خمس دقائق ، في تمام الساعة 19:11 بالتوقيت العالمي المنسق ، سرق شخص ما الأموال [8] 。
يختلف هيكل الهجوم كثيرًا عن إثبات المفهوم لدينا ومن غير المحتمل أن يكون تسربًا من فريقنا. على أي حال ، إنه محبط للغاية.
لا يزال ، هناك الكثير لفعله.
** 21:26 بالتوقيت العالمي المنسق ** توصل أديسون إلى خطة طموحة لحفظ الأصول المتبقية في مجموعة CRVETH.
** 21: 52 بالتوقيت العالمي المنسق ** قدمت bpak إثباتًا عمليًا لمفهوم يمكن أن يوفر 3100 ETH.
بعد عشر دقائق ، في الساعة 22:02 بالتوقيت العالمي ، هُزمنا مرة أخرى. والمثير للدهشة أن CRV تدير روبوتات المصاريف [9] تم أخذ الأموال واستنزاف المجمع [10] 。
لوم
منافسة
هُزمت جميع جهود القبعة البيضاء في أقل من نصف ساعة. في بعض الأحيان ، كل ثانية مهمة.
ربما كان من الممكن تنفيذ هذه الهجمات بإعداد وموارد أفضل. في الوقت نفسه ، يبدو أن هذا سيف ذو حدين. هل من الجيد حقًا تجميع المعلومات حول كيفية تنفيذ الاختراق؟ بمن يجب أن نثق؟
من ناحية أخرى ، أعتقد أن العملية برمتها فعالة للغاية. انتقلنا من الشك الأولي إلى تأكيد من كان ضعيفًا خلال ساعتين و 4 دقائق.
الإفصاح عن المعلومات
أنا مدقق حسابات وهاكر قبعة بيضاء.
صناعة التدقيق لديها ثقافة نشر فريدة من نوعها. نحن نتقاضى رواتبنا مقابل قيادتنا للفكر التقني وفهمنا العميق لمواطن الضعف. طريقة واحدة لإثبات قيادتهم وعمقهم هي النشر [11] "السبق الصحفي" على القرصنة. الباحثون مكلفون ، والعائد على الاستثمار هو الدعاية.
من ناحية أخرى ، هناك حجة مقنعة مفادها أن الكشف المبكر عن إصدار متأثر سيكون له تأثير كبير على إنقاذ القبعة البيضاء.
لو كانت نصف ساعة إضافية ، لكان بالإمكان توفير 18 مليون دولار.
لا يدفع المدققون مقابل تأثير تقاريرهم. بدلاً من ذلك ، يحصلون على إعجابات وتغريدات وتغطية. يبدو أن هذه مشكلة.
الخطوة التالية
أنا لا أتفق مع "نحتاج إلى تحقق رسمي لحل هذه المشكلة" وما شابه. يمكن اكتشاف هذا الخطأ عن طريق اختبار الوحدة. يعد التحقق الرسمي مفيدًا جدًا للعديد من أنواع الأخطاء ، لكنني لا أعتقد أنه مفيد بنفس القدر للمترجمين البسيطين نسبيًا وغير المحسنين.
لاحظ أنه تم إصلاح هذا الخطأ في نوفمبر 2021 [12] 。
لسوء الحظ ، من السهل التغاضي عن السلع العامة. بسبب ثبات العقد ، تعتمد المشاريع ضمنيًا على الكود المكتوب منذ سنوات عديدة. يجب أن يكون مطورو البروتوكول وخبراء الأمن على دراية بآخر التطورات الأمنية عبر مجموعة التنفيذ.