بينغ الموت! تعمل FreeBSD على إصلاح خطأ الأعطال في أداة الشبكة PlatoBlockchain Data Intelligence. البحث العمودي. عاي.

بينغ الموت! FreeBSD يصلح خطأ الأعطال في أداة الشبكة

واحدة من أولى أدوات الشبكة منخفضة المستوى التي يتعلمها أي مستخدم للكمبيوتر هي الموقرة ping خدمة.

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

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

من المثير للاهتمام ، نظرًا لأنك ربما سمعت الاختصار TCP / IP المستخدم كوصف عام للغراء البروتوكول الذي يعمل على تشغيل الإنترنت ، ping لا يستخدم تقنيًا TCP / IP على الإطلاق.

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

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

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

بينغ مختلف

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

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

ونتيجة لذلك، ping يستخدم بروتوكول مستوى أقل بكثير من بروتوكول TCP.

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

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

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

يتم التعامل معها عادةً في نواة نظام التشغيل ، بحيث يكاد يكون من المؤكد تقريبًا وصول حزم ICMP / IP حتى في حالة عدم ظهور برامج شبكة ذات مستوى أعلى بشكل صحيح ، تتضمن ICMP نوعين خاصين من الرسائل:

  • اكتب 0x08. دعا رسميا ICMP Echo، هذا نوع من الحزمة عادة ما يسمى طلب الصدى. هذا ما ping يرسل البرنامج من أجل التحقيق في أجهزة الكمبيوتر النشطة على الشبكة.
  • اكتب 0x00. دعا رسميا ICMP Echo Reply، هذا النوع من الحزم هو بالضبط ما تقوله. من المفترض أن يرسل جهاز كمبيوتر حي ، متصل بالإنترنت ، وغير مهيأ لحظر مرور ICMP Echo ، هذا النوع من الحزم مباشرة إلى الكمبيوتر الذي طلبها.

اذا اعجبك الموضوع لا تنسى الضغط على زر الإعجاب

$ ping -c 3 -p 4E414B45445345435552495459 Nakedsecurity.sophos.com
النمط: 0x4e414b45445345435552495459
PING news-sophos.go-vip.net (192.0.66.227) 56(84) بايت من البيانات.
64 بايت من 192.0.66.227 (192.0.66.227): icmp_seq=1 ttl=53 مرة=84.0 مللي ثانية
64 بايت من 192.0.66.227 (192.0.66.227): icmp_seq=2 ttl=53 time=85.1 مللي ثانية
64 بايت من 192.0.66.227 (192.0.66.227): icmp_seq=3 ttl=53 time=84.8 مللي ثانية

--- إحصائيات ping للأخبار-sophos.go-vip.net ---
تم إرسال 3 حزم، تم استلام 3، فقدان الحزمة 0٪، الوقت 2004 مللي ثانية
RTT دقيقة/متوسط/حد أقصى/mdev = 84.025/84.644/85.062/0.446 مللي ثانية

لرؤية أ ping في العمل على مستوى أقل قليلاً ، سنستخدم كود Lua الذي يمكنك العثور عليه في نهاية المقالة لإنشاء حزمة ICMP Echo خاصة بنا ، ولقراءة الرد الذي يأتي ، إن وجد:

$ sudo luax ping.lua Nakedsecurity.sophos.com
إرسال طلب ICMP ECHO إلى 192.0.66.227 -->
00000000 08 00 03 02 ب 5a 6f 1d 50 69 6e 67 52 65 71 75 |.....Zo.PingRequ|
00000010 65 73 74 4d 65 73 73 61 67 65 20 42 42 35 41 36 |estMessage BB5A6|
00000020 46 31 44 |F1D |
رجعت->
00000000 45 00 00 37 f6 af 00 00 35 01 94 7f c0 00 42 e3 |E..7....5.....B.|
00000010 XX XX XX XX 00 00 0b 02 bb 5a 6f 1d 50 69 6e 67 |.........Zo.Ping|
00000020 52 65 71 75 65 73 74 4d 65 73 73 61 67 65 20 42 |رسالة الطلب ب|
00000030 42 35 41 36 46 31 44 |B5A6F1D |

بالمناسبة ، كنا بحاجة لاستخدام sudo أعلاه لتشغيل البرنامج النصي الخاص بنا بامتيازات المستخدم المتميز ، لأننا أنشأنا ما يُعرف بـ مقبس IP خام - تنسيق يمكن صياغته في أي تنسيق أساسي نفضله ، بما في ذلك TCP و UDP ، وعند الحاجة هنا ، ICMP.

في العديد من أنظمة Linux / Unix ، فإن ملف ping يعمل الأمر الذي توفره التوزيعة الخاصة بك دون منح امتيازات الجذر صراحةً ، عادةً بسبب تثبيته بقدرات أمان خاصة ، أو مع setuid مجموعة العلامات ، مما يعني أنها تبدأ بالتشغيل تحت حساب مستخدم مختلف عن المستخدم الذي قام بتشغيله.

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

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

فحص الرد

كما قد تتعرف في تفريغ البيانات من البرنامج النصي أعلاه ، فإن وظيفة مقبس الشبكة التي نستخدمها لقراءة البيانات مرة أخرى من الخادم المستجيب لا تتضمن فقط بيانات ICMP Echo Reply ، ولكن أيضًا IP منخفض المستوى (رؤوس بروتوكول الإنترنت) في الحزمة الأساسية.

لم نحاول تحليل هذه البيانات أو معالجتها بطريقة أخرى ، ولكن FreeBSD ping يحتاج البرنامج إلى القيام بذلك من أجل فهم الرد ، بما في ذلك فهم أي رسائل خطأ تعود.

إذا كان ping تم رفضه بطريقة ما ، فإن Echo Reply لن يشتمل عادةً على رؤوس IP الخاصة به (كما هو موضح أعلاه) ولكن أيضًا نسخة مرجعية من رؤوس IP وبيانات ICMP التي ظهرت في الطلب الأصلي الصادر.

عادةً ما تبدو رؤوس حزم IPv4 كما تراه أعلاه ، حيث تبدأ رؤوس IP 45 00 00 37... والاستمرار في إجمالي 20 بايت ، بما يصل إلى البايتات الموضحة على شكل ...XX XX XX XX، وهو عنوان IP لجهاز الكمبيوتر المحمول الخاص بي.

اذا اعجبك الموضوع لا تنسى الضغط على زر الإعجاب

00000000 45 00 00 37 f6 af 00 00 35 01 94 7f c0 00 42 e3 |E..7....5.....B.|
00000010 XX XX XX XX |.... |

إصدار IP وطول الرأس: 0x45 (4 = IPv4، 5 = خمس كلمات 32 بت، أي 20 بايت
نوع الخدمة وبيانات الازدحام: 0x00
إجمالي طول الحزمة: 0x0037 (العلامة العشرية 55)
معلومات التسلسل: F6 AF 00 00
مدة البقاء (القفزات المتبقية): 0x35 (العلامة العشرية 53)
نوع البروتوكول: 0x01 (ICMP)
المجموع الاختباري: 0x947F (العلامة العشرية 38015)
إرسال رقم IP للكمبيوتر: C0 00 42 E3 (192.0.66.227 = Nakedsecurity.sophos.com)
عنوان IP للمستلم (الكمبيوتر المحمول الخاص بي): XX XX XX XX (تم التنقيح = رقم IP الخاص بي)

فري بي إس دي ping يفترض المبرمجون ، على ما يبدو ، أن رؤوس من هذا النوع ستكون دائمًا بطول 20 بايت بالضبط ، بناءً على قيمة طول الرأس في البايت الأول من 0x45، تدل على IPv4 (0x4?) مع 5-DWORD (0x?5) ، أو رأس 20 بايت.

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

يمكنك أن تخمن إلى أين يتجه هذا.

يمكن أن يكون لهذا البايت الأول في رأس IPv4 أي قيمة من الناحية القانونية 0x45 (الحد الأدنى لحجم الرأس من 5 DWORDs ، أو 20 بايت ، كما هو موضح) حتى 0x4F (تدل على 15 DWORDs ، لأن 0xF هي رقم عشري 15 ، أو 60 بايت من بيانات الرأس في المجموع) ، مما يسمح بدقة بـ 40 بايت إضافية اختيارية من بيانات الرأس.

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

احذر مجرمي الإنترنت الذين وضعوك على المحك

كما يمكنك أن تتخيل ، نظرًا لأن هذه الحقول الإضافية لا تُستخدم أبدًا تقريبًا ، فقد لا ترى حزمة IPv4 بأي شيء آخر غير 0x45 في البداية ، ومع إجمالي 20 بايت من بيانات الرأس ، إلا إذا واجهت مجموعة من مجرمي الإنترنت المستعدين لوضعك في الاختبار.

للأسف ، ليس هناك الكثير لمنع المهاجم من تزوير الخادم الذي يخمن ما إذا كنت تستخدم FreeBSD ، وينشئ عن عمد حزم ICMP / IP Echo Reply كبيرة الحجم من أجل إثارة تجاوز سعة المخزن المؤقت داخل الخاص بك ping برنامج.

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

في أحسن الأحوال ، لديك ping البرنامج سوف يتعطل. في أسوأ الأحوال ، ومع ذلك ، كما يعترف مستشار FreeBSD الأمني ​​بسخاء ، "قد يكون من الممكن لمضيف ضار تشغيل تنفيذ التعليمات البرمجية عن بُعد في برنامج ping."

لحسن الحظ ، كما فعل مؤلفو FreeBSD أيضًا نشير, "[t] يتم تنفيذ عملية ping في وضع الحماية لوضع القدرة على جميع الإصدارات المتأثرة من FreeBSD ، وبالتالي فهي مقيدة للغاية في كيفية تفاعلها مع بقية النظام عند النقطة التي يمكن أن يحدث فيها الخطأ."

بمعنى آخر ، تحتاج بالتأكيد إلى التصحيح ، لكن يمكن اعتبار المخاطر متواضعة.

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

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

تم إعطاء هذا الخطأ المعرف الرسمي CVE-2022-23093؛ تم توثيقه في النصائح الإرشادية للأمان FreeBSD-SA-22: 15.ping.

ماذا ستفعلين.. إذًا؟

  • إذا كنت من مستخدمي FreeBSD ، ما عليك سوى تحديث الإصدارات المتأثرة (FreeBSD 12 و FreeBSD 13) إلى أحدث إصداراتها ، حيث تم إصلاح هذا الخطأ.
  • إذا كنت مبرمج شبكة ، تأكد دائمًا من أنك قد قمت بحساب رؤوس الحزم التي قد تشير إلى اختلافات غير عادية في الحجم. حقيقة أنك لم ترَ أي تغيير بنفسك لا تمنعك من مواجهة حزمة غدًا خارجة عن المألوف لكنها قانونية تمامًا.
  • إذا كنت مدير شبكة ، ضع في اعتبارك حظر حزم IPv4 برؤوس IP التي لا يزيد حجمها عن 20 بايت. إذا كنت تريد حقًا السماح لبعض منتجات البرامج باستخدام خيارات رأس IPv4 غير عادية ، ففكر في تسجيل هذه الحزم غير المعتادة لمعرفة السبب.

اعتني بنفسك هناك!


رمز مثال لإظهار حركة PING


الطابع الزمني:

اكثر من الأمن عارية