
فازر HTTP/1 مبني على القواعد مع قدرة على الطفرات
T-Reqs (Two Requests) هو مفجر HTTP قائم على القواعد النحوية كُتب كجزء من الورقة البحثية بعنوان "T-Reqs: HTTP Request Smuggling with Differential Fuzzing" والتي تم تقديمها في ACM CCS 2021.
BibTeX of the paper:
@inproceedings{ccs2021treqs,
title={T-Reqs: HTTP Request Smuggling with Differential Fuzzing},
author={Jabiyev, Bahruz and Sprecher, Steven and Onarlioglu, Kaan and Kirda, Engin},
booktitle={Proceedings of the 2021 ACM SIGSAC Conference on Computer and Communications Security},
pages={1805--1820},
year={2021}
}
T-Reqs مخصص لاختبار خوادم HTTP عشوائيًا عن طريق إرسال طلبات HTTP معدلة بالإصدارات 1.1 والإصدارات الأقدم. يتكون من ثلاثة مكونات رئيسية: 1) توليد المدخلات، 2) تحوير المدخلات المولدة، و3) توصيلها إلى الخادم (الخوادم) الهدف.
يتم استخدام قواعد نحوية من نوع CFG يتم إدخالها إلى المفجر لتوليد طلبات HTTP. كما هو موضح في مثال القواعد النحوية أدناه، الذي تم تصميمه خصيصًا لاختبار سطر الطلب، يتم تحديد كل مكون من مكونات سطر الطلب والقيم المحتملة لكل منها بشكل صريح. يتيح لنا ذلك توليد طلبات صالحة بأشكال مختلفة لسطر الطلب، وكذلك معالجة كل مكون من مكونات سطر الطلب كوحدة منفصلة من منظور التحوير.
'<start>':
['<request>'],
'<request>':
['<request-line><base><the-rest>'],
'<request-line>':
['<method-name><space><uri><space><protocol><separator><version><newline>'],
'<method-name>':
['GET', 'HEAD', 'POST', 'PUT', 'DELETE', 'CONNECT', 'OPTIONS', 'TRACE', 'PATCH'],
'<space>':
[' '],
'<uri>':
['/_URI_'],
'<protocol>':
['HTTP'],
'<separator>':
['/'],
'<version>':
['0.9', '1.0', '1.1'],
'<newline>':
['\r\n'],
'<base>':
['Host: _HOST_\r\nConnection:close\r\nX-Request-ID: _REQUEST_ID_\r\n'],
'<the-rest>':
['Content-Length: 5\r\n\r\nBBBBBBBBBB'],
يمكن تمييز كل مكون بطريقتين: قابل للتحوير كسلسلة نصية وقابل للتحوير كشجرة (انظر مثال التهيئة). إذا كان المكون قابلًا للتحوير كسلسلة نصية، فيمكن حذف حرف عشوائي أو استبداله أو إدراجه في موضع عشوائي. في المثال الموضح أدناه (الجانب الأيسر)، تم حذف الحرف الأخير من إصدار البروتوكول (1)، وتم استبدال الحرف الثالث في اسم الأسلوب (S) بـ R، وتم إدراج شرطة مائلة في بداية URI. بينما إذا كان المكون قابلًا للتحوير كشجرة، فيمكن حذف مكون عشوائي أو استبداله أو إدراجه في موضع عشوائي ضمن ذلك المكون. المثال أدناه (الجانب الأيمن) يظهر ثلاثة تحويرات شجرية تم تطبيقها على مكون سطر الطلب: 1) استبدال method بـ protocol، 2) إدراج URI إضافي بعد URI الحالي، و3) حذف proto الموجود.

يجب إعلام المفجر بتفضيلات المستخدم فيما يتعلق بتوليد المدخلات وتحويرها. بشكل أكثر تحديدًا، يجب تحديد القواعد النحوية للمدخلات، والمكونات القابلة للتحوير، وتفضيلات التحوير من بين أشياء أخرى في ملف التهيئة (انظر مثال التهيئة).
لتكون قادرًا على إعادة إنتاج المدخلات المولدة والمحورة في كل تكرار، يتم استخدام رقم بذرة. في الواقع، يعمل هذا الرقم كبذرة لتوليد الأرقام العشوائية أثناء تكوين وتحوير المدخلات. اعتمادًا على كيفية تغذية هذه البذور إلى المفجر، فإنه يعمل بأحد هذين الوضعين: الفردي والجماعي. في الوضع الفردي، يتم توليد المدخلات وتحويرها بناءً على البذور المحددة من قبل المستخدم. في الأمر أدناه، تم تحديد بذرة واحدة (أي 505). بدلاً من ذلك، يمكن تحديد قائمة من البذور باستخدام الخيار -f (انظر صفحة المساعدة لمزيد من التفاصيل).
python3 main.py -i -c config -s 505
بينما في الوضع الجماعي (وهو الافتراضي)، يبدأ من الصفر كقيمة بذرة ويزيدها في كل تكرار حتى الوصول إلى الرقم النهائي. يمكن تخصيص أرقام البداية والنهاية.
python3 main.py -c config
نشارك أيضًا ملف Dockerfile لتتمكن من تشغيل كود t-reqs. يمكنك تشغيل الأوامر أدناه للبدء:
# run the command below under the directory which has the Dockerfile
docker build -t test/treqs .
# create a container after you built the image using the command above
docker run -ti test/treqs bash
# run the commands below in the started docker shell
cd t-reqs/
python3 code/main.py -c config -n -i -s90
يعتمد تهريب طلبات HTTP على سلوكيات تحليل الجسم المختلفة بين الخوادم حيث يستخدم أحد الخوادم رأس Transfer-Encoding بينما يفضل الآخر رأس Content-Length لتحديد حدود جسم الطلب، أو يتجاهل أحد الخوادم جسم الطلب بينما يعالجه الآخر.
لتحليل تحليل الجسم للخوادم استجابةً للتحويرات المختلفة في أشكال مختلفة من طلب HTTP، نحتاج إلى تثبيت آلية تغذية راجعة على تلك الخوادم لتخبرنا عن سلوك تحليل الجسم. إحدى طرق تثبيت آلية تغذية راجعة على خادم، هي تشغيل الخادم في وضع الوكيل العكسي وجعله يعيد توجيه الطلبات إلى برنامج نصي "مزود التغذية الراجعة" يعمل كخدمة. تقوم هذه الخدمة بقياس طول الجسم في الطلبات المستلمة وحفظه لمقارنته لاحقًا مع خوادم أخرى.
يتوفر برنامج نصي مثال "مزود التغذية الراجعة" في هذا المستودع. ومع ذلك، يقوم هذا البرنامج النصي بإرسال معلومات طول الجسم مرة أخرى في استجابة بافتراض أن هذه المعلومات مخزنة على جانب العميل.
T-Reqs مرخص بموجب رخصة MIT.