سلسلة تنسيق غير متحكم بها

سلسلة التنسيق غير المُتحكَّم بها هي نوع من ثغرات حقن التعليمات البرمجية، تم اكتشافها حوالي عام 1989، ويمكن استغلالها في عمليات استغلال أمنية . [ 1 ] على الرغم من أنها كانت تُعتبر في الأصل غير ضارة، إلا أن استغلال سلسلة التنسيق يُمكن أن يُؤدي إلى تعطيل برنامج أو تنفيذ تعليمات برمجية ضارة. تكمن المشكلة في استخدام مُدخلات المستخدم غير المُدققة كمعامل لسلسلة التنسيق في بعض دوال لغة C التي تُجري عمليات التنسيق، مثل ` format.conf` . قد يستخدم مُستخدم خبيث رموز التنسيق `format.conf` و` format.conf`، من بين رموز أخرى، لطباعة البيانات من مكدس الاستدعاءات أو ربما مواقع أخرى في الذاكرة. كما يُمكن كتابة بيانات عشوائية إلى مواقع عشوائية باستخدام رمز التنسيق `format.conf`، الذي يُصدر أوامر لدوال مُشابهة لكتابة عدد البايتات المُنسقة إلى عنوان مُخزَّن في المكدس.printf()%s%x%nprintf()

تفاصيل

تستخدم الثغرة الأمنية النموذجية مزيجًا من هذه التقنيات للسيطرة على مؤشر التعليمات (IP) لعملية ما، [ 2 ] على سبيل المثال، عن طريق إجبار البرنامج على استبدال عنوان دالة مكتبة أو عنوان الإرجاع في المكدس بمؤشر إلى شيفرة خبيثة . تُستخدم معلمات الحشو لمحددات التنسيق للتحكم في عدد البايتات المُخرَجة، %xويُستخدم الرمز المميز لسحب البايتات من المكدس حتى الوصول إلى بداية سلسلة التنسيق نفسها. تُصمَّم بداية سلسلة التنسيق بحيث تحتوي على العنوان الذي %nيمكن للرمز المميز استبداله بعنوان الشيفرة الخبيثة المراد تنفيذها.

تُعدّ هذه ثغرة أمنية شائعة، إذ كان يُعتقد سابقًا أن أخطاء التنسيق غير ضارة، لكنها أدت إلى ثغرات في العديد من الأدوات الشائعة. يُدرج مشروع CVE التابع لمؤسسة MITRE ما يقارب 500 برنامج مُعرّض لهذه الثغرة حتى يونيو 2007، ويُصنّفها تحليل الاتجاهات في المرتبة التاسعة بين أكثر أنواع الثغرات الأمنية المُبلّغ عنها بين عامي 2001 و2006. [ 3 ]

تظهر أخطاء تنسيق السلاسل النصية غالبًا عندما يرغب المبرمج في إخراج سلسلة نصية تحتوي على بيانات مُدخلة من المستخدم (سواءً إلى ملف، أو إلى مخزن مؤقت، أو للمستخدم). قد يكتب المبرمج خطأً `<format>` printf(buffer)بدلًا من `<format> printf("%s", buffer)`. يُفسر الإصدار الأول ` buffer<format>` على أنه `<format>`، ويحلل أي تعليمات تنسيق قد يحتويها. أما الإصدار الثاني، فيطبع ببساطة سلسلة نصية على الشاشة، كما أراد المبرمج. يتصرف كلا الإصدارين بشكل متطابق في حالة عدم وجود مُحددات تنسيق في السلسلة النصية، مما يجعل من السهل على المطور عدم ملاحظة الخطأ.

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

قد تحدث أخطاء تنسيق السلاسل في لغات برمجة أخرى غير لغة C، مثل لغة Perl، على الرغم من أنها تظهر بتردد أقل وعادةً لا يمكن استغلالها لتنفيذ التعليمات البرمجية التي يختارها المهاجم. [ 4 ]

تاريخ

تم رصد أخطاء التنسيق لأول مرة في عام 1989 من خلال أعمال اختبار التشويش التي أجريت في جامعة ويسكونسن، والتي اكتشفت "تأثير التفاعل" في غلاف لغة سي (csh) بين آلية سجل الأوامر الخاصة به وروتين الخطأ الذي يفترض إدخال سلسلة آمنة. [ 5 ]

تم اكتشاف استخدام ثغرات سلاسل التنسيق كطريقة للهجوم في سبتمبر 1999 بواسطة تيم تويلمان خلال تدقيق أمني لبرنامج ProFTPD . [ 6 ] كشف التدقيق عن snprintfثغرة تمرر بيانات المستخدم مباشرةً دون سلسلة تنسيق. أظهرت اختبارات مكثفة باستخدام وسائط مصطنعة لدوال من نوع printf أنه من الممكن استغلال هذه الثغرة لرفع مستوى الصلاحيات. أدى ذلك إلى أول منشور في سبتمبر 1999 على قائمة Bugtraq البريدية بخصوص هذا النوع من الثغرات، بما في ذلك استغلال أساسي لها. [ 6 ] مع ذلك، استغرق الأمر عدة أشهر قبل أن يدرك مجتمع الأمن السيبراني المخاطر الكاملة لثغرات سلاسل التنسيق، حيث بدأت تظهر استغلالات لبرامج أخرى تستخدم هذه الطريقة. نُشرت أولى الاستغلالات التي لفتت الانتباه إلى هذه المشكلة (من خلال توفير وصول عن بُعد إلى صلاحيات الجذر عبر تنفيذ التعليمات البرمجية) في وقت واحد على قائمة Bugtraq في يونيو 2000 بواسطة برزيميسواف فراسونيك [ 7 ] وشخص يستخدم الاسم المستعار tf8 . [ ٨ ] أعقب ذلك شرحٌ نُشر بعد فترة وجيزة من قِبل شخص يستخدم الاسم المستعار lamagra . [ ٩ ] نُشرت ورقة بحثية بعنوان "أخطاء التنسيق" على قائمة Bugtraq بواسطة باسكال بوشارين في يوليو ٢٠٠٠. [ ١٠ ] نُشرت الورقة البحثية الرائدة "هجمات سلاسل التنسيق" [ ١١ ] بقلم تيم نيوشام في سبتمبر ٢٠٠٠، ونُشرت أوراق بحثية أخرى تشرح هذه المشكلة تقنيًا بالتفصيل في سبتمبر ٢٠٠١، مثل ورقة " استغلال ثغرات سلاسل التنسيق" من قِبل فريق Teso . [ ٢ ]

في اللغات الحديثة مثل Java (مع String.format())، و C# (مع String.Format()أو سلاسلها المضمنة )، و C++ (مع std::format())، لم يعد هذا النوع من هجمات سلسلة التنسيق ممكنًا، ولكن قد لا تزال هناك ثغرات أخرى في سلسلة التنسيق، مثل تلك التي مكنت Log4Shell .

الوقاية في المترجمات

تستطيع العديد من المترجمات التحقق بشكل ثابت من سلاسل التنسيق وإصدار تحذيرات بشأن التنسيقات الخطيرة أو المشبوهة. في مجموعة مترجمات جنو ، علامات المترجم ذات الصلة هي: -Wallو -Wformatو -Wno-format-extra-argsو -Wformat-securityو -Wformat-nonliteralو -Wformat=2. [ 12 ]

معظم هذه الأدوات مفيدة فقط لاكتشاف سلاسل التنسيق غير الصحيحة المعروفة أثناء الترجمة. إذا كانت سلسلة التنسيق قد تأتي من المستخدم أو من مصدر خارجي للتطبيق، فيجب على التطبيق التحقق من صحتها قبل استخدامها. كما يجب توخي الحذر إذا كان التطبيق يُنشئ أو يختار سلاسل التنسيق أثناء التشغيل. في حال استخدام مكتبة GNU C، -D_FORTIFY_SOURCE=2يمكن استخدام المعامل لاكتشاف أنواع معينة من الهجمات التي تحدث أثناء التشغيل، -Wformat-nonliteralويكون الفحص أكثر صرامة.

كشف

على عكس العديد من المشكلات الأمنية الأخرى، يسهل نسبيًا اكتشاف السبب الجذري لثغرات سلاسل التنسيق في الملفات التنفيذية المُجمَّعة بلغة x86: بالنسبة printfلدوال عائلة `-family`، يتطلب الاستخدام الصحيح وسيطًا منفصلاً لسلسلة التنسيق والوسائط المراد تنسيقها. يمكن رصد الاستخدامات الخاطئة لهذه الدوال ببساطة عن طريق عدّ عدد الوسائط المُمرَّرة إليها؛ إذ يُعدّ "نقص الوسائط" [ 2 ] مؤشرًا قويًا على إساءة استخدام الدالة.

الكشف في الملفات الثنائية المُجمَّعة بلغة x86

غالبًا ما يكون حساب عدد الوسائط أمرًا سهلاً على x86 نظرًا لاتفاقية الاستدعاء حيث يقوم المستدعي بإزالة الوسائط التي تم دفعها إلى المكدس عن طريق إضافتها إلى مؤشر المكدس بعد الاستدعاء، لذلك فإن الفحص البسيط لتصحيح المكدس يعطي عدد الوسائط التي تم تمريرها إلى printfدالة العائلة. [ 2 ]

انظر أيضاً

مراجع

  1. "CWE-134: سلسلة تنسيق غير مُتحكَّم بها" . تعداد نقاط الضعف الشائعة . MITRE . 13-12-2010 . تم الاسترجاع في 5-03-2011 .
  2. 1 2 3 4 "استغلال ثغرات سلسلة التنسيق" (ملف PDF) . julianor.tripod.com . 2001-09-01.
  3. Bugtraq: ثغرات أمنية في تنسيق السلاسل في برامج بيرل
  4. ميلر، بارتون ب.؛ فريدريكسن، لارس؛ سو، برايان (ديسمبر 1990) [1989]. "دراسة تجريبية لموثوقية أدوات يونكس" (ملف PDF) . مجلة اتصالات رابطة مكائن ​​الحوسبة . 33 (12): 32-44 . doi : 10.1145/96267.96279 . S2CID 14313707. مؤرشف من الأصل (ملف PDF) بتاريخ 2018-02-07 . تم الاطلاع عليه بتاريخ 2021-10-11 . 
  5. 1 2 Bugtraq: استغلال proftpd 1.2.0pre6
  6. "WUFTPD 2.6.0 استغلال الجذر عن بعد" - مارك ، يونيو 2000 بقلم Przemysław Frasunek
  7. 'WuFTPD: توفير صلاحيات الجذر عن بُعد منذ عام 1994 على الأقل' - MARC بواسطة tf8
  8. Bugtraq: أخطاء التنسيق، بالإضافة إلى خطأ wuftpd، يونيو 2000، بقلم لاماغرا أرغامال
  9. Bugtraq: أخطاء التنسيق أخطاء التنسيق يوليو 2000 بقلم باسكال بوشارين
  10. ^ Bugtraq: تنسيق هجمات السلسلة، تيم نيوشام، سبتمبر 2000
  11. خيارات التحذير - استخدام مجموعة مترجمات جنو (GCC)

للمزيد من القراءة