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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
mmiotic — أشعة سينية لزمن استجابة العتاد غير الموثق | Kitploit
أدوات/GitHubGitHub/xoreaxeaxeax/mmiotic
الاستطلاعالهندسة العكسيةجمع المعلوماتاختراق الأجهزةأمن الأجهزة
GitHubxoreaxeaxeax/mmiotic

mmiotic

أشعة سينية لزمن استجابة العتاد غير الموثق

عرض المستودع
1339منذ 10 أيامتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

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

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

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

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

mmiotic

أداة استكشافية لتوقيت MMIO — قِس زمن أي عنوان فيزيائي، وشَرِّح العتاد انطلاقًا من زمن الاستجابة.

خريطة حرارية لزمن استجابة MMIO

مفيدة بشكل غير متوقع في الهندسة العكسية للعتاد، وبصمات الهايبرفايزر، واستغلال القنوات الجانبية لمراقبة نشاط الأجهزة، وتوصيف التسجيلات، ومعايرة المشغِّلات الخبيثة، وصياغة تعليمات آلة طويلة بشكل فاحش.

أمثلة

الهندسة العكسية لنطاقات الذاكرة

الميغابايت الأولى من الذاكرة الفيزيائية مثال سهل للبدء به، حتى لو كان تركيبها معروفًا جيدًا مسبقًا.

خريطة حرارية للميغابايت الأولى

حدود زمن الاستجابة تتيح لنا تقسيم فضاء العناوين دون الاعتماد على التخطيطات المُبلَّغ عنها.

  1. ابدأ بفحص زمن استجابة بسيط: sudo ./mmiotic --start-address 0x0 --end-address 0x100000 --stride 4 --count 20 --quiet-mmap
  2. يستقر زمن الاستجابة عند الحدود الكلاسيكية — من DRAM إلى 0x9FFFF عند ~380 دورة، ثم فجوة الفيديو البالغة 128 كيلوبايت، والتي تنقسم إلى قسمين عند 0xB0000. قد يشير تغيّر التباين عند 0x20000 إلى مسار تنقّل صفحات مختلف للصفحة الصفرية.
  3. A0000–AFFFF: بطيء ومتذبذب (996 دورة، والانحراف المعياري 327)، ويُوجَّه إلى Radeon المزوَّد بالطاقة والخامل. B0000–BFFFF: سريع وثابت (780 دورة، والانحراف المعياري 3.2، يقرأ ffffffff)، ولا يطالب به أحد. بيانات تبدو متشابهة، لكن الفجوة في التباين تبلغ 100 ضعف.
  4. C0000–FFFFF: يقول /proc/iomem «System ROM»، لكن الفحص يُظهر زمن استجابة DRAM وليس سرعة الفلاش — إذ إن BIOS مُظلَّل داخل DRAM.

تسجيلات صندوق بريد غير موثّقة

افحص فضاء إعداد root-complex (00:00.0، 4 كيلوبايت) بحثًا عن القيم الشاذة في زمن الاستجابة مقابل أرضية مسطّحة تبلغ ~675 دورة:

خريطة حرارية لتسجيلات صندوق البريد

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

  1. افحص فضاء إعداد root-complex: sudo ./mmiotic --start-address 0xf8000000 --end-address 0xf8001000 --stride 4 --count 200
  2. كلمتان مزدوجتان (dwords) هما الشاذتان: الإزاحة 0xe4 (1218 دورة، القيمة 80e3110b) و0xa4 (1199 دورة، القيمة deadbeef). e4 جرس باب (doorbell) موثّق؛ أما a4 فغير موثّق.
  3. زمن استجابة شبه متطابق، وبينهما مسافة 0x40، وكلاهما أعلى بكثير من الأرضية — عائلة تسجيلات واحدة تبلغ الهدف نفسه خارج الشريحة (off-die)، ولا يُعلَن منها سوى e4.
  4. القيم مختلفة: يُقرأ deadbeef كقيمة حارسة (sentinel) تدل على حالة غير مهيَّأة/خطأ — صندوق البريد نفسه، لكن a4 غير مُنفَّذ أو يتلقى مدخلات غير صالحة.

معايرة المقاطعات

يمكن أحيانًا استخدام زمن استجابة مُنتقى بعناية في سيناريوهات استغلال غير مألوفة (MCHAMMER، smiiiiiiiiiiiiiiii):

خريطة حرارية لمعايرة المقاطعات

هنا، يحوّل Radeon خامل وبلا برنامج تشغيل (driver) قراءة واحدة محاذاة من 4 بايتات إلى تعليق (stall) يبلغ ~100,000 دورة.

  1. sudo ./mmiotic --start-address 0x90e00000 --end-address 0x90e00100 --stride 4 --count 50 — امسح رأس BAR الخاصة بوحدة معالجة الرسوم (GPU) (0x90e00000، 256 كيلوبايت). تكلّف 0x90e00008 110,152 دورة؛ أما 0x90e00018، التي تبعد 16 بايتًا، فتعود سريعة عند 1,523 — لكل تسجيل وليس لكل صفحة.
  2. sudo ./mmiotic --start-address 0x90e00000 --end-address 0x90e40000 --stride 4 --count 1 --binary — يفحص --binary بترتيب عكس البتات، لذا تُغطَّى نافذة الـ256 كيلوبايت كاملة تغطية موحّدة بعد 1,012 عملية فحص، ليرسم كتلة متصلة من 48 كيلوبايت يكون فيها كل تسجيل بطيئًا.
  3. على الأرجح، يعود زمن الاستجابة إلى جولة ذهاب وإياب عبر SMU لإلغاء البوّابة عن نطاق مُبوَّب بالساعة/الطاقة — لذا تستخرج خريطة زمن الاستجابة تخطيط الطاقة لوحدة معالجة الرسوم، دون الحاجة إلى برنامج تشغيل أو ورقة بيانات.

لمحة قاتلة

من الناحية المثالية، سيكون قراءة عنوان فيزيائي عملية آمنة نسبيًا، لكن mmiotic بارع خصوصًا في العثور مصادفةً على الاستثناءات:

خريطة حرارية لللمحة القاتلة

على سبيل المثال، على المنصة أعلاه، قراءة 1 بايت من 0xdc5003b0 — الإزاحة 0x3b0 من BAR لتسجيلات iGPU في معالج Zen 4 دون برنامج تشغيل (المنطقة 5، 0xdc500000، 512 كيلوبايت) — تعيد تشغيل النظام بشكل موثوق.

  1. sudo ./mmiotic --address 0xdc5003b0 --size 1 --count 1. لا مخرجات؛ يُعاد تشغيل الجهاز.
  2. كلمة مزدوجة واحدة بالضبط: 0x3ac و0x3b4 على الجانبين تقرآن 00000000 عند ~3,200 دورة، وليستا ضارّتين.
  3. مسح لكل كلمة مزدوجة من 0x3a0–0x3fc يعثر على 7 كلمات مزدوجة سامّة متداخلة مع 17 سليمة.
  4. sudo busybox devmem 0xdc5003b0 32 وsudo dd if=/dev/mem bs=1 count=1 skip=$((0xdc5003b0)) تُسقطان الجهاز إذا فضّلت تجاوز الوسيط.

الاستخدام

[!WARNING] ستعيد بعض المنصات تشغيل نفسها عند فحص مناطق عناوين محددة بواسطة mmiotic. كن حذرًا في المكان الذي تستخدمه فيه.

الاستهداف

تُكتشف قاعدة ECAM وحجمها تلقائيًا من ACPI MCFG (/sys/firmware/acpi/tables/MCFG). يمكن تجاوزهما باستخدام -M, --mmio-base / -Z, --mmio-size.

الفحص

يحوّل --find-target/--find-longest الفحص إلى بحث:

الخيارالتأثير
-F, --find-target <s>العثور على عنوان يبلغ زمن وصوله s ثانية، ثم تصعيد العرض (4b غير محاذاة → 8/16/32/64/512b) لدفعه إلى أعلى
-G, --find-longestالبحث نفسه، لكن مع استنفاد كل مرشح بدل التوقف عند أول إصابة

طريقة الوصول

المخرجات / التنفيذ

أسطر النتائج

root@kitploit:~
b/d/f.o.l: 00:02:00.00.4  address: 00000000f0100000  min:      312  max:      480  stdev:      2.1  dynamic: 0  value: 8086abcd

تُلحق -T عدد الدورات باللاحقة cy وتُدرج زوج زمن min/max مقيَّسًا (تطبع -N تلك القيم كنانوثانية خام):

root@kitploit:~
b/d/f.o.l: 00:02:00.00.4  address: 00000000f0100000  min:      312 cy  max:      480 cy  (   104 ns/   160 ns)  stdev:      2.1  dynamic: 0  value: 8086abcd

الإعداد

البناء:

root@kitploit:~
make

يعمل بصلاحيات الجذر (root) للوصول إلى /dev/mem.

إذا رأيت: mmap ... Operation not permitted، فجرّب الإقلاع مع iomem=relaxed لرفع CONFIG_STRICT_DEVMEM:

root@kitploit:~
# /etc/default/grub
GRUB_CMDLINE_LINUX="iomem=relaxed nopat"

ثم نفّذ sudo update-grub وأعد التشغيل.

في الميدان

استُخدم mmiotic لتطوير مجموعة متنوعة من الأبحاث الداخلية والخارجية، أحيانًا بطرق غير متوقعة. بعض الأمثلة على تطبيقات mmiotic:

  • MCHAMMER: يعاير mmiotic استثناء فحص آلة (machine check exception) مؤجَّلًا لتسليم إشارات MC# بدقة إلى البيئات المحمية.

  • smiiiiiiiiiiiiiiii: يحلّ mmiotic مسألة التعليمة عالية زمن الاستجابة لكسر نقطة التقاء SMM.

  • The Assembly Hall of Shame: يُستخدم mmiotic على نطاق واسع من أجل المشكلة المهمة المتمثلة في إضعاف الأداء (performance deoptimization).

المؤلف

mmiotic جهد بحثي من Christopher Domas (@xoreaxeaxeax).

تنزيل الأداة
الخيارالأسماء
-b/-d/-f/-rPCI --bus/--device/--function/--register — تُفكَّك شفرتها مقابل قاعدة ECAM
-o, --offset <n>الإزاحة من قاعدة MMIO (تتجاوز فك شفرة B/D/F)
-A, --address <n>عنوان فيزيائي واحد؛ يضبط قاعدة المنطقة ضمنيًا
-a/-z--start-address/--end-address — نطاق فيزيائي؛ يستلزم --scan
الخيارالتأثير
-S, --scanتجوال في جميع عناوين المنطقة المستهدفة
-t, --stride <n>الخطوة بين العناوين (الافتراضي: 4)
-n, --limit <n>التوقف بعد هذا العدد من العناوين
--binaryافحص بترتيب عكس البتات — بعد k عملية فحص يكتسب النطاق تغطية موحّدة بدقة تفصيل تبلغ ~range/k (انظر التحذير أعلاه)
-x, --limitedنطاق تسجيلات محدود (0x00–0xff مقابل 0x000–0xfff)
-e, --skipتجاوز الوظائف التي تقرأ 0xffffffff عند الإزاحة 0 (الأجهزة الغائبة)
-I, --iomemفحص كل منطقة عليا غير System-RAM في /proc/iomem
-R, --ioregion <name>فحص مناطق /proc/iomem التي يطابق وسمها <name>، مهما كان عمقها
-B, --fallbacks <n>المرشحون المنقولون إلى مرحلة التصعيد (الافتراضي: 10)
الخيارالتأثير
-s, --size <n>بايتات لكل وصول: 1 / 2 / 4 (الافتراضي) / 8 / 16 (XMM) / 32 (YMM) / 64 (ZMM) / 512 (fxrstor). الأحجام الأكبر من 4 خارج المواصفة لكنها تعمل على العتاد المختبر؛ عروض AVX تتطلب AVX / AVX-512F
-c, --count <n>عينات لكل عنوان (الافتراضي: 1)؛ ويُبلَّغ عن الحد الأدنى
-L, --lockقياس زمن RMW مقفلة: lock xadd (الأحجام 1/2/4/8) أو lock cmpxchg16b (الحجم 16). يعيد كتابة القيمة
-g, --gatherقياس زمن gather متجهي؛ يختار --size 16/32/64 كلاً من XMM/YMM/ZMM (AVX-512)
-w, --write-readالتقاط زمن استجابة الكتابة بقياس زمن قراءة يجب أن تلاحظ كتابة منشورة (posted write) سابقة — انظر أدناه
-E, --enter (--enter-2, --enter-3)دفع دفعة من الوصولات يصل عددها إلى 30 انطلاقًا من تعليمة enter $0, $31 واحدة — انظر أدناه
-k, --continueعند خطأ fxrstor، تجاهل تلك العينة وواصل الفحص
الخيارالتأثير
-C, --min-cycles <n>طباعة النتائج ذات min_cycles >= n فقط
-T, --timeإظهار النانوثانية إلى جانب الدورات (يكتشف تردد TSC)
-N, --nanosecondمع --time، طباعة نانوثانية خام دون تحويل الوحدات
-P, --progressتقدّم الفحص لحظيًا على stderr
-p, --processor <n>التثبيت على معالج منطقي n (الافتراضي: 0) — يقلل ضجيج المؤقّت
-u, --unboundعدم التثبيت على أي نواة
--lazy-mmapتخطيط نوافذ بسعة 2 جيجابايت عند الطلب؛ مطلوب للمناطق الأكبر من 2 جيجابايت
--quiet-mmapكتم ضجيج «mmap failed» الصادر عن المناطق غير القابلة للوصول
الحقلالمعنى
b/d/f.o.lالناقل/الجهاز/الوظيفة، إزاحة التسجيل، حجم الوصول
offsetالإزاحة من قاعدة MMIO — تستبدل b/d/f.o.l عندما جاء الهدف من -o/-A/-a+-z
addressعنوان فيزيائي كامل 64-بت
min/maxأسرع وأبطأ وصول شوهد، بالدورات
stdevالانحراف المعياري لعدد الدورات المُعيَّنة
dynamic1 إذا تغيّرت القيمة في أي نقطة عبر العينات
valueالقيمة المقروءة — للأحجام الأكبر من 8 بايتات، أول 32 بايتًا ككلمات رباعية (qwords) مفصولة بمسافات
faultsيُضاف فقط إذا حدث خطأ في الوصول