هل هذا البرنامج آمن؟ سؤال يخطر ببالنا جميعاً. في الواقع، لا توجد إجابة سهلة على هذا السؤال. فالبرنامج الذي يحتوي على بعض وظائف الأمن لا يعني أنه آمن بالضرورة. ومع ذلك، يجب أن يتضمن البرنامج الذي يتصل بالشبكة، أو يعمل في بيئة مفتوحة للخصوم السيبرانيين، حداً أدنى من الوظائف الأمنية لحماية الموارد القيمة. كما أن أمن البرمجيات وبرامج الأمن مختلفان. فالأول يعني بناء برمجيات آمنة، أي إجراء جميع أنشطة دورة الحياة مع أخذ عوامل الأمن في الاعتبار. فالأمن مضمَّن في البرمجيات وليس مجرد فكرة لاحقة. أما برامج الأمن فتشير إلى مكونات البرمجيات التي تنفذ وظائف الأمن مثل التشفير وفك التشفير والمصادقة والتحكم في الوصول.
أمن البرمجيات – دورة حياة
عادة ما يكون أمن البرمجيات مدمجاً في أنشطة دورة حياة البرامج كما يلي:
- النمذجة والتحليل للأمن: يتم إجراء النمذجة والتحليل في المرحلة المبكرة من مشروع البرمجيات. ينشئ فريق التطوير نماذج تظهر الموارد التي تحتاج إلى الحماية والكيانات التي يمكنها الوصول إلى الموارد. تساعد مثل هذه النماذج فريق التطوير على تحديد وصياغة وإثبات متطلبات الأمن.
- التصميم الأمن: يطبق هذا التصميم أنماط الأمن لضمان تلبية المتطلبات الأمنية. كما يأخذ بعين الاعتبار التغيير المتوقع مستقبلاً لمتطلبات الأمن.
- الترميز (Code) الآمن : يطبق الترميز الآمن مبادئ الأمن وأنماط الأمن لإنتاج كود آمن أثناء مرحلة التنفيذ.
- اختبار الأمن: يهدف اختبار الأمن إلى اكتشاف الثغرات الأمنية في البرنامج. يضمن الاختبار الوظيفي التقليدي أن البرنامج صحيح فيما يتعلق بالمتطلبات الوظيفية. تضمن الاختبارات الأمنية أن البرنامج لا يحتوي على ثغرات يمكن للمهاجمين استكشافها لاختراق النظام. وهو يطبق تقنيات اختبار الأمن الثابتة والديناميكية لاكتشاف مثل هذه الثغرات.
متطلبات أمن البرامجيات
يجب أن يأخذ تصميم الأنظمة الآمنة في الاعتبار المتطلبات الأمنية، التي تحدد قدرات نظام البرمجيات على إحباط محاولات الهجوم والتعافي من الهجمات الناجحة. ونستعرض فيما يلي بعض المفاهيم الأمنية المتعلقة بالبرمجيات.
- التعريف: آليات تحديد النظام للجهات الفاعلة قبل التفاعل معها.
المصادقة: المدى الذي يتحقق به النظام من هوية الجهات الفاعلة قبل التفاعل معها.
الترخيص: امتيازات الوصول والاستخدام للجهات الفاعلة المعتمدة.
الحصانة: كيف يحمي به النظام نفسه من الإصابات بالبرامج الضارة مثل فيروسات الكمبيوتر والديدان وأحصنة طروادة؟ - النزاهة: كيف يضمن به النظام عدم إتلاف بياناته واتصالاته عمداً من خلال الإنشاء أو التعديل أو الحذف غير المصرح به.؟
- اكتشاف التسلل:قدرة النظام على اكتشاف وتسجيل محاولات الوصول أو التعديل من قبل الأفراد أو البرامج غير المصرح لها.
- عدم الإنكار: قدرة النظام على منع أي طرف تفاعل معه من رفض كل أو جزء من التفاعل.
- الخصوصية: مدى قدرة النظام على حماية حقوق الخصوصية لأصحاب المصلحة.
- السرية: قدرة النظام على إخفاء البيانات والاتصالات لمنع الإطلاع على محتوياتها من جهات غير مصرح لها.
- التدقيق : منح مسؤولي الأمن والجهات الرقابية القدرة على تدقيق حالة واستخدام وظائف الأمان الخاصة به.
- البقاء: مدى قدرة النظام على البقاء بعد الفقدان المتعمد أو تدمير أحد المكونات.
- المرونة: القدرة على التعافي بعد هجوم ناجح.
- صيانة النظام: كيف يمنع النظام التعديلات المعتمدة، مثل إصلاح العيوب والتحسينات والتحديثات، من إحباط آليات الأمان الخاصة به عن طريق الخطأ.
مبادئ تصميم البرمجيات الآمنة
تقود ممارسات تصميم البرمجيات مجموعة من المبادئ:
- تحديد وتقوية أضعف أجزاء النظام حتى يتم تحقيق مستوى مقبول من المخاطر.
- حماية النظام بطبقات من الاستراتيجيات الدفاعية المتنوعة بحيث يكون هناك مقياس أمني لمنع الاختراق الكامل في حالة عدم كفاية الاستراتيجيات الأخرى.
- التأكد من أن النظام في حالة آمنة حتى لو فشل وظيفياً.
- استخدام أقل مستوى ممكن من الصلاحيات كافي لإنجاز العمل.
- تصميم النظام ليتضمن مكونات مستقلة نسبياً بحيث إذا فشلت بعض هذه المكونات، فسيستمر النظام في العمل، على الرغم من تقليل وظائفه.
- البساطة. انسجاماً مع فكرة باعتبار أن البرامج شديدة التعقيد قد تكون أكثر عرضة للفشل وأكثر صعوبة في اكتشاف نقاط الضعف الأمنية خلال المراجعة والتفتيش والاختبار.
- تعزيز الخصوصية للمستخدمين والأنظمة والشيفرة المصدرية لأن المعلومات ذات الصلة بهذه الكيانات قيمة للخصوم.
- ضرورة إخفاء المعلومات السرية بطريقة محكمة.
- لا تجعل النظام يمنح الثقة افتراضياً. لا تثق بأي شيء. راجع واختبر الأمان حتى يتم تأسيس الدرجة المطلوبة من الثقة حقاً.
- استخدم موارد معلوماتية تم اختبارها واستخدامها من الآخرين وتم فحصها ولها وثائق يمكن مراجعتها في مجتمعات المبرمجين.الاستخدام المتكرر لمثل هذه الموارد دون فشل يعزز الثقة.
أفضل الممارسات في أمن البرمجيات:
- مراجعة التعليمات البرمجية بغرض العثور على مشاكل التنفيذ. وتشمل هذه الإغفال، والإهمال، وسوء الفهم، والافتراضات “الساذجة”، أي الثقة كثيراً بدلاً من الشك.
- تحليل المخاطر خلال مراحل المتطلبات والتصميم المعماري والاختبار والتكامل، بحيث يمكن تحديد عيوب التصميم والحماية وإدارة الموارد.
- اختبار الاختراق أثناء مرحلتي النشر والتشغيل ، يهدف إلى اكتشاف عيوب التصميم المعماري في بيئة العمل الفعلي عبر التركيز على اكتشاف مشاكل الأمان المتعلقة بالتكوين والعوامل المحيطة.
- الأمن القائم على المخاطر، لضمان أن وظائف الأمان، مثل المصادقة والترخيص، صحيحة وكافية، وأن اختبارات الأمان المستمدة من أنماط الهجوم ونتائج تحليل المخاطر تحقق التغطية المطلوبة.
- تحديد حالات سوء الاستخدام أثناء طوال دورة حياة البرنامج تفيد في تحدد سيناريوهات الهجوم كما تساعد المطور على اكتساب نظرة أدق لمشاكل الأمن المحتملة.
- تهدف عملية الأمان التي يتم إجراؤها أثناء مرحلة تشغيل النظام إلى إعداد ومراقبة وفهم سلوك النظام الذي يؤدي إلى هجمات ناجحة. يوفر هذا الفهم معرفة قيمة لتعزيز أمان نظام البرمجيات.
كلمة أخيرة
كما رأينا فيما سبق، يشير أمن البرمجيات إلى الدرجة التي تحمي بها تلك البرمجيات المعلومات وموارد النظام، وتوفر الوصول فقط للمستخدمين المصرح لهم وفق الحاجة. ويشمل ذلك ممارسات مثل نمذجة التهديدات، والترميز الآمن، واختبار الأمن، وإدارة الثغرات الأمنية المطبقة طوال دورة حياة تطوير البرمجيات.