1. [الويكي](https://feex.it/wiki/)
2. [هاردوير](https://feex.it/wiki/hardware/)
3. [الانظمة والمعمارية](https://feex.it/wiki/hardware/system/)
4. Control-flow Enforcement (CET)

# Control-flow Enforcement (CET)

مرجع المعمارية: Feex

بيتقال عليها برضه CET

CET، تقنية Control-flow Enforcement، بتضيف آليات عتادية لحماية مسار التحكم، بشكل رئيسي shadow stacks وتتبع الفروع غير المباشرة (indirect branch tracking). دعم العتاد والحماية النشطة في عملية معينة هما حالتين مختلفتين.

## اللي محتاج تعرفه

CET، تقنية Control-flow Enforcement، بتضيف آليات عتادية لحماية مسار التحكم، بشكل رئيسي shadow stacks وتتبع الفروع غير المباشرة (indirect branch tracking). دعم العتاد والحماية النشطة في عملية معينة هما حالتين مختلفتين.

## بيشتغل إزاي

الـ shadow stacks بتحافظ على حالة عنوان الرجوع المحمية، بينما تتبع الفروع غير المباشرة بيقيد وجهات الفروع غير المباشرة المتتبعة. هما بيعالجوا تحويلات مسار تحكم مختلفة وليهم استعلام وتفعيل منفصل. نظام التشغيل، وبرنامج التحميل (loader)، والملف التنفيذي للتطبيق، والمكتبات بيشتركوا كلهم في تشغيل بيئة تنفيذ محمية.

## المجالات المفيدة فيها

التطبيق المبني بشكل مناسب يقدر يشتغل مع shadow stack بيديره نظام التشغيل، بحيث إن عدم تطابق عنوان الرجوع يطلق الاستثناء المحدد بدل ما يعيد توجيه التنفيذ في صمت. سياسة التوافقية ممكن تختلف بالنسبة للوحدات القديمة وحماية وضع المستخدم (user-mode) مقارنة بوضع المشرف (supervisor-mode).

## طريقة فحص الدعم والتمكين

افحص CPUID.07H.00H:ECX بت 7 لقدرة shadow-stack وEDX بت 20 لتتبع الفروع غير المباشرة، وبعدها عاين حالة حماية العملية الموثقة لنظام التشغيل. مجرد وجود بت المعالج لوحده ميقدرش يثبت الفرض لبرنامج شغال.

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

## اللى الميزة مش بتثبته

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

## التوافق والأداء فى الممارسة العملية

حافظ على تحديث نظام التشغيل والـ firmware وبيئة التشغيل المتأثرة. لو حماية معينة كشفت مشكلة توافق، استخدم أولاً أدوات تشخيص وتحديثات الشركة المصنعة المدعومة. تفعيل او قفل حماية واسعة النطاق ممكن يأثر على تطبيقات تانية مش مرتبطة، ولازم يتبع سياسة نشر واسترجاع صريحة.

## قائمة تحقق عملية للتأكد

1. سجل الموديل الدقيق للمعالج او المنصة وإصدارات التطبيق ونظام التشغيل وبيئة التشغيل المشاركة. احتفظ بنص الخطأ او المتطلب الفعلى زى ما هو.
2. راجع مرجع الشركة المصنعة للموديل الدقيق ده، وبعدين افحص الإمكانية الفعلية وحالة التمكين فى البيئة اللى شغال فيها البرنامج.
3. قارن كل متطلب للملف الثنائى (binary) او الواجهة الخلفية (backend) المختارة. وجود ميزة باسم شبه كده او اسم مستعار او تصنيف تقنى عام مش كفاية.
4. اتأكد ان التطبيق اختار التنفيذ المطلوب. استخدم أدوات التشخيص الموثقة والبديل الاحتياطى المدعوم لما المتطلبات متتحققش.
5. اعمل تغيير واحد مدعوم فى المرة الواحدة وكرر نفس عبء العمل. احتفظ بالإعداد الأصلى ومسار الاسترجاع متاحين.

## لو الميزة مدرجة بس البرمجيات مش قادرة تستخدمها

ابدأ بالمكون اللى فشل بالتحديد. قاعدة بيانات العتاد بتوصف الإمكانية المسجلة؛ لكن نظام التشغيل او الـ hypervisor ممكن يعرضوا بيئة فعلية تانية. خطأ التعليمة غير الصالحة (illegal-instruction) بيحتاج برضه فحص للتعليمة الفعلية اللى سببت العطل والنسخة المبنية من الثنائى، علشان التلف او وجود تعليمة تانية غير مدعومة ممكن ينتج عنهم نفس العرض.

ثبت إصدار التطبيق او برنامج التشغيل او بيئة التشغيل المدعومة للمنصة بالتحديد، واستخدم بنية الأساس (baseline) او البنية الاحتياطية الموثقة من الشركة المصنعة لو لزم الأمر. تحديث البرامج مش هيخلق تعليمة المعالج نفسه بيفتقدها. تغييرات الـ Firmware وسياسات الأمان لازم تتبع إجراءات الشركة المصنعة للنظام وخطة استرجاع بدل اتباع وصفة تحسين عامة.

## ميزات مرتبطة واختلافات مفيدة

[CET-IBT](https://feex.it/wiki/l/arz/hardware/system/cet-ibt/) · [CET shadow stacks](https://feex.it/wiki/l/arz/hardware/system/cet-ss/) · [Execute Disable (NX)](https://feex.it/wiki/l/arz/hardware/system/execute-disable/) · [OS Guard وSMEP](https://feex.it/wiki/l/arz/hardware/system/os-guard/)

## المصادر ونطاق الشرح ده

[Intel 64 and IA-32 Architectures Software Developer's Manual](https://www.intel.com/content/www/us/en/developer/articles/technical/intel-sdm.html) · [Linux kernel: shadow stack لتقنية Control-flow Enforcement Technology](https://docs.kernel.org/arch/x86/shstk.html)

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

## ذات صلة

العناصر دي مرتبطة بالمقالة دي. النوع موضح على كل رابط.

[CET-IBT: مرجع المعمارية](https://feex.it/wiki/l/arz/hardware/system/cet-ibt/)[CET shadow stacks: مرجع المعمارية](https://feex.it/wiki/l/arz/hardware/system/cet-ss/)[Execute Disable (NX): مرجع المعمارية](https://feex.it/wiki/l/arz/hardware/system/execute-disable/)[OS Guard وSMEP: مرجع المعمارية](https://feex.it/wiki/l/arz/hardware/system/os-guard/)

## المصادر والتحقق

حقوق التحرير: Feex. مفيش تاريخ مراجعة مستقل متسجل. [إزاي بنعمل أبحاثنا](https://feex.it/wiki/research/).

- [Intel 64 and IA-32 Architectures Software Developer's Manual ](https://www.intel.com/content/www/us/en/developer/articles/technical/intel-sdm.html)· المجلدان 1 و 2 بيوصفوا عائلات التعليمات المحددة و CPUID؛ المجلد 3 بيوصف الحالة، وتقسيم الذاكرة (paging)، و VMX، وضوابط الحماية. وثائق المعمارية مش بتثبت الدعم لموديل معين.
- [Linux kernel: shadow stack لتقنية Control-flow Enforcement Technology ](https://docs.kernel.org/arch/x86/shstk.html)· بيميز بين دعم العتاد، وعلامات الملف التنفيذي، وتفعيل اللودر، والحماية النشطة على مستوى المسار (per-thread). بيوصف IBT وshadow stacks كإمكانيات منفصلة.

## هل المقالة دي كانت مفيدة؟

مجرد نعم أو لأ كفاية. اختار سبب لو تحب، أو اكتب ملاحظة سريعة.

حقائق سريعة

نبذة تعريفية سريعة عن الصفحة دي. المواصفات، والمصادر، والتفاصيل الكاملة موجودة في المقالة.

---

Source: [Canonical Feex Wiki page](https://feex.it/wiki/l/arz/hardware/system/cet/)

[Developer guide](https://feex.it/wiki/developers/) | [API policy](https://feex.it/developers/api-policy/) | [Agent guidance](https://feex.it/wiki/llms.txt)
