هذا نوع محدد جدًا من الاستغلال الذي ابتليت به جميع أنواع البرامج.

Use-After-Free (UAF) هو ثغرة أمنية بدائية لتلف الذاكرة والتي لا تزال تشكل تهديدًا كبيرًا لجميع أنواع البرامج من أنظمة التشغيل إلى برامج التطبيقات. يحدث هذا الخلل الأمني ​​الخطير عندما يحاول أحد مكونات التطبيق الوصول إلى البيانات الموجودة في عنوان ذاكرة تم تحريره بالفعل ، ومن هنا جاء الاسم - use-after-free.

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

ما هي ثغرة الاستخدام بعد الاستخدام الخالي (UAF)؟

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

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

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

instagram viewer
كيف تعمل المؤشرات في البرمجة.

Use-After-Free (UAF) كما يوحي الاسم ، هو نوع من الثغرات الأمنية البدائية لتلف الذاكرة التي تحدث عندما يكون الكائن موجودًا بالفعل يتم الوصول إلى إلغاء تخصيصه من الذاكرة مرة أخرى مما يؤدي إلى حدوث أعطال أو عواقب غير مقصودة مثل تسرب الذاكرة أو تصعيد الامتياز (EOP) أو رمز عشوائي تنفيذ. دعونا نتعلم كيف تحدث هذه الحالة في المقام الأول وكيف يتم استغلالها.

كيف يتم استغلال الاستخدام بعد الحر (UAF)؟

Use-After-Free (UAF) ، كما يلمح الاسم ، هو ثغرة أمنية بدائية لتلف الذاكرة تحدث عندما يستمر أحد البرامج في الوصول إلى مواقع الذاكرة التي حررها. دعنا نلقي نظرة على مثال كود:

#يشمل <stdio.h>
#يشمل <stdlib.h>

intرئيسي(){
int * MUO = malloc (sizeof (int));
* MUO = 69420 ؛
printf("القيمة:٪ d \ n"، * MUO) ؛
مجاني (MUO) ؛
printf("القيمة ؟:٪ d \ n"، * MUO) ؛
يعود0;
}

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

كيفية التخفيف من الاستخدام بعد الاستخدام؟

يحدث UAF بسبب أخطاء في برمجة التطبيق. هناك بعض الاحتياطات التي يمكنك اتخاذها لتجنب الثغرات الأمنية في برنامجك.

فيما يلي بعض أفضل الممارسات التي يمكنك اعتمادها لتقليل نقاط ضعف تلف الذاكرة في برنامجك:

  • استخدام لغات برمجة آمنة للذاكرة مثل Rust مع آليات مدمجة لمنع نقاط الضعف البدائية في تلف الذاكرة مثل UAF و Buffer Overflows وما إلى ذلك. إذا كنت تستخدم لغات برمجة مثل C / C ++ ، فمن المرجح أن تقوم بإدخال أخطاء في الذاكرة في التعليمات البرمجية الخاصة بك. للسبب نفسه ، حتى أنظمة التشغيل مثل Windows و Linux تنتقل ببطء إلى Rust. يجب أن تفكر أيضًا التعرف على الصدأ إذا قمت بإنشاء برامج منخفضة المستوى.
  • إلى جانب استخدام لغة آمنة للذاكرة ، يوصى باتباع أفضل الممارسات مثل تعيين مؤشر إلى قيمة NULL بعد تحريرها لتجنب أي مقدمة للثغرة الأمنية Use-After-Free.
  • يمكنك أيضًا تنفيذ تقنيات مثل One Time Allocation (OTA) التي تمنع المهاجمين من الوصول إلى الذاكرة المحررة كائنات وسياسة دورة حياة الكائن الصارمة ، التي تساعد في تتبع كل كائن ذاكرة تم تخصيصه و غير مخصص. ضع في اعتبارك أن هذه التطبيقات قد تزيد من الذاكرة والأداء.

أمثلة من العالم الحقيقي على قابلية الاستخدام بعد الاستخدام (UAF) للثغرات الأمنية

تم اكتشاف ثغرة Use-After-Free (UAF) واستغلالها في سيناريوهات مختلفة في العالم الحقيقي من متصفحات الويب إلى Android kernel إلى التطبيقات اليومية. هذا يدل على الحاجة إلى تدابير أمنية استباقية. تتضمن بعض الأمثلة الواقعية على UAF ما يلي:

  • متصفحات الإنترنت: تم استغلال ثغرات UAF في متصفحات الويب لتنفيذ تعليمات برمجية عشوائية وتعريض خصوصية المستخدم للخطر وتنفيذ هجمات تنفيذ التعليمات البرمجية عن بُعد. ومن الأمثلة الحديثة على ذلك CVE-2021-38008 ، الذي استغل ثغرة UAF في Google Chrome ، مما سمح للجهات الفاعلة في التهديد بتنفيذ تعليمات برمجية عشوائية عن بُعد على الجهاز الضحية.
  • أنظمة التشغيل: سمحت ثغرات UAF الموجودة في نواة Windows / Linux / Android للمهاجمين بالحصول على امتيازات عالية ، وتجاوز آليات الأمان ، واكتساب الثبات. هناك عدد كبير من ثغرات UAF التي تم العثور عليها ولا تزال موجودة في نواة نظام التشغيل حتى هذا التاريخ. في وقت كتابة هذه السطور ، تم إصدار CVE-2023-3269 ، ثغرة أخرى في UAF في نواة Linux تؤدي إلى تصعيد الامتياز علنًا. CVE-2022-23270 هو مثال على ثغرة أمنية في UAF في نواة Windows.
  • تطبيقات البرمجيات: تم استغلال ثغرات UAF في تطبيقات البرمجيات للتلاعب بالبرنامج يؤدي إلى الكشف عن المعلومات ، وتنفيذ التعليمات البرمجية التعسفي ، وتعطل البرنامج ، وفي أسوأ الأحوال ، الامتياز التصعيد. كانت تطبيقات البرامج المتعددة ولا تزال عرضة لهجمات UAF. هذه البرامج هي في الغالب برامج C / C ++ تم تطويرها باستخدام أساليب إدارة ذاكرة غير فعالة وغير آمنة.

لمعرفة المزيد حول الثغرات الأمنية للاستخدام بعد الحر في تطبيقات العالم الحقيقي ، يمكنك التحقق من الرسمية MITER CVE صفحة القائمة وفرزها حسب استخدام الكلمة الأساسية بعد الاستخدام المجاني.

يساعد التخصيص الفعال للذاكرة في تأمين البرامج

يقطع التخصيص الأمثل والمدروس للذاكرة شوطًا طويلاً لحماية تطبيقاتك من الوقوع فريسة لنقاط الضعف الشائعة في تلف الذاكرة البدائية.

تعد UAF جنبًا إلى جنب مع وقت التحقق من وقت الاستخدام (TOCTOU) وظروف السباق و Buffer Overflows (BOF) من أكثر نقاط الضعف شيوعًا في الذاكرة. يمكن تجنب كل ذلك من خلال تعلم كيفية إدارة ذاكرة البرنامج من خلال النظام الأساسي الذي يعمل عليه. يمنحك هذا وضوحًا حول كيفية تخصيص نظام التشغيل لبرنامجك في الذاكرة ويزودك بالأدوات اللازمة لتصميم البرامج للحصول على الأداء الأمثل والأمان.

إذا لم تكن قد قمت بذلك بالفعل ، فيمكنك البدء بفهم كيفية إدارة الذاكرة على Linux ، نظام تشغيل الخادم الأكثر استخدامًا في العالم.