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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CustomProcessingUnit — The first analysis framework for CPU microcode | Kitploit
أدوات/GitHubGitHub/pietroborrello/customprocessingunit
Static AnalysisDynamic Code Analysis (DAST)ExploitationReverse EngineeringDebuggersHardware SecurityPayload DevelopmentFirmware Analysis
GitHubpietroborrello/customprocessingunit

CustomProcessingUnit

The first analysis framework for CPU microcode

عرض المستودع
41127منذ 3 سنواتتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

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

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

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

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

Custom Processing Unit

DOI

Custom Processing Unit هي أول إطار عمل للتحليل الديناميكي قادر على ربط (hook) وتصحيح وتتبّع المايكروكود الخاص بالمعالج على مستوى البرمجيات.

يعمل من خلال الاستفادة من تعليمات غير موثقة في معالجات Intel تتيح الوصول إلى CRBUS. باستخدام مفكّك مايكروكود الخاص بنا، قمنا بهندسة عكسية لكيفية استخدام المعالج لـ CRBUS، ومن خلال محاكاة هذه التفاعلات نتحكم بالكامل في المعالج.

ستجد إطار التحليل الثابت كشجرة فرعية في مجلد هذا، أو على https://github.com/pietroborrello/ghidra-atom-microcode.

اطّلع على الشرائح التي تصف هذا العمل هنا.

ملاحظة: يتطلب Custom Processing Unit معالجًا مفتوح القفل الأحمر (Red-Unlocked): حاليًا، فقط معالجات Goldmont (GLM) لديها فك قفل أحمر عام. اختبرنا Gigabyte GB-BPCE-3350C مع خطوة معالج (stepping) 0x9 و0xa (cpuid 0x000506C9 و0x000506CA).

يتكون Custom Processing Unit من تطبيق UEFI وعدد قليل من المكتبات. يتفاعل تطبيق UEFI مع معالج GLM، بينما توفر المكتبات أدوات مساعدة مختلفة لتجميع المايكروكود في تطبيق UEFI وتحليل مخرجاته.

المتطلبات الأساسية

  1. اتبع الخطوات لفك القفل الأحمر لمعالج Goldmont من https://github.com/ptresearch/IntelTXE-PoC.
  2. أنشئ مفتاح USB قابلًا للإقلاع يحتوي على EFI shell
  3. ثبّت gnu-efi على نظامك الرئيسي

الإعداد

root@kitploit:~
GNU_EFI_DIR=<path_to_gnu_efi> make

سيؤدي هذا إلى بناء ملفات المايكروكود المصدرية وتطبيق UEFI في cpu.efi. انسخ cpu.efi إلى مجلد \EFI\ في مفتاح USB، وأدخله في GLM ثم أقلع إلى EFI shell.

نفّذ map -r في EFI shell لتحديد جهاز مفتاح USB و <deviceid>: لتركيبه.

تشغيل Custom Processing Unit

شغّل ./cpu.efi لطباعة المساعدة:

root@kitploit:~
Usage:
  patch:        <tool> p
  patch & exec: <tool> x
  perf:         <tool> f
  zero out m&p: <tool> z
  hook:         <tool> h  [m&p idx] [uop addr] [patch addr]
  template:     <tool> m
  dump imms:    <tool> di
  dump rom:     <tool> dr
  dump msrs:    <tool> dm
  dump SMM:     <tool> ds [address] [size]
  cpuid:        <tool> c  [rax] [rcx]
  rdmsr:        <tool> rm [msr]
  wrmsr:        <tool> wm [msr]
  read:         <tool> r  [cmd] [addr]
  write:        <tool> w  [cmd] [addr] [value]
  invoke:       <tool> i  [addr]
  update ucode: <tool> u  [size]
  ldat read:    <tool> lr [port] [array] [bank] [idx] [addr] [optional size]
  ldat write:   <tool> lw [port] [array] [bank] [idx] [addr] [value]

تعليمات بسيطة

يوفر cpu أدوات مساعدة لتشغيل تعليمات بسيطة من سطر الأوامر:

  • cpuid
  • rdmsr
  • wrmsr

إجراءات معقدة

يوفر cpu واجهات لروتينات معقدة في المعالج من المثير تنفيذها لدراسة سلوك المعالج:

  • u: تحديث مايكروكود المعالج باستخدام التصحيح الموقّع المقدم
  • f: جمع عدادات الأداء أثناء تشغيل المايكروكود

الوصول الخام إلى udbgrd و udbwr

يوفر cpu واجهات خام للتعليمات غير الموثقة udbrd و udbgwr. أكثر الأوامر إثارة للاهتمام التي توفرها هي:

  • 0x0: الوصول إلى CRBUS
  • 0x10: الوصول إلى UROM
  • 0x40: الوصول إلى stgbuf
  • 0xd8: استدعاء روتين المايكروكود من عنوان

الوصول إلى LDAT

يعرض cpu روتينات الوصول إلى LDAT للقراءة والكتابة. حدّد المعاملات [port] [array] [bank] [idx] [addr] للقراءة أو الكتابة هناك. المنافذ المثيرة للاهتمام هي:

  • 0x6a0: مُسلسِل المايكروكود (microcode sequencer)، الذي يمكنه الوصول إلى ROM وRAM الداخليين للمايكروكود
  • 0x120: مخازن التحميل/التخزين (load/store buffers)
  • 0x3c0: ذاكرة التخزين المؤقت للتعليمات (instruction cache)
  • 0x630: ITLB

يرجى ملاحظة أن الوصول إلى بعض هذه المكونات الداخلية قد يتسبب في تجمّد المعالج.

تصحيح المايكروكود

يوفر cpu وظائف لتثبيت التصحيحات في المايكروكود.

  1. اكتب تصحيح المايكروكود الخاص بك في bios/ucode_patches/ucode_patch.u (انظر إلى التصحيحات الأخرى للحصول على أمثلة)
  2. ابنِ تطبيق UEFI
  3. نفّذ cpu.efi p لتثبيت التصحيح على العنوان المحدد في .org.

لاحظ أنه في المايكروكود، فقط العناوين بين 0x7c00 و 0x7e00 قابلة للكتابة وذات معنى للتصحيح.

عند تشغيل cpu.efi x، سيتم أيضًا تنفيذ المايكروكود المصدَّر وطباعة السجلات rax, rbx, rcx, rdx كنتيجة.

المطابقة والتصحيح (Match & Patch)

لتنفيذ المايكروكود تلقائيًا عند أحداث معينة في المعالج أو نقاط معينة في المايكروكود، يستخدم cpu خاصية المطابقة والتصحيح (Match and Patch). إنها تحدّد عنوان مايكروكود للربط (hook) وعنوان المايكروكود الذي سيتم القفز إليه عند تفعيل الربط.

  • z: يعيد تعيين جميع إعدادات المطابقة والتصحيح.
  • h: يثبّت خطافًا (hook)، مع إعطاء فهرس (0-0x20)، وعنوان للربط (0-0x7c00)، وعنوان هدف للتنفيذ (0x7c00-0x7e00).

تتبع المايكروكود

من خلال تثبيت خطافات متعددة وتنفيذ تعليمة بشكل مستمر، يستطيع cpu تتبع العمليات الدقيقة (microoperations) التي تنفذها تلك التعليمة وتفريغها. للتتبع:

  1. اكتب التعليمة المراد تتبعها بعد // [TRACED INSTRUCTION HERE] في get_trace_clock_at().
  2. ابنِ تطبيق UEFI.
  3. تتبع باستخدام: cpu.efi m. سيؤدي ذلك إلى إنشاء ملف trace.txt يحتوي على جميع العناوين التي تم الوصول إليها.
  4. نفّذ uasm-lib/uasm.py -t trace.txt > parsed_trace.txt. سيولّد تتبعًا كاملاً للمايكروكود الذي تم تنفيذه أثناء التعليمة.

لاحظ أن uasm.py سيستخدم ملفات ms_arrayX.txt الموجودة في مجلده لإنشاء تفكيك (disassembly) للتعليمات الدقيقة المنفذة. هذه الملفات مخصصة لمعالجات GLM ذات الخطوة (stepping) 0x9 (cpuid 0x000506C9). يرجى توليد المصفوفات المناسبة إذا كان لديك خطوة مختلفة. يمكنك استخدام وظائف تفريغ LDAT لهذا الغرض.

أدوات تفريغ الذاكرة السرية

يحتوي المعالج على مخازن مختلفة غير قابلة للوصول من المعمارية، ونحن نوفر روتينات لتفريغها:

  • smm: SMROM (أو أي عنوان آخر مع تعطيل حماية SMM)
  • rom: ROM الداخلية
  • imms: القيم المباشرة المثبتة في المعالج (hardcoded immediates)
  • msrs: إعدادات MSRs الداخلية

كتابة تصحيحات المايكروكود

نوفر مُجمِّعًا (assembler) يولّد ملفات رأس (header files) ليتم تجميعها في تطبيق UEFI cpu.efi. انظر إلى التصحيحات المرفقة في bios/ucode_patches للتعرف على بناء الجملة (syntax). وهو يدعم العمليات البسيطة والوسوم (labels). جمّع تصحيح مايكروكود باستخدام uasm.py -i ucode_patch.u -o ucode_patch.h. سيتم تجميع cpu.efi وسيتضمن تلقائيًا تصحيح المايكروكود الذي تريد تطبيقه.

مثال

الملف: code_patch.u

root@kitploit:~
.org 0x7c00

rax:= ZEROEXT_DSZ32(0x00001337)
rbx:= ZEROEXT_DSZ32(0x00001337)
rcx:= ZEROEXT_DSZ32(0x00001337)
rdx:= ZEROEXT_DSZ32(0x00001337)

أعد التجميع، ثم شغّل في GLM:

root@kitploit:~
cpu.efi z # zero out match & patch
cpu.efi p # apply the patch
cpu.efi h 0 0x0428 0x7c00 # rdrand entry point

الآن في كل مرة يتم فيها تنفيذ rdrand، سيعيد القيمة 0x1337 في السجلات.

استشهد بنا

نُشر عملنا في ورقة بحثية في مؤتمر WOOT 2023:

root@kitploit:~
@inproceedings{Borrello2023CustomProcessingUnit,
    title = {{CustomProcessingUnit}: Reverse Engineering and Customization of Intel Microcode},
    author = {Borrello, Pietro and Easdon, Catherine and Schwarzl, Martin and Czerny, Roland and Schwarz, Michael},
    booktitle = {IEEE Workshop on Offensive Technologies (WOOT 23)},
    year = {2023},
}

التجارب

يمكن تشغيل التجارب الموصوفة في الورقة باستخدام:

root@kitploit:~
cpu.efi e [exp_idx]

مع [exp_idx]:

  1. نقاط توقف سريعة للمايكروكود
  2. قسمة المايكروكود ذات الزمن الثابت (Constant-Time ucode division)
  3. x86 PAC
  4. مهاجمة x86 PAC باستخدام PACMAN
  5. نقاط توقف عتادية شرطية
تنزيل الأداة