البتّات المحجوزة

البِتّات المحجوزة (Reserved bits)

البِتّات المحجوزة هي حقول تُترك غير مُستخدمة عمدًا وهي حقول احتياطية داخل رؤوس الحزم أو هياكل البروتوكول الأخرى. وتم وضعها في حالة أُحتيجَت لاحقا، على سبيل المثال، رؤوس تي سي بي تحتوي على بتات محجوزة.

ولأنها لا تستخدم في العمليات الاعتيادية ولا تؤثر بشيء، فإنها قد تُستغل لنقل بيانات بشكل سري. وقد تستعمل ترميزات مختلفة لتجنب الكشف, في هذا المثال تُخفى البيانات في آخر بتين من الحقل المحجوز ولكن البيتات المحجوزة حاليا في التي سي بي هي ثلاثة.


المثال

عند محاولة مُرسل نقل بيانات باستخدام البتات المحجوزة، يتحول علم المحجوز إلى حالة مفعّل مما يجعل الاكتشاف سهلًا للوهلة الأولى. لكن المشكلة أن ليس كل قيمة بت تُرسَل ستؤدي بالضرورة إلى ظهور العلم كمفعّل.

لنأخذ الحرف التالي كمثال. إن حوّلناه من الآسكي إلى ثنائي نحصل على:

إذا رغب المُرسل في نقل هذا الحرف باستخدام 2 بت لكل حزمة، فستنقسم البتات على أربع حزم كالتالي:

  • الحزمة 1: 01 → المحجوز: مفعّل

  • الحزمة 2: 01 → المحجوز: مفعّل

  • الحزمة 3: 01 → المحجوز: مفعّل

  • الحزمة 4: 00 → المحجوز: غير مفعّل

إذا اعتمدنا فقط على تصفية الحزم التي فيها "محجوز: مفعّل" فسنفقد الحزم التي تحمل 00 .لذلك فلترتنا لازم تكون اوسع لإضافة الحزم ذات العلم الغير مفعّل, وهذي الفلترة تختلف حسب إختلاف السيناريو.

في مثالنا سنقيّد الفلترة بالمصدر والوجهة وبروتوكول تي سي بي:

بعد تطبيق الفلتر، نريد تضمين حتى الحزم التي فيها العلم المحجوز غير مفعّل ثم استخراج البتات لمزيد من التحليل. بس قبل ما نبدأ، لازم نفهم كيفية الأعلام في تي سي بي تشتغل.


أعلام TCP (TCP flags)

أعلام TCP مكوّنة من 11 بت (مُرقّمة من 0 إلى 10)، وكل بت يُمثّل علم. شرح معنى كل علم هنا خارج نطاق هذه المقالة، لكن هذه تمثيلة لكل بت:

بالنسبة لقناتنا السرية، نركّز فقط على البتات 9 و10 و11 (البتات المحجوزة). كمثال:

  • البت 9 → عشري 512 → سداسي عشري 0x0200

  • البت 10 → عشري 1024 → سداسي عشري 0x0400

كمثال: إذا كنا نريد تفعيل العلمين سين او آك فالقيمة بالسداسي العشري بتكون

ولما نستخرج الأعلام من الحزم عن طريق تي شارك بنحصل عليها كسداسية عشرية، وبنقدر نفحصها لمعرفة ما إذا كانت البتات المحجوزة مفعّلة او لا.


استخراج البيانات

لإستخراج جميع الأعلام باستعمال تي شارك يمكن كتابة الأمر التالي, ولكن هذا الأمر سيتخرج جميع الأعلام وليس فقط البيتات المطلوبة

وهذا امر باستخدام تي شارك لإستخراج البتين (البت 10 والبت 9) طباعتهما كبايناري:

ايش جالس يصير؟

  1. نأخذ قيم الأعلام بعد تطبيق الفلتر.

  2. نحوّل القيم (سداسية عشرية) إلى قيم رقمية.

  3. لكل قيمة علم نقوم بما يلي:

    • هل البت العاشر مفعّل؟ إذا نعم فيصير الرقم الأيسر 1 وإذا لا 0.

    • هل البت التاسع مفعّل؟ إذا نعم فيصير الرقم الأيمن 1 وإذا لا 0.


فهم عملية AND

كيف نتحقق مما إذا كان بِت معيّن مفعّل؟ نستخدم عملية AND مع القيمة التي تمثّل ذلك البِت. خلونا نشوف هالحالتين:

الحالة 1: القيمة 0x0402

النتيجة: البت 10 مفعّل.

الحالة 2: القيمة 0x0002

النتيجة: البت 9 غير مفعّل.

اذا طبقنا هذا على كل حزمة نحصل على سلسلة من 1 و0 بنحصل على المحتوى المنقول كبايناري.


المخرَج وكيف نُعيد تحويله إلى نص

المخرَج سيكون سلسلة مكونة من بتين لكل حزمة وعند طباعة كل نتائج الحزم بشكل متسلسل نحصل على كتلة بيانات بايناري كاملة, ناخذها ونحوّلها إلى نص.

نفصل هذه البتات إلى مجموعات كل 8 بت ثم نحولها إلى أحرف الآسكي وبنلاقي البيانات المُرسلة عبر القناة.


الخلاصة

قد تظهر البِتّات المحجوزة غير مهمة، لكن يمكن استغلالها كقناة لنقل بيانات سرية. عبر تضمين معلومات داخل بضعة بتات علَمية فقط، يستطيع مهاجم أن يمرّر رسائل عبر حركة تبدو طبيعية وقد تفلت من فلاتر بسيطة. ومع ذلك، اذا فهمنا بنية أعلام تي سي بي وأساليب الاستخراج بنقدر نكشف هذي القنوات ونفك شفرتها.

ملاحظة: شفت هذا النوع من الأسئلة يَظهر غالبًا في مسابقات التقط العلم؛ ولكن ما شفت حتى الآن تطبيق حقيقي لهذه التقنية في بيئة العالم الحقيقي.

Last updated