التشفير الآمن
البرمجة الآمنة هي ممارسة تطوير برامج الحاسوب بطريقة تحمي من إدخال ثغرات أمنية عن طريق الخطأ . وتُعدّ العيوب والأخطاء البرمجية والثغرات المنطقية السبب الرئيسي للثغرات البرمجية الشائعة الاستغلال. [ 1 ] ومن خلال تحليل آلاف الثغرات المُبلّغ عنها، اكتشف خبراء الأمن أن معظم الثغرات تنبع من عدد قليل نسبيًا من أخطاء البرمجة الشائعة. ومن خلال تحديد ممارسات البرمجة غير الآمنة التي تؤدي إلى هذه الأخطاء، وتوعية المطورين بالبدائل الآمنة، تستطيع المؤسسات اتخاذ خطوات استباقية للمساعدة في تقليل الثغرات البرمجية أو القضاء عليها بشكل كبير قبل نشرها. [ 2 ]
اقترح بعض الباحثين أنه لمواجهة التهديدات المتعلقة بالأمن السيبراني بفعالية ، ينبغي تضمين إجراءات أمنية مناسبة في الأنظمة. فمع تصميم الأمن في البرمجيات، يُضمن الحماية من الهجمات الداخلية، ويُقلل من المخاطر التي تهدد أمن التطبيقات. [ 3 ] ويُعدّ تطبيق ممارسات البرمجة الآمنة جزءًا من نهج "الأمان بالتصميم" في هندسة الأمن .
منع تجاوز سعة المخزن المؤقت
تحدث ثغرة تجاوز سعة المخزن المؤقت ، وهي ثغرة أمنية شائعة في البرمجيات، عندما يحاول برنامج تخزين بيانات تتجاوز سعة المخزن المؤقت الثابتة. على سبيل المثال، إذا كان هناك 8 خانات لتخزين العناصر، فستحدث مشكلة عند محاولة تخزين 9 عناصر. في ذاكرة الحاسوب، قد تستبدل البيانات المتجاوزة البيانات الموجودة في الموقع التالي، مما قد يؤدي إلى ثغرة أمنية ( تجاوز سعة المكدس ) أو إنهاء البرنامج (خطأ تجزئة الذاكرة). [ 1 ]
مثال على برنامج C عرضة لتجاوز سعة المخزن المؤقت هو
#include <string.h># تعريف صغير 50voidennial_function ( char * large_user_input ) { char dst [ SMALL ] ; strcpy ( dst , large_user_input ); }إذا كان إدخال المستخدم أكبر من مخزن الوجهة، فسيحدث تجاوز في سعة المخزن المؤقت.
لإصلاح هذا البرنامج غير الآمن، استخدم strncpy لمنع حدوث تجاوز محتمل في المخزن المؤقت.
#include <string.h>#define BUF_SIZE 100void secure_function ( char * user_input ) { char dst [ BUF_SIZE ]; // نسخ ما يصل إلى BUF_SIZE بايت strncpy ( dst , user_input , BUF_SIZE ); // تعيين الحرف الأخير في المخزن المؤقت إلى NUL. dst [ BUF_SIZE - 1 ] = '\0' ; }هناك بديل آمن آخر وهو تخصيص الذاكرة ديناميكيًا على الكومة باستخدام malloc .
#include <stdlib.h> #include <string.h>char * secure_copy ( char * src ) { size_t len = strlen ( src ); char * dst = ( char * ) malloc ( len + 1 ); if ( dst ) { strncpy ( dst , src , len ); // إضافة حرف إنهاء السلسلة dst [ len ] = '\0' ; } return dst ; }في مقتطف الشفرة أعلاه، يحاول البرنامج نسخ محتويات srcإلى dst، مع التحقق أيضًا من القيمة المرجعة malloc()للتأكد من إمكانية تخصيص ذاكرة كافية لمخزن الوجهة.
منع هجمات سلسلة التنسيق
هجوم سلسلة التنسيق هو عندما يقوم مستخدم خبيث بإدخال بيانات محددة سيتم إدخالها لاحقًا كوسيط لدالة تقوم بالتنسيق، مثل دالة printf() . يتضمن الهجوم قيام المهاجم بالقراءة من أو الكتابة إلى مكدس الذاكرة .
تكتب دالة printf في لغة C المخرجات إلى stdout. إذا لم يتم تنسيق مُعامل دالة printf بشكل صحيح، فقد تُعرّض هذه العملية البرنامج لعدة ثغرات أمنية. فيما يلي برنامج مُعرّض لهجوم سلسلة التنسيق.
#include <stdio.h>void weakor_print ( char * malware_input ) { printf ( malware_input ); }قد تكون الوسيطة الخبيثة التي يتم تمريرها إلى البرنامج هي "%s%s%s%s%s%s"، مما قد يؤدي إلى تعطل البرنامج بسبب عمليات قراءة الذاكرة غير السليمة.
منع تجاوز سعة الأعداد الصحيحة
يحدث تجاوز سعة الأعداد الصحيحة عندما ينتج عن عملية حسابية عدد صحيح أكبر من أن يُمثّل ضمن المساحة المتاحة. البرنامج الذي لا يتحقق بشكل صحيح من تجاوز سعة الأعداد الصحيحة يُعرّض النظام لأخطاء برمجية وثغرات أمنية محتملة.
فيما يلي دالة مكتوبة بلغة C++ تحاول التأكد من أن مجموع x و y أقل من أو يساوي قيمة محددة MAX:
define MAX 5000دالة منطقية sum_is_valid_flawed ( عدد صحيح غير مُوقّع x ، عدد صحيح غير مُوقّع y ) { عدد صحيح غير مُوقّع sum = x + y ؛ إرجاع sum <= MAX ؛ }تكمن مشكلة الكود في أنه لا يتحقق من تجاوز سعة الأعداد الصحيحة في عملية الجمع. فإذا كان مجموع x و y أكبر من القيمة القصوى الممكنة لـ max unsigned int، فإن عملية الجمع ستحدث تجاوزًا للسعة، وقد ينتج عنها قيمة أقل من أو تساوي max، حتى وإن كان مجموع x و y أكبر من max.
فيما يلي دالة تتحقق من تجاوز السعة عن طريق التأكد من أن المجموع أكبر من أو يساوي كلاً من x و y. إذا تجاوز المجموع السعة، فسيكون المجموع أقل من x أو أقل من y.
define MAX 5000دالة منطقية sum_is_valid_secure ( عدد صحيح غير مُوقّع x ، عدد صحيح غير مُوقّع y ) { عدد صحيح غير مُوقّع sum = x + y ؛ إرجاع sum >= x && sum >= y && sum <= MAX ؛ }منع اجتياز المسار
يُعد اختراق المسار ثغرة أمنية يتم من خلالها تفسير المسارات المقدمة من مصدر غير موثوق به بطريقة تسمح بالوصول غير المصرح به إلى الملفات.
على سبيل المثال، لنفترض وجود برنامج نصي يجلب مقالًا عن طريق أخذ اسم الملف، ثم يقرأه البرنامج ويحلله . قد يستخدم هذا البرنامج النصي عنوان URL الافتراضي التالي لاسترداد مقال عن طعام الكلاب:
https://www.example.net/cgi-bin/article.sh?name=dogfood.htmlإذا لم يكن للبرنامج النصي أي فحص للمدخلات، وبدلاً من ذلك يعتمد على أن اسم الملف صالح دائمًا، فقد يقوم مستخدم خبيث بتزوير عنوان URL لاسترداد ملفات التكوين من خادم الويب:
https://www.example.net/cgi-bin/article.sh?name=../../../../../etc/passwdبحسب البرنامج النصي، قد يؤدي ذلك إلى كشف ملف /etc/passwd ، الذي يحتوي في الأنظمة الشبيهة بنظام يونكس (من بين أمور أخرى) على معرّفات المستخدمين ، وأسماء تسجيل الدخول الخاصة بهم ، ومسارات الدليل الرئيسي، وأصداف النظام . (راجع هجوم حقن SQL للحصول على مثال مشابه).
انظر أيضاً
ملحوظات
- 1 2 فيغا، جون؛ غاري ماكغرو (2001). بناء برمجيات آمنة: كيفية تجنب المشاكل الأمنية بالطريقة الصحيحة . ماديسون-ويسلي بروفيشنال. ص 528. ISBN 978-0201721522.
- ↑ تايلور، بلير؛ أزادجان، شيفا (22-09-2006). "دمج مبادئ البرمجة الآمنة وتحليل المخاطر في مناهج علوم الحاسوب ونظم المعلومات الجامعية" . وقائع المؤتمر السنوي الثالث حول تطوير مناهج أمن المعلومات . InfoSecCD '06. كينيسو، جورجيا: رابطة آلات الحوسبة. ص 24-29 . doi : 10.1145/1231047.1231053 . ISBN 978-1-59593-437-6. S2CID 2452783 .
- ↑ راسل إل جونز (ديسمبر 2004). "البرمجة الآمنة: دمج الأمن في دورة حياة تطوير البرمجيات" . أمن نظم المعلومات . بروكويست 229507883 .
مراجع
- تايلور، آرت؛ برايان بويج؛ راندي لايمان (2006). اختراق J2EE وجافا مكشوف . ماكجرو هيل بريميس. ص 426. ISBN 0-390-59975-1.
- أمن الحاسوب
