أمان الذاكرة أصبح الآن قضية أمن قومي — لماذا تريد الولايات المتحدة والاتحاد الأوروبي من المطورين التوقف عن كتابة لغة C

مشاركة:
أمان الذاكرة أصبح الآن قضية أمن قومي — لماذا تريد الولايات المتحدة والاتحاد الأوروبي من المطورين التوقف عن كتابة لغة C

في فبراير 2024، نشرت وكالة الأمن السيبراني وأمن البنية التحتية الأمريكية (CISA) تقريرًا من 19 صفحة بعنوان "حالة خرائط الطريق لسلامة الذاكرة". تبعه مكتب مدير الأمن السيبراني الوطني في البيت الأبيض بتقرير فني يحث مصنعي البرمجيات على القضاء على ثغرات أمان الذاكرة. وقع كل من المركز الوطني للأمن السيبراني في المملكة المتحدة، والمكتب الاتحادي لأمن المعلومات في ألمانيا (BSI)، ومديرية الإشارات الأسترالية على التقرير. كانت الرسالة من جميع الوكالات الخمس متطابقة: توقفوا عن كتابة البرمجيات الحيوية للسلامة بلغة C و C++.

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

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

أمان الذاكرة هو الخاصية التي تمنع البرنامج من قراءة أو كتابة الذاكرة خارج الحدود المقصودة، أو الوصول إلى الذاكرة المحررة، أو استخدام القيم غير المهيأة. تفرض اللغات أمان الذاكرة إما من خلال تجميع القمامة (Java، Python، Go) أو من خلال قواعد الملكية الثابتة المفروضة في وقت الترجمة (Rust). لا توفر C و C++ أيًا منهما: المبرمج هو المسؤول عن إدارة الذاكرة بشكل صحيح، ولا يتحقق المترجم من الصحة.

النتيجة هي فئة من الأخطاء التي استمرت منذ إنشاء C في عام 1972: تجاوزات المخزن المؤقت، وثغرات الاستخدام بعد التحرير، وإلغاء الإشارة إلى المؤشر الفارغ، وتلف الكومة، والخلط بين الأنواع. هذه ليست حالات حافة غريبة — بل هي فئة الثغرات الأكثر استغلالًا في البرية، والتي تمثل باستمرار 60-70٪ من CVEs الحرجة في مشاريع البرمجيات الكبرى.

أفاد مركز استجابة أمن مايكروسوفت في عام 2019 أن حوالي 70٪ من جميع CVEs في منتجات مايكروسوفت على مدى 12 عامًا الماضية كانت مشكلات أمان ذاكرة. أفاد مشروع Zero من جوجل في عام 2020 أن 67٪ من الأخطاء عالية الخطورة في Chrome كانت متعلقة بأمان الذاكرة. ظل كلا الرقمين ثابتين بشكل عنيد حتى عام 2026 على الرغم من الاستثمار الكبير في الأدوات (الاختبار بالتغذية العشوائية، المعقمات، التحليل الثابت) — لأن المشكلة الأساسية هي نموذج اللغة نفسه، وليس الجودة غير الكافية للمبرمجين الذين يستخدمونها.

حجم المشكلة الموروثة

شدة الوضع الحالي هي دالة على مقدار البنية التحتية الحيوية التي تعمل على كود C. نواة لينكس — أساس معظم الخوادم، وأجهزة أندرويد، وأجهزة إنترنت الأشياء، والأنظمة المدمجة — هي تقريبًا 97٪ C. مكتبة OpenSSL التي تؤمن معظم حركة مرور HTTPS هي C. SQLite، قاعدة البيانات الأكثر انتشارًا في العالم، هي C. محرك JavaScript V8 الذي يدير نصف تصفح الويب في العالم هو C++. تحتوي نواة Windows و macOS و iOS على عشرات الملايين من أسطر C و C++.

إعادة كتابة أي من هذه ليست مشروعًا متعدد الأشهر. نواة لينكس حوالي 30 مليون سطر من الكود، مع مساهمين عبر آلاف المنظمات وعملية تغيير تتحرك بسرعة جيولوجية حسب التصميم. قاعدة كود Google Chrome تبلغ 40 مليون سطر. السؤال "لماذا لا تعيد كتابتها فقط بلغة Rust؟" يخطئ فهم الحجم: بمعدل إعادة كتابة مليون سطر في السنة لكل فريق، إعادة كتابة كاملة لقاعدة الكود تستغرق عقودًا وتقدم أخطاء جديدة في كل خطوة.

النهج العملي هو الاستبدال التدريجي: أعد كتابة المكونات الأعلى خطرًا أولاً (التحليل، معالجة إدخال الشبكة، التشفير)، استخدم قابلية التشغيل البيني للغات لتشغيل وحدات Rust بجانب C، واقبل أن الركيزة القديمة من C ستستمر لمدة 20-30 عامًا بينما يتم عزلها تدريجيًا.

مسار Rust

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

منحنى التبني أصبح الآن حادًا بما يكفي ليمثل تحولًا هيكليًا. أعادت جوجل كتابة أجزاء كبيرة من حزم Bluetooth و WiFi في أندرويد بلغة Rust؛ أفاد فريق أندرويد في عام 2024 أن الكود الجديد في لغات آمنة للذاكرة خفض معدل CVEs المتعلقة بأمان الذاكرة لتلك المكونات إلى الصفر تقريبًا بينما حافظت مكونات C القديمة على معدل الثغرات التاريخي الخاص بها. قبلت نواة لينكس رسميًا Rust كلغة تنفيذ ثانية في عام 2022، وتم دمج أول برامج تشغيل Rust في النواة الرئيسية.

فريق Windows من مايكروسوفت يعيد كتابة مكونات نواة ويندوز بلغة Rust، بهدف طويل الأجل لمنع أخطاء أمان الذاكرة الجديدة من دخول قاعدة كود النواة. إرشادات وكالة الأمن القومي لعام 2022 سمّت تحديدًا Rust، Swift، Go، Kotlin، وJava كلغات مفضلة للتطوير الجديد في سياقات الأمن القومي. قانون المرونة السيبرانية للاتحاد الأوروبي، الذي دخل حيز التنفيذ في عام 2025، يتطلب من مصنعي المنتجات ذات العناصر الرقمية إظهار ممارسات "آمنة بالتصميم" — لغة قانونية تعاقب ضمنيًا اللغات غير الآمنة للذاكرة في السياقات الحيوية للسلامة.

ما لا يحله "أمان الذاكرة"

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

هناك أيضًا تمييز ذو معنى بين Rust "الآمنة" و"غير الآمنة". تحتوي المكتبة القياسية لـ Rust على كتل غير آمنة — أقسام حيث يعطل المبرمج صراحة فحوصات الملكية للكود الحيوي للأداء. يجب التحقق من هذه المناطق غير الآمنة يدويًا، والثغرات فيها ممكنة. على سبيل المثال، حالة السباق CVE-2022-21658 في المكتبة القياسية لـ Rust كانت موجودة في تنفيذ std::fs الذي تمت مراجعته بعناية. تجعل Rust الكود غير الآمن نادرًا ومرئيًا للغاية، لكنها لا تقضي عليه.

حجة الأداء ضد اللغات الآمنة للذاكرة تم حلها إلى حد كبير تجريبيًا. في معظم أعباء العمل، يعمل Rust ضمن 5-15٪ من كود C المكافئ، وفي بعض المعايير يتفوق على C لأن المترجم يمكنه القيام بتحسينات أكثر جرأة عندما يثبت ضمانات التضاد والعمر. الحمل الزائد المتبقي يكون في الغالب في الحالات المرضية، وليس في نوع كود النظام الذي يتعامل مع حزم الشبكة أو عمليات نظام الملفات أو تحليل البروتوكول.

العشر سنوات القادمة

الضغط الحكومي له تأثيرات قابلة للقياس. مبادرة "آمن بالتصميم" من CISA، التي أطلقت في عام 2023، جمعت تعهدات من أكثر من 200 بائع برمجيات كبير لإنشاء خرائط طريق لأمان الذاكرة — خطط ملموسة لترحيل قواعد كود محددة بعيدًا عن C و C++ وفق جدول زمني منشور. أظهرت تقارير التقدم السنوية الأولى من هؤلاء البائعين حركة متواضعة لكنها حقيقية: وحدات جديدة في Rust، واجهات برمجة تطبيقات غير آمنة قديمة، ترحيل مكونات التحليل عالية الخطورة.

الجدول الزمني الواقعي لتقليل ثغرات أمان الذاكرة بشكل ملحوظ عبر البنية التحتية الحيوية هو 15-20 عامًا. الكود الذي يُكتب اليوم بلغة Rust سيكون في الإنتاج لعقود؛ C القديم الذي لا يزال قيد التشغيل سيكون مصدر الثغرات الحرجة لفترة مماثلة. السؤال السياسي ليس ما إذا كان ينبغي إجراء هذا الانتقال — الأدلة ساحقة على أن C و C++ تخلقان مخاطر أمنية غير مقبولة على نطاق واسع — ولكن مدى عدوانية دفع سرعة الانتقال بالنظر إلى تكاليف الهندسة ومخاطر إدخال عيوب جديدة أثناء الترحيل.

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

مشاركة:
أمان الذاكرة أصبح الآن قضية أمن قومي — لماذا تريد الولايات المتحدة والاتحاد الأوروبي من المطورين التوقف عن كتابة لغة C | IRCNF - Intelligent Reliable Custom Next-gen Frameworks