
هايبرفايزر للتجريب بالبيانات العشوائية مبني باستخدام WHVP و Bochs
مرحباً! أهلاً بك في applepie! هذه أداة مصممة للتجريب (fuzzing) والتفحص الداخلي واكتشاف الأخطاء! هذا هايبرفايزر يستخدم واجهة برمجة تطبيقات منصة هايبرفايزر ويندوز (Windows Hypervisor Platform API) الموجودة في الإصدارات الحديثة من ويندوز (تم تطويره واختباره تحديداً على ويندوز 10 build 17763). يُستخدم Bochs لتوفير تفحص داخلي عميق ومحاكاة الأجهزة.
واجهة برمجة تطبيقات منصة هايبرفايزر ويندوز (WHVP) هي مجموعة واجهات برمجية للوصول إلى قدرات هايبرفايزر Hyper-V. تسهل هذه الواجهة علينا تنفيذ جهاز افتراضي بالكامل في مساحة المستخدم دون الحاجة إلى أي برامج تشغيل أو أذونات خاصة.
هذا مشروع قيد التطوير السريع. سأغرد غالباً عند إصدار ميزات جديدة قبل توثيقها.
أحب أن يكون لمشاريعي أشياء مادية:
هذه أداة مصممة للتجريب (fuzzing) والتفحص الداخلي أثناء البحث الأمني. باستخدام هايبرفايزر، يمكن تطبيق تقنيات التجريب الشائعة على أي هدف، سواء كان في النواة أو مساحة المستخدم. تسمح هذه البيئة بتجريب أنظمة كاملة دون الحاجة إلى شفرة المصدر للهدف. على مستوى الهايبرفايزر، يمكن جمع تغطية الكود، وعند الحاجة يمكن استخدام محاكاة Bochs لتوفير تفحص داخلي تعسفي في بيئة محاكاة. يمكن استخدام معلومات التغطية هذه لمعرفة فعالية حالات التجريب. يمكن حفظ حالة التجريب التي تسببت في زيادة التغطية كونها حالة مثيرة للاهتمام. يمكن استخدام هذا المدخل لاحقاً، والبناء عليه بإفسادات جديدة.
التجريب باللقطات (Snapshot fuzzing) هو الاستخدام الأساسي لهذه الأداة. حيث تلتقط لقطة للنظام في حالة معينة، وتحفظها. يمكن بعد ذلك تحميل هذه اللقطة للتجريب، حيث يتم حقن حالة تجريب، ثم استئناف التنفيذ. نظراً لأنه يمكن إعادة تعيين الجهاز الافتراضي بتكلفة منخفضة جداً، يمكن إعادة تعيينه بشكل متكرر. إذا استغرق Word 5 ثوانٍ للإقلاع، ولكن يمكنك التقاط لقطة لحظة قراءته لملفك، يمكنك تقصير حالة التجريب إلى ما هو ذو صلة بالمدخل فقط. هذا يسمح بحلقة تجريب ضيقة جداً دون الحاجة إلى الوصول إلى شفرة المصدر. نظراً لأن الأجهزة الافتراضية هي أنظمة منفصلة تماماً، يمكن تشغيل العديد منها بالتوازي للسماح بالتوسع إلى جميع النوى.
حالياً تدعم هذه الأداة فقط جمع تغطية الكود، وتنزيل الرموز الديناميكية لويندوز، وتحليل الرموز/الوحدات لأهداف ويندوز أيضاً. إضافة دعم التجريب سيكون قريباً جداً.
نظراً لأنني كتبت تقريباً جميع الميزات هنا من قبل (التغطية، التجريب، إعادة التعيين السريع، إلخ). أتوقع أن يصبح هذا المشروع جاهزاً للتجريب بسرعة كبيرة، إلا إذا تشتت انتباهي :D
أهدف إلى نهاية يناير للتغطية (تم!)، والملاحظات، وعرض الوحدات (تم!)، وقوائم العمليات، وإعادة التعيين السريع، ودعم الرموز (تم!). مما سيجعله أداة تجريب قوية جداً.
الهدف الرئيسي المدعوم هو ويندوز 10 الحديث. الأهداف التي تعمل بنظام ويندوز تدعم تنزيل الرموز من مخزن الرموز. هذا يسمح بتغطية رمزية لأهداف ويندوز مباشرة. ومع ذلك، الكود مكتوب بطريقة يمكن بسهولة إضافة التنوير (enlightenment) لأنظمة لينكس.
بدون أي تنوير، يمكن تجريب أي نظام تشغيل يمكنه الإقلاع وجمع تغطية أساسية.
قبل الإبلاغ عن مشكلات دعم نظام التشغيل، يرجى التحقق من أن المشكلة في الهايبرفايزر/التغييرات على Bochs عن طريق محاولة إقلاع هدفك باستخدام Bochs القياسي المُعد مسبقاً دون هايبرفايزر. Bochs ليس شائع الاستخدام وغالباً ما يحتوي على أخطاء مدمرة حتى للأشياء الشائعة مثل إقلاع لينكس. خاصة مع التغييرات الداخلية السريعة في استخدام CPUID/MSR مع تخفيفات Spectre/Meltdown التي تدخل في أنظمة التشغيل.
انظر صفحة المشكلات على Github للحصول على قائمة بالمشكلات. لقد بدأت بها بالفعل ببعضها. بعض هذه المشكلات تحتاج إلى معالجة سريعة قبل بدء تطوير التجريب.
لبناء هذا تحتاج إلى بعض الأشياء:
قم بتثبيت Visual Studio 2017 وتأكد من تحديثه. نحن نستخدم واجهات برمجة تطبيقات ورؤوس ومكتبات متطورة جداً.
كنت أستخدم إصدار cl.exe: Microsoft (R) C/C++ Optimizing Compiler Version 19.16.27025.1 for x64
وإصدار SDK 10.0.17763.0
قم بتثبيت Rust عبر https://rustup.rs/. استخدمت rustc 1.32.0-nightly (b3af09205 2018-12-04)
تأكد من تثبيت سلسلة الأدوات x86_64-pc-windows-msvc حيث أن 64 بت فقط مدعومة لهذا المشروع.
تأكد من أن cargo موجود في مسار PATH. يجب أن يكون هذا هو الوضع الافتراضي.
اذهب واحصل على python https://www.python.org/ وتأكد من أنه في PATH الخاص بك بحيث يمكن استدعاء python.
قم بتثبيت Cygwin 64 بت (https://www.cygwin.com/setup-x86_64.exe) تحديداً إلى C:\cygwin64. عند تثبيت Cygwin تأكد من تثبيت حزمتي autoconf و make.
اذهب إلى "تشغيل ميزات ويندوز أو إيقاف تشغيلها" وحدد مربع الاختيار بجانب "Hyper-V" و "Windows Hypervisor Platform". يتطلب هذا بالطبع أن يدعم جهاز الكمبيوتر الخاص بك Hyper-V.
تم التحقق من دليل التثبيت هذا على ما يلي:
تثبيت نظيف لويندوز 10، build 17763
rustc 1.33.0-nightly (8e2063d02 2019-01-07)
Microsoft (R) C/C++ Optimizing Compiler Version 19.16.27025.1 for x64
Visual Studio Community 2017 الإصدار 15.9.4
applepie commit `f84c084feb487e2e7f31f9052a4ab0addd2c4cf9`
Python 3.7.2 x64
git version 2.20.1.windows.1



autoconf)make)git clone https://github.com/gamozolabs/applepiepython build.py
قد تستغرق عملية البناء الأولية هذه حوالي دقيقتين، على جهاز حديث من المحتمل أن تكون 20-30 ثانية.
فقط قم بتشغيل python build.py من الدليل الجذر لهذا المشروع. يجب أن يتحقق من سلامة البيئة وكل شيء يجب أن "يعمل فقط".
قم بتشغيل python build.py clean لتنظيف ثنائيات Bochs و Rust.