كيف يعمل هجوم إعادة تعيين TCP

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


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

في هذا المنشور:

  • تعلم أساسيات برنامج التعاون الفني
  • تعرف على كيفية عمل الهجوم.
  • لنقم بهجوم على أنفسنا باستخدام نص Python بسيط.

قبل أن نبدأ في تحليل آليات الهجوم ، دعنا نرى أولاً كيف يتم استخدامها في العالم الحقيقي.

كيف يتم استخدام هجوم إعادة تعيين TCP في جدار الحماية العظيم؟


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

لمنع المستخدمين من حتى الاتصال بخوادم المحظورة، يستخدم GFW تقنيات مثل التلوث DNS و حجب IP(كلاهما يكلفان مقالات منفصلة). ومع ذلك ، في بعض الأحيان يحتاج جدار الحماية GFW إلى السماح بإجراء اتصال ، ولكن بعد ذلك قطعه في المنتصف. على سبيل المثال ، يعد ذلك ضروريًا إذا كنت ترغب في إجراء تحليل بطيء ومعلق للاتصال ، على سبيل المثال ، ارتباطه بالإجراءات الأخرى. أو يتم استخدامه إذا احتاج جدار الحماية إلى تحليل البيانات المتبادلة أثناء عملية الاتصال ، ثم استخدم هذه المعلومات لتحديد ما إذا كان يجب الاستمرار فيها أو حظرها. على سبيل المثال ، قد يُسمح بالزيارات إلى موقع ويب إخباري ، ولكن سيتم حظر مقاطع الفيديو التي تحتوي على كلمات رئيسية محظورة.

لهذا ، يحتاج GFW إلى أدوات قادرة على مقاطعة الاتصالات القائمة بالفعل. إحدى هذه الأدوات هي هجوم إعادة ضبط TCP.

كيف يعمل هجوم إعادة تعيين TCP؟


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

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

يعد إرسال مقاطع TCP المزيفة عملية سهلة إلى حد ما ، لأنه لا يوجد لـ TCP أو IP أي طريقة خاصة بها للتحقق من هوية المرسل. هناك امتداد IP يسمى IPSec يوفر المصادقة ، ولكنه لا يستخدم على نطاق واسع. يجب على مزودي خدمة الإنترنت رفض إرسال حزم IP التي تأتي من عنوان IP خاطئ بشكل واضح ، ولكن يُزعم أن هذا الفحص متوسط ​​للغاية. كل ما يمكن للمستلم القيام به هو أخذ عنوان IP المصدر والمنفذ داخل الحزمة أو المقطع بالقيمة الظاهرية ، وإذا أمكن ، استخدام بروتوكولات عالية المستوى ، مثل TLS ، لتحديد المرسل . ومع ذلك ، نظرًا لأن حزم تفريغ TCP جزء من بروتوكول TCP نفسه ، فلا يمكن التحقق منها باستخدام هذه البروتوكولات عالية المستوى.

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

كيف يعمل برنامج التعاون الفني


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


ومع ذلك ، لا يتم إرسال HTML الخاص بي عبر الإنترنت بطريقة مرتبة تمامًا. وهي مقسمة إلى العديد من الأجزاء الصغيرة (تسمى مقاطع TCP ) ، والتي يتم نقل كل منها بشكل فردي عبر الإنترنت وإعادة إنشائها بالترتيب المنقول بواسطة مكدس TCP الخاص بجهاز الكمبيوتر. يسمى هذا الإخراج المستعاد دفق TCP . يتم إرسال كل مقطع TCP في حزمة IP الخاصة به ، ومع ذلك ، لفهم الهجوم ، لا نحتاج إلى معرفة أي تفاصيل حول IP.


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

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

أرقام تسلسل TCP


يحتوي كل بايت تم إرساله عبر اتصال TCP على رقم تسلسل مخصص له من قبل المرسل. تستخدم أجهزة الاستقبال الأرقام التسلسلية لنقل البيانات المستلمة إلى الترتيب الأصلي.


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

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

تأكيد استلام البيانات


عندما يتلقى الجهاز مقطع TCP ، فإنه يخبر مرسل الجزء أنه تم استلامه. يقوم المستلم بذلك عن طريق إرسال مقطع ACK(اختصار لـ "إقرار") ، يحتوي على رقم تسلسل البايت التالي الذي يتوقع تلقيه من المرسل. يستخدم المرسل هذه المعلومات لفهم أن جهاز الاستقبال قد تلقى بنجاح كافة وحدات البايت الأخرى حتى هذا الرقم.

تتم ACKالإشارة إلى المقطع من خلال وجود إشارة ACKورقم التأكيد المقابل في رأس TCP للمقطع. لا يوجد سوى 6 أعلام في بروتوكول TCP ، بما في ذلك (كما سنرى قريبًا) علامة RST(اختصار لـ "إعادة تعيين" - "إعادة تعيين") ، تشير إلى مقطع إعادة التعيين.


ملاحظة: يسمح بروتوكول TCP أيضًا باستخدام ACKs الانتقائية ، التي يتم إرسالها عندما يتلقى جهاز الاستقبال بعض المقاطع وليس كلها ، في نطاق الأرقام. على سبيل المثال ، "تلقيت بايت 1000-3000 و 4000-5000 ، ولكن ليس 3001-3999." من أجل البساطة ، لن أفكر في ACKs انتقائية في مناقشتنا لهجمات إعادة ضبط TCP.

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


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

اختيار الرقم التسلسلي للمقطع المزيف


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

لذلك ، للحصول على هجوم إعادة ضبط TCP ناجح ، مطلوب رقم تسلسل معقول. ولكن ما يعتبر هذا العدد؟ بالنسبة لمعظم المقاطع (على الرغم من ذلك ، كما سنرى لاحقًا وليس لـ RST) ، يتم تحديد الإجابة حسب حجم نافذة TCP .

حجم نافذة TCP


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


تحتوي أجهزة الكمبيوتر على مخزن مؤقت لـ TCP تنتظر بيانات الوصول الجديدة معالجته بينما يعمل الكمبيوتر على وصول البيانات قبله. ومع ذلك ، فإن هذا المخزن المؤقت له حجم محدود. إذا كان المستلم غير قادر على التعامل مع كمية البيانات المرسلة إليه من قبل الشبكة ، فسيتم تجاوز سعة المخزن المؤقت. عند امتلاء المخزن المؤقت ، ليس لدى المستلم أي خيار سوى التخلص من البيانات الزائدة. لا يرسل المستلم ACKالبيانات المهملة ، لذا يجب على المرسل إعادة إرسالها عند وجود مساحة خالية في المخزن المؤقت للمستلم. لا يهم مدى سرعة الشبكة في إرسال البيانات إذا لم يكن لدى المستلم الوقت للتعامل معها.

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

"كثير جدًا" - ما مقدار البيانات؟ كيف يفهم المرسل متى يرسل المزيد من البيانات ، ومتى يستحق الانتظار؟ هذا هو المكان الذي يكون فيه حجم نافذة TCP مفيدًا.. حجم نافذة المستلم هو الحد الأقصى لعدد وحدات البايت غير المعترف بها التي يمكن للمرسل تحويلها إليه في أي وقت. لنفترض أن المستلم أفاد بأن حجم النافذة هو 100000 (سنكتشف قريبًا كيف يمر هذه القيمة) ، لذا يرسل المرسل 100000 بايت. افترض أنه في الوقت الذي أرسل فيه المرسل مائة ألف بايت ، أرسل المتلقي القطع ACKلأول 10000 بايت من هذه البايت. هذا يعني أن 90.000 بايت لم يتم تأكيدها بعد. نظرًا لأن حجم النافذة هو 100000 ، يمكن للمرسل نقل 10000 بايت أخرى قبل أن يضطر إلى انتظار إطارات جديدة ACK. إذا بعد إرسال 10000 بايت إضافية إضافيةACKإذا لم يتم استلامه ، فسيصل المرسل إلى حده البالغ 100000 بايت غير مؤكد. وبالتالي ، سيتعين على المرسل الانتظار وإيقاف إرسال البيانات (باستثناء إعادة إرسال البيانات التي يعتبرها مفقودة) حتى يتلقى بيانات جديدة ACK.


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


حجم نافذة TCP هو حد صارم على كمية البيانات غير المؤكدة المرسلة. يمكننا استخدامه لحساب أقصى رقم تسلسل ممكن (والذي قمت بتعيينه في المعادلة أدناه max_seq_no) ، والذي يمكن للمرسل إرساله في الوقت الحالي:

max_seq_no = max_acked_seq_no + window_size

max_acked_seq_no- هذا هو الرقم التسلسلي الأقصى الذي أرسل إليه المستلم ACK. هذا هو الحد الأقصى لرقم التسلسل الذي يعلم المرسل أن المستلم قد استلمه بالضبط. نظرًا لأن المرسل يمكنه إرسال window_sizeوحدات البايت غير المؤكدة فقط ، فإن الحد الأقصى لرقم التسلسل الذي يمكنه إرساله هو max_acked_seq_no + window_size.

وبسبب هذا ، تنص مواصفات TCP على أنه يجب على المستلم تجاهل أي بيانات يتلقاها تحتوي على أرقام تسلسلية خارج النافذة الصالحة. على سبيل المثال ، إذا أكد المستلم جميع وحدات البايت حتى 15000 ، وكان حجم نافذته 30.000 ، فسيستقبل أي بيانات برقم تسلسلي في النطاق من 15000 إلى (15000 + 30.000 = 45000). علاوة على ذلك ، يتجاهل المستلم تمامًا البيانات ذات الأرقام التسلسلية خارج هذا الفاصل الزمني. إذا كان المقطع يحتوي على بيانات ، بعضها داخل هذه النافذة والبعض الآخر خارجها ، فسيتم قبول البيانات داخل النافذة وتأكيدها ، ولكن سيتم تجاهل البيانات الموجودة خارجها. لاحظ أننا ما زلنا نتجاهل إمكانية الانتقائيةACK التي تم التطرق إليها لفترة وجيزة في بداية المشاركة.

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

أرقام التسلسل المقبولة لقطاعات RST


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


إذا كان الرقم التسلسلي خارج الفاصل الزمني ، فإن المتلقي يتجاهله تمامًا. ومع ذلك ، إذا كان داخل نافذة أرقام التسلسل المتوقعة ، يرسل جهاز الاستقبال "تحدي ACK" ("مكالمة ACK"). هذا جزء يخبر المرسل أن القطعة RSTلها رقم تسلسل غير صالح. كما يخبر المرسل برقم التسلسل الذي يتوقعه المتلقي. يمكن للمرسل استخدام هذه المعلومات من ACKالمكالمة لإعادة إنشائه وإعادة إرساله RST.

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

هجمات TCP العمياء


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

كما قلنا بالفعل ، في الإصدار الأولي من بروتوكول TCP ، كان على المهاجم فقط التقاط الرقم التسلسليRSTداخل إطار TCP الخاص بجهاز الاستقبال. أظهر مقال بعنوان "الانزلاق في النافذة" أن هذا جعل الهجمات العمياء سهلة للغاية ، لأنه من أجل نجاح شبه مضمون ، كان على المهاجم إرسال عشرات الآلاف من الأجزاء. لمواجهة ذلك ، RSTتم استبدال القاعدة التي أجبرت المستلم على قبول الشريحة بالمعيار الأكثر صرامة الموضح أعلاه. بفضل القواعد الجديدة لتنفيذ هجمات إعادة ضبط TCP ، يجب إرسال ملايين الأجزاء بشكل أعمى ، مما يجعلها غير قابلة للتحقيق عمليا. راجع RFC-5963 للحصول على التفاصيل .

تنفيذ هجوم إعادة تعيين TCP ضد أنفسنا


ملاحظة: اختبرت هذه العملية على OSX ، لكنني تلقيت بعض التعليقات بأنها لا تعمل بشكل صحيح على Linux.

الآن نحن نعرف كل شيء عن تنفيذ هجوم إعادة تعيين TCP. يجب على المهاجم:

  • شاهد حركة مرور الشبكة ( "شمها" ) بين ضحيتين
  • شم قطعة TCP مع تمكين العلم ACKوقراءة رقمه المؤكد
  • قم بإنشاء جزء TCP خاطئ مع تشغيل العلم RSTورقم تسلسل يساوي الرقم المؤكد للمقطع الذي تم اعتراضه (لاحظ أن هذا يعني إرسالًا بطيئًا ، وإلا فسيصبح رقم التسلسل المحدد قديمًا بسرعة. (لزيادة فرص النجاح ، يمكنك نقل عدة مقاطع RSTبفاصل كبير من أرقام التسلسل .)
  • أرسل مقاطع وهمية إلى أحد الضحايا أو كليهما ، على أمل أن يؤدي ذلك إلى قطع اتصال TCP

للممارسة ، دعنا نشن هجوم TCP على أنفسنا على نفس الكمبيوتر ، ونتواصل مع أنفسنا من خلال localhost. لهذا نحن بحاجة إلى:

  1. تكوين اتصال TCP بين نافذتين طرفية
  2. اكتب برنامج هجوم يتعامل مع استنشاق حركة المرور
  3. تعديل البرنامج بحيث ينتج ويرسل شرائح وهمية RST.

هيا بنا نبدأ.

1. إنشاء اتصال TCP بين نافذتين طرفية


سنقوم بتكوين اتصال TCP باستخدام الأداة netcat، والتي تتوفر افتراضيًا على العديد من أنظمة التشغيل. أي عميل TCP آخر سيفعل . في نافذة الوحدة الطرفية الأولى ، سنقوم بتنفيذ الأمر التالي:

nc -nvl 8000

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

nc 127.0.0.1 8000

يحاول هذا الأمر إنشاء اتصال TCP بالجهاز باستخدام عنوان IP الخاص 127.0.0.1بالمنفذ 8000. الآن ، بين نافذتي المحطة ، يجب إنشاء اتصال TCP. حاول إدخال شيء ما في نافذة واحدة - يجب إرسال البيانات عبر اتصال TCP وستظهر في نافذة أخرى.


2. استنشاق حركة المرور


سنكتب برنامج هجوم ينفذ استنشاق حركة المرور باستخدام scapyمكتبة شبكة Python الشهيرة. يستخدم هذا البرنامج scapy لقراءة البيانات المنقولة بين نافذتين من الجهاز ، على الرغم من أنها ليست جزءًا من الاتصال.

يتم نشر رمز البرنامج في مستودعي على GitHub . يتعرف البرنامج على حركة الاتصال ويعرضها على الجهاز. جوهر الرمز الأساسي هو استدعاء الأسلوب sniffمن المكتبة scapyالموجودة في نهاية الملف:

t = sniff(
        iface='lo0',
        lfilter=is_packet_tcp_client_to_server(localhost_ip, localhost_server_port, localhost_ip),
        prn=log_packet,
        count=50)

يخبرنا هذا الجزء من الكود scapyبرؤية الحزم على الواجهة lo0والتقاط تفاصيل جميع الحزم كجزء من اتصال TCP الخاص بنا. تحتوي المكالمة على المعلمات التالية:

  • iface- أوامر scapyللاستماع إلى واجهة الشبكة lo0أو المضيف المحلي
  • lfilter — , scapy , IP- localhost . , , lo0. , .
  • prn — , scapy , lfilter. . , RST.
  • count — , scapy .

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

3. إرسال حزم وهمية RST


لقد أنشأنا اتصالًا ، ويمكن للبرنامج التعرف على جميع أجزاء بروتوكول TCP التي تمر عبره. الشيء الوحيد المتبقي لنا هو تعديل البرنامج بحيث يقوم بهجوم إعادة ضبط TCP عن طريق إرسال مقاطع وهمية RST. للقيام بذلك ، سنقوم بتغيير الوظيفة prn(انظر قائمة المعلمات أعلاه) ، ودعا scapyللحزم التي تلبي متطلبات الوظيفة lfilter. في الإصدار المعدل من الوظيفة ، بدلاً من إصلاح الحزمة المقابلة ببساطة ، ندرسها ونستخرج المعلمات الضرورية ونستخدم هذه المعلمات لإنشاء المقطع وإرساله RST.

لنفترض أننا اعترضنا مقطعًا ينتقل من (src_ip, src_port)k (dst_ip, dst_port). لديه مجموعة أعلام ACKورقم التأكيد 100000. لتصنيع وإرسال قطعة ، نحن:

  • IP- , . , . , .
  • RST , , RST
  • , ,
  • send scapy — .

لتعديل برنامجنا السابق حسب الحاجة ، قم بإلغاء تعليق هذا السطر وقم بالتعليق على السطر فوقه.

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


مزيد من العمل


  1. استمر في تجربة أداة الهجوم. تتبع ما يحدث إذا قمت بإضافة أو طرح 1 من الرقم التسلسلي للحزمة RST. تأكد من أنها يجب أن تكون مساوية تمامًا لقيمة ackالحزمة التي تم اعتراضها.
  2. Wireshark lo0 . TCP-, RST. ip.src == 127.0.0.1 && ip.dst == 127.0.0.1 && tcp.port == 8000 .
  3. , . RST, RST , . , RST, .


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

All Articles