تنظيم صفحاتك في مجموعات
يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.
ShadowCallStack (SCS) هو وضع لأداة LLVM لتوفير الحماية من.
استبدال عنوان الإرجاع (مثل تجاوزات المخزن المؤقت المكدس) عن طريق حفظ
عنوان إرجاع إلى ShadowCallStack مخصصًا بشكل منفصل في
دالة البروجيكة للدوال غير الثنائية، وتحميل عنوان الإرجاع من
ShadowCallStack في نهاية الدالة. ويتم أيضًا تخزين عنوان الإرجاع.
في الحزمة العادية للتوافق مع أدوات إلغاء الند، ولكن لا يتم استخدامه بخلاف ذلك.
ويضمن ذلك الهجمات التي تعدِّل عنوان الإرجاع في الحزمة العادية.
ليس لها أي تأثير على تدفق التحكم في البرنامج.
في aarch64، تستخدم الأداة x18
سجل للإشارة إلى ShadowCallStack، مما يعني أن يشير إلى
إلى ShadowCallStack، لن يتم تخزينها في الذاكرة.
وهذا يجعل من الممكن تنفيذ بيئة تشغيل تتجنب الكشف عن
عنوان ShadowCallStack إلى المهاجمين الذين يمكنهم قراءة
ذاكرة عشوائية.
التنفيذ
يتوافق Android مع ShadowCallStack لكل من kernel وuserspace.
تفعيل SCS للنواة
لتمكين ShadowCallStack للنواة، أضف السطر التالي إلى
ملف تهيئة النواة:
CONFIG_SHADOW_CALL_STACK=y
تفعيل SCS في مساحة المستخدم
لتفعيل ShadowCallStack في مكونات مساحة المستخدم، أضِف
الأسطر التالية إلى ملف المخطط الخاص بالمكون:
sanitize: {
scs: true
}
تفترض SCS أنّ سجلّ x18 محجوز لتخزين عنوان
ShadowCallStack، ولا يتم استخدامه لأي أغراض أخرى. بينما يعمل كل النظام
تجميع المكتبات لحجز سجلّ x18، فمن المحتمل أن
إذا تم تفعيل SCS لمكونات مساحة المستخدم التي تعمل مع
رمز قديم قيد المعالجة (مثل المكتبات التي يمكن تحميلها من خلال جهة خارجية
التي قد تهدّد سجل x18. وبناءً على ذلك، نقترح فقط
تفعيل SCS في مكونات مستقلة لن يتم تحميلها في النظام القديم
البرامج الثنائية.
التحقُّق
ما مِن اختبار CTS مخصّص لـ SCS. بدلاً من ذلك، احرص على إجراء اختبارات CTS
مع تفعيل SCS أو عدم تفعيلها للتحقّق من أنّ SCS لا تؤثر في
الخاص بك.
يخضع كل من المحتوى وعيّنات التعليمات البرمجية في هذه الصفحة للتراخيص الموضحّة في ترخيص استخدام المحتوى. إنّ Java وOpenJDK هما علامتان تجاريتان مسجَّلتان لشركة Oracle و/أو الشركات التابعة لها.
تاريخ التعديل الأخير: 2024-09-04 (حسب التوقيت العالمي المتفَّق عليه)
[{
"type": "thumb-down",
"id": "missingTheInformationINeed",
"label":"لا يحتوي على المعلومات التي أحتاج إليها."
},{
"type": "thumb-down",
"id": "tooComplicatedTooManySteps",
"label":"الخطوات معقدة للغاية / كثيرة جدًا."
},{
"type": "thumb-down",
"id": "outOfDate",
"label":"المحتوى قديم."
},{
"type": "thumb-down",
"id": "translationIssue",
"label":"ثمة مشكلة في الترجمة."
},{
"type": "thumb-down",
"id": "samplesCodeIssue",
"label":"مشكلة في العيّنات / التعليمات البرمجية"
},{
"type": "thumb-down",
"id": "otherDown",
"label":"غير ذلك"
}]
[{
"type": "thumb-up",
"id": "easyToUnderstand",
"label":"يسهُل فهم المحتوى."
},{
"type": "thumb-up",
"id": "solvedMyProblem",
"label":"ساعَدني المحتوى في حلّ مشكلتي."
},{
"type": "thumb-up",
"id": "otherUp",
"label":"غير ذلك"
}]
{"lastModified": "\u062a\u0627\u0631\u064a\u062e \u0627\u0644\u062a\u0639\u062f\u064a\u0644 \u0627\u0644\u0623\u062e\u064a\u0631: 2024-09-04 (\u062d\u0633\u0628 \u0627\u0644\u062a\u0648\u0642\u064a\u062a \u0627\u0644\u0639\u0627\u0644\u0645\u064a \u0627\u0644\u0645\u062a\u0641\u0651\u064e\u0642 \u0639\u0644\u064a\u0647)"}
[[["يسهُل فهم المحتوى.","easyToUnderstand","thumb-up"],["ساعَدني المحتوى في حلّ مشكلتي.","solvedMyProblem","thumb-up"],["غير ذلك","otherUp","thumb-up"]],[["لا يحتوي على المعلومات التي أحتاج إليها.","missingTheInformationINeed","thumb-down"],["الخطوات معقدة للغاية / كثيرة جدًا.","tooComplicatedTooManySteps","thumb-down"],["المحتوى قديم.","outOfDate","thumb-down"],["ثمة مشكلة في الترجمة.","translationIssue","thumb-down"],["مشكلة في العيّنات / التعليمات البرمجية","samplesCodeIssue","thumb-down"],["غير ذلك","otherDown","thumb-down"]],["تاريخ التعديل الأخير: 2024-09-04 (حسب التوقيت العالمي المتفَّق عليه)"]]