
مُفَجِّر قائم على المعرفة التطورية
تهدف هذه الوثيقة إلى شرح النظرية وراء Choronzon بإيجاز. علاوة على ذلك، فهي تقدم تفاصيل حول مكوناته الداخلية وكيف يمكن للمستخدم توسيع Choronzon لتلبية متطلبات جديدة. تم تقديم نظرة عامة على بنية Choronzon لأول مرة في مؤتمر ZeroNights 2015. كما تتوفر تسجيل للعرض التقديمي وشرائح العرض.
Choronzon هو أداة اختبار تطورية. يحاول محاكاة العملية التطورية لمواصلة إنتاج نتائج أفضل. لتحقيق ذلك، لديه نظام تقييم لتصنيف أي من الملفات المختبرة مثيرة للاهتمام وأيها يجب التخلص منه.
علاوة على ذلك، Choronzon هو أداة اختبار قائمة على المعرفة. يستخدم معلومات معرفة من قبل المستخدم لقراءة وكتابة ملفات بصيغة الملف المستهدفة. للتعرف على مصطلحات Choronzon، يجب أن تعتبر أن كل ملف يمثله كروموسوم. يجب على المستخدمين وصف البنية الأولية لصيغة الملف قيد النظر. يُفضل نظرة عامة عالية المستوى لصيغة الملف بدلاً من وصف كل تفصيل وجانب منها. كل واحدة من هذه الهياكل الأولية المعرفة من قبل المستخدم تعتبر جيناً. كل كروموسوم يحتوي على شجرة من الجينات وهو قادر على بناء الملف المقابل منها.
ينقسم Choronzon إلى ثلاثة أنظمة فرعية: وحدة التتبع، وحدة الكروموسوم وأداة الاختبار.
باختصار، يُستخدم مكون الكروموسوم لوصف صيغة الملف المستهدفة. يمكن للمستخدمين كتابة وحداتهم الخاصة لدعم الصيغ الجديدة أو المخصصة. كمثال اختباري، يتم توفير وحدة PNG مع Choronzon.
من ناحية أخرى، يكون مكون التتبع مسؤولاً عن مراقبة التطبيق المستهدف وجمع معلومات متنوعة حول تنفيذه. يستخدم هذا الإصدار من Choronzon أداة التنقيح الثنائي Intel's Pin لتسجيل الكتل الأساسية التي تم زيارتها أثناء التنفيذ. ومع ذلك، فإن Choronzon قادر على دعم خلفيات تتبع أخرى أيضًا. ضع في اعتبارك أيضًا أنه في الإصدار التالي من Choronzon، سيتم استبدال Pin بسبب تأثيره الهائل على الأداء.
أخيراً، يُستخدم مكون المُختبر لتغيير محتويات الملفات المراد اختبارها. تحتوي الوحدة على مجموعة من المغيرات و معيدات التركيب. المغيرات، ببساطة، تقوم بتغيير الملف كما تفعل أدوات الاختبار الشائعة. على سبيل المثال، تقوم بقلب البايتات، تبديل البايتات، تحوير بايت عشوائي، وما إلى ذلك. لكن Choronzon لديه ميزة أخرى ليست شائعة بين أدوات الاختبار. معيدات التركيب تستخدم المعلومات حول هيكل صيغة الملف، المقدمة من وحدة الكروموسوم، لإجراء اختبار ذكي.
في الدليل chromosome/parsers يمكنك العثور على الملف PNG.py. تصف وحدة Python هذه صيغة ملف PNG لأداة الاختبار. يمكنك إضافة وحداتك المخصصة لصيغ الملفات الأخرى في هذا الدليل.
الفكرة الأساسية وراء النظام الفرعي الكروموسوم هي تحويل ملفات البذور الأولية باستخدام مفكك تسلسل إلى شجرة من الجينات. في مرحلة ما، سيتم كتابة الجينات (المُختبرة) في ملف، باستخدام مُسلسل.
ضع في اعتبارك أن الهدف من وحدة التحليل في Choronzon هو توفير البنية الأولية لصيغة الملف، بدلاً من كل التفاصيل الصغيرة. سيساعد ذلك أداة الاختبار على بناء ملفات سليمة في الغالب، مع تجنب الخروج المبكر من التطبيق المستهدف. بالإضافة إلى ذلك، يوفر هذا الأسلوب الوقت، لأن وصف كل جانب من صيغة الملف يستغرق وقتاً طويلاً ويقدم عبء تطوير كبير.
يجب على وحدة تحليل جديدة استيراد:
ويجب عليها تنفيذ
في المثال المُرفق مع Choronzon، كل PNGGene يتوافق مع قطعة PNG. بشكل عام، يمكنك اعتبار Gene على أنه بنية بيانات أولية للصيغة المستهدفة. كل Chromosome يتكون من شجرة من Genes، ويمثل ملفاً فريداً. كل Gene يجب أن يكون قادرًا على إنتاج سلسلة بايت تحتوي على بياناته مدمجة مع بيانات Genes الأدنى في الشجرة.
يجب أن يكون PNGSerializer قادرًا على إنتاج ملف (سليم في الغالب) عند إعطائه قائمة من Genes. من ناحية أخرى، يجب أن يكون PNGDeserializer قادرًا على تحليل ملف صحيح من الصيغة المستهدفة وإلغاء تسلسله إلى شجرة من Genes.
تحقق من chromosome/parsers/PNG.py للحصول على مثال مشروح لصيغة PNG.
يتم استخدام وحدة التتبع لتفكيك التطبيق المستهدف (و/أو واحد أو أكثر من مكتباته). في هذا الإصدار من Choronzon، يتم ذلك باستخدام IDA. استخدمنا هذا الأسلوب لأنه يمكننا ربط أي معلومات مثيرة للاهتمام من حملة الاختبار مع قواعد بيانات IDA الخاصة بنا. ومع ذلك، قد نتخلص من الاعتماد على IDA في المستقبل القريب لجعل Choronzon أكثر قابلية للنقل والوصول.
يتم اختبار ملف ضد تطبيق بمساعدة أداة Pin. في الدليل analyzer/coverage يوجد الكود المصدري لهذه الأداة Pin، التي تحقن خطافات في بداية كل كتلة أساسية في التطبيق المستهدف. عند انتهاء التنفيذ، نقوم بربط الكتلة الأساسية التي تم الوصول إليها مع الكتلة الأساسية من الثنائي. وبالتالي، نحن قادرون على حساب مقاييس قيمة لنا (التغطية إلخ).
يستخدم مكون المُختبر تمثيل الكروموسوم لاختبار ملف. كما ذكرنا سابقًا، هناك طريقتان للاختبار في Choronzon.
بالنسبة للطريقة الأولى، يحصل Choronzon على المحتوى من جين واحد أو أكثر ويطبق أحد المغيرات. المغيرات تنفذ طرق اختبار شائعة لكن فعالة مثل تحوير بايت عشوائي، تعيين البت العالي، تبديل البايتات، وغيرها الكثير. يمكنك أيضًا كتابة مُغيرات مخصصة وإضافتها في fuzzers/mutators.py.
الطريقة الثانية للاختبار تسمى إعادة التركيب. تُستخدم معيدات التركيب لتغيير بنية الملف. إليك مثال بصيغة PNG.
تتكون ملفات PNG من قطع متتالية تحتوي على أربعة حقول:
لنفترض أن لدينا ملف PNG يحتوي فقط على قطع IHDR وIDAT وIEND. ستبدو بنيته كما يلي:
[ PNG signature ] [ IHDR ] [ IDAT ] [ IEND ]
نظرًا لأن Choronzon على دراية بالهياكل الأساسية (أي قطع PNG)، فهو قادر على تغيير تسلسلها. بعد إعادة التركيب بنجاح، يمكن أن يبدو ملف PNG المُختبر الناتج كالتالي:
[ PNG signature ] [ IDAT ] [ IHDR ] [ IEND ]
يحتوي Choronzon على العديد من استراتيجيات إعادة التركيب التي تجعله قادرًا على التعامل حتى مع صيغ الملفات المعقدة.
تم اختبار Choronzon مع Python 2.7 وPin 3 وIDA Pro من 6.6 إلى 6.9 على Ubuntu 16.04 LTS (نواة لينكس 4.4) وWindows 10.
لتشغيله، ستحتاج إلى تثبيت حزمة Python sortedcontainers. يمكنك العثور عليها هنا أو تثبيتها عبر pip.
علاوة على ذلك، يحتاج Choronzon إلى IDA Pro (في الواقع، نسخته الطرفية). يجب تحديد مسار IDA Pro في ملف التهيئة الخاص بك كالتالي:
DisassemblerPath = 'C:\\Program Files (x86)\\IDA 6.6'
تم اختباره بنجاح مع IDA Pro 6.6 و6.7 و6.8 و6.9.
توجد أداة التغطية Pin الخاصة بـ Choronzon في analyzer/coverage ويجب تجميعها. قد ترغب في مراجعة وثائق Pin للحصول على التفاصيل، أو يمكنك تنفيذ الخطوات التالية:
coverage.cpp و makefile.rules إلى /path/to/pin/source/tools/MyPinToolmake. إذا كنت على Windows، يجب تشغيل سطر أوامر Visual Studio، واستخدام أداة make وتبعياتها من Cygwin/path/to/choronzon/analysis/coverage الدليل المنشأ حديثًا obj-intel64 (أو obj-ia32 للأنظمة 32 بت)من أجل الاختبار باستخدام Choronzon، يجب عليك توفير ملف تهيئة. في الدليل settings يوجد مثال لتهيئة Choronzon.