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

تظهر مشكلة CVE-2014-0160 عندما توفر مكتبة OpenSSL التي تقدم TLS وظيفة heartbeat بحجم مخزن مؤقت 64 كيلوبايت مما يسبب تسريب معلومات حساسة من ذاكرة الخادم.
يقوم تطبيق الويب بمعالجة رسائل حساسة يتم تخزينها مؤقتًا بواسطة nginx في الذاكرة
نستغل ذلك بفحص ما إذا كانت البيئة تدعم heartbeat TLS
openssl s_client -connect : -tlsdebug
ملاحظة: الإصدارات الحديثة من OpenSSL قد لا تدعم بروتوكول heartbeat TLS، يرجى استخدام إصدار يدعمه
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 لاكتشاف الاختراق