يطور مشروع LLVM معالجة آمنة للمخزن المؤقت في C ++

اقترح مطورو مشروع LLVM عددًا من التغييرات التي تهدف إلى تعزيز أمان مشاريع C ++ ذات المهام الحرجة وتوفير وسيلة لإزالة الأخطاء التي تسببها تجاوزات المخزن المؤقت. يركز العمل على مجالين: توفير نموذج تطوير يسمح لك بالعمل بأمان مع المخازن المؤقتة ، والعمل على تعزيز أمان مكتبة الوظائف القياسية libc ++.

نموذج البرمجة الآمنة المقترح لـ C ++ هو استخدام الفئات التي توفرها المكتبة القياسية عند العمل مع المخازن المؤقتة بدلاً من معالجة المؤشرات المجردة. على سبيل المثال ، يُقترح استخدام الفئات std :: array و std :: vector و std :: span ، والتي ستتم إضافتها مع فحص وقت التشغيل للذاكرة المخصصة خارج الحدود.

لمكافحة ممارسات البرمجة الخطيرة في clang ، يُقترح إصدار تحذيرات مجمع لجميع العمليات الحسابية للمؤشر ، على غرار تحذيرات clang-tidy's linter عند استخدام علامة "cppcoreguidelines-pro-bounds-pointer-arithmetic" ، والتي سيظهر الدعم لها في الإصدار LLVM 16. لتمكين مثل هذه التحذيرات ، ستتم إضافة علامة منفصلة إلى الرنة ، والتي لا تكون نشطة بشكل افتراضي.

من المخطط تنفيذ وضع حماية مقوى اختياري في libc ++ ، والذي ، عند تمكينه ، سيلتقط بعض المواقف التي تؤدي إلى سلوك غير محدد في وقت التشغيل. على سبيل المثال ، في فئات std :: span و std :: vector ، ستتم مراقبة وصول خارج الحدود ، وفي هذه الحالة سيتعطل البرنامج. يعتقد المطورون أن إضافة مثل هذه التغييرات ستبقي libc ++ متوافقًا مع معايير C ++ ، نظرًا لأن اختيار كيفية التعامل مع حالات السلوك غير المحدد يقع على عاتق مطوري المكتبة ، مما قد يفسر ، من بين أمور أخرى ، السلوك غير المحدد على أنه تعطل يتطلب برنامج للخروج.

تم التخطيط لتقسيم عمليات تحقق وقت التشغيل في libc ++ إلى فئات يمكن تضمينها بشكل فردي. تم بالفعل تنفيذ بعض عمليات التحقق المقترحة التي لا تؤدي إلى عمليات أكثر تعقيدًا أو تغييرات ABI في الوضع الآمن لـ libc ++.

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

المصدر: opennet.ru

إضافة تعليق