في 28 مارس 2024، تعرضت شركة Prisma Finance لهجوم قرض سريع، وخسر المشروع ما يقرب من 12.21 مليون دولار أمريكي.

أجرى SharkTeam تحليلاً فنيًا لهذه الحادثة ولخص الاحتياطات الأمنية. ونأمل أن تتعلم المشاريع اللاحقة من هذا وأن تقوم بشكل مشترك ببناء خط دفاع أمني لصناعة blockchain.
1. تحليل معاملات الهجوم
المهاجم 1: 0x7e39e3b3ff7adef2613d5cc49558eab74b9a4202 (يُختصر بـ 0x7e39) p>
عقد الهجوم 1: 0xd996073019c74b2fb94ead236e32032405bc027c (مختصر بـ 0xd996)
المهاجم 2: 0x7fe83f45e0f53651b3ed9650d2a 2c67d885 5e385
عقد الهجوم 2: 0x4148310fe4544e82f176570c6c7b649290a90e17
العقد المستهدف الذي يتم الهجوم عليه: 0x1cc79f3f47bfc060b6f761fcd1afc6d399a968b6 ف><ف النمط ="text-align: left;">يحتوي الهجوم على 16 معاملة، مع أخذ معاملة الهجوم الأولى كمثال:
0x00c503b595946bccaea3d58025b5f9b3726177bbdc9674e634244135282116c7
تتم عملية الهجوم كما يلي:
1. اقرأ العنوان 0x56a201b872b50bbdee0021ed4d1bb36359d291ed (المختصر بـ 0x56a2) في العقد المستهدف كافة الضمانات والديون.

نتيجة الإرجاع هي كما يلي:

يحتوي العنوان 0x56a2 على إجمالي 1,745 wstETH كضمان في العقد المستهدف، وإجمالي دين قدره 1,442,100 مليون دولار أمريكي.
2. يستدعي المهاجم 0x7e39 وظيفة flashLoan في عقد الدين mkUSD من خلال مهاجمة العقد 0xd996.

تم تعيين مستقبل المعلمة على MigrateTroveZap، والمبلغ هو كل الدين الذي تم الاستعلام عنه أعلاه.

بعد ذلك، سيتم استدعاء وظيفة onFlashLoan في جهاز الاستقبال (هنا MigrateTroveZap) في وظيفة flashLoan.

تقوم وظيفة onFlashLoan أولاً بسداد جميع الديون الأصلية من خلال القروض السريعة، وسحب الضمانات إلى المتلقي، ثم يقوم المتلقي بإعادة رهن مبلغ معين من الضمانات واقتراض مبلغ معين من الديون. هناك وظيفتان رئيسيتان تسمى:
(1) وظيفة CloseTrove، التي تقوم بسداد الديون واستخراج جميع الضمانات (1745.08 swtETH) من troverManager إلى المتلقي (هنا هو MigrateTroveZap Contract);
p >
(2) وظيفة openTrove، حيث يقوم المتلقي بإعادة رهن عقاري بقيمة 463.18 wstETH إلى troverManager ويتحمل دينًا بقيمة 1,443,598 مليون دولار أمريكي.

كما يتبين من البيانات أعلاه، بعد اكتمال تنفيذ وظيفة flashLoan، لا تزال الضمانات المستخرجة من troverManager والتي تنتمي إلى العنوان 0x56a2 محفوظة في جهاز الاستقبال، ويتم الاحتفاظ بالمبلغ حوالي 1745.08 – 463.18 = 1281.90 وستيث.
3. استعار المهاجم 0x7e39 1 wstETH من Balancer من خلال قرض فلاش عن طريق مهاجمة العقد 0xd996.

ثم الرهن العقاري 1 wstETH واقتراض دين بقيمة 2000 مليون دولار أمريكي، بالإضافة إلى الرسوم، إجمالي الدين هو 2200 مليون دولار أمريكي.

4. كما هو الحال في الخطوة 2، قم باستدعاء وظيفة flashLoan في عقد الدين mkUSD. لا يزال مستقبل المعلمة هنا مضبوطًا على MigrateTroveZap، والمبلغ هو الدين بالكامل بعد التعهد بـ 1 wstETH، والذي هو 2000 مليون دولار أمريكي. في وظيفة FlashLoan، يتم استدعاء وظيفة onFlashLoan في جهاز الاستقبال، ثم يتم استدعاء وظائف CloseTrove وopenTrove.


كل ما في الأمر هو أن حساب المعلمة في وظيفتي CloseTrove وopenTrove هنا لم يعد هو العنوان 0x56a2 أعلاه، ولكنه عقد الهجوم 0xd996 الذي يتعهد بـ 1 wstETH.
(1) وظيفة CloseTrove، وسداد الديون وسحب جميع الضمانات (1 swtETH) من troverManager إلى المتلقي (لا يزال هذا عقد MigrateTroveZap). في هذا الوقت، يوجد 1281.90 +1=1282.90 wstETH في جهاز الاستقبال.

(2) وظيفة openTrove، يقوم المتلقي بإعادة رهن 1282.80 wstETH (الكل تقريبًا) في troverManager، ويتحمل دينًا من 2001.8 مليون دولار أمريكي.

في الواقع، 1281.80 wstETH الموجود في الضمانات هنا لا ينتمي إلى عقد الهجوم 0xd996، ولكن إلى العنوان أعلاه 0x56a2.
5. أخيرًا، قام المهاجم 0x7e39 باستدعاء وظيفة CloseTrove بشكل منفصل من خلال عقد الهجوم 0xd996، واستخرج 1282.80 wstETH المرهونة في عقد الهجوم 0xd996.


بعد سداد القرض السريع، لا يزال المهاجم يحقق ربحًا قدره 1281.80 wstETH، أي حوالي 2.30 مليون دولار أمريكي.

2. تحليل الثغرات الأمنية
السبب الجذري لهذا الحادث هو أن عقد المشروع يحتوي على التحقق من المنطق والإذن، مما يجعل يمكن استغلال هذه الثغرة الأمنية للحصول على الأصول المرهونة من عناوين حسابات أخرى.
إن wstETH الذي حصل عليه المهاجم أخيرًا هو ضمان للعنوان الأصلي 0x56a2 في عقد troverManager. من خلال وظيفة flashLoan لعقد mkUSD، تعمل وظيفة onFlashLoan في يتم تخصيص عقد MigrateTroveZap، واستخدام المعلمات MigrateTroveZap لتحويلها إلى ضمانات لعقد الهجوم، ثم سحبها.
يتلاعب المهاجم بالرهن العقاري وسحب عناوين الحسابات الأخرى من خلال وظيفة flashLoan في عقد mkUSD ووظيفة onFlashLoan في عقد MigrateTroveZap.


(1) تفتقر وظيفة flashLoan إلى التحقق من عنوان مستقبل المعلمة، لأن المتلقي في وظيفة onFlashLoan سيتلقى جميع ضمانات الحساب، لذلك يحتاج المتلقي إلى التحقق من مصداقية؛
(2) تفتقر وظيفة onFlashLoan إلى التحقق من عنوان الحساب، لأن وظيفتي CloseTrove وopenTrove كلاهما من أصول الحساب الذي يتم تشغيله، لذلك من الضروري إضافة التحقق من الإذن إلى الحساب؛< /p >
بالإضافة إلى التحقق من معلمتي العنوان هاتين، قد يكون من الضروري أيضًا التحقق من معلمات الكمية ومنطق التنفيذ في وظيفة flashLoan.
3. توصيات أمنية
ردًا على هذا الهجوم، يجب علينا اتباع الاحتياطات التالية :
(1) أثناء عملية تصميم وتطوير المشروع، يجب الحفاظ على سلامة ودقة المنطق، خاصة عندما يتعلق الأمر بنقل الأصول: أثناء العملية، من الضروري تعزيز التحقق من أذونات البحث عن الوظائف للتأكد من أن المتصل ووظيفة الاتصال ومعلمات الوظيفة ومنطق النقل وما إلى ذلك آمنة وجديرة بالثقة.
(2) قبل أن يبدأ المشروع عبر الإنترنت، تحتاج إلى العثور على فريق تدقيق محترف من طرف ثالث لإجراء تدقيق العقد.
من نحن
تتمثل رؤية SharkTeam في تأمين عالم Web3. يتكون الفريق من محترفين ذوي خبرة في مجال الأمن وكبار الباحثين من جميع أنحاء العالم، والذين يتقنون النظرية الأساسية لـ blockchain والعقود الذكية. وهي تقدم خدمات تشمل تحديد المخاطر والحظر، وتدقيق العقود الذكية، وKYT/AML، والتحليل على السلسلة، وما إلى ذلك، وقد أنشأت منصة ذكية لتحديد المخاطر والحظر على السلسلة ChainAegis، والتي يمكنها مكافحة التهديدات المستمرة المتقدمة (المتقدمة) بشكل فعال. التهديد المستمر) في عالم Web3.، APT). لقد أنشأت علاقات تعاون طويلة الأمد مع اللاعبين الرئيسيين في مختلف مجالات نظام Web3 البيئي، مثل Polkadot وMoonbeam وPolygon وSui وOKX وimToken وCollab.Land وما إلى ذلك.
الموقع الرسمي: https://www.sharkteam.org
تويتر: https: //twitter.com/sharkteamorg
تيليجرام: https://t.me/sharkteamorg
الديسكورد: https://discord.gg/jGH9xXCjDZ