أمن المعلوماتاساسيات أمن المعلومات

ثغرات الذاكرة والتخزين

في هذا الموضوع سنتحدث عن ثغرات الذاكرة والتخزين memory / buffer vulnerability…

تعتبر ثغرات الذاكرة والتخزين من أخطر الثغرات الأمنية التي يمكن أن تواجه البرامج، حيث تتيح للمهاجمين الوصول إلى النظام والتحكم فيه بشكل غير مصرح به. تتمثل هذه الثغرات في استغلال الهاكرز للأخطاء التي تحدث في عملية تخزين البيانات في الذاكرة، حيث يقومون بإدخال بيانات غير صحيحة في بعض المناطق المحددة في الذاكرة، ما يؤدي إلى تعطل البرنامج أو تعريضه للخطر.

وفي هذا الموضوع سنذكر اشهر واخطر ثغرات الذاكرة والتخزين memory / buffer vulnerability وسنقوم بشرحها بالتفصيل…

ثغرات الذاكرة والتخزين memory buffer vulnerability

هناك العديد من الثغرات المعروفة في مجال الذاكرة والتخزين memory buffer vulnerability، ومن بينها:

ثغرة تسريب الذاكرة (Memory leak):

تسريب الذاكرة (Memory leak) هي ثغرة تحدث في البرامج عندما تقوم بتخصيص ذاكرة ديناميكية لتخزين البيانات ولكن لا تقوم بتحرير الذاكرة عندما لا تحتاج إليها بعد ذلك، مما يؤدي إلى تسريب الذاكرة واستنزاف موارد النظام.

عندما تقوم البرامج بتحديد مساحة في الذاكرة لتخزين البيانات، يتم تخصيص ذاكرة ديناميكية لهذا الغرض. وعندما تنتهي البرامج من استخدام هذه الذاكرة، يجب عليها إعادة تحرير هذه الذاكرة، وإطلاقها مرة أخرى للاستخدام في أي مكان آخر في البرنامج.

إذا لم تتم عملية تحرير الذاكرة بشكل صحيح، فإن الذاكرة التي تم تخصيصها ستبقى محجوزة، وستصبح غير متاحة للاستخدام الآخر. وبمرور الوقت، قد يؤدي هذا إلى تراكم الذاكرة المحجوزة، والتي لم يتم تحريرها، وبالتالي استنزاف موارد النظام، وتسريب الذاكرة.

لحل مشكلة تسريب الذاكرة، يجب على المبرمجين تحرير الذاكرة التي تم تخصيصها بعد الانتهاء من استخدامها، وإطلاقها مرة أخرى للاستخدام في أي مكان آخر في البرنامج. كما يجب عليهم تحديد عمر الذاكرة التي تم تخصيصها بشكل دقيق، وتحريرها عندما تصبح غير مطلوبة. يمكن استخدام بعض الأدوات المتاحة للكشف عن تسريب الذاكرة وتحليلها، مما يساعد على تحديد المشكلة وإصلاحها.

ثغرة تجاوز عدد صحيح (Integer overflow):

ثغرة تجاوز عدد صحيح (Integer overflow) هي ثغرة تحدث في البرامج عندما يتم تخصيص متغير صحيح (integer) بحجم محدد، ولكن يتم تجاوز هذا الحجم بإضافة قيمة أكبر من القيمة القصوى المسموح بها للمتغير، مما يؤدي إلى تشويه البيانات أو تعطيل البرنامج.

عند إجراء عملية حسابية على متغير صحيح، يتم تمثيل القيمة باستخدام عدد محدود من البتات، وبالتالي يتم تحديد حجم المتغير الذي يمكنه تخزين القيمة. وعندما يتم تجاوز هذا الحجم، يتم تشويه البيانات ويمكن أن يؤدي إلى تعطيل البرنامج.

مثال على ذلك هو متغير صحيح يتم تحديده بحجم 8 بت، ويمكنه تخزين الأرقام من 0 إلى 255. إذا قمنا بإضافة 1 إلى هذا المتغير عدة مرات حتى يصل إلى 255، فإن القيمة التالية ستكون 0، ولن يكون هذا الناتج صحيحاً. وإذا قمنا بإضافة قيمة أكبر من 255، فإن القيمة ستتجاوز الحجم الذي يمكن أن يتم تخزينه في المتغير، وسيؤدي ذلك إلى تشويه البيانات أو تعطيل البرنامج.

لحل مشكلة تجاوز عدد صحيح، يجب على المبرمجين تحديد حجم المتغير الذي يستخدمونه بدقة، والتأكد من أن القيم التي يتم تخزينها تتوافق مع الحجم الذي تم تحديده. كما يمكن استخدام تقنيات برمجية لتحديد النطاق الصحيح للقيمة العددية التي يتم تخزينها، والتحقق من صحتها قبل استخدامها في أي عملية حسابية. وبشكل عام، يجب على المبرمجين الحرص على التحقق من صحة البيانات التي يتم استخدامها في البرنامج، وتحديد الحدود الصحيحة للمتغيرات المستخدمة.

ثغرة تجاوز سعة المخزن المؤقت (Buffer overflow):

ثغرة تجاوز سعة المخزن المؤقت (Buffer overflow) هي ثغرة تحدث في البرامج عندما يتم كتابة بيانات بحجم أكبر من المساحة المحددة لتخزينها في المخزن المؤقت، مما يؤدي إلى تجاوز حدود المخزن المؤقت وتعريض البرنامج للخطر.

مخزن المؤقت (Buffer) هو مساحة في الذاكرة يتم استخدامها لتخزين البيانات المؤقتة، وغالبا ما يتم استخدامها في البرامج لتخزين بيانات الإدخال التي يتم قراءتها من الملفات أو المدخلات الأخرى قبل معالجتها. وعندما يتم كتابة بيانات بحجم أكبر من المساحة المحددة لتخزينها في المخزن المؤقت، فإن البيانات الإضافية ستتجاوز حدود المخزن المؤقت وستتم كتابتها في مناطق أخرى من الذاكرة، مما يؤدي إلى تعريض البرنامج للخطر.

عندما يتم استغلال هذه الثغرة، يمكن للمهاجمين تغيير سلوك البرنامج بإدخال بيانات ضارة في المخزن المؤقت، والتي يمكن أن تؤدي إلى تعطيل البرنامج أو تعريضه للخطر.

لحل مشكلة تجاوز سعة المخزن المؤقت، يجب على المبرمجين تحديد حجم المخزن المؤقت بدقة، والتأكد من أن البيانات المدخلة تتوافق مع الحجم المحدد. كما يجب عليهم استخدام دوال التحقق من الإدخالات (Input validation) للتحقق من صحة البيانات المدخلة، وتجنب استخدام دوال الإدخال (Input functions) المعرضة للثغرات، مثل دالة gets() في لغة البرمجة C. كما يمكن استخدام تقنيات الحماية، مثل الحدود الأمنة (Safe bounds checking)، للتحقق من أن البيانات لا تتجاوز حدود المخزن المؤقت.

ثغرة (Pointer dereference):

ثغرة (Pointer dereference) هي ثغرة تحدث في البرامج عندما يتم الإشارة (Dereference) إلى عنوان في الذاكرة الذي لم يتم تخصيصه بشكل صحيح، مما يؤدي إلى تعطيل البرنامج أو تشويه البيانات.

عند استخدام المؤشرات (Pointers) في البرامج، يتم استخدام عنوان في الذاكرة للإشارة إلى موقع في الذاكرة الذي يحتوي على قيمة معينة. وعند الإشارة إلى الموقع المخطئ في الذاكرة، يتم الوصول إلى قيمة غير صحيحة وبالتالي يتم تشويه البيانات أو تعطيل البرنامج.

مثال على ذلك هو عند استخدام مؤشر في البرنامج ولم يتم تخصيص الذاكرة اللازمة لتخزين القيمة التي يشير إليها المؤشر، وعند الإشارة إلى المؤشر يتم الوصول إلى موقع غير صحيح في الذاكرة. كما يمكن حدوث هذه الثغرة عند محاولة الوصول إلى مؤشر تم حذفه أو تحريره من الذاكرة.

لحل مشكلة (Pointer dereference)، يجب على المبرمجين التأكد من تخصيص الذاكرة اللازمة لتخزين القيمة التي يشير إليها المؤشر، والتأكد من صحة العنوان الذي يشير إليه المؤشر. كما يجب استخدام تقنيات الحماية، مثل تفعيل الحماية الشاملة (Full ASLR)، وحماية الذاكرة من الكتابة (W^X)، وتجنب استخدام دوال غير آمنة، مثل دالة strcpy() في لغة البرمجة C. كما يمكن استخدام أدوات التحليل الثابت (Static analysis) والتحليل الديناميكي (Dynamic analysis) للكشف عن هذه الثغرات في البرامج وإصلاحها.

ثغرة حقن مكتبة الارتباط الديناميكي (DLL injection):

ثغرة حقن مكتبة الارتباط الديناميكي (DLL injection) هي ثغرة تحدث في أنظمة التشغيل عندما يتم حقن مكتبة DLL (Dynamic Link Library) ضارة في عملية أخرى بشكل غير مصرح به، مما يتيح للمهاجمين تنفيذ برامج ضارة في سياق العملية المستهدفة.

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

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

لحل مشكلة (DLL injection) يجب على المبرمجين تصميم البرامج بطريقة تمنع حقن مكتبات DLL ضارة في العمليات الأخرى، وذلك عن طريق تحديد العمليات المسموح بها للتحميل الديناميكي للمكتبات، أو عن طريق تحديد القيود على الصلاحيات المسموح بها للمكتبات المحملة. كما يمكن استخدام تقنيات الحماية، مثل تفعيل حماية الذاكرة من الكتابة والتنفيذ (W^X)، وتطبيق الحماية الشاملة (Full ASLR)، واستخدام برامج مكافحة الفيروسات والحماية من البرامج الضارة. كما يمكن استخدام أدوات الكشف عن الثغرات (Vulnerability scanners) للكشف عن هذه الثغرات في البرامج.

هذا والسلام عليكم ورحمة الله وبركاته..

( لا تنسا مشاركة الموضوع ليستفيد غيرك )

مقالات ذات صلة

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

شاهد أيضاً
إغلاق
زر الذهاب إلى الأعلى