Skip to content
KitploitKITPLOIT
أدواتالمدونة
Log in
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
DRA_writeup — كتابة تحليلية عن ثغرة تجاوز سعة المخزن المؤقت للمكدس في Oracle DSR (DRA) CVE-2014-6598 | Kitploit
أدوات/GitHubGitHub/kpn-ciso/dra_writeup
أطر الاستغلالتحليل الثغرات الأمنيةالاستغلالالهندسة العكسيةالاختبار العشوائيالأوراق والأبحاثالتعلم والتعليماستغلال الملفات الثنائية
GitHubkpn-ciso/dra_writeup

DRA_writeup

كتابة تحليلية عن ثغرة تجاوز سعة المخزن المؤقت للمكدس في Oracle DSR (DRA) CVE-2014-6598

عرض المستودع
14618منذ 11 سنواتلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

الثغرات الأمنية في Oracle DSR

KPN CISO REDteam

KPN مشغّل اتصالات يقع في هولندا. تأسس فريق CISO REDteam في عام 2013 وهو فريق القرصنة الأخلاقية لدى KPN. يشارك هذا الفريق في اختبارات أمنية لتطبيقات KPN وخدماتها لضمان أن بيانات عملائنا آمنة من الوصول غير المصرح به والتعديل وفقدان البيانات.

خلفية عن وكيل توجيه Diameter

تشغّل KPN أكبر شبكة جوال في هولندا. أحد مكونات شبكة الجيل الرابع التي تشغّلها KPN هو تطبيق وكيل توجيه Diameter المسمى Oracle Diameter Signalling Router (DSR). وكيل توجيه Diameter (DRA) هو عنصر وظيفي في شبكة الجيل الثالث أو الرابع يوفر إمكانيات توجيه في الوقت الفعلي لضمان توجيه الرسائل بين العناصر الصحيحة في الشبكة. قدّم [3GPP] وكيل DRA لمعالجة الحجم المتزايد لحركة إشارات Diameter والتعقيد المتزايد لشبكات 4G LTE. يمكن نشره إما كموجّه أساسي يوجّه حركة المرور بين عناصر Diameter في الشبكة المنزلية، أو كموجّه بوابة يوجّه حركة المرور بين عناصر Diameter في الشبكة المنزلية وشبكة التجوال. وتحدد مواصفات 3GPP استخدام بروتوكول Diameter لعدد من الواجهات، بما في ذلك واجهة (S6a) المستخدمة للاتصال بين MME وHSS وكذلك للتجوال.

الصورة أدناه توضح نشرًا نموذجيًا لـ DRA في بيئة LTE. جميع الواجهات بين العناصر هي واجهات S6a.

alt text

  • [PLMN] = الشبكة العامة للهاتف المحمول الأرضي
  • [IPX] = تبادل IP
  • [HSS] = الخادم الرئيسي للمشترك
  • [MME] = كيان إدارة التنقل

إن Oracle DSR عبارة عن مجموعة من الأجهزة تعمل بنظام CentOS Linux وتؤدي وظيفة DRA. وعادةً ما يكون متصلاً بعدة MMEs وخادم HSS في شبكة LTE المنزلية، كما يمكن توصيله بشركاء التجوال عبر شبكة IPX.

الثغرات

باستخدام منصة [Codenomicon] DEFENSICS، اكتشف فريق KPN REDteam ثغرتين رئيسيتين في تطبيق Oracle DSR الإصدار 5.0:

  • تجاوز سعة المخزن المؤقت للمكدس (stack buffer overflow) [CVE-2014-6598] في عملية dsr.
  • انهيار نواة SCTP، الذي تم الإبلاغ عنه سابقًا وإصلاحه ضمن [CVE-2014-0101].

تتيح الثغرة الأولى لمهاجم بعيد غير موثّق متصل بشبكة IPX اختراق DRA ومكوناته بالكامل. وعندما يسيطر المهاجم بشكل كامل على نظام DRA، يصبح قادرًا على مراقبة كل حركة المرور التي تمر عبر DRA، وربما اختراق الشبكة الأساسية لمشغّل الاتصالات أيضًا.

الجدول الزمني للإفصاح المسؤول

  • 2014-07-24 : تم الإبلاغ عن الثغرات إلى Oracle.
  • 2014-10-21 : تم إصدار التصحيح الأمني لشركات الاتصالات التي تستخدم DSR المتأثر.
  • 2015-01-20 : إصدار عام من Oracle ضمن تحديث التصحيح الحرج ([CPU]).
  • 2015-01-29 : نشر هذا التقرير.

الخاتمة

تعاملت Oracle مع الثغرات المبلغ عنها بجدية، وعمل فريق KPN REDteam عن كثب مع Oracle لحل هذه المشكلات، وهو ما ذُكر أيضًا في إشعار العملاء الخاص بهم:

"حددت اختبارات أمنية حديثة ثغرتين أمنيتين في إصدارات منتج Oracle Diameter Signaling Router. ولحماية شبكتك من الاستغلال المحتمل لهذه الثغرات، توصي Oracle بشدة بتطبيق الإجراءات الموضحة هنا دون تأخير. وتقرّ Oracle بفضل Frank Cozijnsen، المخترق الأخلاقي، من فريق KPN CISO REDteam، على اكتشاف ثغرة حزمة Diameter الموضحة أدناه. كما يُوجَّه شكر خاص إلى KPN على دعمهم خلال مرحلة التحليل لدى Oracle. ملاحظة: سيتم الكشف عن هذه النتائج علنًا مع تحديث التصحيح الحرج القادم لـ Oracle المقرر في 20 يناير 2015."

تشكل المشكلات المكتشفة تهديدًا خطيرًا لمشغلي الاتصالات الذين يستخدمون Oracle DSR ويمكن استغلالها من قبل أي مهاجم لديه إمكانية الوصول إلى اتصال IPX.

منهجية الاختبار

يختبر فريق KPN REDteam المنتجات والخدمات قبل نشرها في شبكات الإنتاج. وكجزء من مشروع ترقية، تم اختبار Oracle DSR الإصدار 5.0 من منظور أمني من قبل فريق KPN REDteam. تضمن الاختبار الأمني استخدام التشويش (fuzzing) على تطبيق DIAMETER في Oracle DSR باستخدام [Codenomicon Diameter Server test Suite]. تم استخدام رسالة طلب تبادل القدرات (CER)، والتي تُستخدم للتحقق من قدرات DIAMETER للخادم المستقبِل، كهدف أولي للتشويش. تم اختيار هذه الرسالة لأنها لا تُمرَّر إلى أنظمة أخرى مثل HSS، بل يعالجها DSR نفسه. أثناء التشويش، لوحظت عدة أعطال في عملية "dsr" على بطاقات معالج الرسائل (MP) في DSR.

التفاصيل التقنية

باستخدام GDB مع إضافة [PEDA]، تم تحليل الانهيار، وفي النهاية تمت كتابة استغلال عن بُعد. كان الانهيار ناتجًا عن كتابة خارج الحدود (out of bounds write) تتجاوز نهاية المخزن المؤقت الموجود على المكدس. أدت الكتابة خارج الحدود إلى إتلاف المكدس ببيانات يتحكم فيها المستخدم. كما تم استبدال مؤشر الإرجاع المحفوظ، وهو العنوان الذي يعود إليه البرنامج بعد إنهاء تنفيذ دالة. وعندما يتمكن المهاجم من التحكم في مؤشر الإرجاع هذا، فقد يؤدي ذلك إلى تنفيذ تعليمات برمجية عشوائية.

alt text

السبب الرئيسي لكتابة هذه المدونة هو شرح كيفية نجاح فريق KPN REDteam في تجاوز حمايتي ASLR وNX المطبقتين، وتمكنه من إنشاء استغلال فعّال لتنفيذ التعليمات البرمجية عن بُعد. عادةً لا تمثل آليتا الحماية ASLR وNX عائقًا كبيرًا أمام المهاجمين، لكن DSR يعمل على CentOS 64 بت. لا توجد وثائق عملية كثيرة حول البرمجة الموجّهة للإرجاع (ROP) على أنظمة Linux 64 بت المحمية بـ ASLR.

أثناء التصحيح، لوحظ أن مكتبة libc كانت تُعيَّن دائمًا على نفس العنوان في عملية dsr، وأن العنوان لم يتغير بعد إعادة التشغيل. بينما كانت المكتبات الأخرى تُعيَّن في عناوين ذاكرة عشوائية في عملية dsr. ومعرفة عنوان ذاكرة libc يتيح استخدام libc كمصدر لأدوات ROP. وهناك خيار آخر هو استخدام ثنائي dsr نفسه كمصدر لأدوات ROP، لكن عدد الأدوات المفيدة في هذا الملف محدود.

mprotect()

للتغلب على حماية NX، يمكن استخدام دالة mprotect() لجعل المكدس قابلاً للتنفيذ، ولتمكين تنفيذ الشيل كود الخاص بنا.

تتطلب دالة mprotect() القيم التالية في السجلات المقابلة:

  • يحتوي %RDI على إزاحة الذاكرة للمنطقة التي سيتم تغييرها (عند حد صفحة).
  • يحتوي %RSI على حجم منطقة الذاكرة التي سيتم تغييرها.
  • يحتوي %RDX على بت الأذونات، وفي حالتنا 0x7 -> أذونات rwx.

إذا تم تعيين كل هذه السجلات، يمكن استدعاء mprotect() عند الإزاحة 0xe54b0 في الإصدار المستهدف من مكتبة libc.

سلسلة ROP

يفترض الجزء التالي من المستند معرفة مسبقة بـ ROP وآلية عمله. يوجد مثال جيد لإنشاء سلسلة ROP على نظام Linux 32 بت في [shell-storm.org]. ونظرًا لأن ASLR "جزئي"، فإن موقع المكدس نفسه لم يكن قابلًا للتنبؤ. تم استخدام أدوات ROP لتخزين قيمة مؤشر المكدس (%RSP) في السجل %RSI.

الخطوة 1

يجب أن يحتوي السجل %RDI على إزاحة الذاكرة للمنطقة التي يجب جعلها قابلة للتنفيذ.

يمكن استخدام مؤشر المكدس لتحديد عنوان الذاكرة هذا، ويجب ضبطه على حد صفحة ذاكرة. يمكن استخدام تعليمة XOR لتصفير آخر 4 بايتات من هذا العنوان لمطابقة حد الصفحة. لم يتوفر سوى أداة واحدة (gadget) للقيام بذلك على السجل %RAX، لذا فإن الخطوة الأولى هي نقل قيمة مؤشر المكدس إلى السجل %RAX.

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

أولاً، يتم تخزين مؤشر المكدس في سجل. تم اختيار السجل %RSI لعدم وجود أدوات (gadgets) متاحة في ثنائي libc لتخزين القيمة مباشرة في السجل %RAX.

The following ROP gadgets were used:
	- 0x00000039c1111111 : pop rcx ; ret 
	- 0x00000039c2222222 : pop rdx ; pop rsi ; ret
	- 0x00000039c3333333 : push rsp ; and al, 8 ; call rcx
	- 0x00000039c4444444 : mov rax, rsi ; ret


Before the overflow the registers look like this:
	%RAX	0x1e40
	%RCX 	0x3ad
	%RDX	0x0
	%RSI	0x0
	%RDI	0x49b8970
	%RSP	0x7fdb97abaaaa

The first objective is to get the value in %RSP to %RSI.

This results in the following first section of the payload: 
	[NOP x size][0x00000039c1111111][0x00000039c2222222][0x00000039c3333333][0x00000039c4444444]

أول تعليمة يتم تنفيذها هي "pop rcx" والتي تُحمّل 0x00000039c2222222 في السجل %RCX. كما تُحرّك تعليمة pop مؤشر المكدس إلى الموضع الذي يُخزَّن فيه 0x00000039c3333333. وسيكون هذا هو عنوان أداة ROP التالية: "push rsp ; and al, 8 ; call rcx". تدفع تعليمة push rsp مؤشر المكدس إلى المكدس، وبعد ذلك يتم استدعاء العنوان الذي كان مخزّنًا سابقًا في السجل %RCX. يؤدي هذا إلى تحميل قيمتين من المكدس في السجلين %RDX و%RSI على التوالي، ثم العودة إلى العنوان 0x00000039c4444444. يحتوي السجل %RSI الآن على مؤشر المكدس الذي تم تخزينه سابقًا. تنسخ أداة ROP الموجودة عند العنوان 0x00000039c4444444 القيمة المخزنة في %RSI إلى %RAX.

تنزيل الأداة