الخلاصة

  • جمعت RFC 3128 بين القطعة الصغيرة والتداخل كي يفحص المرشح رأس TCP بينما يستطيع المضيف تركيب رأس بوجهة أخرى من المجموعة نفسها.
  • أضاف العلاج شرط طول: يجب أن تحمل قطعة TCP ذات الإزاحة صفر الرأس الأدنى كاملًا، مع استمرار رفض الإزاحة واحد.
  • كانت النتيجة مشروطة بقواعد المرشح وطريقة إعادة التركيب؛ مرور القطع لا يثبت اكتمال اتصال أو اختراق خدمة أو ضعف جميع التطبيقات.

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

لكن ما رآه المرشح لم يكن بعدُ الكائن الذي سيصل إلى TCP.

في مثال RFC 3128 حملت القطعة الأولى ستة عشر بايتًا على الأقل من رأس TCP. ثم وصلت قطعة ثانية تبدأ هي أيضًا عند الصفر، لكنها لا تحمل سوى ثمانية بايتات من طبقة النقل. تغطي هذه البايتات منفذ المصدر ومنفذ الوجهة ورقم التسلسل، ولا تصل إلى أعلام TCP اللاحقة. استطاع المرسل أن يضع فيها منفذًا آخر لا تسمح السياسة بأن يستقبل اتصالًا جديدًا. وأكملت قطعة ثالثة مخطط البيانات.

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

استهدفت هذه الحيلة دفاعًا سابقًا. فرّقت RFC 1858 بين هجوم القطعة الصغيرة، الذي يدفع حقول النقل المهمة خارج الجزء الأول، وهجوم القطع المتداخلة، الذي يستغل اختلاف الأنظمة في اختيار نسخة البايت المكرر. واقترحت «الطريقة غير المباشرة» إسقاط قطعة TCP التي تساوي إزاحتها واحدًا.

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

أظهرت RFC 3128 أن قطعة الاستبدال لا تحتاج إلى البدء عند واحد. يمكنها العودة إلى صفر. أغلق الدفاع موضعًا تالياً، لكنه لم يتحقق من أن كل قطعة تبدأ من الصفر طويلة بما يكفي لتثبيت جميع الحقول التي يستند إليها الحكم.

تكمن الأهمية في تركيب الهجومين، لا في كلمة «تجزئة» وحدها. كان لا بد من نسخة أولى تبدو كاملة، ونسخة ثانية قصيرة تعيد كتابة البايتات المبكرة، وسلوك إعادة تركيب يختار مزيجًا يغيّر حقلًا تحكمه السياسة.

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

لهذا قيّدت RFC 3128 ادعاءها بوضوح: يتوقف الأثر على التطبيق الدقيق لإعادة التركيب في الوجهة. أنشأت RFC 791 حقول التجزئة ومسؤولية الجمع، وعرضت RFC 815 خوارزمية عملية لمعالجة الفجوات والتداخل. لكنها لم تجعل كل جهاز في المسار يختار البايت نفسه حين تصل نسختان.

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

كان إصلاح RFC 3128 محددًا. إذا كان البروتوكول TCP، والإزاحة صفرًا، وطول جزء النقل أقل من الرأس الأدنى الكامل، تُسقط الحزمة. وتظل قطعة الإزاحة واحد مرفوضة. لا يجوز لسياسة تعتمد على المنافذ والأعلام أن تسمح قبل أن تتأكد من ظهور مجموعتها الدنيا كاملة في القطعة الأولى.

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

وضعت وثائق لاحقة حدودًا أشد في سياقات أخرى. ألزمت RFC 5722 IPv6 بإسقاط مخطط البيانات كله عند وجود تداخل. واشترطت RFC 7112 وجود سلسلة الرؤوس كاملة في أول قطعة IPv6. وأعادت RFC 6274 تقييم أمن IPv4، بينما وصفت RFC 8900 هشاشة التجزئة بين نقاط نهاية وأجهزة وسيطة غير متفقة.

لا تثبت هذه النصوص أن منتجًا بعينه كان ضعيفًا في 2001. لكنها تحفظ المبدأ: ينبغي لجهة إنفاذ السياسة والجهة التي تستهلك البيانات أن تتعاملا مع الكائن نفسه. وإلا أمكن لكل قرار محلي أن يكون صحيحًا، بينما يسمح المسار النهائي بشيء آخر.

يظهر الشكل نفسه في اختلاف تطبيع المسارات بين الوكيل والخادم، وفي فك الترميز أكثر من مرة، وفي دمج الحقول المكررة بطرق مختلفة. ليست هذه هجمات RFC 3128 ذاتها، لكنها تشترك في فجوة واحدة: الحقل الذي برر السماح يظل قابلًا للتغيير بعد القرار.

القيمة التاريخية للمذكرة هي ضبط حدود الإثبات. يثبت سجل المرشح الرأس المؤقت الذي رآه والقاعدة التي طبقها. لا يثبت تلقائيًا المنفذ الذي تسلمه TCP، ولا اكتمال الاتصال، ولا حصول ضرر. يحتاج الانتقال من واقعة السماح إلى واقعة الأثر إلى القطع الأصلية وقاعدة إعادة التركيب وحالات البروتوكول اللاحقة.

المصادر