عشوائية ترتيب فضاء العناوين
تخطيط مساحة العنوان العشوائي ( ASLR ) هو إجراء أمني حاسوبي يهدف إلى الحماية من استغلال الثغرات الناجمة عن تلف الذاكرة.[1] وتعمل هذه التقنية على ترتيب مواقع مساحة العنوان بشكل عشوائي للمكونات الأساسية لعملية ما، مثل قاعدة القابل للتنفيذ، ومواقع المكدس (Stack)، والكومة (Heap)، والمكتبات، وذلك ملف بهدف منع المهاجم من إعادة توجيه تنفيذ التعليمات البرمجية بشكل يعتمد عليه، على سبيل المثال، إلى وظيفة مستغلة محددة في الذاكرة. وعند تطبيق تقنية ASLR على مستوى نواة نظام التشغيل، يُطلق عليها اسم عشوائية تخطيط مساحة عنوان النواة (KASLR).. [2]
تاريخ
يُعد مشروع باكس لينكس أول من صاغ مصطلح "تخطيط مساحة العنوان العشوائي"، وقام بنشر أول تصميم وتنفيذ لهذه التقنية في يوليو 2001 على شكل تصحيح لنواة لينكس. ويُعتبر تنفيذه شاملاً، حيث قدم تصحيحًا للتوزيع العشوائي لمكدس النواة منذ أكتوبر 2002. [3]
كان نظام التشغيل OpenBSD الإصدار 3.4، الذي صدر في عام 2003، أول نظام تشغيل رئيسي يدعم تقنية ASLR افتراضيًا،[1][2] تبعه نظام لينكس في عام 2005.
فوائد
تعمل عشوائية مساحة العناوين على إعاقة أنواع معينة من الهجمات الأمنية عن طريق جعل التنبؤ بعناوين الذاكرة المستهدفة أمرًا صعبًا على المهاجم. فعلى سبيل المثال، يتطلب تنفيذ هجمات العودة إلى libc من المهاجمين تحديد موقع الكود البرمجي المراد تنفيذه، بينما يتعين على مهاجمي الشيفرة المحقونة في المكدس العثور على موقع المكدس أولًا. وفي كلتا الحالتين، تجعل تقنية ASLR عناوين الذاكرة ذات الصلة غير قابلة للتوقع من منظور المهاجم، حيث يتعين عليهم تخمين هذه القيم، وعادةً ما يؤدي التخمين الخاطئ إلى تعطل التطبيق، مما يجعل استرداد الخطأ أمرًا صعبًا.
فعالية
يعتمد أسلوب توزيع مساحة العنوان بشكل عشوائي على الاحتمالية المنخفضة لنجاح المهاجم في تخمين مواقع المناطق التي تم ترتيبها عشوائيًا. ويتحسن مستوى الأمان بزيادة حجم فضاء البحث المحتمل. وبالتالي، تكون عملية توزيع مساحة العنوان بشكل عشوائي أكثر فعالية عندما تكون هناك درجة أعلى من الإنتروبيا في الإزاحات العشوائية. وتزداد الإنتروبياإما بزيادة حجم مساحة الذاكرة الافتراضية (VMA) التي تخضع للعشوائية، أو بتقليل الفترة التي تحدث فيها العشوائية. وعادةً ما تُنفذ الفترة بأصغر حجم ممكن، لذا يتعين على معظم الأنظمة زيادة عشوائية مساحة VMA لتحسين مستوى الأمان.
للتغلب على تقنية تخطيط مساحة العنوان العشوائي (ASLR)، يتطلب الأمر من المهاجمين تخمين مواقع جميع مناطق الذاكرة التي يسعون إلى استغلالها بنجاح. وفيما يتعلق بمناطق البيانات كالمكدس (Stack) والكومة (Heap)، حيث يمكن تحميل تعليمات برمجية خبيثة أو بيانات استغلالية، يصبح استهداف نطاق أوسع من المواقع المحتملة ممكنًا باستخدام شرائح تعليمات NOP (لا تنفذ عملية) أو نسخ متكررة من البيانات. يزيد هذا من فرص نجاح الهجوم حتى لو تم تعيين المنطقة عشوائيًا إلى إحدى القيم القليلة المحتملة. في المقابل، تتطلب مناطق التعليمات البرمجية، مثل قاعدة المكتبة والملف التنفيذي الرئيسي، اكتشافًا دقيقًا لمواقعها. وغالبًا ما تكون هذه المناطق عرضة لتقنيات المزج، حيث يتم، على سبيل المثال، حقن إطارات المكدس في المكدس وتنفيذ عمليات إرجاع إلى المكتبة.
يمكن إعلان المتغيرات التالية:
- (أجزاء الإنتروبيا في أعلى المكدس)
- (بتات الإنتروبيا لقاعدة
mmap()) - (بتات الإنتروبيا لقاعدة الملف التنفيذي الرئيسي)
- (بتات الإنتروبيا لقاعدة الكومة)
- (البتات المهاجمة لكل محاولة إنتروبيا المكدس)
- (البتات المهاجمة لكل محاولة من إنتروبيا
mmap()الأساسية) - (البتات المهاجمة لكل محاولة من إنتروبيا الملف التنفيذي الرئيسي)
- (البتات المهاجمة لكل محاولة لإحداث إنتروبيا قاعدة الكومة)
- (المحاولات المبذولة)
- (إجمالي كمية الإنتروبيا: )
لتقدير احتمالية نجاح المهاجم في تجاوز تقنية ASLR، يجب افتراض عدد المحاولات (α) التي يمكن تنفيذها دون تدخل من أنظمة منع الاختراق القائمة على التوقيعات، أو سلطات إنفاذ القانون، أو أي عوامل أخرى. وفي حالة محاولة الاختراق بالقوة الغاشمة، لا يمكن إعادة تشغيل العملية المستهدفة (الديمون). بالإضافة إلى ذلك، يجب تحديد عدد البتات ذات الصلة في عنوان الذاكرة وعدد البتات التي يتم استهدافها في كل محاولة، مما يتيح حساب عدد البتات المتبقية التي يتعين على المهاجم التغلب عليها لتحديد الموقع الصحيح.
احتمالية تحقيق النجاح بعد تنفيذ عدد محدد من المحاولات (α) على نظام يستخدم N بت من الإنتروبيا في عملية تخطيط مساحة العنوان العشوائي (ASLR).
- (تخمين معزول؛ يتم إعادة ترتيب مساحة العنوان بشكل عشوائي بعد كل محاولة)
- (القوة الغاشمة المنهجية على نسخ البرنامج التي لها نفس مساحة العنوان)
في العديد من الأنظمة الحديثة، يمكن أن يصل عدد البتات المستخدمة في تقنية ASLR (المعبر عنها بـ N) إلى الآلاف أو الملايين، مما يوفر مستوى عالٍ من الحماية. أما في الأنظمة ذات معمارية 32 بت، فيبلغ متوسط كمية الإنتروبيا (N) حوالي 8 بتات.[1] وبالنظر إلى سرعات الحواسيب في عام 2004، ذكر شاكام وزملاؤه أنه "يمكن تجاوز عشوائية العناوين التي تبلغ 16 بتًا بهجوم القوة الغاشمة في غضون دقائق معدودة". [4](يعتمد هذا التصريح على افتراض إمكانية مهاجمة التطبيق المستهدف عدة مرات متتالية دون أي تأخير.)[5]
يقوم نظام أندرويد،[8] وأنظمة تشغيل أخرى محتملة،[ما هي؟] بتنفيذ تقنية عشوائية ترتيب تحميل المكتبات (Library Load Order Randomization)، وهي شكل من أشكال ASLR يعمل على جعل ترتيب تحميل المكتبات المشتركة عشوائيًا. توفر هذه التقنية قدرًا محدودًا من الإنتروبيا. يوضح الجدول التالي تقريبًا لعدد بتات الإنتروبيا التي توفرها كل مكتبة مطلوبة؛ ولا يأخذ هذا التقدير في الحسبان الأحجام المختلفة للمكتبات حتى الآن، لذا فإن الإنتروبيا الفعلية المكتسبة تكون أعلى إلى حد ما. يحتاج المهاجمون عادةً إلى استغلال مكتبة واحدة فقط؛ وتصبح العمليات الحسابية أكثر تعقيدًا عند وجود مكتبات متعددة، كما سيُوضح لاحقًا. وتمثل حالة المهاجم الذي يستخدم مكتبة واحدة فقط تبسيطًا للصيغة الأكثر تعقيدًا عندما يكون عدد المكتبات المستغلة (l) يساوي 1.
- عدد المكتبات التي يستخدمها المهاجم
تميل هذه القيم إلى الانخفاض حتى مع القيم الكبيرة لـ l (عدد المكتبات)، والأهم من ذلك أن المهاجمين عادةً ما يكونون مقيدين باستخدام مكتبة سي القياسية فقط، وبالتالي يمكن غالبًا افتراض أن β=1 (حيث β يمثل عدد المكتبات التي يمكن للمهاجم استخدامها بشكل موثوق). ومع ذلك، حتى مع وجود عدد قليل من المكتبات الأخرى، يمكن اكتساب بعض البتات الإضافية من الإنتروبيا. لذا، من المفيد دمج عشوائية ترتيب تحميل المكتبات مع عشوائية عنوان VMA (مساحة الذاكرة الافتراضية) للحصول على بعض البتات الإضافية من الإنتروبيا. تجدر الإشارة إلى أن هذه البتات الإضافية من الإنتروبيا لن تنطبق على أجزاء الذاكرة التي يتم تعيينها باستخدام الدالة mmap()، بل ستقتصر على المكتبات المشتركة فقط.
تقليل الإنتروبيا
قد يلجأ المهاجمون إلى استخدام تقنيات متنوعة لتقليل كمية الإنتروبيا المتوفرة في مساحة العناوين العشوائية، تتراوح بين استغلال ثغرات تسريب المعلومات البسيطة وتنفيذ هجمات تستهدف عدة بتات من الإنتروبيا في كل محاولة (مثل تقنية رش الكومة). ولا توجد حلول جذرية للحد من هذه الاحتمالات بشكل كامل.
من المحتمل تسريب معلومات تتعلق بتخطيط الذاكرة من خلال استغلال ثغرات سلاسل التنسيق (Format String Vulnerabilities). تعتمد دوال سلاسل التنسيق، مثل printf، على قائمة من الوسائط المتغيرة لتنفيذ وظيفتها، وتحدد مُحدِّدات التنسيق شكل هذه القائمة. وبسبب الطريقة التي تُمرر بها الوسائط عادةً، يشير كل مُحدِّد تنسيق إلى موقع قريب من أعلى إطار المكدس (Stack Frame). وفي نهاية المطاف، يمكن استخراج مؤشر الإرجاع (Return Pointer) ومؤشر إطار المكدس (Stack Frame Pointer)، مما يكشف عن عنوان المكتبة المعرضة للاستغلال وعنوان إطار مكدس معروف. هذا الاستغلال يُقلل من فعالية عشوائية المكتبات والمكدس التي تهدف إلى إعاقة المهاجم.
يمكن أيضًا تقليل فعالية الإنتروبيا في المكدس (Stack) أو الكومة (Heap) من خلال بعض التقنيات. فعادةً ما يكون المكدس محاذيًا على حدود 16 بايت، وهو أصغر فاصل عشوائي ممكن. أما الكومة، فعادةً ما تكون محاذية على حدود الصفحات، والتي غالبًا ما تكون 4096 بايت. عند محاولة تنفيذ هجوم، من الممكن محاذاة الهجمات المتكررة مع هذه الفواصل الزمنية. على سبيل المثال، يمكن استخدام شريحة من تعليمات NOP (لا تنفذ عملية) مع حقن شفرة شل (Shellcode)، ويمكن استبدال السلسلة '/bin/sh' بالسلسلة '////////bin/sh' مع عدد عشوائي من علامات الشرطة المائلة عند محاولة العودة إلى النظام. عدد البتات التي تمت إزالتها هو بالضبط لمدة n فترة تم مهاجمتها.
تكون هذه الانخفاضات في فعالية الإنتروبيا محدودة بكمية البيانات المتاحة في المكدس أو الكومة. فعلى سبيل المثال، عادةً ما يكون الحجم الأقصى للمكدس 8 ميجابايت وقد يتقلص إلى أقل من ذلك بكثير أثناء التنفيذ؛ يسمح هذا بتقليل الإنتروبيا بما يصل إلى 19 بتًا، على الرغم من أن التقدير الأكثر تحفظًا يشير إلى حوالي 10 بتات تتوافق مع نطاق حشو للمكدس يتراوح بين 4 و 16 بايت.فإن حجم الكومة محدود في سلوك مُخصص الذاكرة؛ ففي حالة مكتبة جنو لسي ، حيث يتم إنشاء قواعد بيانات التخصيصات التي تزيد عن 128 كيلوبايت باستخدام الدالة <code>mmap</code>،مما يحد من قدرة المهاجمين على تقليل الإنتروبيا بأكثر من 5 بتات. ويُعد هذا أيضًا عاملًا مُقيِّدًا عند اللجوء إلى أسلوب القوة الغاشمة، فإن حجم كل هجوم يزداد بشكل ملحوظ، وهو ما قد يجعل السلوك الخبيث واضحًا لأنظمة اكتشاف التطفل في بعض الحالات.
القيود
العناوين المحمية بواسطة تقنية ASLR قد تتعرض للتسريب عبر قنوات جانبية متنوعة، مما يُبطل فعالية هذه الآلية الدفاعية. وقد استغلت هجمات حديثة معلومات مُسربة من خلال جداول الصفحات المتحركة الخاصة بمخزن هدف الفرع (Branch Target Buffer - BTB) لوحدة المعالجة المركزية أو وحدة إدارة الذاكرة (Memory Management Unit - MMU).يظل من غير الواضح ما إذا كان من الممكن التخفيف من حدة هذه الفئة من الهجمات التي تستهدف تجاوز تقنية ASLR عبر القنوات الجانبية. وفي حال عدم التوصل إلى آليات دفاع فعالة ضدها، فإن الفوائد الأمنية التي توفرها ASLR قد تتضاءل أو تختفي تمامًا.
التحليل التجريبي
في أغسطس 2024، صدرت ورقة بحثية تضمنت تحليلًا تجريبيًا معمقًا لمنصات سطح المكتب الرئيسية، بما في ذلك لينكس و macOS و وندوز، وذلك عبر فحص التباين في مواقع كائنات الذاكرة بين العمليات المختلفة، والخيوط المتعددة، وعمليات إعادة تشغيل النظام. وقد أظهرت النتائج أنه في حين توفر بعض الأنظمة اعتبارًا من عام 2024، مثل توزيعات Linux الحديثة، درجة قوية من العشوائية في تخطيط الذاكرة، فإن أنظمة أخرى، مثل Windows و macOS، غالبًا ما تقصر في توفير عشوائية كافية للمجالات الرئيسية مثل التعليمات البرمجية القابلة للتنفيذ والمكتبات المشتركة. بالإضافة إلى ذلك، كشف الباحثون عن انخفاض ملحوظ في إنتروبيا المكتبات بعد إصدار النواة لينكس 5.18، وحددوا مسارات ارتباط يمكن للمهاجمين استغلالها لتقليل تعقيد عملية الاستغلال بشكل كبير.
التنفيذات
تقوم غالبية أنظمة التشغيل العامة واسعة الانتشار بتطبيق تقنية تخطيط مساحة العنوان العشوائي (ASLR).
أندرويد
يوفر نظام التشغيل أندرويد 4.0 Ice Cream Sandwich تقنية تخطيط مساحة العنوان العشوائي (ASLR) بهدف تعزيز أمان النظام وحماية تطبيقات الطرف الثالث من محاولات الاستغلال التي تستغل مشكلات إدارة الذاكرة. [6]وقد أُضيف دعم الملفات التنفيذية المستقلة عن الموضع (Position-Independent Executables - PIE) في نظام أندرويد4.1. وفي نظام أندرويد 5.0،[7] توقف الدعم عن الملفات غير المستقلة عن الموضع (non-PIE) وأصبح إلزاميًا أن تكون جميع الملفات الثنائية المرتبطة ديناميكيًا مستقلة عن الموضع. [8]وقد قُبلت إضافة ميزة ترتيب تحميل المكتبات العشوائي (Library Load Order Randomization) في مشروع Android مفتوح المصدر في 26 أكتوبر 2015،[4] وتم تضمينها في إصدار أندرويد 7.0.
دراغون فلاي بي إس دي
يتضمن نظام التشغيل دراغون فلاي بي إس دي تطبيقًا لتقنية ASLR يستند إلى نموذج OpenBSD، وقد أُضيف هذا التطبيق في عام 2010. [9]وتكون هذه الميزة مُعطلة افتراضيًا، ويمكن تفعيلها عن طريق تعيين قيمة المتغير sysctl vm.randomize_mmap إلى 1.
فري بي إس دي
أُضيف دعم تقنية ASLR إلى نظام التشغيل فري بي إس دي في الإصدار 13.0. [10]وقد تم تفعيلها افتراضيًا بدءًا من الإصدار 13.2.[11][12]
iOS (iPhone، iPod touch، iPad)
قدمت شركة أبل تقنية تخطيط مساحة العنوان العشوائي (ASLR) في نظام التشغيل اي او إٍس 4.3، الذي أُصدر في مارس 2011.[13]
تم تقديم KASLR في نظام التشغيل iOS 6. قاعدة النواة العشوائية هي 0x01000000 + ((1+0xRR) * 0x00200000) ، حيث أن 0xRR عبارة عن بايت عشوائي من SHA1 (بيانات عشوائية) تم إنشاؤها بواسطة iBoot (محمل التمهيد اي او إٍس للمرحلة الثانية).
قُدمت تقنية KASLR (عشوائية تخطيط مساحة عنوان النواة) في نظام التشغيل اي او إٍس6.[1] [14]ويتم تحديد العنوان الأساسي للنواة بشكل عشوائي باستخدام الصيغة: 0x01000000 + ((1 + 0xRR) * 0x00200000)، حيث يمثل 0xRR بايتًا عشوائيًا يتم إنشاؤه بواسطة خوارزمية SHA1 بناءً على بيانات عشوائية، ويتم إنشاؤه بواسطة iBoot (محمل التمهيد للمرحلة الثانية في نظام اي او إٍس ).[15]
لينكس
قامت نواة لينكس بتفعيل شكل أساسي من تقنية ASLR افتراضيًا منذ إصدار النواة 2.6.12، الذي صدر في يونيو 2005. وتوفر مجموعات تصحيحات PaX و Exec Shield لنواة لينكس تطبيقات أكثر شمولية لهذه التقنية.توفر رقعة Exec Shield لنظام لينكس 19 بت من إنتروبيا المكدس على فترة 16 بايت، فإن 8 بتات من العشوائية الأساسية لعمليات mmap على مدى صفحة واحدة بحجم 4096 بايت تُنتج توزيعًا لقاعدة المكدس ضمن منطقة ذاكرة بعرض 8 ميجابايت، مما يوفر 524,288 موقعًا محتملًا، بينما تُوزع قاعدة mmap ضمن منطقة ذاكرة بعرض 1 ميجابايت، مما يوفر 256 موقعًا محتملًا.
يمكن تعطيل تقنية ASLR لعملية معينة عن طريق تعديل نطاق تنفيذها باستخدام استدعاء النظام personality(2).[1][16] وتتحكم مجموعة من خيارات sysctl في السلوك العام لتقنية ASLR. على سبيل المثال، يتحكم الخيار kernel.randomize_va_space في جوانب مساحة العنوان التي سيتم تطبيق العشوائية عليها؛ وتُعد القيمة 2 هي الخيار الأقوى. أما الخيار vm.mmap_rnd_bits فيتحكم في عدد البتات التي سيتم تعيينها عشوائيًا لعمليات mmap. . [17]
ينفذ الملف القابل للتنفيذ المستقل عن الموضع (PIE) عنوانًا أساسيًا عشوائيًا للملف الثنائي القابل للتنفيذ الرئيسي وكان موجودًا منذ 18 أبريل 2004. إنه يوفر نفس عشوائية العنوان للملف التنفيذي الرئيسي كما هو مستخدم للمكتبات المشتركة. لا يمكن استخدام ميزة PIE مع ميزة الارتباط المسبق لنفس الملف القابل للتنفيذ. تقوم أداة الربط المسبق بتطبيق العشوائية في مرحلة الربط المسبق بدلًا من وقت التشغيل. ويعود ذلك إلى أن الهدف الأساسي من الربط المسبق هو معالجة عملية نقل المكتبات قبل أن يتولى الرابط الديناميكي هذه المهمة، مما يسمح بتنفيذ عملية النقل مرة واحدة لعدد كبير من عمليات تشغيل البرنامج. ونتيجة لذلك، فإن تطبيق عشوائية حقيقية لمساحة العنوان سيُفشل الغرض من استخدام الربط المسبق.
في عام 2014، كشف ماركو-جيسبرت وريبول عن تقنية أُطلق عليها اسم offset2lib، والتي تعمل على إضعاف فعالية تقنية ASLR في نظام لينكس للملفات التنفيذية المستقلة عن الموضع (PIE). تقوم نوى لينكس بتحميل ملفات PIE التنفيذية مباشرة بعد تحميل مكتباتها؛ ونتيجة لذلك، توجد إزاحة ثابتة بين عنوان الملف التنفيذي وعناوين وظائف المكتبة. إذا تمكن المهاجم من اكتشاف عنوان وظيفة معينة داخل الملف التنفيذي، فستصبح عناوين المكتبات الأخرى معروفة أيضًا. وقد أظهر الباحثان هجومًا عمليًا يمكنه تحديد هذا العنوان في أقل من 400 محاولة. وقد اقترحا خيارًا جديدًا لتكوين النواة تحت اسم randomize_va_space=3 بهدف توزيع موضع الملف التنفيذي بشكل عشوائي بالنسبة للمكتبات،[1] إلا أن هذا الخيار لم يُدمج بعد في الشيفرة المصدرية الرئيسية لنواة Linux حتى عام 2024. [18]
أدى إصدار لينكس kernel 5.18 في مايو 2022 إلى تقليل فعالية تنفيذات 32 بت و64 بت. تستدعي أنظمة ملفات Linux thp_get_unmapped_area للرد على mmap المدعومة بالملف. مع التغيير في الإصدار 5.18، الملفات التي يزيد حجمها عن 2 تم تصميم MiB لإرجاع 2 عناوين متوافقة مع ميجا بايت، بحيث يمكن دعمها بواسطة صفحات ضخمة . (في السابق، كانت المحاذاة المتزايدة تُطبق فقط على تعيينات الوصول المباشر (DAX)). وفي الوقت نفسه، توسعت مكتبة C (libc) بمرور الوقت لتتجاوز عتبة 2 ميجابايت المحددة، ونتيجة لذلك، وبدلًا من محاذاتها على حدود 4 كيلوبايت (كما كان شائعًا في السابق)، أصبحت هذه المكتبات الآن محاذية على حدود 2 ميجابايت، مما أدى إلى فقدان 9 بتات من الإنتروبيا. وبالنسبة لأنظمة لينكس ذات معمارية 32 بت، لا تُظهر العديد من التوزيعات أي عشوائية في تحديد موقع مكتبة libc على الإطلاق. أما في أنظمة لينكس ذات معمارية 64 بت، فقد انخفضت إنتروبيا تحديد موقع libc من 28 بتًا إلى 19 بتًا. وردًا على ذلك، قام Ubuntu بزيادة إعداد mmap_rnd_bitsعشوائية عناوين الذاكرة الافتراضية. [19] وقد أضاف Martin Doucha حالة اختبار إلى مشروع اختبار Linux بهدف الكشف عن هذه المشكلة. [20]
تخطيط مساحة عنوان النواة عشوائيًا
يتيح تخطيط مساحة عنوان النواة (KASLR) تطبيق تقنية عشوائية تخطيط مساحة العنوان على صورة نواة لينكس عن طريق تغيير الموقع الذي يتم فيه تحميل كود النواة في الذاكرة بشكل عشوائي أثناء عملية التمهيد. [21] تم دمج KASLR في الخط الرئيسي لنواة لينكس في إصدار النواة 3.14، الذي تم إصداره في 30 مارس 2014. [22] عند تجميع النواة، يمكن تعطيل ميزة KASLR (عشوائية تخطيط مساحة عنوان النواة) في وقت التمهيد عن طريق تحديد الخيار nokaslr كأحد معلمات تمهيد النواة.. [23]
هناك العديد من هجمات القنوات الجانبية في معالجات x86 والتي قد تؤدي إلى تسريب عناوين النواة. [24] [25] في أواخر عام 2017، تم تطوير عزل جدول صفحات النواة (KPTI المعروف أيضًا باسم KAISER) للتغلب على هذه الهجمات. [26] [27]ومع ذلك، فإن هذه الطريقة في تطبيق ASLR لا توفر حماية ضد هجمات القنوات الجانبية التي تستغل التصادمات في هياكل التنبؤ بالفرع (Branch Prediction Structures). [28]
اعتبارًا من عام 2021، يُعد تخطيط مساحة عنوان النواة الأكثر دقة (أو ما يُعرف بـ FGKASLR، أي KASLR الحبيبي للوظيفة) امتدادًا مُقترحًا لتقنية KASLR يهدف إلى تعزيز العشوائية لتشمل مستوى الوظائف داخل النواة. ويتحقق ذلك عن طريق وضع كل وظيفة في قسم ذاكرة منفصل وإعادة ترتيب هذه الأقسام بشكل عشوائي أثناء عملية تمهيد النظام.[29]
مايكروسوفت ويندوز
قامت شركة Microsoft بتضمين تقنية ASLR ي نظام التشغيل ويندوز فيستا (الذي أُصدر في يناير 2007) والإصدارات اللاحقة فقط للملفات التنفيذية ومكتبات الارتباط الديناميكي (DLLs) التي تم ربطها خصيصًا لتمكين ASLR. [30] من أجل التوافق، لا يتم تمكينه افتراضيًا للتطبيقات الأخرى. بشكل عام، تكون البرامج القديمة فقط غير متوافقة ويمكن تمكين ASLR بالكامل عن طريق تحرير إدخال التسجيل HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\MoveImages ، [31] أو عن طريق تثبيت مجموعة أدوات تجربة التخفيف المحسّنة من Microsoft.
يتم أيضًا تطبيق العشوائية على مواقع الكومة (Heap)، والمكدس(Stack)، وكتلة بيئة العملية (Process Environment Block - PEB)، وكتلة بيئة الخيط (Thread Environment Block - TEB). وقد أشارت ورقة بيضاء أمنية صادرة عن شركة Symantec إلى أن تطبيق تقنية ASLR في نظام التشغيل Windows Vista ذي معمارية 32 بت قد لا يوفر مستوى الحماية المتوقع، وقد أقرت شركة Microsoft بوجود بعض نقاط الضعف في تنفيذه. [32]
تقدم أنظمة منع التطفل المستندة إلى المضيف مثل WehnTrust و Ozone أيضًا ASLR لنظامي التشغيل ويندوز اكس بي وويدوز سرفر 2003 . WehnTrust هو برنامج مفتوح المصدر. التفاصيل الكاملة لتنفيذ الأوزون غير متاحة.
توفر أنظمة منع التطفل المستندة إلى المضيف (Host-based Intrusion Prevention Systems - HIPS)، مثل WehnTrust [33]و Ozone ، [34]أيضًا وظيفة ASLR لأنظمة التشغيل ويندوز اكس بي وويندوز سيرفر 2003. ويُعد WehnTrust برنامجًا مفتوح المصدر[35] ، بينما التفاصيل الكاملة لتنفيذ Ozone غير متاحة للعامة. [36]
في فبراير 2012، أشارت ملاحظات [37] إلى أن فعالية تقنية ASLR على أنظمة ويندوز ذات معمارية 32 بت والإصدارات الأقدم من ويندوز 8 قد تتراجع في حالات نقص الذاكرة. وقد توصلت نفس الدراسة إلى تأثير مماثل على نظام لينكس. أما بالنسبة لنظام Mac OS X 10.7.3، فقد تسبب كود الاختبار المستخدم في حدوث حالة ذعر في النواة، مما جعل سلوك تقنية ASLR في هذا السيناريو غير واضح.
نت بي إس دي
ظهر دعم ASLR في عالم المستخدم في NetBSD 5.0 (تم إصداره في أبريل 2009)، وتم تمكينه افتراضيًا في NetBSD-current في أبريل 2016
أُضيف دعم تقنية ASLR لمساحة المستخدم في نظام التشغيل نت بي اس دي 5.0، [38]الذي أُصدر في أبريل 2009.[1] وقد تم تفعيل هذه الميزة افتراضيًا في النسخة الحالية من NetBSD (NetBSD-current) في أبريل 2016. [39]
أُضيف دعم تقنية Kernel ASLR (KASLR) على معمارية amd64 في النسخة الحالية من نظام التشغيل NetBSD (NetBSD-current) في أكتوبر 2017، مما جعل NetBSD أول نظام تشغيل من عائلة BSD يدعم KASLR. [40]
أوبن بي إس دي
في عام 2003، أصبح OpenBSD أول نظام تشغيل رئيسي يدعم شكلًا قويًا من ASLR ويقوم بتنشيطه افتراضيًا. [41] أكمل OpenBSD دعمه لـ ASLR في عام 2008 عندما أضاف الدعم لثنائيات PIE . [42] تم تصميم malloc(3) في OpenBSD 4.4 لتحسين الأمان من خلال الاستفادة من ميزات ASLR وصفحة الفجوة التي تم تنفيذها كجزء من نداء نظام mmap في OpenBSD، وللكشف عن أخطاء الاستخدام بعد التحرير. [43] تم إصدار OpenBSD 5.3 في عام 2013، وكان أول نظام تشغيل رئيسي يمكّن الملفات القابلة للتنفيذ المستقلة عن الموضع افتراضيًا على منصات أجهزة متعددة، كما قام OpenBSD 5.7 بتنشيط الثنائيات الثابتة المستقلة عن الموضع (Static-PIE) افتراضيًا.
في عام 2003، أصبح اوبن بي اس دي أول نظام تشغيل رئيسي يدعم تطبيقًا قويًا لتقنية ASLR ويقوم بتفعيله افتراضيًا.[1] وقد استكمل OpenBSD دعمه لـ ASLR في عام 2008 بإضافة الدعم للثنائيات المستقلة عن الموضع (PIE).[2] صُممت دالة malloc(3) في OpenBSD 4.4 لتعزيز الأمان من خلال الاستفادة من ميزات ASLR وصفحة الفجوة التي تم تنفيذها كجزء من استدعاء النظام mmap في OpenBSD، وكذلك للكشف عن أخطاء الاستخدام بعد التحرير.[3] وفي عام 2013، صدر OpenBSD 5.3 ليصبح أول نظام تشغيل رئيسي يمكّن الملفات التنفيذية المستقلة عن الموضع افتراضيًا على مختلف المنصات المعمارية. كما قام OpenBSD 5.7، الذي صدر لاحقًا، بتفعيل الثنائيات الثابتة المستقلة عن الموضع (Static-PIE) افتراضيًا.[42]
ماك أو إس
في نظام التشغيل ماك او اكس ليوبارد 10.5، الذي أُصدر في أكتوبر 2007، قدمت شركة Apple ميزة التوزيع العشوائي لمكتبات النظام. [44]
في نظام ماك او اكس ليوبارد 10.7 (الصادر في يوليو 2011)، وسّعت Apple نطاق تطبيقها ليشمل جميع التطبيقات، حيث ذكرت أن "توزيع تخطيط مساحة العناوين (ASLR) قد حُسِّن لجميع التطبيقات، مما يجعل تطبيقات 64 بت و32 بت أكثر مقاومة للهجمات. [45]
اعتبارًا من نظام التشغيل ماك او اكس ليوبارد 10.8، الذي أُصدر في يوليو 2012 والإصدارات الأحدث منه، يتم تطبيق العشوائية على النظام بأكمله أثناء عملية التشغيل، ويشمل ذلك النواة بالإضافة إلى النصوصوالمناطق الأخرى في الذاكرة. [46]
سولاريس
قُدمت تقنية ASLR في نظام التشغيل Solaris بدءًا من الإصدار 11.1، الذي أُصدر في أكتوبر 2012. وفي Solaris 11.1، يمكن تهيئة إعدادات ASLR على مستوى النظام بأكمله، أو لكل منطقة (Zone) على حدة، أو على أساس الملفات الثنائية. [47]
استغلال
لقد ثبت أن هجوم القناة الجانبية الذي يستغل مخزن هدف الفرع (Branch Target Buffer) يمكنه تجاوز حماية تقنية ASLR.[1] وفي عام 2017، تم عرض هجوم أُطلق عليه اسم "ASLR⊕Cache"، والذي أظهر القدرة على إضعاف فعالية ASLR في متصفحات الويب باستخدام لغة JavaScript. [48]
انظر أيضا
مراجع
- ↑ Marco-Gisbert, Hector; Ripoll Ripoll, Ismael (22 Jul 2019). "Address Space Layout Randomization Next Generation". Applied Sciences (بالإنجليزية). 9 (14): 2928. DOI:10.3390/app9142928. hdl:10251/144813. ISSN:2076-3417.
- ↑ Yeongjin Jang؛ Sangho Lee؛ Taesoo Kim. "Breaking Kernel Address Space Layout Randomization with Intel TSX" (PDF). 23rd ACM Conference on Computer and Communications Security. https://www.sigsac.org/ccs/CCS2016/index.html. DOI:10.1145/2976749.2978321. مؤرشف من الأصل (PDF) في 2023-03-30.
{{استشهاد بمنشورات مؤتمر}}:|مسار المؤتمر=بحاجة لعنوان (مساعدة) - ↑ Brad Spengler (أكتوبر 2003). "PaX: The Guaranteed End of Arbitrary Code Execution" (PDF). grsecurity.net. Slides 22 through 35. مؤرشف (PDF) من الأصل في 2020-10-25. اطلع عليه بتاريخ 2015-08-20.
- ↑ Marco-Gisbert، Hector؛ Ripoll، Ismael (20 نوفمبر 2014). "On the Effectiveness of Full-ASLR on 64-bit Linux" (PDF). مؤرشف من الأصل (PDF) في 2015-05-08. اطلع عليه بتاريخ 2016-03-29.
- ↑ Shacham، H.؛ Page، M.؛ Pfaff، B.؛ Goh، E.J.؛ Modadugu، N.؛ Boneh، D (2004). "On the Effectiveness of Address-Space Randomization". 11th ACM conference on Computer and communications security. ص. 298–307.
- ↑ "Android Security". Android Developers. مؤرشف من الأصل في 2011-10-12. اطلع عليه بتاريخ 2012-07-07.
- ↑ "oss-security". مؤرشف من الأصل في 2015-10-05. اطلع عليه بتاريخ 2015-10-04.
- ↑ "Revert "Reenable support for non-PIE executables"". مؤرشف من الأصل في 2023-08-11. اطلع عليه بتاريخ 2017-06-26.
- ↑ mmap - add mmap offset randomization نسخة محفوظة 2014-02-01 على موقع واي باك مشين., DragonFly Gitweb, 25 November 2010.
- ↑ "Implement Address Space Layout Randomization (ASLR)". مؤرشف من الأصل في 2019-05-07. اطلع عليه بتاريخ 2019-02-10.
- ↑ "FreeBSD 13.2-RELEASE Release Notes". مؤرشف من الأصل في 2023-04-11. اطلع عليه بتاريخ 2023-04-11.
- ↑ "ASLR - FreeBSD Wiki". مؤرشف من الأصل في 2021-05-17. اطلع عليه بتاريخ 2021-05-17.
- ↑ Pwn2Own day 2: iPhone, BlackBerry beaten; Chrome, Firefox no-shows نسخة محفوظة 2012-05-02 على موقع واي باك مشين., Ars Technica, 11 March 2011
- ↑ Stefan Esser (7 مارس 2013). "iOS 6 Exploitation 280 Days Later". Slide 19, "iOS 6 introduces KASLR". مؤرشف من الأصل في 2019-05-07. اطلع عليه بتاريخ 2018-04-25.
- ↑ Tarjei Mandt. "Attacking the iOS Kernel: A Look at 'evasi0n'" (PDF). مؤرشف (PDF) من الأصل في 2020-12-13. اطلع عليه بتاريخ 2023-07-23.
- ↑ – Linux Programmer's Manual – System Calls
- ↑
- "Documentation for /proc/sys/kernel/ — The Linux Kernel documentation". www.kernel.org. مؤرشف من الأصل في 2025-06-30.
- "Documentation for /proc/sys/vm/ — The Linux Kernel documentation". www.kernel.org.
- ↑ "[PATCH] ASLRv3: randomize_va_space=3 preventing offset2lib attack". lore.kernel.org. مؤرشف من الأصل في 2025-05-01.
- ↑ Miller، Justin (8 يناير 2024). "ASLRn't: How memory alignment broke library ASLR". zolutal's blog. مؤرشف من الأصل في 2025-02-17. اطلع عليه بتاريخ 2024-01-13.
- ↑ "[LTP] [PATCH 2/2] Add test for ASLRn't bug - Martin Doucha". lore.kernel.org. مؤرشف من الأصل في 2025-05-01.
- ↑ Jake Edge (9 أكتوبر 2013). "Kernel address space layout randomization". إل دبليو إن.نت. مؤرشف من الأصل في 2014-04-04. اطلع عليه بتاريخ 2014-04-02.
- ↑ "Linux kernel 3.14, Section 1.7. Kernel address space randomization". kernelnewbies.org. 30 مارس 2014. مؤرشف من الأصل في 2021-01-15. اطلع عليه بتاريخ 2014-04-02.
- ↑ "kernel/git/torvalds/linux.git: x86, kaslr: Return location from decompress_kernel (Linux kernel source tree)". kernel.org. 13 أكتوبر 2013. مؤرشف من الأصل في 2023-08-11. اطلع عليه بتاريخ 2014-04-02.
- ↑ "KASLR is Dead: Long Live KASLR" (PDF). Engineering Secure Software and Systems 2017. 24 يونيو 2017. مؤرشف من الأصل (PDF) في 2025-04-09.
- ↑ Jang، Yeongjin؛ Lee، Sangho؛ Kim، Taesoo (2016). Breaking Kernel Address Space Layout Randomization with Intel TSX (PDF). CCS '16. New York: Association for Computing Machinery. ص. 380–392. DOI:10.1145/2976749.2978321. ISBN:9781450341394. S2CID:6293725. مؤرشف (PDF) من الأصل في 2020-09-21. اطلع عليه بتاريخ 2017-12-29.
- ↑ Corbet، Jonathan (20 ديسمبر 2017). "The current state of kernel page-table isolation". Linux Weekly News. مؤرشف من الأصل في 2018-01-04. اطلع عليه بتاريخ 2018-01-04.
- ↑ Corbet، Jonathan (15 نوفمبر 2017). "KAISER: hiding the kernel from user space". Linux Weekly News. مؤرشف من الأصل في 2020-12-08. اطلع عليه بتاريخ 2017-12-29.
- ↑ Evtyushkin، Dmitry؛ Ponomarev، Dmitry؛ Abu-Ghazaleh، Nael (2016). "Jump over ASLR: Attacking branch predictors to bypass ASLR" (PDF). 2016 49th Annual IEEE/ACM International Symposium on Microarchitecture (MICRO). ص. 1–13. DOI:10.1109/MICRO.2016.7783743. ISBN:978-1-5090-3508-3. S2CID:3801142. مؤرشف من الأصل (PDF) في 2025-03-04.
- ↑ "Linux 5.16 Has Early Preparations For Supporting FGKASLR - Phoronix". www.phoronix.com. مؤرشف من الأصل في 2021-11-10. اطلع عليه بتاريخ 2021-11-10.
- ↑ "Windows ISV Software Security Defenses". Msdn.microsoft.com. 6 ديسمبر 2010. مؤرشف من الأصل في 2012-04-18. اطلع عليه بتاريخ 2012-04-10.
- ↑ Windows Internals: Including Windows Server 2008 and Windows Vista, Fifth Edition (PRO-Developer) (ردمك 978-0-7356-2530-3)
- ↑ Ollie Whitehouse (فبراير 2007). "An Analysis of Address Space Layout Randomization on Windows Vista" (PDF). مؤرشف من الأصل (PDF) في 2019-07-15. اطلع عليه بتاريخ 2009-01-18.
- ↑ "WehnTrust". Codeplex.com. مؤرشف من الأصل في 2009-12-25. اطلع عليه بتاريخ 2012-04-10.
- ↑ "Security Architects' Ozone". Security Architects. مؤرشف من الأصل في 2016-03-04. اطلع عليه بتاريخ 2012-04-10.
- ↑ "WehnTrust source code". مؤرشف من الأصل في 2013-11-28. اطلع عليه بتاريخ 2013-11-15.
- ↑ "Address-Space Randomization for Windows Systems" (PDF). مؤرشف (PDF) من الأصل في 2010-08-05. اطلع عليه بتاريخ 2012-04-10.
- ↑ Ollie (2 مارس 2012). "Research, Develop, Assess, Consult & Educate | Recx: A Partial Technique Against ASLR – Multiple O/Ss". Recxltd.blogspot.co.uk. مؤرشف من الأصل في 2013-03-23. اطلع عليه بتاريخ 2012-04-10.
- ↑ "Announcing NetBSD 5.0". مؤرشف من الأصل في 2016-04-21. اطلع عليه بتاريخ 2016-04-25.
- ↑ Christos Zoulas (2016). "PIE binaries and ASLR are on in the default build for amd64". مؤرشف من الأصل في 2016-04-22. اطلع عليه بتاريخ 2016-04-25.
- ↑ "Kernel ASLR on amd64". 2017. مؤرشف من الأصل في 2017-10-16. اطلع عليه بتاريخ 2017-10-16.
- ↑ Theo De Raadt (2005). "Exploit Mitigation Techniques (updated to include random malloc and mmap) at OpenCON 2005". مؤرشف من الأصل في 2012-07-16. اطلع عليه بتاريخ 2009-08-26.
- 1 2 Kurt Miller (2008). "OpenBSD's Position Independent Executable (PIE) Implementation". مؤرشف من الأصل في 2011-06-12. اطلع عليه بتاريخ 2011-07-22.
- ↑ "libc/stdlib/malloc.c". BSD Cross Reference, OpenBSD src/lib/. مؤرشف من الأصل في 2014-12-26. اطلع عليه بتاريخ 2016-09-12.
- ↑ "Mac OS X – Security – Keeps safe from viruses and malware". Apple. مؤرشف من الأصل في 2011-05-25. اطلع عليه بتاريخ 2012-04-10.
- ↑ "Security". Apple Inc. مؤرشف من الأصل في 2011-06-06. اطلع عليه بتاريخ 2011-06-06.
- ↑ "OS X Mountain Lion Core Technologies Overview" (PDF). يونيو 2012. مؤرشف (PDF) من الأصل في 2012-07-10. اطلع عليه بتاريخ 2012-07-25.
- ↑ Controlling Access to Machine Resources نسخة محفوظة 2013-06-20 على موقع واي باك مشين., Oracle Information Library, 26 October 2012.
- ↑ AnC نسخة محفوظة 2017-03-16 على موقع واي باك مشين. VUSec, 2017
روابط خارجية
- تقنيات التخفيف من الاستغلال: تحديث بعد عشر سنوات نسخة محفوظة 2014-02-20 على موقع واي باك مشين. في OpenBSD
- توثيق PaX على ASLR
- مقارنة بين PaX وExec Shield وW^X
- تخطيط مساحة العنوان عشوائيًا في نظام التشغيل Windows Vista - مدونة مايكل هوارد على الويب
- ASLR لنظامي التشغيل Windows 2000/XP/2003 (WehnTrust)
- تجاوز حماية PaX ASLR
- حول فعالية تخطيط مساحة العنوان العشوائية
- اختبار التطبيقات (أو المكتبات) لدعم ASLR وDEP
- مرجع ASLR Smack & Laugh