
بيئة مختبر تعتمد على Docker لاستغلال CVE-2014-0160 (Heartbleed) لتسريب الذاكرة من خوادم الويب nginx، بما في ذلك payload scripts وقواعد كشف Snort IDS.
يركز هذا المستودع على بناء حاوية لإنشاء بيئة سهلة لاستغلال nginx باستخدام تقنية Heartbleed مع التركيز على:

تظهر مشكلة CVE-2014-0160 عندما توفر مكتبة OpenSSL وظيفة heartbeat الخاصة بـ TLS بحجم مخزن مؤقت 64 كيلوبايت مما يسبب تسربًا زائدًا للمعلومات الحساسة من ذاكرة الخادم
يقوم تطبيق الويب بمعالجة رسائل حساسة يتم تخزينها مؤقتًا بواسطة nginx في الذاكرة
نقوم بالاستغلال عن طريق فحص ما إذا كانت البيئة تدعم heartbeat الخاص بـ TLS
openssl s_client -connect : -tlsdebug
ملاحظة: قد لا تدعم الإصدارات الحديثة من OpenSSL بروتوكول TLS heartbeat، يرجى استخدام إصدار يدعمه
Heartbleed هو خطأ قراءة خارج الحدود (out-of-bounds read) ذو طبيعة عشوائية. سيعيد الخادم 64 كيلوبايت من الذاكرة المجاورة
رأس heartbeat (RFC6520) 18 03 02 00
استخدم docker build لبناء مختبر heartbleed
docker build -t heartbleed-lab .
docker run heartbleed-lab -p port:8443
المنفذ الافتراضي لتطبيقات الويب هو 8443
استخدم الحمولة heartbleed.py للاختبار يمكننا ملاحظة أن الحمولة تعيد النتيجة على هيئة تفريغ سداسي عشري (hexdump)
في مثال التفريغ يمكننا رؤية الطلب المرسل للتو ومعظم خلايا الذاكرة هي 0x00 بسبب الطبيعة العشوائية للحمولة، لذا يجب تشغيلها عدة مرات لتسريب النتيجة المرجوة
يمكننا تشغيل memory.py لتقديم طلب إلى nginx لحفظه في الذاكرة ثم الحصول على النتيجة المسربة كما نرى في result.txt
نظرًا لأننا نعلم أن المهاجم سيستخدم طلب heartbeat لتسريب الرسائل
alert tcp any any -> any 443 (msg:"Heartbeat request"; content:"|18 03 02 00|"; rawbytes;sid:100000)
استخدم snort ids لاكتشاف الاختراق