
مراقب افتراضي Intel VT-x بسيط لنظامي Windows وUEFI يقوم بمحاكاة مضيف حي لأغراض الفحص الداخلي، ويدعم الاختطاف الافتراضي الديناميكي وإلغاء الاختطاف الافتراضي وEPT وVPID.
SimpleVisor هو برنامج مراقبة افتراضية (hypervisor) بسيط ومحمول خاص بمعالجات Intel x64/EM64T VT-x، وله هدفان محددان: استخدام أقل قدر ممكن من كود التجميع (10 أسطر)، وامتلاك أصغر قدر ممكن من الكود المرتبط بـ VMX لدعم الاختطاف الافتراضي الديناميكي وإلغاء الاختطاف (أي افتراض حالة المضيف من داخل المضيف) مع دعم ميزات متقدمة مثل EPT وVPID. وهو يعمل حالياً على كل من Windows وبيئات UEFI.
هل كنت دائماً فضولياً لمعرفة كيفية بناء برنامج مراقبة افتراضية؟ هل أرهقتك وثائق Intel (المئات العديدة من الصفحات)؟ هل جعلتك الأمثلة التي وجدتها على الإنترنت أكثر ارتباكاً، أو تطلبت أسابيع من القراءة عبر عشرات الآلاف من الأسطر والكود؟ إذا كان الأمر كذلك، فقد يكون SimpleVisor هو المشروع المناسب لك.
بدون احتساب التعليقات المستفيضة التي تشرح كل سطر من الكود، والخصوصيات المحددة المتعلقة بـ Windows أو Intel، يبلغ حجم SimpleVisor حوالي 500 سطر من كود C، و10 أسطر من كود تجميع x64، مع امتلاكه القدرة على العمل على كل إصدار حديث من Windows بنسخة 64-bit، ودعم التحميل/الإلغاء الديناميكي في وقت التشغيل.
بالإضافة إلى ذلك، يستخدم SimpleVisor مكتبة نظام تشغيل خفيفة الوزن للوظائف الخاصة بـ Windows، مما يفصل أجزاء برنامج المراقبة الافتراضية عن الأجزاء الخاصة بـ Windows. وبالاستفادة من هذا التصميم المحمول، أصبحت نسخة UEFI من SimpleVisor متاحة الآن أيضاً. لاحظ مع ذلك أنها لا تمتلك دعماً قوياً لبيئات MP بسبب مشكلات في UEFI، وأن تحميل نظام تشغيل سيؤدي في النهاية إلى انهيار لأن نظام التشغيل سيصل إلى مسارات كود غير منفذة بسبب إعادة تكوينه لموارد المعالج. إن افتراض عملية الإقلاع الكاملة لنظام التشغيل من UEFI خارج نطاق هذا المشروع.
يمكن بناء SimpleVisor باستخدام Visual Studio 2015 Update 3، ورغم أن المترجمات الأقدم/الأحدث لم يتم اختبارها وغير مدعومة، فمن المحتمل أنها تستطيع بناء المشروع أيضاً. من المهم، مع ذلك، الإبقاء على إعدادات المترجم والرابط المختلفة كما تراها.
تم اختبار SimpleVisor حالياً بنجاح على المنصات التالية:
في الوقت الحالي، لم يتم اختباره على Bochs، ولكن لا يوجد سبب يمنع SimpleVisor من العمل في مثل هذه البيئة أيضاً. ومع ذلك، إذا كان جهازك يعمل بالفعل تحت برنامج مراقبة افتراضية مثل Hyper-V أو Xen، فلن يتم تحميل SimpleVisor.
ضع في اعتبارك أن إصدارات x86 من Windows غير مدعومة صراحةً، ولا المعالجات الأقدم من معمارية Nehalem الدقيقة، ولا Windows 7. إن دعم الأخيرين سهل الإضافة وموجود في بعض التفرعات.
الكثير جداً من مشاريع برامج المراقبة الافتراضية الموجودة إما معقدة للغاية ([Xen][1]، KVM، VirtualBox) و/أو مغلقة المصدر (VMware، Hyper-V)، فضلاً عن كونها موجهة بشكل كبير نحو التطوير أو الأنظمة القائمة على Linux. بالإضافة إلى ذلك، معظمها (بخلاف Hyper-V) مبني صراحةً لغرض تمكين تنفيذ الأجهزة الافتراضية، وليس افتراض نظام حي قيد التشغيل، من أجل إجراء الاستبطان أو مهام أخرى متعلقة بالأمان عليه.
تبرز بعض المشاريع عن غيرها، مثل [Blue Pill][2] الأصلي من Joanna، أو مشاريع مثل [VirtDbg][3] و[HyperDbg][4]. لسوء الحظ، أصبح معظمها قديماً جداً الآن، وبعضها يعمل فقط على معالجات x86، ولا يدعم أنظمة تشغيل أحدث مثل Windows 10. مثال آخر بسيط إلى حد ما، مشابه لـ Blue Pill في بعض الجوانب، ولكنه يقدم في الواقع مثالاً جيداً على استخدام EPT من أجل "Split-TLB" هو [MoRE][7] من Jacob Torrey/AIS.
أقرب مشروع يقدم في الواقع برنامج مراقبة افتراضية حديثاً ومدعوماً ومركزاً على Windows هو [HyperPlatform][5]، ونوصي بشدة باستخدامه كنقطة انطلاق لتطوير برامج مراقبة افتراضية من نوع البحث الأكثر قابلية للاستخدام على نطاق واسع. ومع ذلك، في محاولة لإنشاء "منصة" عامة أكثر قوة على نطاق واسع، يعاني HyperPlatform أيضاً من بعض التضخم، مما يجعل من الصعب فهم ما هي الاحتياجات الأساسية الحقيقية لبرنامج مراقبة افتراضية، وكيفية تهيئة واحد. وعلى نحو مشابه، ومع إظهار حب مماثل لـ STL/C++، ولكن مع تضمين محمّل ELF ودعم UEFI/Linux إلى جانب اختبارات الوحدة والمزيد من القوة، يأتي [Bareflank][8]، أيضاً من AIS. وبعد ذلك، من المحتمل أن تدخل في تعقيد بمستوى Xen.
كان الهدف الصريح لهذا المشروع، كما ذُكر أعلاه، هو تقليل الكود بأي طريقة ممكنة، دون التسبب في آثار جانبية سلبية، والتركيز على احتياجات "العتاد المجرد". ويشمل ذلك:
كان هناك هدف ضمني آخر هو دعم أحدث ميزات العتاد، حيث حتى [Bochs][6] لا يمتلك دائماً أحدث تعليمات و/أو تعريفات Intel VMX. غالباً ما توجد هذه في ملفات رأس مثل "vmcs.h" و"vmx.h" التي تمتلكها مشاريع مختلفة بمستويات مختلفة من التعريف. على سبيل المثال، يمتلك Xen master بعض أسباب VM Exit غير المُصدَرة، ولكن ليس بعض الأسباب المُصدَرة المؤكدة، والتي يمتلكها Bochs، رغم أنه لا يمتلك الأسباب غير المُصدَرة! أحد الأمثلة على ذلك هو استخدام مدخلات EPT بحجم 1GB، والتي على سبيل المثال لا يقوم VMWare بافتراضها بشكل صحيح.
أخيراً، يُقصد بـ SimpleVisor أن يكون أداة تعليمية -- فهو يحتوي على تعليقات مستفيضة تشرح كل المنطق وراء كل سطر من الكود، ونصائح وحيل محددة تتعلق بـ Windows أو Intel VMX التي تسمح له بتحقيق النتيجة المرجوة. يتم الإشارة صراحةً إلى أخطاء متنوعة أو سلوكيات موثقة بشكل سيئ.
نظراً لأن x64 Windows يتطلب توقيع جميع برامج التشغيل، يجب عليك توقيع ثنائي SimpleVisor توقيعاً اختبارياً. يمكن إعداد ملف مشروع Visual Studio للقيام بذلك باستخدام خيارات "Driver Signing" وتمكين "Test Sign" باستخدام شهادتك الخاصة. من واجهة المستخدم، يمكنك أيضاً إنشاء شهادتك الخاصة.
ثانياً، يجب عليك تمكين وضع التوقيع الاختباري (Test Signing Mode) على جهازك. للقيام بذلك، ابدأ بالإقلاع إلى UEFI لإيقاف "Secure Boot"، وإلا لا يمكن تمكين وضع التوقيع الاختباري. بدلاً من ذلك، إذا كنت تمتلك شهادة KMCS صالحة، يمكنك "Production Sign" لبرنامج التشغيل لتجنب هذا الشرط.
لإعداد وضع التوقيع الاختباري، يمكنك استخدام الأمر التالي:
bcdedit /set testsigning on
بعد إعادة التشغيل، يمكنك بعد ذلك إعداد إدخالات Service Control Manager المطلوبة لـ SimpleVisor في السجل باستخدام الأمر التالي:
sc create simplevisor type= kernel binPath= "<PATH_TO_SIMPLEVISOR.SYS>"
يمكنك بعد ذلك تشغيل SimpleVisor باستخدام
sc start simplevisor
وإيقافه باستخدام
sc stop simplevisor
يجب أن تمتلك صلاحيات إدارية لاستخدام أي من هذه الأوامر.
إذا كنت ترغب في معرفة المزيد عن بحثي أو عملي، فأنا أدعوك للاطلاع على مدونتي على http://www.alex-ionescu.com وكذلك شركتي للتدريب والاستشارات، Winsider Seminars & Solutions Inc.، على http://www.windows-internals.com.
https://github.com/upring/virtdbg
http://xenbits.xen.org/gitweb/?p=xen.git;a=summary