قائم على اللغة
في علوم الحاسوب ، يُعدّ أمن اللغة ( LBS ) مجموعة من التقنيات التي تُستخدم لتعزيز أمان التطبيقات على مستوى عالٍ من خلال الاستفادة من خصائص لغات البرمجة. ويُعتبر أمن اللغة وسيلةً لتعزيز أمان الحاسوب على مستوى التطبيق، مما يُتيح إمكانية منع الثغرات الأمنية التي تعجز أنظمة التشغيل التقليدية عن معالجتها.
تُحدد تطبيقات البرمجيات وتُنفذ عادةً بلغات برمجة معينة ، وللحماية من الهجمات والثغرات والأخطاء التي قد يكون كود المصدر الخاص بالتطبيق عرضة لها، ثمة حاجة إلى أمان على مستوى التطبيق؛ أي أمان يُقيّم سلوك التطبيقات بالنسبة للغة البرمجة. يُعرف هذا المجال عمومًا بالأمان القائم على اللغة.
تحفيز
يُستخدم نظام البرمجيات الضخم، مثل نظام SCADA ، على نطاق واسع في جميع أنحاء العالم [ 1 ] ، وتُشكّل أنظمة الحاسوب جوهر العديد من البنى التحتية. يعتمد المجتمع بشكل كبير على بنى تحتية كالمياه والطاقة والاتصالات والنقل، والتي بدورها تعتمد جميعها على أنظمة حاسوب تعمل بكفاءة تامة. وهناك العديد من الأمثلة المعروفة على تعطل الأنظمة الحيوية بسبب أخطاء برمجية، كما حدث عندما تسبب نقص ذاكرة الحاسوب في تعطل أجهزة الحاسوب في مطار لوس أنجلوس الدولي (LAX) وتأخير مئات الرحلات الجوية (30 أبريل 2014). [ 2 ] [ 3 ]
تقليديًا، تُطبَّق آليات التحكم في السلوك الصحيح للبرمجيات على مستوى نظام التشغيل. ويتولى نظام التشغيل معالجة العديد من الثغرات الأمنية المحتملة، مثل انتهاكات الوصول إلى الذاكرة، وانتهاكات تجاوز سعة المكدس، وانتهاكات التحكم في الوصول، وغيرها الكثير. يُعدّ هذا جزءًا أساسيًا من أمن أنظمة الحاسوب، ولكن من خلال تأمين سلوك البرمجيات على مستوى أكثر تحديدًا، يُمكن تحقيق مستوى أمان أقوى. ونظرًا لفقدان الكثير من خصائص البرمجيات وسلوكها أثناء عملية الترجمة، يصبح اكتشاف الثغرات في شفرة الآلة أكثر صعوبة. ومن خلال تقييم الشفرة المصدرية قبل الترجمة، يُمكن أيضًا مراعاة نظرية لغة البرمجة وتطبيقها، ما يُتيح الكشف عن المزيد من الثغرات.
"فلماذا يستمر المطورون في ارتكاب نفس الأخطاء؟ بدلاً من الاعتماد على ذاكرة المبرمجين، يجب أن نسعى جاهدين لإنتاج أدوات تُقنن ما هو معروف عن الثغرات الأمنية الشائعة وتدمجه مباشرة في عملية التطوير."
— د. إيفانز ود. لاروشيل، 2002
هدف الأمن القائم على اللغة
باستخدام خدمات تحديد المواقع، يمكن تعزيز أمان البرمجيات في عدة جوانب، وذلك بحسب التقنيات المستخدمة. إذ يُمكن اكتشاف أخطاء البرمجة الشائعة، مثل السماح بتجاوز سعة المخزن المؤقت وتدفق المعلومات غير المصرح به، ومنعها في البرمجيات التي يستخدمها المستهلك. ومن المستحسن أيضًا تزويد المستهلك بدليل على خصائص أمان البرمجيات، مما يُمكّنه من الوثوق بها دون الحاجة إلى استلام شفرة المصدر وفحصها بنفسه بحثًا عن الأخطاء.
يقوم المترجم، الذي يستقبل شفرة المصدر كمدخل، بإجراء عدة عمليات خاصة باللغة على الشفرة لترجمتها إلى شفرة قابلة للقراءة آليًا. وتشمل هذه العمليات الشائعة: التحليل المعجمي ، والمعالجة المسبقة ، والتحليل النحوي ، والتحليل الدلالي ، وتوليد الشفرة ، وتحسينها . ومن خلال تحليل شفرة المصدر، وبالاستناد إلى نظرية اللغة وتطبيقها، يسعى المترجم إلى ترجمة الشفرة عالية المستوى إلى شفرة منخفضة المستوى بدقة، مع الحفاظ على سلوك البرنامج.

أثناء تجميع البرامج المكتوبة بلغة آمنة من حيث أنواع البيانات ، مثل جافا ، يجب أن يجتاز كود المصدر فحص أنواع البيانات بنجاح قبل التجميع. إذا فشل فحص أنواع البيانات، فلن يتم التجميع، وسيتعين تعديل كود المصدر. هذا يعني أنه في حال استخدام مُجمِّع صحيح، فإن أي كود مُجمَّع من برنامج مصدر تم فحص أنواع بياناته بنجاح يجب أن يكون خاليًا من أخطاء التعيين غير الصالحة. تُعد هذه المعلومة ذات قيمة لمستخدم الكود، إذ تُوفر درجة من الضمان بأن البرنامج لن يتعطل بسبب خطأ مُحدد.
يهدف نظام إدارة الموقع (LBS) إلى ضمان وجود خصائص معينة في شفرة المصدر تتوافق مع سياسة أمان البرنامج. ويمكن استخدام المعلومات التي يتم جمعها أثناء عملية الترجمة لإنشاء شهادة تُقدم للمستخدم كدليل على سلامة البرنامج. ويجب أن يُشير هذا الدليل إلى أن المستخدم يثق في المُترجم الذي يستخدمه المورّد، وأن الشهادة، أي المعلومات المتعلقة بشفرة المصدر، قابلة للتحقق.
يوضح الشكل كيفية إنشاء شهادة التحقق من صحة التعليمات البرمجية منخفضة المستوى باستخدام مُصرِّف مُصدِّق. يحصل مُورِّد البرمجيات على ميزة عدم الحاجة إلى الكشف عن الشفرة المصدرية، بينما يقتصر دور المُستخدِم على التحقق من الشهادة، وهي مهمة سهلة مقارنةً بتقييم الشفرة المصدرية نفسها وتجميعها. لا يتطلب التحقق من الشهادة سوى قاعدة بيانات محدودة من التعليمات البرمجية الموثوقة تحتوي على المُصرِّف والمُدقِّق.
التقنيات
تحليل البرامج
تتمثل التطبيقات الرئيسية لتحليل البرامج في تحسينها (وقت التشغيل، ومتطلبات المساحة، واستهلاك الطاقة، إلخ) والتحقق من صحتها (الأخطاء، والثغرات الأمنية، إلخ). ويمكن تطبيق تحليل البرامج على الترجمة ( التحليل الثابت )، أو وقت التشغيل ( التحليل الديناميكي )، أو كليهما. وفي مجال أمن اللغات، يوفر تحليل البرامج العديد من الميزات المفيدة، مثل: التحقق من الأنواع (الثابت والديناميكي)، والمراقبة ، والتحقق من التلوث ، وتحليل تدفق التحكم .
تحليل تدفق المعلومات
يمكن وصف تحليل تدفق المعلومات بأنه مجموعة من الأدوات المستخدمة لتحليل التحكم في تدفق المعلومات في برنامج ما، وذلك للحفاظ على السرية والنزاهة حيث تقصر آليات التحكم في الوصول العادية .
"من خلال فصل الحق في الوصول إلى المعلومات عن الحق في نشرها، يتجاوز نموذج التدفق نموذج مصفوفة الوصول في قدرته على تحديد تدفق المعلومات الآمن. يحتاج النظام العملي إلى كل من التحكم في الوصول والتحكم في التدفق لتلبية جميع متطلبات الأمان."
— د. دينينغ، 1976
يفرض نظام التحكم في الوصول قيودًا على الوصول إلى المعلومات، لكنه لا يهتم بما يحدث بعد ذلك. على سبيل المثال: يوجد في النظام مستخدمان، أليس وبوب. تمتلك أليس ملفًا باسم secret.txt ، لا يُسمح إلا لها بقراءته وتعديله، وهي تفضل الاحتفاظ بهذه المعلومات لنفسها. يوجد في النظام أيضًا ملف باسم public.txt ، وهو متاح لجميع المستخدمين في النظام للقراءة والتعديل. لنفترض الآن أن أليس نزّلت برنامجًا خبيثًا عن طريق الخطأ. يستطيع هذا البرنامج الوصول إلى النظام باسم أليس، متجاوزًا بذلك آلية التحكم في الوصول إلى ملف secret.txt . يقوم البرنامج الخبيث بعد ذلك بنسخ محتوى ملف secret.txt ووضعه في ملف public.txt ، مما يسمح لبوب وجميع المستخدمين الآخرين بقراءته. يُعد هذا انتهاكًا لسياسة السرية المعتمدة في النظام.
عدم التداخل
عدم التداخل خاصيةٌ للبرامج تمنع تسريب أو كشف معلومات المتغيرات ذات التصنيف الأمني الأعلى ، اعتمادًا على مدخلات المتغيرات ذات التصنيف الأمني الأدنى . يجب أن يُنتج البرنامج الذي يُحقق عدم التداخل نفس المخرجات عند استخدام نفس المدخلات المقابلة للمتغيرات الأدنى . يجب أن ينطبق هذا على جميع القيم الممكنة للمدخلات. وهذا يعني أنه حتى لو اختلفت قيم المتغيرات العليا في البرنامج من تنفيذ لآخر، فلا ينبغي أن يظهر هذا الاختلاف في قيم المتغيرات الأدنى .
قد يحاول المهاجم تشغيل برنامج لا يلتزم بمبدأ عدم التدخل بشكل متكرر ومنهجي لمحاولة فهم سلوكه. وقد تؤدي عدة تكرارات إلى الكشف عن متغيرات أعلى ، مما يسمح للمهاجم بمعرفة معلومات حساسة حول حالة النظام، على سبيل المثال.
يمكن تقييم ما إذا كان البرنامج يفي بمبدأ عدم التدخل أم لا أثناء عملية التجميع بافتراض وجود أنظمة من نوع الأمان .
نظام نوع الأمان
نظام أنواع الأمان هو نوع من أنظمة الأنواع التي يمكن لمطوري البرامج استخدامها للتحقق من خصائص الأمان في برامجهم. في لغة برمجة تعتمد على أنواع الأمان، ترتبط أنواع المتغيرات والتعبيرات بسياسة الأمان الخاصة بالتطبيق، ويمكن للمبرمجين تحديد سياسة أمان التطبيق من خلال تعريفات الأنواع. يمكن استخدام الأنواع للاستدلال على أنواع مختلفة من سياسات الأمان، بما في ذلك سياسات التخويل (مثل التحكم في الوصول أو الصلاحيات) وأمان تدفق المعلومات. يمكن ربط أنظمة أنواع الأمان رسميًا بسياسة الأمان الأساسية، ويكون نظام أنواع الأمان سليمًا إذا كانت جميع البرامج التي تخضع لفحص الأنواع تُلبي السياسة من الناحية الدلالية. على سبيل المثال، قد يفرض نظام أنواع الأمان لتدفق المعلومات مبدأ عدم التدخل، مما يعني أن فحص الأنواع يكشف ما إذا كان هناك أي انتهاك للسرية أو النزاهة في البرنامج.
تأمين التعليمات البرمجية منخفضة المستوى
تُعرف الثغرات الأمنية في الشيفرة البرمجية منخفضة المستوى بأنها أخطاء أو عيوب تُؤدي بالبرنامج إلى حالة يصبح فيها سلوكه غير مُحدد بلغة البرمجة المصدرية. يعتمد سلوك البرنامج منخفض المستوى على تفاصيل المُترجم، ونظام التشغيل، أو وقت التشغيل. وهذا يُتيح للمهاجم دفع البرنامج نحو حالة غير مُحددة، واستغلال سلوك النظام.
تسمح الثغرات الشائعة في التعليمات البرمجية منخفضة المستوى غير الآمنة للمهاجم بإجراء عمليات قراءة أو كتابة غير مصرح بها لعناوين الذاكرة. ويمكن أن تكون عناوين الذاكرة عشوائية أو مختارة من قبل المهاجم.
استخدام لغات آمنة
يتمثل أحد أساليب تحقيق أمان الشيفرة البرمجية منخفضة المستوى في استخدام لغات برمجة عالية المستوى آمنة. تُعتبر اللغة الآمنة تلك التي يُحددها دليل المبرمجين الخاص بها تعريفًا كاملًا. [ 4 ] أي خطأ قد يؤدي إلى سلوك يعتمد على التنفيذ في لغة آمنة سيتم اكتشافه إما أثناء الترجمة أو سيؤدي إلى سلوك خطأ مُحدد جيدًا أثناء التشغيل. في لغة جافا ، عند محاولة الوصول إلى عنصر في مصفوفة خارج نطاقها، سيتم طرح استثناء. من أمثلة اللغات الآمنة الأخرى: سي شارب ، وهاسكل ، وسكالا .
التنفيذ الدفاعي للغات غير الآمنة
أثناء ترجمة لغة برمجة غير آمنة، تُضاف فحوصات وقت التشغيل إلى الشيفرة منخفضة المستوى للكشف عن السلوك غير المُعرَّف على مستوى الشيفرة المصدرية. ومن الأمثلة على ذلك استخدام "الكناري" (Canaries) ، الذي يُمكنه إنهاء البرنامج عند اكتشاف انتهاكات للحدود. ومن سلبيات استخدام فحوصات وقت التشغيل، مثل فحص الحدود، أنها تُضيف عبئًا كبيرًا على الأداء.
يمكن اعتبار حماية الذاكرة ، مثل استخدام مكدس و/أو كومة غير قابلة للتنفيذ، بمثابة فحوصات إضافية أثناء التشغيل. وتستخدم العديد من أنظمة التشغيل الحديثة هذا الأسلوب.
تنفيذ الوحدات بشكل منفصل
تتلخص الفكرة العامة في تحديد الأجزاء الحساسة من بيانات التطبيق من خلال تحليل شفرة المصدر. بعد ذلك، تُفصل البيانات المختلفة وتُوضع في وحدات منفصلة. بافتراض أن لكل وحدة تحكمًا كاملًا في المعلومات الحساسة التي تحتويها، يُمكن تحديد متى وكيف تُنقل هذه المعلومات من الوحدة. على سبيل المثال، وحدة تشفير تمنع خروج المفاتيح منها غير مشفرة.
اعتماد التجميع
تُعنى عملية توثيق عملية الترجمة البرمجية بإصدار شهادة أثناء ترجمة الشيفرة المصدرية، باستخدام المعلومات المستمدة من دلالات لغة البرمجة عالية المستوى. يجب إرفاق هذه الشهادة مع الشيفرة المُترجمة لتوفير دليل للمستخدم على أن الشيفرة المصدرية قد جُمعت وفقًا لمجموعة محددة من القواعد. يمكن إصدار الشهادة بطرق مختلفة، مثل استخدام شيفرة حاملة للإثبات (PCC) أو لغة التجميع المكتوبة (TAL).
رمز إثبات الحمل
يمكن تلخيص الجوانب الرئيسية لـ PCC في الخطوات التالية: [ 5 ]
- يقدم المورد برنامجًا قابلاً للتنفيذ مع تعليقات توضيحية متنوعة تم إنتاجها بواسطة مترجم معتمد .
- يقدم المستهلك شرط التحقق، بناءً على سياسة أمنية . ويتم إرسال هذا الشرط إلى المورد.
- يقوم المورد بتشغيل شرط التحقق في برنامج إثبات النظرية لإنتاج دليل للمستهلك على أن البرنامج في الواقع يفي بسياسة الأمان.
- ثم يقوم المستهلك بتشغيل الدليل في مدقق الأدلة للتحقق من صحة الدليل.
ومن الأمثلة على المترجم المعتمد مترجم Touchstone ، الذي يوفر برهانًا رسميًا من نوع PCC لسلامة النوع والذاكرة للبرامج المنفذة بلغة Java.
لغة التجميع المكتوبة
تُطبَّق تقنية TAL على لغات البرمجة التي تستخدم نظام أنواع . بعد الترجمة، يحمل الكود البرمجي تعليقًا نوعيًا يمكن التحقق منه باستخدام مدقق أنواع عادي. يُشابه هذا التعليق، من نواحٍ عديدة، التعليقات التي توفرها تقنية PCC، مع بعض القيود. ومع ذلك، تستطيع TAL التعامل مع أي سياسة أمان قد تُعبِّر عنها قيود نظام الأنواع، والتي قد تشمل أمان الذاكرة وتدفق التحكم، وغيرها.
الندوات
- ندوة داغشتول 03411 ، الأمن القائم على اللغة، 5-10 أكتوبر 2003.
مراجع
- ↑ "هل يمكننا التعلم من حوادث أمن أنظمة التحكم الإشرافي وتحصيل البيانات (SCADA)؟" (ملف PDF) . www.oas.org . enisa.
- ↑ "تعطل نظام مراقبة الحركة الجوية" . www.computerworld.com . تاريخ الاطلاع: 12 مايو 2014 .
- ↑ "خلل برمجي ساهم في انقطاع الخدمة" . www.securityfocus.com . تاريخ الاطلاع: 11 فبراير 2004 .
- ↑ بيرس، بنجامين سي. (2002). الأنواع ولغات البرمجة . مطبعة معهد ماساتشوستس للتكنولوجيا. ISBN 9780262162098.
- ↑ كوزين، ديكستر (1999). "الأمن القائم على اللغة" (ملف PDF) . جامعة كورنيل.
{{cite journal}}يتطلب الاستشهاد بالمجلة ( مساعدة )|journal=
الكتب
- ج. بارث، ب. جريجوار، ت. رزق، تجميع الشهادات ، 2008
- برايان تشيس وغاري ماكجرو، التحليل الثابت للأمن ، 2004.
للمزيد من القراءة
- ديكستر كوزين ، الأمن القائم على اللغة ، جامعة كورنيل، 1999
- بيتر أغتن وآخرون، التطورات الأخيرة في أمن البرمجيات منخفضة المستوى ، جامعة لوفين
- أندريه سابيلفيلد وأندرو سي. مايرز، أمن تدفق المعلومات القائم على اللغة
- فريد ب. شنايدر وآخرون، نهج قائم على اللغة للأمن ، جامعة كارنيجي ميلون، 2000
- ماركو بيستويا وآخرون، دراسة استقصائية لأساليب التحليل الثابت لتحديد الثغرات الأمنية في أنظمة البرمجيات ، مجلة أنظمة IBM ، المجلد 46، العدد 2، الصفحات 265-288، 2007
- قائمة بالباحثين الذين ساهموا في مجالات أمن اللغات وأمن التطبيقات، مرتبة حسب عدد الاستشهادات على جوجل سكولار.
- هندسة الأمن السيبراني
