Uncontrolled format string
Uncontrolled format string is a type of code injectionvulnerability discovered around 1989 that can be used in security exploits.[1] Originally thought harmless, format string exploits can be used to crash a program or to execute harmful code. The problem stems from the use of unchecked user input as the format string parameter in certain C functions that perform formatting, such as printf(). A malicious user may use the %s and %x format tokens, among others, to print data from the call stack or possibly other locations in memory. One may also write arbitrary data to arbitrary locations using the %n format token, which commands printf() and similar functions to write the number of bytes formatted to an address stored on the stack.
Details
A typical exploit uses a combination of these techniques to take control of the instruction pointer (IP) of a process,[2] for example by forcing a program to overwrite the address of a library function or the return address on the stack with a pointer to some malicious shellcode. The padding parameters to format specifiers are used to control the number of bytes output and the %x token is used to pop bytes from the stack until the beginning of the format string itself is reached. The start of the format string is crafted to contain the address that the %n format token can then overwrite with the address of the malicious code to execute.
This is a common vulnerability because format bugs were previously thought harmless and resulted in vulnerabilities in many common tools. MITRE'sCVE project lists roughly 500 vulnerable programs as of June 2007, and a trend analysis ranks it the 9th most-reported vulnerability type between 2001 and 2006.[3]
Format string bugs most commonly appear when a programmer wishes to output a string containing user supplied data (either to a file, to a buffer, or to the user). The programmer may mistakenly write printf(buffer) instead of printf("%s", buffer). The first version interprets buffer as a format string, and parses any formatting instructions it may contain. The second version simply prints a string to the screen, as the programmer intended. Both versions behave identically in the absence of format specifiers in the string, which makes it easy for the mistake to go unnoticed by the developer.
تنشأ أخطاء التنسيق لأن اصطلاحات تمرير الوسائط في لغة 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 ]
انظر أيضاً
- تستغل البرمجة النصية عبر التطبيقات نوعًا مشابهًا من أخطاء البرمجة
- البرمجة النصية عبر المواقع
printfscanf- syslog
- التحقق غير السليم من صحة المدخلات
- يُعدّ هجوم حقن SQL هجومًا مشابهًا ينجح عندما لا تتم تصفية المدخلات.
مراجع
- ↑ "CWE-134: سلسلة تنسيق غير مُتحكَّم بها" . تعداد نقاط الضعف الشائعة . MITRE . 13-12-2010 . تم الاسترجاع في 5-03-2011 .
- 1 2 3 4 "استغلال ثغرات سلسلة التنسيق" (ملف PDF) . julianor.tripod.com . 2001-09-01.
- ↑ "توزيعات أنواع الثغرات الأمنية في CVE" . 2007-05-22.
- ↑ Bugtraq: ثغرات أمنية في تنسيق السلاسل في برامج بيرل
- ↑ ميلر، بارتون ب.؛ فريدريكسن، لارس؛ سو، برايان (ديسمبر 1990) [1989]. "دراسة تجريبية لموثوقية أدوات يونكس" (ملف PDF) . مجلة اتصالات رابطة مكائن الحوسبة . 33 (12): 32-44 . doi : 10.1145/96267.96279 . S2CID 14313707. مؤرشف من الأصل (ملف PDF) بتاريخ 2018-02-07 . تم الاطلاع عليه بتاريخ 2021-10-11 .
- 1 2 Bugtraq: استغلال proftpd 1.2.0pre6
- ↑ "WUFTPD 2.6.0 استغلال الجذر عن بعد" - مارك ، يونيو 2000 بقلم Przemysław Frasunek
- ↑ 'WuFTPD: توفير صلاحيات الجذر عن بُعد منذ عام 1994 على الأقل' - MARC بواسطة tf8
- ↑ Bugtraq: أخطاء التنسيق، بالإضافة إلى خطأ wuftpd، يونيو 2000، بقلم لاماغرا أرغامال
- ↑ Bugtraq: أخطاء التنسيق أخطاء التنسيق يوليو 2000 بقلم باسكال بوشارين
- ^ Bugtraq: تنسيق هجمات السلسلة، تيم نيوشام، سبتمبر 2000
- ↑ خيارات التحذير - استخدام مجموعة مترجمات جنو (GCC)
للمزيد من القراءة
- كوان، كريسبين (أغسطس 2001). FormatGuard: الحماية التلقائية من ثغرات سلسلة تنسيق printf (ملف PDF) . وقائع ندوة USENIX الأمنية العاشرة.
- كوان، كريسبين (يناير - فبراير 2003)، أمن البرمجيات للأنظمة مفتوحة المصدر ، مجلة IEEE للأمن والخصوصية، جمعية IEEE للحاسبات
- كلاين، توبياس (2004). تجاوزات المخزن المؤقت وتنسيق السلسلة-Schwachstellen - Funktionsweisen، Exploits und Gegenmaßnahmen (باللغة الألمانية) (1 ed.). dpunkt.verlag . رقم ISBN 3-89864-192-9.(7+663 صفحة)
- سيكورد، روبرت سي. (سبتمبر 2005). البرمجة الآمنة في لغتي C و C++ . أديسون ويسلي . ISBN 0-321-33572-4.
روابط خارجية
- مقدمة عن استغلال سلاسل التنسيق ، 2013-05-02، بقلم أليكس ريس
- scut / team- TESO استغلال ثغرات سلسلة التنسيق الإصدار 1.2 2001-09-09
- تصنيف التهديدات وفقًا لمعايير WASC - هجمات سلاسل التنسيق
- معايير التشفير الآمن CERT
- مبادرة CERT للبرمجة الآمنة
- الثغرات الأمنية المعروفة في مشروع CVE التابع لشركة MITRE.
- البرمجة الآمنة باستخدام GCC وGLibc، مؤرشفة بتاريخ 21 نوفمبر 2008 على موقع Wayback Machine (2008)، بقلم مارسيل هولتمان
- ثغرات أمنية في الحاسوب
