
أداة قابلة للتكوين بشكل كبير للتحقق من قابلية تأثر الخادم بـ CVE-2023-44487 عن طريق إرسال إطارات HEADERS وRST_STREAM بسرعة وتوثيق استجابات الخادم.
CVE-2023-44487 هو استغلال ضد بروتوكول HTTP2 نفسه. في HTTP2، يتم بدء طلبات البيانات عن طريق إرسال إطار HEADERS. بعد استلام هذا الإطار، يبدأ الخادم في معالجة طلبك، ثم يرسل إطارات DATA حتى يتم نقل جميع البيانات. كما حدد HTTP2 إطار RST_STREAM، والذي يمكن استخدامه لإغلاق دفق في أي نقطة. لمنع الهجمات، عادةً ما تحدّ الخوادم الحد الأقصى لعدد الدفقات المفتوحة في وقت واحد (إلى 100 افتراضيًا). إذا انتظر العملاء فعليًا استهلاك جميع الموارد، فنادرًا ما يتم الوصول إلى هذا الحد. يعمل الهجوم لسبب بسيط: يمكن للعميل إرسال إطار RST_STREAM في أي نقطة. إطار RST_STREAM يغلق دفقًا، والدفقات المغلقة لا تُحتسب كدفقات متزامنة. هذا يعني أن العميل يمكنه إرسال الطلبات بسرعة، دون الوصول أبدًا إلى هذا الحد، بمجرد إغلاق الاتصال مباشرة بعد إرسال الطلب. الخادم الذي يتم مهاجمته سيظل، في بعض الحالات، يبدأ في تحميل البيانات، مما يخلق حملًا مفرطًا.
تهدف هذه الأداة إلى فحص قابلية تأثر الخادم بهذا الهجوم. تنشئ اتصالًا أو أكثر من اتصالات HTTP2 المتزامنة، ثم ترسل الأعداد المحددة من إطارات HEADERS، تليها إطارات RST_STREAM.
كما توفر العديد من خيارات التكوين الأخرى، مثل التأخير بين إطارات HEADERS وإطارات RST_STREAM، وعدد الدفقات لفتحها، وكمية الإطارات المرسلة لكل دفق، وما إلى ذلك. بعد اكتمال الهجوم، تطبع ملخصًا يحتوي على معلومات حول عدد الإطارات المستلمة، بالإضافة إلى عدد الأخطاء وإطارات GOAWAY المستلمة. يمكن أن يساعدك هذا في تحديد ما إذا كانت خدماتك عرضة لـ CVE-2023-44487.
حاليًا، يتم توزيع هذه الأداة ككود مصدري فقط، مما يعني أن تثبيت go مطلوب. يمكن تنفيذ الأداة عن طريق تشغيل go run main.go <options>.
هناك أيضًا سكربت python يمكن استخدامه لرسم معلومات زمن الاستجابة (latency) المكتوبة في ملف monitor.log.
بالإضافة إلى ذلك، أنشأت أدوات python جديدة لإجراء قياسات أكثر دقة وشمولًا. سيقرأ ملف runner.py الموجود في مجلد tooling القيم المحددة في ملف config.py الخاص بك (انظر config-sample.py للتفاصيل) ويشغّل جميع الاختبارات لجميع حاويات docker المحددة. ثم سيشغّل الاختبار الأكثر نجاحًا (أعلى وسيط + متوسط لزمن الاستجابة) لجميع المسارات المحددة في مصفوفة paths. سيُخرج رسومًا بيانية وملفات سجلات لكل اختبار تم تشغيله. لا تزال هذه الأدوات قيد التطوير. أنشأتها فقط لأنني كنت كسولًا جدًا لتشغيل كل هذه الاختبارات يدويًا لورقتنا البحثية. لا تتردد في إرسال PR لتنظيفها أو جعلها قابلة للاستخدام لأكثر من مجرد حالة الاستخدام الخاصة بنا.
حاليًا، يتم تنفيذ خيارات CLI التالية:
| Flag | Default | المعنى |
|---|---|---|
| frames | 1 | عدد إطارات HEADERS و RST_STREAM المرسلة على أي دفق |
| connections | 1 | عدد اتصالات TLS لتشغيل الهجوم عليها (بالتزامن) |
| consecutiveSends | 1 | عدد إطارات HEADERS المرسلة قبل إرسال إطارات RST_STREAM (لكل تدفق) |
| connectAttempts | 1 | عدد الاتصالات المتتالية لتشغيل الاختبار عليها (لكل روتين اتصال) |
| delay | 0 | الوقت (بالمللي ثانية) للانتظار بين إرسال إطارات HEADERS و RST_STREAM |
| ignoreGoAway | false | إذا كان صحيحًا، فلن تتسبب دفقات GOAWAY في إنهاء روتين الاستلام. بدلاً من ذلك، سينتظر حتى عدم استلام أي إطار لأكثر من 10 ثوانٍ. |
| monitor | false | تمكين مراقبة الأداء |
| monitorDelay | 100 | الوقت (بالمللي ثانية) للانتظار بين اختبار زمن استجابة الخادم |
| monitorLog | ./monitor.log | الملف الذي سيتم كتابة سجلات تأخير المراقبة إليه |
| routines | 1 | عدد الدفقات (streams) لمهاجمتها |
| skipValidation | true | إذا كان صحيحًا، فلن يتم التحقق من شهادة الخادم (هذا هو الافتراضي - لا نهتم بالأمان لأننا المهاجمون على أي حال) |
| timeout | 1000 | الوقت للانتظار لإطارات جديدة قبل اعتبار محاولة الاتصال غير صالحة وإيقافها |
| url | https://localhost:433/ | عنوان url لتشغيل الهجوم ضده |
ستطبع الأداة الكثير من معلومات التصحيح، بالإضافة إلى ملخص. تحتوي معلومات التصحيح على معلومات حول طريقة إنشاء الاتصال وحول التقدم الحالي ونوع الإطارات التي يتم إرسالها حاليًا.
سيبدو الملخص شيئًا كهذا (اعتمادًا على التكوين الخاص بك)
####################SUMMARY####################
Packet types received:
PING: 2
HEADERS: 12
SETTINGS: 0
DATA: 11
GOAWAY: 3
RSTSTREAM: 0
WINDOWUPDATE: 0
UNKNOWN: 0
Attack ending reasons (per receiving thread):
GoAway events: 3
Timeout events: 0
Error events: 0
Summary for connection 2
PING: 1
HEADERS: 9
SETTINGS: 0
DATA: 6
GOAWAY: 1
RSTSTREAM: 0
WINDOWUPDATE: 0
UNKNOWN: 0
Reason for stopping to listen for more packets: GoAway - the server responded as expected.
Summary for connection 1
PING: 1
HEADERS: 3
SETTINGS: 0
DATA: 5
GOAWAY: 1
RSTSTREAM: 0
WINDOWUPDATE: 0
UNKNOWN: 0
Reason for stopping to listen for more packets: GoAway - the server responded as expected.
Summary for connection 0
PING: 0
HEADERS: 0
SETTINGS: 0
DATA: 0
GOAWAY: 1
RSTSTREAM: 0
WINDOWUPDATE: 0
UNKNOWN: 0
Reason for stopping to listen for more packets: GoAway - the server responded as expected.
إذا كنت تعتقد أن هناك إحصائيات أخرى يجب جمعها - فلا تتردد في الاتصال بي أو إنشاء issue!
هذه الأداة مخصصة لأغراض البحث فقط. ليس المقصود منها تشغيل هجمات ضد خوادم لا تملكها أو تديرها بنفسك. لا أتحمل أي مسؤولية عن دقة الإحصائيات المقدمة، ولا عن الهجمات وعواقبها على الخوادم والخدمات.