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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
rewind — فازر نواة ويندوز موجَّه بالتغطية وقائم على اللقطات | Kitploit
أدوات/GitHubGitHub/quarkslab/rewind
التحليل الديناميكي (عزل)تحليل الثغرات الأمنيةالهندسة العكسيةالاختبار العشوائي
GitHubquarkslab/rewind

rewind

فازر نواة ويندوز موجَّه بالتغطية وقائم على اللقطات

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

الأكثر شعبية

عرض الكل →

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

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

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

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

README

Rewind هو مشوِّش (fuzzer) موجّه بالتغطية (coverage-guided) ويعتمد على اللقطات (snapshots) ويستهدف مكونات نواة ويندوز.

الفكرة هي البدء من لقطة لنظام يعمل مباشرةً. تتكون هذه اللقطة من صفحات الذاكرة الفعلية بالإضافة إلى حالة المعالج (cpu).

تُستخدم هذه الحالة لإعداد الحالة الأولية لمعالج افتراضي. ومن خلال الاستفادة من الترحيل عند الطلب (on-demand paging)، تتم قراءة الصفحات اللازمة لتنفيذ الدالة المستهدفة فقط من اللقطة.

ولأننا نستخدم آلة افتراضية مخصصة تحتوي فقط على صفحات الذاكرة الفعلية المفيدة لتنفيذ الدالة المستهدفة، فإن استعادة اللقطة تكون سريعة.

حاليًا يتوفر محركان (backends):

  • يستخدم محرك WHVP واجهة برمجة تطبيقات WHVP (Windows Hypervisor Platform) API لتوفير الوصول إلى قسم Hyper-V. انظر https://docs.microsoft.com/en-us/virtualization/api/hypervisor-platform/hypervisor-platform لمزيد من التفاصيل.
  • يستخدم محرك Bochs محاكي Bochs (https://bochs.sourceforge.io/)

يجري حاليًا تطوير محرك KVM ويُتوقع توفره قريبًا.

يوفر Rewind ميزتين رئيسيتين:

  • القدرة على تتبع (trace) دالة تعسفية
  • القدرة على تشويش (fuzz) دالة تعسفية

كما يوفر واجهة مستخدم طرفية أساسية (TUI) لعرض معلومات مفيدة حول عملية التشويش.

تم اختباره على ويندوز ولينكس (محرك bochs فقط على لينكس حاليًا).

الدافع

استمتعت دائمًا بإجراء أبحاث ثغرات النواة، خاصةً على نواة ويندوز. تتضمن العملية دائمًا مزيجًا من التحليل الساكن (static) والديناميكي (dynamic). يمكن أن يصبح التحليل الديناميكي مملًا بسرعة. دورة تصحيح الأخطاء / الانهيار / إعادة التشغيل / إعادة تعيين جميع نقاط التوقف بطيئة ومتعبة. عندما تريد القيام ببعض التشويش، غالبًا ما يتطلب الأمر إعداد جهاز افتراضي واحد أو عدة أجهزة افتراضية بالإضافة إلى مصحح نواة (kernel debugger) وكتابة بعض البرامج النصية المرتجلة (ghetto scripts) للتعامل مع اكتشاف الانهيار...

يساعد أخذ اللقطات مع الأجهزة الافتراضية لكنه بطيء.

خلال عام 2018، قدمت مايكروسوفت مجموعة جديدة من واجهات برمجة التطبيقات تسمى Windows Hypervisor Platform (WHVP). تسمح هذه الواجهات بإعداد قسم (partition) (جهاز افتراضي بلغة Hyper-V) مع بعض المعالجات الافتراضية والتحكم في مخارج الجهاز الافتراضي (VM exits) التي تحدث داخل الآلة الافتراضية. إنه تقريبًا مثل امتلاك معالج VM-exit خاص بك في وضع المستخدم (userland). أمر مفيد جدًا للقيام بأشياء مفيدة، على سبيل المثال Simpleator أو applepie.

لذلك بدأت اللعب مع WHVP وصنعت أول PoC سمح لي بتنفيذ بعض الشيل كود (shellcode) في قسم Hyper-V. كان مكتوبًا بلغة بايثون وبطيئًا جدًا. تطور هذا الـ PoC الأول بسرعة كبيرة إلى نوع من أدوات التتبع القائمة على اللقطات (snapshot-based tracer). أردت شيئًا يسمح لي بتهيئة (bootstrap) وحدة المعالجة المركزية الافتراضية وسهل الإعداد. وبما أنني كنت أستخدم بالفعل مصحح نواة للعب مع هدفي، قررت استخدام تفريغات النواة (kernel dumps) التي تم إنشاؤها باستخدام WinDbg كلقطة لي. مع ذلك كنت بحاجة فقط إلى إعداد قسم بمعالج افتراضي. يتم ضبط سياق المعالج الافتراضي بالسياق المأخوذ من التفريغ. عندما يحتاج المعالج الافتراضي إلى صفحة فعلية أستخدم الصفحات من التفريغ.

بهذا تمكنت من تفرع (fork) حالة التفريغ إلى قسم ثم استئناف التنفيذ. سمح لي ذلك بتتبع تنفيذ الدالة المستهدفة بسهولة. من خلال تعديل الوسائط وإرجاع حالة ذاكرة القسم كان من السهل أيضًا تشويش الهدف.

تم تقديم هذا العمل في مؤتمر SSTIC في 2020 وتم نشره على github.

تطبق الأداة طريقتين للحصول على التغطية. تستخدم الأولى علم الفخ الكلاسيكي (Trap Flag - TF) للحصول على مقاطعات INT1 على كل تعليمة. يتطلب ذلك تعديل الهدف وهو بطيء. كنت أفضل استخدام علم فخ MONITOR. لكن WHVP لا يوفر هذه الإمكانية.

من أجل الحصول على أداء مناسب (مطلوب للتشويش)، قررت تقليل دقة التغطية وإضافة وضع تعرف فيه فقط متى يتم تنفيذ تعليمة لأول مرة.

للقيام بذلك، أقوم بتصحيح (patch) الصفحات التي يتم جلبها من اللقطة باستخدام بايتات 0xcc (فقط للصفحات القابلة للتنفيذ). عندما ينفذ المعالج هذه التعليمات المصححة، سيحاصر الهايبرفايزر (hypervisor) الاستثناء ويعيد كتابة التعليمات بالكود الأصلي.

إنه مثل وجود نقطة توقف برمجية فريدة على كل تعليمة. يعمل 95% من الوقت لكنه في أجزاء معينة من الكود (تلك التي تحتوي على جداول القفز (jump tables) على سبيل المثال) سيفشل لأن البيانات ستُستبدل.

للتغلب على هذا، أحد الخيارات هو فك تجميع الكود قبل تعيينه (mapping) وتصحيح ما هو مطلوب فقط (ربما في المرة القادمة).

خلال تجربتي واجهت عدة قيود عند استخدام WHVP. إنه بطيء، بطيء حقًا. يحتوي الكود المصدري لـ VirtualBox على بعض التعليقات المثيرة للاهتمام :)

لذا، للحصول على أداء مناسب تحتاج حقًا إلى الحد من مخارج الآلة الافتراضية، وهذا غير متوافق إذا كنت تريد استخدام Hyper-V كهايبرفايزر تتبع (لأنه يتطلب الكثير من مخارج الآلة الافتراضية).

خلال الفترة نفسها، بدأت استخدام bochs (خاصةً جزء القياس (instrumentation)) للتحقق من صحة الآثار (traces) التي حصلت عليها الأداة. كان Bochs بمثابة مرجع (oracle) لمعرفة ما إذا كانت لدي آثار متباينة.

Bochs أسرع من WHVP عند إجراء التتبع الكامل، كما أن لديك فوائد الوصول إلى الذاكرة بالإضافة إلى أشياء مفيدة أخرى.

قررت إضافة bochs كمحرك آخر. لم يعد whvp اسمًا مناسبًا واستقررت على rewind.

الاستخدام النموذجي

تم تصميم rewind حول سير عملي الخاص عندما أجري تقييمات أمنية لبرامج تشغيل النواة (kernel drivers) على منصة ويندوز.

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

بعد فتح بعض برامج التشغيل العشوائية في IDA، سأبدأ بسرعة في استهداف بعض الدوال. للقيام بذلك، عادةً ما أضع بعض نقاط التوقف باستخدام windbg وبالاقتران مع ret-sync يمكنني البدء في اللعب.

هنا يأتي دور rewind. بدلاً من تعديل مخزن مؤقت (buffer) عشوائي في الذاكرة والتنفيذ خطوة بخطوة (singlestep) وإضافة التعليقات على IDB للحصول على فكرة تقريبية عما يحدث. سألتقط لقطة باستخدام windbg وأستخدم rewind بدلاً من ذلك.

سيؤدي ذلك إلى تسهيل العملية كثيرًا. يوفر امتلاك لقطة الكثير من المزايا. كل شيء حتمي (deterministic). يمكنك إعادة تشغيل استدعاء دالة مرارًا وتكرارًا (ad nauseum). يمكنك تشغيل مشوِّش إذا كانت الدالة المستهدفة تبدو مثيرة للاهتمام. يمكنك حتى إغلاق الجهاز الافتراضي لأنه لم يعد مطلوبًا.

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

من الواضح أنك بحاجة إلى Rust (تم اختبار التثبيت على ويندوز ولينكس مع Rust 1.50). هناك حاجة أيضًا إلى CMake لبعض التبعيات.

Git

أولاً، استنسخ (clone) المستودع:

root@kitploit:~
$ git clone [email protected]:quarkslab/rewind.git

تابع مع تثبيت محرك bochs.

Bochs

استنسخ مستودع bochscpu (https://github.com/yrp604/bochscpu) في دليل vendor:

root@kitploit:~
$ cd vendor
$ git clone https://github.com/yrp604/bochscpu

قم بتنزيل القطع الأثرية (artifacts) المجمعة مسبقًا لـ bochs من bochscpu-build (https://github.com/yrp604/bochscpu-build):

root@kitploit:~
$ curl.exe -L --output bochs-x64-win.zip [artifact_url]

استخرج مجلدي lib و bochs إلى نسخة bochscpu المحلية (checkout).

root@kitploit:~
$ Expand-Archive -Path .\bochs-x64-win.zip -DestinationPath .\
$ copy -Recurse .\bochs-x64-win\msvc\* .\bochscpu\

WHVP

على ويندوز، سيتم أيضًا بناء WHVP كمحرك خلفي (backend).

في جلسة PowerShell بصلاحيات مرتفعة، استخدم الأمر التالي للتحقق مما إذا كان WHVP مفعلًا:

root@kitploit:~
Get-WindowsOptionalFeature -FeatureName HypervisorPlatform -Online

FeatureName      : HypervisorPlatform
DisplayName      : Windows Hypervisor Platform
Description      : Enables virtualization software to run on the Windows hypervisor
RestartRequired  : Possible
State            : Enabled
CustomProperties :

إذا لم يكن مفعلًا، يمكنك استخدام الأمر cmdlet Set-WindowsOptionalFeature لتفعيله. ستحتاج أيضًا إلى تفعيل Hyper-V.

تحتاج أيضًا إلى تثبيت Windows SDK (10.0.19041.0). يمكنك تنزيله من https://developer.microsoft.com/fr-fr/windows/downloads/windows-10-sdk/.

البناء من فرع master

تحتاج إلى تثبيت LLVM وتعيين متغير البيئة LIBCLANG_PATH (مطلوب بواسطة bindgen). انظر https://rust-lang.github.io/rust-bindgen/requirements.html للحصول على شرح مفصل.

root@kitploit:~
$ $env:LIBCLANG_PATH="C:\Program Files\LLVM\bin"

من هناك يجب أن تكون قادرًا على بناء rewind (الإصدار الليلي (nightly) مطلوب بسبب unwind_attributes في crate الخاص بـ bochscpu):

root@kitploit:~
$ cd rewind_cli
$ cargo +nightly build --release

سيكون ملف rewind الثنائي متاحًا في دليل target/release.

يمكنك أيضًا استخدام cargo للتثبيت محليًا:

root@kitploit:~
$ cd rewind_cli
$ cargo +nightly install --path .

مشكلات البناء الشائعة

  • إذا لم يكن cmake موجودًا في المسار (PATH)، فستحصل على خطأ عند بناء zydis
root@kitploit:~
> error: failed to run custom build command for `zydis v3.1.1`
  • إذا كان Windows SDK مختلفًا عن الإصدارات المدعومة، فسيفشل بناء whvp-sys

أمثلة

يتم توفير برنامج تعليمي أساسي يستفيد من CVE-2020-17087 في دليل examples

خارطة الطريق

انظر TODO.md

الأخطاء/القيود المعروفة

  • هذا البرنامج في مرحلة مبكرة جدًا من التطوير وهو تجربة مستمرة.
  • في بعض الأحيان تعجز أداة التتبع عن تتبع الدالة المستهدفة (المشكلة الأكثر شيوعًا هي حالة معالج افتراضي غير صالحة).
  • عند استخدام وضع التغطية hit، ستتصرف أداة التتبع بشكل خاطئ على بعض الدوال (هذا هو الحال مع بعض جداول التبديل (switch tables)). السبب هو أن كل بايت يتم استبداله بنقاط توقف برمجية (بما في ذلك البيانات إذا كانت موجودة في صفحة قابلة للتنفيذ). الطريقة الأفضل للقيام بذلك هي الحصول على قائمة بجميع الكتل الأساسية (basic blocks) من مفكك الشفرة (disassembler) على سبيل المثال.
  • سيتم تنفيذ الدالة المستهدفة بمعالج افتراضي واحد فقط، ولا يوجد دعم للأجهزة (hardware)، لذا فمن المحتمل أن يكون هناك خطأ ما إذا قمت بتتبع دوال متعلقة بالأجهزة.
  • هذه الأداة هي الأنسب لاستهداف دوال محددة.
  • للحصول على أفضل أداء، قلل من مخارج الآلة الافتراضية والصفحات المعدلة لأنها يمكن أن تكون مكلفة حقًا وستزيد من الوقت اللازم لتنفيذ الدالة.
  • لا تستخدم Hyper-V لالتقاط اللقطات. أجهزة Hyper-V الخاصة بويندوز "مستنيرة" (enlightened) بمعنى أنها تستخدم شبه الافتراضية (paravirtualization)، وهذا غير مدعوم حاليًا.
  • بعض الرموز (symbols) لا يتم حلها بشكل صحيح.

الترخيص

هذه الأداة يتم تطويرها حاليًا ورعايتها بواسطة Quarkslab بموجب ترخيص Apache 2.0.

تحيات

تحية إلى @yrp604 و@0verclk0 وAlexandre Gazet لمساعدتهم وملاحظاتهم وأفكارهم. شكرًا أيضًا لجميع زملائي في Quarkslab!

تنزيل الأداة