أخطاء برمجية شهيرة مثل DAO hack وتأثيراتها
حادثة DAO Hack في 2016 تعتبر واحدة من أهم وأشهر الاختراقات في تاريخ البلوكشين والعقود الذكية، ليس فقط بسبب ضخامتها المالية، بل لأنها غيّرت مسار Ethereum نفسه.
دعنا نحللها بالتفصيل: كيف حدثت، لماذا حدثت، ماذا ترتب عليها، وما الدروس المستفادة منها.
🧠 أولًا: ما هو DAO؟
DAO = Decentralized Autonomous Organization
هو "صندوق استثماري لامركزي" تمت كتابته بالكامل باستخدام عقود ذكية على شبكة Ethereum.
أُطلق في أبريل 2016.
جمع أكثر من 150 مليون دولار من الإيثر (ETH) من أكثر من 11,000 شخص خلال أسابيع.
الفكرة: المستخدمون يشتركون بالتمويل، ثم يصوّتون على المشاريع، ويتم التمويل تلقائيًا بدون وسيط.
💥 ثانيًا: ماذا حدث في DAO Hack؟
📅 التاريخ: 17 يونيو 2016
أحد المخترقين استغل ثغرة برمجية في كود DAO، تسمى بـ:
هجوم إعادة الدخول (Reentrancy Attack)
🛠️ كيف تعمل هذه الثغرة؟
العقد الذكي لـ DAO لم يُحدث حالته الداخلية (مثل الرصيد) قبل تحويل الأموال.
المهاجم استدعى دالة withdraw() بشكل متكرر قبل أن يُحدث العقد بيانات المستخدم.
وبهذا، استطاع سحب 3.6 مليون ETH (حوالي 60 مليون دولار وقتها) إلى "Child DAO".
🔁 التفسير المبسط:
المهاجم يطلب سحب الأموال.
العقد يبدأ بالتحويل، ولكن قبل تحديث الرصيد، يُعاد استدعاء withdraw() مرة ثانية.
التكرار يستمر → الأموال تتدفق بدون حد، حتى يتم إفراغ الحساب.
📉 ثالثًا: التأثيرات الفورية
التأثير التفاصيل
😱 صدمة في مجتمع Ethereum المشروع فقد ثقة عدد كبير من المستخدمين.
⏸️ تجميد الأموال لمدة 28 يومًا بسبب تصميم DAO، لم يستطع المهاجم استخدام الأموال فورًا.
🔀 انقسام مجتمع Ethereum جدل حول: هل يجب إنقاذ الأموال أم الالتزام بعدم تغيير البلوكشين؟
⚖️ رابعًا: الحل المثير للجدل – الهارد فورك (Hard Fork)
تم اتخاذ قرار بعمل Hard Fork لإعادة الأموال:
تم إرجاع الأموال للمستثمرين عبر عقد ذكي جديد.
تم حذف التحويلات للمهاجم كأنها لم تكن.
النتيجة:
ظهرت شبكتان:
الشبكة ماذا تمثل؟
Ethereum (ETH) التي أجرت الهارد فورك.
Ethereum Classic (ETC) التي رفضت التعديل على السلسلة.
💥 هذا أول حدث كبير يُقسّم بلوكشين كبير مثل Ethereum!
🧪 خامسًا: الدروس المستفادة
الدرس المعنى
✅ "الكود ليس قانونًا مطلقًا" الثغرات البرمجية تُستغل، ولا يجب افتراض الكمال.
✅ أهمية مراجعة الكود الأمني لم تُراجع DAO من قِبل مختصين أمنيين قبل الإطلاق.
✅ التحقق من "الحالة قبل التحويل" قاعدة ذهبية: لا تنقل أموالًا قبل تحديث البيانات الداخلية.
✅ أهمية اختبارات "الهجمات المتكررة" حالات نادرة قد تؤدي لانهيار العقد بالكامل.
✅ المرونة في الحوكمة المجتمع اتخذ قرارًا جماعيًا جذريًا (الهارد فورك) لحماية المستخدمين.
🧯 سادسًا: ما هو هجوم إعادة الدخول؟ (Reentrancy)
🔁 الشكل البرمجي الخاطئ:
solidity
نسخ
تحرير
function withdraw() public {
if (balances[msg.sender] > 0) {
msg.sender.call.value(balances[msg.sender])(""); // 💥 يتم التحويل هنا أولاً!
balances[msg.sender] = 0; // يتم التحديث بعد التحويل ← ثغرة
}
}
✅ الشكل الآمن:
solidity
نسخ
تحرير
function withdraw() public {
uint amount = balances[msg.sender];
require(amount > 0, "Nothing to withdraw");
balances[msg.sender] = 0; // ✅ تحديث الرصيد أولاً
(bool sent, ) = msg.sender.call{value: amount}("");
require(sent, "Failed to send Ether");
}
🌍 سابعًا: التأثير على مستقبل Ethereum
العقود الذكية لم تعد "لعب أطفال" — أصبحت تحتاج تدقيقًا وأمانًا من مستوى المؤسسات.
ساهمت الحادثة في تطوير أدوات مثل:
OpenZeppelin: مكتبات أمان للعقود الذكية.
MythX، Slither، CertiK: أدوات تحليل وثغرات.
أدى إلى التفكير في آليات ترقية العقود وظهور نماذج مثل Proxy Pattern.
🧠 الخلاصة
العنصر التفاصيل
📌 DAO Hack استغلال لثغرة إعادة النداء وسرقة 3.6M ETH
📉 النتائج فقدان الثقة، انقسام الشبكة، دروس أمنية ضخمة
⚙️ التقنيات المُستخدمة عقود ذكية بـ Solidity، غير مدققة
🔐 الدروس المستفادة أهمية الأمان، الحوكمة، مراجعة الكود قبل الإطلاق
تعليقات
إرسال تعليق